发明内容
本发明的目的在于克服上述现有技术的缺点,提供了一种通过对Windows内核级系统调用函数Native API进行获取,并建立每个进程对应的多阶一致模型(Multi-Steps Native APIs Consistency Model,MSNACM)在实时检测中通过我指数迭代检测方法对各种入侵行为进行检测和报警的Windows环境下的主机入侵检测方法。
为达到上述目的,本发明采用的技术方案是:
1)系统数据Native APIs的获取
当指定的进程每一次发起系统服务调用请求时,首先通过DriverEntry例程加载驱动设备进入Windows系统的内核,此驱动设备利用KeServiceDescriptorTable数据结构完成对系统服务分发表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数据和被观察进程之间建立了一个关系映射表,通常,一阶一致模型可以使用如下表示,其中n表示原始训练集合Ts (1)中包含的整个Native APIs的总数量:
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)指数迭代检测方法ERDA,通过循环计算每个Native API对应的正常指数来计算它和被检测进程之间的相关程度,从而通过波动指数的变化来发现异常入侵,
定义
E(sk):在NativeAPI序列中,当前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 APIsk的加权相关性来度量这种情况对一个正常进程的影响,对f(sk)的定义如下:
一阶相关值估计
算法描述
Step 1:
G=B0′
·Step k:
sk-1∈M1,sk∈M1,(sk-1,sk)∈M2
①
sk-1M1,skM1,(sk-1,sk)M2,k>b
②
sk-1∈M1,skM1,(sk-1,sk)M2,k>b
③
sk-1∈M1,sk∈M1,(sk-1,sk)M2,k>b
④
sk-1M1,sk∈M1,(sk-1,sk)M2,k>b
⑤
如上公式(1-1)到(1-6)所示,指数迭代检测方法循环迭代计算每个出现的Native API和Native API对的正常指数,如(1-1)所示,在初始步时,通过查找初始Native API在一阶一致模型中的一阶相对势比值,并将其作为初始化值对E(s
0)进行初始化,从第二阶开始直到进程结束,则通过调节当前Native API对(s
k-1,s
k)的相关性指数和权重O
k来计算其对应的正常指数E(s
k-1,s
k),从真实环境的实验测试中,分别考虑s
k-1和s
k是否属于一阶一致模型M
1以及(s
k-1,s
k)是否属于二阶一致模型M
2的五种情况即(1-2)~(1-6),(1-2)式说明如果s
k和s
k-1属于一阶一致模型M
1,而且同时(s
k-1,s
k)属于二阶一致模型M
2,则通过循环叠加一阶相对势比值B
k和二阶相对势比值B
(k-1)k计算相关性指数G,一旦s
k-1、s
k以及(s
k-1,s
k)和一阶一致模型和二阶一致模型M
1和M
2之间没有任何映射关系,通过公式(1-3)到(1-6)描述的四种情况对其对应的正常指数进行计算,如公式(1-3)到(1-6)所示,当s
k-1M
1,s
kM
1且(s
k-1,s
k)M
2时,说明当前的s
k-1和s
k不属于一阶一致模型M
1,而且同时(s
k-1,s
k)也不属于二阶一致模型M
2,它们和多阶一致模型都不一致,因此当前被观察序列(s
k-1,s
k)和多阶模型的相关性就变得很小,故而把s
k-b对应的一阶相对势作为s
k的一阶相对势估计
其中s
k-b为离s
k最近的前b个和一阶一致模型M
1一致的Native API,如果当前的相关性指数G大于
则通过相关性指数G减去
再乘以相对下降值0.5做为当前被观察序列(s
k-1,s
k)对应的相关性指数;而如果当前的相关性指数G小于
则说明G较小,则被观察序列(s
k-1,s
k)的当前总的相关值G仅有以前的一半,其中选择s
k-b对应的一阶相对势B
k-b作为s
k的一阶相对势估计
当s
k和一阶一致模型M
1不一致时,则离s
k最近的前b个和一阶一致模型M
1一致的Native APIs
k-b的一阶相对势和s
k一阶相对势是相等的,但对系统的影响是不同的;
4)通过提出的报警提取算法,使对不断变化波动的指数迭代检测率中出现的异常事件进行准确地发现和提取,并进行正确的报警,定义如下的波动指数Fij
其中WL为滑动窗口长度;
从波动指数Fij的定义可以看出,当i窗口的指数迭代检测率之和减去j窗口的指数迭代检测率之和,就为i和j窗口之间的波动,则有以下三种情况:
其中当Fij>0时,i窗口的指数迭代检测率大于j窗口的指数迭代检测率,说明指数迭代检测值向上波动,系统趋向于正常;当Fij<0时,i窗口的指数迭代检测率小于j窗口的指数迭代检测率,说明指数迭代检测值向下波动,系统趋向于异常;当Fij=0时,说明i窗口和j窗口之间没有波动,系统状况不变;
滑动窗口长度WL:
达到最大,也即是:
取WL=30做为滑动窗口长度来进行测量,既能使得报警量小,又可以使得几乎没有漏报率;
5)对出现了较小波动指数的进程,采取禁止当前的被观察进程或其线程的行为,采用PostThreadMessage()或者PostMessage()函数给指定的线程发送WM_QUIT或WM_DESTORY消息来强行中止恶意线程。
本发明是基于多阶Native APIs一致模型的指数迭代检测方法,通过分析和建立Windows环境下的指定进程的多阶Native API一致模型和被检测进程产生的Native API序列之间的相关性来发现异常入侵。
具体实施方式
下面结合附图对本发明作进一阶详细说明。
参见图1,当用户模式下的应用程序即Application被运行时,它将调用动态链接库Kernel32.dll中的封装函数Win32 API,在动态链接库Kemel32.dll中的封装函数Win32 API又会调用动态链接库Ntdll.dll中封装的函数来真正调用对应的系统服务,然后调用函数KiSystemSerivce()执行中断INT 2E指令把处理器CPU转向内核模式并执行在中断描述表中指定的句柄。这个句柄将把参数从用户模式栈复制到内核模式栈,并且将寄存器EDX的内容指向传入参数的栈帧基址。当用户模式空间的应用程序中调用的封装函数Win32 API在内核模式空间的系统服务分配表System Service Dispatch Table中查找到对应的系统服务并执行时,由于原来的系统服务分配表已经被本发明的系统服务指针SSDT newpointers所替代,因此本发明将在这里进行截获,将系统调用转向本发明的截获系统服务Native API,本发明在此对截获的数据进行审计,这些审计数据包括被截获的系统服务Native API的函数的名称、ID和参数长度信息。执行完被截获的系统服务Native AP并获取到相应的信息后,退出截获过程,并返回到真正要执行的原始Native API,然后处理器CPU将执行被调用的原始Native API序列(如创建文件系统服务NtCreateFile,读取文件系统服务NtReadfile,…,关闭文件系统服务NtClose),以完成真正被调用的指定功能。
当指定的进程每一次发起系统服务调用请求时,都会进入上面的截获过程。运行一个用户空间的应用程序会产生大量的Native API来完成指定的功能,这些Native API会形成一条序列。当进程在正常情况下运行时产生的Native API序列都具有相对稳定的一个Native API序列。通过Native APIs的信息对Windows操作系统的正常情况建立正常模型,并以此模型来检测系统中的异常情况。Native API也是以序列形成出现的,因此本发明可以通过对正常状况下的Native API序列进行训练,并建立相应的正常模型,然后用此模型进行检测。为了有效地检测异常入侵,本发明设计了一个名为多阶Native APIs一致模型(Multi-Steps Consistency Model,MSCM)。实现这个模型分为两个阶段:训练和测试阶段。在训练阶段中,收集指定进程的Native APIs数据并存储在数据库中。对原始数据的分析包括一阶分析和二阶分析,这主要分析和处理数据集合中的一阶和两阶状态转移来建立一阶和二阶模型;在测试阶段,多阶Native APIs一致模型采用了指数迭代检测算法来计算针对一阶和二阶模型的一阶和二阶Native APIs的正常指数值。
在介绍多阶Native APIs一致模型之前,本发明对其中涉及到的一些数据进行描述。本发明定义一阶原始训练集合为
其中sk表示观察进程调用的指定的Native API。它直接从正在运行的进程中截获到的,没有经过任何处理。因此,在TS中一些Native API将会重复出现。因此,指定Native API的重复出现的次数与原始训练集合TS的包含的整个Native API数量之比为:
其中|sk|=m是Native API sk在训练集合TS中的重复次数,也即是占sk在TS (1)中的势。本发明称Bk为一阶相对势比值。
同样,二阶原始训练数据集合
的二阶相对势比值为:
其中|(sk-1,sk)|=m(k-1)k是Native API对(sk-1,sk)在二阶原始训练数据集合TS′中的重复次数。
多阶一致模型包括一阶和二阶一致模型。它们能够度量指定的Native API序列和被观察对象之间相关程度。一阶一致模型可以通过二元组{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)
通常情况下,为了识别一个序列对象,总是在被观察对象有更多的节点出现的时候,才能更准确地确定被识别对象。通过分析Native API和被检测进程的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(sk)的定义如下:
一阶相对势估计
一阶相关值估计
算法描述
Step 1:
G=B0′
Step k:
sk-1∈M1,sk∈M1,(sk-1,sk)∈M2
①
sk-1M1,skM1,(sk-1,sk)M2,k>b
②
sk-1∈M1,skM1,(sk-1,sk)M2,k>b
③
sk-1∈M1,sk∈M1,(sk-1,sk)M2,k>b
④
sk-1M1,sk∈M1,(sk-1,sk)M2,k>b
⑤
如上所描述,本发明提出了指数迭代检测算法来循环迭代计算每个出现的Native API和NatiVe API对的正常指数。如(1-2)所示,在初始步时,通过查找初始Native API在一阶一致模型中的一阶势比值,并将其作为初始化值对E(s
0)进行初始化。从第二阶开始直到进程结束,可以通过调节当前Native API对(s
k-1,s
k)的相关性指数和权重。O
k来计算其对应的正常指数E(s
k-1,s
k)。从真实环境的实验测试中,分别还要考虑s
k-1和s
k是否属于M
1以及(S
k-1,s
k)是否属于M
2的五种情况,对应(1-2)到(1-6)所示。 (1-2)式说明如果s
k和s
k-1属于M
1,而且同时(s
k-1,s
k)属于M
2,则通过循环叠加一阶和二阶势相关比值来计算相关性指数G。一旦s
k-1、s
k以及(S
k-1,s
k)和一阶和二阶一致模型M
1和M
2之间没有任何映射关系,通过其它四种情况对其对应的正常指数进行计算,如公式(1-3)到(1-6)所示。当s
k-1M
1,s
kM
1且(s
k-1,s
k)M
2时,说明当前的s
k-1和s
k不属于M
1,而且同时(s
k-1,s
k)也不属于M
2,它们和多阶一致模型都不一致,因此当前被观察序列(S
k-1,s
k)和多阶模型的相关性变得很小,因此把s
k-b对应的一阶相对势作为s
k的一阶相对势估计
(其中s
k-b为离s
k最近的前b个和M
1一致的Native API),如果当前的相关性指数G大于
则通过指数G减去
再乘以相对下降值0.5做为当前被观察序列(s
k-1,s
k)对应的相关性指数;而如果当前的相关性指数G小于
,则说明G较小,认为被观察序列(s
k-1,s
k)的但前总体相关值仅有以前的一半。其中选择s
k-b对应的一阶相对势B
k-b作为s
k的一阶相对势估计
是因为基于这样的假设:当s
k和M
1不一致时,认为离s
k最近的前b个和M
1一致的Native APIs
k-b的一阶相对势和占s
k一阶相对势是相等的,但对系统的影响是不同的。我们认为这样的假设在现实环境下有其合理性。
在使用Native APIs信息来检测入侵的实验中,发现当有真正的入侵发生的时候,E(sk,sl)的值波动非常大,但并不是仅仅单调下降到某个最低点,而是在整个过程中出现较多的上下起伏波动。这个原因是因为异常的入侵所生成的Native APIs序列
中的一阶APIsk和二阶API对{sk,sj)既有正常的,也有异常的,是由正常和异常调用混合构成的。对于这种由于正常NativeAPIs中混杂了许多异常API调用而造成的上下剧烈波动,本发明为了更好地测度这种情况,定义了波动指数来描述这个现象。通过波动指数本发明可以唯一地确定出是否真正有入侵发生,避免重复报警,从而产生正确的报警。本发明定义了如下的波动指数Fij
其中WL为滑动窗口长度。
从波动指数Fij的定义可以看出,当i窗口的指数迭代检测率之和减去j窗口的指数迭代检测之和,就为i和j窗口之间的波动,则以下三种情况:
其中当Fij>0时,i窗口的指数迭代检测率大于j窗口的指数迭代检测率,说明指数迭代检测值向上波动,系统趋向于正常;当Fij<0时,i窗口的指数迭代检测率小于j窗口的指数迭代检测率,说明指数迭代检测值向下波动,系统趋向于异常;当Fij=0时,说明i窗口和j窗口之间没有波动,系统状况不变。
滑动窗口长度的选择会最终影响报警的提取,如果滑动窗口取得太小,虽然每个窗口内的指数迭代检测率更接近在窗口中实际出现的Native APIs的指数迭代检测率的值,但由于窗口比较小,频繁的波动将造成大量的报警出现,从而影响本发明的观察;如果滑动窗口取的太大,虽然大大降低了报警的数量,使本发明的观察更为方便,但由于窗口太大,可能会使得窗口内的Native APIs的平均指数迭代检测率变得与实际的差别较大,从而会造成提取出错误的报警或漏掉重要的报警。选择合适的WL使得
达到最大,也即是:
通过大量的实验和观察,本发明取WL=30做为滑动窗口长度来进行测量,既能使得报警量小,又可以使得几乎没有漏报率。
报警提取的目的是使本发明在指数迭代检测率的不断变化中和波动中,对出现了异常的事件进行发现和提取,并进行正确的报警。这可以对一个时间段内出现的指数迭代检测率的变化进行分析,并正确地映射到特定的入侵事件,这一功能使得管理员可以很方便地观察和处理相关的报警。报警提取算法的基本原理如下:
在两次最小指数迭代检测率波动指数之间如果存在至少一次最大的指数迭代检测率波动指数,则认为在这两次最小指数迭代检测率波动指数之间存在一次异常入侵或攻击事件。也即:当F(i-l)(j-l)→ min和F(i+h)(j+k)→min时,如果存在至少一个Fij→ max,则认为在滑动窗口对(i-l)(j-l)和(i+h)(j+h)之间存在一次异常或攻击事件alh∈A发生。如下所示:
alh∈A{Fij→max}∩{(F(i-l)(j-l)→ min)∩(F(i+h)(j+h)→min)} (1-10)
其中A是提取出来报警的全集。
如图2所示,本发明对RPC/DCOM接口溢出漏洞的入侵事件进行检测的结果。在WindowsNT4.0、2000、XP和Server 2003系统中的某个DCOM接口存在缓冲区溢出漏洞,它允许远程攻击者通过提交畸形信息来实现在目标服务器上执行任意代码,Blast蠕虫就是针对这个漏洞发起攻击的。因此,在WindowsXP(SP0)的环境下,利用这个漏洞进行了两次真实的入侵,第一次发起了成功的入侵,第二次是失败的入侵。由于这个漏洞是发生在绑定于135端口上的特定进程。因此在实验中,对绑定在135端口的Svchost.exe进程进行了跟踪。首先,对Svchost.exe进程的正常行为建立多阶一致模型,整个训练过程大约持续了7天,涉及到操作系统的众多功能,如共享服务、邮件接收和发送、组件服务等操作,训练好的Svchost.exe进程的正常情况下的多阶一致模型也用于以后对其他攻击的检测。通过指数迭代检测算法进行检测,得到了如图2所示的检测效果。从第一个Native API出现到大约1000个左右,指数迭代检测值由0逐渐逼近1,这也说明目前出现的Native API和Native API对都和进程的正常状态多阶一致模型非常一致。系统在检测任何进程的初始过程中会出现指数迭代检测值逐步上升的现象,甚至趋于平稳的状态;当进程对应的Native APIs序列和进程的多阶Native APIs一致模型非常相关时,指数迭代检测值将不断上升,并保持相对稳定。指这个过程。在大约第1530个Native API出现时,指数迭代检测值非常急剧下降,从最大值0.987943很快就降到了最小值0.000002,并伴随着较大的波动。这个时候检测出了第一次成功的入侵。当第一次入侵过程结束后,指数迭代检测值随着和多阶一致模型一致的正常Native API的不断出现而逐渐逼近最大值1,恢复到原来的平稳状态,从而可以清楚地看到第一次入侵的异常情况。紧接着第二次发起的入侵攻击也被检测出来。第二次入侵攻击没有成功,但系统对应的指数迭代检测值仍然降低很快,从最大值0.955954跌落到最小值0。报警提取算法从检测过程中成功地提取出了两次攻击。第一次攻击前的最小波动指数为0,说明出现的Native API和多阶一致模型非常一致,但攻击发起时的波动指数最大值为0.955895;第一次攻击结束后指数迭代检测值逐步回升到最大值1,这时的的波动指数最小值为0.000032,根据报警提取算法,可以唯一确定在大约第1373个Native API处到第1765个Native API发生了一次非常入侵。同理,本发明确定了在大约第1765个Native API处到第2157个Native API发生了一次非法入侵。由于那些没有成功的入侵对Svchost.exe进程产生的Native API序列的影响一样是很大的。通过对没有成功的入侵的有效检测,本发明可以对一些攻击尝试进行提前防卫,从而起到预防的作用。由于成功的攻击和不成功的攻击对系统带来的最终影响并不一样,成功的攻击对系统的影响远远大于不成功的攻击对系统的影响。本发明把不成功的攻击划分在攻击尝试的范畴内,它仅仅是对目标主机的一种攻击企图,但这种企图同样会对主机的安全状况会带来一定的影响。本发明通常把这种攻击企图作为主机安全态势的评估信息源加以进一阶的分析和利用,以确定主机在一定时间内的安全状况和应该提供的安全策略。但在本发明目前的系统中,从不成功的攻击中提取出的报警和从成功攻击中提取的报警拥有一样严重程度,这会造成管理员采取不必要的安全策略或者使得运用安全策略非常不灵活。
如图3和图4所示的检测结果所示,本发明针对RPC/DCOM长文件名堆溢出漏洞(MS03-039)进行了两次攻击和检测。由于多个Windows系统的RPCSS服务中用于处理分布式组件对象模型(DCOM)接口的组件中存在3个缺陷,其中两个能执行任意代码,另一个能导致DoS缺陷。缺陷是由于对畸形信息处理错误而产生的。攻击者通过向目标程序提交一个超长的文件名参数,将触发缓冲区溢出缺陷,从而成功利用该缺陷,攻击者能在受影响的系统上以本地系统权限执行任意代码,或导致RPCSS服务崩溃。攻击者还能在系统上采取任意行为,包括安装程序,查看、更改或删除数据,或以最高权限创建新的帐户。为了验证本发明的方法,在Windows 2000 Professional(SP0)系统上分别进行了拒绝服务攻击和入侵攻击两个实验。本发明通过跟踪绑定在端口135上的Svchost.exe进程来发现入侵。图3所示的是针对这个漏洞发起的拒绝服务攻击。可以观察发现,在检测的初始状态,指数迭代检测值从最小值逐渐上升至平稳状态,这种较小的波动指数意味着当前被跟踪进程运行在正常状态。在第570多个Native API的位置处,发起了拒绝服务攻击,随之产生的Native API序列中出现了和相对应的多阶一致模型不一致的样例,导致指数迭代检测值大幅度下降到0.569765,但随后相应的指数迭代检测值慢慢回升,随后被观察的服务进程Svchost.exe在达到指数迭代检测值0.963562后由于被拒绝服务攻击而停止了服务,在整个过程中指数迭代检测值下降的幅度最大达到0.417237,下降幅度不如前述检测的几个入侵实例,但也较明显地反映出拒绝服务攻击时产生的Native API序列和Svchost.exe进程对应的一阶和二阶相关性模型有明显的差距。图4显示了入侵攻击实验的检测结果,发起的入侵攻击将会在受害服务器主机中添加用户名为\”e\”,密码为\″asd#321\″的一个非法账户。图4显示了对整个入侵过程的检测结果,当本发明发起入侵攻击时,由于攻击产生的异常Native API或Native API对与多阶一致模型有较大的差距,从而使得在大约第580步时指数迭代检测值的最大跌幅达到0.954601,随后慢慢回升至0.937083,经过一个波动指数为0.152018的小幅波动后逐渐上升并趋近最大值1。这时本发明退出了入侵过程,Svchost.exe进程的行为重新恢复到正常。这类通过缓冲区溢出添加非法用户的攻击在现实环境中运用得非常广泛,被添加的非法用户可以作为系统后门让黑客将来利用。但本发明的系统只能发现指数迭代检测值的异常,却不能确定是什么样的异常以及服务器已经受到什么程度样的危害。因此,本发明可以结合其他系统安全审计工具对系统安全策略或帐户的变化进行监控,可以建立基于主机的多检测器信息融合机制,从而为管理员快速准确地发现和定位黑客对系统造成的危害,并采取相应的对策和防卫措施提供帮助。
如图5所示的检测结果,针对Windows系统中的RPC Locator服务漏洞(MS03-001)的攻击进行了检测。Locator服务是一种网络名称定位服务,默认装载在Windows NT 4.0/2000/XP中。但仅仅在Windows 2000 domain controllers和Windows NT 4.0 domain controllers中默认被激活,而在Windows NT 4.0workstations或member servers、Windows 2000 workstations或member servers和Windows XP中没有默认被激活。由于在Locator服务中存在一个不安全的缓冲区检测,攻击者通过向Locator服务发送一个精心构造的临时请求,将导致Locator服务失效,甚至能允许攻击者在系统上执行任意代码。在Windows2000Server(SP0)的环境下进行攻击检测实验,由于Windows 2000 Server默认情况下没有启动RPC Locator服务,因此必须手动进行启动配置,从而确保Locator服务能够在每次系统启动时自动运行。在实验中,利用这个漏洞进行攻击将会造成RPC Locator服务的中止,也即是RPC Locator服务处于拒绝服务状态。从图5中可以观察到,在对进程Svchost.exe进行跟踪的初始阶段指数迭代检测值就从最小值开始不断变大,到了一定阶段逼近最大值1,并保持相对稳定。当发起对Windows 2000 Server的RPC Locator漏洞的DoS攻击时,Svchost进程对应的Native API序列指数迭代检测值开始变小、下降,并在一定阶段开始出现急剧波动,最小指数迭代检测值一度达到0.09402,发起入侵攻击的整个过程发生在如图350到550左右的序列位置处。从第500个Native API以后,指数迭代检测值逐渐变大,但到了第715个Native API处,Svchost进程由于攻击造成的DoS而停止服务了。从对该漏洞的测试中可以看出,基于Windows Native API多阶一致模型的指数迭代检测算法可以对发起的DoS攻击的前期进行有效地检测,并可以以此对将要产生的进一阶危害进行阻断。在指数迭代检测值第一次大幅下跌的时候进行了预警,以报警的形式通知系统管理员。
如图6所示的检测结果,本发明在Windows 2000 Server(SP0)系统中进行了实验,针对IIS索引服务器的idq缓冲区溢出进行攻击,攻击成功的同时将在服务器上运行一个恶意后门程序Srv.exe,它将在受害服务器的99端口绑定一个不需要用户名和密码账户的非法Telnet守候进程,同时将造成IIS索引服务器处于拒绝服务状态。采用本发明提出的方法进行检测的结果如图6所示,当攻击发起时指数迭代检测值有两次大幅度的波动,这表明发起的入侵攻击造成了出现的Native API序列和进程Inetinfo.exe对应的多阶一致模型之间有两次较大的差别。第一次是从最大值0.994494跌到了最小值0,有相当明显的跌幅;第二次是从峰值0.801021跌到了最小值0;这两次指数迭代检测值的波动指数都非常大。由第二次较大的波动后逐渐返又趋近于最大值,但由于这种攻击造成了IIS服务重启,跟踪的Inetinfo进程对应的进程号(PID)发生了变化,因此原来跟踪的Inetinfo进程被停止了。从两次明显的大幅度波动可以看出本发明提出的指数迭代检测模型对检测IIS服务中的.idq入侵是非常准确的。
如图7所示,针对.printer漏洞的攻击进行了检测。.printer此漏洞只存在于运行IIS 5.0的Windows 2000服务器中。由于IIS 5的打印ISAPI扩展接口建立了.printer扩展名到Msw3prt.dll的映射关系(缺省情况下该映射也存在),当远程用户提交对.printer的URL请求时,IIS 5.0会调用Msw3prt.dll解释该请求,加之Msw3prt.dll缺乏足够的缓冲区边界检查,远程用户可以提交一个精心构造的针对.printer的URL请求,其“Host:”域包含大约420B的数据,此时在Msw3prt.dll中发生典型的缓冲区溢出,潜在地允许执行任意代码。在实际实验中,当针对此漏洞发起的缓冲区溢出攻击将会在服务器上添加了一个用户名为hax,密码为hax的非法用户;同时会造成Web服务停止响应用户的请求。当攻击完成后,受害的Windows 2000 Server服务器将会自动重新启动并恢复服务,进而使得系统管理员很难检查到已发生的攻击。在实验中Windows 2000 Server(SP0)服务器上进行实验。对IIS服务的进程Inetinfo.exe进行了跟踪。从图7的实验结果中,可以看到,指数迭代检测值E(sk,sj)从大约第1100个Native API时急剧下降,一度其最小值达到了0,并且波动非常大;在大约第2300个NativeAPI处,Inetinfo进程恢复了正常,但在最后,由于缓冲区溢出发生后,Web服务器停止了用户请求,操作系统接着重新启动了IIS服务,因此,本发明跟踪的Inetinfo进程检测数据在第2806个Native API后就停止了,系统重新启动了一个新的IIS服务进程。根据本发明提出的报警提取算法,两次最小指数迭代检测值波动指数之间如果存在至少一次最大的指数迭代检测率波动指数,则认为在这两次最小指数迭代检测率波动指数之间存在一次异常入侵或攻击事件。可以发现,从发起入侵到入侵结束过程中出现了三次大的指数迭代检测率波动指数,分别为0.967106、0.947531和0.93604。而整个过程中对应的最小指数迭代检测率波动指数为0.000127,远远大于攻击发起前的最小波动指数0.000001和攻击结束后的最小波动指数0.000041。因此成功地确认了发生了一起入侵事件。
如图8所示,对于微软的IIS4.0和IIS5.0中存在的Unicode漏洞攻击进行了实验。Unicode漏洞的成因可大致归结为:从中文Windows IIS 4.0+SP6开始,还影响中文Windows 2000+IIS 5.0、中文Windows 2000+IIS5.0+SP1。台湾繁体中文也同样存在这样的漏洞。它们利用扩展Unicode字符(如利用“/”取代“/”和“\”)进行目录遍历漏洞。在Windows NT中编码为%c1%9c,在Windows 2000英文版中编码为%c0%af。首先跟踪Windows 2000 Server(SP0)中的IIS服务进程Inetinfo.exe,对它的Native API序列进行正常指数值的检测。实验中发起的攻击分两次进行,第一次是在URL地址栏输入:
http://192.168.74.220/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir这次攻击的目的是在指定的192.168.74.220服务器上的当前目录下执行dir命令,由此可以实现对整个服务器的目录进行遍历。而第二次攻击是发出命令dir c:\以用来浏览c盘根目录的文件。攻击命令如下:
http://192.168.74.220/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir+c:\从图8的检测结果上看,在第一次攻击发起的时候就出现了大幅度的波动,指数迭代检测值不再保持在趋近于最大值1的状态。其波动最大幅度由下降前的最大值0.961477到波动时的最低谷值0.002939,波动幅度达到0.958538;在进行第二次攻击时,指数迭代检测值由最大时的0.997128下降到了最小值0,波动幅度达到了0.997128。当第一次和第二次攻击完成以后,Inetinfo进程对应的Native API的指数迭代检测值都不断上升趋近于最大值1。通过报警提取算法分析,可以发现,在第一次攻击的前后,最小指数迭代检测率波动指数分别为0.000010和0.000001;而在第一次攻击中出现的最小指数迭代检测率波动指数为0.000066,出现了四次较大的波动,分别是0.937326、0.950498、0.920928和0.728487。因此,通过报警提取算法提取了第一次和第二次入侵。
如图9所示,针对ASN.1库BER解码堆破坏拒绝服务攻击(MS04-007)进行了检测。Abstract Syntax Notation 1(ASN.1)是IT行业中许多应用程序和设备所使用的一种数据标准,可以使用它来标准化和理解各种平台中的数据。Abstract Syntax Notation 1(ASN.1)是用于多个应用程序和设备的数据标准,允许数据可在各种平台传递。ASN.1基本编码规则(BER)基本概念是一个灵活的编码二进制数据的编码方案。每片数据按照描述如何解释下面值数据的类型号,然后是数据长度,最后是数据本身,通过提供超大值(从0xFFFFFFFD到0xFFFFFFFF)给长度字段,可在堆分配函数中产生整数溢出,虽然有地方对这个值长度进行确认和检查,不过在验证函数中独立的指针算法会导致漏洞发生。Microsoft ASN.1库广泛使用在Windows安全子系统,包含Kerberos、NTLMv2验证,及使用各种证书的应用程序(SSL、EMAIL数字签名、ActiveX控件签名)。Microsoft ASN.1库实现上存在整数溢出漏洞,远程攻击者可以利用这些漏洞造成堆破坏从而执行恶意指令。漏洞影响MSASN1.DLL相关的应用,其中比较常见的是LSASS.EXE和CRYPT32.DLL(任何使用CRYPT32.DLL的应用程序)。如果攻击者成功的利用了此缓冲区溢出漏洞,就可以在受影响的系统上以系统特权执行代码。然后,攻击者就能够在该系统上执行任何操作,其中包括安装程序、查看、更改或删除数据;或者创建拥有完全权限的新账户。在实验中首先训练了Lsass.exe进程的多阶Native APIs一致模型。然后在Windows 2000Server(SP0)系统中通过指数迭代检测算法对Lsass.exe进程的攻击进行了检测。跟踪Lsass.exe的进程的Native API序列,从图9可以看出Lsass.exe进程的指数迭代检测值在第530个Native API处出现了较大的波动指数0.620288。在入侵攻击前后的最小指数迭代检测率波动指数分别为0.000002和0.000130,而入侵过程中的最小指数迭代检测率波动指数为0.000158,大于入侵前后的指数迭代检测率波动指数。又由于在入侵前后的两个最小指数迭代检测率波动指数之间至少存在着一次较大的指数迭代检测率波动指数,就认为有攻击事件发生。因此通过分析可以确定发生了一次入侵事件。
表2采用指数迭代检测算法的实验检测结果
被攻击漏洞 |
Max(Fij) |
|A| |
攻击类型 |
被检测进程 |
实验平台 |
MS03-026 |
0.993747 |
2 |
Buffer Overrun |
Svchost.exe |
WindowsXp(SP0) |
MS03-039 |
0.417237 |
1 |
DoS |
Svchost.exe |
Windows2k Professional(SP0) |
0.954601 |
1 |
Buffer Overrun |
MS03-001 |
0.877936 |
1 |
Buffer Overrun |
Svchost.exe |
Windows2k Server(SP0) |
MS01-033 |
0.994494 |
1 |
Buffer Overrun |
Inetinfo.exe |
Windows2k Server(SP0) |
MS01-023 |
0.967106 |
1 |
Buffer Overrun |
Inetinfo.exe |
Windows2k Server(SP0) |
MS00-078 |
0.997128 |
2 |
Folder Traverse |
Inetinfo.exe |
Windows2k Server(SP0) |
MS04-007 |
0.620288 |
1 |
DoS |
Lsass.exe |
Windows2k Server(SP0) |
表2中显示了对实验中涉及到的7种攻击的检测结果。本发明分别在WindowsXP(SP0)、Windows2000 Professional(SP0)、Windows2000 Server(SP0)三个不同的平台进行了测试,并涉及到对Windows系列操作系统一度带来巨大威胁的RPC/DCOM相关漏洞、IIS服务相关漏洞等多种漏洞,其中本发明实验了三种与RPC服务相关的典型攻击(MS03-026、MS03-039和MS03-001),三种与IIS服务相关的典型攻击(MS01-033、MS01-023和MS00-078)以及一种ASN.1库BER解码堆破坏拒绝服务攻击(MS04-007)。其中涉及到缓冲区溢出、拒绝服务和目录遍历(Folder Traverse)三种不同类型的攻击。通过设计的Native API截获系统跟踪了三个不同的进程:Svchost.exe、Inetinfo.exe以及Lsass.exe。表中微软的安全公告编号作为被入侵或攻击的漏洞的标识,记录了针对每种攻击检测结果中的最大波动指数Max(Fij)、报警记录集合中的报警个数|A|、攻击类型、被检测进程以及相关的实验平台。其中Max(Fij)表示在被检测进程产生的整个检测序列中的出现的最大波动程度,它表示了当前整条序列中出现的Native API和其对应的一阶和二阶模型之间的最大不一致程度,这也是用来标识异常事件的最主要标志。A是从被检测进程中提取出来的报警的全集,|A|则表示提取出来的报警个数,从中可以观察到本发明提出的报警提取算法是否能有效地将一次攻击提取出来,而不会分成几次攻击来重复报警。从表2中可以发现,在对三种RPC服务相关的攻击检测中,RPC/DCOM接口溢出漏洞(MS03-026)攻击对应的Max(Fij)最大,达到了0.993747;而RPC/DCOM长文件名堆溢出漏洞(MS03-039)的DoS攻击对应的Max(Fij)最小,仅有0.417237。对三种IIS服务相关的攻击检测的结果都非常好,几乎都很接近最大值1,其中对IIS Unicode目录遍历漏洞(MS00-078)进行的入侵攻击对应的Max(Fij)最大,这表明这种攻击造成的异常Native API和对应的多阶一致模型差距是最大的。从表2我们可以发现,实验中发起的8次攻击都通过报警提取算法有效地进行了提取,提取出的报警个数与实验中发起的攻击次数完全吻合。因此,本发明提出的基于多阶一致模型的指数迭代检测算法和报警提取算法有效地描述了被观察进程的正常行为和异常行为,同时很好地确定了异常攻击的次数,从而可以让系统管理员更加有效地了解系统的安全状况,并且采取相应的安全策略以阻止恶意的攻击。
本发明的主要目的在于通过对Windows内核级系统调用函数Native API进行获取,并建立每个进程对应的多阶一致模型(Multi-Steps Native APIsConsistency Model,MSNACM)在实时检测中通过本发明的指数迭代检测方法对各种入侵行为进行检测和报警。本发明提出的基于多阶Native APIs一致模型的指数迭代检测算法,通过分析和建立Windows环境下的指定进程的多阶NativeAPI一致模型和被检测进程产生的的Native API序列之间的相关性来发现异常入侵。实现这个模型分为两个阶段:训练和测试阶段。在训练阶段中,收集指定进程的Native APIs数据并存储在数据库中。对原始数据的分析包括一阶分析和二阶分析,这主要分析和处理数据集合中的一阶和两阶状态转移来建立一阶和二阶模型;在测试阶段,多阶Native APIs一致模型采用了指数迭代检测算法来计算针对一阶和二阶模型的一阶和二阶Native APIs的正常指数。在实际应用中,本发明还采用了报警提取的方法,这一方法可以使本发明在指数迭代检测率的不断变化波动中,对出现的异常事件进行准确地发现和提取,并进行正确的报警。通过定义的波动指数和相应的滑动窗口,本发明通过报警提取算法可以对波动的正常指数进行分析,取出相对应的异常事件,这将便于通知系统管理员或安全策略中心采取必要的安全策略阻止黑客的入侵行为。在实验中对7种攻击进行了实验,分别在WindowsXP(SP0)、Windows2000 Professional(SP0)、Windows2000 Server(SP0)三个不同的平台进行了测试,并涉及到对Windows系列操作系统一度带来巨大威胁的RPC/DCOM相关漏洞、IIS服务相关漏洞等多种漏洞,其中检测了三种与RPC服务相关的攻击(MS03-026、MS03-039和MS03-001),三种与IIS服务相关的攻击(MS01-033、MS01-023和MS00-078)以及一种ASN.1库BER解码堆破坏拒绝服务攻击(MS04-007)。实验结果表明,多阶Native APIs一致模型、指数迭代检测算法以通过分析Windows环境下的Native API序列来检测入侵攻击事件有较高的精度。