设计应用

基于污点分析的二进制程序漏洞检测系统设计与实现*

作者:罗治祥1,向栖2,李乐言1,3
发布日期:2024-01-17
来源:网络安全与数据治理 11期

0引言

近年来,随着计算机技术的不断发展,软件行业迅速发展,软件的体量、种类不断增大。同时,由于程序代码编写不规范,编写过程存在疏忽,或者缺乏软件安全方面的意识等,导致软件的安全性承受巨大威胁。针对这一现状,构建漏洞检测系统对软件进行安全检测是最行之有效的办法之一,可在一定程度上发现并且及时消除潜在的漏洞。

软件的安全检测方法通常可以分为动态测试[1]和静态分析[2]两大类,静态分析这一方法相较于动态测试具有更高的覆盖率以及性能效率。现有的静态分析方案大多都基于源码级别[3]进行分析,虽然可以在比较高的程度上满足软件安全需要,但是在许多真实的安全测试场景中,需要分析对象大多属于常见的二进制文件,比如商业软件、车机固件、嵌入式系统固件等。此时安全研究人员难以获得相应的源代码,源码级静态分析方案不再适用。现今商业化的二进制程序漏洞分析系统基本不具备可二次开发的扩展性,而开源的二进制程序漏洞分析系统,比如 angr[4] 、 BAP[5] 、 BinAbsInspector等优秀的静态分析工具存在一些适用性问题。其中,angr 和 BAP 正逐步发展为通用分析框架,而不仅仅专注于二进制漏洞扫描,这使得内部分析算法变得复杂,不便于后续的扩展和优化。BinAbsInspector是基于Ghidra的插件,使用Java编写开发,提供的API比较有限,在可扩展性上有所欠缺,普通的二进制安全研究员无法有效地基于该工具进行自定义开发。因此,构建一款在性能和可扩展性上较为突出,同时也满足于真实场景需要的二进制程序漏洞检测系统刻不容缓。

针对上述问题,Tan[6]等基于Java提出了一种较为简易的指针分析[7]算法,该算法在使用Datalog[8]引擎支撑之后,在构建好的程序抽象数据上进行分析,使得性能得到较大的提升。对于获取二进制程序抽象数据而言,普遍的做法是反编译[9]二进制程序生成IR中间表示,进一步对其进行优化和转换得到其AST语法树,最后依据AST语法树得到程序抽象数据,比较好的工具有IDA Pro、Ghidra、Binary Ninja等。本文设计系统选取了IDA Pro进行程序抽象数据获取,使用IDA Pro特有的IDAPython,从原生角度适配了IDA Pro提供各项API接口,从可扩展性上兼具了Python脚本跨平台、易扩展等优点;从性能方面,Python库中的pyDatalog可以替代常见的Datalog引擎,且性能方面相差无几。


文章详细内容下载请点击:基于污点分析的二进制程序漏洞检测系统设计与实现AET-电子技术应用-最丰富的电子设计资源平台 (chinaaet.com)


作者信息:

罗治祥1,向栖2,李乐言1,3

(1工业和信息化部电子第五研究所,广东广州511370;2东北大学软件学院,辽宁沈阳110819;3智能产品质量评价与可靠性保障技术工业和信息化部重点实验室,广东广州511370)



此内容为AET网站原创,未经授权禁止转载。
二进制程序静态分析 指针分析 污点分析 漏洞模式
Baidu
map