CN114201358A - 一种基于系统调用序列的多线程程序异常检测方法 - Google Patents

一种基于系统调用序列的多线程程序异常检测方法 Download PDF

Info

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
Application number
CN202111384841.3A
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.)
Nanjing University of Posts and Telecommunications
Original Assignee
Nanjing University of Posts and Telecommunications
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 of Posts and Telecommunications filed Critical Nanjing University of Posts and Telecommunications
Priority to CN202111384841.3A priority Critical patent/CN114201358A/zh
Publication of CN114201358A publication Critical patent/CN114201358A/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/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3027Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task 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,异常检测
将检测到的程序实际运行时的行为与行为库中的行为进行匹配,根据匹配的结果判断程序是否发生异常。
CN202111384841.3A 2021-11-22 2021-11-22 一种基于系统调用序列的多线程程序异常检测方法 Pending CN114201358A (zh)

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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116186717A (zh) * 2023-04-26 2023-05-30 中诚华隆计算机技术有限公司 一种多线程并发漏洞检测方法和装置

Citations (4)

* Cited by examiner, † Cited by third party
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 北京邮电大学 基于动态胎记的多线程程序抄袭检测方法及相关设备

Patent Citations (4)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Title
杜静;陈媛媛;: "基于隐马尔可夫模型(HMM)的系统调用异常检测", 太原科技大学学报, no. 01, 15 February 2008 (2008-02-15) *
闫巧, 谢维信, 宋歌, 喻建平: "基于HMM的系统调用异常检测", 电子学报, no. 10, 25 October 2003 (2003-10-25) *

Cited By (1)

* Cited by examiner, † Cited by third party
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