- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
智能主动防御系统
整个实现用户态程序包括以下三部分的功能:
1) 与攻击者进行交互, 提取未知入侵特征码
2) 将配置信息传递给NDIS中间层驱动
3) 将NDIS中间层驱动反馈信息提示给用户
智能防火墙为了实现主机网络的全面保护,对每个网络接口都启动了单独的保护线程,因此对于装有多网卡的计算机,智能防火墙对每个接口都起到了保护作用。
2. 维护存活主机列表
程序内部维护一张存活主机列表,并且定时对其进行更新(10s)。由于列表中元素增删操作比较频繁,因此存活主机列表采用便于增删操作的"单链表"描述。
更新存活主机列表由扫描和监听两个线程配合进行:
1) 扫描线程:程序利用WinPcap逐一向网内所有主机发出ARP请求数据包。
2) 监听线程: 程序利用WinPcap对到达本机的ARP应答数据包进行分析,并对存活主机列表进行更新。
3. 解决智能防火墙的相互干扰
当局域网内运行有两个或两个以上的智能防火墙实例时,其中一个实例在更新存活主机列表时会向每台主机发出ARP请求,其中也包括向不存活主机发出的请求。如果不做任何处理,其它的智能防火墙就会认为这是攻击,就会向其进行虚假应答,从而导致该智能防火墙不能得到正确的存活主机列表。如果互相干扰那么智能防火墙就不能正常工作了。
为了解决这个问题,我们在智能防火墙发出的ARP请求数据包的附加数据区设置了标志。智能防火墙就能明确是敌是友了。
4. 发现未知入侵
当程序的监听线程检测到有ARP请求时,检查存活主机列表,如果发现是对未存活主机的ARP请求,则伪装成目的主机给出虚假应答。
当智能防火墙给攻击者发出虚假的ARP应答时,攻击主机发送给不存活主机的数据都会发送给本机(智能防火墙)。智能防火墙的监听线程会对接收到的数据包进行分析并根据事先设置好的应答规则对其进行应答,并对攻击主机发送的数据包进行特征提取,存入特征数据库。
5. 特征提取采用的方法
入侵数据包的特征提取是智能防火墙用户态程序的核心工作,特征提取的好坏直接影响着整个防火墙系统的性能。智能防火墙采取的特征提取方法是:去掉数据包传输层以下的协议头数据,对剩余部分数据(应用层协议头和应用层数据体)进行"摘要算法(MD5)"计算,计算的结果就是我们所要提取的入侵特征。这种特征提取方法具有结果唯一性和低存贮空间的特点。为在底层驱动中进行数据包特征的比对提供了便利。
6. 将配置信息传递给NDIS中间层驱动
智能防火墙的数据包过滤功能的实现放在系统核心层(NDIS中间层驱动),由于在驱动层中对硬盘上的数据操作不方便,因此程序在启动时,用户态程序需要将配置参数,入侵特征码,本机/网关IP,本机/网关MAC等信息发送给驱动程序。并且当程序的设置参数发生改变以及用户态程序捕获到新的入侵特征码时,也要将相应的数据送给驱动程序。
7. 将NDIS中间层驱动反馈的信息提示给用户
当驱动程序拦截到攻击时会给用户态层程序发出通知,用户态程序读取驱动发送的攻击信息后,以友好的托盘弹出式窗口提示用户。
8. NDIS驱动的实现
在学习和比较了当前的网络数据包拦截技术后,我们的智能防火墙采用了安全系统比较高的NDIS中间层驱动程序技术。由于基于NDIS中间层驱动模式的个人防火墙可截获较为底层的封包,从而可以完成更为低级的操作,例如实现拦截ARP欺骗,阻止ICMP木马通信。
智能防火墙NDIS中间层驱动程序的编写是通过扩展Windows 2003 DDK中的Passthru完成的。Passthru是微软提供的一个用NDIS中间层驱动程序实现对网络封包的截获的程序,不过它直接将过往的数据包不做任何处理的转发,要实现我们的数据包过滤功能,需要对其进行进一步的扩展。
9. 根据特征库,过滤到发给本机的数据
由于在驱动程序中不便于直接对硬盘上的数据进行操作,因此智能防火墙没有采取直接读取入侵特征库的方式获取入侵特征码,而是在用户态程序启动时,通过用户态程序将入侵特征码传递进来的,并将特征码保存在一个便于进行查找操作的"哈希表"中。
NDIS中间层驱动程序捕获发给本机的所有数据包。并计算每一个数据包的特征码,并在"哈希表"中查找该特征码,如果查找到,则说明该数据包是一个入侵数据包,直接将其丢弃。如果没有找到,则对该包进行放行。
10. 传递攻击信息给用户态程序
当NDIS中间层驱动拦截到入侵数据包时,会通知用户态程序,并将入侵数据包的相关信息(源IP,数据包类型,入侵时间)传递给用户态程序。用户态程序接收到通知后给用户以友好的提示并将该次入侵信息写入日志。
2.2 病毒主动防御的原理与实现
为了达到主动防御的目的,我们采取了拦截系统调用的方法,主要钩挂了SSDT表和Shadow SSDT表中的函数,把对这些函数的调用替换为调用我们自己定义的函数。
以下是SSDT表中钩挂的函数:
NtCreateSection,NtOpenProcess,NtTerminateProcess,NtCreateKey,NtDeleteKey,NtSetValueKey,NtDeleteValueKey,NtLoadDriver。
下面是Shadow SSDT表中钩挂的函数:
NtSetUserWindowsHookEx。
通过替换系统中的这些函数,来实现对一个程序的行为监控,并进行主动判断来检测病毒或者木马,其原理如图4所示。
图4 病毒主动防御原理
可以看到,应用层的软件都会经过我们拦截模块的过滤,然后把信息传给我们的用户接口。用户态程序主要用于显示程序执行时调用的函数,以及发现危险操作时进行告警。内核态的驱动程序主要用于信息的截获,以及分析处理,判断危险调用,然后通知用户。内核态程序和用户态程序采用了事件进行同步,因此可以实时的进行信息的传递,大大提高了效率,同时用一个缓冲区队列把实时信息传到用户态的程序。
用户态程序和内核态程序交互的示意图如图5所示。
作者:赵宇宸 齐鹏 毛宁祥 胡建伟 西安电子科技大学 来源:电子产品世界