CN114201358A - 一种基于系统调用序列的多线程程序异常检测方法 - Google Patents
一种基于系统调用序列的多线程程序异常检测方法 Download PDFInfo
- Publication number
- CN114201358A CN114201358A CN202111384841.3A CN202111384841A CN114201358A CN 114201358 A CN114201358 A CN 114201358A CN 202111384841 A CN202111384841 A CN 202111384841A CN 114201358 A CN114201358 A CN 114201358A
- Authority
- CN
- China
- Prior art keywords
- program
- system call
- thread
- sequence
- behavior
- 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
- 238000001514 detection method Methods 0.000 title claims abstract description 17
- 230000002159 abnormal effect Effects 0.000 claims abstract description 6
- 230000006399 behavior Effects 0.000 claims description 48
- 238000000034 method Methods 0.000 claims description 15
- 230000011218 segmentation Effects 0.000 claims description 4
- 230000005856 abnormality Effects 0.000 claims description 3
- 238000005065 mining Methods 0.000 claims description 3
- 230000000694 effects Effects 0.000 abstract description 2
- 230000007123 defense Effects 0.000 abstract 1
- 230000006870 function Effects 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000013179 statistical model 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/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3027—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a bus
-
- 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)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提出了一种面向多线程程序的异常检测主动防御系统,该系统基于系统调用序列来检测程序是否发生异常,异常包括由于程序自身漏洞发生的异常以及受到外部恶意攻击而引起的异常。对于一个程序,其运行时所产生的系统调用序列,应该是稳定的,符合预期的,如果程序产生的系统调用序列发生了巨大的变化,则表明程序的功能发生了变化,程序可能发生了异常。因此,程序运行时产生的系统调用序列可以用来代表程序的行为。但是,对于多线程程序,由于线程调度的影响,一个程序在相同输入下的多次运行,其产生的系统的调用序列可能是不同的,无法准确的代表程序的行为。因此本发明面向多线程程序,屏蔽线程调度对系统调用序列的影响,以线程级的系统调用序列实时检测多线程程序的运行状况。
Description
技术领域
本发明属于软件安全与异常检测领域,基于线程级的系统调用序列对多线程程序进行检测。
背景技术
程序在运行过程中所要实现的大部分功能与服务,如文件读取、内存管理是只有操作系统才能实现的,程序在开发过程中使用各种编程语言提供的库函数来实现这些功能,而这些库函数又是直接或间接通过调用系统调用来实现的,即一个程序要实现的绝大多数功能都是通过调用系统调用来实现的。为了实现程序的某一个功能,程序往往需要调用多个系统调用,多个系统调用的顺序执行构成了一个序列,即系统调用序列。如果系统调用序列发生了大的变化,则表明程序所实现的功能可能也发生了大的变化,因此系统调用序列可以用来代表程序的行为。
程序在运行过程中所产生的系统调用序列是可以通过一些系统指令或工具捕获到的,例如Linux系统提供了Ptrace指令来获取程序运行时产生的系统调用序列。而在多线程程序运行过程中,通常会有多个线程并发执行,在一段时间内,并发线程的数量,线程执行的顺序往往都是随机不确定的,因此从进程级的角度看到的系统调用序列无法区分每个系统调用所属的进程;同时由于线程调度的随机性,对同一多线程程序在同一输入下得到的多次运行,其得到的进程级系统调用序列可能都是不同的,无法准确的表示程序的行为;虽然线程的执行顺序是不确定的,但是在同一线程内系统调用的执行顺序是固定的,可以代表线程的行为,所以可以基于线程级的系统调用序列来抽象出程序的行为。
插桩技术是指在保证程序原有逻辑完整性,不改变程序原有功能的基础上,在程序中插入一些代码段进行信息采集的技术。通过对程序进行插桩,可以获取到程序运行时的系统调用信息,如线程号、系统调用名,系统调用参数等,从而获取线程级的系统调用序列。
Var-grams算法是一种模式提取算法,它是N-grams算法的改进,程序的一次运行产生的系统调用序列往往是很长的,需要对其进行模式提取以将长序列划分为若干个短序列,一个短序列代表了程序的一种行为,Var-grams算法相比于N-grams的改进在于:N-grams算法提取的短序列长度都是固定的、相同的,而Var-grams算法得到的短序列的长度是不固定的,因此通过Var-grams算法得到的系统调用序列更能代表程序的行为。
隐马尔可夫模型是一种统计模型,它用来描述一个隐含未知参数的马尔可夫过程,其常见的应用是中文的分词,从程序实际运行产生的系统调用序列中提取行为的过程类似于中文的分词过程。利用Var-grams算法得到的系统调用短序列集合训练隐马尔可夫模型,得到隐马尔可夫模型的参数,从而可以对程序实际运行得到的系统调用序列进行分析,将系统调用序列划分为行为序列。
发明内容
本发明主要解决现有技术只能对单线程的顺序程序进行异常检测,而无法适用于多线程程序异常检测的不足,提出了基于系统调用序列的多线程程序异常检测方法。本发明提出的方法从线程级的角度提取线程运行产生的系统调用序列,更精确的表示线程的行为,构建多线程程序的行为库,检测多线程程序在运行的过程中是否发生异常。
为解决上述技术问题,本发明所采用的技术方案是:基于系统调用序列的多线程程序异常检测方法,包括步骤如下:
步骤S1,插桩程序
使用插桩工具对程序进行插桩,获取线程级的系统调用信息,包括线程的线程号,系统调用名,系统调用号等信息。从而可以将原本随机混合在一起的各个线程的系统调用序列以线程号为索引提取出来。
步骤S2,获取可信的线程级系统调用序列
在安全可信的环境下,多次运行插桩后的程序,尽可能遍历程序全部或大部分执行路径,获取程序运行时产生的含线程信息的系统调用序列;根据线程信息中的线程号对总的系统调用序列进行拆解,得到各个线程运行时产生的系统调用序列。
步骤S3,挖掘线程级系统调用序列中的行为
使用Var-grams算法对步骤S2中得到的线程级系统调用序列进行切分,每一条线程级系统调用序列将被切分成若干条长度不等的系统调用短序列,每一条系统调用短序列即代表了程序的一种行为;将所有系统调用短序列放入集合中,构建程序行为的字典集。
步骤S4,训练隐马尔可夫(HMM)模型
将步骤S3中得到的行为字典作为HMM模型的训练数据进行有监督的训练,得到HMM模型的各项参数;构建程序的行为库。
步骤S5,获取程序实际运行时的行为
类似于步骤S2,收集程序在真实环境下运行产生的线程级系统调用序列;将收集到的线程级系统调用序列作为HMM模型的输入,对序列进行分词,将序列划分为若干条长度不等的系统调用短序列,每条短序列即代表程序的一种行为,从而得到程序实际运行的行为序列。
步骤S6,异常检测
将检测到的程序实际运行时的行为与行为库中的行为进行匹配,根据匹配的结果判断程序是否发生异常。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1 为系统调用序列的形式;
图2 为可信计算;
图3 为Var-grams算法提取行为;
图4 为基于系统调用序列的多线程程序异常检测流程。
具体实施方式
以下将配合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题并达成技术功效的实现过程能充分理解并据以实施。
图1所示的是一个程序在运行过程中产生的系统调用序列,其中包含的信息有系统调用名,系统调用的参数,以及系统调用的返回值。传统的基于系统调用序列对程序进行异常检测方法主要是针对单线程的顺序程序,不一定适用于多线程程序的异常检测。为了获取多线程程序的行为,需要获取到系统调用的调用者(线程)信息,从而得到每个线程的行为。
步骤S1,插桩程序
为了获取程序运行时的系统调用信息,需要使用插桩工具对程序进行插桩。程序插桩是指在保证程序原有逻辑性,不改变原有功能的基础上在程序中插入代码段,这些代码段可以检测程序运行时的信息,例如在系统调用的入口处插入检测代码,当程序调用系统调用时,检测代码就可以获取调用者以及系统调用的信息,包括线程的线程号,系统调用名,系统调用号等信息。从而可以将原本随机混合在一起的各个线程的系统调用序列以线程号为索引提取出来。
步骤S2,获取可信的线程级系统调用序列
为了学习到程序的正常行为,需要将程序置于安全可信的环境下运行,所谓安全可信的环境主要是指程序在这种环境下运行一定不会受到外部的攻击或者即使受到攻击也可以正常运行。构建安全可信的环境一般需要硬件的支持,图2显示了可信计算组织(Trusted Computing Group,TCG)给出的可信计算的层次关系。在安全可信的环境下,多次运行插桩后的程序,尽可能遍历程序全部或大部分执行路径,获取程序运行时产生的含线程信息的系统调用序列;根据线程信息中的线程号对总的系统调用序列进行拆解,得到各个线程运行时产生的系统调用序列。
步骤S3,挖掘线程级系统调用序列中的行为
使用Var-grams算法对步骤S2中得到的线程级系统调用序列进行切分,每一条线程级系统调用序列将被切分成若干条长度不等的系统调用短序列,每一条系统调用短序列即代表了程序的一种行为;将所有系统调用短序列放入集合中,构建程序行为的字典集。图3显示了Var-grams算法对系统调用序列进行切分,提取模式的形式,每种模式即一个切分后的短序列,一种模式可以代表程序的一种行为。
步骤S4,训练隐马尔可夫(HMM)模型
将步骤S3中得到的行为字典作为HMM模型的训练数据进行有监督的训练,得到HMM模型的各项参数;构建程序的行为库。
步骤S5,获取程序实际运行时的行为
类似于步骤S2,收集程序在真实环境下运行产生的线程级系统调用序列;将收集到的线程级系统调用序列作为HMM模型的输入,对序列进行分词,将序列划分为若干条长度不等的系统调用短序列,每条短序列即代表程序的一种行为,从而得到程序实际运行的行为序列。
步骤S6,异常检测
将检测到的程序实际运行时的行为与行为库中的行为进行匹配,根据匹配的结果判断程序是否发生异常。
基于系统调用序列的多线程程序异常检测流程如图4所示。
上述说明示出并描述了本发明的若干优选实施例,但如前所述,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。
Claims (1)
1.一种基于系统调用序列的多线程程序异常检测方法,其特征在于,包括步骤如下:
步骤S1,插桩程序
使用插桩工具对程序进行插桩,获取线程级的系统调用信息,包括线程的线程号,系统调用名,系统调用号等信息,从而可以将原本随机混合在一起的各个线程的系统调用序列以线程号为索引提取出来;
步骤S2,获取可信的线程级系统调用序列
在安全可信的环境下,多次运行插桩后的程序,尽可能遍历程序全部或大部分执行路径,获取程序运行时产生的含线程信息的系统调用序列;根据线程信息中的线程号对总的系统调用序列进行拆解,得到各个线程运行时产生的系统调用序列;
步骤S3,挖掘线程级系统调用序列中的行为
使用Var-grams算法对步骤S2中得到的线程级系统调用序列进行切分,每一条线程级系统调用序列将被切分成 若干条长度不等的系统调用短序列,每一条系统调用短序列即代表了程序的一种行为;将所有系统调用短序列放入集合中,构建程序行为的字典集;
步骤S4,训练隐马尔可夫(HMM)模型
将步骤S3中得到的行为字典作为HMM模型的训练数据进行有监督的训练,得到HMM模型的各项参数;构建程序的行为库;
步骤S5,获取程序实际运行时的行为
类似于步骤S2,收集程序在真实环境下运行产生的线程级系统调用序列;将收集到的线程级系统调用序列作为HMM模型的输入,对序列进行分词,将序列划分为若干条长度不等的系统调用短序列,每条短序列即代表程序的一种行为,从而得到程序实际运行的行为序列;
步骤S6,异常检测
将检测到的程序实际运行时的行为与行为库中的行为进行匹配,根据匹配的结果判断程序是否发生异常。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111384841.3A CN114201358A (zh) | 2021-11-22 | 2021-11-22 | 一种基于系统调用序列的多线程程序异常检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111384841.3A CN114201358A (zh) | 2021-11-22 | 2021-11-22 | 一种基于系统调用序列的多线程程序异常检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114201358A true CN114201358A (zh) | 2022-03-18 |
Family
ID=80648303
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111384841.3A Pending CN114201358A (zh) | 2021-11-22 | 2021-11-22 | 一种基于系统调用序列的多线程程序异常检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114201358A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116186717A (zh) * | 2023-04-26 | 2023-05-30 | 中诚华隆计算机技术有限公司 | 一种多线程并发漏洞检测方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20040012285A (ko) * | 2002-08-02 | 2004-02-11 | 한국정보보호진흥원 | 은닉 마르코프 모델을 이용한 비정상행위 침입탐지 시스템및 방법 |
CN105677572A (zh) * | 2016-02-04 | 2016-06-15 | 华中科技大学 | 基于自组织映射模型云软件性能异常错误诊断方法与系统 |
CN109858244A (zh) * | 2019-01-16 | 2019-06-07 | 四川大学 | 一种容器内进程异常行为检测方法与系统 |
CN112559978A (zh) * | 2020-12-18 | 2021-03-26 | 北京邮电大学 | 基于动态胎记的多线程程序抄袭检测方法及相关设备 |
-
2021
- 2021-11-22 CN CN202111384841.3A patent/CN114201358A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20040012285A (ko) * | 2002-08-02 | 2004-02-11 | 한국정보보호진흥원 | 은닉 마르코프 모델을 이용한 비정상행위 침입탐지 시스템및 방법 |
CN105677572A (zh) * | 2016-02-04 | 2016-06-15 | 华中科技大学 | 基于自组织映射模型云软件性能异常错误诊断方法与系统 |
CN109858244A (zh) * | 2019-01-16 | 2019-06-07 | 四川大学 | 一种容器内进程异常行为检测方法与系统 |
CN112559978A (zh) * | 2020-12-18 | 2021-03-26 | 北京邮电大学 | 基于动态胎记的多线程程序抄袭检测方法及相关设备 |
Non-Patent Citations (2)
Title |
---|
杜静;陈媛媛;: "基于隐马尔可夫模型(HMM)的系统调用异常检测", 太原科技大学学报, no. 01, 15 February 2008 (2008-02-15) * |
闫巧, 谢维信, 宋歌, 喻建平: "基于HMM的系统调用异常检测", 电子学报, no. 10, 25 October 2003 (2003-10-25) * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116186717A (zh) * | 2023-04-26 | 2023-05-30 | 中诚华隆计算机技术有限公司 | 一种多线程并发漏洞检测方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112800423B (zh) | 一种二进制代码授权漏洞检测方法 | |
US11989292B2 (en) | Analysis function imparting device, analysis function imparting method, and recording medium | |
US11048798B2 (en) | Method for detecting libraries in program binaries | |
CN110287693B (zh) | 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法 | |
CN106055479B (zh) | 一种基于强制执行的Android应用软件测试方法 | |
Ozcelik et al. | Seer: a lightweight online failure prediction approach | |
KR101640479B1 (ko) | 소스코드기반 소프트웨어 취약점 공격행위 분석시스템 | |
US20230028595A1 (en) | Analysis function imparting device, analysis function imparting method, and analysis function imparting program | |
CN112380542B (zh) | 基于错误场景生成的物联网固件漏洞挖掘方法及系统 | |
WO2016114794A1 (en) | Root cause analysis of non-deterministic tests | |
WO2021146649A1 (en) | System for detecting malicious programmable logic controller code | |
CN112464248A (zh) | 一种处理器漏洞利用威胁检测方法及装置 | |
CN114201358A (zh) | 一种基于系统调用序列的多线程程序异常检测方法 | |
CN117573142B (zh) | 基于模拟执行的java代码反混淆器 | |
TW201717007A (zh) | 零附加項碼覆蓋分析 | |
CN111291377A (zh) | 一种应用漏洞的检测方法及系统 | |
CN111190813B (zh) | 基于自动化测试的安卓应用网络行为信息提取系统及方法 | |
CN112464237A (zh) | 一种静态代码安全诊断方法及装置 | |
Ghazaly | Learning the Idea Behind SAST (Static Application Security Testing) and How It Functions | |
Di Penta et al. | The evolution and decay of statically detected source code vulnerabilities | |
CN111460439B (zh) | 基于多环境的逃避行为检测方法 | |
CN110909351B (zh) | 硬件协助的控制结构不变式挖掘方法 | |
KR102421394B1 (ko) | 하드웨어와 소프트웨어 기반 트레이싱을 이용한 악성코드 탐지 장치 및 방법 | |
Bonfante et al. | Code synchronization by morphological analysis | |
Gougam et al. | Discriminability analysis of supervision patterns by net unfoldings |
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 |