2024年3月10日发(作者:)
浅析漏洞挖掘技术
软件测试过程就是一个寻找bug的过程。基于安全性的bug即是漏洞。本
文简单分析了一下漏洞的概念,并着重讲述了漏洞挖掘技术的两种方法——Fuzz
测试和对源代码的静态分析。
标签: 漏洞挖掘 Fuzz测试 静态分析
随着现代软件工业的发展,软件规模不断扩大,软件内部的逻辑也变得异常
复杂。为了保证软件的质量,测试成了极为重要的一环。人们花费了大量的资源
对软件进行测试。即便如此,不论从理论上还是工程上都没有任何人敢声称能够
彻底消灭软件中所有的逻辑缺陷——bug。
在形形色色的软件逻辑缺陷中,有一部分能够引起非常严重的后果。人们把
那种能够引起软件做一些“超出设计范围的事情”的bug称为漏洞(vulnerability)。
常见的漏洞包括软件中的缓冲区溢出漏洞、网站中的跨站脚本漏洞(XSS)、
SQL注入漏洞等。
一、利用漏洞进行攻击的方法
利用漏洞进行攻击可以大致分为漏洞挖掘、漏洞分析、漏洞利用三个步骤。
这三部分所用的技术有相同之处,比如都需要精通系统底层知识、逆向工程等;
同时也有一定的差异。
1.漏洞挖掘。安全性漏洞往往不会对软件本身功能造成很大影响,因此很难
被QA工程师的功能性测试发现,对于进行“正常操作”的普通用户来说,更难体
会到软件中的这类逻辑瑕疵了。
2.漏洞分析。一般情况下,我们需要调试二进制级别的程序,以便进行漏洞
分析。在分析漏洞时,可以使用调试器或者补丁比较器,以及一些反汇编工具(如
IDA Pro)来进行。
漏洞分析需要扎实的逆向基础和调试技术,除此以外还要精通各种场景下的
漏洞利用方法。这种技术更多依靠的是经验,很难总结出通用的条款。
3.漏洞利用。漏洞利用技术已经应用于多种主流的操作系统和编译环境下,
主要利用内存漏洞(堆栈溢出)和Web应用漏洞(脚本注入)等来进行。
二、漏洞挖掘技术解析
作为攻击者,除了精通各种漏洞利用技术之外,要想实施有效的攻击,还必
须掌握一些未公布的0day漏洞;作为安全专家,他们的本职工作就是抢在攻击
者之前尽可能多地挖掘出软件中的漏洞。
由于安全性漏洞往往有极高的利用价值,例如,导致计算机被非法远程控制,
数据库数据泄漏等,所以会引起很多攻击者的注意,并愿意花费精力去搜寻漏洞。
寻找漏洞的人并非全是攻击者。大型的软件企业也会雇用一些安全专家来测
试自已产品中的漏洞。
从技术角度讲,漏洞挖掘实际上是一种高级的测试(QA)。学术界一直热衷
于使用静态分析的方法寻找源代码中的漏洞;而在工程界,不管是安全专家还是
攻击者,普遍采用的漏洞挖掘方法是fuzz,这是一种黑盒测试。另外,还有一种
静态分析方法也比较常用。
三、Fuzz测试
Fuzz测试与基于功能性的测试有所不同,Fuzz的主要目的是“crash”、
“break”、“destroy”。
Fuzz的测试用例往往是带有攻击性的畸形数据,用以触发各种类型的漏洞。
Fuzz往往可以触发一个缓冲区溢出漏洞,但却不能实现有效的exploit,测试人
员需要实时地捕捉目标程序抛出的异常、发生的崩溃和寄存器等信息,综合判断
这些错误是不是真正的可利用漏洞。
Fuzz测试最早是由Barton Miller、Lars Fredriksen和Bryan So在一次偶然的
情况下想到的。富有经验的测试人员能够用这种方法crash大多数程序。
Fuzz的优点是迅速、准确,基本上不会出现错报;缺点是Fuzz不保证能够
找出系统里所有的漏洞。
File Fuzz就是这种利用“畸形文件”测试软件鲁棒性的方法。您可以在Internet
上找到许多用于File Fuzz的工具,抛开界面、运行平台等因素不管,一个File Fuzz
工具大体的工作流程包括以下几步。
1.以一个正常的文件模板为基础,按照一定规则产生一批畸形文件。
2.将畸形文件逐一送入软件进行解忻,并监视软件是否会抛出异常。
3.记录软件产生的错误信息,如寄存器状态、栈状态等。
4.用日志或其他UI形式向测试人员展示异常信息,以进一步鉴定这些错误
是否能被利用。
四、静态分析方法
对于攻击者来说,他们非常热衷于使用fuzz工具,因为他们只要找到漏洞
就可以了。
研究安全问题的学者则不同,他们更关心如何能够检测出所有的漏洞(尽管
这是不可能的)。因此,学术界偏向于对源代码进行静态分析,直接在程序的逻
辑上寻找漏洞。这方面的方法和理论有很多,比如数据流分析、类型验证系统、
边界检验系统、状态机系统等。
目前,已经出现了一些通过审计源代码来检测漏洞的产品,如:
y在编译阶段扫描若干种安全风险。
Auditing Tool for Security(R.A.T.S)用于分析C/C++语言的语法树,
寻找存在潜在安全问题的函数调用。
(Bugs Errors And Mistakes)IBM研究院研发出的静态代码分析工具
使用数据流分析的方法,分析源代码的所有可执行路径,以检测代码中潜在的
bug。
使用先进的算法,用于检测驱动中的bug。
Finder用Python语言开发的代码分析工具。
可以审计多种语言的源代码,审计的漏洞类型超过30种。
静态分析方法实际上是一种白盒测试。
静态代码分析技术有一个缺点,那就是经常会产生大量的误报。使用白盒测
试方法的以QA工程师居多。
参考文献:
[1]王 清:0day安全:软件漏洞分析技术.北京:电子工业出版社,2008
[2]软件加密技术内幕.北京:电子工业出版社,2004


发布评论