静态分析工具效率优化的设计与实现

来源 :西安电子科技大学 | 被引量 : 0次 | 上传用户:heeroyuyo
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
本文的目的是对本实验室研发的一款C程序静态分析工具进行效率优化。为了检测场景复杂的漏洞,工具采用了路径敏感和过程敏感的分析策略。该策略使检测路径数随代码规模的增长呈非线性增长,导致分析效率低,工具可以检测的代码规模远远达不到预期。进行效率优化是极其重要且必不可少的工作。路径敏感的特点是遍历所有可能的路径,针对该特性,本文设计并实现了预遍历模块对控制流图进行剪枝。为了实现该模块,本文首先将遍历框架实现为深度优先遍历,设计并实现了新的数据记录方式避免分支节点处大量数据的备份和恢复。预遍历之前需要将所有有定义的函数进行拓扑排序,使被调用函数早于调用函数被分析。预遍历首先根据常见的漏洞场景以及用户配置信息标记控制流图中的单个节点,然后使用迭代算法将被标记节点的状态向其前继传播,直到整个控制流图中所有节点状态不再发生变化,迭代算法结束。此时能够到达被标记节点的路径已经全部被标记,而没有被标记的路径则是没有分析意义的路径。后端检查漏洞时,根据预遍历标记的信息并结合已经收集的数据信息决定被标记的路径是否应该遍历。过程敏感的特点是遇到函数调用,只要被调用函数有定义就要分析被调用函数。每进行一次函数调用本质是将该函数的控制流图展开,大量增加了需要分析的路径数。为了减少函数调用,本文将原有的嵌入式分析方法改为记忆式分析方法,即记录已经见过的指向信息以达到重用的目的。为了减少需要记录的模式数和提高模式重用的概率,本文使用扩充名替代的方式将指向信息抽象为调用模式。为了每个函数每次调用使用相同的扩充名,扩充名使用了预先分配策略。如果抽象后的调用模式之前记录过就会取其对应的结果作为此次分析结果,不再分析被调用函数,否则分析该函数并记录调用模式和调用完毕后的指向模式。为了使安全分析工具更加灵活的应对不同特性和规模的检测代码,本文在预遍历和跨过程模式匹配模块添加了若干个配置项。用户可以根据实际情况配置这些参数,以使工具更加侧重分析效率或者分析精度。本文最后对设计并实现的各个策略进行效率测试。测试的结果表明预遍历和跨过程模式匹配模块对效率提高有很大的帮助。在大幅提高检测效率的前提下工具仍能保持原有的分析精度,效率优化达到了预期的效果。
其他文献
案件指纹是揭露犯罪和认定犯罪的重要物证。加强案件指纹信息的管理和使用,对于提高刑事案件破案率具有重要作用。案件指纹主要分散于各地公安机关的刑侦部门,指纹查询比对工
近年来,如何从理论上分析算法的泛化性能是机器学习主要研究问题。在机器学习中,泛化误差用来衡量一个学习机应用到未知数据的学习能力。我们希望找到一个泛化误差的上界,利
无线通信中需要根据信道质量调整传输速率,在保证误码性能条件下以尽可能高的速率进行传输。传统的发端速率自适应技术需要信道反馈来确定信道质量,反馈开销较大,反馈控制复
由于互联网中路由和交换设备的封闭特性,使得网络创新的步伐十分缓慢。SDN(Software Defined Network,软件定义网络)通过解耦网络的控制和转发,采用基于流表的交换机和集中式
在下一代移动通信网络的关键技术研究中,密集组网是公认的提升网络容量的有效手段之一。基站的密集部署会直接造成系统能耗的快速增长,考虑到网络运营的开销,通信网络的能耗
在工业自动化飞速发展的当代,各种控制方法层出不穷,但在实际工业现场中,常规PID控制仍然占据主导地位。其控制品质对被控对象的变化不太敏感,非常适用于工业生产现场。但是,
随着医疗信息化的不断普及,医疗数据的规模也在不停增长。人们经过对医疗数据的剖析和研究,了解了医疗数据之间的内在联系,从而为提升医疗服务的质量提供数据支持。但医疗数据中含有很多的隐私信息,如何保护隐私信息成为限制医疗数据分析的重要问题。本文首先提出了一种基于同态加密的医疗数据隐私保护方案,由信息采集端、边缘服务器、云计算服务器和用户端组成。在该方案中,信息采集端对医疗数据进行采集,并利用公钥加密方案
自从计算机技术得到长足发展,人类获取和存储信息的能力快速增强。这些信息来源复杂,且常常包含着噪声信息和大量冗余信息,利用这些复杂的信息建立可靠的模型一直是机器学习
现代投资组合理论是由著名的诺贝尔经济学奖获得者——Markowitz构建的均值—方差模型衍生而来的。此后,许多学者尝试了各种方式进行模型的改进和求解。不管是构建哪种投资组
随着无线通信技术的发展,人们对数据传输速率、服务种类、网络覆盖范围以及可靠性等通信性能参数的要求日益提高。而干扰问题是阻碍网络性能进一步提高的关键因素,因此有效的