一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

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

2022-07-13 22:14:41 来源:中国专利 TAG:
1.本发明属于网络安全
技术领域
:,尤其涉及一种基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置。
背景技术
::2.公共组件库是具有良好定义的接口的功能集合,各种独立程序都可以使用由开发人员开发的公共组件库的功能。这种特性的重用为计算机科学领域做出了贡献,因为它的实现时间和成本都很低,生产效率很高,据统计,使用开源组件库的软件占用软件市场的90%以上。然而在程序开发设计阶段,开发者经常忽略了公共组件库的漏洞审查,甚至有些公共组件库被信手拈来使用,从根本上缺乏了安全审计。如果某个公共组件库存在漏洞,那么,大量使用了该库的软件都将面临安全威胁。这种场景,在现实世界中已经有了血淋淋的证明:如openssl中出现的心脏滴血漏洞(heartbleed)、gnubash出现的破壳漏洞(shellshock)、java中的反序列化漏洞(deserialization)和apachelog4j2中出现的远程代码执行(rce)漏洞等,这些都是实际应用程序中,存在公共组件库或应用框架漏洞的典型案例。2013年owasp将“使用有已知漏洞的组件”列为十大网络安全风险,2021年owasp将其改名为“脆弱过时组件(vulnerableandoutdatedcomponent)”,排名第六。3.针对公共组件库中可能存在的漏洞,工业界已经开发了一些漏洞检测工具,如owaspdependencycheck、whitesource和snyk等,但是这些工具只能检测已经存在的漏洞,无法对组件库进行漏洞挖掘。学术界利用模糊测试技术提出了面向公共组件库的漏洞挖掘方法和工具,包括libfuzzer、fudge、fuzzgen等。由于公共组件库无法直接运行,因此对其进行模糊测试时需要首先进行驱动程序的编写。libfuzzer利用安全人员手工编写组件库的驱动程序进行模糊测试,fudge是第一个自动化生成驱动程序的工具,采用函数间的依赖关系和抽象语法树生成驱动程序,fuzzgen采用自定义的抽象依赖图,根据数据流分析合成驱动程序。4.虽然模糊测试技术能够高效地产生crash(程序异常或崩溃),但模糊测试技术存在盲目性,产生的crash数量巨大,并不是所有的crash都可以被攻击者用于发起攻击,相反地,成千上万的crash只有极少数在真实软件中是可利用的,组件库中存在漏洞并不意味着应用程序一定会执行到存在漏洞的函数。plate等人使用运行时监控(即动态可达性分析)来确定脆弱的函数是否被执行,并在eclipsesteady中组合动态和静态可达性分析,判断漏洞可达性。微软开发的exploitable通过比较调用堆栈对应的散列值分类崩溃,进而分析崩溃上下文的语义信息,进行自动crash分析和安全风险评估。5.但是现有研究主要关注于真实软件的crash可利用性分析,缺乏面向公共组件库漏洞在真实软件中的可利用性分析。另外一些组件库漏洞的现有防护措施采用更新公共组件库的版本来防止漏洞攻击,但是应用程序中的组件库之间可能存在交叉依赖关系,更新版本可能导致程序无法使用,因此针对公共组件库漏洞在真实软件中的可利用性研究仍是亟待解决的问题。技术实现要素:6.本发明针对现有研究主要关注于真实软件的crash可利用性分析,缺乏面向公共组件库漏洞在真实软件中的可利用性分析的问题,提出一种基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置(libexp-t),能够快速提取公共组件库漏洞的脆弱点位置、执行路径和堆栈寄存器等信息,对组件库漏洞在真实软件中的可利用性分析进行分类,将可利用性分为直接可利用、可能可利用和不可利用三种。7.本发明的工作流程主要分为三个阶段,包括二进制代码插桩、符号化污点分析和可利用性分析,其中符号化污点分析又分为正向污点分析和反向污点分析。首先采用pin二进制插桩技术对二进制程序进行插桩,并采用正向污点分析对二进制程序调用组件库的路径进行分析,采用反向污点分析对crash到组件库的脆弱点位置进行分析,结合正向和反向污点分析设计信息提取算法,根据执行路径和eip等信息对可利用性进行评估。通过选取包含图像、音频、视频和字体等多个攻击面的公共组件库进行实验,实验结果表明libexp-t可有效评估公共组件库漏洞在真实软件中的可利用性,为漏洞利用自动化生成技术提供数据支撑。8.为了实现上述目的,本发明采用以下技术方案:9.本发明一方面提出一种基于符号化污点分析的公共组件库漏洞可利用性分析方法,包括:10.步骤1:采用pin对公共组件库的二进制程序进行动态二进制插桩;11.步骤2:对面向公共组件库的模糊测试产生的crash文件进行污点标记,采用正向污点分析对插桩后的二进制程序调用公共组件库的路径进行分析,采用反向污点分析对crash文件到公共组件库的脆弱点位置进行分析,结合正向和反向污点分析,对污点传播路径进行信息提取;12.步骤3:根据步骤2中提取的信息设计可利用性分析规则,将可利用性分为直接可利用、可能可利用和不可利用三个等级,对公共组件库漏洞的可利用性进行评估。13.进一步地,所述步骤2包括:14.步骤2.1:污点标记;包括:15.将crash文件标记为污染源source点,并将数据分配给寄存器或内存操作数,然后二进制程序通过插桩后执行并读取污点数据,如果执行过程中存在系统调用,则提取目标函数的寄存器和内存操作数数据,判断目标函数参数是否被污染,如果内存或寄存器数据被污染,则将其指向的数据标记为污点数据;如果内存或寄存器数据被非污点数据覆盖,则删除污点;16.步骤2.2:污点传播;包括:17.污点变量根据指令语义和敏感函数的传播约束在程序中进行传播,当程序执行时,首先判断指令操作数所在寄存器或内存地址是否被污染,如果污染则将其标记为污点并赋予标签,然后修改污点变量的相关属性并将污点变量加入到属性链表中;如果此时污染的寄存器或内存地址被无污染的数据覆盖,则删除污点标记,然后执行下一条指令;18.通过模糊测试获取的crash文件和崩溃信息标记sink点,对于无效指令导致的崩溃,将eip寄存器标记为sink点;对于取消引用无效地址导致的崩溃,将通用寄存器标记为sink点;在程序执行时,当识别到sink点后对其进行污点标记并执行反向污点传播;19.步骤2.3:信息提取;包括:20.通过实时记录执行路径下的函数信息,并结合污点变量标签构建函数路径链表fp,函数路径链表fp包括执行次序fd、执行函数名fn、函数地址fa、栈基址sa,在程序执行过程中实时记录eip/ebp的状态和程序崩溃或结束时函数到达位置。21.进一步地,在污点标记过程中,每个污点变量用标签《id,ts,tt,tl》表示,其中id表示污点变量序号;ts表示污点变量的直接污染源,污点源的直接污染源为其自身;tt表示污点变量的内存污染情况,0表示无污染,否则表示污染;tl表示污点变量的属性链表,包括内存数据链表tl-mem和寄存器数据链表tl-reg,污点变量的属性包括污点变量的地址addr、大小size、直接污点源的长度len、变量的栈底指针ebp和指令指针eip。22.进一步地,所述步骤3包括:23.将正向污点分析和反向污点分析获取的两个不同的执行信息进行对比,查看执行路径是否重合,判断组件库的crash文件在二进制程序中是否可以到达脆弱点位置;然后分析eip寄存器是否被覆盖,包括eip/ebp是否为符号值,综合上述分析将分析结果分为直接可利用、可能可利用和不可利用三个等级。24.进一步地,所述可利用性分析规则包括:25.首先根据步骤2获取的信息提取污点变量的函数执行路径,然后将正向污点分析执行路径与反向污点分析执行路径进行对比,如果在程序崩溃时执行路径相同,则将该漏洞归类为直接可利用漏洞,路径不同时进行下一步eip/ebp分析;如果程序执行结束而未发生崩溃,不论此时执行路径是否相同,都进行下一步eip/ebp分析;26.当检测到eip寄存器的值被污点变量的符号值覆盖时,表示该漏洞可能可利用,然后检查污点变量的属性标签,污点变量的最大安全范围为addr-ebp,实际使用范围为size,并且由直接污点源的长度len控制,因此如果污点变量的len》addr-ebp时,程序出现崩溃,此时查看当前函数内执行指令,如果是跳转指令或读写指令,则表示该漏洞为可能可利用,否则该漏洞为不可利用;27.将信号中断崩溃、空指针、除零、访问无效地址和软件配置错误归类为不可利用。28.本发明另一方面提出一种基于符号化污点分析的公共组件库漏洞可利用性分析装置,包括:29.二进制插桩模块,用于采用pin对公共组件库的二进制程序进行动态二进制插桩;30.符号化污点分析模块,用于对面向公共组件库的模糊测试产生的crash文件进行污点标记,采用正向污点分析对插桩后的二进制程序调用公共组件库的路径进行分析,采用反向污点分析对crash文件到公共组件库的脆弱点位置进行分析,结合正向和反向污点分析,对污点传播路径进行信息提取;31.可利用性分析模块,用于根据符号化污点分析模块中提取的信息设计可利用性分析规则,将可利用性分为直接可利用、可能可利用和不可利用三个等级,对公共组件库漏洞的可利用性进行评估。32.进一步地,所述符号化污点分析模块具体用于:33.步骤2.1:污点标记;包括:34.将crash文件标记为污染源source点,并将数据分配给寄存器或内存操作数,然后二进制程序通过插桩后执行并读取污点数据,如果执行过程中存在系统调用,则提取目标函数的寄存器和内存操作数数据,判断目标函数参数是否被污染,如果内存或寄存器数据被污染,则将其指向的数据标记为污点数据;如果内存或寄存器数据被非污点数据覆盖,则删除污点;35.步骤2.2:污点传播;包括:36.污点变量根据指令语义和敏感函数的传播约束在程序中进行传播,当程序执行时,首先判断指令操作数所在寄存器或内存地址是否被污染,如果污染则将其标记为污点并赋予标签,然后修改污点变量的相关属性并将污点变量加入到属性链表中;如果此时污染的寄存器或内存地址被无污染的数据覆盖,则删除污点标记,然后执行下一条指令;37.通过模糊测试获取的crash文件和崩溃信息标记sink点,对于无效指令导致的崩溃,将eip寄存器标记为sink点;对于取消引用无效地址导致的崩溃,将通用寄存器标记为sink点;在程序执行时,当识别到sink点后对其进行污点标记并执行反向污点传播;38.步骤2.3:信息提取;包括:39.通过实时记录执行路径下的函数信息,并结合污点变量标签构建函数路径链表fp,函数路径链表fp包括执行次序fd、执行函数名fn、函数地址fa、栈基址sa,在程序执行过程中实时记录eip/ebp的状态和程序崩溃或结束时函数到达位置。40.进一步地,在污点标记过程中,每个污点变量用标签《id,ts,tt,tl》表示,其中id表示污点变量序号;ts表示污点变量的直接污染源,污点源的直接污染源为其自身;tt表示污点变量的内存污染情况,0表示无污染,否则表示污染;tl表示污点变量的属性链表,包括内存数据链表tl-mem和寄存器数据链表tl-reg,污点变量的属性包括污点变量的地址addr、大小size、直接污点源的长度len、变量的栈底指针ebp和指令指针eip。41.进一步地,所述可利用性分析模块具体用于:42.将正向污点分析和反向污点分析获取的两个不同的执行信息进行对比,查看执行路径是否重合,判断组件库的crash文件在二进制程序中是否可以到达脆弱点位置;然后分析eip寄存器是否被覆盖,包括eip/ebp是否为符号值,综合上述分析将分析结果分为直接可利用、可能可利用和不可利用三个等级。43.进一步地,所述可利用性分析规则包括:44.首先根据符号化污点分析模块获取的信息提取污点变量的函数执行路径,然后将正向污点分析执行路径与反向污点分析执行路径进行对比,如果在程序崩溃时执行路径相同,则将该漏洞归类为直接可利用漏洞,路径不同时进行下一步eip/ebp分析;如果程序执行结束而未发生崩溃,不论此时执行路径是否相同,都进行下一步eip/ebp分析;45.当检测到eip寄存器的值被污点变量的符号值覆盖时,表示该漏洞可能可利用,然后检查污点变量的属性标签,污点变量的最大安全范围为addr-ebp,实际使用范围为size,并且由直接污点源的长度len控制,因此如果污点变量的len》addr-ebp时,程序出现崩溃,此时查看当前函数内执行指令,如果是跳转指令或读写指令,则表示该漏洞为可能可利用,否则该漏洞为不可利用;46.将信号中断崩溃、空指针、除零、访问无效地址和软件配置错误归类为不可利用。47.与现有技术相比,本发明具有的有益效果:48.1.本发明面向公共组件库漏洞在真实软件中的可利用性分析问题,提出一种基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置,不依赖于源代码,并利用二进制(消费者)程序提取执行路径、函数地址等信息,能够对漏洞脆弱点进行匹配。49.2.本发明填补了漏洞自动化利用技术在分析公共组件库漏洞在真实软件中的可利用性分析的空缺,和其他技术相比能够发现更多的可利用性漏洞,并且不会带来更大的开销问题。附图说明50.图1为本发明实施例一种基于符号化污点分析的公共组件库漏洞可利用性分析方法的整体框架图;51.图2为本发明实施例pin二进制插桩基本结构图;52.图3为本发明实施例符号化污点分析流程图;53.图4为本发明实施例符号化污点传播信息提取算法图;54.图5为本发明实施例一种基于符号化污点分析的公共组件库漏洞可利用性分析装置结构示意图。具体实施方式55.下面结合附图和具体的实施例对本发明做进一步的解释说明:56.一种基于符号化污点分析的公共组件库漏洞可利用性分析方法具体实现过程描述如下:首先采用pin二进制插桩技术对二进制程序进行插桩,并采用正向污点分析对二进制程序调用组件库的路径进行分析,采用反向污点分析对crash到组件库的脆弱点位置进行分析,结合正向和反向污点分析提取相关信息,设计可利用性评估规则,根据执行路径和eip等信息将组件库漏洞的可利用性分为直接可利用、可能可利用和不可利用三个等级,实现对可利用性进行评估。整体框架如图1所示。57.步骤s101:动态二进制插桩。58.动态二进制插桩是指在不影响二进制程序正常运行的情况下将额外的插桩代码注入程序以收集运行时信息,常用的工具包括pin、dynamorio、dyninst、varlgrind等。如图2所示,pin是intel公司开发的一款二进制插桩工具,提供了指令、基本块和系统调用等多个层次的插桩分析,其中的trace是轨迹层次的插桩机制,能够识别单一入口、多出口的指令轨迹块,具有高效易用的特点,因此本发明采用pin进行动态二进制插桩。59.本发明采用pin的指令级插桩实现动态符号化污点分析,通过函数ins_addinstrumentfunction()调用回调函数ins_insertcall()在不影响程序正常执行的情况下将分析代码插入程序中,对ntreadfile等接受外部输入数据的函数进行插桩,并形成一个新的程序执行序列,为后续获取程序执行跟踪提供支撑。60.步骤s102:动态符号化污点分析。61.动态污点分析能够精确获取程序执行过程,主要包括污点标记、污点传播和污点检测策略,但是动态污点分析漏报率较高,并且资源消耗较大,因此本发明通过将污点数据和污点传播检测规则进行符号化,采用符号化污点分析方法减小性能开销和降低漏报率。符号化污点分析的整体流程如图3所示,首先对面向公共组件库的模糊测试产生的crash文件进行污点标记,同时通过pin将二进制程序进行插桩,然后运行程序并跟踪污点的传播路径,设计算法对污点传播路径进行信息(函数地址、执行路径和函数名称等)提取。62.步骤s102.1:污点标记。63.污点标记主要包括两部分:创建污点数据和对污点进行删除,创建污点数据首先对输入的数据进行污点标记,由于本发明的输入数据只有从模糊测试得到的crash文件,因此将crash文件标记为污染源source点,并将数据分配给寄存器或内存操作数。然后二进制程序通过插桩后执行并读取污点数据,如果执行过程中存在系统调用,则提取目标函数的寄存器和内存操作数数据,判断目标函数参数是否被污染,如果内存或寄存器数据被污染,则将其指向的数据标记为污点数据;如果内存或寄存器数据被非污点数据覆盖,则删除污点。64.在污点标记过程中,每个污点变量用标签《id,ts,tt,tl》表示,其中id表示污点变量序号;ts表示污点变量的直接污染源,污点源的直接污染源为其自身;tt表示污点变量的内存污染情况,0表示无污染,否则表示污染;tl表示污点变量的属性链表,包括内存数据链表tl-mem和寄存器数据链表tl-reg,污点变量的属性包括污点变量的地址addr、大小size、直接污点源的长度len、变量的栈底指针ebp和指令指针eip。65.步骤s102.2:污点传播。66.污点变量根据指令语义和敏感函数的传播约束在程序中进行传播,当程序执行时,首先判断指令操作数所在寄存器或内存地址是否被污染,如果污染则将其标记为污点并赋予标签,然后修改污点变量的相关属性并将污点变量加入到属性链表中;如果此时污染的寄存器或内存地址被无污染的数据覆盖,则删除污点标记,然后执行下一条指令,如图4,算法1中第3-11行描述了污点传播过程。67.由于程序崩溃主要有两种情况导致:执行无效指令或取消引用无效地址,因此本发明在进行反向污点分析时将通过模糊测试获取的crash文件和崩溃信息标记sink点。对于无效指令导致的崩溃代表eip寄存器中存在无效值,因此本发明将eip寄存器标记为sink点;对于取消引用无效地址导致的崩溃代表通用寄存器保存了指向无效地址的值,因此将通用寄存器标记为sink点。在程序执行时,当识别到sink点后对其进行污点标记并执行反向污点传播,如图4,算法1中第12-20行描述了反向污点传播过程。68.步骤s102.3:信息提取。69.为了获取程序的函数调用关系和堆栈信息,本发明通过实时记录执行路径下的函数信息,并结合污点变量标签构建函数路径链表fp,函数路径链表包括执行次序fd、执行函数名fn、函数地址fa、栈基址sa,在程序执行过程中实时记录eip/ebp的状态和程序崩溃或结束时函数到达位置,如图4,算法1中所示。70.具体方法为,使用全局变量count记录已经执行的函数总数,当执行一个新的函数时,则count ,此时判断函数列表是否为空,或者该函数与表头函数的堆栈关系。如果func_stack_start《fp_stack_start表明该函数是第一个执行的或者是被前面的函数调用的,将其添加进fp中,并将堆栈信息保存至s_info中,并保存函数内指令的变量的属性列表,否则说明该函数的堆栈覆盖了前面函数的堆栈,则从fp中删除函数信息。71.步骤s103:可利用性分析。72.漏洞可利用的条件主要是能否进行控制流劫持,而劫持控制流必须满足:程序执行路径能够到达脆弱位置;ebp的值可控,且eip寄存器指向的下一条指令能够跳转到可控的内存区域。此过程涉及到跳转指令和读写内存指令,因此本发明对公共组件库漏洞在真实软件中的可利用性分析首先将正向污点分析和反向污点分析获取的两个不同的执行信息进行对比,查看执行路径是否重合判断组件库的crash文件在真实软件中是否可以到达脆弱点位置;然后分析eip寄存器是否被覆盖,包括eip/ebp是否为符号值,综合上述分析将分析结果分为直接可利用、可能可利用和不可利用三个等级。具体的分析规则如下。73.(1)路径对比74.首先根据步骤s102.3获取的信息提取污点变量的函数执行路径,然后将正向污点分析执行路径与反向污点分析执行路径进行对比,如果在程序崩溃时执行路径相同,则将该漏洞归类为直接可利用漏洞,路径不同时进行下一步分析;如果程序执行结束而未发生崩溃,不论此时执行路径是否相同,都进行下一步eip/ebp分析。75.(2)eip/ebp分析76.当检测到eip寄存器的值被污点变量的符号值覆盖时,表示该漏洞可能可利用,然后检查污点变量的属性标签,包括污点变量的地址addr、大小size、直接污点源的长度len、变量的栈底指针ebp和指令指针eip。污点变量的最大安全范围为addr-ebp,实际使用范围为size,并且由len控制,因此如果污点变量的len》addr-ebp时,程序出现崩溃,此时查看当前函数内执行指令,如果是跳转指令或读写指令,则表示该漏洞为可能可利用,否则该漏洞不可利用。77.其中跳转指令指包括call、jmp、ret等指令,其能够改变程序控制流,当这些指令的eip寄存器被污染时,即表明漏洞可利用。读写指令指mov指令,通过源或目的操作数完成读写指令,此时寄存器向内存单元写入间接获取控制流,尤其是当污点变量写入内存地址时表明可以将任意数据写入任意地址。另外本发明将信号中断崩溃、空指针、除零、访问无效地址和软件配置错误等归类为不可利用。78.为验证本发明效果,进行如下实验:79.本发明提出的基于符号化污点分析的公共组件库漏洞可利用性分析方法libexp-t,并对其进行实验评估,首先对实验设置进行说明,然后对libexp-t的可利用性分析效果进行评估。80.表1实验测试集81.[0082][0083](a)实验设置[0084]为测试公共组件库漏洞在真实软件中的可利用性的有效性,本发明在一台内存为64gb,cpu为64intel(r)xeon(r)cpue7-4820v2@2.00ghz,运行ubuntu18.04x64版本操作系统的服务器上搭建了测试环境。本发明开发了基于符号化污点分析的可利用性分析原型工具libexp-t,为测试提出方法的有效性,选取了包含图像、音视频、字体渲染等多个漏洞攻击面的9个公共组件库进行测试,并对每个组件库的2个消费者程序(指使用公共组件库的程序)进行分析,选取的测试集如表1所示。[0085](b)可利用性分析[0086]为评估libexp-t的可利用性分析效果,本发明将libexp-t与crax和rex进行对比。由于crax和rex都是面向二进制程序的工具,因此本发明直接使用crax和rex对模糊测试生成的crash文件和二进制程序进行分析,可利用性分析结果如表2所示。[0087]表2可利用性分析结果[0088][0089][0090]注:其中libexp-t可利用性分析中d表示直接可利用,p表示可能可利用,n表示不可利用,crax和rex中e表示利用生成,n表示不可利用,/表示存在路径爆炸问题无法分析。[0091]从表2中可以看出,由于自动化漏洞利用工具采用符号执行技术面临路径爆炸问题,在分析公共组件库漏洞在真实软件的可利用性时,针对的软件规模基本超过3m,特别是vlcmediaplayer软件源码为32m以上,现有的自动化利用工具大都无法进行漏洞利用。而libexp-t采用符号化污点分析技术避免了此问题,在真实软件中都能够进行分析,并且可能利用的漏洞数量为33,占比39.3%,相比crax的10.6%和rex的25.8%有明显的提高,证明了libexp-t在可利用性分析方面的有效性。[0092]在上述实施例的基础上,如图5所示,本发明还提出一种基于符号化污点分析的公共组件库漏洞可利用性分析装置,包括:[0093]二进制插桩模块,用于采用pin对公共组件库的二进制程序进行动态二进制插桩;[0094]符号化污点分析模块,用于对面向公共组件库的模糊测试产生的crash文件进行污点标记,采用正向污点分析对插桩后的二进制程序调用公共组件库的路径进行分析,采用反向污点分析对crash文件到公共组件库的脆弱点位置进行分析,结合正向和反向污点分析,对污点传播路径进行信息提取;[0095]可利用性分析模块,用于根据符号化污点分析模块中提取的信息设计可利用性分析规则,将可利用性分为直接可利用、可能可利用和不可利用三个等级,对公共组件库漏洞的可利用性进行评估。[0096]进一步地,所述符号化污点分析模块具体用于:[0097]步骤2.1:污点标记;包括:[0098]将crash文件标记为污染源source点,并将数据分配给寄存器或内存操作数,然后二进制程序通过插桩后执行并读取污点数据,如果执行过程中存在系统调用,则提取目标函数的寄存器和内存操作数数据,判断目标函数参数是否被污染,如果内存或寄存器数据被污染,则将其指向的数据标记为污点数据;如果内存或寄存器数据被非污点数据覆盖,则删除污点;[0099]步骤2.2:污点传播;包括:[0100]污点变量根据指令语义和敏感函数的传播约束在程序中进行传播,当程序执行时,首先判断指令操作数所在寄存器或内存地址是否被污染,如果污染则将其标记为污点并赋予标签,然后修改污点变量的相关属性并将污点变量加入到属性链表中;如果此时污染的寄存器或内存地址被无污染的数据覆盖,则删除污点标记,然后执行下一条指令;[0101]通过模糊测试获取的crash文件和崩溃信息标记sink点,对于无效指令导致的崩溃,将eip寄存器标记为sink点;对于取消引用无效地址导致的崩溃,将通用寄存器标记为sink点;在程序执行时,当识别到sink点后对其进行污点标记并执行反向污点传播;[0102]步骤2.3:信息提取;包括:[0103]通过实时记录执行路径下的函数信息,并结合污点变量标签构建函数路径链表fp,函数路径链表fp包括执行次序fd、执行函数名fn、函数地址fa、栈基址sa,在程序执行过程中实时记录eip/ebp的状态和程序崩溃或结束时函数到达位置。[0104]进一步地,在污点标记过程中,每个污点变量用标签《id,ts,tt,tl》表示,其中id表示污点变量序号;ts表示污点变量的直接污染源,污点源的直接污染源为其自身;tt表示污点变量的内存污染情况,0表示无污染,否则表示污染;tl表示污点变量的属性链表,包括内存数据链表tl-mem和寄存器数据链表tl-reg,污点变量的属性包括污点变量的地址addr、大小size、直接污点源的长度len、变量的栈底指针ebp和指令指针eip。[0105]进一步地,所述可利用性分析模块具体用于:[0106]将正向污点分析和反向污点分析获取的两个不同的执行信息进行对比,查看执行路径是否重合,判断组件库的crash文件在二进制程序中是否可以到达脆弱点位置;然后分析eip寄存器是否被覆盖,包括eip/ebp是否为符号值,综合上述分析将分析结果分为直接可利用、可能可利用和不可利用三个等级。[0107]进一步地,所述可利用性分析规则包括:[0108]首先根据符号化污点分析模块获取的信息提取污点变量的函数执行路径,然后将正向污点分析执行路径与反向污点分析执行路径进行对比,如果在程序崩溃时执行路径相同,则将该漏洞归类为直接可利用漏洞,路径不同时进行下一步eip/ebp分析;如果程序执行结束而未发生崩溃,不论此时执行路径是否相同,都进行下一步eip/ebp分析;[0109]当检测到eip寄存器的值被污点变量的符号值覆盖时,表示该漏洞可能可利用,然后检查污点变量的属性标签,污点变量的最大安全范围为addr-ebp,实际使用范围为size,并且由直接污点源的长度len控制,因此如果污点变量的len》addr-ebp时,程序出现崩溃,此时查看当前函数内执行指令,如果是跳转指令或读写指令,则表示该漏洞为可能可利用,否则该漏洞为不可利用;[0110]将信号中断崩溃、空指针、除零、访问无效地址和软件配置错误归类为不可利用。[0111]综上,本发明面向公共组件库漏洞在真实软件中的可利用性分析问题,提出一种基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置,不依赖于源代码,并利用二进制(消费者)程序提取执行路径、函数地址等信息,能够对漏洞脆弱点进行匹配。本发明填补了漏洞自动化利用技术在分析公共组件库漏洞在真实软件中的可利用性分析的空缺,和其他技术相比能够发现更多的可利用性漏洞,并且不会带来更大的开销问题。[0112]以上所示仅是本发明的优选实施方式,应当指出,对于本
技术领域
:的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献