《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 基于污点分析的二进制程序漏洞检测系统设计与实现*
基于污点分析的二进制程序漏洞检测系统设计与实现*
网络安全与数据治理 11期
罗治祥1,向栖2,李乐言1,3
(1工业和信息化部电子第五研究所,广东广州511370;2东北大学软件学院,辽宁沈阳110819;3智能产品质量评价与可靠性保障技术工业和信息化部重点实验室,广东广州511370)
摘要: 针对现阶段二进制程序的静态分析多依赖于人工经验规则导致的低效率问题,以及大多数二进制程序漏洞扫描检测系统性能和可扩展性较低的问题,设计并且实现了一个简易版的基于污点分析的二进制程序漏洞检测系统。与现有的二进制程序漏洞检测系统相比,本文设计的系统改进了Java指针分析中提出的算法,使得分析过程的数据抽象部分和指针分析部分得到了分离,进一步简化了污点分析,提高了分析的性能和可扩展性。此外,将漏洞模式单独抽离出来,能够更加方便地进行漏洞模式的自定义。
中图分类号:TP311文献标识码:ADOI:10.19358/j.issn.2097-1788.2023.11.001
引用格式:罗治祥,向栖,李乐言.基于污点分析的二进制程序漏洞检测系统设计与实现[J].网络安全与数据治理,2023,42(11):1-7.
Design and implementation of binary program vulnerability detection
Luo Zhixiang1,Xiang Qi2,Li Leyan1,3
(1Fifth Research Institute of Ministry of Industry and Information Technology, Guangzhou 511370, China;2Software College,Northeastern University,Shenyang 110819,China;3Key Laboratory of Intelligent Product Quality Evaluation and Reliability Assurance Technology, Ministry of Industry and Information Technology, Guangzhou 511370, China)
Abstract: Given the inefficiencies associated with the heavy reliance on manual heuristic rules for static analysis of binary programs at the current stage, and the low performance and scalability of existing binary program vulnerability scanning systems, this paper has designed and implemented a vulnerability detection system for binary programs based on taint analysis. Compared to the existing binary program vulnerability detection systems, the system designed in this paper improves the algorithm proposed in the Java pointer analysis, allowing the data abstraction and pointer analysis portions of the process to be separated. This further simplifies the taint analysis, enhancing its performance and scalability. Additionally, this paper extracts vulnerability patterns separately, making it much easier to customize vulnerability patterns.
Key words : static analysis of binary programs; pointer analysis; taint analysis; vulnerability patterns

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网站原创,未经授权禁止转载。