基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置制造方法及图纸

技术编号:34130327 阅读:7 留言:0更新日期:2022-07-14 15:15
本发明专利技术公开一种基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置,该方法包括:采用Pin对公共组件库的二进制程序进行动态二进制插桩;对面向公共组件库的模糊测试产生的Crash文件进行污点标记,采用正向污点分析对插桩后的二进制程序调用公共组件库的路径进行分析,采用反向污点分析对Crash文件到公共组件库的脆弱点位置进行分析,结合正向和反向污点分析进行信息提取;根据提取的信息设计可利用性分析规则,将可利用性分为直接可利用、可能可利用和不可利用,对公共组件库漏洞的可利用性进行评估。本发明专利技术能够快速提取公共组件库漏洞的脆弱点位置、执行路径等信息,对组件库漏洞在真实软件中的可利用性分析进行分类。行分类。行分类。

【技术实现步骤摘要】
基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置


[0001]本专利技术属于网络安全
,尤其涉及一种基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置。

技术介绍

[0002]公共组件库是具有良好定义的接口的功能集合,各种独立程序都可以使用由开发人员开发的公共组件库的功能。这种特性的重用为计算机科学领域做出了贡献,因为它的实现时间和成本都很低,生产效率很高,据统计,使用开源组件库的软件占用软件市场的90%以上。然而在程序开发设计阶段,开发者经常忽略了公共组件库的漏洞审查,甚至有些公共组件库被信手拈来使用,从根本上缺乏了安全审计。如果某个公共组件库存在漏洞,那么,大量使用了该库的软件都将面临安全威胁。这种场景,在现实世界中已经有了血淋淋的证明:如OpenSSL中出现的心脏滴血漏洞(Heartbleed)、GNU Bash出现的破壳漏洞(Shellshock)、 Java中的反序列化漏洞(Deserialization)和Apache Log4j2中出现的远程代码执行(RCE)漏洞等,这些都是实际应用程序中,存在公共组件库或应用框架漏洞的典型案例。2013年OWASP将“使用有已知漏洞的组件”列为十大网络安全风险,2021年OWASP将其改名为“脆弱过时组件(Vulnerable and OutdatedComponent)”,排名第六。
[0003]针对公共组件库中可能存在的漏洞,工业界已经开发了一些漏洞检测工具,如OWASP DEPENDENCY CHECK、WHITESOURCE和SNYK等,但是这些工具只能检测已经存在的漏洞,无法对组件库进行漏洞挖掘。学术界利用模糊测试技术提出了面向公共组件库的漏洞挖掘方法和工具,包括LibFuzzer、FUDGE、 FuzzGen等。由于公共组件库无法直接运行,因此对其进行模糊测试时需要首先进行驱动程序的编写。LibFuzzer利用安全人员手工编写组件库的驱动程序进行模糊测试,FUDGE是第一个自动化生成驱动程序的工具,采用函数间的依赖关系和抽象语法树生成驱动程序,FuzzGen采用自定义的抽象依赖图,根据数据流分析合成驱动程序。
[0004]虽然模糊测试技术能够高效地产生Crash(程序异常或崩溃),但模糊测试技术存在盲目性,产生的Crash数量巨大,并不是所有的Crash都可以被攻击者用于发起攻击,相反地,成千上万的Crash只有极少数在真实软件中是可利用的,组件库中存在漏洞并不意味着应用程序一定会执行到存在漏洞的函数。Plate等人使用运行时监控(即动态可达性分析)来确定脆弱的函数是否被执行,并在 ECLIPSE STEADY中组合动态和静态可达性分析,判断漏洞可达性。微软开发的exploitable通过比较调用堆栈对应的散列值分类崩溃,进而分析崩溃上下文的语义信息,进行自动Crash分析和安全风险评估。
[0005]但是现有研究主要关注于真实软件的Crash可利用性分析,缺乏面向公共组件库漏洞在真实软件中的可利用性分析。另外一些组件库漏洞的现有防护措施采用更新公共组件库的版本来防止漏洞攻击,但是应用程序中的组件库之间可能存在交叉依赖关系,更新版本可能导致程序无法使用,因此针对公共组件库漏洞在真实软件中的可利用性研究仍是
亟待解决的问题。

技术实现思路

[0006]本专利技术针对现有研究主要关注于真实软件的Crash可利用性分析,缺乏面向公共组件库漏洞在真实软件中的可利用性分析的问题,提出一种基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置(LibExp

T),能够快速提取公共组件库漏洞的脆弱点位置、执行路径和堆栈寄存器等信息,对组件库漏洞在真实软件中的可利用性分析进行分类,将可利用性分为直接可利用、可能可利用和不可利用三种。
[0007]本专利技术的工作流程主要分为三个阶段,包括二进制代码插桩、符号化污点分析和可利用性分析,其中符号化污点分析又分为正向污点分析和反向污点分析。首先采用Pin二进制插桩技术对二进制程序进行插桩,并采用正向污点分析对二进制程序调用组件库的路径进行分析,采用反向污点分析对Crash到组件库的脆弱点位置进行分析,结合正向和反向污点分析设计信息提取算法,根据执行路径和EIP等信息对可利用性进行评估。通过选取包含图像、音频、视频和字体等多个攻击面的公共组件库进行实验,实验结果表明LibExp

T可有效评估公共组件库漏洞在真实软件中的可利用性,为漏洞利用自动化生成技术提供数据支撑。
[0008]为了实现上述目的,本专利技术采用以下技术方案:
[0009]本专利技术一方面提出一种基于符号化污点分析的公共组件库漏洞可利用性分析方法,包括:
[0010]步骤1:采用Pin对公共组件库的二进制程序进行动态二进制插桩;
[0011]步骤2:对面向公共组件库的模糊测试产生的Crash文件进行污点标记,采用正向污点分析对插桩后的二进制程序调用公共组件库的路径进行分析,采用反向污点分析对Crash文件到公共组件库的脆弱点位置进行分析,结合正向和反向污点分析,对污点传播路径进行信息提取;
[0012]步骤3:根据步骤2中提取的信息设计可利用性分析规则,将可利用性分为直接可利用、可能可利用和不可利用三个等级,对公共组件库漏洞的可利用性进行评估。
[0013]进一步地,所述步骤2包括:
[0014]步骤2.1:污点标记;包括:
[0015]将Crash文件标记为污染源Source点,并将数据分配给寄存器或内存操作数,然后二进制程序通过插桩后执行并读取污点数据,如果执行过程中存在系统调用,则提取目标函数的寄存器和内存操作数数据,判断目标函数参数是否被污染,如果内存或寄存器数据被污染,则将其指向的数据标记为污点数据;如果内存或寄存器数据被非污点数据覆盖,则删除污点;
[0016]步骤2.2:污点传播;包括:
[0017]污点变量根据指令语义和敏感函数的传播约束在程序中进行传播,当程序执行时,首先判断指令操作数所在寄存器或内存地址是否被污染,如果污染则将其标记为污点并赋予标签,然后修改污点变量的相关属性并将污点变量加入到属性链表中;如果此时污染的寄存器或内存地址被无污染的数据覆盖,则删除污点标记,然后执行下一条指令;
[0018]通过模糊测试获取的Crash文件和崩溃信息标记Sink点,对于无效指令导致的崩
溃,将EIP寄存器标记为Sink点;对于取消引用无效地址导致的崩溃,将通用寄存器标记为Sink点;在程序执行时,当识别到Sink点后对其进行污点标记并执行反向污点传播;
[0019]步骤2.3:信息提取;包括:
[0020]通过实时记录执行路径下的函数信息,并结合污点变量标签构建函数路径链表FP,函数路径链表FP包括执行次序FD、执行函数名FN、函数地址FA、栈基址SA,在程序执行过程中实时记录EIP/EBP的状态和程序崩溃或结束时函数到达位置。
[0021]进一步地,在污点标记过程中,本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于符号化污点分析的公共组件库漏洞可利用性分析方法,其特征在于,包括:步骤1:采用Pin对公共组件库的二进制程序进行动态二进制插桩;步骤2:对面向公共组件库的模糊测试产生的Crash文件进行污点标记,采用正向污点分析对插桩后的二进制程序调用公共组件库的路径进行分析,采用反向污点分析对Crash文件到公共组件库的脆弱点位置进行分析,结合正向和反向污点分析,对污点传播路径进行信息提取;步骤3:根据步骤2中提取的信息设计可利用性分析规则,将可利用性分为直接可利用、可能可利用和不可利用三个等级,对公共组件库漏洞的可利用性进行评估。2.根据权利要求1所述的基于符号化污点分析的公共组件库漏洞可利用性分析方法,其特征在于,所述步骤2包括:步骤2.1:污点标记;包括:将Crash文件标记为污染源Source点,并将数据分配给寄存器或内存操作数,然后二进制程序通过插桩后执行并读取污点数据,如果执行过程中存在系统调用,则提取目标函数的寄存器和内存操作数数据,判断目标函数参数是否被污染,如果内存或寄存器数据被污染,则将其指向的数据标记为污点数据;如果内存或寄存器数据被非污点数据覆盖,则删除污点;步骤2.2:污点传播;包括:污点变量根据指令语义和敏感函数的传播约束在程序中进行传播,当程序执行时,首先判断指令操作数所在寄存器或内存地址是否被污染,如果污染则将其标记为污点并赋予标签,然后修改污点变量的相关属性并将污点变量加入到属性链表中;如果此时污染的寄存器或内存地址被无污染的数据覆盖,则删除污点标记,然后执行下一条指令;通过模糊测试获取的Crash文件和崩溃信息标记Sink点,对于无效指令导致的崩溃,将EIP寄存器标记为Sink点;对于取消引用无效地址导致的崩溃,将通用寄存器标记为Sink点;在程序执行时,当识别到Sink点后对其进行污点标记并执行反向污点传播;步骤2.3:信息提取;包括:通过实时记录执行路径下的函数信息,并结合污点变量标签构建函数路径链表FP,函数路径链表FP包括执行次序FD、执行函数名FN、函数地址FA、栈基址SA,在程序执行过程中实时记录EIP/EBP的状态和程序崩溃或结束时函数到达位置。3.根据权利要求2所述的基于符号化污点分析的公共组件库漏洞可利用性分析方法,其特征在于,在污点标记过程中,每个污点变量用标签<ID,TS,TT,TL>表示,其中ID表示污点变量序号;TS表示污点变量的直接污染源,污点源的直接污染源为其自身;TT表示污点变量的内存污染情况,0表示无污染,否则表示污染;TL表示污点变量的属性链表,包括内存数据链表TL

Mem和寄存器数据链表TL

Reg,污点变量的属性包括污点变量的地址Addr、大小Size、直接污点源的长度Len、变量的栈底指针EBP和指令指针EIP。4.根据权利要求1所述的基于符号化污点分析的公共组件库漏洞可利用性分析方法,其特征在于,所述步骤3包括:将正向污点分析和反向污点分析获取的两个不同的执行信息进行对比,查看执行路径是否重合,判断组件库的Crash文件在二进制程序中是否可以到达脆弱点位置;然后分析EIP寄存器是否被覆盖,包括EIP/EBP是否为符号值,综合上述分析将分析结果分为直接可
利用、可能可利用和不可利用三个等级。5.根据权利要求1所述的基于符号化污点分析的公共组件库漏洞可利用性分析方法,其特征在于,所述可利用性分析规则包括:首先根据步骤2获取的信息提取污点变量的函数执行路径,然后将正向污点分析执行路径与反向污点分析执行路径进行对比,如果在程序崩溃时执行路径相同,则将该漏洞归类为直接可利用漏洞,路径不同时进行下一步EIP/EBP分析;如果程序执行结束而未发生崩溃,不论此时执行路径是否相同,都进行下一步EIP/EBP分析;当检测到EIP寄存器的值被污点变量的符号值覆盖时,表示该漏洞可能可利用,然后检查污点变量的属性标签,污点变量的最大安全范围为Addr

EBP,实际使用范围为Size,并且由直接污点源的长度Len控制,因此如果污点变量的Len>Addr

EBP时,程序出现崩溃,此时查看当前函数内执行指令,如果是跳转指令或读写指令,则表示该漏洞为可能可利用,否则该漏洞为不可利用;将信号中断崩溃、空指针、除零、访问无效地址和软件配置错误归类为不可利用。6.一种基于符号化污点分析的公共组件库漏洞可利用性分析装...

【专利技术属性】
技术研发人员:袁会杰魏强武泽慧王允超王新蕾周国淼宗国笑黄辉辉
申请(专利权)人:中国人民解放军战略支援部队信息工程大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1