Coolsmurfs的博客

Wite one thousands words one day change my life


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 搜索
Coolsmurfs的博客

宇宙最强Fuzzing工具AFL系列篇一:windows平台编译和使用

发表于 2017-05-23

简介

一直以来都很崇拜能够挖到漏洞的大牛,尤其是系统底层漏洞或者二进制软件漏洞。一直想在这方面进行一点深入的研究,苦于自己能力有限,加上时有懒惰,因此一直没有什么进展。最近,刚好听了一些报告,也和在工业界的同学交流,了解了一款宇宙最前的模糊测试工具AFL(America Fuzzing Loop),一看名字挺像美国佬搞的,简单调研了一下,没找到出处,不再深入追究。既然是号称宇宙最前的Fuzzing测试工具,是否可以助我等小辈一臂之力呢?抱着无限期望,遂准备捣鼓一番。由于自己对windows上的二进制程序漏洞更加熟悉一些,因此准备在windows平台上进行环境搭建,并进行简单的测试。经过前期的调研,了解到已有这方面的大牛早已将其移植到windows平台,并发布了windows版本win-AFL。于是在前人的若干博客以及教程的指导下,开始依葫芦画瓢,准备自己研究一下。这篇博客中简单记录下在windows上的安装过程以及初步简单的使用,一方面记录下过程以及遇到的问题,为后续其他人安装有一个参考指导,其次也为自己的后续深入研究打下基础。

工具编译

在windows平台上搭建win-AFL,可以下载已经编译好的版本,也可以选择自己下载相关源码进行手动编译。为了更好的深入理解以及方便以后自己对源代码进行修改后编译,这里下载相关源码进行手动编译。相关的步骤如下:

  • 1 相关的工具的准备,在编译Winafl过程中,需要如下工具包:CMake跨平台编译工具。DynamoRIO这是一个开源的动态插桩工具,和pin、Valgrind等是在程序分析中经常使用的动态插桩工具。Winafl源码,Visual Studio C++,windows的开发工具。在下载相关工具时,需要选择好相应的windows版本,DynamoRIO应该直接下载源码版本。选择vs时最好选择VS 2010以后的版本,根据说明vs2010以后的版本不会出现stdint.h找不到的错误。这里我自己选择的的是VS2015的版本。
  • 2 将下载的工具解压到一个新建的文件夹中,如WIN-AFL.然后将winalf和DynamoRIO解压到该目录下。
  • 3 启动vs的命令行工具,根据需要进入不同的环境,如果是要编译32位版本的则进入32位环境,而编译64位的则需要进入进行64位环境。
  • 4 具体编译过程如下,进入Winafl的路径,有Bin32和Bin64目录,有已经编译好的工具。也可以进行重新编译。32位和64位具体编译步骤如下所示:
    32位编译命令:

md b32
cd b32
cmake .. -DDynamoRIO_DIR =D:\WIN-AFL\DynamoRIO\cmake
CMAKE -build . –config Release(这是时编译成Release版本,如果要编译成Debug可以将Release替换成Debug).
64位下相关编译命令如下:


md b64
cd b64
cmake -G “Visual Studio 10 Win64” .. -DDynamoRIO_DIR=D:\WIN-AFL\DynamoRIO\cmake
cmake –build . –config Release(如果需要编译成Debug,则使用Debug命令)

编译完成后,就可以开始使用Winafl了,编译后的文件分别在目录的Release或者Debug目录下。
本节主要简单描述了一些Winafl的源码编译过程,后面会逐步介绍一下Winafl在windows平台下的使用。希望通过系列文章,对Winafl不断熟悉,深入了解其内部机制。能够在漏洞挖掘的道路上越走越远。下节将记录Winafl的相关具体使用。

Coolsmurfs的博客

基于间接跳转峰度推断的ROP攻击检测

发表于 2017-05-03

论文名称:Inference of Peak Density of Indirect Branches to Detect ROP Attacks

论文引用: Tymburib, Mateus, Moreira R E A, et al. Inference of peak density of indirect branches to detect ROP attacks[C]// International Symposium on Code Generation and Optimization. 2016:150-159.

论文作者: Mateus Tymburibá Rubens E. A. Moreira Fernando Magno Quint˜ ao Pereira

论文摘要:


  • Return-oriented Programing(ROP)通常指的高频率的利用一系列包含简介跳转的指令来执行特定程序流程的方法。从这个观察点出发,很多研究都都提出了通过检测简介跳转指令的紧度(density)的方法来对ROP攻击进行检测。这些检测技巧都使用了一个通用的阈值:对于任何一个程序,刻画一个ROP攻击的间接跳转指令的紧度都是一样的。这篇论文论述了使用通用阈值的检测方法很容易被规避掉。因此我们引入了一种过程间的上下文半语义分析的静态代码分析方法来预测程序简介跳转的最大紧度值的方法。这种分析可以根据每个不同的分析来绝对其不同的简介跳转的阈值。因此使得攻击者很难绕过该保护措施。我们在LLVM上实践了我们的想法并且为 SPEC CPU2006的不同应用程序生成了不同的阈值。我们分析了我们方案的准确性通过实际执行程序获取不同响应阈值。另外,我们的算法还是实际的:该方案找到了一个近似的解决方案对理论上不可预测的值,在处理超过70万跳跳汇编指令的程序时该算法不超过25分钟。

    论文主要贡献


  • 作者说明了在windows系统上的ROP攻击检测中,通过每31条指令来分析简介跳转的紧度已经足够检测在windows平台上检测由exploit-db生成的15个rop攻击。
  • 在2.2节中我们展示了这种机制可以被绕过,根据编译选项来生成二进制文件。最后我们根据GCC的一些编译选项绕过了该策略的限制。
  • 在第3节中我们描述了一种通过静态分析程序来预测简介跳转峰值紧度的方法。通过这种特定的获取阈值的方法来代替传统的通过阈值的方法,我们分析了可以利用该方案设计一种检测机来提高针对2.2中所描述的攻击方案的门槛。

    自己的一些想法:

  • 该方法通过静态分析程序的方法来预测针对不同应用程序检测ROP攻击是的简介跳转的阈值问题,从而使得理论上不可预测的简介跳转的阈值问题得到了一个近视的解决方法。在实际上作者也进行了分析和讨论,有一定的创新,自己觉得还是存在一些问题的。该方法通过静态分析大量的程序来得到针对该程序检测ROP简介跳转的阈值,但是面对曾经没有分析过的程序时,那么将无法推测其阈值,因此在实际应用中还存在一些缺陷。
Coolsmurfs的博客

ROP DETECT

发表于 2017-04-26

论文名称:Detecting ROP with Statistical Learning of Program Characteristics

论文引用: Elsabagh M, Barbara D, Fleck D, et al. Detecting ROP with Statistical Learning of Program Characteristics[C]// ACM on Conference on Data and Application Security and Privacy. ACM, 2017:219-226.

论文作者: Mohamed Elsabagh Daniel Barbará Dan Fleck Angelos Stavrou

论文主要贡献:


  • 1 论文研究了结合微控制器独立程序特征以及典型的硬件特征相结合的ROP攻击检测方案。
  • 2 提出了一种利用方向统计特征并将其映射到高维空间的异常检测算法。
  • 3 实现的一个原型系统EigenROP.
  • 4 基于实际的ROP攻击检测来评估模型的安全效率以及准确性。
  • 论文

论文主要研究内容

论文讨论的核心内容是基于统计学习方法的ROP检测技术。论文作者首先分析了现有的ROP检测技术存在的一些缺陷,在此基础上提出了基于“微指令机构特征(Microarchitecture-independentCharacteristics)”统计来检测ROP的方法。
作者的出发点以及思路是认为ROP链的执行在行为特征上会与程序正常执行逻辑的特征不同。如ROP在执行过程中,会有频繁的ret、push/pop以及call指令执行等操作,而正常的程序逻辑上则不会频繁的出现这种特征。
基于以上思路出发,做作利用Intel开发的指令插桩工具pin对程序执行指令进行分析,通过间隔的对程序作快照(执行固定几条指令),然后将单个快照间隔内执行的n条指令组成一个向量空间,由于指令之间有相关性,因此作者这里通过将向量空间影射到高纬空间中,然后通过PCA主成分分析的方法来得到其主方向的角度。
作者认为,正常程序执行逻辑的一组指令组成的向量空间影射到高纬空间得到主成分后其方向性应该变化不大,而一组ROP指令执行后影射到高纬空间后得到的主方向会和正常程序执行得到的主方向有一个较大的偏离。
下图是作者的模型的一个示意图。:

Paste_Image.png

因此基于以上思想,作者首先通过对大量正常指令的学习后得到一个主方向,并得到其偏离的阀阈值。当进行检测时,如果一组执行执行后进行影射得到的高纬空间的主成分与事先得到的模型的主方向的之间的偏差超过阈值,则认为是一个异常。
最后作者进行了实验评估,作者通过评级准确率和时间消耗来评价模型。最后得到了81%的正确率。最后作者对影响实验结果的一些因素进行了讨论。
作者的一些实验结果:

Paste_Image.png

Paste_Image.png

一些建议和想法


  • 采用基于pin的方式来动态收集特征,如果漏洞触发条件不满足,那么将会导致检测失败,而在实际环境中,这种可能性经常发生,那么该方法将无法捕获到有效的攻击。
  • 该方法有一定的漏报率,如果在进行动态检测前,没有进行有效的静态检测分析,那么攻击代码实际运行将会导致攻击者面临很高的风险。
  • 该方法中提到的思路是对程序定期做快照的方式,那么这将导致很大延迟,在实际使用中将会受到限制。
  • 综合以上建议,一些想法则是能够根据静态的特征提取序列来对rop链进行检测,一方面对于一些在实际中不触发的漏洞也可以进行有效的检测,另外一方面则是从实际应用以及安全性上有更好的效果。layout: detecting
Coolsmurfs的博客

ROP DETECT

发表于 2017-04-26

论文名称:Detecting ROP with Statistical Learning of Program Characteristics

论文引用: Elsabagh M, Barbara D, Fleck D, et al. Detecting ROP with Statistical Learning of Program Characteristics[C]// ACM on Conference on Data and Application Security and Privacy. ACM, 2017:219-226.

论文作者: Mohamed Elsabagh Daniel Barbará Dan Fleck Angelos Stavrou

论文主要贡献:


  • 1 论文研究了结合微控制器独立程序特征以及典型的硬件特征相结合的ROP攻击检测方案。
  • 2 提出了一种利用方向统计特征并将其映射到高维空间的异常检测算法。
  • 3 实现的一个原型系统EigenROP.
  • 4 基于实际的ROP攻击检测来评估模型的安全效率以及准确性。
  • 论文

论文主要研究内容

论文讨论的核心内容是基于统计学习方法的ROP检测技术。论文作者首先分析了现有的ROP检测技术存在的一些缺陷,在此基础上提出了基于“微指令机构特征(Microarchitecture-independentCharacteristics)”统计来检测ROP的方法。
作者的出发点以及思路是认为ROP链的执行在行为特征上会与程序正常执行逻辑的特征不同。如ROP在执行过程中,会有频繁的ret、push/pop以及call指令执行等操作,而正常的程序逻辑上则不会频繁的出现这种特征。
基于以上思路出发,做作利用Intel开发的指令插桩工具pin对程序执行指令进行分析,通过间隔的对程序作快照(执行固定几条指令),然后将单个快照间隔内执行的n条指令组成一个向量空间,由于指令之间有相关性,因此作者这里通过将向量空间影射到高纬空间中,然后通过PCA主成分分析的方法来得到其主方向的角度。
作者认为,正常程序执行逻辑的一组指令组成的向量空间影射到高纬空间得到主成分后其方向性应该变化不大,而一组ROP指令执行后影射到高纬空间后得到的主方向会和正常程序执行得到的主方向有一个较大的偏离。
下图是作者的模型的一个示意图。:

Paste_Image.png

因此基于以上思想,作者首先通过对大量正常指令的学习后得到一个主方向,并得到其偏离的阀阈值。当进行检测时,如果一组执行执行后进行影射得到的高纬空间的主成分与事先得到的模型的主方向的之间的偏差超过阈值,则认为是一个异常。
最后作者进行了实验评估,作者通过评级准确率和时间消耗来评价模型。最后得到了81%的正确率。最后作者对影响实验结果的一些因素进行了讨论。
作者的一些实验结果:

Paste_Image.png

Paste_Image.png

一些建议和想法


  • 采用基于pin的方式来动态收集特征,如果漏洞触发条件不满足,那么将会导致检测失败,而在实际环境中,这种可能性经常发生,那么该方法将无法捕获到有效的攻击。
  • 该方法有一定的漏报率,如果在进行动态检测前,没有进行有效的静态检测分析,那么攻击代码实际运行将会导致攻击者面临很高的风险。
  • 该方法中提到的思路是对程序定期做快照的方式,那么这将导致很大延迟,在实际使用中将会受到限制。
  • 综合以上建议,一些想法则是能够根据静态的特征提取序列来对rop链进行检测,一方面对于一些在实际中不触发的漏洞也可以进行有效的检测,另外一方面则是从实际应用以及安全性上有更好的效果。layout: detecting
Coolsmurfs的博客

深度学习系列1-人工智能发展现状

发表于 2016-12-11 | 分类于 深度学习

人工智能发展现状


随着人类科技的不断进步发展,人工智能近年来整个各个领域大放异彩,并且取得很好的效果。随着谷歌alphagao狗打败韩国围棋高手李世石,可以说将人工智能推向了一个新的高峰,仿佛人类似乎已经达到了人工智能的新时代,未来机器将会比人更加聪明并且代替人类来完成许多事情。近年来人工智能确实在很多领域取得突破,并且在很多方式上改变了人类的生活方式。为了初略了解人工智能的发展现状,这里根据2016年世界互联网大会中网易发布的报告《乌镇指数:全球人工智能发展报告2016》进行了相关的统计,来揭示人工智能的最新发展现状。这里主要根据其中的精华篇来分人工智能的发展做一个简单的分析和总结。该篇从人工智能企业在国内外分布状况、人工智能发展动力、人工智能资金投入、人工智能全球企业专利申请状况、以及进行人工智能研究的高效和企业等多个方面论述了人工智能的发展状况。

国内外人工智能企业分布情况对比


通过以下图片就可以了解到人工智能企业分别在国内外分布情况以及中美两国的差距:

从图中可以看出美国的人工智能企业数量为2905家,而中国仅仅为1155家,想比于美国,中国还有很多的差距。而在中国的人工智能企业分布中,主要分布为北京、上海和深圳居多,主要以别上广深等大城市为主,而在中国的西部,成都是唯一的西部城市中由于人工智能企业分布较多而排名第七。

##中美两国人工智能申请专利对比
报告中统计了从2001年以来,中美两国在人工智能专利申请方面的比较,下面来自于报告中的截图。

从图中分析可知,从2011年开始,人工智能专利申请就呈井喷式增长,这说明人工智能在这几年发展迅速,在2011年以前,美国人工智能申请数量超过中国,而2011年以后则中国的人工智能专利申请超越了美国。

##人工智能企业在中国的分布状况解析
人工智能企业在中国的分布主要以北上广深以及沿海城市分布为主。报告从AI专利影响力,AI企业影响力和AI企业融资影响力三个方面来进行了排名。下面的统计数据截图:

从图中可以看出北京、广东排在前两位,而西部AI重镇则是成都和重庆。

##人工智能细分领域专利申请数量分析
人工智能专利申请目前主要集中在机器人、计算机视觉、机器学习和自然语言处理三个方面。报告统计了中美两国人工智能专利申请数量在四个细分领域的分布情况。

可以看到排在首位的是机器人行业,其次是计算机视觉。

人工智能与各学科相关性

报告统计了人工智能与各个学科的相关性,从统计结果看出人工智能与各个学科都有较强的相关性,包括心理学,逻辑学以及物理学。由于人工智能在很多领域的研究都是研究人类在认知外部世界的过程作为基础,因此人工智能与各个学科都有联系。

从统计中可以看到,与人工智能关系最紧密的学科依次是计算机科学,逻辑学,心理学和数学。

人工智能研究全球大学排名

报告统计了人工智能研究领域的大学排名,在全世界排名前20的大学中,美国有16所学校入围,英国有3所高校上榜。

排在最前的是美国的麻省理工学院。
而在中国的大学排名中,排在最前的是清华大学,下图是中国大学排名:

人工智能专利和论文发表影响力排名

在人工智能专利影响力排名中,在全世界排名范围中主要是以国外一些大的互联网企业为主,如微软、IBM和Google等大公司。

而在论文发表影响力方面,也是一些大型互联网公司排名靠前。

总结

从统计可以看出,人工智能从2011年开始后就逐渐迅速发展起来,目前在各个领域都被广泛应用,并且取得了很好的效果,就目前国外内的发展情况来看,我国相比于美国等国家依然处于落后状态。但从专利申请来看我们国家在2011年后也逐渐开始赶超上美国并在逐渐超越,人工智能未来将在各个行业大方异彩,并且取得更进一步的发展。

Coolsmurfs的博客

基于机器学习的恶意代码检测

发表于 2016-12-10 | 分类于 信息安全

文章来源:网络技术博客

文章标题:detecting-malware-pre-execution-static-analysis-machine-learning(使用静态分析和机器学习来检测恶意软件的预执行)

文章发表时间:2016年

文章解析

  • 1 文章摘要

该文章是一篇来自于网络博客的文字,主要是了基于现有的静态特征检测的动态检测方法面临的缺陷,提出了通过机器学习方法来进行可执行文件检测的框架模型。相比于动态检测,作者认为静态检测更加有优势,但是目前静态检测在特征提取上面临着较大缺陷,从而导致静态检测只能检测已有特征的恶意样本,而对未知文件检测难度较大,另外现在大量的样本经过混淆和加壳处理,导致静态检测提取特征困难。因此作者利用静态文件的文件结构作为相关的特征,利用机器学习的方法来进行模型的训练,最后并利用该模型来进行恶意文件的检测,并取得了很好的效果。

  • 2 文章主要内容

文字主要分为三部分,第一部分论述了静态检测的优势和缺陷,第二部分重点论述了随机森林机器学习的相关知识,第三部分则是论述了如何进行特征的提取和选择,第四部分则是论述了实验结果。

第一部分:作者首先论述了静态检测的缺点和优势,静态检测的优点有如下:

1
2
3
4
$ 能够在可执行文件执行前进行检测
$ 能够对一些C&C域名已经失效的样本进行分析
$ 能够对一些不是标准的非有效的可执行文件进行检测
$ 计算代价较低

在同样静态检测具有的缺点如下:

1
2
3
4
$ 检测结果无法依赖于确定的行为。
$ 无法检测在内存中发生的行为。
$ 不太可能检测的原始的威胁。
$ 很容易被开发者找到相应的对策来绕过。

第二部分:作者论述了机器学习在恶意样本检测中的应用,机器学习就是通过构建一个预测模型来对恶意软件进行分类,是属于一个二分类问题,在机器学习模型训练中,通过大量的各种类型的恶意的正常的样本作为训练数据来进行训练,通过提取出这些训练样本中提取出样本数据的特征,将这些特征输入模型进行训练然后得到模型的参数,当模型构建好后便可以利用模型来对新的没有标签的样本进行预测,模型通过自动提取出这些测试样本的特征并根据模型得到该样本的一个分类结果,从而判定样本是恶意的还是非恶意的。利用样本来训练机器学习模型的过程如下:机器学习模型
当模型训练完成后,并可以利用该模型来对新的样本进行检测,利用模型来进行检测过程如下:
检测过程

机器学习有多种选择算法,这里作者选择了随机森林算法(Randomo Forest)。而随机森林算法的好处是具有很好的效果并且不需要过多的对模型参数进行调整,即使针对于大量的特征。作者在这里对随机森林进行了一个解释,其使用的例子是通过一些特征来对毛和狗进行辨识的。其主要选取特征有如下:
number of legs,covered in fur,sometimes goes outdoors,loves your.在随机森林选择算法中,就是通过在一棵类似的分类数中通过,不断的条件满足于否来最后进行分类,作者花了一个示意图:
随机森林在毛和狗辨别。

第三部分:这里作者论述了如何从可执行文件中选取特征,作者在选择特征是是通过对PE(Portable Executables)文件进行解析来进行特征提取,在这些特征中,一些事一些字符串类型的特征(.text,Code,bss)而一些事一个浮点数或者二进制类型的0或者1的数据,针对字符串和浮点数作者则是通过将浮点数转换成对应的熵(entropy)来进行计算。
在实验中,作者选择的特征的维度达到了1,000,000维,由于维度较大,由于维度较大,因此存在着较多的噪声,因此作者利用了PCA主成分分析方法来进行了特征的降维,从而可以加快模型训练时间和让模型预测准确率提高。PCA主成分分析具体内容链接参考:PCA主成分分析,这里面论述很清楚。
除了利用PCA进行降维度外,作者还进一步进行了特征的选择,通过去掉一些不相关的特征从而让数据维度进一步降低,在特征选取上,作者通过计算ANOVAF-value,ANOVAF-value值,并通过设定阈值来进行特征的选取,从而作者将维度降低到了31000个维度特征。
为了进一步开发静态检测系统,作者通过进一步的搜集新的正常的和恶意的样本来进行进一步的训练,并进一步选择更多的特征来进行特征的选取,从而是模型有更好的准确率,能够对未知的恶意样本进行准确的检测。

在第四部分中,作者论述了为何选择了随机森林模型以及如何进行参数调整。在初始实验室,作者实验了一些听起来比较高级和智能的模型,如SVM(支持向量机),MLP(多层感知机),但是在实验时作者并未取得很好的效果,作者也没有进一步深入分析原因,最后作者经过实验选择了随机森林的机器学习算法来进行模型的算法,并取得了很好的效果。在选择好模型后,作者需要对模型的参数进行调整,在进行参数调整时,作者通过利用grid searching技巧来对模型进行训练和调整相关的参数。最后做了画了相关的实验室结果图。
实验结果图
最后作者进行了相关的总结。

  • 3 论文创新点:
    在论文中,作者通过分了了静态恶意样本检测分析的不足,提出了利用机器学习算法来进行恶意样本的检测,并通过将样本的文件结构信息作为特征进行模型训练,从而取得了很好的效果

总结

通过阅读论文,了解了机器学习在恶意样本检测的中的应用,正如作者所说,通过利用机器学习来方法来对恶意样本进行检测能够比动态检测能有更好的效果。从而能够更好的保护我们的客户免受网络攻击。

Coolsmurfs

Coolsmurfs

6 日志
2 分类
5 标签
GitHub 微博
Links
  • SecWiki
  • 四川大学信息安全研究所
© 2016 - 2017 Coolsmurfs
由 Hexo 强力驱动
主题 - NexT.Mist