CN113407443A - 一种基于gpu二进制代码翻译的高效模糊测试方法 - Google Patents

一种基于gpu二进制代码翻译的高效模糊测试方法 Download PDF

Info

Publication number
CN113407443A
CN113407443A CN202110612468.6A CN202110612468A CN113407443A CN 113407443 A CN113407443 A CN 113407443A CN 202110612468 A CN202110612468 A CN 202110612468A CN 113407443 A CN113407443 A CN 113407443A
Authority
CN
China
Prior art keywords
test
gpu
binary
code
llvm
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
CN202110612468.6A
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.)
Bergmeis Shenzhen Technology Co ltd
Original Assignee
Bergmeis Shenzhen 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 Bergmeis Shenzhen Technology Co ltd filed Critical Bergmeis Shenzhen Technology Co ltd
Priority to CN202110612468.6A priority Critical patent/CN113407443A/zh
Publication of CN113407443A publication Critical patent/CN113407443A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary

Landscapes

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

Abstract

本发明公开一种基于GPU二进制代码翻译的高效模糊测试方法,包括步骤:S1、初始化标准测试程序相关测试用例;S2、生成GPU二进制代码可执行的测试用例,进入步骤S3;S3、将生成的测试用例输入到GPU测试程序实例,并输出测试结果;进入步骤S4;S4、对步骤S3中输出测试结果进行异常检测;S5、判断是否满足模糊测试结束条件,满足,则停止模糊测试流程;不满足,返回步骤S2中。本发明解决了缺乏基于GPU的大规模模糊测试并行执行方法的问题。

Description

一种基于GPU二进制代码翻译的高效模糊测试方法
技术领域
本发明属于网络信息安全技术领域,具体来说,涉及一种基于GPU二进制代码翻译的高效模糊测试方法。
背景技术
模糊测试是依靠计算机软件自动执行,测试效率相对人来讲远远高出几个数量级。模糊测试技术本质是依赖随机函数生成随机测试例,随机性意味着不重复、不可预测,可能有意想不到的输入和结果。根据概率论的“大数定律”,只要我们重复的次数足够多、随机性够强,那些概率极低的偶然事件就必然会出现。模糊测试技术就是大数定律的典范应用,足够多的测试用例和随机性,就可以让那些隐藏的很深很难出现的Bug成为必然现象。很显然,模糊测试是非常耗时,因为进行模糊测试时,通常需要用到插桩技术,并要求设备具有高吞吐量的计算能力。
目前,大多数模糊测试方法都采用传统的CPU架构或仿真器,然而这是非常低效的。由于无法访问被测软件的源代码,针对这些平台的实际模糊测试就需要通过仿真器或者很多物理设备来完成,这将是非常低效耗时的工作,并且这些要求往往是不切实际的。模糊测试是一个非常适合并行化处理的问题,通过测试用例生成器可以同时生成成千上万个测试用例,这些测试用例可以通过不同测试程序实例并行执行。理论上来说,可以通过数千个线程执行测试程序用例,同时测试数千个不同的输入,这将大大提高模糊测试效率。
现有技术中的缺陷在于,GPU非常擅长执行这种并行任务,然而除了将基于 GPU的神经网络用于模糊测试用例生成外;缺乏基于GPU的大规模模糊测试并行执行方法。
发明内容
针对现有技术存在的缺乏基于GPU的大规模模糊测试并行执行方法的问题,本发明提供了一种基于GPU二进制代码翻译的高效模糊测试方法。
为实现上述技术目的,本发明采用的技术方案如下:
一种基于GPU二进制代码翻译的高效模糊测试方法,包括步骤:
S1、初始化标准测试程序相关测试用例;
S2、生成GPU二进制代码可执行的测试用例,进入步骤S3;
S3、将生成的测试用例输入到GPU测试程序实例,并输出测试结果;进入步骤 S4;
S4、对步骤S3中输出测试结果进行异常检测;在步骤S4中,将异常输出归并到异常结果集中。在步骤S4中,还包括同时针对当前测试用例集进行种子变异,生产变异种子集合。
S5、判断是否满足模糊测试结束条件,满足,则停止模糊测试流程;不满足,返回步骤S2中。在步骤S5中,当不满足模糊测试结束条件时,测试用例生成器通过新的变异种子集合生产新的测试用例集,进行下一次测试迭代。
进一步地,在步骤S3中,GPU测试程序实例通过CPU2GPU二进制代码翻译器将模糊测试程序的CPU二进制代码翻译成GPU PTX架构的二进制代码。
进一步地,CPU2GPU二进制代码翻译器的具体翻译步骤包括:
S11、将CPU二进制代码编译为中间表示代码LLVM IR;
S12、将中间表示代码LLVM IR通过LLVM优化编译器编译链接为PTX二进制代码。
进一步地,在步骤S11中,CPU二进制代码编译方式包括两种:其一,当CPU 二进制代码有源代码,则直接从源代码通过LLVM翻译器得到中间表示代码LLVM IR;其二,当只有CPU二进制代码,则需要通过二进制代码翻译器,将CPU二进制代码映射到中间表示代码LLVM IR。
进一步地,CPU2GPU二进制代码翻译器组件包括测试程序源代码、翻译器、中间表示代码IR、二进制翻译器和优化编译器;
测试程序源代码,为软件程序源代码;
翻译器,针对不同的源代码使用不同翻译器;
中间表示代码IR,通过不同翻译器,将源代码翻译成LLVM IR代码;
二进制翻译器,将测试程序CPU二进制代码译为中间表示代码IR;
优化编译器,中间表示代码IR优化编译为适应于GPU架构的二进制代码,采用LLVM优化器和LLVM后端编译器,并实现GPU二进制代码线程实例调度与隔离以及相应的内存管理优化。
进一步地,在步骤S2中,采用测试用例生成器,一次生成多个不同测试用例。
进一步地,每个测试用例被输入到独立的GPU测试程序线程实例,都会得到一个相关的测试结果。
本发明相比现有技术,具有如下有益效果:
1、充分利用二进制翻译技术实现GPU执行代码的生产,并实现GPU的地址空间管理机制实现GPU并行代码的内存隔离,实现模糊测试的多输入用例并行调度;
2、通过模糊测试的模糊生产器为目标程序提供大量的随机化输入,将这些大量的随机输入实现每个输入都可以独立于其他输入单独执行。
附图说明
图1为本发明一种基于GPU二进制代码翻译的高效模糊测试方法的流程图;
图2为本发明一种基于GPU二进制代码翻译的高效模糊测试方法的基本流程图;
图3为本发明GPU二进制代码翻译框架流程图。
具体实施方式
为了便于本领域技术人员的理解,下面结合实施例与附图对本发明作进一步的说明,实施方式提及的内容并非对本发明的限定。
实施例1
如图1所示,一种基于GPU二进制代码翻译的高效模糊测试方法,包括步骤:
S1、初始化标准测试程序相关测试用例;
S2、生成GPU二进制代码可执行的测试用例,进入步骤S3;在步骤S2中,采用测试用例生成器,一次生成多个不同测试用例。每个测试用例被输入到独立的 GPU测试程序线程实例,都会得到一个相关的测试结果。
S3、将生成的测试用例输入到GPU测试程序实例,并输出测试结果;进入步骤 S4;在步骤S3中,GPU测试程序实例通过CPU2GPU二进制代码翻译器将模糊测试程序的CPU二进制代码翻译成GPU PTX架构的二进制代码。
S4、对步骤S3中输出测试结果进行异常检测;在步骤S4中,将异常输出归并到异常结果集中。同时针对当前测试用例集进行种子变异,生产变异种子集合。
S5、判断是否满足模糊测试结束条件,满足,则停止模糊测试流程;不满足,返回步骤S2中。当不满足模糊测试结束条件时,测试用例生成器通过新的变异种子集合生产新的测试用例集,进行下一次测试迭代。
实施例2
如图1和2所示,一种基于GPU二进制代码翻译的高效模糊测试方法,包括步骤:
S1、初始化标准测试程序相关测试用例;
S2、生成GPU二进制代码可执行的测试用例,进入步骤S3;在步骤S2中,采用测试用例生成器,一次生成多个不同测试用例。每个测试用例被输入到独立的 GPU测试程序线程实例,都会得到一个相关的测试结果。
S3、将生成的测试用例输入到GPU测试程序实例,并输出测试结果;进入步骤 S4;在步骤S3中,GPU测试程序实例通过CPU2GPU二进制代码翻译器将模糊测试程序的CPU二进制代码翻译成GPU PTX架构的二进制代码。该GPU二进制代码不仅限于PTX架构,只要LLVM支持的GPU,如RTX架构等。
CPU2GPU二进制代码翻译器的具体翻译步骤包括:
S11、将CPU二进制代码编译为中间表示代码LLVM IR;
S12、将中间表示代码LLVM IR通过LLVM优化编译器编译链接为PTX二进制代码。
在步骤S11中,CPU二进制代码编译方式包括两种:其一,当CPU二进制代码有源代码,则直接从源代码通过LLVM翻译器得到中间表示代码LLVM IR;其二,当只有CPU二进制代码,则需要通过二进制代码翻译器,将CPU二进制代码映射到中间表示代码LLVM IR。
CPU2GPU二进制代码翻译器组件包括测试程序源代码、翻译器、中间表示代码IR、二进制翻译器和优化编译器;
测试程序源代码,为软件程序源代码;可以使C/C++/go/rust等程序源代码。
翻译器,针对不同的源代码使用不同翻译器;如Clang翻译C/C++源代码到 LLVMIR代码,Gollvm翻译go源代码到LLVM IR代码,rustc翻译rust源代码到 LLVM IR代码等。
中间表示代码IR,通过不同翻译器,将源代码翻译成LLVM IR代码;
二进制翻译器,因无源代码须将测试程序CPU二进制代码译为中间表示代码IR;该组件即是实现CPU二进制代码翻译成中间表示代码IR(如LLVM IR代码)。其中可以有很多工具实现二进制机器码提升为LLVM位码工具,例如remill、McSema、 dagger、llvm-mctoll、retdec、reopt、rev.ng、bin2llvm、fcd、RevGen、Fracture、libbeauty 等等。
优化编译器,中间表示代码IR优化编译为适应于GPU架构的二进制代码,采用LLVM优化器和LLVM后端编译器,并实现GPU二进制代码线程实例调度与隔离以及相应的内存管理优化。
S4、对步骤S3中输出测试结果进行异常检测;在步骤S4中,将异常输出归并到异常结果集中。同时针对当前测试用例集进行种子变异,生产变异种子集合。
S5、判断是否满足模糊测试结束条件,满足,则停止模糊测试流程;不满足,返回步骤S2中。当不满足模糊测试结束条件时,测试用例生成器通过新的变异种子集合生产新的测试用例集,进行下一次测试迭代。
由于CPU二进制代码程序运行于x86/aarch64/amd64等架构,NVIDIA GPU使用PTX(Parallel Thread eXecution,RTX)指令集架构。因此,我们不能直接执行我们想要模糊测试的二进制文件于GPU环境。解决方案有两种:
方法一:基于GPU开发一个嵌入式CPU模拟器。然而,为GPU开发一个CPU 模拟器代价高昂,而且性能很差。
方法二:将CPU的x86/aarch64/amd64二进制代码翻译成GPU的PTX二进制代码。这样它们就可以直接在GPU上执行而无需进行仿真处理。
实现CPU2GPU二进制代码翻译器,通过该翻译器将模糊测试程序的CPU二进制代码翻译成GPU PTX架构的二进制代码。在GPU中开启多个线程实例并行调度 PTX架构的二进制代码测试程序,同时实现成千上万个模糊测试程序并行线程用例,通过输入不同的测试用例并进行异常检测,完成一次测试迭代。通过种子变异迭代生成多批测试用例集,实现多次迭代模糊测试,直到预设的模糊测试结束条件结束该模糊测试过程。
由于模糊测试是基于CPU的二进制可执行程序,不可将被测程序的二进制代码直接在GPU上运行,因为在GPU上运行代码与在CPU上运行代码有很大的差异。
首先,GPU与CPU基于不同的体系架构和指令集,导致GPU不能直接执行 x86/aarch64等架构的指令。但是模糊测试只可基于二进制代码进行测试,如何基于二进制代码生成GPU汇编代码并运行成为问题的难点。
其次,GPU没有操作系统。传统的并行化Fuzzer需要启动多个进程,并要求可以分别处理不同的输入,而不干扰其他进程,也就是说,如果一个输入导致一个进程崩溃,其他进程必须不受影响。但是,由于GPU没有进程和地址空间隔离的概念,任何内存问题都会导致整个Fuzzer崩溃,如何实现GPU模糊测试程序的并行实例成为另一挑战。
另外,GPU无法对系统调用进行响应,也即GPU程序将无法执行打开文件、使用网络等操作。因此,GPU需要对系统调用进行仿真,或将其通过CPU中继到主机操作系统执行,这将使GPU系统响应效率产生影响。
最后,GPU复杂的内存管理机制。由于GPU具有非常复杂的内存层次结构,多种不同类型的内存,并且每种类型的内存都有不同的易用性和性能;而GPU的性能又高度依赖于内存的访问模式,例如控制线程何时访问内存以及如何访问内存,这些对性能的影响是至关重要的。此外,GPU的内存容量是有限的,这使得正确管理内存布局和访问模式变得更加困难。拥有16GB的设备内存听起来可能令人印象深刻,但把它分给成千上万个执行线程,每个线程就只有微不足道的几KB内存空间了。
本发明相比现有技术,具有如下有益效果:
1、充分利用二进制翻译技术实现GPU执行代码的生产,并实现GPU的地址空间管理机制实现GPU并行代码的内存隔离,实现模糊测试的多输入用例并行调度;
2、通过模糊测试的模糊生产器为目标程序提供大量的随机化输入,将这些大量的随机输入实现每个输入都可以独立于其他输入单独执行。
以上对本申请提供的一种基于GPU二进制代码翻译的高效模糊测试方法进行了详细介绍。具体实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

Claims (6)

1.一种基于GPU二进制代码翻译的高效模糊测试方法,其特征在于,包括步骤:
S1、初始化标准测试程序相关测试用例;
S2、生成GPU二进制代码可执行的测试用例,进入步骤S3;
S3、将生成的测试用例输入到GPU测试程序实例,并输出测试结果;进入步骤S4;
S4、对步骤S3中输出测试结果进行异常检测;
S5、判断是否满足模糊测试结束条件,满足,则停止模糊测试流程;不满足,返回步骤S2中。
2.根据权利要求1所述的一种基于GPU二进制代码翻译的高效模糊测试方法,其特征在于,在步骤S4中,还包括同时针对当前测试用例集进行种子变异,生产变异种子集合。
3.根据权利要求1或2所述的一种基于GPU二进制代码翻译的高效模糊测试方法,其特征在于,在步骤S5中,当不满足模糊测试结束条件时,测试用例生成器通过新的变异种子集合生产新的测试用例集,进行下一次测试迭代。
4.根据权利要求3所述的一种基于GPU二进制代码翻译的高效模糊测试方法,其特征在于,在步骤S3中,GPU测试程序实例通过CPU2GPU二进制代码翻译器将模糊测试程序的CPU二进制代码翻译成GPU PTX架构的二进制代码。
5.根据权利要求4所述的一种基于GPU二进制代码翻译的高效模糊测试方法,其特征在于,CPU2GPU二进制代码翻译器的具体翻译步骤包括:
S11、将CPU二进制代码编译为中间表示代码LLVM IR;
S12、将中间表示代码LLVM IR通过LLVM优化编译器编译链接为PTX二进制代码。
6.根据权利要求5所述的一种基于GPU二进制代码翻译的高效模糊测试方法,其特征在于,在步骤S11中,
所述将CPU二进制代码编译为中间表示代码LLVM IR包括:
判断CPU二进制代码是否为有源代码;
若是,则直接从源代码通过LLVM翻译器得到中间表示代码LLVM IR;
若不是,则需要通过二进制代码翻译器,将CPU二进制代码映射到中间表示代码LLVMIR。
CN202110612468.6A 2021-06-02 2021-06-02 一种基于gpu二进制代码翻译的高效模糊测试方法 Pending CN113407443A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110612468.6A CN113407443A (zh) 2021-06-02 2021-06-02 一种基于gpu二进制代码翻译的高效模糊测试方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110612468.6A CN113407443A (zh) 2021-06-02 2021-06-02 一种基于gpu二进制代码翻译的高效模糊测试方法

Publications (1)

Publication Number Publication Date
CN113407443A true CN113407443A (zh) 2021-09-17

Family

ID=77675805

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110612468.6A Pending CN113407443A (zh) 2021-06-02 2021-06-02 一种基于gpu二进制代码翻译的高效模糊测试方法

Country Status (1)

Country Link
CN (1) CN113407443A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113836023A (zh) * 2021-09-26 2021-12-24 南京大学 一种基于体系结构交叉检查的编译器安全性测试方法

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101937343A (zh) * 2010-09-17 2011-01-05 上海交通大学 异构多核虚拟执行环境的后端翻译框架实现的方法
CN104375942A (zh) * 2014-12-11 2015-02-25 无锡江南计算技术研究所 一种面向二进制的混合模糊测试方法
CN108416219A (zh) * 2018-03-18 2018-08-17 西安电子科技大学 一种Android二进制文件漏洞检测方法及系统
US20180365139A1 (en) * 2017-06-15 2018-12-20 Microsoft Technology Licensing, Llc Machine learning for constrained mutation-based fuzz testing
CN109379329A (zh) * 2018-09-05 2019-02-22 中国人民解放军战略支援部队信息工程大学 基于lstm的网络安全协议模糊测试方法及系统
CN110147310A (zh) * 2019-04-02 2019-08-20 中国科学院信息工程研究所 一种基于变异策略的并行模糊测试调度方法及装置
CN111581106A (zh) * 2020-05-12 2020-08-25 全球能源互联网研究院有限公司 二进制程序漏洞测试方法、装置及可读存储介质
CN112463581A (zh) * 2020-08-18 2021-03-09 清华大学 一种对分布式系统进行模糊测试的方法及系统

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101937343A (zh) * 2010-09-17 2011-01-05 上海交通大学 异构多核虚拟执行环境的后端翻译框架实现的方法
CN104375942A (zh) * 2014-12-11 2015-02-25 无锡江南计算技术研究所 一种面向二进制的混合模糊测试方法
US20180365139A1 (en) * 2017-06-15 2018-12-20 Microsoft Technology Licensing, Llc Machine learning for constrained mutation-based fuzz testing
CN108416219A (zh) * 2018-03-18 2018-08-17 西安电子科技大学 一种Android二进制文件漏洞检测方法及系统
CN109379329A (zh) * 2018-09-05 2019-02-22 中国人民解放军战略支援部队信息工程大学 基于lstm的网络安全协议模糊测试方法及系统
CN110147310A (zh) * 2019-04-02 2019-08-20 中国科学院信息工程研究所 一种基于变异策略的并行模糊测试调度方法及装置
CN111581106A (zh) * 2020-05-12 2020-08-25 全球能源互联网研究院有限公司 二进制程序漏洞测试方法、装置及可读存储介质
CN112463581A (zh) * 2020-08-18 2021-03-09 清华大学 一种对分布式系统进行模糊测试的方法及系统

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113836023A (zh) * 2021-09-26 2021-12-24 南京大学 一种基于体系结构交叉检查的编译器安全性测试方法

Similar Documents

Publication Publication Date Title
Shagrithaya et al. Enabling development of OpenCL applications on FPGA platforms
JPH08202545A (ja) ターゲット言語コードを生成するためのオブジェクト指向システム及びその方法
McAfee et al. EMEURO: A framework for generating multi-purpose accelerators via deep learning
Liang et al. FlexCL: A model of performance and power for OpenCL workloads on FPGAs
Yaneva et al. Compiler-assisted test acceleration on gpus for embedded software
Nozik Kotlin language for science and Kmath library
CN113407443A (zh) 一种基于gpu二进制代码翻译的高效模糊测试方法
S. Nobile et al. ginSODA: massive parallel integration of stiff ODE systems on GPUs
Cornea et al. Performance prediction of distributed applications using block benchmarking methods
Zhang et al. SNC: A cloud service platform for symbolic-numeric computation using just-in-time compilation
CN113204349B (zh) 基于rl的超优化编译器建立、代码超优化方法及系统
Helmstetter et al. Fast instruction set simulation using LLVM-based dynamic translation
KR101558531B1 (ko) 멀티코어 컴퓨팅 환경에서의 난수발생기용 엔트로피 수집방법
WO2020211074A1 (zh) 一种多方安全计算数据处理方法、装置及系统
US20240329940A1 (en) Software development device and software development program
Barve et al. Parallelism in C++ programs targeting objects
Gupta et al. Efficient Compiler Design for a Geometric Shape Domain-Specific Language: Emphasizing Abstraction and Optimization Techniques
Yaneva et al. ParTeCL: parallel testing using OpenCL
Wojenski et al. Hardware acceleration of complex HEP algorithms with HLS and FPGAs: Methodology and preliminary implementation
Nourian et al. Data Transformation Acceleration using Deterministic Finite-State Transducers
Li An Expert Knowledge Generation Model in Smart Contract Vulnerability Fuzzing
Deshpande et al. Application of C/C++ Compiler
Ma et al. A High Performance Text Based ODE Solver for Flexible Computing Task Assignment
De Gloria Microprocessor design for embedded system
da Rocha et al. A Systematic Literature Review on Optimization Techniques for Quantum Computing Compilers

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