1.1 安全防护软件发展现状
随着互联网的飞速发展,计算机病毒技术和黑客入侵技术也迅速发展,逐渐融合了网络蠕虫、木马、拒绝服务工具、缓冲区溢出工具等各种攻击手段,造成的损失也由最初的数据丢失,发展到现在的信息泄密,数据破坏,甚至互联网的瘫痪,破坏力越来越大。
伴随着病毒技术和黑客入侵技术的发展,安全防护技术也在迅速发展,各种各样的安全防护软件如“雨后春笋”般出现。这些安全防护软件的原理可以概括为“扫描”和“过滤”,它们利用特征库对文件进行扫描,对进入主机的数据包进行过滤,从而发现病毒和入侵。特征库成了这些防护软件功能的最大限制,谁拥有更完备的特征库谁就能防御更多病毒和入侵。特征库中存储的都是已知病毒和入侵的特征,因此这些安全防护软件仅能对已知的病毒和入侵进行防御,对未知的病毒和入侵束手无策。
防御未知病毒和未知入侵是当前安全防护软件迫切需要解决的问题。
1.2 方案设计与选择
智能主动防御系统(以下简称本系统)可分为网络防护和主机防护两部分,其中网络防护的主要功能是防御来自网络的入侵,主机防护的主要功能是防御恶意程序(如病毒)的破坏。
整个系统的总体架构如图1所示。各部分的功能如下:
1. 网络防护:用户态实现“伪装服务,提取特征”功能,NDIS驱动实现“ARP模拟不存活主机和数据包过滤”功能。
2. 主机防护:主机防护的核心部分是在系统内核驱动中完成检测恶意程序。
图1 系统总体构架
从图1可以看出,本系统是一个全方位的防护软件,它集防火墙与杀毒软件功能于一身。与传统的防护软件相比,其最大的特色是:能够主动防御未知入侵和检测未知病毒。
本系统通过自主学习建立自己的特征库从而实现防御未知入侵。系统摒弃了野蛮的病毒扫描模式,采用主动防御技术拦截程序的危险行为,实现了检测未知病毒。
本系统的“智能”主要体现在:
1) 自主学习:主动收集未知入侵特征,防御未知入侵。
2) 主动防御:变被动为主动,将未知病毒扼杀于摇篮中。
此外,本系统还提供了功能强大的系统辅助工具,例如:进程管理,网络连接管理,服务管理,启动项管理,HOSTS文件管理等。
2 系统原理与实现
2.1 智能防火墙原理与实现
本防火墙的智能主要体现在:它能够通过自主学习实现对未知入侵的防御。
2.1.1 传统防火墙的工作原理
传统防火墙有一个入侵特征库和一个过滤规则表。当网络数据包到来时,防火墙会将包中的数据与特征库和过滤规则进行匹配,符合要求的放行,不符合规则的就丢弃。
传统防火墙的特征库是由防火墙开发商维护并提供给用户下载的。库中的数据都是对已知入侵的特征提取。因此传统的防火墙也只能防御已知的入侵。然而,网络中无时无刻不在产生着新的威胁,杀毒软件开发商能够分析到的危险只是其中很少的一部分。因此,传统的防火墙防御入侵的能力是非常有限的。
2.1.2 智能防火墙的工作原理
智能防火墙也有一个入侵特征库,不过维护这个特征库的不是防火墙的开发人员而是防火墙本身。
对于已知的威胁我们可以事先将其特征写入到特征库中。对于未知的新的安全威胁,智能防火墙可以根据黑客入侵的特征,比如在入侵的开始阶段往往是盲目的,黑客会进行大范围的攻击扫描,由此不可避免的会给不存活IP地址发送数据包。智能防火墙认为对不存活主机的连接是具有恶意的,是入侵的前兆。防火墙的内部维护着一张局域网内的存活主机列表,当它检测到网内有向不存活主机发送的ARP请求时,会伪装成目的主机发出ARP应答,并与入侵者进行进一步的交互,从交互的数据中提取特征,存入特征数据库。
在上述的过程中,智能防火墙虽然不知道具体的入侵类型,但是由于它掌握了入侵的数据特征,因此下次对本网的相同威胁就能被检测到。其原理如图2所示。
图2 智能防火墙工作原理
2.1.3 智能防火墙的实现
智能防火墙的实现可以分为用户态程序和NDIS中间层驱动程序两部分,如图3所示。
图3 智能防火墙的实现
1. 用户态程序的实现
用户态程序使用了WinPcap开发库和多线程技术。利用WinPcap可以实现捕获原始数据包(包括在共享网络上各主机发送/接收的以及相互之间交换的数据包)以及在网络上发送原始的数据包;
本程序的监听线程中使用了WinPcap的数据包捕获功能,对到达主机每个网络接口的数据包进行分析。本程序的扫描线程则使用了WinPcap的发送原始数据包的功能,进行局域网存活主机的扫描。
整个实现用户态程序包括以下三部分的功能:
1) 与攻击者进行交互, 提取未知入侵特征码
2) 将配置信息传递给NDIS中间层驱动
3) 将NDIS中间层驱动反馈信息提示给用户
智能防火墙为了实现主机网络的全面保护,对每个网络接口都启动了单独的保护线程,因此对于装有多网卡的计算机,智能防火墙对每个接口都起到了保护作用。
2. 维护存活主机列表
程序内部维护一张存活主机列表,并且定时对其进行更新(10s)。由于列表中元素增删操作比较频繁,因此存活主机列表采用便于增删操作的“单链表”描述。
更新存活主机列表由扫描和监听两个线程配合进行:
1) 扫描线程:程序利用WinPcap逐一向网内所有主机发出ARP请求数据包。
2) 监听线程: 程序利用WinPcap对到达本机的ARP应答数据包进行分析,并对存活主机列表进行更新。
3. 解决智能防火墙的相互干扰
当局域网内运行有两个或两个以上的智能防火墙实例时,其中一个实例在更新存活主机列表时会向每台主机发出ARP请求,其中也包括向不存活主机发出的请求。如果不做任何处理,其它的智能防火墙就会认为这是攻击,就会向其进行虚假应答,从而导致该智能防火墙不能得到正确的存活主机列表。如果互相干扰那么智能防火墙就不能正常工作了。
为了解决这个问题,我们在智能防火墙发出的ARP请求数据包的附加数据区设置了标志。智能防火墙就能明确是敌是友了。
4. 发现未知入侵
当程序的监听线程检测到有ARP请求时,检查存活主机列表,如果发现是对未存活主机的ARP请求,则伪装成目的主机给出虚假应答。
当智能防火墙给攻击者发出虚假的ARP应答时,攻击主机发送给不存活主机的数据都会发送给本机(智能防火墙)。智能防火墙的监听线程会对接收到的数据包进行分析并根据事先设置好的应答规则对其进行应答,并对攻击主机发送的数据包进行特征提取,存入特征数据库。
5. 特征提取采用的方法
入侵数据包的特征提取是智能防火墙用户态程序的核心工作,特征提取的好坏直接影响着整个防火墙系统的性能。智能防火墙采取的特征提取方法是:去掉数据包传输层以下的协议头数据,对剩余部分数据(应用层协议头和应用层数据体)进行“摘要算法(MD5)”计算,计算的结果就是我们所要提取的入侵特征。这种特征提取方法具有结果唯一性和低存贮空间的特点。为在底层驱动中进行数据包特征的比对提供了便利。
下面是Shadow SSDT表中钩挂的函数:
NtSetUserWindowsHookEx。
通过替换系统中的这些函数,来实现对一个程序的行为监控,并进行主动判断来检测病毒或者木马,其原理如图4所示。
图4 病毒主动防御原理
可以看到,应用层的软件都会经过我们拦截模块的过滤,然后把信息传给我们的用户接口。用户态程序主要用于显示程序执行时调用的函数,以及发现危险操作时进行告警。内核态的驱动程序主要用于信息的截获,以及分析处理,判断危险调用,然后通知用户。内核态程序和用户态程序采用了事件进行同步,因此可以实时的进行信息的传递,大大提高了效率,同时用一个缓冲区队列把实时信息传到用户态的程序。
用户态程序和内核态程序交互的示意图如图5所示。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)