CN116522345A - 漏洞挖掘方法、装置、设备及可读存储介质 - Google Patents

漏洞挖掘方法、装置、设备及可读存储介质 Download PDF

Info

Publication number
CN116522345A
CN116522345A CN202310328618.XA CN202310328618A CN116522345A CN 116522345 A CN116522345 A CN 116522345A CN 202310328618 A CN202310328618 A CN 202310328618A CN 116522345 A CN116522345 A CN 116522345A
Authority
CN
China
Prior art keywords
executable file
code
target
inline assembly
test
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202310328618.XA
Other languages
English (en)
Inventor
陈楠
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang Geely Holding Group Co Ltd
Zhejiang Zeekr Intelligent Technology Co Ltd
Original Assignee
Zhejiang Geely Holding Group Co Ltd
Zhejiang Zeekr Intelligent Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhejiang Geely Holding Group Co Ltd, Zhejiang Zeekr Intelligent Technology Co Ltd filed Critical Zhejiang Geely Holding Group Co Ltd
Priority to CN202310328618.XA priority Critical patent/CN116522345A/zh
Publication of CN116522345A publication Critical patent/CN116522345A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请提供一种漏洞挖掘方法、装置、设备及可读存储介质,所述方法包括:获取待测可执行文件中函数的字节码;确定所述字节码对应的内联汇编代码,并对所述内联汇编代码进行插桩处理,得到插桩后的内联汇编代码;根据所述插桩后的内联汇编代码和预设的用于随机生成测试用例的模糊测试程序得到目标可执行文件,并根据所述测试用例下所述目标可执行文件的运行信息确定所述待测可执行文件的漏洞。应用本申请提供的技术方案,降低了资源消耗,提高了漏洞挖掘效率和准确率。

Description

漏洞挖掘方法、装置、设备及可读存储介质
技术领域
本申请涉及信息安全领域,尤其涉及一种漏洞挖掘方法、装置、设备及可读存储介质。
背景技术
漏洞是在软件、硬件、协议的具体实现或系统安全策略上存在的缺陷和不足,一旦某些较严重的漏洞被攻击者发现,就有可能被其利用,在未授权的情况下访问或破坏计算机系统。漏洞挖掘技术是指对未知漏洞的探索,综合应用各种技术和工具,尽可能地找出软件中的潜在漏洞,先于攻击者发现并及时修补漏洞。漏洞的存在不可避免,通过漏洞挖掘技术,可有效减少来自网络的威胁。
现有技术中,对可执行文件的漏洞挖掘通常使用虚拟化技术,如使用软件模拟器QEMU模拟硬件平台的环境,并在该模拟器上运行可执行文件,使用特定工具对模拟器中可执行文件的运行行为进行分析,采用此种方式存在运行速度慢、产生模拟误差以及性能资源消耗大的问题。
发明内容
有鉴于此,为解决上述技术问题,本申请提供一种漏洞挖掘方法、装置、设备及可读存储介质。
具体地,本申请是通过如下技术方案实现的:
根据本申请实施例的第一方面,提供一种漏洞挖掘方法,所述方法包括:
获取待测可执行文件中函数的字节码;
确定所述字节码对应的内联汇编代码,并对所述内联汇编代码进行插桩处理,得到插桩后的内联汇编代码;
根据所述插桩后的内联汇编代码和预设的用于随机生成测试用例的模糊测试程序得到目标测试程序,并将所述目标测试程序编译成目标可执行文件,所述模糊测试程序用于调用所述内联汇编代码;
控制所述目标可执行文件运行,并根据所述测试用例下所述目标可执行文件的运行信息确定所述待测可执行文件的漏洞。
可选地,所述获取待测可执行文件中函数的字节码包括:
对所述待测可执行文件进行解析,获取设定信息,所述设定信息至少包括所述待测可执行文件中函数的起始地址和地址偏移量;
根据所述设定信息,确定所述待测可执行文件中的函数的位置并提取所述位置对应的字节码。
可选地,所述确定所述字节码对应的内联汇编代码包括:
对所述字节码进行重定位操作,确定所述字节码对应的物理内存地址;
根据所述字节码的物理内存地址,将重定位后的字节码作反汇编处理,得到对应的内联汇编代码。
可选地,所述对所述内联汇编代码进行插桩处理,包括:
根据用户输入的插桩位置和插桩代码,在所述内联汇编代码中进行插桩;或,
根据内联汇编代码中的跳转指令确定插桩位置,并在所述插桩位置插入预设的插桩代码。
可选地,所述根据所述插桩后的内联汇编代码和预设的用于生成测试用例的模糊测试程序得到目标测试程序,包括:
将所述插桩后的内联汇编代码与所述模糊测试程序进行组装合并,以构建所述模糊测试程序和所述插桩后的内联汇编代码之间的调用关系,确定组装合并后的程序为目标测试程序,所述调用关系用于表征所述模糊测试程序生成随机测试用例时触发所述插桩后的内联汇编代码中的函数根据所述测试用例运行。
可选地,所述模糊测试程序可以通过下述至少一种方式生成所述测试用例,所述方式包括:
根据目标可执行文件的运行所需参数类型和个数,随机生成测试用例;或,
根据用户设置的测试用例样本或当前已输入的测试用例,随机突变生成新的测试用例;或,
根据当前已输入的测试用例以及该测试用例对应的代码覆盖率,生成新的测试用例。
可选地,所述运行信息至少包括目标可执行文件的控制流信息和数据流信息;所述运行信息是根据所述插桩处理所添加的插桩代码反馈的信息确定的;
所述根据所述测试用例下所述目标可执行文件的运行信息确定漏洞,包括:
根据输入所述测试用例后所述目标可执行文件的控制流信息,检测所述目标可执行文件是否发生崩溃;
在所述目标可执行文件发生崩溃的情况下,根据所述数据流信息确定所述待测可执行文件的漏洞。
根据本申请实施例的第二方面,提供一种漏洞挖掘装置,所述装置包括:
字节码获取模块,用于获取待测可执行文件中函数的字节码;
插桩处理模块,用于确定所述字节码对应的内联汇编代码,并对所述内联汇编代码进行插桩处理,得到插桩后的内联汇编代码;
目标文件确定模块,用于根据所述插桩后的内联汇编代码和预设的用于随机生成测试用例的模糊测试程序得到目标测试程序,并将所述目标测试程序编译成目标可执行文件,所述模糊测试程序用于调用所述内联汇编代码;
漏洞确定模块,用于控制所述目标可执行文件运行,并根据所述测试用例下所述目标可执行文件的运行信息确定所述待测可执行文件的漏洞。
可选地,所述字节码获取模块具体用于:
对所述待测可执行文件进行解析,获取设定信息,所述设定信息至少包括所述待测可执行文件中函数的起始地址和地址偏移量;
根据所述设定信息,确定所述待测可执行文件中的函数的位置并提取所述位置对应的字节码。
可选地,所述插桩处理模块具体用于:
对所述字节码进行重定位操作,确定所述字节码对应的物理内存地址;
根据所述字节码的物理内存地址,将重定位后的字节码作反汇编处理,得到对应的内联汇编代码。
可选地,所述插桩处理模块具体用于:
根据用户输入的插桩位置和插桩代码,在所述内联汇编代码中进行插桩;或,
根据内联汇编代码中的跳转指令确定插桩位置,并在所述插桩位置插入预设的插桩代码。
可选地,所述目标文件确定模块具体用于:
将所述插桩后的内联汇编代码与所述模糊测试程序进行组装合并,以构建所述模糊测试程序和所述插桩后的内联汇编代码之间的调用关系,确定组装合并后的程序为目标测试程序,所述调用关系用于表征所述模糊测试程序生成随机测试用例时触发所述插桩后的内联汇编代码中的函数根据所述测试用例运行。
可选地,所述模糊测试程序可以通过下述至少一种方式生成所述测试用例,所述方式包括:
根据目标可执行文件的运行所需参数类型和个数,随机生成测试用例;或,
根据用户设置的测试用例样本或当前已输入的测试用例,随机突变生成新的测试用例;或,
根据当前已输入的测试用例以及该测试用例对应的代码覆盖率,生成新的测试用例。
可选地,所述运行信息至少包括目标可执行文件的控制流信息和数据流信息;所述运行信息是根据所述插桩处理所添加的插桩代码反馈的信息确定的;所述漏洞确定模块具体用于:
根据输入所述测试用例后所述目标可执行文件的控制流信息,检测所述目标可执行文件是否发生崩溃;
在所述目标可执行文件发生崩溃的情况下,根据所述数据流信息确定所述待测可执行文件的漏洞。
根据本申请实施例的第三方面,提供一种电子设备,所述电子设备包括:存储器和处理器;所述存储器,用于存储计算机程序;所述处理器,用于通过调用所述计算机程序,执行上述漏洞挖掘方法。
根据本申请实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述漏洞挖掘方法。
本申请实施例提供的技术方案可以包括以下有益效果:
在上述本申请提供的技术方案中,通过对待测可执行文件中的函数的字节码进行提取、重定位处理、插桩,以内联汇编的方式与模糊测试程序构建目标可执行文件并根据该文件的测试运行情况确定待测可执行文件的漏洞,在降低了资源消耗的同时提高了漏洞挖掘效率和准确率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的和解释性的,并不能限制本申请。此外,本申请中的任一实施例并不需要达到上述的全部效果。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1是本申请一示例性实施例示出的一种漏洞挖掘方法流程示意图;
图2-1是本申请一示例性实施例示出的一种可执行文件中的函数起始位置对应的字节码示例图;
图2-2是本申请一示例性实施例示出的一种可执行文件中的函数结束位置对应的字节码示例图;
图2-3是本申请一示例性实施例示出的一种通过交互式反汇编器IDA分析可执行文件获取函数结束位置的部分过程示意图;
图3是本申请一示例性实施例示出的一种函数的字节码对应的部分内联汇编代码的示意图;
图4是本申请一示例性实施例示出的另一种漏洞挖掘方法流程示意图;
图5是本申请一示例性实施例示出的一种漏洞挖掘装置的结构示意图;
图6是本申请一示例性实施例示出的一种电子设备的硬件示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一分类阈值也可以被称为第二分类阈值,类似地,第二分类阈值也可以被称为第一分类阈值。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
二进制漏洞挖掘是用于发现二进制程序中的安全漏洞的方法,通常使用虚拟化技术,如软件模拟器QEMU来运行该二进制程序,并使用特定的工具来分析该程序运行行为,然而,使用软件模拟器进行二进制漏洞挖掘存在以下缺点:
一方面,由于软件模拟器模拟的是软件环境,因此二进制程序在模拟器中的运行速度会比真实硬件上的运行速度慢,其漏洞挖掘效率较低;另一方面,在软件模拟器上模拟运行待测的二进制程序,会消耗较大的计算资源;另外,软件模拟器只能模拟部分硬件平台的软件环境,并不支持所有硬件平台上的二进制程序运行,且软件环境模拟可能存在模拟误差,可能会使得软件模拟器上和真实硬件平台上的二进制程序运行表现不同,影响漏洞挖掘的准确率。
有鉴于此,为解决上述技术问题,本申请提出了一种漏洞挖掘方法,参见图1所示,该方法可以包括下述步骤:
S101,获取待测可执行文件中函数的字节码;
其中,所述可执行文件是指源代码文件经过编译处理得到的、可以在相应平台运行的文件,该可执行文件通常可以包括so、ko、exe、bin、com、bat等文件后缀格式。例如,以JAVA语言编写好的代码文件为源代码文件,通过编译器编译处理得到的后缀为class的字节码文件,该字节码为所述可执行文件,所述字节码文件可以在任何一台机器的Java虚拟机JVM上运行。
可执行文件按照段来组织,简单来说包括代码段和数据段,所述代码段包含特殊类型的数据以及程序的可执行部分,该可执行部分由程序的实现函数堆叠而成。
在获取到待测可执行文件后,确定该可执行文件中代码段的函数所在位置,将所述函数的字节码从该可执行文件中提取出来。其中,在确定代码段的函数所在位置时,可以通过预设的可执行文件分析方法识别代码段的函数起始位置和结束位置,从而基于代码段中函数的起始位置和结束位置确定函数所在位置。
S102,确定所述字节码对应的内联汇编代码,并对所述内联汇编代码进行插桩处理,得到插桩后的内联汇编代码;
内联汇编代码是指插入高级语言(例如C语言)中的汇编语言编写的代码或者代码段,通常使用关键字asm实现,由asm作为汇编指令和包含汇编指令的高级语言程序的接口。
基于源代码要经过编译器的预处理、编译、汇编以及链接处理后得到可执行文件,将步骤S101获取的函数的字节码转换内联汇编代码则要经过反汇编处理,可以借助现有的反汇编工具实现。
插桩是指在保证逻辑完整性的基础上,在所述内联汇编代码中插入若干探针,通过探针采集运行过程中产生的运行信息,从而依据所述运行信息实现测试目的;其中,所述探针可以是预设的用于实现插桩目的的执行代码,对于不同的插桩目的,可以选择不同的插桩代码。比如说,想要获取所述内联汇编代码中的函数的运行时间,可以在每个函数的入口位置和函数的结束位置插入用于统计时长的插桩代码;又或者,需要确定输入的测试数据对所述内联汇编代码的代码覆盖率,可以根据汇编代码中的跳转指令确定插桩位置,并在该位置插入反馈运行信息的插桩代码。
对所述内联汇编代码进行插桩处理,可以在对字节码做反汇编的过程中进行动态插桩操作,也可以在获取字节码对应的完成内联汇编代码后通过人工插桩的方式对所述汇编代码进行插桩、或借助现有汇编代码插桩工具实现插桩。
S103,根据所述插桩后的内联汇编代码和预设的用于随机生成测试用例的模糊测试程序得到目标测试程序,并将所述目标测试程序编译成目标可执行文件,所述模糊测试程序用于调用所述内联汇编代码;
模糊测试是一种软件测试技术,其核心思想是将自动或半自动生成的随机数据输入到待测程序中,随机数据与待测程序的预期输入有或多或少的差别,监视程序异常,例如崩溃、断言失败,发现可能的程序错误,比如内存泄漏、存储器区段错误、堆栈缓冲区溢出等,在程序异常时会记录下与崩溃相关的所有详细信息,以供进一步分析。
其中,崩溃是指应用程序或操作系统等计算机程序遇到无法处理的错误或异常而引起的程序异常运行行为,如待测程序非正常退出、无响应、报错、输出无法控制以及意料之外的输出等。
所述模糊测试程序以源代码的形式存在,可以生成模糊测试所需的随机测试用例,所述测试用例作为所述插桩后的内联汇编代码的运行参数输入值。
在得到插桩后的内联汇编代码后,将所述插桩后的内联汇编代码和以源码形式存在的模糊测试程序组合在一起,得到目标测试程序,所述目标测试程序具备程序逻辑上完整性以及可运行性;从逻辑上讲,当所述模糊测试程序生成测试用例时,将该测试用例作为所述插桩后的内联汇编代码输入,内联汇编代码根据该测试用例开始运行。
将得到的目标测试程序编译成目标可执行文件时,可以通过调用跨平台编译工具链实现编译目的,所述目标可执行文件可以在相应硬件平台上运行,所述编译工具选取取决于所述硬件平台。
在一个示例中,若步骤S101中所述的待测可执行文件在硬件平台A上运行,在得到目标测试程序后,调用编译工具链将所述目标测试程序编译成所述硬件平台A能支持运行的目标可执行文件,以实现在原生平台上运行目标可执行文件,并进行后续的漏洞分析。
S104,控制所述目标可执行文件运行,并根据所述测试用例下所述目标可执行文件的运行信息确定所述待测可执行文件的漏洞。
控制所述目标可执行文件运行至少可以包括下述任一种方式:可以发送程序运行控制指令以启动所述目标可执行文件的运行,即令所述目标可执行文件中的模糊测试程序运行并生成对应的测试用例,从而触发内联汇编代码部分的运行;也可以通过传输预设的测试用例样本至所述目标可执行文件,触发所述目标可执行文件开始运行,所述模糊测试程序可以根据该测试用例样本生成新的测试用例。
在所述目标可执行文件运行期间,可以记录所述目标可执行文件运行每一测试用例对应的日志信息,所述运行信息以及测试用例对应的测试结果可以通过可视化界面向用户展示;当输入测试用例后所述目标可执行文件出现崩溃情况时,表示当前发生异常的代码段可能存在漏洞,获取所述目标可执行文件出现异常的每一测试用例对应的运行信息,从而可以依据所述运行信息确定出所述待测可执行文件的漏洞。
在上述实施例中,通过对待测可执行文件中的函数的字节码进行提取、重定位处理、插桩,以内联汇编的方式与模糊测试程序构建目标可执行文件并根据该文件的测试运行情况确定待测可执行文件的漏洞,在降低了资源消耗的同时提高了漏洞挖掘效率和准确率。
在一些实施例中,在获取待测可执行文件中函数的字节码时,可以通过下述步骤实现,所述步骤可以包括:
S1011,对所述待测可执行文件进行解析,获取设定信息,所述设定信息至少包括所述待测可执行文件中函数的起始地址和地址偏移量;
S1012,根据所述设定信息,确定所述待测可执行文件中的函数的位置并提取所述位置对应的字节码。
其中,在获取到待测可执行文件后,可以先确定所述可执行文件的格式,根据预设的不同格式的可执行文件的解析方法,进一步对所述可执行文件进行解析,获取所述可执行文件中的代码段的函数起始位置和结束位置,从而依据该起始位置和结束位置可以确定可执行文件中的函数的字节码的位置,以实现函数的字节码的提取。
例如,图2-1和2-2所示为一种待测可执行文件的代码段中函数对应的部分字节码,其中,图2-1中的方框所选中的“.text:002493D4”表示该可执行文件中函数的起始地址,图2-2中的方框所选中内容“.text:00249480”表示所述可执行文件中函数的结束地址,依据该起始位置和结束位置可以在所述待测可执行文件确定并提取出函数的字节码,也即确定“.text:002493D4”至“.text:00249480”之间的字节码为函数字节码并将其提取出来。
在一个示例中,可以使用交互式反汇编器IDA对所述待测可执行文件进行分析,确定代码段中函数的起始位置和结束位置,进一步确定函数在可执行文件中的起始地址和结束地址,从而提取函数的字节码。如图2-3所示,图示为对图2-1所示的可执行文件中的函数的字节码通过IDA分析确定出的函数结束位置所在函数块,其中,图示最下方的函数块“loc_248478”即为函数结束位置所在函数块,该函数的“pop{R4-R7,PC}”在可执行文件中的地址即为函数的结束地址”,与图2-2所示的函数的部分字节码比较,“pop{R4-R7,PC}”对应的地址为“.text:00249480”,该地址即为函数结束地址。
在一些实施例中,所述确定所述字节码对应的内联汇编代码可以包括以下步骤:
S1021,对所述字节码进行重定位操作,确定所述字节码对应的物理内存地址;
S1022,根据所述字节码的物理内存地址,将重定位后的字节码作反汇编处理,得到对应的内联汇编代码。
其中,在本申请实施例中,所述重定位操作的目的是对所述可执行文件中的函数的字节码的逻辑地址和其对应的物理内存地址的映射关系进行校验和修正,当存在逻辑地址和物理内存地址不对应时修正地址对应关系;将重定位的字节码作反汇编处理,可以通过现有的反汇编工具实现,如IDA、w32dasm等。
如图3所示的对获取的函数的字节码进行反汇编处理、通过关键字asm实现的部分内联汇编代码,图中关键字short后所跟的十六进制用于表示待调用的函数的物理内存地址,如运行到_asm(“.short 0x9302”)时,需要在内存中的“0x9302”这个位置查找对应函数。
在一些实施例中,可以通过下述任一种方式或者将两种方式结合在一起对所述内联汇编代码进行插桩处理,所述方式至少可以包括:
根据用户输入的插桩位置和插桩代码,在所述内联汇编代码中进行插桩;或,根据内联汇编代码中的跳转指令确定插桩位置,并在所述插桩位置插入预设的插桩代码。
也即,可以通过人为确定所述内联汇编代码中的插桩位置、该插桩位置对应的插桩代码,以人工插桩的方式实现内联汇编代码的插桩;或者,也可以借助现有的自动化插桩工具,根据插桩目的分析确定内联汇编代码中的插桩位置,并在该位置上插入对应插桩目的的插桩代码。
在本公开实施例中,通过人工插桩或借助插桩工具的方式实现对内联汇编代码的插桩处理,以通过所述插桩代码获取所述内联汇编代码执行测试用例时的运行信息。
在一些实施例中,所述根据所述插桩后的内联汇编代码和预设的用于生成测试用例的模糊测试程序得到目标测试程序,具体可以包括如下步骤:
将所述插桩后的内联汇编代码与所述模糊测试程序进行组装合并,以构建所述模糊测试程序和所述插桩后的内联汇编代码之间的调用关系,确定组装合并后的程序为目标测试程序,所述调用关系用于表征所述模糊测试程序生成随机测试用例时触发所述插桩后的内联汇编代码中的函数根据所述测试用例运行。
其中,所述模糊测试程序生成随机测试用例触发函数运行可以包括下述方式:一种是所述模糊测试程序所生成的随机测试用例中包含所述内联汇编代码的部分分支路径所需的相关输入参数,所述分支路径是指内联汇编代码中的顺次调用函数的运行路径,如以函数f1作为开始函数,在函数f1中顺序调用f2、f3,函数f2中调用函数f4,则分支路径可以包括f1→f2→f4、f1→f3,当所述模糊测试程序生成测试用例时,会触发所述内联汇编代码中的部分指令调用相应函数开始运行。
在一些实施例中,所述模糊测试程序可以通过下述至少一种方式生成所述测试用例,所述方式可以包括:
根据目标可执行文件的运行所需参数类型和个数,随机生成测试用例;或,根据用户设置的测试用例样本或当前已输入的测试用例,随机突变生成新的测试用例;或,根据当前已输入的测试用例以及该测试用例对应的代码覆盖率,生成新的测试用例。
其中,在根据用户设置的测试用例样本或当前已输入的测试用例生成新的测试用例时,可以依据已有的测试用例通过遗传算法进行随机突变,如通过选择、杂交、变异生成新的数据。
所述代码覆盖率是用于描述当前测试用例下待测程序执行时程序的源代码被执行的程度的度量,具有高代码覆盖率(以百分比测量)的待测程序在测试期间执行更多的源代码。
在根据当前已输入的测试用例和该测试用例对应的代码覆盖率生成新的测试用例时,可以配置为生成新的测试用例类似于发现新的代码覆盖率的当前测试用例,也即当前测试用例对应新的代码覆盖率,则生成类似该测试用例的新用例。
在一些实施例中,所述运行信息至少包括目标可执行文件的控制流信息和数据流信息;所述运行信息是根据所述插桩处理所添加的插桩代码反馈的信息确定的;所述根据所述测试用例下所述目标可执行文件的运行信息确定漏洞,可以包括如下步骤:
S1041,根据输入所述测试用例后所述目标可执行文件的控制流信息,检测所述目标可执行文件是否发生崩溃;
S1042,在所述目标可执行文件发生崩溃的情况下,根据所述数据流信息确定所述待测可执行文件的漏洞。
所述控制流信息用于指示所述内联汇编代码中的指令调用和控制关系;根据所述测试用例对应的控制流信息、以及所述内联汇编代码正常运行时的参考控制流信息,可以确定所述目标可执行文件是否发生崩溃,并且在文件发生崩溃时,依据所述控制流信息可以确定发生崩溃的内联汇编代码段。
所述数据流信息用于指示所述测试用例在内联汇编代码中的数据执行路径以及发生异常时目标可执行文件中的变量情况,依据所述数据流信息分析确定发生崩溃的内联汇编代码是否包含疑似的漏洞代码。
接下来,本申请实施例提供了另一种漏洞挖掘方法,所述漏洞挖掘方法应用于运行待测可执行文件的硬件平台,如图4所示,所述方法可以包括以下实现步骤:
待测可执行文件解析:对获取的待测可知性文件进行解析,可以包括下述解析内容:识别待测可执行文件的格式,即根据待测可执行文件的后缀确定文件格式;解析获取待测可执行文件的指令集架构,如arm、armx64、x86、x64、mips、powerpc等;获取待测可执行文件的代码信息,该代码信息具体可以包括导入导出表、函数起始地址、函数结束地址、函数运行所需输入参数类型和个数等。
函数字节码提取:根据获取的所述待测可执行文件的代码信息,从所述待测可执行文件的代码段中提取出函数的字节码信息。
字节码重定位:修正所述字节码中的变量和指针地逻辑地址与对应的物理内存地址的错误对应关系,以使得所述字节码中的各种逻辑地址与物理内存地址正确对应,从而保证后续程序正常运行。
插桩处理:通过现有的反汇编工具,将所述重定位后的字节码转换为内联汇编代码,并借助现有的插桩工具向所述内联汇编代码中插入预设的插桩代码,得到插桩后的内联汇编代码,所述插桩代码用于监测所述内联汇编代码的运行情况、抓取异常信息或获取代码覆盖率信息。
组装、编译处理:将所述插桩后的内联汇编代码与预设的模糊测试程序组装合并,以实现程序的逻辑完整性和调用关系,确定组装合并的程序为目标测试程序,并调用编译工具链将所述目标测试程序编译为目标可执行文件;所述目标可执行文件可以在运行所述待测可执行文件的硬件平台上运行,所述调用关系用于表征所述模糊测试程序生成测试用例时触发所述内联汇编代码运行,所述模糊测试程序以源码的形式存在。
测试与确定漏洞:通过控制指令启动所述目标可执行文件运行,并获取所述目标可执行文件在所述测试用例下的运行信息,根据运行信息中的控制流信息和数据流信息确定所述待测可执行文件的漏洞。
在上述实施例中,通过对待测可执行文件中的函数的字节码进行提取、重定位处理、插桩,以内联汇编的方式与模糊测试程序构建目标可执行文件并根据该文件的测试运行情况确定待测可执行文件的漏洞,在降低了资源消耗的同时提高了漏洞挖掘效率和准确率。
与前述漏洞挖掘方法的实施例相对应,参见图5所示,本申请还提供了漏洞挖掘装置的实施例,所述装置包括:
字节码获取模块501,用于获取待测可执行文件中函数的字节码;
插桩处理模块502,用于确定所述字节码对应的内联汇编代码,并对所述内联汇编代码进行插桩处理,得到插桩后的内联汇编代码;
目标文件确定模块503,用于根据所述插桩后的内联汇编代码和预设的用于随机生成测试用例的模糊测试程序得到目标测试程序,并将所述目标测试程序编译成目标可执行文件,所述模糊测试程序用于调用所述内联汇编代码;
漏洞确定模块504,用于控制所述目标可执行文件运行,并根据所述测试用例下所述目标可执行文件的运行信息确定所述待测可执行文件的漏洞。
在一些实施例中,所述字节码获取模块具体用于:
对所述待测可执行文件进行解析,获取设定信息,所述设定信息至少包括所述待测可执行文件中函数的起始地址和地址偏移量;
根据所述设定信息,确定所述待测可执行文件中的函数的位置并提取所述位置对应的字节码。
在一些实施例中,所述插桩处理模块具体用于:
对所述字节码进行重定位操作,确定所述字节码对应的物理内存地址;
根据所述字节码的物理内存地址,将重定位后的字节码作反汇编处理,得到对应的内联汇编代码。
在一些实施例中,所述插桩处理模块具体用于:
根据用户输入的插桩位置和插桩代码,在所述内联汇编代码中进行插桩;或,
根据内联汇编代码中的跳转指令确定插桩位置,并在所述插桩位置插入预设的插桩代码。
在一些实施例中,所述目标文件确定模块具体用于:
将所述插桩后的内联汇编代码与所述模糊测试程序进行组装合并,以构建所述模糊测试程序和所述插桩后的内联汇编代码之间的调用关系,确定组装合并后的程序为目标测试程序,所述调用关系用于表征所述模糊测试程序生成随机测试用例时触发所述插桩后的内联汇编代码中的函数根据所述测试用例运行。
在一些实施例中,所述模糊测试程序可以通过下述至少一种方式生成所述测试用例,所述方式包括:
根据目标可执行文件的运行所需参数类型和个数,随机生成测试用例;或,
根据用户设置的测试用例样本或当前已输入的测试用例,随机突变生成新的测试用例;或,
根据当前已输入的测试用例以及该测试用例对应的代码覆盖率,生成新的测试用例。
在一些实施例中,所述运行信息至少包括目标可执行文件的控制流信息和数据流信息;所述运行信息是根据所述插桩处理所添加的插桩代码反馈的信息确定的;所述漏洞确定模块具体用于:
根据输入所述测试用例后所述目标可执行文件的控制流信息,检测所述目标可执行文件是否发生崩溃;
在所述目标可执行文件发生崩溃的情况下,根据所述数据流信息确定所述待测可执行文件的漏洞。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本申请实施例还提供了一种电子设备,该电子设备的结构示意图如图6所示,该电子设备600包括至少一个处理器601、存储器602和总线603,至少一个处理器601均与存储器602电连接;存储器602被配置用于存储有至少一个计算机可执行指令,处理器601被配置用于执行该至少一个计算机可执行指令,从而执行如本申请中任意一个实施例或任意一种可选实施方式提供的任意一种漏洞挖掘方法的步骤。
进一步,处理器601可以是FPGA(Field-Programmable Gate Array,现场可编程门阵列)或者其它具有逻辑处理能力的器件,如MCU(Microcontroller Unit,微控制单元)、CPU(Central Process Unit,中央处理器)。
在本申请实施例提供的技术方案中,通过对待测可执行文件中的函数的字节码进行提取、重定位处理、插桩,以内联汇编的方式与模糊测试程序构建目标可执行文件并根据该文件的测试运行情况确定待测可执行文件的漏洞,在降低了资源消耗的同时提高了漏洞挖掘效率和准确率。
本申请实施例还提供了另一种可读存储介质,存储有计算机程序,该计算机程序用于被处理器执行时实现本申请中任意一个实施例或任意一种可选实施方式提供的任意一种漏洞挖掘方法的步骤。
本申请实施例提供的可读存储介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(Random AccessMemory,随即存储器)、EPROM(Erasable Programmable Read-Only Memory,可擦写可编程只读存储器)、EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,可读存储介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。
在本申请实施例提供的技术方案中,通过对待测可执行文件中的函数的字节码进行提取、重定位处理、插桩,以内联汇编的方式与模糊测试程序构建目标可执行文件并根据该文件的测试运行情况确定待测可执行文件的漏洞,在降低了资源消耗的同时提高了漏洞挖掘效率和准确率。
由此,主题的特定实施例已被描述。其他实施例在所附权利要求书的范围以内。在某些情况下,权利要求书中记载的动作可以以不同的顺序执行并且仍实现期望的结果。此外,附图中描绘的处理并非必需所示的特定顺序或顺次顺序,以实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。
虽然本说明书包含许多具体实施细节,但是这些不应被解释为限制任何发明的范围或所要求保护的范围,而是主要用于描述特定发明的具体实施例的特征。本说明书内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

Claims (10)

1.一种漏洞挖掘方法,其特征在于,所述方法包括:
获取待测可执行文件中函数的字节码;
确定所述字节码对应的内联汇编代码,并对所述内联汇编代码进行插桩处理,得到插桩后的内联汇编代码;
根据所述插桩后的内联汇编代码和预设的用于随机生成测试用例的模糊测试程序得到目标测试程序,并将所述目标测试程序编译成目标可执行文件,所述模糊测试程序用于调用所述内联汇编代码;
控制所述目标可执行文件运行,并根据所述测试用例下所述目标可执行文件的运行信息确定所述待测可执行文件的漏洞。
2.根据权利要求1所述的方法,其特征在于,所述获取待测可执行文件中函数的字节码包括:
对所述待测可执行文件进行解析,获取设定信息,所述设定信息至少包括所述待测可执行文件中函数的起始地址和地址偏移量;
根据所述设定信息,确定所述待测可执行文件中的函数的位置并提取所述位置对应的字节码。
3.根据权利要求1所述的方法,其特征在于,所述确定所述字节码对应的内联汇编代码包括:
对所述字节码进行重定位操作,确定所述字节码对应的物理内存地址;
根据所述字节码的物理内存地址,将重定位后的字节码作反汇编处理,得到对应的内联汇编代码。
4.根据权利要求1所述的方法,其特征在于,所述对所述内联汇编代码进行插桩处理,包括:
根据用户输入的插桩位置和插桩代码,在所述内联汇编代码中进行插桩;或,
根据内联汇编代码中的跳转指令确定插桩位置,并在所述插桩位置插入预设的插桩代码。
5.根据权利要求1所述的方法,其特征在于,所述根据所述插桩后的内联汇编代码和预设的用于生成测试用例的模糊测试程序得到目标测试程序,包括:
将所述插桩后的内联汇编代码与所述模糊测试程序进行组装合并,以构建所述模糊测试程序和所述插桩后的内联汇编代码之间的调用关系,确定组装合并后的程序为目标测试程序,所述调用关系用于表征所述模糊测试程序生成随机测试用例时触发所述插桩后的内联汇编代码中的函数根据所述测试用例运行。
6.根据权利要求1所述的方法,其特征在于,所述模糊测试程序通过下述至少一种方式生成所述测试用例,所述方式包括:
根据目标可执行文件的运行所需参数类型和个数,随机生成测试用例;或,
根据用户设置的测试用例样本或当前已输入的测试用例,随机突变生成新的测试用例;或,
根据当前已输入的测试用例以及该测试用例对应的代码覆盖率,生成新的测试用例。
7.根据权利要求1所述的方法,其特征在于,所述运行信息至少包括目标可执行文件的控制流信息和数据流信息;所述运行信息是根据所述插桩处理所添加的插桩代码反馈的信息确定的;
所述根据所述测试用例下所述目标可执行文件的运行信息确定漏洞,包括:
根据输入所述测试用例后所述目标可执行文件的控制流信息,检测所述目标可执行文件是否发生崩溃;
在所述目标可执行文件发生崩溃的情况下,根据所述数据流信息确定所述待测可执行文件的漏洞。
8.一种漏洞挖掘装置,其特征在于,所述装置包括:
字节码获取模块,用于获取待测可执行文件中函数的字节码;
插桩处理模块,用于确定所述字节码对应的内联汇编代码,并对所述内联汇编代码进行插桩处理,得到插桩后的内联汇编代码;
目标文件确定模块,用于根据所述插桩后的内联汇编代码和预设的用于随机生成测试用例的模糊测试程序得到目标测试程序,并将所述目标测试程序编译成目标可执行文件,所述模糊测试程序用于调用所述内联汇编代码;
漏洞确定模块,用于控制所述目标可执行文件运行,并根据所述测试用例下所述目标可执行文件的运行信息确定所述待测可执行文件的漏洞。
9.一种电子设备,其特征在于,包括:存储器、处理器;
所述存储器,用于存储计算机程序;
所述处理器,用于调用所述计算机程序以实现如权利要求1-7任一项所述的漏洞挖掘方法。
10.一种可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-7任一项所述的漏洞挖掘方法。
CN202310328618.XA 2023-03-27 2023-03-27 漏洞挖掘方法、装置、设备及可读存储介质 Pending CN116522345A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310328618.XA CN116522345A (zh) 2023-03-27 2023-03-27 漏洞挖掘方法、装置、设备及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310328618.XA CN116522345A (zh) 2023-03-27 2023-03-27 漏洞挖掘方法、装置、设备及可读存储介质

Publications (1)

Publication Number Publication Date
CN116522345A true CN116522345A (zh) 2023-08-01

Family

ID=87400214

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310328618.XA Pending CN116522345A (zh) 2023-03-27 2023-03-27 漏洞挖掘方法、装置、设备及可读存储介质

Country Status (1)

Country Link
CN (1) CN116522345A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116775040A (zh) * 2023-08-16 2023-09-19 北京安普诺信息技术有限公司 实现代码疫苗的插桩方法及基于代码疫苗的应用测试方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116775040A (zh) * 2023-08-16 2023-09-19 北京安普诺信息技术有限公司 实现代码疫苗的插桩方法及基于代码疫苗的应用测试方法
CN116775040B (zh) * 2023-08-16 2023-11-17 北京安普诺信息技术有限公司 实现代码疫苗的插桩方法及基于代码疫苗的应用测试方法

Similar Documents

Publication Publication Date Title
Huang et al. Crax: Software crash analysis for automatic exploit generation by modeling attacks as symbolic continuations
TWI553503B (zh) 產生候選鈎點以偵測惡意程式之方法及其系統
Xu et al. Postmortem program analysis with {Hardware-Enhanced}{Post-Crash} artifacts
US9098616B2 (en) Analyzing computer programs to identify errors
CN112181833A (zh) 一种智能化模糊测试方法、装置及系统
Chen et al. A large-scale empirical study on control flow identification of smart contracts
CN109255240B (zh) 一种漏洞处理方法和装置
US12111924B2 (en) System for detecting malicious programmable logic controller code
CN110764870A (zh) 一种虚拟机逃逸漏洞挖掘方法、装置、设备及介质
Wang et al. A combinatorial approach to detecting buffer overflow vulnerabilities
CN111859380A (zh) Android App漏洞的零误报检测方法
CN110851352A (zh) 一种模糊测试系统及终端设备
CN111428247B (zh) 一种对计算机漏洞库进行改进的方法
CN116522345A (zh) 漏洞挖掘方法、装置、设备及可读存储介质
CN112347487A (zh) 一种mips指令集程序的栈溢出漏洞的调试分析方法
US8997048B1 (en) Method and apparatus for profiling a virtual machine
Paydar et al. An experimental study on flakiness and fragility of randoop regression test suites
Letian et al. PVDF: An automatic patch-based vulnerability description and fuzzing method
CN116166535A (zh) 一种基于模糊测试自动化挖掘非易失内存堆漏洞的方法
Letychevskyi et al. Fuzz Testing Technique and its Use in Cybersecurity Tasks
US11886589B2 (en) Process wrapping method for evading anti-analysis of native codes, recording medium and device for performing the method
David et al. From source code to crash test-cases through software testing automation
Yuan et al. A method for detecting buffer overflow vulnerabilities
dos Reis et al. Code smells incidence: Does it depend on the application domain?
Ding et al. Identifying buffer overflow vulnerabilities based on binary code

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination