程序代码漏洞分析技术之静态分析

            一般来说,社会最关心的是程序的正确性。近年来,应用程序的代码量急剧增加。据预测,未来十年,人们编写的程序代码将超过1万亿行。早些时候,科学家们提出了程序验证方法,主要是通过程序推理或穷举。一般来说,验证程序的方法通常是通过推理和计算。由于程序使用的语言复杂性高,程序尺寸相对于程序的复杂性是指数级趋势,程序的正确性不能一概而论。因此,即使有一定经验的用户只使用程序验证方法也需要相当多的时间,软件的生产效率也不一定会提高。

静态分析技术主要是指在不执行代码的情况下评估程序代码的技术。静态分析工具的各种分析方法差别很大,其中可能采用符号执行等方法。目前,一些静态分析测试项目,如Prefix,使用符号执行和约束解决技术来实现代码的静态分析,并将其转换为源代码中的抽象语法树,然后通过程序调用关系进行比较,实现拓扑排序,抽象为模型,通过静态模拟和约束解决方案进行静态检测和分析。如果程序不运行,静态分析技术将进行词法分析、语法分析和语义分析,以检测目标程序中的潜在安全漏洞。从技术发展的角度来看,编译技术发展到静态分析技术,其许多技术和思想都来自编译技术。通常,程序中存在的弱安全函数和缺陷的代码片段是静态分析技术检测的重点,可用于以下过程:查找目标程序中的缺陷;编译和优化目标程序;与动态分析技术相匹配。静态分析技术可以特别检测未进行或错误边界检查的函数调用、大数操作、用户提供的输入函数等操作。

二进制和源代码分析技术是常见的漏洞分析技术。其中,二进制比源代码分析在探索程序安全漏洞方面有更好的效果。通常分析人员对二进制程序有优秀的逆向分析技术,需要使用IDAPro反汇编工具等相应的辅助软件来简化分析过程。IDAPro是一种优秀的交互式反汇编工具,用途丰富。反汇编后可以生成可识别的关键函数汇编代码,但需要丰富的经验和耗时。程序的缺陷可以通过静态分析技术进行脚本化扫描,反编译人员不需要关心如何实现程序,也适用于自动化程序安全分析工具。但静态分析技术本身存在较大缺陷,动态安全漏洞无法检测;检测结果误报率高。目前软件的静态分析技术一般分为基本分析、指向分析、基于形式化方法的分析等辅助方法。

分享: