CN112559367B - 基于***调用依赖图的内核模糊测试用例生成方法 - Google Patents

基于***调用依赖图的内核模糊测试用例生成方法 Download PDF

Info

Publication number
CN112559367B
CN112559367B CN202011538231.XA CN202011538231A CN112559367B CN 112559367 B CN112559367 B CN 112559367B CN 202011538231 A CN202011538231 A CN 202011538231A CN 112559367 B CN112559367 B CN 112559367B
Authority
CN
China
Prior art keywords
system call
kernel
sys
dependency graph
graph
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.)
Active
Application number
CN202011538231.XA
Other languages
English (en)
Other versions
CN112559367A (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.)
Nanjing University
Original Assignee
Nanjing 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 Nanjing University filed Critical Nanjing University
Priority to CN202011538231.XA priority Critical patent/CN112559367B/zh
Publication of CN112559367A publication Critical patent/CN112559367A/zh
Application granted granted Critical
Publication of CN112559367B publication Critical patent/CN112559367B/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/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
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis

Landscapes

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

Abstract

本发明公开一种基于***调用依赖图的内核模糊测试用例生成方法,首先根据***调用接口初始化图的节点和边;其次将***调用接口按照模板转换成***调用描述,并对***调用描述进行“参数‑返回值”依赖分析完善依赖图上各边的权重值;然后选定内核资源对象,通过对内核源码进行静态分析,识别每个***调用对不同内核资源对象的使用情况,对于使用同一种内核资源对象的两个***调用将在依赖图上赋予权重。最后用***调用依赖图指导内核模糊测试用例的生成和变异,当需要在测试用例中增加、删除或替换某个***调用时,根据依赖图上的权重挑选***调用进行操作,从而产生更有可能合法的***调用序列进行模糊测试,提高内核模糊测试工具的效率。

Description

基于***调用依赖图的内核模糊测试用例生成方法
技术领域
本发明涉及内核模糊测试技术,利用程序静态分析技术提供更多有效的信息指导内核模糊测试的生成和变异操作,属于软件工程领域。
背景技术
操作***是管理计算机硬件和软件资源的***软件,而内核是操作***的核心,它对各种底层硬件进行抽象和封装,并暴露接口供用户程序使用,不同于用户态程序,内核运行在权限最高的内核态,一旦出现安全漏洞则直接影响整个操作***和用户程序。模糊测试是一项自动化的软件测试技术,其核心思想是自动或半自动地生成随机数据输入到目标程序中,并监视程序异常,以发现可能的程序错误,是常见的漏洞挖掘技术之一。
针对操作***内核的模糊测试技术,其输入一般是内核为上层提供的接口所组成的程序,即***调用序列。一个好的***调用序列,其***调用之间是有依赖关系的,***调用A的行为可能会影响到的***调用B的行为,其表现在两点,一是***调用的实现一般具有鲁棒性,会在核心逻辑前对参数和内核状态做检查,不合法则直接返回从而保护内核;二是***调用会根据不同的参数和内核状态来选择具体执行的分支和逻辑。因此生成有效合法的***调用序列能提高测试的代码覆盖率,更有可能发现潜在的缺陷与漏洞,进而提高模糊测试的效率。本发明将使用静态分析技术分析***调用间潜在的依赖关系,并指导内核模糊测试生成和变异***调用序列操作,提高内核模糊测试效率。
发明内容
目前的内核模糊测试方法,基于生成的模糊器由于没有考虑***调用之间存在依赖关系,导致生成的***调用序列鲜有成效,降低了内核模糊测试的效率。本发明为了解决上述技术问题,采用以下技术方案:
本发明提出的一种基于***调用依赖图的内核模糊测试用例生成方法,包括以下步骤:
步骤1:定义一个有向带权图描述***调用之间的依赖关系,输入***调用接口声明,生成并初始化该***调用依赖图,具体步骤如下:
步骤1.1:为每个***调用生成一个图中结点,以***调用名作为标识。
步骤1.2:两两节点之间添加两条有向边相互连接,构成完备图,其中用<sys_a,sys_b>表示从节点sys_a指向节点sys_b的边。
步骤1.3:初始化每条边的权重,值为0,其中有向边<sys_a,sys_b>的权重指示***调用sys_b出现在***调用sys_a后的可能性。
步骤2:将***调用接口签名按照描述模板转换成***调用描述,以实现更准确的***调用间“参数-返回值”依赖分析,其中“参数-返回值”依赖分析的具体步骤如下:
步骤2.1:遍历所有***调用描述,对具有相同参数类型的***调用描述进行归类,若***调用i,j中每有一个相同的参数类型,则调整依赖图中<sys_i,sys_j>和<sys_j,sys_i>的权重值;
步骤2.2:若***调用i的返回类型是***调用j的参数类型之一,则调整依赖图中<sys_i,sys_j>的权重值。
步骤3:输入选定的内核资源对象和内核源码,以各***调用为入口函数,对内核源码进行静态分析,得到每个***调用对内核资源对象的使用情况,再根据使用情况分析***调用间的依赖关系,完善依赖图,具体步骤如下:
步骤3.1:通过内核源码构建每个***调用的过程间控制流图。
步骤3.2:遍历每个***调用的过程间控制流图,记录每个***调用所使用的内核资源对象和使用点。
步骤3.3:对每个***调用按照所使用的内核资源对象进行分类,若***调用i,j访问同一种内核资源对象,则认为该两个***调用有依赖关系,即调整依赖图中<sys_i,sys_j>和<sys_j,sys_i>的权重值。
步骤3.4:特别地,对于内核资源对象使用点在比较运算符的***调用(假定为j),适当增加依赖图中相关联边<sys_x,sys_j>的权重,其中x是与j当前分析的比较运算符操作数有相同内核对象资源的***调用。
步骤4:将***调用依赖图作为内核模糊测试工具的生成和变异操作算子,指导内核模糊测试用例的生成与变异,具体步骤如下:
步骤4.1:当***新的***调用时,分析在依赖图上以***点前一个***调用为起点的有向边,根据这些边的权重选择***的***调用,权重越高,被选中的概率也越大。
步骤4.2:当删除某个***调用时,分析测试用例中两两相邻的***调用在依赖图上对应边的权重,权重越小,被删除的概率也越大。
步骤4.3:当替换某个***调用时,分析在依赖图上以替换点前一个***调用为起点的有向边,根据这些边的权重选择替换的***调用,权重越高,被选中的概率也越大。
有益效果:本发明采用以上技术方案,与现有技术相比,具体以下有益效果:
1、根据测试任务配置选取不同的内核资源对象从而调节***调用依赖图上的权重,本方法具有扩展性。
2、本方法在没有种子或者种子不丰富的情况下尽可能生成有效的测试用例,即***调用序列。
3、方法通过对***调用描述进行分析和对内核源码进行静态分析得到***调用依赖图,通过依赖图指导模糊测试中的生成和变异操作,在不影响原有模糊测试执行时间的前提下尽可能提高模糊测试的效率。
附图说明
图1是基于***调用依赖图的内核模糊测试用例生成方法的***框架。
图2是按照描述模板将***调用接口转换成***调用描述的一个示例(上边是内核源码中***调用接口的声明,下边是对应细化的***调用描述)。
图3是根据***调用描述的“参数-返回值”进行依赖分析,完善***调用依赖图。
图4是定义内核资源对象并对内核源码做静态分析,完善***调用依赖图。
具体实施方式
下面结合附图对本发明使用的基于***调用依赖图的内核模糊测试用例生成方法具体实施例作更详细的描述。
根据附图1所示的基于***调用依赖图的内核模糊测试用例生成方法的***框架,本发明的具体实施方式为:
1:定义一个有向带权图描述***调用之间的依赖关系,输入***调用接口声明,生成并初始化该***调用依赖图,具体步骤如下:
1.1:为每个***调用生成一个图中结点,以***调用名作为标识。
1.2:两两节点之间添加两条有向边相互连接,构成完备图,其中用<sys_a,sys_b>表示从节点sys_a指向节点sys_b的边。
1.3:初始化每条边的权重,值为0,其中有向边<sys_a,sys_b>的权重指示***调用sys_b出现在***调用sys_a后的可能性。
2:将***调用接口签名按照描述模板转换成***调用描述,如附图2所示,以实现更准确的***调用间“参数-返回值”依赖分析,其中“参数-返回值”依赖分析的具体步骤如下:
2.1:遍历所有***调用描述,对具有相同参数类型的***调用描述进行归类,若***调用i,j中每有一个相同的参数类型,则调整依赖图中<sys_i,sys_j>和<sys_j,sys_i>的权重值;
2.2:若***调用i的返回类型是***调用j的参数类型之一,则调整依赖图中<sys_i,sys_j>的权重值,如附图3所示。
3:输入选定的内核资源对象和内核源码,以各***调用为入口函数,对内核源码进行静态分析,得到每个***调用对内核资源对象的使用情况,再根据使用情况分析***调用间的依赖关系,完善依赖图,如附图4所示,具体步骤如下:
3.1:通过内核源码构建每个***调用的过程间控制流图。
3.2:遍历每个***调用的过程间控制流图,记录每个***调用所使用的内核资源对象和使用点。
3.3:对每个***调用按照所使用的内核资源对象进行分类,若***调用i,j访问同一种内核资源对象,则认为该两个***调用有依赖关系,即调整依赖图中<sys_i,sys_j>和<sys_j,sys_i>的权重值。
3.4:特别地,对于内核资源对象使用点在比较运算符的***调用(假定为j),适当增加依赖图中相关联边<sys_x,sys_j>的权重,其中x是与j当前分析的比较运算符操作数有相同内核对象资源的***调用。
4:将***调用依赖图作为内核模糊测试工具的生成和变异操作算子,指导内核模糊测试用例的生成与变异,具体步骤如下:
4.1:当***新的***调用时,分析在依赖图上以***点前一个***调用为起点的有向边,根据这些边的权重选择***的***调用,权重越高,被选中的概率也越大。
4.2:当删除某个***调用时,分析测试用例中两两相邻的***调用在依赖图上对应边的权重,权重越小,被删除的概率也越大。
4.3:当替换某个***调用时,分析在依赖图上以替换点前一个***调用为起点的有向边,根据这些边的权重选择替换的***调用,权重越高,被选中的概率也越大。
本方法在没有种子或者种子不丰富的情况下尽可能生成有效的测试用例,即***调用序列。本方法通过对***调用描述进行分析和对内核源码进行静态分析得到***调用依赖图,通过依赖图指导模糊测试中的生成和变异操作,在不影响原有模糊测试执行时间的前提下尽可能提高模糊测试的效率。
以上仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。本发明未涉及的技术均可通过现有的技术加以实现。

Claims (4)

1.一种基于***调用依赖图的内核模糊测试用例生成方法,所述方法包括以下步骤:
步骤1:定义一个有向带权图描述***调用之间的依赖关系,输入***调用接口声明,生成并初始化该***调用依赖图;
步骤2:将***调用接口签名按照描述模板转换成***调用描述,以实现***调用间“参数-返回值”依赖分析;
步骤3:输入选定的内核资源对象和内核源码,以各***调用为入口函数,对内核源码进行静态分析,得到每个***调用对内核资源对象的使用情况,再根据使用情况分析***调用间的依赖关系,完善依赖图;
步骤4:将***调用依赖图输入到内核模糊测试工具中,指导内核模糊测试用例的生成与变异;
所述步骤2中“参数-返回值”依赖分析的具体步骤如下:
步骤2.1:遍历所有***调用描述,对具有相同参数类型的***调用描述进行归类,若***调用i,j中每有一个相同的参数类型,则调整依赖图中<sys_i,sys_j>和<sys_j,sys_i>的权重值;
步骤2.2:若***调用i的返回类型是***调用j的参数类型之一,则调整依赖图中<sys_i,sys_j>的权重值;
所述步骤3具体如下:
步骤3.1:通过内核源码构建每个***调用的过程间控制流图;
步骤3.2:遍历每个***调用的过程间控制流图,记录每个***调用所使用的内核资源对象和使用点;
步骤3.3:对每个***调用按照所使用的内核资源对象进行分类,若***调用i,j访问同一种内核资源对象,则认为该两个***调用有依赖关系,即调整依赖图中<sys_i,sys_j>和<sys_j,sys_i>的权重值;
步骤3.4:对于内核资源对象使用点在比较运算符的***调用,假定为j,增加依赖图中相关联边<sys_x,sys_j>的权重,其中x是与j当前分析的比较运算符操作数有相同内核对象资源的***调用;
所述步骤4具体如下:
步骤4.1:当***新的***调用时,分析在依赖图上以***点前一个***调用为起点的有向边,根据这些边的权重选择***的***调用,权重越高,被选中的概率也越大;
步骤4.2:当删除某个***调用时,分析测试用例中两两相邻的***调用在依赖图上对应边的权重,权重越小,被删除的概率也越大;
步骤4.3:当替换某个***调用时,分析在依赖图上以替换点前一个***调用为起点的有向边,根据这些边的权重选择替换的***调用,权重越高,被选中的概率也越大。
2.根据权利要求1所述的基于***调用依赖图的内核模糊测试用例生成方法,其特征在于,所述步骤1具体如下:
步骤1.1:为每个***调用生成一个图中结点,以***调用名作为标识;
步骤1.2:两两节点之间添加两条有向边相互连接,构成完备图,其中用<sys_a,sys_b>表示从节点sys_a指向节点sys_b的边;
步骤1.3:初始化每条边的权重,值为0,其中有向边<sys_a,sys_b>的权重指示***调用sys_b出现在***调用sys_a后的可能性。
3.根据权利要求1所述的基于***调用依赖图的内核模糊测试用例生成方法,其特征在于:所述步骤3中内核资源对象是指操作***内核为了完成其核心功能的所定义的核心数据结构,按照种类可划分为内存资源:struct mm_struct,struct page、进程描述:struct task_struct,pid_t、文件描述:struct file、网络端口:truct socket,此外全局变量和静态变量也属于内核资源对象。
4.根据权利要求3所述的基于***调用依赖图的内核模糊测试用例生成方法,其特征在于:根据测试任务配置能够选择所述内核资源对象中的一个或几个种类用于所述的静态分析。
CN202011538231.XA 2020-12-23 2020-12-23 基于***调用依赖图的内核模糊测试用例生成方法 Active CN112559367B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011538231.XA CN112559367B (zh) 2020-12-23 2020-12-23 基于***调用依赖图的内核模糊测试用例生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011538231.XA CN112559367B (zh) 2020-12-23 2020-12-23 基于***调用依赖图的内核模糊测试用例生成方法

Publications (2)

Publication Number Publication Date
CN112559367A CN112559367A (zh) 2021-03-26
CN112559367B true CN112559367B (zh) 2022-10-25

Family

ID=75030935

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011538231.XA Active CN112559367B (zh) 2020-12-23 2020-12-23 基于***调用依赖图的内核模糊测试用例生成方法

Country Status (1)

Country Link
CN (1) CN112559367B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113204498B (zh) * 2021-06-07 2023-04-07 支付宝(杭州)信息技术有限公司 针对闭源函数库生成模糊测试驱动器的方法和装置
CN113419960B (zh) * 2021-07-01 2022-06-14 中国人民解放军国防科技大学 用于可信操作***内核模糊测试的种子生成方法及***
CN116150765B (zh) * 2023-02-28 2023-08-04 上海安般信息科技有限公司 一种基于api依赖的模糊变异方法及装置
CN116069672B (zh) * 2023-03-23 2023-07-04 中南大学 操作***内核定向模糊测试的种子变异方法及测试方法
CN117349185B (zh) * 2023-12-04 2024-02-23 杭银消费金融股份有限公司 一种基于接口强弱依赖分级的***测试方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105786715A (zh) * 2016-04-08 2016-07-20 南京大学 一种程序静态自动分析方法
CN109308415A (zh) * 2018-09-21 2019-02-05 四川大学 一种面向二进制的导向性模糊测试方法与***
CN111709031A (zh) * 2020-05-28 2020-09-25 杭州电子科技大学 一种覆盖率引导的VxWorks内核模糊测试方法
CN111881039A (zh) * 2020-07-24 2020-11-03 广州大学 模糊测试的种子处理、模糊测试方法、***和存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10725894B2 (en) * 2017-10-04 2020-07-28 International Business Machines Corporation Measuring and improving test coverage

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105786715A (zh) * 2016-04-08 2016-07-20 南京大学 一种程序静态自动分析方法
CN109308415A (zh) * 2018-09-21 2019-02-05 四川大学 一种面向二进制的导向性模糊测试方法与***
CN111709031A (zh) * 2020-05-28 2020-09-25 杭州电子科技大学 一种覆盖率引导的VxWorks内核模糊测试方法
CN111881039A (zh) * 2020-07-24 2020-11-03 广州大学 模糊测试的种子处理、模糊测试方法、***和存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Energy Distribution Matters in Greybox Fuzzing;Linzhang Wang;《IEEE 2019 IEEE/ACM 41st International Conference on Software Engineering: Companion Proceedings (ICSE-Companion)》;20190819;第270-271页 *
基于污点分析的数组越界缺陷的静态检测方法;王林章;《软件学报》;20201031;第31卷(第10期);第2983-3003页 *

Also Published As

Publication number Publication date
CN112559367A (zh) 2021-03-26

Similar Documents

Publication Publication Date Title
CN112559367B (zh) 基于***调用依赖图的内核模糊测试用例生成方法
Herodotou et al. A survey on automatic parameter tuning for big data processing systems
US7284238B2 (en) Multithread tracing method and apparatus
US8719784B2 (en) Assigning runtime artifacts to software components
KR101957533B1 (ko) 가상 머신 브랜칭 및 병렬 실행 기법
US8732676B1 (en) System and method for generating unit test based on recorded execution paths
CN101853200B (zh) 一种高效动态软件漏洞挖掘方法
CN109933515B (zh) 一种回归测试用例集的优化方法和自动优化装置
US7039902B2 (en) Mechanism for enabling efficient testing of a set of computer code
CN113419960B (zh) 用于可信操作***内核模糊测试的种子生成方法及***
Olsthoorn et al. Syntest-solidity: Automated test case generation and fuzzing for smart contracts
Cedersjö et al. Tÿcho: A framework for compiling stream programs
Sadeghi et al. Mining the categorized software repositories to improve the analysis of security vulnerabilities
CN115828260A (zh) 基于脆弱点聚类与距离空间划分的多机协同漏洞检测***
Saluja et al. Optimized approach for antipattern detection in service computing architecture
Spieck et al. A learning-based methodology for scenario-aware mapping of soft real-time applications onto heterogeneous mpsocs
Ciavotta et al. Architectural design of cloud applications: A performance-aware cost minimization approach
Dewey et al. A parallel abstract interpreter for JavaScript
CN113626823A (zh) 一种基于可达性分析的组件间交互威胁检测方法及装置
Yeboah-Antwi et al. Online Genetic Improvement on the java virtual machine with ECSELR
Zhao et al. H-fuzzing: A new heuristic method for fuzzing data generation
CN111459796A (zh) 自动化测试方法、装置、计算机设备和存储介质
McHugh An information flow tool for Gypsy
CN114840418A (zh) 模糊测试方法及装置
CN113031964B (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