前几天404星链计划发布了新收录的项目:404星链计划新项目发布,速来升级装备,一秒回血。今天介绍的是项目BinAbsInspector,一款开源的二进制文件静态漏洞分析工具。另外欢迎加入404星链计划社群,请在文末识别运营同学二维码,添加时备注“星链计划”。项目名称:BinAbsInspector项目作者:KeenSecurityLab项目地址:https://github.com/KeenSecurityLab/BinAbsInspector背景软件漏洞检测“两板斧”随着信息产业的发展,网络安全问题日益严峻,软件漏洞对于互联网威胁极大,是网络安全中的核心问题。为了缓解漏洞所造成的危害,需要对软件进行安全检测,尽可能地发现并消除潜在漏洞。目前常见的自动化漏洞检测手段可以分为两类:动态分析测试和静态分析。动态分析测试方法(如fuzzing等)在过去五年里吸引了研究者的广泛关注,相关系统在工业界中已经得到了大规模的部署和应用。相比于动态方法,静态分析通常能够得到更为全面可靠的程序状态,可以从根源上有效地克服动态分析的覆盖率问题;然而在现实中静态分析如何兼顾平衡精度和复杂度在学术界和工业界仍是一大难题,在产品中也多依赖人工经验规则进行补充,这导致其在现实场景中的落地不尽如人意。静态分析工具现状目前国际上较为成功的商业化分析工具有Coverity[1]、CodeSonar[2]、VeraCode[3]等,它们在代码质量保障上发挥了重要作用,相关产品也在Google等公司的DevOps流程中得到了广泛部署和使用。包括开源及商业化产品在内,现有的静态分析方案多为源码级分析。面向源代码进行扫描,尽管可以在一定程度上满足软件安全需要,然而在真实安全场景中,待分析对象多为二进制文件,如嵌入式系统固件,商业软件等,研究人员难以获得相应的源代码,此时源码级静态分析方案不再适用。值得一提的是,部分商业化产品(如CodeSonar等)也提供了对于二进制文件的分析能力,然而商业化路线所带来的封闭性,在很大程度上限制了普通研究者的使用和二次开发。与此同时,在开源社区中也涌现出一批知名的二进制分析工具,如angr[4]、BAP[5]、cwe_checker[6]。其中,angr和BAP逐渐往通用分析框架发展,并非专注于二进制漏洞扫描,因此其内部的分析算法较为庞杂,不利于进一步扩展和优化;cwe_checker的定位相对清晰,专注于安全漏洞扫描,但其精度和效率却不甚理想。目前业界亟需一种更为先进的二进制漏洞扫描工具,在开源的大前提下,其性能和可扩展性也要满足真实场景的需要。为此,科恩实验室基于自身在二进制领域丰富的研究与实践经验,同时结合业内相关优秀工具的设计理念,最终孵化出性能出色且自主可控的二进制漏洞静态扫描工具——BinAbsInspector。原理与实现BinAbsInspector的设计思想来源于上世纪70年代诞生的经典程序分析理论“抽象解释”;在具体实现上,BinAbsInspector的分析基于Ghidra[7]所提供的中间表示Pcode上。通过设计合适的抽象域,实现其上的多种运算,完成相关Pcode的操作语义,执行流敏感(flow-sensitive)和上下文敏感(context-sensitive)的过程间分析,同时加入静态污点分析的能力,完成对程序运行时状态的抽象估计,最后基于上述分析所得的抽象数据流信息对多种漏洞类型进行建模检查,实现对二进制漏洞的静态扫描。关于如何对程序运行时状态进行抽象这一关键问题,我们主要参考了经典论文《WYSINWYX: