发布时间:2020-07-30
代码静态分析技术从本质上来说,就是在程序不执行的情况下,利用分析技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可维护性等指标的一种代码分析技术;从另一层面上说,是白盒测试的一种测试方法。大家如果想要了解静态分析技术的话,下面的一些知识是一定不能够错过的。
基础知识
定义:是在不执行计算机程序的条件下,对源代码进行分析,找出代码缺陷。
执行方式:一般配合静态程序分析工具进行。
采用技术:数据分析流,机器学习,语义精简。
可检测类型:死锁,空指针,资源泄漏,缓存区溢出,安全漏洞,竟态条件。
用途:程序翻译/编译,程序优化重构,软件缺陷检测等。
对比:程序动态分析:需要实际执行程序
程序理解:静态分析这一术语一般用来形容自动化工具的分析,而人工分析则往往叫做程序理解。
优点:
1、能够检测所有的代码级别可执行路径组合,快速,准确。
2、直接面向源码,分析多种问题。
3、在研发阶段开始找到并修复多种问题,节省大量时间,人力成本
(注意:静态分析不是万能的,测试是持续的过程)
静态分析的对象是windows内核模块,第三方驱动程序等不开源的二进制代码。
1、首先需要通过反汇编工具对模块进行处理,生成相应的汇编代码,然后在此基础上分析,检查程序的语法,结构,过程,接口等,恢复和重建程序的数据类型,结构和框架,验证程序功能,逻辑是否正确。
2、在静态分析过程中,关键的地方是要做到准确提取信息,不论是源程序还是二进制程序,利用静态分析技术都可以从中提取出控制流,表达式,接口和数据流等相关的信息。
3、由于程序本身可以看作是抽象的,复杂的数据结构集合,因此程序的静态分析技术主要是根据从程序中提取的相关信息,从不同角度对程序的数据结构进行重构,根据模型推导数据之间的逻辑转换关系。
常用数据结构
常用的数据结构包括函数调用图,抽象语法树,路径图等。
其中函数调用图是利用程序中函数之间的调用关系建立起的模型,抽象语法树是利用程序语义建立起的模型。
建立好抽象语法树模型后,可以进一步获取到程序模块,函数的执行过程,以及它们中间数据流动的过程,通过恢复程序的函数关系,可以建立起函数模型,在此基础上,根据这些模型可以采用二进制对比技术,语法分析,规则检查,类型推导等多种方法对程序进行安全分析。
如。对程序代码进行对比检查可以采用二进制对比技术,通过对比补丁前后函数汇编代码的不同,可以快速定位补丁修改位置,然后进行分析,明确漏洞触发的原因,实现编写出针对该漏洞的验证代码。
如何分析缺陷
1、过程间分析:将考虑每一个合理的可执行路径
2、获取一系列的函数定义:资源分配,调用
3、数据流分析将跟踪所有应用中的不可信数据:source,sink,二者之间必须进行验证。
4、某些使用智能静态分析
通过上面的知识,对于代码静态分析技术相信每个人都一定有了一些自己的看法和理解。在小编看来,静态分析简单的说,就是自动化工具的分析,常用的自动化分析工具是比较多的,而小编是喜欢CodeAnalyzer这个工具的,CA可以在扫描源代码时对安全规范子集中定义的规则进行逐条检查,用户可以通过自己的需求选定规则,并制定问题的严重程度,如果发现有不符合项则报告在问题列表中。
推荐阅读:
Java静态代码扫描怎么做?Java静态代码扫描工具的使用方法
什么情况下需要进行静态程序分析?常用Java静态代码分析工具的优势
您的信息已成功提交!
我们的客服人员稍后会与您联系