导语:本文介绍了现代防火墙是如何分析网络流量的,研究了基于主机的防火墙体系结构,并用真实案例解释了防火墙背后的原理。
作为一种安全工具,防火墙已经证明了它们能够有效保护网络免受恶意攻击者的入侵。正确配置的防火墙可以显著降低感染恶意软件或泄露敏感数据的风险。
本文介绍了现代防火墙如何分析网络流量,基于主机的防火墙是必备的安全解决方案。我们仔细研究了基于主机的防火墙体系结构,并用真实案例解释了防火墙背后的原理。
一、现代防火墙如何分析网络流量
安装在主机上的防火墙,其目的是控制网络流量。基于主机的现代防火墙执行多层次的流量分析,其中包括开放系统互连(OSI)模型各层的数据包分析。在网络层和传输层执行基本过滤。防火墙检查MAC和IP地址以及数据包源和目标端口,以确定是否允许数据包通过。更高级的检查是使用多种状态过滤方法来分析包序列。状态过滤器保存一系列数据包,以确定整个会话是否是恶意的,并验证数据包是否属于真实连接。最后,完成应用层数据包分析,验证数据包的有效载荷。
现在,防火墙通常与防病毒软件集成在一起,因此在数据包分析中涉及更多的逻辑来防御主机免于木马,rootkit以及其他类型病毒的攻击。
二、Windows的防火墙体系结构
有多种方式可以监视Windows中的网络流量。但是,Windows操作系统的通用防火墙体系结构由以下组件组成:
1.驱动
2.服务
3.UI 应用
1.Firewall 驱动
监视网络的传统方法是实现网络驱动程序接口规范(NDIS)驱动程序,该驱动程序注册一个协议。新的网络协议在系统中注册,以便操作系统通过驱动程序中的协议处理函数中继所有网络流量。
监视网络的现代方法是在驱动程序中注册Windows Filtering Platform子层。也就是驱动程序嵌入Windows防火墙体系结构以提供额外过滤的方式。
防火墙可能还需要检测是否有其他协议自己注册,因此也需要监控协议注册。
当流量通过驱动程序时,防火墙决定是否让它通过。如果检测到异常,防火墙应通知用户。但是,如果防火墙只是提供有关某些端口的特定传出数据包的原始信息,那么它对用户没有任何意义,因为没有上下文。
用户关心的上下文是发送此数据包的进程,启动进程的模块以及模块的文件路径。因此,现代防火墙需要监控操作系统事件,从启动到结束进程,加载和卸载模块,并且能够在数据包在驱动程序中被过滤的时刻将这些信息链接到数据。因此,防火墙驱动程序还必须为系统事件注册通知处理程序。
防火墙规则
防火墙必须具备的下一步是规则。防火墙规则指定哪些进程的流量必须被阻止,哪些不能被阻止。用户可以创建防火墙规则,告诉软件对符合规则的入站和出站流量做出以下决策之一:
· 允许连接
· 只允许那些通过IPsec协议进行保护的连接
· 阻止连接
例如,防火墙可以允许来自可信网络的所有流量或允许来自任何IP地址的HTTP或SSH连接或阻止所有传入TCP和UDP流量。
根据计算机、用户、程序和服务的需求,这套规则相当大。因此,规则通常由作为Windows服务实现的防火墙组件提供给驱动程序。
2.Firewall 服务
Windows服务控制过滤器驱动程序,可在运行时暂时禁用过滤或更新规则。有时,流量阻止和过滤逻辑被放入服务中,而不是在驱动程序中。在这种情况下,驱动程序充当事件提供程序,服务决定是否阻止流量,然后将此决定传递给驱动程序。使用这种方法,由于业务逻辑在用户模式下运行,测试业务逻辑将变得更加容易。
但是,如果驱动程序要求服务做出决定的请求过多,则该服务可能成为整个操作系统的瓶颈。发生这种情况的原因是,作出决定的用户模式进程没有专用的CPU。因此,防火墙服务可能会被占用,驱动程序可能无法及时做出决定以释放其保持的流量。这可能会降低流量,并可能导致系统陷入瘫痪。
3.Firewall UI 应用程序
最后,防火墙需要用户界面来显示警报并让用户编辑规则。由于防火墙能够过滤流量,即使UI已关闭,也需要单独的应用程序来显示通知,这是通过服务进程实现的。此外,终止Windows服务进程比常规Windows应用程序更难,这正是UI的用途。
下面,我们来看几个防火墙体系结构实例,来了解一下这些体系结构如何防范恶意软件。
三、防火墙体系结构的实例
对防火墙架构的分析,我们选择了两个应用程序:ZoneAlarm Free Firewall 2018和Comodo Free Firewall。这两个防火墙都具有上面讨论的典型Windows防火墙体系结构的所有组件。
1.ZoneAlarm Free Firewall 2018
ZoneAlarm Free Firewall 2018是适用于所有Windows平台的个人防火墙解决方案。该防火墙可以隐藏开放端口,识别可疑流量并禁用恶意程序。为了理解它的工作原理,让我们来看看它的主要架构组件。
使用Wincheck工具(分析对Windows内核组件所做的更改),找到以下行:
Export addr C:\Windows\system32\drivers\NDIS.SYS.NdisCloseAdapter patched by \SystemRoot\System32\drivers\vsdatant.sys ! Export addr C:\Windows\system32\drivers\NDIS.SYS.NdisDeregisterProtocol patched by \SystemRoot\System32\drivers\vsdatant.sys ! Export addr C:\Windows\system32\drivers\NDIS.SYS.NdisOpenAdapter patched by \SystemRoot\System32\drivers\vsdatant.sys ! Export addr C:\Windows\system32\drivers\NDIS.SYS.NdisRegisterProtocol patched by \SystemRoot\System32\drivers\vsdatant.sys !
进程通知:
[9] 8EB383BC \SystemRoot\System32\drivers\vsdatant.sys
线程通知:
[1] 8EAE9B06 \SystemRoot\System32\drivers\vsdatant.sys
镜像通知:
[1] 8EAE973C \SystemRoot\System32\drivers\vsdatant.sys
注册表通知:
[2] 8EB38A3E \SystemRoot\System32\drivers\vsdatant.sys
通过DumpBin检查vsdatant.sys的导入表,我们发现它使用了NDIS API,如NdisRegisterProtocol,NdisAllocatePacket和NdisCopyFromPacketToPacket。
因此ZoneAlarm使用vsdatant.sys驱动程序,该驱动程序使用NDIS流量过滤方法并在系统中设置挂钩和处理程序。
使用Mark Russinovich的Process Explorer,我们可以找到并检查ZoneAlarm服务:
我们在这些字符串中找到了对vsdatant驱动程序的引用:
它有一个vsdatant驱动程序创建的连接设备的句柄:
接下来是UI进程,它与vsmon服务进行通信。很明显,zatray.exe是一个UI进程,因为它在托盘中有一个图标。在vsmon保持打开的句柄中,有一个名为ZLCommDB的Section对象的句柄,通过进程管理器搜索其他句柄可以发现:
由于zatray和vsmon进程都支持该句柄,因此很可能用于进程间通信。
2. Comodo Free Firewall
Comodo Free Firewall是为Microsoft Windows平台开发的另一种免费的基于主机的防火墙。此安全解决方案阻止未经授权的连接,允许用户指定允许访问互联网的程序并隐藏端口。
通过Wincheck工具进行的操作系统检查显示,与ZoneAlarm不同,Comodo使用多个驱动程序,其中三个涉及防火墙活动:cmdguard.sys,cmdhlp.sys和inspect.sys。
Cmdguard.sys显然用于监视操作系统事件。
进程通知:
[7] 8E1B016A \SystemRoot\system32\DRIVERS\cmdguard.sys
线程通知:
[1] 8E1C8742 \SystemRoot\system32\DRIVERS\cmdguard.sys
镜像通知:
[1] 8E1C8306 \SystemRoot\system32\DRIVERS\cmdguard.sys
注册表通知:
[1] 8E1B1C6E \SystemRoot\system32\DRIVERS\cmdguard.sys
对cmdhlp.sys导入表的分析表明,这是在Windows过滤平台中注册的驱动程序:
inspect.sys导入表分析显示,这是通过NDIS监控流量的驱动程序:
Comodo Firewall的Windows服务进程是CmdAgent:
该服务并不总是与驱动程序保持连接,但是它的映像中有对驱动程序的引用:
Comodo的UI进程是cis.exe,它通过CisSharedMemBuff Section对象与服务进行通信:
四、总结
基于主机的防火墙是一项重要的安全工具,可以保护系统抵御各种病毒。清楚了解防火墙体系结构各组件的工作方式将有助于更好地配置防火墙以防止恶意软件的入侵。