loading ...
loading...

2008-07-21 | 病毒网络行为监控的几个思路

分享
标签: 病毒  思路  监控  驱动  bind 
    一个病毒网络行为监控的小工具,工作量不大,但时间紧迫。
    思路1,基于网络监控,使用NDIS
驱动、TDI驱动或者SPI过滤。相对而言,前两者稳定性差,会导致经常性BSOD。SPI最容易实现,但控制不好的话,会使SPI链混乱,影响正常的网络应用(当然,修复也比较容易)。另外,也可以直接借助winpcap提供的接口,但缺点是需要安装winpcap。
    思路2,拦截网络操作的相关API调用(bind、connect、listen、recv、send、recvfrom、sendto等),记录调用发生的时间、应用程序名称以及四元组。如果采用DLL注入的方法,系统稳定性会大打折扣,如果使用DEBUG API加载目标程序,又会受阻于病毒的反调试部分。
    思路3,直接使用进程端口关联,相关的代码已经非常成熟,但实时性不够好,同时UDP协议的远程信息无法准确获取(受限于AllocateAndGetUdpExTableFromStack函数)。
    考虑到时间仓促,按照思路3快速实现了原型。实时性和UDP信息,准备采用RAW Socket 嗅探的方法来解决。但莫名其妙的事情发生了,RAW Socket在一旦设置了IP_HDRINCL就无法bind,google给出的答案是需要administrator且关闭防火墙,也有设置注册表“HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Afd\Parameters:DisableRawSecurity”为1的方法,不过需要重启系统,比较麻烦。考虑到只关注病毒网络行为,不需要关心数据内容,索性省略了这一步,直接bind了。另一件诡异的事情发生了,recv总是无法成功,如果设置timeout,则每次都是超时。无可奈何,正准备推翻重来,偶然拿到虚拟机里面运行——居然在虚拟机里面recv成功了。于是,经过一番里里外外的调试,终于实现了一个最安全的网络行为监控方式。
    ——后来发现上述诡异现象的原因在于,如果有多块网卡(包括使用ADSL),需要在bind时指定当前监控网卡的IP。虚拟机里只有一块网卡,自然不会有问题。
    
分享 分享 |  评论 (1) |  阅读 (?)  |  固定链接 |  类别 (凌波微步) |  发表于 02:39  | 最后修改于 2008-07-22 05:54
搜狐博客温馨提示:搜狐博客官方不会要求参加活动的各位博友缴纳任何的手续费用。请勿轻信留言、评论中的中奖信息,更不要拨打陌生电话及向陌生帐户汇款,谨防受骗!识别更多网络骗术,请 点击查看详情
正在读取评论信息...
您还未登录,只能匿名发表评论。或者您可以 登录 后发表。
 
  *中国人爱国心,搜狗输入法爱国主题皮肤下载>>
表  情:
加载中...
回复通知: 同时用小纸条通知对方该回复