APP下载

基于NDIS的Web邮件监控

2012-08-07罗利明伍淳华袁开国

网络安全技术与应用 2012年10期
关键词:关键字附件邮件

罗利明 伍淳华 袁开国

北京邮电大学信息安全中心 北京 100876

0 引言

本文在吸收前人研究的成果上,设计了一个Windows下的基于NDIS(Network Driver Interface Specification)的Web邮件发送和接收监控系统。鉴于监控通过Web进行邮件接收的研究目前较少,本文重点针对Web邮件接收内容的特点,提出了对Web接收邮件内容监控的解决方案。针对Web服务器在发送或接收一封 Web邮件时,一封邮件会分多次 TCP传输的难题,本文提出通过他们内在的标识 ID将多次传输的TCP连接组合成同一封邮件。实验结果表明了该系统的有效性。

图1 系统基本模型图

1 Web邮件监控系统的实现

1.1 系统框架图

图1是基于NDIS的Web邮件获取的系统框架图。由图可知,最底层NIC是本机的网卡,数据包经过网卡时由装在网卡上的NDIS过滤驱动截取到,然后传给应用层进行TCP数据包的重组。在NDIS过滤驱动中可以设置要过滤的端口,本文设计的系统过滤了除源端口或目的端口为80的TCP包。接着进行HTTP协议的还原和Web邮件的提取。Web邮件模板库是事先保存的识别各类邮箱的邮件服务器、发送者、接收者、内容、附件等关键字的知识库,在进行邮件信息提取的时候通过匹配 Web邮件模板库中的信息,提取出邮件信息。Web邮件的发送或接收在有多条TCP连接时,还需要将多条TCP连接的信息组合成一封邮件。

1.2 TCP数据重组的实现

由于网络状况问题,在网络中传输的数据包不一定会按照顺序到达,本文根据TCP包的序列号和确认号将乱序的包进行重组。本文使用二维链表将获得的包缓存起来,可以将此链表的结构看成是一个二维数组。每一个纵列是一个四元组(源 IP地址,目的 IP地址,源端口,目的端口)标识,如果新来的包已存有四元组标识,根据该包序列号的按序插入到该纵列中的横向队列里面去,若没有该标识,则新建一个四元组,队列长度的大小是动态变化的。数组包重组的流程图如图2所示。

图2 TCP数据包重组

1.3 HTTP协议还原

1.3.1 HTTP请求的还原

Web邮件的发送主要是通过浏览器发送HTTP请求给服务器,因此通过还原HTTP请求数据,就能获取邮件信息。HTTP请求数据是经过编码的,在请求头中给出了信息编码的格式,中文编码类型主要为UTF-8,表示为Content-Type:charset= UTF-8。

请求行数据的长度在请求头中由消息头 Content-Length给出,请求行数据的起始位置在请求头末尾处两个回车换行( )后的位置,复制 Content-Length长的数据就得到了HTTP请求的数据。

HTTP请求的还原,是通过对请求行数据进行UTF-8的解码,解码后的数据就是原始发送邮件的内容。

1.3.2 HTTP回应的还原

Web接收邮件的内容,主要是服务器返回的响应报文,对HTTP回应报文进行还原后就能分析出邮件的内容。HTTP响应报文是编码压缩的,这在HTTP回应头中标识了报文的编码类型,消息头一般为Content-Encoding: gzip,这说明内容是 gzip编码的,将该内容以十六进制方式查看可以看到gizp压缩的起始标志是1F8B。

HTTP回应报文的还原主要是对以gzip编码的内容进行解压缩,再对解压缩后的内容进行UTF-8解码。本文使用zlib库来解压gzip数据。对报文进行解压缩时需要知道压缩内容的长度,HTTP回应头提供了两种表示长度的方法。

图3是回应头为Transfer-Encoding: chunked时获取响应报文数据的流程图。

图3 Transfer-Encoding: chunked获取报文流程图

1.4 Web邮件模板库的建立

由于不同的 Web邮箱服务器提供者提供了不同的邮件格式,同时Web邮件也在不停的更新,这对匹配不同类型的邮件提供了难度。本文将这些邮件匹配的标识关键字建立模板库,并保存在数据库中。

经过大量的观察和实验,发现每类邮箱在发送和接收邮件时有固定的标识来分辨邮件每一部分,因此可以总结出各类邮箱的关键字。以163邮箱为例,表1列出了163邮箱的邮箱服务器、发送者、接收者、主题、内容、附件关键字的信息。

表1 163收和发各字段关键字

本文在实验中总结了163、QQ、sina、sohu、126、hotmail、yahoo常用的7种邮箱标识,以此建立了Web邮件模板库。在程序初始化时读取到程序中,在提取邮件信息的时候进行匹配。

1.5 发送和接收Web邮件提取算法

在组合成邮件数据的时候,我们要把源IP、目的IP、源端口、目的端口标识的TCP流和与之相反的TCP流组合在一起,因为这代表了一个HTTP连接的请求和响应的完整过程。发送和接收Web邮件内容的提取算法如图4所示。

图4 发送和接收的Web邮件提取算法

还原了HTTP数据后,开始进行邮件的分析,对HTTP请求报文的主体和响应报文的主题分别分析,就可以获取发送邮件和接收邮件的信息。

以163邮箱发送邮件为例,首先判断请求报文的主体判断是否有“webmail.mail.163.com”。我们使用的查找函数为char *KeyFind(char *sourceData, int sourceLen, char *keyData,int keyLen),sourceData是将要查找的数据,sourceLen是sourceData的长度,keyData是要查找的关键字,keyLen是keyData的长度,如果查找成功,则返回查找的位置,否则返回空。如果数据中有邮件服务器标识,则将数据进行UTF-8解码,然后根据163邮件模板库中的知识提取邮件信息,提取出信息后写入数据库中。

对于接收邮件内容的提取,是通过分析HTTP响应报文来完成的。首先判断HTTP响应数据中是否有Content-Encoding:gzip标识,如果有则进行gzip压缩,gzip压缩成功后进行邮件信息的提取。如果没有则结束分析。gzip解压缩成功后,就可以通过Web模板库中的知识匹配邮件信息,如果匹配成功,则进行UTF-8解码,提取邮件信息并写入数据库。

1.6 多条TCP连接邮件内容的获取

如果一封邮件的发送和接收是在一个TCP连接中,则很容易通过上述的邮件提取算法获取邮件的全部信息。但是对于发送带附件的邮件,邮件服务器会将邮件和附件分多次传输,比如sina、163、QQ邮箱等。对于接收邮件也存在同样的问题,比如163邮箱的内容和主题等字段是分两次传输的。

本文提出通过寻找邮件的内在标识 ID来解决同一封邮件分多次TCP传输的问题。而这个内在的标识ID,本文通过实验测试发现,对于各类邮箱都可以找到。

本文设置了一个结构体,结构体的结构如下:

结构体中的有 ID、ID获取的时间、邮件内容、邮件主题、发送者、接收者、附件名、附件内容等标识一封邮件的信息。同时设置一个该结构体数组,本文设置的数组值为10,表示可以匹配10封多TCP连接的邮件,这个值也可以根据需要设成其他的值。

图5为多条TCP连接的邮件内容获取的算法。

图5 多条TCP连接邮件内容获取算法

从以上算法图可知,如果有标识邮件ID的邮件信息,先将该ID和邮件信息保存在结构体g_mailIDDataStruct数组中,并判断邮件信息是否完整,如果不完整,等待该ID的其他邮件信息获取,如果邮件信息获取完整,则将该邮件写入数据库。如果g_mailIDDataStruct结构体数组值已达到最大,而又有新来的ID,则找出数组中各ID的时间距离当前最大的时间,可以认为该ID标识的邮件匹配失败,将新来的ID赋给该数组值。

对于邮件的附件内容的获取,如果是 txt文档,则直接获取内容,如果是Word和pdf则可以使用PDFBox等工具先将内容转化成文档流。如果是压缩文件,可以先进行相应的解压缩,然后根据文件类型并进行相应的处理。

1.7 敏感邮件报警

对于一些涉及安全、保密等机构,在监测到邮件内容后,可以事先设置邮件的敏感关键字,在邮件写入数据库后根据敏感关键字匹配,如果符合设置的条件,则可以用鲜明的颜色标识出来,或者给管理者发信息,使得能够实时的监测邮件的动态。从而能够及时发现泄密、违法等邮件。

2 性能测试

本实验的测试环境为百兆网速的局域网,测试的PC机的处理器为英特尔 Pentium(奔腾)双核 E6500@2.93GHz,内存为4GB,硬盘为西数320GB,测试的操作系统有Windows XP,Win7(32位)和Win7(64位)。通过将NDIS驱动装在个人PC机上进行了163、新浪、QQ、126等邮箱收发的测试,每个邮箱的发送和接收邮件达100封,测试内容包括邮件内容和邮件附件。表2是实验的结果统计图。

表2 发送和接收邮件统计结果

通过实验统计结果表明,不论是发送还是接收邮件,邮件内容和附件的准确获取率达 98%以上。其他的 2%是由于局域网网络状况不好,从而导致的网络丢包和包损坏所引起的。因为系统中设置了一个超时时间1分钟,如果在1分钟内邮件仍没有发出去或接收完全,则舍弃该封邮件有关的TCP数据包,不再分析该邮件内容。这样做的原因是,如果长时间的下载大文件或进行视频传输,数据量会非常大,及时舍弃这些数据可以保证系统更好的运行。

经过大量测试表明,本系统能够在网络正常情况下准确获取在网络中传输的明文网络邮件。

3 总结

针对目前应用比较广泛的Web邮件服务,本文从原理到实践详细地阐述了获取Web邮件发送和接收内容和附件的方法。本文重点讲述了Web接收邮件的监控和多TCP连接邮件内容的组合,并通过建立Web邮件模板库来匹配各类邮件信息。目前Web邮件实现的难点是组合具有多个TCP连接的同一封邮件,本文提出了用标记同一封邮件的ID来组合他们。但是本方式同时存在一定劣势,比如本文使用的方式为驱动方式,必须要求客户机安装驱动,实际应用可以用其它方式替代。本文讲述的系统模型可以在个人 PC机上实现,也可以在装有网卡的其他符合Windows网络协议机器上实现。随着Internet的不断发展,Web邮件内容和附件的获取在现在或是将来都有很重大的意义。

[1] 中国互联网络信息中心(CNNIC). 第29次互联网络发展状况统计报告[EB/OL]. http://www.cnnic.cn/research/bgxz/tjbg/201201/P020120118512855484817.pdf.

[2] 朱鸿旭,刘嘉勇. Linux平台下基于特征库的Webmail监控系统[J].信息网络安全.2010.

[3] Rui Lu,Jia Mi,Bo Huang. Design and Implementation of Email Aduiting System[C].IEEE 2010.

[4] 朱随江,王泽东,刘宇,刘宝旭.基于模板的 WebMail审计系统的设计与实现[J].计算机应用与软件.2011.

[5] 谭文,杨潇,邵坚磊.寒江独钓:Windows内核安全编程[M].电子工业出版社.2009.

[6] Windows Driver Development Kit.

[7] Andrew S. Tanenbaum著,潘爱民译.计算机网络[M].清华大学出版社.2004.

[8] 谭敏生,汤亮.基于 HTTP的网络数据包还原技术研究[J].计算机技术与发展.2007.

[9] www.zlib.net.

猜你喜欢

关键字附件邮件
大型外浮顶储罐安全附件常见问题
基于James的院内邮件管理系统的实现
履职尽责求实效 真抓实干勇作为——十个关键字,盘点江苏统战的2021
附件三:拟制定的标准汇总表
来自朋友的邮件
成功避开“关键字”
关于TSG 07——2019附件M与TSG Z0004——2007内容的对照
CMailServer
一封邮件引发的梅赛德斯反弹
新型武器及附件展呈