入侵检测基本概念检测算法基础

入侵检测基本概念与检测算法基础

本文主要分为几个部分

1. 入侵检测基本概念

2. 入侵检测算法的理论研究发展

3.入侵检测算法的一种实现尝试

1. 入侵检测基本概念

入侵检测是一种通过收集和分析被保护系统的信息,从而发现入侵的技术。它的主要功能是对网络和计算机系统进行实时监控,发现和识别系统中的入侵行为或企图,给出入侵警报

入侵检测攻防对抗的观点

1. 要想完全避免安全事件的发生并不太现实,网络安全人员需要做的是尽力发现和察觉入侵及入侵企图(即具有高度的异常敏感性>,从长远的角度来看,安全的问题本来就是一个互相攻防对抗的过程。

1> 安全的攻防对抗没有一招解决所有问题的技术

2> 好的攻防思路是部署一种尽可能敏感的攻击事件捕获机制,当发生了已知、或者未知的攻击的事件时,我们能第一时间获取到关于本次攻击的尽可能多的元数据(强大的入侵检测机制>

3> 针对发生的攻击,采取针对性的防御,针对性地防御是最有效的方法(对CMS的漏洞进行针对性的代码修复、为系统的某个CVE漏洞打上补丁>

4> 在针对性防御的基础上,我们对一些解决方案进行归纳、总结,试图找到一种底层性的、归类性的安全解决方案(回想历史上微软的DEP、ASLR、SAFESEH技术>

2. 采取有效的措施来堵塞漏洞和修复系统

入侵检测的定义及分类

1. 定义:

1> 将入侵企图或威胁定义为未经授权蓄意尝试访问信息(SQL注入、横向/纵向越权访问、非法下载数据库/日志信息>、窜改信息(挂黑链、SQL注入>,使系统不可靠或不能使用(种植后门木马、webshell>

2> 入侵是指有关试图破坏资源的完整性、机密性及可用性的活动集合(安全的三大定义>

3> 从分类角度指出入侵包括:

3.1> 尝试性闯入(扫描行为>

3.2> 伪装攻击(代理、跳板攻击>

3.3> 安全控制系统渗透

3.4> 泄漏

3.5> 拒绝服务(DDOS>

3.6> 恶意使用(僵尸网络、rootkit后门>

2. 分类:

入侵检测技术主要分成两大类型

1> 异常入侵检测

能够根据"异常行为"和"使用计算机资源情况"检测出来的入侵,异常入侵检测试图用"定量方式"描述可接受的行为特征,以区分非正常的、潜在的入侵性行。

整个流程基本如下:

1.1> 建立威胁模型,包括:

1.1.1> 确定一个算法

1.1.2> 监控哪些事件的发生

1.1.3> 需要获取哪些数据

1.1.4> 对获取到的数据进行怎样的计算

1.1.5> 计算的结果的上线阈值是多少

1.1.6> 当超过这个阈值的时候,需要采取什么操作,是直接报警、还是采取权重打分的机制

1.2> 进行行为监控,并捕获数据

1.3> 对捕获的数据进行异步、或实时计算

1.4> 根据计算的结果采取相应的预设动作

2> 误用入侵检测

误用检测是指: 根据己知的攻击方法,预先定义入侵特征,通过判断这此特征是否出现来完成检测任务。误用检测中使用的检测技术主要有:模式匹配、专家系统、状态转移等,其中模式匹配原理简单,可扩展性好,而且最为常用。据统计,现在大约95%的入侵检测都是特征匹配的入侵检测

3. "异常入侵检测"和"误用入侵检测"的异同点

1> 误用入侵检测根据己知的攻击方法,预先定义入侵特征,通过判断这此特征是否出现来完成检测任务

2> 异常入侵检测是检查出与正常行为相违背的行为,异常入侵检测的核心就是对合法的行为和可疑的行为进行二值逻辑区分

我个人觉得

"误用入侵检测"更多的是一种针对性防御,根据已知的POC、EXP攻击特征,指定针对性的匹配规则,例如:

1> W AF对WEB漏洞的URL特征建立的阻断规则库

2> 网络防火墙对DDOS等攻击的流量模式建立规则库

3> 杀软对已知病毒、shellcode的二进制特征、API调用特征建立规则库

而"异常入侵检测"更侧重于对已知、未知的异常行为进行捕获、判断,本文重点学习"异常入侵检测"

异常入侵检测方法

异常入侵检测的主要前提条件是将"入侵性活动"作为"异常活动"的子集。理想状况是异常活动集与入侵性活动集等同,这样,若能检测所有的异常活动,则可检测所有的入侵性活动。但是,入侵性活动并不总是与异常活动相符合,它们之间存在以下几种关系

1> 异常且入侵性(黑客攻击>

2> 异常但非入侵(误报>

3> 非异常但入侵(漏报>

4> 非异常且非入侵(正常业务操作,选择忽略>

异常入侵要解决的问题就是构造异常活动集,并从中发现入侵性活动子集

异常入侵检测方法依赖于异常模型的建立,不同模型构成不同的检测方法。异常检测

就是通过观测到的一组"测量值偏离度"来"预测用户行为的变化",然后作出决策判断的检测技术,对此,学术界和企业界都提出了很多优秀的异常模型,在不同的场景下不同的异常模型的效果是打不相同的

我认为本质上来说,这也就一个误报、漏报的问题

1> 我们可以通过文件行为监控,捕获所有的磁盘文件操作行为(windows、;linux都提供了相应的callback回调API>

2> 通过逆向机器学习、行为建模、阈值判断从所有的行为中过滤出:

2.1> 用户正常操作

2.1.1> 文件新建

2.1.1.1> 管理员通过FTP、SSH、RDP登录后在WEB根目录下进行单个文件的新建

2.1.1.2> 管理员在进行文件单个、批量复制(复制文件从操作系统的层面上来看还是一个文件新建的行为>

2.1.1.3> RAR压缩包解压(RAR压缩包解压只是一种软件机制,在操作系统层面还是在进行文件的新建>

2.1.2> 文件修改

2.1.2.1> 管理员通过FTP、SSH、RDP登录后在WEB根目录下进行单个文件的编辑并修改(注意: 从操作系统层面来看,只有打开文件并编辑保存之后才能算文件修改,否则只是单纯的文件访问行为>

2.2> 网站正常运行行为

2.2.1> 文件创建

网站的WEB系统在正常的运行过程中会有一些文件创建的行为产生

2.2.1.1> cache临时缓存文件

2.2.1.2> 预编译模板高速缓存

2.2.1.3> 网站配置信息settings高速缓存

2.2.1.4> log日志文件、error_log出错日志文件

2.2.1.5> 文件上传控件(fck、kindeditor>导致的图片、rar附件上传

2.2.1.6> WEB系统为了并发串行访问的需求生成临时锁文件(.lock>

2.2.2> 文件修改

2.2.2.1> 网站配置信息settings高速缓存的修改

2.2.2.2> 管理员进行网站模板编辑

2.3> 黑客在尝试进行攻击

2.3.1> 文件创建

2.3.1.1> 黑客通过注入拿到了网站后台,通过后台可以上传文件的地方进行webshell 上传(本质上是文件创建行为>

2.3.1.2> 黑客通过WEB漏洞的代码执行直接生成文件(。 ?>>

2.3.1.3> 黑客通过注入拿到了网站后台,通过SQL执行接口进行文件写入(select "shell...shell" into outfile "path">

2.3.1.4> 黑客已经拿到了RDP、SSH、FTP登录口令,以正常管理员的身份进行登录,并写webshell

2.3.1.5> 黑客通过老的webshell上传新的webshell

2.3.2> 文件修改

2.3.2.1> 黑客通过注入拿到了网站后台,对模板文件、配置文件进行修改,在其中插入webshell(这类文件一般都是.php>

2.3.2.2> 黑客通过老的webshell对网站的正常文件进行编辑

标准的入侵检测测试数据集KDD’99 Data Set,KDD测试数据集的这种思路我觉得非常好,有时候,通过这种集中式的数据观察、对数据进行聚类、分段,能得到很多对入侵行为、入侵模式新的观点。我们需要建立一套磁盘文件行为的规范化表示,并捕获一段时间内的记录,建立一个测试数据集,为我们之后作训练作准备

2. 入侵检测算法的理论研究发展

我们前面提到一个关键概念:

异常入侵检测方法依赖于"异常模型"的建立,不同模型构成不同的"检测方法"。异常检测就是通过观测到的一组"测量值偏离度"来"预测用户行为的变化",然后作出决策判断的检测技术,

下面我们逐步学习几种在学术界提出的关于异常模型的思想概念

0x1: 基于特征选择异常检测方法

"基于特征选择异常检测方法"是通过从一组度量(例如文件创建时间、文件大小、时间/事件孤立度、是否包含敏感关键字>中挑选能检测出入侵的度量构成向量(或者子集>来准确地预测(或分类>已检测到的异常行为。

这种技术的难点有以下几个:

1> "异常活动"和"入侵活动"之间难于作出判断(回想之前我们提到的"入侵性活动"和"异常活动"的关系>

2> 进行二值分类的特征值(阈值>的选取是否合理、符合实际、达到准确效果

为此,一个度量集(特征向量>对各种各样的入侵类型不可能是足够的。

在文献(网络安全入侵检测研究综述.pdf>中提到使用"学习分类器方案生成遗传交叉算子和基因突变算子",除去降低预测入侵的度量子集,而采用遗传算子产生更强的度量自己取代。

这里小瀚个人觉得对于可疑磁盘文件操作行为的入侵分类,我们需要着重考虑的问题有两个

1> 度量子集的选取:

和遗传优化算法相比,更加利于工程实践、更贴近实际的做法是将安全研究员的经验进行固化,安全人员根据服务器渗透、入侵、CMS漏洞的实际研究经验,选择在正常业务操作、和黑客攻击中所表现出的所有度量维度。以此来建立入侵检测度量子集。

2> 测量值偏移度(异常阈值>的确定:

比起度量子集的选择,测量值偏移度的计算则更加棘手,即使采用安全人员的安全知识来进行确定也具有很大的主观性、随机性的制约。很难保证确定的阈值的正确性,因为在不同的业务场景(WEB系统>下,超过怎样的值算作入侵,不是很容易用经验进行确定,在这方面。在这个问题上,可以考虑引入例如机器学习、遗传算法这类的反馈机制,不断通过,通过一些学习的过程来确定最好的阈值(所以提到引入KDD的这种思想,建立一个文件操作行为的KDD数据集,进行数据分析>

0x2: 基于贝叶斯推理的异常检测方法

基于贝叶斯推理的异常检测方法是通过在任意给定的时刻测量"A1,A2,A3...An"变量值,推理判断系统是否有入侵事件发生。

其中每个变量表示系统不同方面的特征:

1> 如磁盘I/0的活动数量

2> 或者系统中页面出错的数量

下面是数学的模型定义:

1> 假定Ai变量有两个值: 1表示异常、0表示正常

2> I表示系统当前遭受入侵攻击。每个异常变量Ai的"异常可靠性"表示为: P(Ai=1/I>和"敏感性"表示为: 和P(Ai=1/^I>

因此,根据各种异常测量的值、入侵的先验概率及入侵发生时每种测量到的异常概率,能够检测判断入侵的概率。

但是,为了检测的准确性,还必须考虑各个测量Ai之间的独立性。一种方法是通过相关性分析,确定各个异常变量与入侵的关系

0x3: 基于模式预测的异常检测方法

"基于模式预测"的异常检测方法的假设条件是事件序列不是随机的而是遵循可辨别的模式。这种检测方法的特点是:

1> 考虑了事件的序列

2> 考虑了事件之间的相互联系

Teng和Chen给出了"基于时间的推理方法",利用时间规则来识别用户行为正常模式的特征。

Classfication and detection of computer intrusions

通过归纳学习产生这些规则集,并能动态地修改系统中这些规则,使之具有较高效的预测性、准确性、和可信度,如果规则大部分时间是正确的,并能够成功地运用预测所观察到的数据,那么规则就具有高可信度,TIM给出了一条产生规则:

(E1->E2->E3>->(E4=95%、E5=5%>

其中E1~E5表示安全事件

这条规则表明:

如果前面观测到事件E1->E2->E3这样一个事件链模式,则后面观测到E4事件的概率是95%,而E5事件的概率是5%

根据观察到的"用户行为"、或者"机器行为"归纳出一套规则规则集来构成用户的轮廓框架。

1> 如果观察到的事件序列匹配规则的左边,而后续事件"显著偏离"规则预测到的事件,那么系统就可以检测出这种偏离,这就表明用户操作是异常的,否则相反这种技术的优点有:

1> 能较好地处理变化多样的用户行为,并具有很强的时序模式

2> 能够集中考察少数几个相关的安全事件,而不是关注可疑的整个会话过程

3> 对发现检测系统遭受攻击,具有良好的灵敏度

4> 根据规则的蕴含语义,在系统学习阶段,能够更容易地辨别出欺骗着训练系统的企图

0x4: 基于数据采掘的异常检测方法

除了依靠安全人员的经验固化来建立规则、模式。还有一种思路是将数据挖掘技术应用到入侵检测研究领域中,从审计数据或数据流中提取感兴趣的知识,这些知识是:

1> 隐含的

2> 事先未知的

3> 潜在的有用信息

提取的知识表示为:

1> 概念

2> 规则

3> 规律

4> 模式等形式

并可用这些知识去检测异常入侵和已知的入侵。基于数据挖掘的异常检测方法目前已有现成的KDD算法可疑借用,这种方法的优点是可适应处理大量数据的情况0x5: 适合于入侵检测的分步特征选择算法

入侵检测是一种通过收集和分析被保护系统的信息,从而发现入侵的技术。它的主要功能是对网络和计算机系统进行实时监控,发现和识别系统中的入侵行为或企图,给出入侵警报。

我们知道,入侵行为的特征是由特征来刻画的,一般情况下,只有"特征向量"中包含足够多的类别信息,才能通过分类器实现正确分类: 识别正常、或入侵。

而问题就在于: 怎么证明特征向量中是否包含足够的类别信息是很难确定的,为此,为了提高识别率,系统总是最大限度地提取特征信息,使得特征维数增大。但是,维数的增大、数据量的提高必然导致入侵检测系统处理的速度下降,计算资源消耗增大。

同时还有另一方面,不同的特征对检测的有效性贡献也不同(即它们的权值不同>,如果对它们相同对待就会导致算法效率下降,因此,根据特征的贡献度权值分配不同的资源对入侵检测算法来说是一个值得考虑的方面

因此,特征选择算法的任务主要是删除两类特征:

1> 无用特征

2> 冗余特征

传统入侵检测的特征选择算法是以对一组测试数据检测的正确性、或时间作为度量准则,这种方法有一定的局限性: 即使测试数据的统计特性与实际特性相同,它也是针对特定的检测方法,缺乏普遍性

抛开检测算法,从数据统计特性出发,文献提出了一种"基于互信息的分步特征选择算法",首先删除无用特征,然后再删除冗余特征,减少了删除冗余特征的计算量0x6: 模式匹配算法在入侵检测中的应用

我们知道,入侵检测分为"误用检测"和"异常检测",之前学习的都是"异常检测",接下来继续学习"误用检测",而误用检测中使用的检测技术中占大多数的主要是模式匹配(也就是所谓的正则匹配>

模式匹配算法性能的好坏直接影响到入侵检测系统的效率。随着网络传输速度的大幅度提高,入侵检测系统需要处理的数据量越来越大,如果模式匹配算法来不及处理这些实时的大量的数据包,必然会丢弃部分数据包,而这些被丢弃的数据包中很可能就包含有入侵信息,从而造成漏报

我们接下来学习几种用于入侵检测的模式匹配算法,包括:

1> 单模式匹配算法

模式匹配:是指在给定长度为n的目标串T=T1T2…Tn中查找长度为m的模式串P=P1P2…Pm的首次出现或多次出现的过程。这里Ti(1≤i≤n>,Pj(1≤j≤m>∈∑(字符集>,若P在T中出现1次或多次,则称匹配成功,否则称匹配失败。单模式匹配算法:在目标串中1次只能对1个模式串进行匹配的算法

2> 多模式匹配算法

在目标串中可同时对多个模式串进行匹配的算法(即多模正则匹配> 单模匹配算法、多模匹配算法是一种思想,它们有很多具体的算法实现,下面逐一学习

1. 单模匹配算法

1.1 Brute—Force算法(BF算法>

https://www.360docs.net/doc/7415052383.html,/u013715779/article/details/19551631

在BF算法的目标串和模式串的字符比较中,只要有1个字符不相等,而不管前面已有多少个字符相等,就需要把目标串T回退,下次比较时目标串T只后移1个字符。虽然算法简单,但效率低下

从这个缺点出发,可以明白匹配算法的优化方向

高效的模式匹配算法都是设法增大不匹配时目标串T或模式串P之间的偏移量,以减少总的比较次数(即减小时间复杂度>

1.2 KMP算法

1970年,S.A.Cook从理论上证明了一维模式匹配问题可以在O(m+2>时间内解决。D.E.Knuth,V.R.Pratt和T.H.Morris在BF算法的基础上提出了一种快速模式匹配算法,称为KMP算法,该算法消除了BF算法的目标串指针在相当多个字符比较相等后,只要有1个字符比较不等便需要回溯的缺点,使算法的效率得到了大幅度提高,时间复杂度达到最理想的O(m+n>,空间复杂度是O(m>

1.3 BM算法

相对于BF算法,KMP算法虽然消除了主串指针的回溯,在不匹配时能使模式串右滑若干位,但由上述next函数可知:右滑的最大距离不会超过1趟匹配操作所进了的比较次数j,原因在于KMP算法的匹配操作是从左到右进行的。受到KMP算法的启发,R.S.Boyer和J.S.Moore提出一种新的快速字符串匹配算法一BM算法。

1.4 RK算法

Karp和Rabin在1981年提出来的RK算法利用了Hash方法和素数理论。

RK算法的思想是:

1> 首先定义一个Hash函数,用该函数计算出模式串P的Hash函数值

2> 再计算出目标串T中所有长度为m的子串的Hash函数值

3> 然后用相应的Hash函数值进行比较。当出现Hash冲突时,再进行相应字符串的比较

4> 当构造Hash函数的素数选择得合理,Hash冲突出现的概率就可以做到很小。

https://www.360docs.net/doc/7415052383.html,/technic/77.html

如果Hash冲突不发生,即不再需要额外的字符匹配,RK算法的时间复杂度是O(m+n>;若考虑字符匹配,则RK算法的时间复杂度是0(mn>。在实际应用中,可设法取适当大的素数q,使得mod q仍可执行并且Hash冲突又几乎不发生,从而使得KR算法的实际运行时间只需O(m+n>。

RK算法采用了与KMP和BF算法不同的思路,尽量减少字符之间的比较次数,从而达到提高效率的目的

2. 多模式匹配算法

与单模式匹配算法相比,多模式匹配算法的优势在于一趟遍历可以对多个模式进行匹配,从而大大提高了匹配效率。对于单模式匹配算法,如果要匹配多个模式,那么有几个模式就需要几趟遍历。当然多模式匹配算法也适用于单模式的情况。

下面学习一下多模匹配的相关算法

相关文档
最新文档