随着时间的推移,初级漏洞在流行软件里逐渐消失,因此漏洞发掘的方法也在进化。从简单的代码扫描、无格式简单二进制Fuzz,到复杂代码审计(自定义检测规则)、复杂二进制文件格式生成与Fuzz,发现的漏洞类型越来越复杂,但这并不代表使用方法的终结,好戏还在后头……
几个概念
漏洞发掘
在总结已有漏洞模式的基础上,通过人工或者自动化方法,对目标(软、硬件平台,网络应用等)进行新漏洞的发现及确认。
动态测试
通过人工或者自动化方法,通过运行软件来检验软件的动态行为和运行结果的正确性。
静态分析
无须执行被测对象,而是借助人工审查或者专用的软件测试工具,对被测对象的代码或者二进制镜像进行检测。
覆盖率
软件测试的一个度量,用以衡量运行代码占总代码的比例,覆盖率越高,测试的越充分。
漏洞发掘的常用手段
静态代码审计
在源代码可获得的前提下,通过人工审核或者自动化工具来进行代码检测。
比较有名的商业自动化工具有:
* Coverity:开发者前身来自于斯坦福大学,以研究程序Bug为主要方向,曾经找到Linux内核/MySQL/ Android等多种开源软件的许多Bug
* Fortify:生产专门用于目标安全的静态分析工具,客户包括美国国土安全部 、NASA等多家大型政府机构及商业银行。
* Klocwork:生产专门用于目标安全的静态分析工具,客户包括AMD、AOL、Cisco、Philips、QualComm等多家大型公司
* Prefast:内嵌在微软Visual Studio 2005之后的版本里,可以检测用户编程时遇到的不少问题 。
静态代码审计兼有静态分析和代码审计两者的特点:优点是分析面广,可在不考虑覆盖率和运行环境的情况下,能够发现很多潜在的问题;缺点也很突出,发现的问题不一定在真实环境里触发(不一定能运行到潜在的问题代码),对于没有源代码的很多商业程序也不适用。
特别声明:本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。