CN112463581A - 一种对分布式系统进行模糊测试的方法及系统 - Google Patents

一种对分布式系统进行模糊测试的方法及系统 Download PDF

Info

Publication number
CN112463581A
CN112463581A CN202010832802.4A CN202010832802A CN112463581A CN 112463581 A CN112463581 A CN 112463581A CN 202010832802 A CN202010832802 A CN 202010832802A CN 112463581 A CN112463581 A CN 112463581A
Authority
CN
China
Prior art keywords
tested
program
test
source code
abnormal
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.)
Granted
Application number
CN202010832802.4A
Other languages
English (en)
Other versions
CN112463581B (zh
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.)
Tsinghua University
Original Assignee
Tsinghua University
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 Tsinghua University filed Critical Tsinghua University
Priority to CN202010832802.4A priority Critical patent/CN112463581B/zh
Publication of CN112463581A publication Critical patent/CN112463581A/zh
Application granted granted Critical
Publication of CN112463581B publication Critical patent/CN112463581B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/368Test management for test version control, e.g. updating test cases to a new software version
    • 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/3676Test management for coverage analysis
    • 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
    • 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/70Software maintenance or management
    • G06F8/73Program documentation

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)
  • Library & Information Science (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明实施例提供一种对分布式系统进行模糊测试的方法及系统,该方法包括:获取待测系统中待测程序的预设源代码,使用编译器对所述预设源编码进行编译并合并,得到全程序中间表示;对所述全程序中间表示进行插桩,得到插桩后的中间文件;对所述插桩后的中间文件进行代码生成,输出若干二进制可执行文件;基于所述若干二进制可执行文件由测试工具启动所述待测系统,并对所述待测系统进行初始化;待所述待测系统完成初始化,所述测试工具启动模糊测试,判断所述待测系统是否存在异常。本发明实施例通过将模糊测试自动应用于整个分布式系统的测试,有效提高了分布式系统的软件质量,对系统安全有着十分重要的意义。

Description

一种对分布式系统进行模糊测试的方法及系统
技术领域
本发明涉及自动化漏洞挖掘技术领域,尤其涉及一种对分布式系统进行模糊测试的方法及系统。
背景技术
软件作为计算机实现其具体功能的方式,软件自身的安全性是保障计算机系统安全性的关键。作为大型软件系统中的基础组件,攻击者往往会利用分布式系统本身的缺陷和漏洞对计算机系统进行攻击,窃取关键信息,造成财产损失。因此,分布式系统的安全保障技术十分重要。
模糊测试是目前针对软件安全的有效方法之一。模糊测试的关键思想是通过不断创造的输入来探索程序的不同路径,判断这些路径是否会产生导致软件崩溃或者宕机的问题。目前使用最广泛的模糊测试工具是针对实用程序的模糊测试工具American Fuzzy Lop(AFL)。其基本工作原理是:在运行前对程序进行插桩,从而在固定大小的位图中记录程序执行轨迹的粗略特征;在运行中,则通过等待进程的退出,并以退出时的状态码确定程序执行中是否遇到异常。模糊测试在基础库、实用程序等多类系统中都能够实现高效的缺陷检测,并发现了数以千计的缺陷。这种测试方法可以对实用程序和库项目进行检测,但是不能应用于分布式系统,其原因有三点:1.无法有效导向新路径,分布式系统往往有着极为复杂的逻辑,而粗略记录的特征在大型系统中存在冲突和不精确的情况,因而无法有效将测试过程导向新的路径。2.无法监测程序异常情况,分布式系统具有守护程序,该守护程序会监控程序在执行过程中遇到的异常并进行异常恢复。因此该监控功能与模糊测试工具获取进程退出码的方法有冲突,从而使模糊测试工具无法捕获程序异常。3.无法提升执行效率,分布式系统由在多个主机上运行的组件构成,因此系统的启动包含网络、磁盘、超时、选举等多个步骤。在执行输入后重新启动系统会严重降低测试的性能。
由于模糊测试无法在分布式系统上运行,开发人员一般使用裁剪—测试或测试基础库的方法作为替代。在裁剪—测试的方法中,开发人员首先识别出待测试的组件,接着搭建脚手架从而简化并替换其所依赖组件,最终使得待测组件能够脱离分布式系统独立运行。此时,该组件可使用传统的模糊测试方法进行测试。由于该方法依赖领域专家搭建脚手架,开发成本高昂;另一方面,该方法不能测试组件之间的交互。在测试基础课的方法中,开发人员放弃测试分布式系统本身,转而测试分布式系统所依赖的基础库。虽然这种方法能够间接提升系统的整体质量,但分布式系统自身的缺陷却被遗漏在外,因此往往不是开发人员最关注的问题。
而目前国内外还没有研究关注自动化的分布式系统模糊测试技术,更没有成熟的工具来供测试人员使用。所以一个能够应用于分布式系统,并自动对分布式系统整体进行测试的工具,非常具有产业上的利用价值。
发明内容
本发明实施例提供一种对分布式系统进行模糊测试的方法及系统,用以解决现有技术中存在的传统模糊测试无法有效应用于分布式系统的缺陷。
第一方面,本发明实施例提供一种对分布式系统进行模糊测试的方法,包括:
获取待测系统中待测程序的预设源代码,使用编译器对所述预设源编码进行编译并合并,得到全程序中间表示;
对所述全程序中间表示进行插桩,得到插桩后的中间文件;
对所述插桩后的中间文件进行代码生成,输出若干二进制可执行文件;
基于所述若干二进制可执行文件由测试工具启动所述待测系统,并对所述待测系统进行初始化;
待所述待测系统完成初始化,所述测试工具启动模糊测试,判断所述待测系统是否存在异常。
进一步地,所述待所述待测系统完成初始化,所述测试工具启动模糊测试,判断所述待测系统是否存在异常,之后还包括:
若判断获知所述待测系统存在异常,则记录异常信息并重新启动所述待测系统,使所述待测系统重新执行初始化。
进一步地,所述获取待测系统中待测程序的预设源代码,使用编译器对所述预设源编码进行编译并合并,得到全程序中间表示,具体包括:
提取所述预设源代码,使用所述编译器进行编译,得到中间文件;
采用全程序优化技术,将同属于单个完整可执行文件的若干中间文件进行合并,得到所述单个完整可执行文件的中间表示;
对所有中间表示内部的基本块进行无冲突标号,导出得到所述全程序中间表示。
进一步地,所述对所述全程序中间表示进行插桩,得到插桩后的中间文件,具体包括:
对所述待测程序的每个基本块插入统计代码,由所述统计代码得到每个基本块覆盖次数;
基于所述每个基本块覆盖次数,对所述待测程序的中间文件提取源代码的函数调用图、控制流图和基本块信息。
进一步地,所述基于所述若干二进制可执行文件由测试工具启动所述待测系统,并对所述待测系统进行初始化,具体包括:
所述测试工具基于所述基本块信息,初始化共享内存;
由所述测试工具的监控功能组件运行所述待测系统的引导程序,并开始初始化所述待测系统;
由所述测试工具的调度功能组件接收若干进程发送的握手消息,根据所述握手消息识别所述若干进程的二进制路径,并回复所述二进制路径在所述共享内存中的偏移量;
所述若干进程收到回复消息后,映射所述共享内存至当前进程的地址空间,并设置基本块覆盖计数器的指针为新的共享内存;
待所述待测系统完成初始化,向所述调度功能组件发出完成消息。
进一步地,所述待所述待测系统完成初始化,所述测试工具启动模糊测试,判断所述待测系统是否存在异常,具体包括:
由所述测试工具所述待测系统发送当前输入,所述待测系统执行所述当前输入,向所述测试工具反馈当前输入已完成的信息,并等待下一输入;
所述测试工具根据共享内存收集全部进程的覆盖信息,将所述覆盖信息传递给输入生成组件作为反馈;
所述测试工具基于所述反馈获取调试事件,基于所述调试事件判断所述待测系统是否存在异常。
第二方面,本发明实施例还提供一种对分布式系统进行模糊测试的系统,包括:
获取模块,用于获取待测系统中待测程序的预设源代码,使用编译器对所述预设源编码进行编译并合并,得到全程序中间表示;
插桩模块,用于对所述全程序中间表示进行插桩,得到插桩后的中间文件;
生成模块,用于对所述插桩后的中间文件进行代码生成,输出若干二进制可执行文件;
初始化模块,用于基于所述若干二进制可执行文件由测试工具启动所述待测系统,并对所述待测系统进行初始化;
测试模块,用于待所述待测系统完成初始化,所述测试工具启动模糊测试,判断所述待测系统是否存在异常。
进一步地,该系统还包括:
重启模块,用于若判断获知所述待测系统存在异常,则记录异常信息并重新启动所述待测系统,使所述待测系统重新执行初始化。
第三方面,本发明实施例还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述对分布式系统进行模糊测试的方法的步骤。
第四方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述对分布式系统进行模糊测试的方法的步骤。
本发明实施例提供的对分布式系统进行模糊测试的方法及系统,通过将模糊测试自动应用于整个分布式系统的测试,有效提高了分布式系统的软件质量,对系统安全有着十分重要的意义。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种对分布式系统进行模糊测试的方法的流程示意图;
图2是本发明实施例提供的模糊测试组件关系示意图;
图3是本发明实施例提供的一种对分布式系统进行模糊测试的装置的结构示意图;
图4是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
针对现有技术中传统模糊测试无法有效应用于分布式系统的问题,本发明实施例提出了一种对分布式系统进行整体测试的方法。
图1是本发明实施例提供的一种对分布式系统进行模糊测试的方法的流程示意图,如图1所示,包括:
S1,获取待测系统中待测程序的预设源代码,使用编译器对所述预设源编码进行编译并合并,得到全程序中间表示;
首先获取待测系统中的待测程序的预设源代码,例如C/C++源代码,使用编译器进行编译并合并得到全程序中间文件,该全程序中间文件中,含有能独立构建可执行程序的源代码的中间表示。
S2,对所述全程序中间表示进行插桩,得到插桩后的中间文件;
然后是对全程序中间表示进行插桩,一方面,对待测程序的每个基本块插入统计代码,从而在运行时能够检测到基本块的覆盖情况;另一方面,对待测程序的中间文件提取出源代码的函数调用图、控制流图、基本块信息。
S3,对所述插桩后的中间文件进行代码生成,输出若干二进制可执行文件;
接下来是对插桩后的中间文件进行代码生成,输出待测系统中各个程序的二进制可执行文件。
S4,基于所述若干二进制可执行文件由测试工具启动所述待测系统,并对所述待测系统进行初始化;
得到二进制可知文件后,启动待测系统并等待初始化,这里是由测试工具运行待测系统的引导程序,并使用操作系统的调试接口监控待测系统的各个进程。
S5,待所述待测系统完成初始化,所述测试工具启动模糊测试,判断所述待测系统是否存在异常。
待初始化完成后,测试工具启动模糊测试。测试工具向待测系统发送输入,待测系统执行输入并告知测试工具执行完毕。测试工具处理完该次执行的基本块覆盖情况后,进行下一次输入的执行。同时测试工具获取调试事件,从而判断执行过程中待测系统是否遇到异常。若遇到异常则记录异常并重新启动待测系统。
可以理解的是,本发明实施例所提供的模糊测试可视化方法由一组功能模块组成,它主要包括四大功能组件,如图2所示,包括:编译功能组件,监控功能组件,调度功能组件、输入生成组件。
编译功能组件是一个基于LLVM(Low Level Virtual Machine,底层虚拟机)技术开发的编译工具链。在与待测程序的中间文件链接的过程中:1.对待测程序进行编译、中间文件合并、基本块标号,从而生成全程序中间文件。2.对全程序中间文件的每个基本块插桩,使得运行时能够无冲突地检测到基本块的覆盖情况。3.对全程序中间文件提取出源代码的函数调用图、控制流图、基本块信息。
监控功能组件是一个基于调试器技术的软件功能模块。该模块使用操作系统提供的调试器接口收集待测系统的调试事件,从而自动监控待测系统中的各个进程和线程并发现异常。
调度功能组件是一个基于套接字的软件功能模块。该模块与待测系统的各个进程进行通信,从而维护待测系统的整体状态:在初始化时获得初始化完成的通知,在执行模糊测试时判断每个进程处理的当前输入,以及判断每个输入执行完毕的时机。
输入生成组件是一个基于遗传算法的随机生成缓冲区的软件功能模块。该模块的输入是待测系统的已知典型输入集合。该模块每次生成一个新的随机输入,传送给待测系统进行执行,并通过获得程序执行该输入的基本块覆盖情况,调整下一次的生成内容。
本发明通过将模糊测试自动应用于整个分布式系统的测试,有效提高了分布式系统的软件质量,对系统安全有着十分重要的意义。
基于上述实施例,该方法中步骤S1具体包括:
提取所述预设源代码,使用所述编译器进行编译,得到中间文件;
采用全程序优化技术,将同属于单个完整可执行文件的若干中间文件进行合并,得到所述单个完整可执行文件的中间表示;
对所有中间表示内部的基本块进行无冲突标号,导出得到所述全程序中间表示。
具体地,对于生成全程序中间表示,包含如下几个步骤:
a)获取待测程序的C/C++源代码,使用编译器进行编译,得到中间文件,中间文件中含有源代码的中间表示;
b)使用全程序优化技术,将同属于一个可执行文件的多个中间文件进行合并,从而产生能够生成完整可执行文件的中间表示;
c)对中间表示内部的基本块进行无冲突的标号,最终导出为全程序的中间表示。
基于上述任一实施例,该方法中步骤S2具体包括:
对所述待测程序的每个基本块插入统计代码,由所述统计代码得到每个基本块覆盖次数;
基于所述每个基本块覆盖次数,对所述待测程序的中间文件提取源代码的函数调用图、控制流图和基本块信息。
具体地,对于全程序中间表示进行插桩,包含如下几个步骤:
a)在静态存储区域开辟空间,用于存储每个基本块的覆盖次数计数器;
b)在遍历基本块的过程中,对合适的基本块入口位置插入桩代码。在程序运行阶段,当触碰到桩代码时,基本块的覆盖次数计数器就会更新,这就达到了在程序运行阶段获取各个基本块被命中的次数的目的;
c)提取出源代码的函数调用图,函数调用图是以函数为节点,函数调用关系为边的有向图,使用邻接表的数据结构存储;
d)提取除源代码的控制流图,控制流图是以基本块为节点,控制流为边的有向图,使用领接表的数据结构存储;
e)提取基本块的信息,基本块信息包括:基本块的ID、基本块对应的文件所在位置、基本块对应的源代码起始行号和基本块对应的源代码终止行号。
基于上述任一实施例,该方法中步骤S4具体包括:
所述测试工具基于所述基本块信息,初始化共享内存;
由所述测试工具的监控功能组件运行所述待测系统的引导程序,并开始初始化所述待测系统;
由所述测试工具的调度功能组件接收若干进程发送的握手消息,根据所述握手消息识别所述若干进程的二进制路径,并回复所述二进制路径在所述共享内存中的偏移量;
所述若干进程收到回复消息后,映射所述共享内存至当前进程的地址空间,并设置基本块覆盖计数器的指针为新的共享内存;
待所述待测系统完成初始化,向所述调度功能组件发出完成消息。
具体地,对于启动待测系统并完成初始化,包含如下几个步骤:
a)测试工具根据提取到的基本块信息,初始化共享内存用于存放计数器信息;
b)测试工具的监控功能组件运行待测系统的引导程序,开始初始化待测系统;
c)待测系统在初始化时,各个进程向测试工具的调度功能组件发送握手消息。握手消息由进程的ID、进程处理的输入构成;
d)测试工具的调度功能组件收到握手消息后,识别进程的二进制路径,并回复该二进制在共享内存中的偏移量作为对握手消息的回复;
e)待测系统的进程收到回复的消息后,映射共享内存到当前进程的地址空间,并设置基本块覆盖计数器的指针为共享内存,完成覆盖率采集的配置;
f)在待测系统完成业务的初始化后,待测系统中的某个进程向测试工具的调度功能组件发生“已完成”消息,此时测试工具完成初始化阶段并进入测试阶段。
基于上述任一实施例,该方法中步骤S5具体包括:
由所述测试工具所述待测系统发送当前输入,所述待测系统执行所述当前输入,向所述测试工具反馈当前输入已完成的信息,并等待下一输入;
所述测试工具根据共享内存收集全部进程的覆盖信息,将所述覆盖信息传递给输入生成组件作为反馈;
所述测试工具基于所述反馈获取调试事件,基于所述调试事件判断所述待测系统是否存在异常。
具体地,测试工具的输入生成组件会生成一个新的输入,并由调度组件传递给待测系统。待测系统在收到输入后执行该输入,在执行完毕后发送“已完成”消息给测试工具,并等待下一输入。测试工具根据共享内存收集全部进程的覆盖信息,并传递给输入生成组件作为反馈。输入生成组件再生成另一个输入,并不断重复该步骤。
基于上述任一实施例,该方法还包括:
若判断获知所述待测系统存在异常,则记录异常信息并重新启动所述待测系统,使所述待测系统重新执行初始化。
具体地,对于后续的异常处理,在执行输入的过程中,监控功能组件通过调试功能监控全部进程的调试事件。若遇到进程或线程的创建事件,则对新进程或线程开启调试。若遇到进程或线程的退出事件,则更新内部状态。若遇到退出事件,则检测退出原因。若属于异常情况,则记录该异常,结束现有系统的遗留进程,并重新进入初始化步骤。
下面对本发明实施例提供的对分布式系统进行模糊测试的装置进行描述,下文描述的对分布式系统进行模糊测试的装置与上文描述的对分布式系统进行模糊测试的方法可相互对应参照。
图3是本发明实施例提供的一种对分布式系统进行模糊测试的装置的结构示意图,如图3所示,包括:获取模块31、插桩模块32、生成模块33、初始化模块34和测试模块35;其中:
获取模块31用于获取待测系统中待测程序的预设源代码,使用编译器对所述预设源编码进行编译并合并,得到全程序中间表示;插桩模块32用于对所述全程序中间表示进行插桩,得到插桩后的中间文件;生成模块33用于对所述插桩后的中间文件进行代码生成,输出若干二进制可执行文件;初始化模块34用于基于所述若干二进制可执行文件由测试工具启动所述待测系统,并对所述待测系统进行初始化;测试模块35用于待所述待测系统完成初始化,所述测试工具启动模糊测试,判断所述待测系统是否存在异常。
本发明实施例通过将模糊测试自动应用于整个分布式系统的测试,有效提高了分布式系统的软件质量,对系统安全有着十分重要的意义。
基于上述实施例,该系统还包括重启模块36,所述重启模块36用于若判断获知所述待测系统存在异常,则记录异常信息并重新启动所述待测系统,使所述待测系统重新执行初始化。
图4示例了一种电子设备的实体结构示意图,如图4所示,该电子设备可以包括:处理器(processor)410、通信接口(communicationinterface)420、存储器(memory)430和通信总线(bus)440,其中,处理器410,通信接口420,存储器430通过通信总线440完成相互间的通信。处理器410可以调用存储器430中的逻辑指令,以执行对分布式系统进行模糊测试的方法,该方法包括:获取待测系统中待测程序的预设源代码,使用编译器对所述预设源编码进行编译并合并,得到全程序中间表示;对所述全程序中间表示进行插桩,得到插桩后的中间文件;对所述插桩后的中间文件进行代码生成,输出若干二进制可执行文件;基于所述若干二进制可执行文件由测试工具启动所述待测系统,并对所述待测系统进行初始化;待所述待测系统完成初始化,所述测试工具启动模糊测试,判断所述待测系统是否存在异常。
此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的执行对分布式系统进行模糊测试的方法,该方法包括:获取待测系统中待测程序的预设源代码,使用编译器对所述预设源编码进行编译并合并,得到全程序中间表示;对所述全程序中间表示进行插桩,得到插桩后的中间文件;对所述插桩后的中间文件进行代码生成,输出若干二进制可执行文件;基于所述若干二进制可执行文件由测试工具启动所述待测系统,并对所述待测系统进行初始化;待所述待测系统完成初始化,所述测试工具启动模糊测试,判断所述待测系统是否存在异常。
又一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的执行对分布式系统进行模糊测试的方法,该方法包括:获取待测系统中待测程序的预设源代码,使用编译器对所述预设源编码进行编译并合并,得到全程序中间表示;对所述全程序中间表示进行插桩,得到插桩后的中间文件;对所述插桩后的中间文件进行代码生成,输出若干二进制可执行文件;基于所述若干二进制可执行文件由测试工具启动所述待测系统,并对所述待测系统进行初始化;待所述待测系统完成初始化,所述测试工具启动模糊测试,判断所述待测系统是否存在异常。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种对分布式系统进行模糊测试的方法,其特征在于,包括:
获取待测系统中待测程序的预设源代码,使用编译器对所述预设源编码进行编译并合并,得到全程序中间表示;
对所述全程序中间表示进行插桩,得到插桩后的中间文件;
对所述插桩后的中间文件进行代码生成,输出若干二进制可执行文件;
基于所述若干二进制可执行文件由测试工具启动所述待测系统,并对所述待测系统进行初始化;
待所述待测系统完成初始化,所述测试工具启动模糊测试,判断所述待测系统是否存在异常。
2.根据权利要求1所述的对分布式系统进行模糊测试的方法,其特征在于,所述待所述待测系统完成初始化,所述测试工具启动模糊测试,判断所述待测系统是否存在异常,之后还包括:
若判断获知所述待测系统存在异常,则记录异常信息并重新启动所述待测系统,使所述待测系统重新执行初始化。
3.根据权利要求1或2所述的对分布式系统进行模糊测试的方法,其特征在于,所述获取待测系统中待测程序的预设源代码,使用编译器对所述预设源编码进行编译并合并,得到全程序中间表示,具体包括:
提取所述预设源代码,使用所述编译器进行编译,得到中间文件;
采用全程序优化技术,将同属于单个完整可执行文件的若干中间文件进行合并,得到所述单个完整可执行文件的中间表示;
对所有中间表示内部的基本块进行无冲突标号,导出得到所述全程序中间表示。
4.根据权利要求1所述的对分布式系统进行模糊测试的方法,其特征在于,所述对所述全程序中间表示进行插桩,得到插桩后的中间文件,具体包括:
对所述待测程序的每个基本块插入统计代码,由所述统计代码得到每个基本块覆盖次数;
基于所述每个基本块覆盖次数,对所述待测程序的中间文件提取源代码的函数调用图、控制流图和基本块信息。
5.根据权利要求4所述的对分布式系统进行模糊测试的方法,其特征在于,所述基于所述若干二进制可执行文件由测试工具启动所述待测系统,并对所述待测系统进行初始化,具体包括:
所述测试工具基于所述基本块信息,初始化共享内存;
由所述测试工具的监控功能组件运行所述待测系统的引导程序,并开始初始化所述待测系统;
由所述测试工具的调度功能组件接收若干进程发送的握手消息,根据所述握手消息识别所述若干进程的二进制路径,并回复所述二进制路径在所述共享内存中的偏移量;
所述若干进程收到回复消息后,映射所述共享内存至当前进程的地址空间,并设置基本块覆盖计数器的指针为新的共享内存;
待所述待测系统完成初始化,向所述调度功能组件发出完成消息。
6.根据权利要求1所述的对分布式系统进行模糊测试的方法,其特征在于,所述待所述待测系统完成初始化,所述测试工具启动模糊测试,判断所述待测系统是否存在异常,具体包括:
由所述测试工具所述待测系统发送当前输入,所述待测系统执行所述当前输入,向所述测试工具反馈当前输入已完成的信息,并等待下一输入;
所述测试工具根据共享内存收集全部进程的覆盖信息,将所述覆盖信息传递给输入生成组件作为反馈;
所述测试工具基于所述反馈获取调试事件,基于所述调试事件判断所述待测系统是否存在异常。
7.一种对分布式系统进行模糊测试的系统,其特征在于,包括:
获取模块,用于获取待测系统中待测程序的预设源代码,使用编译器对所述预设源编码进行编译并合并,得到全程序中间表示;
插桩模块,用于对所述全程序中间表示进行插桩,得到插桩后的中间文件;
生成模块,用于对所述插桩后的中间文件进行代码生成,输出若干二进制可执行文件;
初始化模块,用于基于所述若干二进制可执行文件由测试工具启动所述待测系统,并对所述待测系统进行初始化;
测试模块,用于待所述待测系统完成初始化,所述测试工具启动模糊测试,判断所述待测系统是否存在异常。
8.根据权利要求7所述的对分布式系统进行模糊测试的系统,其特征在于,该系统还包括:
重启模块,用于若判断获知所述待测系统存在异常,则记录异常信息并重新启动所述待测系统,使所述待测系统重新执行初始化。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述对分布式系统进行模糊测试的方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至6任一项所述对分布式系统进行模糊测试的方法的步骤。
CN202010832802.4A 2020-08-18 2020-08-18 一种对分布式系统进行模糊测试的方法及系统 Active CN112463581B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010832802.4A CN112463581B (zh) 2020-08-18 2020-08-18 一种对分布式系统进行模糊测试的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010832802.4A CN112463581B (zh) 2020-08-18 2020-08-18 一种对分布式系统进行模糊测试的方法及系统

Publications (2)

Publication Number Publication Date
CN112463581A true CN112463581A (zh) 2021-03-09
CN112463581B CN112463581B (zh) 2021-09-21

Family

ID=74833667

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010832802.4A Active CN112463581B (zh) 2020-08-18 2020-08-18 一种对分布式系统进行模糊测试的方法及系统

Country Status (1)

Country Link
CN (1) CN112463581B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113407443A (zh) * 2021-06-02 2021-09-17 贝格迈思(深圳)科技有限公司 一种基于gpu二进制代码翻译的高效模糊测试方法
CN113792784A (zh) * 2021-09-14 2021-12-14 上海任意门科技有限公司 用于用户聚类的方法、电子设备和存储介质
CN113946831A (zh) * 2021-10-18 2022-01-18 哈尔滨工业大学 一种基于微服务的跨平台新软件以及新系统安全风险分析方法、计算机及存储介质
CN114491424A (zh) * 2021-12-31 2022-05-13 西安电子科技大学 基于模糊测试的二进制代码裁剪方法
CN115658370A (zh) * 2022-11-18 2023-01-31 辉羲智能科技(上海)有限公司 一种基于编译器的机器学习加速芯片故障实时探测方法
CN116594884A (zh) * 2023-05-16 2023-08-15 上海安般信息科技有限公司 一种基于使用并发方式的模糊测试方法及装置

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102012216841A1 (de) * 2011-09-29 2013-04-04 Siemens Aktiengesellschaft Verfahren und Vorrichtung zur Durchführung von Sicherheitstests hinsichtlich von Protokollimplementierungen
CN108052825A (zh) * 2017-12-29 2018-05-18 哈尔滨工业大学 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统
CN108470003A (zh) * 2018-03-24 2018-08-31 中科软评科技(北京)有限公司 模糊测试方法、装置和系统
CN110059009A (zh) * 2018-04-13 2019-07-26 百度(美国)有限责任公司 用于测试代码文件的方法和装置
CN110399300A (zh) * 2019-07-22 2019-11-01 南京大学 一种基于动态类型感知的Python软件模糊测试方法
CN110633201A (zh) * 2018-07-10 2019-12-31 清华大学 针对程序的集成模糊测试方法及装置
CN111061639A (zh) * 2019-12-18 2020-04-24 中信百信银行股份有限公司 一种高效多系统测试代码覆盖率的管理方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102012216841A1 (de) * 2011-09-29 2013-04-04 Siemens Aktiengesellschaft Verfahren und Vorrichtung zur Durchführung von Sicherheitstests hinsichtlich von Protokollimplementierungen
CN108052825A (zh) * 2017-12-29 2018-05-18 哈尔滨工业大学 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统
CN108470003A (zh) * 2018-03-24 2018-08-31 中科软评科技(北京)有限公司 模糊测试方法、装置和系统
CN110059009A (zh) * 2018-04-13 2019-07-26 百度(美国)有限责任公司 用于测试代码文件的方法和装置
CN110633201A (zh) * 2018-07-10 2019-12-31 清华大学 针对程序的集成模糊测试方法及装置
CN110399300A (zh) * 2019-07-22 2019-11-01 南京大学 一种基于动态类型感知的Python软件模糊测试方法
CN111061639A (zh) * 2019-12-18 2020-04-24 中信百信银行股份有限公司 一种高效多系统测试代码覆盖率的管理方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
XIUPEI MEI等: "A Fuzz Testing Service for Assuring Smart Contracts", 《INSTITUTE OF ELECTRICAL AND ELECTRONIC ENGINEERS》 *
邓一杰: "基于分布式模糊测试的漏洞挖掘技术研究", 《CNKI优秀硕士学位论文全文库 社会科学Ⅰ辑》 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113407443A (zh) * 2021-06-02 2021-09-17 贝格迈思(深圳)科技有限公司 一种基于gpu二进制代码翻译的高效模糊测试方法
CN113792784A (zh) * 2021-09-14 2021-12-14 上海任意门科技有限公司 用于用户聚类的方法、电子设备和存储介质
CN113946831A (zh) * 2021-10-18 2022-01-18 哈尔滨工业大学 一种基于微服务的跨平台新软件以及新系统安全风险分析方法、计算机及存储介质
CN113946831B (zh) * 2021-10-18 2024-04-05 哈尔滨工业大学 一种基于微服务的跨平台新软件以及新系统安全风险分析方法、计算机及存储介质
CN114491424A (zh) * 2021-12-31 2022-05-13 西安电子科技大学 基于模糊测试的二进制代码裁剪方法
CN114491424B (zh) * 2021-12-31 2024-05-03 西安电子科技大学 基于模糊测试的二进制代码裁剪方法
CN115658370A (zh) * 2022-11-18 2023-01-31 辉羲智能科技(上海)有限公司 一种基于编译器的机器学习加速芯片故障实时探测方法
CN116594884A (zh) * 2023-05-16 2023-08-15 上海安般信息科技有限公司 一种基于使用并发方式的模糊测试方法及装置
CN116594884B (zh) * 2023-05-16 2023-10-27 上海安般信息科技有限公司 一种基于使用并发方式的模糊测试方法及装置

Also Published As

Publication number Publication date
CN112463581B (zh) 2021-09-21

Similar Documents

Publication Publication Date Title
CN112463581B (zh) 一种对分布式系统进行模糊测试的方法及系统
CN110162977B (zh) 一种Android车载终端系统漏洞检测系统及方法
US8839203B2 (en) Code coverage-based taint perimeter detection
CN106506283B (zh) 银行和企业对接系统的业务测试方法和装置
US20090320021A1 (en) Diagnosis of application performance problems via analysis of thread dependencies
CN111291384B (zh) 漏洞扫描方法、装置及电子设备
Claessen et al. Finding race conditions in Erlang with QuickCheck and PULSE
US20070079288A1 (en) System and method for capturing filtered execution history of executable program code
CN112181833A (zh) 一种智能化模糊测试方法、装置及系统
CN111177729B (zh) 一种程序漏洞的测试方法以及相关装置
CN110688313B (zh) 一种VxWorks操作系统下软件测试的故障注入方法
CN109948338B (zh) 基于静态分析的安卓应用敏感路径触发方法
CN114866300A (zh) 一种基于重放分析的网络协议软件状态变量识别方法
CN110851352A (zh) 一种模糊测试系统及终端设备
CN101706752B (zh) 一种软件错误现场定位的方法及装置
CN107463493B (zh) 一种面向主机防病毒产品的测试系统和测试方法
Kranzlmüller et al. NOPE: A nondeterministic program evaluator
CN111783094A (zh) 一种数据分析方法、装置、服务器及可读存储介质
CN107656849B (zh) 一种软件系统性能问题定位方法以及装置
CN116522345A (zh) 漏洞挖掘方法、装置、设备及可读存储介质
CN115987673A (zh) 基于事件驱动的漏洞渗透测试系统、方法、装置及设备
CN113419960B (zh) 用于可信操作系统内核模糊测试的种子生成方法及系统
Yi et al. Vulcan: Lessons on reliability of wearables through state-aware fuzzing
CN111796911A (zh) 一种面向云平台虚拟设备的攻击检测方法及电子装置
CN113127874A (zh) 内网敏感信息处理方法及装置

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
GR01 Patent grant
GR01 Patent grant