APP下载

一种基于Linux的程序行为异常检测系统的研究与开发

2010-08-24涂俊英

制造业自动化 2010年15期
关键词:数据源内核调用

涂俊英

TU Jun-ying

(孝感学院 计算机与信息科学学院,孝感 432000)

0 引言

入侵检测技术针对的对象可以分为两大类别,分别是异常检测和误用检测,行为控制是异常检测的核心。目前的行为控制研究分为四个方面,分别是行为描述、数据源选择、行为匹配、正常行为学习。数据源的来源一般包括两个方面:系统调用和审计数据。本文所关注的是出自Wirex的框架结构Linux Security Module(简称LSM),该框架结构统一支持Linux内核的访问控制。本文将从LSM中获得新的数据源,作为程序行为建模的数据,在此基础上建立基于隐马尔科夫的程序行为模型,主要目的在于在异常检测方面降低误报率,取得更好的效果。

1 基于LSM 数据源的程序行为异常检测手段

1.1 检测数据源的选取

由于LSM设计的初衷即是为了使Linux系统的安全性得到增强,而且可以提供大量的程序行为的信息,因此本文选择其作为建立正常行为轮廓的数据源。LSM的优势在于能够让各类安全访问控制模型在Linux下以可加载内核模块来实现。根据具体需求的不同,用户能够在Linux内核中加载适合的安全模块,使得Linux安全访问控制机制的易用性以及灵活性均得到提升。与“系统调用”对比,LSM在系统调用或内核函数内进行截获点的部署,因而获得了更加细的粒度。

1.2 LSM数据源的提取

LSM自身并不提供具体的安全策略。LSM对安全策略的定义是通过安全模块的形式,并提供一个框架结构,修改了内核。用此框架结构来存放加入了安全策略的内核,以根据策略实现系统访问关键的资源前的安全检查。

例如,当某个文件被应用程序访问时,首先在内核的系统调用下对inode进行查询,以完成传统的安全检查,而当此应用程序真正要打开该文件前,就会调用LSM钩子函数来进行探测。

使用security_operations结构体来完成对LSM数据的提取。该结构体的定义位于security.h中,其实质是一个hook函数的指针列表,因此对所有的hook函数的访问均可通过这个结构体进行。hook函数在被调用的同时,通过其调用轨迹也就得到了对该程序进行监控所需的行为特征,系统构建一个叫做security operations的结构体,该结构体对钩子函数的调用序列进行详细的记录,将所记录的数据作为数据源进行异常检测。

1.3 隐马尔可夫模型的建立

隐马尔可夫模型认为,在正常情况下,系统中的进程状态是随机的。将事件的观察值序列定义为所获取的被监控程序的LSM消息序列,表示为:O1、O2……OT。隐马尔可夫模型认为,还有一个状态序列隐藏在该观察值序列后,表示的是程序实际处的状态,表示为:O1、O2……OT。首先假设进程的状态构成马尔可夫链,即:P(Qi| Qi-1……Q1)= P(Qi| Qi-1),并且进程的状态与具体时间无关,即进程具有平稳性:P(Qi+1| Qi)=P(Qj+1| Qj),再假设监控的LSM消息序列是输出独立的,由此构建出离散化输出模型(一阶隐马尔可夫)。

以λ=(N,M,π,A,B)作为离散化输出模型(隐马尔可夫模型),对被检测的程序LSM变化进行表示,此LSM消息的集合即构成了观察值集合。A与B分别为状态转移概率矩阵与输出概率矩阵N表示状态的个数,M表示观察值的个数,π表示初始状态概率矢量。

隐马尔可夫模型建立之后,尚需对模型进行离线训练。离线训练的内容是在先断开外部网络的情况下,对接受检测的信息系统提取LSM序列,结合Baum-Welch算法,对输出概率最大的隐马尔科夫模型参数进行获取,最终得到λ=(N,M,π,A,B)的隐马尔科夫模型,对模型进行离线训练的结果即为λ,其作用在于为下一步的在线检测提供基础。

研究对象为被检测程序的LSM短序列集。设置两个窗口:内窗口和外窗口。内窗口大小为k,通过其每次向后滑动一个LSM序列,将监控时获取的LSM序列分别进行处理,划分为更短的序列,然后对每个短序列的具体出现概率进行计算,计算出来的概率值ε设定为阈值,这样只要发觉计算出的概率小于阈值ε,则判定系统安全出现异常,提示把异常的短序列数存储下来。另外,再定义一个参数C来表示外滑动窗口的大小,并定义δ=T/C表示系统的异常程度,即异常的短序列在C个短序列中的比值。对C个短序列的异常度计算完毕之后,外窗口向后滑动一个短序列,实现对下一个异常度的计算,按照这种方法一直计算,假如发生了某一个异常度大于给定的阈值的情况免责判定程序出现异常,触发报警。

2 系统概要设计

2.1 主机入侵检测系统框架

当前,来自加州大学戴维斯分校安全实验室的公共入侵检测框架CIDF是较多被使用的结构模型。这种模型用以下几个组件对入侵检测系统进行构建,分别是:1)用E盒表示的事件产生器;2)用A盒表示的事件分析器;3)用R盒表示的响应单元;4)用D盒表示的事件数据库。

框架的具体操作流程为:事件数据被E盒通过探测器进行收集,收集到的事件传送至A盒进行处理分析;A、E盒分析之后的数据由D盒存储,此外D盒还提供额外的提供信息;A、E盒中的数据被R盒提取出来,并在D盒处产生响应。由通用入侵检测对象和通用入侵规范语言对A、E、D及R盒之间的通信提供支持。

2.2 入侵检测系统总体设计

入侵检测系统总体设计的参照来自CIDF框架,并将整个入侵检测系统划分为以下几个主要部分,分别是系统监控部分、用户与内核通信部分、隐马尔科夫事件分析部分以及结果响应与记录部分。下面的框图阐释出各个主要模块及其模块间的交互关系:

图1 入侵检测系统总体设计各个主要模块及其模块间的交互关系

从图1中也可以看出,入侵检测系统的整体操作过程是提取内核空间的LSM序列,向用户空间发送,进而被用户空间的隐马尔科夫事件分析模块处理和分析。

3 系统详细设计

3.1 LSM监控模块的设计

LSM监控模块主要完成以下功能:1)进入内核进行监控,对程序的LSM消息序列进行获取和存储;2)对LSM消息序列进行保存。本文采用了内核链表中的反包含技术对内核维护的LSM消息队列进行设计。

3.2 内核与用户空间通讯模块设计

双向数据传输具体做法是:调用netlink_kernel_create函数在LSM监控模块的初始化函数中创建一个netlink socket,应用程序在用户空间发来的请求和数据均可通过这个socket被内核程序所获取。使用标准的socketAPI在用户空间的应用程序创建的netlink socket,可以以一定的时间粒度,基于这个socket通过发送请求消息给内核,被内核netlink socket接收,对netlink_unicast函数进行调用来发送消息。截获LSM监控模块,并在队列中进行保存,向用户空间发送队列中的LSM数据,以此实现用户空间与内核空间的通讯。

3.3 隐马尔科夫事件分析模块的设计

图2显示了隐马尔科夫事件分析模块的程序流程:阈值,则向结果记录与响应模块发送警报,提示程序中出现了异常状况。因此,检测模式进行异常检测是通过对从内核得到的LSM序列进行持续的处理而实现的。对于训练模式而言,被监控程序的LSM序列来自用户空间通讯模块,并写入设计格式的文件,若训练的条件满足,则结合Baum-Welch算法来训练该序列,从而获取隐马尔科夫模型输出概率最大的参数。

3.4 系统调用监控模块的设计

为了实现系统调用数据与LSM数据源的直观的对比,采用syscallMonitor系统调用监控模块来实现对服务程序的系统调用序列的截获。具体的实现原理为:首先对自己的系统调用进行定义,然后替换操作系统中原来的系统调用。第一步是对要监控的系统调用函数进行定义,第二步是替换操作系统中原来的系统调用,在module的退出函数中向sys_call_table中赋值原系统调用函数地址,即可实现。

图2 隐马尔科夫事件分析模块的程序流程

该模块具备两种不同的工作方式,分别是检测模式和训练模式:对于检测模式而言,被监控程序的LSM序列来自内核空间和用户空间通讯模块。此LSM序列存储在队列结构中,为下一步的滑动窗口处理做好准备。如果发现异常度超过了

4 结束语

本文基于Linux平台,阐述了在LSM数据源的支持下构建隐马尔可夫模型的检测方法,并最终实现了在Linux平台下的异常检测原型系统。从而在异常检测方面降低误报率,取得更好的检测效果。下一步的工作是对异常事件的主动响应进行研究,提取被监控程序的大量LSM信息,同时监控多个程序,提高其检测效果和性能。

[1] 张响亮,王伟,管晓宏.基于隐马尔可夫模型的程序行为异常检测[J].西安交通大学学报,2005,39(10):1056-1059

[2] 王伟.多信息源的实时入侵检测方法研究[D].西安,西安交通大学,2005

猜你喜欢

数据源内核调用
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
核电项目物项调用管理的应用研究
微软发布新Edge浏览器预览版下载换装Chrome内核
系统虚拟化环境下客户机系统调用信息捕获与分析①
Web 大数据系统数据源选择*
基于不同网络数据源的期刊评价研究
基于真值发现的冲突数据源质量评价算法
WONCA研究论文摘要汇编
——初级保健晚期疾病患者照顾者的识别障碍:3个数据源的三角化测量