畸形报文攻击
通过向目标系统发送有缺陷的ip报文,使得目标系统在处理这样的IP报文时发生错误,或者造成系统崩溃,影响目标系统的正常运行,主要的畸形报文攻击有ping of death,teardrop等。
1、Smurf
利用ICMP的echo-request和echo-reply。借力用力
攻击者伪造 ICMP echo-request报文,源地址填目标服务器的地址,目的填目标服务器所在网络的广播地址,伪装成目标服务器在网络中发送广播报文,这个广播报文会得到254个响应报文,这些响应报文会返回给目标服务器,从而对目标服务器造成压力,有可能导致服务器不能正常提供服务。
防御思路
检查icmp echo-repuest的目的地址是否为子网广播地址(如192.168.1.255)或者子网网络地址(如192.168.1.0),如果是,直接拒绝,并将攻击记录到日志。
解决方案:配置命令
firewall defend smurf enable
2、Land
利用系统bug, 自己建立大量TCP三次握手的空连接。攻击者组装源目IP地址都是目的主机的tcp请求并将此请求发送给目标主机,导致目标主机自己向自己建立tcp空连接,占用系统资源或者使目的主机崩溃。
防御思路:
对每一个IP报文进行检测,若其源目地址相同,或源地址为环回地址(127.0.0.1),则直接拒绝,并将攻击记录到日志。
解决方案:配置命令
firewall defend land enable
3、Fraggle
利用UDP7和19端口产生的大量的无用应答报文。
类似于Smurf攻击,使用udp应答消息而非icmp,udp端口7(echo)和端口19(charge)在收到udp报文后,会产生大量无用的应答报文,占满网络带宽。
防御思路:
检查进入防火墙的udp报文,若目的端口号为7或者19,则直接拒绝,并将攻击记录到日志,否则允许通过。
解决方案:配置命令
firewall defend fraggle enable
4、IP分片攻击
利用字段(DF位、MF位、片偏置量、总长度)是否一致。
IP报文中有几个字段与分片有关(df位、mf位、fragment offset位、length)如果上述几个字段的值出现矛盾,而设备处理不当,会对设备造成一定的影响,甚至瘫痪。
防御思路:
检查IP报文中与分片有关的字段是否有以下矛盾,若发现含有矛盾,则丢弃,并将攻击记录到日志。
df=1(拒绝分片)的同时,mf=1(更多分片),或者fragment offset 不等于0
df=0的同时,fragment offset +length > 65535。即拒绝分片且报文长度大于65535.
解决方案:配置命令
firewall defend ip-fragment enable
5、IP欺骗攻击(全局)
利用只检测目的的IP地址是否存在,不检查源地址,造成伪装源地址。为了获得访问权,或者隐藏入侵者的身份信息,入侵者生成带有伪造源地址的报文,并使用该伪造源地址访问攻击目标,进行扫描、窥探等预备攻击。
防御思路:
检测每个接口流入的IP报文的源地址与目的地址,并对报文的源地址反查路由表(URPF),入接口与以该IP地址为目的地址的最佳出接口不相同的IP报文被视为ip spoofing攻击,将被拒绝,并进行日志记录。
解决方案:配置命令
firewall defend ip-spoofing enable
6、Ping of death
利用windows 98系统的BUG,收到65535报文不知怎么处理。IP报文的长度字段为16位,即IP报文的最大长度为65535Byte。ping of death利用一些长度超大的icmp报文对系统进行攻击。
防御思路:
检测icmp请求报文长度是否超过65535Byte,若超过,则丢弃报文并记录日志。
解决方案:配置命令
firewall defend ping-of-death enable
7、TCP Flag攻击
利用6个标志位:URG、ACK、PSH、RST、SYN、FIN不一致性,或者矛盾。不同的系统对这些标志位组合的应答是不同的,可用于操作系统探测。
防御思路:
检查TCP报文的各个标志位,若出现以下任意一种情况,直接丢弃该报文并记录日志:
6个标志位全为1或者6个标志位全为0;
SYN和FIN位同时为1,SYN和RST同时为1;
FIN和URQ同时为1,RST和FIN同时为1.
解决方案:配置命令
firewall defend tcp-flag enable
8、Teardrop
利用分片重叠。利用在TCP/IP堆栈中信任IP碎片报文头所包含的信息实现。
对于一些大的IP数据包,为了满足链路层的MTU(Maximum Transmission Unit)的要求,需要传送过程中对其进行分片,分成几个IP包。在每个IP报头中有一个偏移字段和一个拆分标志(MF),其中偏移字段指出了这个片段在整个IP包中的位置。如果攻击者截取IP数据包后,把偏移字段设置成不正确的值,接收端在收到这些分拆的数据包后,就不能按数据包中的偏移字段值正确组合出被拆分的数据包,这样,接收端会不停的尝试,以至操作系统因资源耗尽而崩溃。
防御思路:
启用Teardrop攻击防范后,设备会对接收到的分片报文进行分析,计算报文的偏移量是否有误。如果有误则直接丢弃该报文,并记录攻击日志。
解决方案:配置命令
firewall defend teardrop enable
9、Winnuke
利用net-bios 139端口和IGMP分片报文。winnuke攻击通常向装有windows系统的特定目标的netbios端口(139)发送oob(out-of-band)数据包,引起一个netbios片段重叠,致使已与其他主机建立连接的目标主机崩溃。还有一种是IGMP分片报文,一般情况下,IGMP报文是不会分片的,所以,不少系统对IGMP分片报文的处理问题。
防御思路:
winnuke攻击1:检测数据包目的端口是否为139,并且检查tcp-urg位是否被设置。
winnuke攻击2:检测进入的igmp报文是否为分片报文,如果是分片报文,则直接丢弃。
解决方案:配置命令
firewall defend winnuke enable
检查:
[FW1]display firewall defend flag
2021-12-20 21:02:14.700 +08:00
port-scan : enable
ip-sweep : enable
teardrop : enable
time-stamp : disable
route-record : disable
source-route : disable
ip-fragment : enable
tcp-flag : enable
winnuke : enable
fraggle : enable
tracert : disable
icmp-unreachable : disable
icmp-unreachable(DF) : disable
icmp-redirect : disable
large-icmp : disable
ping-of-death : enable
smurf : enable
land : enable
ip-spoofing : enable
arp-spoofing : disable
特殊报文攻击
ip报头中的option或者icmp特殊类型
攻击者利用一些合法的报文对网络进行侦察或者数据检测的攻击,这些报文都是合法的应用类型报文,只是正常网络很少用到。
1、超大ICMP
利用长度超大的icmp报文对目标系统进行攻击,对于有些系统,在接收到超大icmp报文后,由于处理不当,会造成系统崩溃、死机或重启。
防御思路:
根据实际网络需要配置允许通过的icmp报文的最大长度,当实际icmp报文的长度超过该值时,防火墙认为发生了超大icmp报文攻击,将丢弃该报文。
防御配置:
firewall defend large-icmp enable
firewall defend large-icmp max-length 1000 #默认长度4000
2、ICMP不可达
不同的系统对icmp不可达报文的处理方式不同,有的系统在收到网络或主机不可达的icmp报文后,对后续发往此目的地址的报文直接认为不可达,从而切断了目的地与主机的连接。攻击者利用这一点,伪造不可达icmp报文,切断受害者与目的地的连接,造成攻击。
防御思路:
启动icmp报文不可达报文攻击防范功能,防火墙对icmp不可达报文进行丢弃并记录攻击日志。
防御配置:
firewall defend icmp-unreachable enable
建议不要开启
3、ICMP重定向
防御配置:
firewall defend icmp-redirect enable
建议不要开启
4、tracert
窥探网络内部结构。利用ttl=0时返回的icmp超时报文,和到达目的地址时返回的icmp端口不可达报文来发现报文到达目的地所经过的路径,可以窥探网络的结构。
防御思路:
对于检测到的超时的icmp报文或UDP报文,或目的端口不可达的报文,给予丢弃处理。
在有防火墙环境中,tracert时到达防火墙不显示地址,而是显示***。
防御配置:
firewall defend tracert enable
扫描窥探攻击
可以分为ip扫描和端口扫描。运用ping程序探测目标地址,确定目标系统是否存活,也可使用tcp/udp报文对目标系统发起探测(如tcp ping)。主要实现识别潜在攻击目标和识别目标弱点。
利用ping扫射(包括icmp和tcp)来识别网络上存活着的系统,从而准确定位潜在的目标,利用tcp和udp端口扫描,就能检测出操作系统和被监听的潜在服务,攻击者通过扫描窥探就能大致了解目标系统提供的服务种类和潜在的安全漏洞,为进一步侵入系统做好准备。
1、IP地址扫描
防御思路
检测进入防火墙的icmp、tcp和udp报文,根据源IP地址获取统计表项的索引,如果目的IP地址与前一报文的目的IP地址不同(扫描时必然是源地址不变,不停变化目的地址),则将表项中的总报文个数增加1.如果在一定时间内报文的个数达到阈值,记录日志,并根据配置决定是否将源IP地址自动加入黑名单。在黑名单中不是永久的,可以设置老化时间,超时后删除。
配置:
firewall blacklist enable #开启黑名单(默认不开启)
firewall defend ip-sweep enable #开启IP地址扫描防御功能
firewall defend ip-sweep max-rate 1000 #阈值默认为4000,修改1000
firewall defend ip-sweep blacklist-timeout 10 #默认黑名单老化时间为20
firewall defend action discard #默认动作是丢弃
2、端口扫描
port scan攻击通常使用一些软件,向大范围内主机的各个tcp/udp端口发起连接,根据应答报文判断主机是否使用这些端口提供服务。
防御思路
检测进入防火墙的tcp/udp报文,根据源地址获取统计表项的索引,如果目的端口与前一报文不同,将表项中的报文个数加1,如果报文的个数超过设置的阈值,记录日志,并根据配置决定是否将源IP地址加入黑名单。
配置:
firewall defend port-scan enable #开启功能
firewall defend port-scan max-rate 2000 #默认的阈值为4000
firewall defend port-scan blacklist-timeout 15 #默认老化时间为20
firewall defend action discard
检查:
[FW1]display firewall defend flag
2021-12-20 20:17:38.080 +08:00
port-scan : enable
ip-sweep : enable
teardrop : disable
time-stamp : disable
route-record : disable
source-route : disable
ip-fragment : disable
tcp-flag : disable
winnuke : disable
fraggle : disable
tracert : disable
icmp-unreachable : disable
icmp-unreachable(DF) : disable
icmp-redirect : disable
large-icmp : disable
ping-of-death : disable
smurf : disable
land : disable
ip-spoofing : disable
arp-spoofing : disable
但是要注意,上面介绍到的功能不能全部开启,如果开启,对于系统性能的压力会很大,建议按需开启。
URPF技术
URPF叫做单播逆向路径转发,主要功能是防止基于源地址欺骗的网络攻击行为。一般情况下,FW接收到报文,获取报文的目的地址,针对目的地址查找转发表,如果找到了就转发报文,否则丢弃该报文。而URPF通过获取报文的源地址和入接口,在转发表中查找源地址对应的接口是否与入接口匹配,如果不匹配,则认为源地址是伪装的,直接丢弃该报文。通过这种方式,URPF能够有效地防范网络中通过修改报文源IP地址而进行恶意攻击行为的发生。
有两种模式:
严格模式、松散模式。
严格模式
建议在路由对称的环境中使用URPF严格模式,即:不仅要求在转发表中存在相应表项,还要求接口一定匹配才能通过URPF检查。如果两个网络边界路由器之间只有一条路径的话,能够保证路由是对称的,使用严格模式能够最大限度的保证网络的安全性。
松散模式
在不能保证路由对称的环境下使用URPF的松散模式,即:不检查接口是否匹配,只要存在针对源地址的路由,报文就可以通过。
多宿主单ISP客户。
企业网络和isp之间,为了保证可靠性,有多条连接,这时无法保证公司网络和isp之间路由的对称性,必须使用松散模式。
多宿主多ISP客户。
企业网络为了保证可靠性,与多个isp连接,很难保证企业网络和两个isp之间路由的对称性,必须使用urpf松散模式。
如果用户希望某些特殊报文在任何情况下都可以通过urpf检查,即不受urpf丢弃的控制,可以在acl中指定这些特殊的源地址。
许多用户的fw可能只有一条缺省路由指向isp,此时,需要配置允许匹配缺省路由选项。
处理流程
如果报文的源地址在FW的FIB表中存在
- 对于strict型检查,反向查找报文出接口,若只有一个出接口和报文的入接口一一匹配,则报文通过检查;否则报文将被丢弃。当有多个出接口和报文的入接口相匹配时,必须使用loose型检查。(反向查找是指查找以该报文源IP地址为目的IP地址的报文的出接口)
- 对于loose型检查,当报文的源地址在FW的FIB表中存在(不管反向查找的出接口和报文的入接口是否一致),报文就通过检查;否则报文将被丢弃。
如果报文的源地址在FW的FIB表中不存在
- 检查是否配置了缺省路由及URPF的allow-default-route参数(允许对默认路由进行特殊处理)。
- 对于配置了缺省路由,但没有配置参数allow-default-route的情况。都将被拒绝。
- 对于配置了缺省路由,同时又配置了参数allow-default-route的情况。
- 如果是strict型检查,当缺省路由的出接口与报文入接口一致时,报文将通过URPF的检查,正常转发;否则报文被拒绝。
- 如果是loose型检查,报文都将通过URPF的检查,进行正常的转发。
当且仅当报文被拒绝后,才去匹配ACL。如果ACL允许通过,则报文继续进行正常的转发;如果被ACL拒绝,则报文被丢弃。
配置案例
# 在以太口GigabitEthernet 1/0/1上启用严格URPF检查,同时允许对缺省路由进行特殊处理,并配置ACL编号为2999。
interface GigabitEthernet 1/0/1 ip urpf strict allow-default-route acl 2999