访问恶意网站告警系统设计探究

访问恶意网站告警系统设计探究

摘要:互联网上存在很多恶意传播病毒的网站和假冒的欺骗网站,不知情的用户访问这些网站后有可能被感染上病毒,或者被欺骗。基于对网络嗅探技术的简要分析,研究了网络数据包的捕获机制,根据网页推送的需求基于WinPcap在Windows平台下设计实现了一个访问恶意网站告警系统,通过捕获用户使用浏览器发出的HTTP通信报文,分析其请求字段,当主机字段内容与恶意网站匹配时,通过推送程序发送给用户预先指定的告警页面,以达到提醒和保护用户安全的作用。

关键词:网络嗅探器;数据包捕获;数据包分析;推送;TCP通信

1概述

随着计算机技术、通信技术和互联网技术的飞速发展,网络购物、网上消费、电子商务等早已风靡全球,网络信息已经成为社会发展和个人生活的重要组成部分。然而由于计算机网络组成形式多样性、终端分布广和网络的开放性、互联性等特征致使这些网络信息容易受到来自世界各地的各种人为攻击例如信息泄漏、信息窃取、数据篡改、数据删添、计算机病毒等,涉及到个人的主要包括银行账号、密码、个人隐私等敏感信息,网络安全的形式越来越严峻。据某知名杀毒软件公司统计,平均每天检测到的感染木马的计算机数量为上千台,平均每天新增加的恶意程序特征就高达780个,恶意软件最广泛是通过互联网特别是恶意网站进行传播。为了给个人计算机加强网络安全,避免恶意网站的侵袭,需要截断恶意网站与用户之间的正常通信,同时向用户推送告警页面。这样既不会让病毒、恶意软件有机可乘,又让用户注意到已经在访问恶意网站,加强自我管理。通过对网络嗅探器对网络上传输的数据包特别是HTTP请求的捕获与分析,当发现HTTP请求报文Host字段与恶意网站列表中的网站名匹配时,获取组建推送告警报文所需要的MAC地址、IP源地址、目的地址、TCP端口、SEQ序号和ACK序号等通信信息[1],直接生成用户要访问的网站的回应数据包,并将告警信息成功推送至用户,从而阻止恶意网站内容传输至用户浏览器,截断如木马、病毒等恶意软件的传播途径,以达到保护用户安全的目的。本系统可根据收集的恶意网站名单,对恶意网站列表进行实时更新,并且系统管理员可自行选择推送页面,系统使用简单灵活,因此对访问恶意网站告警系统的应用具有重要意义。

2系统概述

本系统主要包括网络嗅探器和网页推送器两部分,其中嗅探器和网页推送器是本系统实现的关键。网络嗅探器(Sniffer系统),放置于网络节点处,对网络中的数据帧进行捕获的一种被动监听手段,是一种常用的收集有用数据的方法,本系统网络嗅探器主要用于捕捉用户发出的TCP数据包[2]。网页推送器用于将告警页面以HTTP请求应答包的形式发送至用户主机,该应答报文必须满足TCP/IP通信协议,同时由于本系统一般架设于局域网内部,推送报文的源MAC地址、目的MAC地址必须与请求报文对应,以实现将应答报文正确传输至用户计算机。由于本系统包含网页推送器程序,且当系统运行在局域网内时,MAC地址是以太网通信的基础,因此要求本系统的嗅探器不仅能够获取请求报文中高层协议如IP协议、TCP协议等信息,还必须能抓取请求报文中的MAC地址等报文底层数据。从常见的嗅探器实现机制[3]中可以了解,WinPcap直接从网卡驱动NIC中获取报文,该报文包含了请求报文包括MAC地址在内的所有信息,而套接字包捕获则仅获取报文IP层以上的数据,对于MAC地址信息无法获取。为了实现网页推送器能够正确填充MAC地址,本系统嗅探器同样采用的WinPcap实现,通过使用WinPcap设计开发嗅探器[4]。网页推送器用于将告警页面以HTTP请求应答包的形式发送至用户主机,因此必须满足TCP/IP通信协议。同时为了实现将网页推送至客户端浏览器,对本系统设计时提出了一些关键要求。

3系统设计与实现

3.1嗅探器的设计与实现。本文在Windows平台下采用MFC实现了一个嗅探器程序,开发工具使用VisualC++,该设计可以捕获到所有经过本地网卡的所有的HTTP数据包,并可从查找符合恶意网站列表的报文。在捕获数据包前,首先需要获取网卡设备列表,如图1所示,当用户单击某一网卡时,在列表控件中填充该网卡诸如名称、描述、IP地址、子网掩码等详细信息。当选中了某一网卡后按“确定”按钮完成网卡的选择,通过CMainFrame的pcap_if_t*dev成员变量保存该网卡。为了实现对恶意网站的管理,本系统设计了网站列表维护对话框,通过该对话框可实现恶意网站的增加、修改和删除等操作。当完成网卡选择、推送文件选择和恶意网站列表维护后,用户单击“文件”菜单的“开始”菜单项,系统通过建立ReceivePacket线程开始进行WinPcap捕获设置,包括打开网卡、设置过滤器等,最后循环调用pcap_loop设置的packet_handler回调函数。在packet_handler中,首先分析该TCP报文的flag标志,只有为用户浏览器请求报文结束标志PSH+ACK有效时再进行下一步解析判断。根据TCP报文结构定义,将数据指针定位于TCP数据区,也即HTTP报文头位置。然后在HTTP报文中查找是否为请求报文,即是否包含GET字段内容。继续在HTTP请求报文中定位Host字段。根据恶意网站列表数据查找是否匹配,如果匹配则调用sendpkt进行告警页面推送。

3.2推送器的设计与实现。网页推送的报文在组包时,不仅要符合TCP的数据结构,而且必须符合TCP的数据传输要求[5],下列为本系统实现推送的关键步骤。3.2.1恶意网站匹配报文的抓取:从HTTP请求分析中可以发现,Host属性包含了用户访问的网站域名,因此需在WinPcap中对抓到的报文检查Host属性是否与恶意网站列表匹配。3.2.2TCP序列号和确认:TCP序列号和确认号是实现可靠传输的基础,因此推送的报文必须符合序列号、确认号的要求,也即推送报文的SEQ为请求报文的ACK,推送报文的ACK为请求报文的SEQ加上请求报文TCP数据长度。3.2.3校验和计算:校验和包括IP头部校验和TCP数据包校验,IP报文的校验和根据源IP、目的IP信息,而TCP数据包校验既包含TCP头部数据、TCP数据,还包括一个源IP、目的IP和协议信息在内的伪IP头部数据。3.2.4响应时间:推送的报文必须先于恶意网站生成的应答报文到达用户,这样由于TCP协议的规约,后续到达的应答报文将被视为重传失败而被用户主机丢弃。3.2.5报文发送:推送器必须能直接发送包含以太网MAC数据在内的报文,而socket编程无法实现对目的MAC、源MAC的修改,WinPacp中则提供了pcap_sendpacket直接发送数据报文的接口函数。当嗅探器捕捉到用户浏览器向恶意网站提交的HTTP请求后,由sendpkt函数进行发送。sendpkt函数原型为:voidsendpkt(PUSH_INFO_PTRpush_info,constuint_8*pkt_data_in);其中,push_info为系统推送信息PUSH_INFO结构体指针,pkt_data_in为嗅探器捕获的数据包。在sendpkt中需要根据捕获的报文内容完成推送报文的MAC地址复制、IP地址复制、TCP端口复制、序列号和确认号填充、IP校验和计算以及TCP校验和计算。最后调用pcap_sendpacket完成推送报文的发送。嗅探结果如图2所示。为了实现网页推送器成功推送至用户浏览器,不仅要满足TCP数据结构,还必须满足TCP通信的数据传输要求,且响应时间必须先于恶意网站响应时间。因此本系统在设计时采用了如下一些加速措施。一是提前填充确定的数据至推送报文:如以太网头部类型、IP头部、TCP头部等,并预先格式化好HTTP应答信息。二是提前读取推送文件:将用户选择的推送页面文件提前读取后存放在推送报文中,减少推送时间。三是将计算TCP校验和所需的TCP报文长度(TCP头部+TCP数据总长度+伪IP头部)预先计算好后放于PUSH_INFO结构体。

4结论

本文的主要研究内容是利用WinPcap开发网络嗅探器和推送器实现恶意网站的告警,具体设计中通过捕捉用户发出的IP数据包能将捕捉到的数据包中的目标地址取出与恶意网站列表中的地址进行比对,如发现目标地址与列表中的地址相同,即调用告警页面推送程序;也可以人工对恶意网站列表进行手动管理。本系统可以作为基础的恶意网站过滤系统维护普通计算机用户的网络安全,也可以用于学校机房、校园网等应用场合,具有广泛的应用前景。在使用中,本系统不免存在一些不足之处,需要在下一步的完善中不断进步,例如:

4.1本系统没有对推送报文进行TCP分包传输处理,因此对推送文件的大小作了不大于1400字节的限制,让其包含在1个TCP报文中。

4.2本论文中的嗅探器只适用于基于广播包的网络,不能够对子网内其他的机器进行监听,若想要对子网进行监听,必须处于与此交换机同级的包交换节点中。

4.3系统未实现一个独立的网页推送器。在未来,可以尝试使用过命令行参数传递、进程间共享内存通信等方式独立设计网页推送器。

作者:潘卿 单位:南京林业大学