[发明专利]Windows环境下的主机入侵检测方法有效
| 申请号: | 200510043053.2 | 申请日: | 2005-08-04 |
| 公开(公告)号: | CN1731310A | 公开(公告)日: | 2006-02-08 |
| 发明(设计)人: | 管晓宏;冯力;孙杰;杨力伟 | 申请(专利权)人: | 西安交通大学 |
| 主分类号: | G06F1/00 | 分类号: | G06F1/00 |
| 代理公司: | 西安通大专利代理有限责任公司 | 代理人: | 徐文权 |
| 地址: | 710049*** | 国省代码: | 陕西;61 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | 本发明公开了一种Windows环境下的主机入侵检测方法,通过分析和建立Windows环境下的指定进程的多阶Native API一致模型和被检测进程产生的Native API序列之间的相关性来发现异常入侵。实际训练阶段,收集指定进程的Native APIs数据并存储在数据库中。对原始数据的分析包括一阶分析和二阶分析,分析和处理数据集合中的一阶和两阶状态转移来建立一阶和二阶模型;在测试阶段,指数迭代检测算法计算Native APIs对应的一阶和二阶Native APIs的正常指数值。在实际系统中,设计了报警提取方法,使在指数迭代检测率的不断变化波动中,对出现的异常事件进行准确地发现和提取,并进行正确的报警。 | ||
| 搜索关键词: | windows 环境 主机 入侵 检测 方法 | ||
【主权项】:
1、Windows环境下的主机入侵检测方法,其特征在于:1)系统数据Native APIs的获取当指定的进程每一次发起系统服务调用请求时,首先通过DriverEntry例程加载驱动设备进入Windows系统的内核,此驱动设备利用KeServiceDescriptorTable数据结构完成对系统服务分发表(System ServiceDispatch Table,SSDT)的访问与修改,并利用KeServiceDescriptorTable数据结构确定系统服务分配表的地址,系统先对系统原有的SSDT进行备份,其次,针对每个Native API配置相应的截获函数,并将这些函数的调用地址写入到原系统服务分发表中的“Function addr”项中,并一一对应,使函数指针指向截获函数,以此截获Windows主机的系统服务表来获取操作系统中指定进程产生的每个Native API的所有相关数据,这些数据包括Native API函数的名称、ID和参数长度信息,截获完这些信息后,退出截获过程,并返回到执行的被调用系统服务;2)通过获取到的Native APIs的数据信息对Windows操作系统中的进程建立正常的行为模型,并以此模型检测系统中的异常情况通过多阶一致模型建立方法对获取的Native APIs数据进行训练,通过二元组{Bk,Ok}在数据库中建立一阶和二阶一致模型,一阶一致模型通过二元组{Bk,Ok}来表示,其中Bk为Native APIsk在训练集合中的出现频率,Ok是一阶相关指数,通过对集合中的所有Bk按升序排列的位置大小,二元组{Bk,Ok}对训练集合TS(1)中的每一个Native API数据和被观察进程之间建立了一个关系映射表,通常,一阶一致模型可以使用如下表示:M1={(B1,O1),...,(Bk,Ok)} (1≤k≤n)同样,使用二元组{B(k-1)k,O(k-1)k}来表示二阶一致模型,建立训练集合TS(2)中的每一个Native API和被观察进程之间的一个关系映射表,M2={(B12,O12),...,(B(k-1)k,O(k-1)k)} (1≤k≤n);3)指数迭代检测方法(Exponential Recursive Detection Algorithm,ERDA),通过循环计算每个Native API对应的正常指数来计算它和被检测进程之间的相关程度,从而通过波动指数的变化来发现异常入侵,定义E(sk):在Native API序列中,当前Native API为sk时的进程行为的正常指数;E(sk-1,sk):在Native API序列中,当前Native API对为(sk-1,sk)时的进程行为的正常指数;G:当前序列相关性指数,用于度量当前长度的序列和一个正常行为进程之间的最大相关程度;f(sk):偏差函数,用于度量意外Native API给指定进程的正常行为带来影响的程度,也即,当sk-1的后一个Native APIsk不在一阶模型M1中时,通过计算前一个已经存在的Native APIIsk的加权相关性来度量这种情况对一个正常进程的影响,对f(fk)的定义如下:f ( s k ) = O ^ k * B ^ k ]]>
一阶相对势估计
一阶相关值估计算法描述Step 1 : E ( s 0 ) = e - 1 B 0 ′ ( s 0 ∈ T S ) ]]> (1-1)G = B 0 ′ ]]> Step k:sk-1∈M1,sk∈M1,(sk-1,sk)∈M2①E ( s k - 1 , s k ) = e - 1 G G = G + B k + B ( k - 1 ) k - - - - ( 1 - 2 ) ]]>s k - 1 ∉ M 1 , s k ∉ M 1 , ( s k - 1 , s k ) ∉ M 2 , k > b ]]> ②E ( s k - 1 , s k ) = e - 1 G B ^ k = B k - b , Q ^ k = Q k - b ( ∃ s k - b ∈ M 1 and ( k - b → min ) ) G = ( G - B ^ k ) * 0.5 ( G > B ^ k ) G * 0.5 ( G < B ^ k ) - - - - ( 1 - 3 ) ]]>s k - 1 ∈ M 1 , s k ∉ M 1 , ( s k - 1 , s k ) ∉ M 2 , k > b ]]> ③E ( s k - 1 , s k ) = e - 1 G B ^ k = B k - b , O ^ k = O k - b ( ∃ s k - b ∈ M 1 and ( k - b → min ) ) G = ( G + B ^ k - f ( s k ) ) * 0.5 ( G + B ^ k > f ( s k ) ) ( G + B ^ k ) * 0.5 ( G < B ^ k ) - - - - ( 1 - 4 ) ]]>s k - 1 ∈ M 1 , s k ∈ M 1 , ( s k - 1 , s k ) ∉ M 2 , k > b ]]> ④E ( s k - 1 , s k ) = e - 1 G B ^ k = B k - b , O ^ k = O k - b ( ∃ s k - b ∈ M 1 and ( k - b → min ) ) G = ( G + f ( s k ) ) * 0.5 - - - - ( 1 - 5 ) ]]>s k - 1 ∉ M 1 , s k ∈ M 1 , ( s k - 1 , s k ) ∉ M 2 , k > b ]]> ⑤E ( s k , s k ) = e - 1 G B ^ k = B k - b , O ^ k = O k - b ( ∃ s k - b ∈ M 1 and ( k - b → min ) ) G = 0.5 G + f ( s k ) - - - - ( 1 - 6 ) ]]> 如上公式(1-1)到(1-6)所示,指数迭代检测方法循环迭代计算每个出现的Native API和Native API对的正常指数,如(1-2)所示,在初始步时,通过查找初始Native API在一阶一致模型中的一阶势比值,并将其作为初始化值对E(s0)进行初始化,从第二阶开始直到进程结束,则通过调节当前Native API对(sk-1,sk)的相关性指数和权重Ok来计算其对应的正常指数E(sk-1,sk),从真实环境的实验测试中,分别考虑sk-1和sk是否属于一阶一致模型M1以及(sk-1,sk)是否属于二阶一致模型M2的五种情况即(1-2)~(1-6),(1-2)式说明如果sk和sk-1属于一阶一致模型M1,而且同时(sk-1,sk)属于二阶一致模型M2,则通过循环叠加一阶和二阶势相关比值计算相关性指数G。,一旦sk-1、sk以及(sk-1,sk)和一阶一致模型和二阶一致模型M1和M2之间没有任何映射关系,通过公式(1-3)到(1-6)描述的四种情况对其对应的正常指数进行计算,如公式(1-3)到(1-6)所示,当s k - 1 ∉ M 1 , s k ∉ M 1 ]]> 且
时,说明当前的sk-1和sk不属于一阶一致模型M1,而且同时(sk-1,sk)也不属于二阶一致模型M2,它们和多阶一致模型都不一致,因此当前被观察序列(sk-1,sk)和多阶模型的相关性变很小,因此把sk-b对应的一阶相对势作为sk的一阶相对势估计
(其中sk-b为离sk最近的前b个和一阶一致模型M1一致的Native API),如果当前的相关性指数G大于
则通过相关性指数G减去
再乘以相对下降值0.5做为当前被观察序列(sk-1,sk)对应的相关性指数;而如果当前的相关性指数G小于
则说明G较小,则被观察序列(sk-1,sk)的当前总的相关值G仅有以前的一半,其中选择sk-b对应的一阶相对势Bk-b作为sk的一阶相对势估计
当sk和一阶一致模型M1不一致时,则离sk最近的前b个和一阶一致模型M1一致的Native API sk-b的一阶相对势和sk一阶相对势是相等的,但对系统的影响是不同的;4)通过提出的报警提取算法,使对不断变化波动的指数迭代检测率中出现的异常事件进行准确地发现和提取,并进行正确的报警,定义如下的波动指数FijF ij = Σ i = k k + WL E ( s i , s i + 1 ) - Σ j = k - WL k E ( s j , s j + 1 ) ( WL ≤ i ≤ n - WL - 1 ) - - - - ( 1 - 7 ) ]]> 其中WL为滑动窗口长度;从波动指数Fij的定义可以看出,当i窗口的指数迭代检测率之和减去j窗口的指数迭代检测之和,就为i和j窗口之间的波动,则有以下三种情况:F ij = F ij > 0 F ij = 0 F ij < 0 - - - - ( 1 - 8 ) ]]> 其中当Fij>0时,i窗口的指数迭代检测率大于j窗口的指数迭代检测率,说明指数迭代检测值向上波动,系统趋向于正常;当Fij<0时,i窗口的指数迭代检测率小于j窗口的指数迭代检测率,说明指数迭代检测值向下波动,系统趋向于异常;当Fij=0时,说明i窗口和j窗口之间没有波动,系统状况不变;滑动窗口长度WL:F ij = Σ i = k k + WL E ( s i , s i - 1 ) - Σ j = k - WL k E ( s j , s j - 1 ) ]]> 达到最大,也即是:WL = WL ( i , j ) ( iff ( Σ i = k k + WL E ( s i , s i + 1 ) - Σ j = k - WL k E ( s j , s j + 1 ) → max ) - - - - ( 1 - 9 ) ]]> 取WL=30做为滑动窗口长度来进行测量,既能使得报警量小,又可以使得几乎没有漏报率;5)对出现了指数迭代检测值较小的进程,采取禁止当前的被观察进程或其线程的行为,采用PostThreadMessage()或者PostMessage()函数给指定的线程发送WM_QUIT或WM_DESTORY消息来强行中止恶意线程。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/200510043053.2/,转载请声明来源钻瓜专利网。





