(6.1)--09:第六章漏洞挖掘.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《(6.1)--09:第六章漏洞挖掘.pdf》由会员分享,可在线阅读,更多相关《(6.1)--09:第六章漏洞挖掘.pdf(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章漏洞挖掘知识点一:静态安全检测方法知识点二:静态安全检测实践知识点三:动态检测方法知识点四:动态检测实践漏洞挖掘漏洞挖掘软件安全检测技术静态安全检测技术动态安全检测技术动静结合安全检测技术方法:词法分析、符号执行、数据流分析等适用于:源代码检测、可执行代码的检测不需要运行程序方法:模糊测试、智能模糊测试、动态污点跟踪需要运行程序挖漏洞前,先思考一下漏洞怎么产生的?如何挖漏洞?检测特征函数、关注输入和检查边界缓冲区溢出漏洞(1)部分函数不对数组边界条件和函数指针引用等进行边界检查-危险函数(2)程序员没有对边界进行检查整数溢出漏洞(1)整数存在大小范围、存储范围,(2)忽略边界检查,导致存
2、储时溢出、运算时溢出等知识点一:静态安全检测方法静态安全检测技术定义:是针对未处于运行状态的软件所开展的安全分析测试技术。典型方法:词法分析、数据流分析、污点传播、符号执行、模型检查、定理证明等。优势:不需要构建代码运行环境,分析效率高,资源消耗低。缺点:存在较高的误报率。词法分析1词法分析通过对代码进行基于文本或字符标识的匹配分析对比,以查找符合特定特征和词法规则的危险函数、API或简单语句组合。优点:能够开展针对词法方面的快速检测,算法简单,检测性能较高缺点:只能进行表面的词法检测,而不能进行语义方面的深层次分析,因此可以检测的安全缺陷和漏洞较少,会出现较高的漏报和误报,尤其对于高危漏洞无
3、法进行有效检测。词法分析检测工具包括Checkmarx和ITS4等数据流分析2数据流分析技术是通过分析软件代码中变量的取值变化和语句的执行情况,来分析数据处理逻辑和程序的控制流关系,从而分析软件代码的潜在安全缺陷。数据流分析首先将代码构造为抽象语法树或程序控制流图,接着追踪获取变量的变化信息,描述程序的运行行为,进而根据事先定义的安全规则检测出安全缺陷和漏洞。数据流分析适合检查因控制流信息非法操作而导致的安全问题,如内存访问越界、常数传播等。由于对于逻辑复杂的软件代码,其数据流复杂,并呈现多样性的特点,因而检测的准确率较低,误报率较高。但是该方法具有较高的可行性,并且可实现针对大规模代码的快速
4、分析,因此广泛应用于商业的源代码安全性分析工具中。Coverity、Klockwork等商业工具均使用了该技术进行源代码安全检测污点传播分析3污点传播分析技术是通过分析代码中输入数据对程序执行路径的影响,以发现不可信的输入数据导致的程序执行异常。污点数据为需要进行标记分析的输入数据,污点传播首先对污点数据进行标记,并静态跟踪程序代码中污点数据的传播路径,发现使用污点数据的不安全执行路径,进而分析出由于非法数据的使用而引发的输入异常类漏洞。污点传播分析的核心是分析输入参数和执行路径之间的关系,它适用于由输入参数引发漏洞的检测。污点传播分析技术具有较高的分析准确率,然而针对大规模代码的分析,由于路
5、径数量较多,因此其分析的性能会受到较大的影响。Pixy是使用该技术的典型软件工具。符号执行有代价小、效率高的优点,然而由于程序执行的可能路径随着程序规模的增大呈指数级增长,从而导致符号执行技术在分析输入和输出之间关系时,存在一个路径状态空间的爆炸问题,路径爆炸问题在现有计算能力的条件下很难解决。由于符号执行技术进行路径敏感的遍历式检测,当程序执行路径的数量超过约束求解工具的求解能力时,符号执行技术将难以分析。符号执行是指在不实际执行程序的前提下,将程序的输入表示成符号,根据程序的执行流程和输入参数的赋值变化,把程序的输出表示成包含这些符号的逻辑或算术表达式的一种技术。通过符号执行技术获得了程序
6、输出和输入之间关系的算术表达式,可通过约束求解的方法获得能得出正常输出结果的输入值的范围。不能得到正常输出的输入值,或者输入值范围的边界点,则是触发程序输出异常结果的潜在输入点,是进行安全性检测的重要检测区域。符号执行4使用了符号执行进行源码检测的工具有EXE、SAGE、SMART以及KLEE等。模型检验对于路径和状态的分析过程可以实现全自动化;但是由于穷举所有状态,所以同样存在计算能力受限的问题。由于模型检验技术面临着状态空间爆炸的问题,在对大型复杂软件的漏洞挖掘方面仍处于探索阶段。此外,对时序、路径等属性,在边界处的近似处理难度也较大。模型检验是将程序的执行过程抽象为状态迁移的模型,采用状
7、态迁移过程中安全属性的验证来判断程序的安全性质。模型检验技术首先将软件构造为状态机或者有向图等抽象模型,并使用模态/时序逻辑公式等形式化的表达式来描述安全属性,然后对模型进行遍历以验证软件的这些安全属性是否满足。模型检验5微软公司的SLAM项目是典型的代表性工具。通过查找符合特定特征和词法规则的危险函数、API或简单语句组合,来发现漏洞的挖掘方法是词法分析符号执行模型检验污点传播ABCD提交单选题1分知识点二:静态安全检测实践静态安全检测的应用源代码检测可执行文件检测由于源代码中的变量赋值明确,程序流程清晰,逻辑关系明了,采用静态安全检测技术容易深入进行数据流的分析,并且可以全面地考虑执行路径
8、的信息,能够有效的发现漏洞。只能对可执行代码反汇编后得到的汇编代码进行检测,而汇编代码中多是寄存器之间数值的操作,没有明确的语义信息,上述静态安全检测技术往往分析效率低下,误报率较高。为了对可执行文件进行基于程序语义的安全检测,需要先对程序进行反汇编得到汇编代码,再将汇编代码转换为中间语言,进而对得到的部分语义信息进行缺陷和漏洞的检测。两种中间语言是二进制插装平台Binnavi中使用的REIL和动态插装平台Valgrind中使用的VEX。基于词法分析和逆向分析的可执行代码静态检测实践1核心思想:根据二进制可执行文件的格式特征,从二进制文件的头部、符号表以及调试信息中提取安全敏感信息(识别危险函
9、数),来分析文件中是否存在安全缺陷。由Data-Rescue公司开发的IDAPro是一款备受业内人士青睐的的反汇编工具,通过使用IDA Pro提供的函数调用信息和代码引用信息,可以定位程序中调用strcpy、memcpy、sprintf等危险函数的代码位置,再通过分析传入的参数信息判断是否存在缓冲区溢出漏洞或者格式化字符串漏洞。对于findoverflow.exe,是通过vc6代码生成的Release版本:实验一:基于IDA Pro分析给定的可执行文件是否存在溢出漏洞#include#include void makeoverflow(char*b)char des5;strcpy(des,b
10、);void main(int argc,char*argv)if(argc1)if(strstr(argv1,overflow)!=0)makeoverflow(argv1);elseprintf(usage:findoverflow XXXXXn);要分析可执行文件的溢出漏洞的话,基本遵循的步骤如下:第一步使用逆向分析工具,比如IDA,得到其反汇编后的执行代码;第二步定位敏感函数,也就是容易出现溢出的函数,比如memcpy、strcpy等;第三步判断栈空间大小、参数大小,分析是否存在溢出的可能。第一步:使用IDA打开所生成的exe文件通过该视图,可见,主要有一个main函数,在该函数中可能
11、有跳转,调用了sub_401000函数、_strstr函数和_printf函数。此外,还定义了两个字符串常量,aUsageFindoverf,在其上点右键-Text view,可以看到:打开main函数汇编代码如下:的作用是什么?的作用是什么?是什么方式寻址?是什么方式寻址?为何要加为何要加4?之前为什么要将?之前为什么要将esi入栈?入栈?ESI已经是已经是argV的值,指针的值,指针+4,相当于,相当于argV1的地址的地址通常在IDA的反汇编中,arg_x表示函数参数x的位置,var_8表示局部变量的位置;是内存寻址,x+arg_x通常表达的就是arg_x的地址值。由release和de
12、bug生成的汇编代码是截然不同的,release版本非常简洁,执行效率优先,debug版本则基本严格按照语法结构,而且增加了很多方便调试的附加信息。注意在main函数当前的栈帧结构中,当前esp是处于栈顶位置,按照main函数调用的过程,应该是push envp;push argv;push argc;push address;call main。也就是说,argc表示的是第一个参数argc的位置为esp+argc。因为中间有一个返回地址address。第二步:定位敏感函数 一个输入参数arg_0,一个局部变量var_8。通过“lea edx,esp+8+var_8”和“mov edi,edx
13、”可知,向目标寄存器存储了目标字符串的地址,为局部变量var_8;通过“mov edi,esp+10h+arg_0”以及后面的“mov esi,edi”,可知,将函数的输入参数作为源字符串。那么到底是否发生了溢出呢?在主函数中,Printf函数无任何格式化参数存在。因此,存在敏感函数的可能在于sub_401000函数中,打开该函数的代码如左图:通过“sub esp 8”可以知道栈大小为8,因此,函数的局部变量var_8的大小最大就是8。这样的话,可以得到sub_401000函数的代码结构大致如下:如果输入的字符串的长度大于8,就可能发生溢出了需要验证。为什么是8,二不是源代码里的5?打开DOS
14、对话框,运行示例程序,如果不给任何参数的话,会提示:usage:findoverflow XXXXX如果输入参数,比如:findoverflow ssssssssss。却可以运行成功。这是为什么呢?回顾逆向的反汇编代码,可以知道:由于程序需要先判断是否包含子串overflow,因此,需要构造的输入需要满足这个条件。Bugscam是一个IDA工具的idc脚本的轻量级的漏洞分析工具,通过检测栈溢出漏洞的诸如strcpy,sprintf危险函数的位置,然后根据这些函数的参数,确定是否有缓冲区漏洞。实验二:使用Bugscam脚本来替代手工过程完成漏洞挖掘#include#include void vu
15、l(char*bu1)char a200;lstrcpy(a,bu1);printf(%s,a);return;void main()char b1024;memset(b,l,sizeof(b);vul(b);Bugscam是一个十年前写的对于strcpy等函数的自动化漏洞检测脚本,是一个压缩文件,在看雪安全论坛仍然可以下载,网址为:http:/ idc/bugscam/libaudit.idc修改为#include./libaudit.idc。在bugscam路径下可以看到libaudit.idc文件,将其中的#include bugscam/globalvar.idc修改为#includ
16、e globalvar.idc。实验二:使用Bugscam脚本来替代手工过程完成漏洞挖掘2、启动ida,加载任意一个x86程序文件(本例为idc.exe),然后打开脚本文件run_analysis.idc,运行即可,等待分析完毕,最后的分析报告结果保存在reports目录中的html文件中。实验二:使用Bugscam脚本来替代手工过程完成漏洞挖掘其中,Severity是威胁等级,越高说明漏洞危险级别越高。本例的程序中,lstrcpyA函数存在溢出漏洞,地址401010处的代码可能将向目标203字节的区域写入1024字节的数据。知识点三:动态检测软件动态安全检测技术是针对运行中的软件程序,通过构
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 6.1 09 第六 漏洞 挖掘
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内