logo好方法网

一种漏洞路径优先级的符号执行调度方法及系统


技术摘要:
本发明公开了一种漏洞路径优先级的符号执行调度方法及系统,通过将待挖掘漏洞二进制程序逆向编译的可读文本,并将可读文本划分成多个片段,每个片段中包含至少一个基本块;分析漏洞潜在性高的基本块的复杂度,片段的复杂度,程序执行路径的复杂度,结合漏洞存在因素计  全部
背景技术:
随着社会经济的高速发展,面向源代码的应用漏洞挖掘技术已经有了显著的发 展,上线前安全渗透测试的强制性要求,能够有效发现应用中存在的部分漏洞,提升了应用 的安全性。然而,面向源代码的应用漏洞挖掘也存在一些不足,由于开发时使用高级语言(C 语言、Java等),实际运行时将被编译成二进制代码,在编译、链接的过程中可能由于设置不 当等多种原因引入漏洞,使得这些新引入的漏洞难以被检测,然而面向二进制程序的漏洞 挖掘具有语言无关性且不需要程序源代码,同时也不需要进行编译和链接,可以直接被执 行,因此对二进制程序开展漏洞挖掘能够发现面向源代码的漏洞挖掘难以发现的漏洞。面 向二进制程序的漏洞挖掘对于挖掘人员的技术要求高,整体挖掘难度较大,且需要较长时 间。在电网网络资产中,诸如配电系统的应用大多为C/S架构(例如:配电用电网络安全监测 系统),对于二进制程序的漏洞挖掘需求较大,依靠现有个别专业人员进行的手动挖掘难以 在效率上满足。 目前,二进制程序漏洞的分析、挖掘通常利用符号执行和约束求解相结合的方法, 由于符号执行存在路径爆炸、路径覆盖不全等问题,路径爆炸是目前符号执行遇到最大难 题,是由于程序中可执行的路径太多,如果每条路径都用符号执行的方式检测,会产生大量 的符号状态需要在内存中维持,这会大量占用计算机的内存资源,导致内存耗尽,符号执行 中断。如果对所有的代码路径进行随机选择并进行漏洞挖掘,需要的时间周期长,对二进制 程序来说,漏洞点所在位置的可达路径可能有多条,每条代码路径触发漏洞的难易程度不 一样,越晚发现漏洞对于商业软件来说受到的损失越大。在实际使用时,符号执行只能对浅 层代码进行测试,漏洞路径覆盖不全,加大计算量及计算时间。
技术实现要素:
因此,本发明提供的一种漏洞路径优先级的符号执行调度方法及系统,克服现有 技术中漏洞路径覆盖不全,计算量大及计算时间长的的缺陷,有利于快速、高效发现漏洞路 径。 为达到上述目的,本发明提供如下技术方案: 第一方面,本发明实施例提供一种漏洞路径优先级的符号执行调度方法,包括: 获取待挖掘漏洞二进制程序逆向编译的可读文本,并将可读文本划分成多个片 段,其中,每个片段中包含至少一个基本块; 计算各基本块的复杂度,并根据各基本块的复杂度计算片段的复杂度; 根据程序执行路径经过的片段的复杂度计算程序执行路径的复杂度; 根据程序执行路径的复杂度预测疑似漏洞点,结合漏洞存在因素计算疑似漏洞点 4 CN 111581099 A 说 明 书 2/8 页 所在程序执行路径的优先度,并对所有疑似漏洞点所在程序执行路径的优先度进行排序; 对优先度进行排序后的疑似漏洞点所在的程序执行路径进行符号执行,当符号执 行遇到分支指令时,判断跳转后的代码是否存在于程序执行路径中,如果超出程序执行路 径范围,则抛弃这一分支对应的符号求解值,否则,继续进行符号执行,直至发现崩溃或执 行完全部程序执行路径。 在一实施例中,所述计算各基本块的复杂度,并根据各基本块的复杂度计算片段 的复杂度的步骤,包括: 根据指令数量和指令类型计算各基本块的复杂度; 根据片段中各基本块的复杂度及基本块的数量,按照基本块的层级加权累和计算 片段的复杂度,其中,基本块的层级由在本片段中到达的条件决定。 在一实施例中,通过以下公式计算基本块的复杂度: 其中,Cb为基本块的复杂度,ni为对应指令类型的指令数量, 为对应指令类型 的指令权重值,γ为影响系数, 为基本块中涉及到的每一次栈操作时,栈顶到栈底的距 离,num为基本块中总的指令数量。 在一实施例中,根据参考指令的时间复杂度O(n)获得指令权重值 在一实施例中,通过以下公式计算片段的复杂度: 其中,θi为对应的片段中处于不同层级的基本块的权重; 为不同层级中第一个 基本块的复杂度, 是不同层级中第二个基本块的复杂度。 在一实施例中,漏洞存在因素包括:不同漏洞类型的漏洞对应代码出现频率和对 应代码复杂度。 在一实施例中,通过以下公式计算程序执行路径的复杂度: Cr=V(G)(Cf1 Cf2 …) V(G)=e-n 2 其中,V(G)为一条程序执行路径的圈复杂度,Cfi为程序执行路径中涉及到的所有 片段的复杂度,e为一条程序执行路径中边的数量,n为控制流图中的节点数量。 在一实施例中,通过以下公式计算疑似漏洞所在程序执行路径的优先度: 其中,Pv为漏洞出现概率,Pc为对应的与代码复杂度的关系,Cri是一条程序执行路 径的复杂度,α β=1。 第二方面,本发明实施例提供一种漏洞路径优先级的符号执行调度系统,包括: 文本获取模块,用于将待挖掘漏洞二进制程序逆向编译成可读文本,并将可读文 本划分出多个片段,其中,每个片段中包含至少一个基本块; 5 CN 111581099 A 说 明 书 3/8 页 片段的复杂度计算模块,用于根据各基本块的复杂度计算片段的复杂度; 程序执行路径的复杂度计算模块,用于利用程序执行路径经过的片段的复杂度计 算程序执行路径的复杂度; 程序执行路径优先度排序模块,用于利用程序执行路径的复杂度预测疑似漏洞 点,结合漏洞存在因素计算疑似漏洞点所在程序执行路径的优先度,并对所有疑似漏洞点 所在程序执行路径的优先度进行排序; 符号执行模块,用于根据对优先度进行排序后的疑似漏洞点所在的程序执行路径 进行符号执行,当符号执行遇到分支指令时,判断跳转后的代码是否存在于程序执行路径 中,如果超出程序执行路径范围,则抛弃这一分支对应的符号求解值,否则,继续进行符号 执行,直至发现崩溃或执行完全部程序执行路径。 第三方面,本发明实施例提供一种终端,包括:至少一个处理器,以及与所述至少 一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的 指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器执行本发明实施例 第一方面所述的漏洞路径优先级的符号执行调度方法。 第四方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介 质存储有计算机指令,所述计算机指令用于使所述计算机执行本发明实施例第一方面所述 的漏洞路径优先级的符号执行调度方法。 本发明技术方案,具有如下优点: 1.本发明提供的漏洞路径优先级的符号执行调度方法及系统,通过将待挖掘漏洞 二进制程序逆向编译的可读文本,并将可读文本划分成多个片段,每个片段中包含至少一 个基本块;计算各基本块的复杂度、片段的复杂度及程序执行路径的复杂度;根据程序执行 路径的复杂度预测疑似漏洞点,结合漏洞存在因素计算疑似漏洞点所在程序执行路径的优 先度,并对所有疑似漏洞点所在程序执行路径的优先度进行排序;对优先度进行排序后的 疑似漏洞点所在的程序执行路径进行符号执行,当符号执行遇到分支指令时,判断跳转后 的代码是否存在于程序执行路径中,如果超出程序执行路径范围,则抛弃这一分支对应的 符号求解值,否则,继续进行符号执行,直至发现崩溃或执行完全部程序执行路径。本发明 实施例对疑似漏洞点所在程序执行路径的优先度进行排序,根据优先度进行排序后的疑似 漏洞点所在的程序执行路径进行符号执行,优先挖掘容易触发漏洞的路径,缩小计算量,快 速、高效发现漏洞路径。 2.本发明提供的漏洞路径优先级的符号执行调度方法及系统,根据程序执行路径 的复杂度预测疑似漏洞点,结合漏洞存在因素计算疑似漏洞点所在程序执行路径的优先 度,并对所有疑似漏洞点所在程序执行路径的优先度进行排序,将漏洞风险和漏洞的存在 概率作为影响二进制漏洞挖掘路径优先级的重要因素,同时,对疑似漏洞的代码可达路径 的优先级排序,指导符号执行的执行路径,减少符号执行过程中对于计算机内存资源的占 用,降低符号执行过程中的路径爆炸问题的可能性。 附图说明 为了更清楚地说明本发明
下载此资料需消耗2积分,
分享到:
收藏