基于差异对比法的文件可疑通信行为检测

时间:2022-09-17 11:04:33

基于差异对比法的文件可疑通信行为检测

摘 要:针对恶意程序对计算机用户造成的危害以及其数量上的快速增长,提出了一种基于文件网络通信行为数据的检测系统。重点介绍了基于差异对比法的可疑通信行为检测模型,给出了系统各模块协同工作流程图以及系统中关键技术的实现代码。测试结果表明,该系统具备通信检测、通信进程检测和域名信息检测功能。

关键词:恶意程序;网络驱动;通信检测;服务提供者接口

中图分类号: TP393

文献标志码:A

Detection of suspicious communication behavior of one program

based on method of difference contrast

ZHONG Mingquan, TANG Zhangguo, LI Huanzhou, ZHANG Jian

Institute of Computer Network and Communication Technology, Sichuan Normal University, Chengdu Sichuan 610066, China

)

Abstract: In allusion to the damage of baleful program for computer users and its fast growth in quantity, a detection system based on network communication behavior data of one program was proposed. A detection model of suspicious communication behavior based on difference contrast was emphasized. The cooperative work diagram of each module of the system and program code of critical technology of the system were given. The test result shows that the system can detect network communication, communication process and domain name for one program.

Key words: baleful program; network driver; communication detection; Service Provider Interface (SPI)

0 引言

随着计算机网络技术不断发展以及Internet的普及,网络安全问题不仅关系到重要信息系统部门,也和普通的网络用户息息相关。恶意程序(如后门、木马等)不仅可以窃取用户的重要信息,而且可以对用户计算机进行强行控制,破坏计算机的硬盘数据,甚至被不法分子作为犯罪工具,给用户造成巨大的经济损失,影响社会安定。据国家互联网应急中心(CNCERT/CC)监测数据显示,恶意程序逐年在数量上呈几何级数增长。因此,基于文件网络通信行为检测十分重要,不仅可以掌握其通信规律,而且可以根据其通信行为判定其危险等级,从而发现一些恶意程序,避免进一步给计算机用户造成损失。

1 网络数据包截获原理

1.1 SPI技术与NDIS Hook技术

Winsock是一种标准API,主要用于网络中的数据通信,它允许两个或多个应用程序在同一台机器或通过网络相互通信。Winsock通信使用套接字概念,Socket和WSASocket两个函数用于创建套接字。Winsock 2是Windows Sockets的2.0版本,在该版本中引入了一种新的编程接口叫作服务提供者接口(Service Provider Interface,SPI)。SPI是对Winsock API的补充,它是一项对应用程序的服务,而非应用程序。利用这种技术可以在Socket中插入一层,插入自己的DLL程序,整个替换掉原有系统的程序[1]。当有数据包进入时,直接调用自己的程序进行包分析处理。SPI以动态链接库的形式存在,工作在用户模式,每一个SPI动态库都必须提供30个标准函数与Winsock API调用形成映射关系。SPI允许两种服务提供者――传输服务提供者和名字空间服务提供者,传输服务提供者又分为基础服务提供者和分层服务提供者,分层服务提供者比基础服务提供者实现起来更容易一些。

NDIS(Network Driver Interface Specification)为网络驱动的开发提供了一套标准的接口,对网络驱动程序抽象了网络的硬件实现。其中,NDIS Hook驱动程序的逻辑实现和NDIS中间层驱动程序一样,但具体实现不同,它是为了降低编写驱动程序难度的一种技术方法。NDIS Hook驱动程序使用“钩子”来截获由Windows NDIS提供的服务,可以挂接NDIS所提供的所有服务[2]。NDIS Hook驱动程序在网卡驱动程序和协议驱动程序之间插入一层自己的处理,当TCP调用NdisSend来发送数据包时,数据包首先到NDIS Hook驱动程序处进行过滤。同样,TCP上接收的数据包也要首先到NDIS Hook处进行过滤。Windows 2000/XP下可以通过修改NDIS.sys的导出表(Export Table)或向系统注册假协议来实现该技术。

1.2 两种技术结合工作模式

除了SPI技术和NDIS Hook技术,还有很多数据包截获技术,比如NDIS中间层驱动、WinPcap技术等。这些技术或多或少地存在着某些缺陷,如果能够将其中的两种或多种技术结合起来实现数据包的截获,可以取长补短,更好地完成网络通信数据的采集[3]。SPI技术和NDIS Hook技术是一种理想的组合方案,SPI技术工作在应用层,采集的包比较完整,可以实现基于内容的过滤,效率高;而NDIS Hook技术工作在核心层,可以很容易地截获通过网络层的所有数据包,不容易被穿透。总之,两种技术相结合的工作模式使得对网络通信的检测更高效、更合理。

2 系统的设计与实现

2.1 差异对比法原理

不管采用哪种隐蔽技术的恶意程序,只要其进行网络通信,就会造成系统网络通信信息的变化,比如:流量增大、打开新的通信端口、新增加通信进程等。以恶意程序在网络通信阶段引起的系统变化为切入点,以恶意程序导致的系统前后差异特征来判断被检测程序是否是恶意程序,这就是差异对比法检测恶意程序的基本原理。

2.2 可疑通信行为检测模型

利用差异对比法的思想,首先将计算机中原始通信数据保存在一个表中,接下来启动被检测程序,此时的通信数据可能发生变化,称为总的通信数据。总的通信数据与原始通信数据的差异就是被检测程序启动后引起的计算机系统网络通信数据的变化,称为网络通信异动数据。最后按照自定义的判定规则,对异动数据进行判定,就可以得到基于网络通信行为的被检测程序危险等级。检测模型如图1所示。

图片

图1 基于差异对比法的可疑通信行为检测模型

对网络通信差量数据还需进一步判断,才能得到被检测程序危险等级。判定规则是依据恶意程序网络通信阶段的各种隐藏特性[4],并对恶意程序样本进行反复测试的基础上建立起来的。主要判定规则如下:

1)进行网络通信的进程名与系统进程名相同,但其路径不在system32目录下,等级为高。

2)进行网络通信的进程名与系统进程名相似,等级为高。

3)进程运行时自动发送电子邮件,等级为高。

4)进程通信时只发SYN包而不接收,等级为高。

5)进程使用常见漏洞端口通信,等级为中。

6)进程打开一个通信端口并对端口进行监听,等级为中。

7)进程使用ICMP协议进行通信,等级为中。

8)进程主动向外进行连接,等级为中。

规则1)、2)是基于恶意程序的进程隐藏原理进行检测,规则3)基于恶意程序传输信息的方式进行检测,规则4)基于SYN攻击原理进行检测,规则5)~7)基于通信端口特性进行检测[5],最后一条规则基于反弹型恶意程序原理进行检测。最终检测结果取八条规则中的最高级别,若被检测程序无以上行为,则检测结果为低。

┑1期 用魅等:基于差异对比法的文件可疑通信行为检测

┆扑慊应用 ┑30卷

2.3 系统总体结构

从功能上,系统分为三个模块:应用程序模块、SPI模块和NDIS Hook模块。它们之间的相互联系如图2所示。

图片

图2 系统总体结构与工作流程

SPI模块利用SPI技术在应用层抓包,然后对截获的数据包按照数据包结构进行解析处理,并将解析好的通信信息放置在内存缓冲区。NDIS Hook模块则利用网络驱动程序,在网络层截获数据包并进行解析,然后将解析好的通信信息放置在另一内存缓冲区中。应用程序模块首先从两个缓冲区中读出通信信息,然后根据时序求出异动数据,并判定被检测程序的危险等级。另外,SPI模块还要通知NDIS Hook模块增加或删除通信端口,以防止重复截获相同的网络数据包。

2.4 关键技术实现

2.4.1 获取进程信息

在网络通信中,进程是通信的主体,截获的数据包将隶属于某个进程。因此,在截获数据包的同时必须获取相应的进程信息。在应用态使用GetModuleFileName函数就可以得到进程信息,比较容易实现,但在核心态下的网络层得到进程信息则比较困难。在核心态下,可以利用PsGetCurrentProcess得到进程信息结构PEPROCESS,但是必须先判断当前的中断请求级别(Interrupt Request Level,IRQL),只有IRQL=PASSIVE_LEVEL才可调用该API,否则将出现蓝屏死机故障。对于不满足IRQL条件时,采取的策略是利用与IRQL无关的PsGetCurrentProcessId函数先得到进程ID,将进程ID送到应用程序模块后再通过进程ID去寻找进程名和路径信息。

2.4.2 获取域名信息

1)解析原理。

由于在应用态获取域名信息要容易一些,这里主要讨论NDIS Hook模块中获取域名信息的方法。在NDIS接口中,网络封包结构使用NDIS_PACKET来表示。通过查看DDK对该结构的定义可知,NDIS_PACKET中存在一个NDIS_BUFFER结构的链表,封包数据就是用NDIS_BUFFER表示的。NDIS_BUFFER结构中的VirtualAddress表示封包的缓冲区指针,Length表示VirtualAddress的长度,Next表示下一个封包缓冲区指针,这些封包缓冲区的数据加起来就是一个完整的网络封包。

NDIS在分包时也有一定的规律,每一个NDIS_BUFFER里通常保证是一个或几个完整的协议头部。例如:Windows 2000 Professional系统中NDIS_PACKET结构的第一个NDIS_BUFFER保存着Ethernet Header、IP Header和TCP Header(UDP Header或ICMP Header),接着就是封包数据。值得注意的是,不同操作系统下NDIS分包规律不一样,要正确解析网络封包就必须先判断操作系统的类型。

图3为包含域名信息的网络层UDP包的结构示意图。由图可知,要解析出UDP包中的域名信息,需要先得到该UDP包各个NDIS_BUFFER缓冲区的首地址,然后分析其内部结构,计算域名偏移地址,从而得到域名信息。

图片

图3 包含DNS报文的UDP包结构

2)关键代码。

根据NDIS_PACKET分包特点以及包含DNS报文的UDP包结构,实现域名信息解析功能的主要代码如下:

程序前

if(ntohs(pUdpHeader->DestinationPort)==53)

// if1(从UDP包中取出域名信息)

{

Buffer = FirstBuffer;

for(i=0; i

//for1(遍历NDIS_PACKET的所有NDIS_BUFFER)

{

if(Buffer != NULL)

{

NdisQueryBufferSafe(Buffer, &VirtualAddress, &Length,HighPagePriority);

if(VirtualAddress != NULL && Length > 0)

{

plength+=Length;//plength为NDIS_PACKET封包的当前大小

memset(buftmp,0,sizeof(buftmp));

if(plength>60 && plength

//第54(14+20+8+12)字节,以后为域名信息

{

memcpy(buf, VirtualAddress, Length);

//复制NDIS_BUFFER

for(k=13; k

//for2(最后5字节应减去)

{

if (buf[k]

{sprintf(buftmp, "%c", ′.′); strcat(bufAll, buftmp);}

else{

sprintf(buftmp, "%c", buf[k]); strcat(bufAll,buftmp);

}

}//end for2

}

}

NdisGetNextBuffer(Buffer, &Buffer); //指针后移

}

}//end for1

}//end if1

程序后

2.4.3 蓝屏分析

IRQL是一个由Windows虚拟出来的概念,划分在Windows系统下中断的优先级。处理器在一个IRQL上执行线程代码,在同一处理器上,线程只能被更高级别IRQL的线程中断。每个由NDIS调用的驱动程序函数都运行在操作系统决定的IRQL下,IRQL常常取值为PASSIVE_LEVEL、DISPATCH_LEVEL或者DIRQL。驱动编程时不允许在高IRQL条件下调用低IRQL的API函数。例如,接收数据时调用的入口点函数ProtocolReceive要求的IRQL为DISPATCH_LEVEL,而处理数据时调用的计算机硬件驱动函数往往要求运行在IRQL为PASSIVE_LEVEL的级别上。于是,如果在函数ProtocolReceive里调用计算机硬件驱动函数,就会引起蓝屏死机现象。正确的做法是先判断当前的IRQL是否满足函数的调用条件后再进行调用。

3 实验与结果分析

3.1 实验结果

在Windows 2000操作系统下,分别实现了检测系统的三个模块。由于检测过程中被检测程序可能对计算机系统造成破坏,测试工作是在虚拟机环境下进行的,虚拟机选择的是目前使用最多的VMWare Worksation 6.0。检测系统运行后,首先得到的是计算机系统的原始通信信息,接着选择被检测程序并启动被检测程序,此时得到的为总的通信信息,通过差异对比可以得到通信的异动数据,如图4所示。

图片

图4 检测系统运行结果

3.2 结果分析

为了验证检测系统的检测率,选择了两类测试样本:一类是恶意程序样本;另一类是正常程序样本。测试结果的统计信息如表1、2所示。

表格(有表名)

表1 文件可疑通信行为检测系统部分测试结果

被检测程序功能描述预期そ峁实际そ峁

Server(灰鸽子).exe灰鸽子木马服务端高中

svch0st.exe木马服务端高高

Server(黑客新防线Byshell).exe黑客新防线服务端高中

rejoice(上兴远程控制).exe远程控制程序服务端中中

Foxmail.exe邮件收发程序低低

Ping.exe网络性能查询程序中中

表1中的测试结果说明,本系统通过网络通信行为途径对可疑程序进行检测的漏报率和误报率较低、并且具有比较高的检测精度。表2中的数据为三个检测系统的对比测试数据。与本系统进行对比测试的工具软件选择了两款,一个是NAI公司的Sniffer软件,另一个是天网个人防火墙。通过表2对比发现:Sniffer软件能够对网络通信进行检测,但不能检测其进程信息,没有给出判定结果;天网个人防火墙既能检测网络通信,又能检测其进程信息,但同样没有给出判定结果;本系统在网络通信行为检测方面功能最多,除具有通信检测、进程信息检测、给出判定结果功能外,还具有域名信息检测和流量统计功能。

4 结语

在系统的测试过程中发现,SPI技术与NDIS Hook技术相结合的数据包截获方案达到了预期的效果,充分利用了

SPI技术截获的数据包容易解析、占用CPU资源低的优点,以及NDIS Hook技术在核心层能够截获所有通过网络层的数据包的优点。但是,在对截获的通信信息进行判定时,为了兼顾漏报率和误报率,部分被检测程序的判定等级为中,通过网络通信信息不能作进一步的判定。这说明,在对可疑程序的检测工作中,网络通信行为数据是检测工作的关键数据之一,但同时必须综合其进线程行为数据、文件操作行为数据、注册表操作行为数据才能得到更高精度的判定结果。

表格(有表名)

表2 文件可疑通信行为检测系统检测结果对比

被检测程序

文件可疑通信行为检测系统

进程信息通信检测判定结果

Sniffer软件

进程信息通信检测判定结果

天网个人防火墙

进程信息通信检测判定结果

Server(灰鸽子).exe有能有无能无有能无

svch0st.exe有能有无能无有能无

Server(黑客新防线Byshell).exe有能有无能无有能无

rejoice(上兴远程控制).exe有能有无能无有能无

Foxmail.exe有能有无能无有能无

Ping.exe有能有无能无有能无

参考文献:[1] 田磊, 李祥和, 辛志东, 等. 基于Winsock2SPI技术的木马植入新方案[J]. 计算机工程, 2006, 32(7): 166-168.

[2] 柳岸, 龙雅琴, 古乐野. 基于包过滤技术的网络安全的研究[J]. 计算机应用, 2006, 26(9): 2160-2161, 2165.

[3] 陈少辉, 张艳宁, 刘艳玲. 基于封包截获技术的个人防火墙核心驱动技术[J]. 计算机工程, 2007, 33(6): 123-125, 128.

[4] 郝向东, 王开云. 典型恶意代码及其检测技术研究[J]. 计算机工程与设计, 2007, 28(19): 4639-4641.

[5] 林小进, 钱江. 特洛伊木马隐藏技术研究[J]. 微计算机信息, 2007, 23(33):59-60.

上一篇:航天信息打造“懂税的ERP” 下一篇:“亮. 震撼视界”