CN114428733A - 基于静态程序分析与模糊测试的内核数据竞争检测方法 - Google Patents
基于静态程序分析与模糊测试的内核数据竞争检测方法 Download PDFInfo
- Publication number
- CN114428733A CN114428733A CN202210059807.7A CN202210059807A CN114428733A CN 114428733 A CN114428733 A CN 114428733A CN 202210059807 A CN202210059807 A CN 202210059807A CN 114428733 A CN114428733 A CN 114428733A
- Authority
- CN
- China
- Prior art keywords
- kernel
- system call
- data competition
- data
- pairs
- 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
Links
- 238000012360 testing method Methods 0.000 title claims abstract description 63
- 230000003068 static effect Effects 0.000 title claims abstract description 29
- 238000001514 detection method Methods 0.000 title claims abstract description 14
- 230000008447 perception Effects 0.000 claims abstract description 4
- 238000000034 method Methods 0.000 claims description 13
- 239000002243 precursor Substances 0.000 claims description 6
- 230000001360 synchronised effect Effects 0.000 claims description 4
- 238000001914 filtration Methods 0.000 claims description 3
- 230000006870 function Effects 0.000 claims description 3
- 238000005192 partition Methods 0.000 claims description 3
- 238000000638 solvent extraction Methods 0.000 claims description 3
- 230000007717 exclusion Effects 0.000 claims 1
- 238000005516 engineering process Methods 0.000 description 6
- 230000007547 defect Effects 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000005065 mining Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000013522 software testing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开一种基于静态程序分析与模糊测试的内核数据竞争检测方法,通过静态程序分析识别代码里的共享资源,并且获得针对共享资源的访问操作,记录该访问操作的读写属性,判定潜在数据竞争的访问对。通过分析内核同步原语语义,过滤不可能产生线程交错的共享资源访问对,以生成更加精确的数据竞争对集合。通过静态分析识别内核资源与系统调用,构建系统调用依赖图。使用数据竞争对集合与系统调用依赖图指导内核模糊测试用例的生成与变异。用一个线程感知模糊测试生成器,将线程的优先级随机化,以探索线程交错,并使用运行时反馈信息更新依赖图的边权值,完善系统调用依赖图,指导之后模糊测试输入的变异。
Description
技术领域
本发明涉及静态程序分析技术和内核模糊测试技术,利用操作系统内核同步原语特征提供更多有效的信息指导内核模糊测试的生成和变异操作,属于软件工程领域。
背景技术
操作系统是管理计算机硬件和软件资源的系统软件,而内核是操作系统的核心,它对各种底层硬件进行抽象和封装,并暴露接口供用户程序使用,不同于用户态程序,内核运行在权限最高的内核态,一旦出现安全漏洞则直接影响整个操作系统和用户程序。模糊测试是一项自动化的软件测试技术,其核心思想是自动或半自动地生成随机数据输入到目标程序中,并监视程序异常,以发现可能的程序错误,是常见的漏洞挖掘技术之一。
并发缺陷指的是两个或两个以上线程未以预期的顺序访问共享资源从而导致不确定的结果。并发缺陷可以分为死锁缺陷与非死锁并发缺陷。常用检测的对象是非死锁并发缺陷里的竞争条件,经常把竞争条件总结为原子性违反、序违反、数据竞争等三类缺陷。其中,原子性违反是指对本该是原子性的共享内存区域因交错执行破坏了原子性而导致不确定的结果;序违反是指两个内存访问没有按照期望的顺序执行导致不确定的结果;数据竞争是指没有顺序要求的多个线程同时访问共享内存且至少一个是写操作从而导致不确定结果。
本发明将使用静态分析技术分析操作系统潜在数据竞争对与系统调用依赖图,然后使用内核同步原语分析过滤不可能发生线程交错的数据竞争对,并指导内核模糊测试生成和变异系统调用序列操作,通过基于虚拟器的内核模糊测试,检测操作系统内核数据竞争。
发明内容
目前的操作系统内核模糊测试没有考虑内核同步原语。本发明为了解决上述技术问题,采用以下技术方案:
本发明提出的一种基于静态程序分析与模糊测试的内核数据竞争检测方法,包括以下步骤:
步骤1:通过静态程序分析识别代码里的共享资源,并且获得针对共享资源的访问操作,记录该访问操作的读写属性,判定潜在数据竞争的访问对,然后通过分析内核同步原语语义,过滤不可能产生线程交错的共享资源访问对,以生成更加精确的数据竞争对集合,具体步骤如下;
步骤1.1:对操作系统内核模块进行分区;
步骤1.2:对每个分区的操作系统内核代码进行过程间和上下文敏感的静态程序分析,获取针对共享资源的访问操作及读写属性;
步骤1.3:通过点对分析以检测操作系统的潜在数据竞争对,生成潜在数据竞争对的集合;
步骤1.4:对操作系统内核同步原语的特征进行分类总结对应的模式;
步骤1.5:通过分析内核同步原语,找出实际运行时受到同步机制限制的多线程语句,过滤潜在数据竞争对集合里不会产生线程交错的数据竞争对,生成更加精确的数据竞争对集合。
步骤2:通过静态分析识别内核资源与系统调用,构建系统调用依赖图,具体步骤如下:
步骤2.1:定义有向带权图,其中结点为系统调用,由于系统调用序列顺序不固定,任意两个系统调可能按顺序出现,所以生成边权值为0的初始的有向完备图;
步骤2.2:静态分析内核源码与资源,获取每个函数的内核资源使用情况;
步骤2.3:分析系统调用间的依赖关系,更新依赖图里的边权值,完善系统调用依赖图。
步骤3:使用数据竞争对集合与指导内核模糊测试用例的生成,通过数据竞争对的共享资源访问位置生成模糊测试初始输入,具体步骤如下:
步骤3.1:遍历数据竞争对集合,选择当前准备使用的数据竞争对;
步骤3.2:生成模糊测试初始输入即系统调用序列,其中系统调用序列里含有对数据竞争对的访问。
步骤4:使用系统调用依赖图指导内核模糊测试用例的变异,通过系统调用依赖图边权值按概率添加删除替换系统调用语句,以生成新的模糊测试输入,具体步骤如下:
步骤4.1:根据系统调用依赖图变异模糊测试初始输入,当使用删除系统调用策略时,以更大概率选择在测试用例中连续系统调用边权值低的系统调用;
步骤4.2:当使用插入系统调用策略时,以更大概率选择插入点前驱结点为起点的权值高的边所指向的系统调用;
步骤4.3:当使用替换系统调用策略时,以更大概率选择替换点前驱结点为起点的权值高的边所指向的系统调用。
步骤5:用一个线程感知模糊测试生成器,将线程的优先级随机化,以探索线程交错,并使用运行时反馈信息更新依赖图的边权值,完善系统调用依赖图,指导之后模糊测试输入的变异,具体步骤如下:
步骤5.1:通过在定制的虚拟化环境中运行目标内核;
步骤5.2:为每个CPU核心设置断点,断点位置在数据竞争对语句上;
步骤5.3:在两个内核线程停在各自的断点地址后,即访问到集合里的数据竞争对后,恢复虚拟CPU的执行;
步骤5.4:检测虚拟内核是否发生实际的数据竞争,通过CPU指令都访问相同地址以进行判断;
步骤5.5:收集运行时信息,当成功运行或检测到数据竞争时,增加系统调用序列之间的边权值,更新系统调用依赖图,指导之后模糊测试输入的变异。
有益效果:本发明采用以上技术方案,与现有技术相比,具体以下有益效果:
1、本方法考虑操作系统内核原语,过滤掉不可能发生的潜在数据竞争对,减少模糊测试的无效输入。
2、本方法通过使用虚拟机调度器进行线程的调度,尽可能地让线程触发潜在数据竞争对,以提高模糊测试的效率。
3、本方法通过使用系统调用依赖图指导模糊测试输入的变异,提高模糊测试输入的有效性。
附图说明
图1是基于静态程序分析与模糊测试的内核数据竞争检测方法的系统框架。
具体实施方式
下面结合附图对本发明使用的基于系统调用依赖图的内核模糊测试用例生成方法具体实施例作更详细的描述。
本实施例的基于静态程序分析与模糊测试的内核数据竞争检测方法,包括以下步骤:
步骤1:通过静态程序分析识别代码里的共享资源,并且获得针对共享资源的访问操作,记录该访问操作的读写属性,判定潜在数据竞争的访问对,然后通过分析内核同步原语语义,过滤不可能产生线程交错的共享资源访问对,以生成更加精确的数据竞争对集合,具体步骤如下;
步骤1.1:对操作系统内核模块进行分区;
步骤1.2:对每个分区的操作系统内核代码进行过程间和上下文敏感的静态程序分析,获取针对共享资源的访问操作及读写属性;
步骤1.3:通过点对分析以检测操作系统的潜在数据竞争对,生成潜在数据竞争对的集合;
步骤1.4:对操作系统内核同步原语的特征进行分类总结对应的模式;
步骤1.5:通过分析内核同步原语,找出实际运行时受到同步机制限制的多线程语句,过滤潜在数据竞争对集合里不会产生线程交错的数据竞争对,生成更加精确的数据竞争对集合。
步骤2:通过静态分析识别内核资源与系统调用,构建系统调用依赖图,具体步骤如下:
步骤2.1:定义有向带权图,其中结点为系统调用,由于系统调用序列顺序不固定,任意两个系统调可能按顺序出现,所以生成边权值为0的初始的有向完备图;
步骤2.2:静态分析内核源码与资源,获取每个函数的内核资源使用情况;
步骤2.3:分析系统调用间的依赖关系,更新依赖图里的边权值,完善系统调用依赖图。
步骤3:使用数据竞争对集合与指导内核模糊测试用例的生成,通过数据竞争对的共享资源访问位置生成模糊测试初始输入,具体步骤如下:
步骤3.1:遍历数据竞争对集合,选择当前准备使用的数据竞争对;
步骤3.2:生成模糊测试初始输入即系统调用序列,其中系统调用序列里含有对数据竞争对的访问。
步骤4:使用系统调用依赖图指导内核模糊测试用例的变异,通过数据竞争对的共享资源访问位置生成模糊测试初始输入,通过系统调用依赖图边权值按概率添加删除替换系统调用语句,以生成新的模糊测试输入,具体步骤如下:
步骤4.1:根据系统调用依赖图变异模糊测试初始输入,当使用删除系统调用策略时,以更大概率选择在测试用例中连续系统调用边权值低的系统调用;
步骤4.2:当使用插入系统调用策略时,以更大概率选择插入点前驱结点为起点的权值高的边所指向的系统调用;
步骤4.3:当使用替换系统调用策略时,以更大概率选择替换点前驱结点为起点的权值高的边所指向的系统调用。
步骤5:用一个线程感知模糊测试生成器,将线程的优先级随机化,以探索线程交错,并使用运行时反馈信息更新依赖图的边权值,完善系统调用依赖图,指导之后模糊测试输入的变异,具体步骤如下:
步骤5.1:通过在定制的虚拟化环境中运行目标内核;
步骤5.2:为每个CPU核心设置断点,断点位置在数据竞争对语句上;
步骤5.3:在两个内核线程停在各自的断点地址后,即访问到集合里的数据竞争对后,恢复虚拟CPU的执行;
步骤5.4:检测虚拟内核是否发生实际的数据竞争,通过CPU指令都访问相同地址以进行判断;
步骤5.5:收集运行时信息,当成功运行或检测到数据竞争时,增加系统调用序列之间的边权值,更新系统调用依赖图,指导之后模糊测试输入的变异。
本方法在考虑内核同步机制的情况下尽可能生成有效的测试用例,即系统调用序列。本方法通过对内核源码进行静态分析得到数据竞争对集合和系统调用依赖图,通过数据竞争对和依赖图指导模糊测试中的生成和变异操作,尽可能提高模糊测试输入的有效性并且增加数据竞争漏洞被触发的可能性。
以上仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。本发明未涉及的技术均可通过现有的技术加以实现。
Claims (8)
1.一种基于静态程序分析与模糊测试的内核数据竞争检测方法,所述方法包括以下步骤:
步骤1:通过静态程序分析识别代码里的共享资源,并且获得针对共享资源的访问操作,记录该访问操作的读写属性,判定潜在数据竞争的访问对,然后通过分析内核同步原语语义,过滤不可能产生线程交错的共享资源访问对,以生成更加精确的数据竞争对集合;
步骤2:通过静态分析识别内核资源与系统调用,构建系统调用依赖图;
步骤3:使用数据竞争对集合与指导内核模糊测试用例的生成,通过数据竞争对的共享资源访问位置生成模糊测试初始输入;
步骤4:使用系统调用依赖图指导内核模糊测试用例的变异,通过系统调用依赖图边权值按概率添加删除替换系统调用语句,以生成新的模糊测试输入;
步骤5:用一个线程感知模糊测试生成器,将线程的优先级随机化,以探索线程交错,并使用运行时反馈信息更新依赖图的边权值,完善系统调用依赖图,指导之后模糊测试输入的变异。
2.根据权利要求1所述的基于静态程序分析与模糊测试的内核数据竞争检测方法,其特征在于,所述步骤1具体如下:
步骤1.1:对操作系统内核模块进行分区;
步骤1.2:对每个分区的操作系统内核代码进行过程间和上下文敏感的静态程序分析,获取针对共享资源的访问操作及读写属性;
步骤1.3:通过点对分析以检测操作系统的潜在数据竞争对,生成潜在数据竞争对的集合;
步骤1.4:对操作系统内核同步原语的特征进行分类总结对应的模式;
步骤1.5:通过分析内核同步原语,找出实际运行时受到同步机制限制的多线程语句,过滤潜在数据竞争对集合里不会产生线程交错的数据竞争对,生成更加精确的数据竞争对集合。
3.根据权利要求1所述的基于静态程序分析与模糊测试的内核数据竞争检测方法,其特征在于,所述步骤2的具体步骤如下:
步骤2.1:定义有向带权图,其中结点为系统调用,由于系统调用序列顺序不固定,任意两个系统调可能按顺序出现,所以生成边权值为0的初始的有向完备图;
步骤2.2:静态分析内核源码与资源,获取每个函数的内核资源使用情况;
步骤2.3:分析系统调用间的依赖关系,更新依赖图里的边权值,完善系统调用依赖图。
4.根据权利要求1所述的基于静态程序分析与模糊测试的内核数据竞争检测方法,其特征在于,所述步骤3具体如下:
步骤3.1:遍历数据竞争对集合,选择当前准备使用的数据竞争对;
步骤3.2:生成模糊测试初始输入即系统调用序列,其中系统调用序列里含有对数据竞争对的访问。
5.根据权利要求1所述的基于静态程序分析与模糊测试的内核数据竞争检测方法,其特征在于,所述步骤4具体如下:
步骤4.1:根据系统调用依赖图变异模糊测试初始输入,当使用删除系统调用策略时,以更大概率选择在测试用例中连续系统调用边权值低的系统调用;
步骤4.2:当使用插入系统调用策略时,以更大概率选择插入点前驱结点为起点的权值高的边所指向的系统调用;
步骤4.3:当使用替换系统调用策略时,以更大概率选择替换点前驱结点为起点的权值高的边所指向的系统调用。
6.根据权利要求1所述的基于静态程序分析与模糊测试的内核数据竞争检测方法,其特征在于,所述步骤5具体如下:
步骤5.1:通过在定制的虚拟化环境中运行目标内核;
步骤5.2:为每个CPU核心设置断点,断点位置在数据竞争对语句上;
步骤5.3:在两个内核线程停在各自的断点地址后,即访问到集合里的数据竞争对后,恢复虚拟CPU的执行;
步骤5.4:检测虚拟内核是否发生实际的数据竞争,通过CPU指令都访问相同地址以进行判断;
步骤5.5:收集运行时信息,当成功运行或检测到数据竞争时,增加系统调用序列之间的边权值,更新系统调用依赖图,指导之后模糊测试输入的变异。
7.根据权利要求1至6之一所述的基于静态程序分析与模糊测试的内核数据竞争检测方法,其特征在于:所述步骤1中内核同步原语包括互斥锁、信号量、自旋锁、顺序锁等一系列语义不同的原语。
8.根据权利要求7所述的基于静态程序分析与模糊测试的内核数据竞争检测方法,其特征在于:对不同内核同步原语的静态程序分析,以识别不会发生线程交错的潜在数据竞争对。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210059807.7A CN114428733A (zh) | 2022-01-19 | 2022-01-19 | 基于静态程序分析与模糊测试的内核数据竞争检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210059807.7A CN114428733A (zh) | 2022-01-19 | 2022-01-19 | 基于静态程序分析与模糊测试的内核数据竞争检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114428733A true CN114428733A (zh) | 2022-05-03 |
Family
ID=81313377
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210059807.7A Pending CN114428733A (zh) | 2022-01-19 | 2022-01-19 | 基于静态程序分析与模糊测试的内核数据竞争检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114428733A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115794592A (zh) * | 2023-02-10 | 2023-03-14 | 南京邮电大学 | 一种基于高阶函数的数据竞争检测方法 |
CN116069672A (zh) * | 2023-03-23 | 2023-05-05 | 中南大学 | 操作系统内核定向模糊测试的种子变异方法及测试方法 |
CN116090383A (zh) * | 2022-12-27 | 2023-05-09 | 广东高云半导体科技股份有限公司 | 实现静态时序分析的方法、装置、计算机存储介质及终端 |
-
2022
- 2022-01-19 CN CN202210059807.7A patent/CN114428733A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116090383A (zh) * | 2022-12-27 | 2023-05-09 | 广东高云半导体科技股份有限公司 | 实现静态时序分析的方法、装置、计算机存储介质及终端 |
CN115794592A (zh) * | 2023-02-10 | 2023-03-14 | 南京邮电大学 | 一种基于高阶函数的数据竞争检测方法 |
CN116069672A (zh) * | 2023-03-23 | 2023-05-05 | 中南大学 | 操作系统内核定向模糊测试的种子变异方法及测试方法 |
CN116069672B (zh) * | 2023-03-23 | 2023-07-04 | 中南大学 | 操作系统内核定向模糊测试的种子变异方法及测试方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Sen | Effective random testing of concurrent programs | |
KR101143214B1 (ko) | 멀티스레드된 프로그램에서의 잠재적 레이스를 검출하기위한 방법 및 시스템 | |
Raychev et al. | Effective race detection for event-driven programs | |
O'callahan et al. | Hybrid dynamic data race detection | |
Alam et al. | Syncperf: Categorizing, detecting, and diagnosing synchronization performance bugs | |
Dean et al. | Perfcompass: Online performance anomaly fault localization and inference in infrastructure-as-a-service clouds | |
CN114428733A (zh) | 基于静态程序分析与模糊测试的内核数据竞争检测方法 | |
US20090037888A1 (en) | Simulation of program execution to detect problem such as deadlock | |
US10241894B2 (en) | Data-scoped dynamic data race detection | |
Li et al. | Pulse: A Dynamic Deadlock Detection Mechanism Using Speculative Execution. | |
Tian et al. | Dynamic recognition of synchronization operations for improved data race detection | |
US20160188441A1 (en) | Testing multi-threaded applications | |
Yi et al. | Cooperative reasoning for preemptive execution | |
US20230004367A1 (en) | Low-overhead detection techniques for synchronization problems in parallel and concurrent software | |
Hofer et al. | Efficient tracing and versatile analysis of lock contention in Java applications on the virtual machine level | |
Zhang et al. | A lightweight system for detecting and tolerating concurrency bugs | |
Sumner et al. | Marathon: Detecting atomic-set serializability violations with conflict graphs | |
Tchamgoue et al. | A framework for on-the-fly race healing in ARINC-653 applications | |
Xu et al. | PVcon: localizing hidden concurrency errors with prediction and verification | |
Yang et al. | Histlock+: precise memory access maintenance without lockset comparison for complete hybrid data race detection | |
Yi et al. | SideTrack: generalizing dynamic atomicity analysis | |
Jammer et al. | Towards a hybrid MPI correctness benchmark suite | |
Qadeer et al. | Runtime verification of concurrency-specific correctness criteria | |
Long et al. | Mutation-based exploration of a method for verifying concurrent Java components | |
Santhiar et al. | Efficient race detection in the presence of programmatic event loops |
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 |