防火墙原理
防火墙(Firewall)是一种隔离技术,使内网和外网分开,可以防止外部网络用户以非法手段通过外部网络进入内部网络,保护内网免受外部非法用户的侵入。
防火墙
安全域
安全区域
安全域是防火墙功能实现的基础,防火墙的安全域包括安全区域和安全域间。
在防火墙中,安全区域(Security Zone),简称为区域(zone),是一个或多个接口的组合,这些接口所包含的用户具有相同的安全属性。每个安全区域具有全局唯一的安全优先级。
设备认为在同一安全区域内部发生的数据流动是可信的,不需要实施任何安全策略。只有当不同安全区域之间发生数据流动时,才会触发防火墙的安全检查,并实施相应的安全策略。
安全域间
任何两个安全区域都构成一个安全域间(Interzone),并具有单独的安全域间视图,大部分的防火墙配置都在安全域间视图下配置。
例如:配置了安全区域zone1和zone2,则在zone1和zone2的安全域间视图中,可以配置ACL包过滤功能,表示对zone1和zone2之间发生的数据流动实施ACL包过滤。
在安全域间使能防火墙功能后,当高优先级的用户访问低优先级区域时,防火墙会记录报文的IP、VPN等信息,生成一个流表。当报文返回时,设备会查看报文的IP、VPN等信息,因为流表里记录有发出报文的信息,所以有对应的表项,返回的报文能通过。低优先级的用户访问高优先级用户时,默认是不允许访问的。因此,把内网设置为高优先级区域,外网设置为低优先级区域,内网用户可以主动访问外网,外网用户则不能主动访问内网。
基于安全域的防火墙的优点
传统的交换机/路由器的策略配置通常都是围绕报文入接口、出接口展开的,随着防火墙的不断发展,已经逐渐摆脱了只连接外网和内网的角色,出现了内网/外网/DMZ(Demilitarized Zone)的模式。在这种组网环境中,传统基于接口的策略配置方式给网络管理员带来了极大的负担,安全策略的维护工作量成倍增加,从而也增加了因为配置引入安全风险的概率。
除了复杂的基于接口的安全策略配置,某些防火墙支持全局的策略配置,全局策略配置的缺点是配置粒度过粗,一台设备只能配置同样的安全策略,满足不了用户在不同安全区域或者不同接口上实施不同安全策略的要求,使用上具有明显的局限性。
与基于接口和基于全局的配置相比,基于安全域的防火墙支持基于安全区域的配置方式,通过将接口加入安全区域并在安全区域域间配置安全策略,既降低了网络管理员配置负担,又能满足复杂组网情况下针对安全区域实施不同攻击防范策略的要求。
防火墙工作模式
路由模式
当设备位于内部网络和外部网络之间,同时为设备与内部网络、外部网络相连的接口分别配置不同网段的IP地址,并重新规划原有的网络拓扑结构。
如图1所示,规划了2个安全区域:Trust区域和Untrust区域,设备的Trust区域接口与公司内部网络相连,Untrust区域接口与外部网络相连。
需要注意的是,Trust区域接口和Untrust区域接口分别处于两个不同的子网中。
图1 路由模式组网图
当报文在三层区域的接口间进行转发时,根据报文的IP地址来查找路由表。此时设备表现为一个路由器。但是,与路由器不同的是,设备转发的IP报文还需要进行过滤等相关处理,通过检查会话表或ACL规则以确定是否允许该报文通过。除此之外,防火墙还需要完成其它攻击防范检查。
包过滤防火墙
包过滤防火墙的基本原理是:通过配置ACL实施数据包的过滤。实施过滤主要是基于数据包中的IP层所承载的上层协议的协议号、源/目的IP地址、源/目的端口号和报文传递的方向等信息。
包过滤应用在防火墙中,对需要转发的数据包,先获取数据包的包头信息,然后和设定的ACL规则进行比较,根据比较的结果决定对数据包进行转发或者丢弃。如图1所示。
图1 包过滤防火墙
设备对包过滤防火墙的支持
普通IP报文过滤:防火墙基于访问控制列表ACL对报文进行检查和过滤。防火墙检查报文的源/目的IP地址、源/目的端口号、协议类型号,根据访问控制列表允许符合条件的报文通过,拒绝不符合匹配条件的报文。防火墙所检查的信息来源于IP、TCP或UDP包头。
分片报文过滤:包过滤提供了对分片报文进行检测过滤的支持。包过滤防火墙将识别报文类型,如:非分片报文、首片分片报文、后续分片报文,对所有类型的报文都做过滤。对于首片分片报文,设备根据报文的三层信息及四层信息,与ACL规则进行匹配,如果允许通过,则记录首片分片报文的状态信息,建立后续分片的匹配信息表。当后续分片报文到达时,防火墙不再进行ACL规则的匹配,而是根据首片分片报文的ACL匹配结果进行转发。另外,对于不匹配ACL规则的报文,防火墙还可以配置缺省处理方式。
★状态检测防火墙
包过滤防火墙属于静态防火墙,目前存在的问题如下:
- 对于多通道的应用层协议(如FTP、SIP等),部分安全策略配置无法预知。
- 无法检测某些来自传输层和应用层的攻击行为(如TCP SYN、Java Applets等)。
- 无法识别来自网络中伪造的ICMP差错报文,从而无法避免ICMP的恶意攻击。
- 对于TCP连接均要求其首报文为SYN报文,非SYN报文的TCP首包将被丢弃。在这种处理方式下,当设备首次加入网络时,网络中原有TCP连接的非首包在经过新加入的防火墙设备时均被丢弃,这会中断已有的连接。
因此,提出了状态检测防火墙——ASPF(Application Specific Packet Filter)的概念。ASPF能够实现的检测有:
- 应用层协议检测,包括FTP、HTTP、SIP和RTSP检测;
- 传输层协议检测,包括TCP和UDP检测。
ASPF的功能
ASPF的主要功能如下:
- 能够检查应用层协议信息,如报文的协议类型和端口号等信息,并且监控基于连接的应用层协议状态。对于所有连接,每一个连接状态信息都将被ASPF维护,并用于动态地决定数据包是否被允许通过防火墙进入内部网络,以阻止恶意的入侵。
- 能够检测传输层协议信息(即通用TCP/UDP检测),能够根据源、目的地址及端口号决定TCP或UDP报文是否可以通过防火墙进入内部网络。
ASPF的其它功能有:
- ASPF不仅能够根据连接的状态对报文进行过滤,还能够对应用层报文的内容加以检测。
- 支持TCP连接首包检测。
- 支持ICMP差错报文检测。正常ICMP差错报文中均携带有本报文对应连接的相关信息,根据这些信息可以匹配到相应的连接。如果匹配失败,则根据当前配置决定是否丢弃该ICMP报文。
在网络边界,ASPF和包过滤防火墙协同工作,能够为企业内部网络提供更全面的、更符合实际需求的安全策略。
ASPF基本概念
单通道协议
单通道协议:从会话建立到删除的全过程中,只有一个通道参与数据交互,如HTTP。多通道协议
多通道协议:包含一个控制通道和若干其它控制或数据通道,即控制信息的交互和数据的传送是在不同的通道上完成的,如FTP、RTSP。
★★★应用层协议检测基本原理
图1 应用层协议检测基本原理示意图
如图1所示,为了保护内部网络,一般情况下需要在设备上配置访问控制列表,以允许内部网的主机访问外部网络,同时拒绝外部网络的主机访问内部网络。但访问控制列表会将用户发起连接后返回的报文过滤掉,导致连接无法正常建立。
当在设备上配置了应用层协议检测后,ASPF可以检测每一个应用层的会话,并创建一个状态表项和一个临时访问控制列表(Temporary Access Control List,TACL):
1. 状态表项在ASPF检测到第一个向外发送的报文时创建,用于维护一次会话中某一时刻会话所处的状态,并检测会话状态的转换是否正确。
2. 临时访问控制列表的表项在创建状态表项的同时创建,会话结束后删除,它相当于一个扩展ACL的permit项。TACL主要用于匹配一个会话中的所有返回的报文,可以为某一应用返回的报文在防火墙的外部接口上建立一个临时的返回通道。
下面以FTP检测为例说明多通道应用层协议检测的过程。
图2 FTP检测过程示意图
如图2所示,FTP连接的建立过程如下:假设FTP client以1333端口向FTP server的21端口发起FTP控制通道的连接,通过协商决定由FTP server的20端口向FTP Client的1600端口发起数据通道的连接,数据传输超时或结束后连接删除。
FTP检测在FTP连接建立到拆除过程中的处理如下:
- 检查从出接口上向外发送的IP报文,确认为基于TCP的FTP报文。
- 检查端口号确认连接为控制连接,建立返回报文的TACL和状态表项。
- 检查FTP控制连接报文,解析FTP指令,根据指令更新状态表项。如果包含数据通道建立指令,则创建数据连接的TACL;对于数据连接,不进行状态检测。
- 对于返回报文,根据协议类型做相应匹配检查,检查将根据相应协议的状态表项和TACL决定报文是否允许通过。
- FTP连接删除时,状态表及TACL随之删除。
单通道应用层协议(如HTTP)的检测过程比较简单,当发起连接时建立TACL,连接删除时随之删除TACL即可。
传输层协议检测基本原理
这里的传输层协议检测是指通用TCP/UDP检测。通用TCP/UDP检测与应用层协议检测不同,是对报文的传输层信息进行的检测,如源、目的地址及端口号等。通用TCP/UDP检测要求返回到ASPF外部接口的报文要与前面从ASPF外部接口发出去的报文完全匹配,即源、目的地址及端口号恰好对应,否则返回的报文将被阻塞。因此对于FTP这样的多通道应用层协议,在不配置应用层检测而直接配置TCP检测的情况下会导致数据连接无法建立。
黑名单
黑名单,指根据报文的源VPN和源IP地址进行过滤的一种方式。同ACL相比,由于进行匹配的域非常简单,可以以很高的速度实现报文的过滤,从而有效地将特定IP地址发送来的报文屏蔽,同时支持用户静态配置黑名单和防火墙动态生成黑名单。
如图1所示,用户B的IP地址已经在黑名单中,从用户B发出的所有报文都会被防火墙丢弃。
图1 黑名单
设备对黑名单的支持
除了用户可以静态配置黑名单外,当设备发现特定IP地址在进行IP扫描攻击或端口扫描攻击时,会将发起攻击的IP主动插入到黑名单中。如果黑名单已使能的话,在此后的一定时间内,来自这个IP地址的任何报文,都可以被黑名单过滤掉。
用户可以配置静态和动态黑名单的老化时间。
无论命中了黑名单的数据包是否为ACL规则允许的访问,防火墙对此类数据包予以丢弃。
用户可以将黑名单配置信息导出到文件中,也可以通过文件导入黑名单配置。
白名单
在防火墙上加入白名单的主机不会再被加入动态和静态黑名单,使用源VPN和IP地址来表示一个白名单项。
白名单主要用在网络上的特定设备发出的合法业务报文具备IP扫描攻击和端口扫描攻击特性的场合,防止该特定设备被防火墙加入黑名单。
白名单只有静态的。
白名单的特点
如果用户将某个主机的VPN和IP地址加入防火墙白名单,防火墙就不会对该主机发出的报文进行IP扫描攻击和端口扫描攻击检查,也不会将其IP地址生成动态黑名单,也不允许用户将白名单主机添加到静态黑名单中。
设备对白名单的支持
当设备收到一个报文后,就会检查是否是来自于白名单项的报文。如果是,设备对该报文就不会进行IP扫描攻击和端口扫描攻击检查,也不会将源IP生成动态黑名单,但是其他安全过滤功能,比如ACL包过滤、ASPF、流量统计和监控等,还是要进行,以达到防火墙的最大安全过滤效果。
用户可以配置白名单的老化时间。
用户可以将白名单配置信息导出到文件中,也可以通过文件导入白名单配置。
端口映射
应用层协议通常使用知名端口号进行通信。端口映射允许用户对不同的应用层协议定义一组新的端口号,还可以指定使用非知名端口的主机范围。
端口映射只有和ASPF、NAT等针对业务敏感的特性联合使用的时候才具有实际意义。例如在一个企业私网中,内部FTP服务器10.10.10.10通过2121端口提供FTP服务。用户通过NAT服务器访问FTP服务器时,只能使用2121做为端口号。由于默认情况下FTP报文的端口号是21,这时FTP服务器无法将21端口的报文识别为FTP应用。在这样的场合则需要使用端口映射功能把2121端口映射成FTP协议,则NAT服务器就把2121端口的报文识别为FTP协议报文转发给FTP服务器,实现用户对FTP服务器的访问。
设备对端口映射的支持都是通过ACL来实现的,只有匹配某条ACL的报文,才会实施端口映射。端口映射使用基本ACL(编号2000~2999)。端口映射在使用ACL过滤报文时,使用报文的目的IP地址去匹配基本ACL规则中配置的IP地址。
如图1所示,外部PC通过Router访问内部WWW服务器(端口号为8080),在外部PC的报文通过设备时,命中ACL的报文会进行端口映射,只有目的地址是10.38.2.4的报文才可以通过设备进行端口映射访问WWW服务器。
图1 端口映射示意图
攻击防范
攻击防范是防火墙中一种重要的网络安全功能。它可以检测出多种类型的网络攻击行为,并能够采取相应的措施保护内部网络免受恶意攻击,以保证内部网络及系统的正常运行。
网络攻击的种类
网络攻击一般分为拒绝服务型攻击、扫描窥探攻击和畸形报文攻击三大类:
拒绝服务型攻击
拒绝服务型DoS(Denial of Service)攻击是使用大量的数据包攻击系统,使系统无法接受正常用户的请求,或者主机挂起不能正常的工作。主要DoS攻击有SYN Flood、Fraggle等。
拒绝服务攻击和其他类型的攻击不同之处在于:攻击者并不是去寻找进入内部网络的入口,而是阻止合法用户访问资源或防火墙。扫描窥探攻击
扫描窥探攻击是利用ping扫描(包括ICMP和TCP)来标识网络上存活着的系统,从而准确地指出潜在的目标。利用TCP和UDP等进行端口扫描,就能检测出操作系统的种类和潜在的服务种类。
攻击者通过扫描窥探就能大致了解目标系统提供的服务种类,为进一步侵入系统做好准备。畸形报文攻击
畸形报文攻击是通过向目标系统发送有缺陷的IP报文,使得目标系统在处理这样的IP包时会出现崩溃,给目标系统带来损失。主要的畸形报文攻击有Ping of Death、Teardrop等。
设备对攻击防范的支持:
Land攻击
Land攻击,就是把TCP的SYN包的源地址和目的地址都设置为目标计算机的IP地址。这将导致目标计算机向它自己发送SYN-ACK报文,目标计算机又向自己发回ACK报文并创建一个空连接,每一个这样的连接都将保留直到超时。如图1所示。
图1 Land攻击示意图
各种类型的主机对Land攻击反应不同,许多UNIX主机将崩溃,Windows NT主机会变得极其缓慢。
Smurf攻击
简单的Smurf攻击,用来攻击一个网络。攻击者向目标网络发送ICMP应答请求报文,该报文的目标地址设置为目标网络的广播地址,这样,目标网络的所有主机都对此ICMP应答请求作出答复,导致网络阻塞。如图2所示。
图2 简单Smurf攻击示意图
高级的Smurf攻击,主要用来攻击目标主机。攻击者向目标主机所在的网络发送ICMP应答请求报文,该报文的源地址设置为目标主机的地址,这样,所有的应答报文都将发送给目标主机。最终导致目标主机处理速度缓慢,甚至崩溃。如图3所示。
图3 高级Smurf攻击示意图
Smurf攻击报文的发送需要一定的流量和持续时间,才能真正构成攻击。理论上讲,目标网络的主机越多,攻击的效果越明显。
WinNuke攻击
NetBIOS作为一种基本的网络资源访问接口,广泛的应用于文件共享,打印共享,以及不同操作系统之间的数据交换。一般情况下,NetBIOS是运行在LLC2链路协议之上的,是一种基于组播的网络访问接口。为了在TCP/IP协议栈上实现NetBIOS,RFC规定了一系列交互标准,以及几个常用的TCP/UDP端口,如下。
- 139:NetBIOS会话服务的TCP端口。
- 137:NetBIOS名字服务的UDP端口。
- 136:NetBIOS数据报服务的UDP端口。
Windows操作系统实现了NetBIOS over TCP/IP功能,并开放了139端口。
WinNuke攻击就是利用了Windows操作系统的一个漏洞,向这个139端口发送一些携带TCP带外(OOB)数据报文,但这些攻击报文与正常携带OOB数据报文不同的是,其指针字段与数据的实际位置不符,即存在重叠,Windows操作系统在处理这些数据的时候,就会崩溃。
SYN Flood攻击
SYN Flood攻击利用TCP三次握手的一个漏洞向目标计算机发动攻击。攻击者向目标计算机发送TCP连接请求(SYN报文),然后对于目标返回的SYN-ACK报文不作回应。目标计算机如果没有收到攻击者的ACK回应,就会一直等待,形成半连接,直到连接超时才释放。如图4所示。
图4 半连接示意图
攻击者利用这种方式发送大量TCP SYN报文,让目标计算机上生成大量的半连接,迫使其大量资源浪费在这些半连接上。目标计算机一旦资源耗尽,就会出现速度极慢、正常的用户不能接入等情况。
攻击者还可以伪造SYN报文,其源地址是伪造的或者不存在的地址,向目标计算机发起攻击。
ICMP Flood攻击
通常情况下,网络管理员会用PING程序对网络进行监控和故障排除,大概过程如下:
- 源计算机向接收计算机发出ICMP响应请求报文(ICMP ECHO)。
- 接收计算机接收到ICMP响应请求报文后,会向源计算机回应一个ICMP应答报文(ECHO Reply)。
这个过程是需要CPU处理的,在有些情况下还可能消耗掉大量的资源。
如果攻击者向目标计算机发送大量的ICMP ECHO报文(产生ICMP洪水),则目标计算机会忙于处理这些ECHO报文,而无法继续处理其它的数据报文。如图5所示。
图5 ICMP Flood攻击示意图
UDP Flood攻击
UDP Flood攻击的原理与ICMP Flood攻击类似,攻击者通过发送大量的UDP报文给目标计算机,导致目标计算机忙于处理这些UDP报文而无法继续处理正常的报文。
地址扫描与端口扫描攻击
攻击者运用扫描工具探测目标地址和端口,目标地址会对这些探测作出响应,攻击者根据这些响应用来确定哪些目标系统是存活着并且连接在网络上、目标主机开放或者关闭了哪些端口。
Ping of Death攻击
所谓Ping of Death,就是利用一些尺寸超大的ICMP报文对系统进行的一种攻击。
IP报文的长度字段为16位,这表明一个IP报文的最大长度为65535。对于ICMP回应请求报文,如果数据长度大于65507,就会使ICMP数据+IP头长度(20)+ICMP头长度(8)> 65535。对于有些防火墙或系统,在接收到一个这样的报文后,由于处理不当,会造成系统崩溃、死机或重启。如图6所示。
图6 ICMP超大报文示意图
Large-ICMP攻击
同ping of death类似,Large-ICMP也是利用一些大尺寸的ICMP报文对系统进行的一种攻击,与ping of death不同的是,Large-ICMP报文的长度不会超过IP报文的最大长度65535,但是对一些操作系统也会造成破环。
需要在防火墙上配置允许通过的ICMP报文的最大长度。
ICMP-Unreachable攻击
某些系统在收到网络(报文类型字段为3,代码字段为0)或主机(报文类型字段为3,代码字段为1)不可达的ICMP报文后,对于后续发往此目的地的报文直接认为不可达。如图7所示。
图7 ICMP-Unreachable攻击示意图
攻击者利用这种机制,向目标主机发送虚假的ICMP-Unreachable报文,干扰了目标主机的路由信息,影响了报文发送。
ICMP-Redirect攻击
ICMP-Redirect攻击和ICMP-Unreachable攻击类似。
网络设备可以向同一个子网的主机发送ICMP重定向报文,请求主机修改路由。
攻击者利用这个原理,跨越网段向另外一个网络的目标主机发送虚假的重定向报文,以改变目标主机的路由表。这种攻击干扰了目标主机的路由信息,影响了报文发送。如图8所示。
图8 ICMP-Redirect攻击示意图
IP-fragment攻击
IP报文中有几个字段与分片有关:DF(Don’t Fragmentate)位、MF位、Fragment Offset、Length。
如果上述字段的值出现矛盾,而设备处理不当,会对设备造成一定的影响,甚至瘫痪。矛盾的情况有:
- DF位被置位,而MF位同时被置位或Fragment Offset不为0。
- DF位为0,而Fragment Offset + Length > 65535。
另外,由于分片报文可以增加目的设备缓冲和重组的负担,应直接丢弃目的地址为设备本身的分片报文。
Teardrop攻击
在网络传输的过程中,如果IP报文的长度超过链路层的MTU(最大传输单元),就会进行分片。在IP报头中有一个偏移字段(OFFSET)和一个分片标志(MF),如果MF标志设置为1,则表明这个IP报文是一个大IP包的分片,其中偏移字段指出了这个片断在整个IP包中的位置。接收端可以根据报文头中的这些信息还原该IP包。
比如,一个较大的报文在MTU较小的链路上传输的时候,被分成了两个IP报文,这两个IP报文将在目的端进行组装,还原为原始的IP报文。如图9所示。
图9 正常的分片组装示意图
如果一个攻击者打破这种正常情况,把偏移字段设置成不正确的值,即可能出现重合或断开的情况。某些TCP/IP协议栈在收到类似这种含有重叠偏移的伪造分段时会崩溃,这就是所谓的Teardrop攻击。如图10所示。
图10 Teardrop攻击示意图
Fraggle攻击
Fraggle攻击的原理与Smurf攻击的原理类似,不过,Fraggle攻击发送的是UDP报文而非ICMP报文。因为发送的是UDP报文,Fraggle攻击可以穿过一些阻止ICMP报文进入的防火墙。
Fraggle攻击利用的原理是:UDP端口7(ECHO)和端口19(Chargen)在收到UDP报文后,都会产生回应。如下:
- UDP的7号端口收到报文后,会象ICMP Echo Reply一样回应收到的内容。
- UDP的19号端口在收到报文后,会产生一串字符流。
这两个UDP端口都会产生大量应答报文,挤占网络带宽。
攻击者可以向目标主机所在的网络发送源地址为被攻击主机、而目的地址为其所在子网的广播地址或子网网络地址的UDP报文,目的端口号为7(ECHO)或19(Chargen)。子网中启用了此功能的每个系统都会向受害主机发送回应报文,从而产生大量的流量,导致受害网络的阻塞或受害主机崩溃。
如果目标主机所在网络上的主机没有启动这些功能,这些主机将产生一个ICMP不可达消息,仍然消耗带宽。也可将源端口改为端口19(Chargen),目的端口为7(ECHO),这样会自动不停地产生回应报文,其危害性更大。
Tracert攻击
Tracert是利用TTL(Time To Live)为0时返回的ICMP超时报文,和达到目的地时返回的ICMP端口不可达报文来发现报文到达目的地所经过的路径。
攻击者可以利用Tracert窥探网络的结构。对网络造成潜在的危险。
畸形TCP报文攻击
畸形TCP报文是通过故意错误设置TCP头中的6个标记位,造成接收方TCP协议栈的处理错误,达到攻击的目的。
参考
华为HedEx文档