首页> 中国专利> 一种基于上下文感知的系统异常检测方法

一种基于上下文感知的系统异常检测方法

摘要

本发明公开了一种基于上下文感知的系统异常检测方法,该方法结合长短期记忆神经网络构建异常检测模型,实现对系统异常行为的检测。本方法从在系统运行时从系统堆栈信息中获取系统调用的上下文信息,构建上下文信息列表,然后截取训练数据中固定长度的系统行为序列,使用词嵌入向量进行状态压缩并且使用长短期记忆神经网络搭建异常检测模型,训练异常检测模型后便可以实现系统异常调用序列的检测。本发明还通过调整参数进行误报率控制,并且通过收集误报的检测结果,进行在线模型更新进行参数的调整以优化模型,实现了高效精确的系统异常检测。

著录项

  • 公开/公告号CN112202726A

    专利类型发明专利

  • 公开/公告日2021-01-08

    原文格式PDF

  • 申请/专利权人 西安交通大学;

    申请/专利号CN202010948293.1

  • 发明设计人 师斌;杨圆哲;郑庆华;董博;

    申请日2020-09-10

  • 分类号H04L29/06(20060101);G06N3/04(20060101);G06N3/08(20060101);

  • 代理机构61200 西安通大专利代理有限责任公司;

  • 代理人闵岳峰

  • 地址 710049 陕西省西安市咸宁西路28号

  • 入库时间 2023-06-19 09:29:07

说明书

技术领域

本发明属于系统异常检测领域,特别涉及一种基于上下文感知的系统异常检测方法。

背景技术

系统异常检测技术可以识别系统中与预期不符的状态、事件或其他变量。系统异常检测技术的优点是不依赖攻击签名,能够主动防御未知的攻击和异常,然而随着系统规模和应用程序的复杂度的增大,系统和应用也将遇到越来越多的漏洞和缺陷,而利用这些漏洞和缺陷发起的攻击也变得越来越复杂。这使得异常检测技术变得更加困难,许多传统的基于异常特征的检测方法已不再有效。针对这一问题,许多研究都提出使用系统正常运行时的特征的而不是系统受到攻击时的特征进行异常检测,对系统正常行为进行精确建模,从而通过当前的行为模式检测潜在的异常行为。现有技术构建出系统正常行为模型主要分为两大类:确定性模型和概率模型。其中,确定性模型的思想主要是记录系统曾出现过的所有正常行为,若检测中发现未知的行为则标记为异常。确定性模型无法区分行为发生的概率上的异常,从而有很高的误报率和低检出率。相反,概率模型则主要通过历史数据计算当前各种行为发生的可能性,若发生概率低于置信区间的门限,则判断为异常。以下专利提供了可供参考的系统异常检测方法:

文献1.一种分布式系统异常检测方法(201110093278.4)

文献2.云计算中一种基于神经网络的异常检测系统(201210559741.4)

文献3.一种日常流异常检测的方法及系统(201710607485.4)

文献1根据历史信息确定测度属性的历史关联度,生成测度属性关系网络划分模型,对新采集到的数据进行关联度计算,更新网络模型,依据划分结果判断是否出现异常。它的问题是只考虑相似度单一方面,模型特征不足,提供的信息比较片面。

文献2收集监控主机端上的日志,按照一定的神经网络算法定义异常事件的类型,更新代理规则库,当符合定义的异常特征时产生响应。该方法存在的问题是训练规模较大。

文献3利用检测模型对日志流进行异常检测,从静态统计数据中提取数据特征,并将所述特征输入初始模型中,训练模型后获取日志流,并更新数据。它的问题是只提取静态统计数据特征,没有考虑上下文信息。

以上文献都存在的问题是没有很好地利用上下文信息,无法检测复用系统正常代码的各类攻击。总体而言,当前相关异常检测工作缺乏上下文信息,导致当前工作采用的数据特征不足,出现检测性能提升的瓶颈。因此迫切需要将上下文数据加入异常检测模型中进行研究。

发明内容

本发明的目的在于提供一种基于上下文感知的系统异常检测方法,该方法可实时学习并更新参数,解决无法实时更新模型的问题。

本发明采用如下技术方案来实现的:

一种基于上下文感知的系统异常检测方法,包括以下步骤:

1)根据系统调用获得上下文系统行为信息;

2)将不同的系统行为用不同的哈希值表示;

3)使用词嵌入向量来进行状态的压缩并利用长短期记忆神经网络构建异常检测模型,使用哈希值表示的系统行为来进行模型的训练;

4)使用训练好的模型进行异常检测。

本发明进一步的改进在于,该方法还包括:调整参数控制误报率,收集误报的检测结果,并通过该结果更新现有模型来提升准确率。

本发明进一步的改进在于,步骤1)的具体的实现步骤如下:

Step1.获取系统调用名称和程序地址

每次系统调用时,获取系统调用名称和当前的PC即程序计数器,PC代表调用系统调用的程序地址;

Step2.构建上下文信息列表

收集系统栈中的所有返回地址提取到上下文信息列表中,将当前PC作为元素添加到列表中,这个上下文信息列表记录系统的调用结构信息;

Step3.递归函数处理

如果在栈中发现一对相同的返回地址,那么它们可能是产生了递归调用,那么系统将它们之间的所有的返回地址都从上下文信息列表中删除。

本发明进一步的改进在于,步骤2)的具体的实现步骤如下:

Step1.系统行为表示

定义S={s

模型的输入是最近的系统历史数据,输出是n个属于S的系统行为的概率分布,分别表示下一个将要发生的系统行为是si的概率;如果要预测的下一个系统行为是mt,那么用于模型的输入便是长度为h的最近产生的系统行为序列w;其中w={m

Step2.截取系统行为序列

使用步进法,依次截取训练数据中长度为h的时间窗口的系统行为序列,并根据它更新模型,以获得将每个s

Step3.异常类型判定

模型的检测阶段是在线实时的,将实时捕获的系统行为日志流式的传入检测模型中;假设方法要检测传入的系统行为m

(1).实时获取系统行为的程序失效,该异常为数据获取异常;

(2).训练数据中可能无法覆盖所有的系统行为,因此检测阶段的mt的取值可能并不包含于系统行为的集合S,该异常为系统行为异常;

(3).通常检测阶段的m

本发明进一步的改进在于,步骤3)的具体的实现步骤如下:

Step1.模型简化

首先进行模型简化,假设一个系统行为的概率是由它最近的N个前序行为决定,而不是整个历史中的所有前序决定,该简化等价于假设P(m

给定系统行为序列训练数据W,训练LSTM的过程就是减小每个预测出的下一个系统行为与训练数据中实际发生的系统行为的偏差,训练过程就是学习一个概率分布P(m

Step2.传递历史信息

LSTM节点中每个单元的状态都包含一个隐藏状态向量H

Step3.模型计算

LSTM通过前一时间节点的状态和此时的数据输入进行计算的过程有三个阶段:遗忘阶段,对上一个状态传来的输入进行选择性忘记;选择记忆阶段,对当前输入进行记忆;输出阶段,将通过计算得到的输出门参数,决定哪些内容将会被当成当前状态的输出;

Step4.模型训练

在训练过程中,使用梯度下降法来减少每个输入/输出对的损失函数;输入包含一个由h个系统行为组成的w={m

本发明进一步的改进在于,步骤4)的具体的实现步骤如下:

对m

本发明进一步的改进在于,步骤5)的具体的实现步骤如下:

对每个异常进行人工诊断,若为误报,则根据新训练出的参数替换原有模型中的参数来在线更新模型;

如果是系统行为异常,即检测阶段的m

若是行为序列异常,若经过人工诊断,发现结果为误报,此时将使用该数据为训练标签更新隐藏层模型的权重;从而使下次给定系统行为序列时,系统行为序列的下个系统行为对应的概率升高,模型更新在原有基础上通过新的训练数据调整参数权重。

本发明至少具有如下有益的技术效果:

本发明提供的一种基于上下文感知的系统异常检测方法,上下文特征信息可以生成更具表现力的行为模型从而提高检测准确性。该方法是基于系统调用序列进行训练的概率模型异常检测系统。首先,为了解决方案模型特征不足的问题,方法提出了使用堆栈信息来丰富现有系统调用信息。从堆栈中方法可以获取系统调用的上下文信息,然后将不同上下文的相同系统调用区别对待,从而生成更准确的正常行为模型。其次,针对训练规模过大问题,受到基于RNN(循环神经网络)的自然语言处理模型的功能和性能优势的启发,方法提出使用词嵌入向量来进行状态的压缩并同时使用LSTM(长短期记忆)神经网络来预测不同系统调用的概率,从而达到检测异常的系统调用序列的目的。

综上,本发明首次提出根据上下文信息使用词嵌入向量来进行状态压缩并使用长短期记忆神经网络进行概率模型训练的方法,这种方法可以捕捉到各个系统调用的潜在非线性和高维依赖性,从而更有效地检测系统异常。

附图说明

图1为上下文感知的系统调用异常检测机制总体结构示意图。

图2为整体框架流程示意图。

图3为长短期记忆神经网络应用流程示意图。

图4为LSTM模型时序展开示意图。

图5为LSTM整体神经网络结构示意图。

具体实施方式

以下结合附图和实施例对本发明做出进一步的说明。

本实施例基于开源神经网络Keras对Linux操作系统下的异常检测进行建模。为了更清楚地说明本发明的技术方案,下面结合附图和具体实施例对本发明一种基于上下文感知的系统异常检测方法进行详细描述。

如图1所示,上下文感知的系统调用异常检测机制的工作流程主要包括系统调用截取和上下文信息获取,模型训练及异常检测,图左侧部分,首先在系统正常运行时获取大量系统行为序列数据,接着将不同的系统行为用不同的哈希值表示,并使用系统行为序列来训练异常检测模型。图右侧部分所示,方法将新截获的系统行为哈希值传入检测模型以检测其是否正常,同时记录结果。由于训练数据可能没有覆盖到所有情况且同时系统正常行为模型可能会随着时间的推移而改变。所以还将收集误报的检测结果,并通过该结果更新现有模型。如图2所示,方法实施过程为:

S201.上下文信息获取

上下文信息在检测执行流程异常方面具有很强的作用,对于上下文不敏感的检测模型来说,正常调用序列中系统函数的异常很难被检测到。然而,由于代码重用攻击可以利用整个进程内存中的现有代码,因此这些系统调用可以位于任何代码段。虽然仍然符合正常的系统调用序列顺序,但是可以通过上下文信息轻松地识别出不正确的函数调用栈信息。

Step 1.获取系统调用名称和程序地址

每次系统调用时,获取系统调用名称和当前的PC。对于32位的Linux系统,该入口地址在MSR(特殊模块寄存器)的IA32_SYSENTER_EIP中存储而,对于64位系统,该入口地址在MSR的LSTAR中存储。在入口函数处注册监控点进行截获可以得到系统调用,截获后可从系统调用参数中获取系统调用号及其它有用参数。32位系统中,系统调用的参数分别保存在EAX,EBX,ECX,EDX,ESI,EDI中,64位系统中,系统调用的参数分别保存在RAX,RDI,RSI,RDX,R10,R8,R9中,通过直接读取寄存器获得参数系信息。

在Linux系统中,绝大多数上下文信息都与当前进程结构体task_struct相关,因此需要首先获取当前进程的task_struct。在Linux操作系统中,创建进程时会在内核地址空间中预留一些空间存储该进程相关的信息,该空间是一个union类型,大小是2个连续的内存页面,进程的task_struct就保存在该空间中的thread_info中。根据thread_info的地址,可以得到task_struct的地址。其中进程名存储在task_struct下的comm对象中;进程号存储在pid对象中;而用户栈地址对于进程来说存储在mm->start_stack对象中,对于线程来说存储在thread->sp对象中。获取了用户栈地址后,可以模拟glibc的backtrace函数来进行调用栈信息提取。

Step2.构建上下文信息列表

方法将收集系统栈中的所有返回地址提取,保存到上下文信息列表中Context={a

Step3.递归函数处理

对于递归函数来说,递归层数往往和参数等数据强相关。在这种情况下,同一个递归程序往往因为参数不同而造成深度不同,从而导致存在许多不同的上下文信息。这可能使训练过程变得更难以收敛或导致更高的误报率。一旦在栈中发现一对相同的返回地址,那么它们可能是产生了递归调用。此时系统将它们之间的所有的返回地址都从上下文信息列表中删除。

S202.数据预处理

Step1.系统行为表示

系统调用是应用程序访问系统资源的主要接口,可以很好地表现系统行为。系统正常情况下的行为是有限的,定义S={s

方法将该系统调用序列异常检测问题建模为多类分类问题,其中每个不同的系统行为是一个类。模型的输入是最近的系统历史数据,输出是n个属于S的系统行为的概率分布,分别代表下一个将要发生的系统行为是s

Step2.截取系统行为序列

模型的训练阶段主要依赖于系统正常执行时捕获的系统行为序列。本发明中使用步进法,依次截取训练数据中长度为h的时间窗口的系统行为序列,并根据它更新模型,以获得将每个s

Step3.异常类型判定

如果方法要检测传入的系统行为m

(1)实时获取系统行为的程序失效。获取系统行为的程序可能因为攻击或其他原因失效,从而造成无法正常获取系统调用及其上下文的序列的问题,此时方法便不再有提供给异常检测模型的输入。该异常为数据获取异常。

(2)训练数据中可能无法覆盖所有的系统行为,因此检测阶段的m

(3)通常检测阶段的m

根据异常行为反馈得到行为异常类型。

S203.长短期记忆(LSTM)神经网络机制应用

下面结合图3-5描述长短期记忆神经网络机制的应用。

S301.模型简化

假设系统行为序列训练数据W={m

方法使用大小为N的滑动窗口对整个历史系统行为序列进行频数计数。

与传统n元组概率模型相比,基于LSTM的模型可以识别更复杂的行为模式并在序列上维持长记忆状态。方法在模型中使用LSTM神经网络对系统行为序列进行异常检测。给定系统行为序列训练数据W,训练LSTM的过程就是尽量减小每个预测出的下一个系统行为与训练数据中实际发生的系统行为的偏差,训练过程就是学习一个概率分布P(m

S302.传递历史信息

图4表现了LSTM节点在时序上的展开形式。其中每个单元的状态都包含有一个隐藏状态向量H

S303.模型计算

LSTM通过前一时间节点的状态和此时的数据输入进行计算的过程主要有三个阶段1)遗忘阶段。这个阶段主要是对上一个状态传来的输入进行选择性忘记。具体来说就是通过计算得到的遗忘门参数,来控制上一个状态中哪些内容需要留下来,哪些内容需要忘记;2)选择记忆阶段,这个阶段对当前输入进行记忆,具体来说就是通过计算得到的输入门参数,来控制当前输入哪些内容重要需要记录;3)输出阶段。这个阶段将通过计算得到的输出门参数,决定哪些内容将会被当成当前状态的输出。与传统递归神经网络有所不同的是,LSTM的输出通常可以从H

S304.模型训练

模型训练的过程主要就是对上述门的参数权重进行合适的分配及调整,以便LSTM的最终输出与训练数据的标签更接近。在训练过程中,使用梯度下降法来减少每个输入/输出对的损失函数。其中输入包含一个由h个系统行为组成的窗口w={m

如图5所示,整个神经网络结构。首先,在输入层(input layer),每个时间窗口中对应的单个系统行为m

S204.误报率控制

对于系统调用异常检测的场景来说,直接采用分类结果进行异常检测会造成很高的误报率,因为实际场景中预测结果m

S205.在线模型更新

本发明提出了一套反馈机制来在线更新模型,即对每个异常进行人工诊断,若为误报,则根据新训练出的参数替换原有模型中的参数来在线更新模型。

本发明在初期根据S集合中的元素个数确定输入层维数时,应预留出可能在实时检测过程中增加的数量。如果是系统行为异常,即检测阶段的m

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号