本文档介绍“红色代码”蠕虫及其在Cisco路由环境中可能引起的问题。本文档还介绍了防止蠕虫感染的技术,并提供了指向描述蠕虫相关问题解决方案的相关建议的链接。
“Code Red”蠕虫造成Microsoft Internet Information Server(IIS)版本5.0索引服务容易遭到攻击的弱点。当“红色代码”蠕虫感染主机时,它会导致主机探测并感染一系列随机的IP地址,从而导致网络流量急剧增加。如果网络中存在冗余链路和/或未使用思科快速转发(CEF)交换数据包,则问题尤其严重。
本文档没有任何特定的要求。
本文档不限于特定的软件和硬件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。
有关文件规则的更多信息请参见“ Cisco技术提示规则”。
"""Code Red""蠕虫试图连接到随机生成的IP地址。"每个受感染的IIS服务器都可以尝试感染同一组设备。您可以跟踪蠕虫的源IP地址和TCP端口,因为它没有伪装。单播反向路径转发(URPF)无法抑制蠕虫攻击,因为源地址是合法的。
以下建议描述了“红色代码”蠕虫,并说明了如何修补受蠕虫影响的软件:
以下一些症状表示Cisco路由器受到“红色代码”蠕虫的影响:
NAT或PAT表中的大量流(如果使用NAT或PAT)。
网络中的大量ARP请求或ARP风暴(由IP地址扫描引起)。
IP输入、ARP输入、IP Cache Ager和CEF处理过程使用过多内存。
ARP、IP输入、CEF和IPC中CPU利用率过高。
如果使用NAT,则中断级别的CPU使用率较高,流量速率较低,或者IP输入中的进程级别的CPU使用率较高。
内存不足或中断级别的CPU利用率持续过高(100%)可能导致Cisco IOS®路由器重新加载。重新加载是由进程引起的,该进程由于应力条件而表现不佳。
如果您不怀疑站点中的设备受到了“Code Red”蠕虫的感染或是其攻击目标,请参阅相关信息部分,以获取有关如何解决遇到的任何问题的其他URL。
使用流交换确定受影响设备的源IP地址。在所有接口上配置ip route-cache flow,记录路由器交换的所有数据流。
几分钟之后,发出show ip cache flow命令以查看所记录的条目。在“红色代码”蠕虫感染的初始阶段,蠕虫会尝试自我复制。蠕虫向随机IP地址发送HT请求时,就会发生复制。因此,必须查找目标端口为80(HT.,0050,以十六进制表示)的缓存流条目。
show ip cache flow | include 0050命令以TCP端口80(0050为十六进制)显示所有缓存条目:
Router#show ip cache flow | include 0050 ... scram scrappers dative DstIPaddress Pr SrcP DstP Pkts Vl1 193.23.45.35 Vl3 2.34.56.12 06 0F9F 0050 2 Vl1 211.101.189.208 Null 158.36.179.59 06 0457 0050 1 Vl1 193.23.45.35 Vl3 34.56.233.233 06 3000 0050 1 Vl1 61.146.138.212 Null 158.36.175.45 06 B301 0050 1 Vl1 193.23.45.35 Vl3 98.64.167.174 06 0EED 0050 1 Vl1 202.96.242.110 Null 158.36.171.82 06 0E71 0050 1 Vl1 193.23.45.35 Vl3 123.231.23.45 06 121F 0050 1 Vl1 193.23.45.35 Vl3 9.54.33.121 06 1000 0050 1 Vl1 193.23.45.35 Vl3 78.124.65.32 06 09B6 0050 1 Vl1 24.180.26.253 Null 158.36.179.166 06 1132 0050 1
如果发现具有相同源IP地址、随机目标IP地址1、DstP = 0050 (HTTP)和Pr = 06 (TCP)的条目数量异常,您很可能找到感染的设备。在此输出示例中,源IP地址为193.23.45.35,来自VLAN1。
1“红色代码”蠕虫的另一个版本(称为“红色代码II”)不选择完全随机的目标IP地址。相反,“红色代码II”保留IP地址的网络部分,并选择该IP地址的一个随机主机部分以便传播。通过这种方式,它可以在同一网络范围内更快地传播。
“红色代码II”使用以下网络和掩码:
Mask Probability of Infection 0.0.0.0 12.5% (random) 255.0.0.0 50.0% (same class A) 255.255.0.0 37.5% (same class B)
排除的目标IP地址为127.X.X.X和224.X.X.X,并且不允许任何二进制八位数是0或255。此外,主机不会尝试再次感染自身。
有关详细信息,请参阅红色代码(II) 。
有时,您无法运行netflow来检测“红色代码”感染尝试。这可能是因为您运行的代码版本不支持netflow,或者因为路由器没有足够的内存或过多的内存来启用netflow。当路由器上有多个入口接口且只有一个出口接口时,Cisco建议您不要启用NetFlow,因为NetFlow记帐是在入口路径上执行的。在这种情况下,最好在独立的出口接口上启用IP记帐功能。
注意:使用ip accounting命令可禁用DCEF。请勿在要使用DCEF交换的任何平台上启用IP记帐。
Router(config)#interface vlan 1000 Router(config-if)#ip accounting Router#show ip accounting Source Destination Packets Bytes 20.1.145.49 75.246.253.88 2 96 20.1.145.43 17.152.178.57 1 48 20.1.145.49 20.1.49.132 1 48 20.1.104.194 169.187.190.170 2 96 20.1.196.207 20.1.1.11 3 213 20.1.145.43 43.129.220.118 1 48 20.1.25.73 43.209.226.231 1 48 20.1.104.194 169.45.103.230 2 96 20.1.25.73 223.179.8.154 2 96 20.1.104.194 169.85.92.164 2 96 20.1.81.88 20.1.1.11 3 204 20.1.104.194 169.252.106.60 2 96 20.1.145.43 126.60.86.19 2 96 20.1.145.49 43.134.116.199 2 96 20.1.104.194 169.234.36.102 2 96 20.1.145.49 15.159.146.29 2 96
在show ip accounting 命令输出中,查找尝试向多个目标地址发送数据包的源地址。如果受感染的主机处于扫描阶段,它会尝试与其他路由器建立HTTP连接。因此,您会看到尝试访问多个IP地址。大多数连接尝试通常会失败。因此,您只看到少量数据包被传输,每个数据包的字节数都很少。在本示例中,20.1.145.49和20.1.104.194可能已被感染。
当您在Catalyst 5000系列和Catalyst 6000系列上运行多层交换(MLS)时,您必须采取不同的步骤启用netflow记帐并跟踪感染。在配有Supervisor 1多层交换机特性卡(MSFC1)或SUP I/MSFC2的Cat6000交换机中,基于netflow的MLS默认处于启用状态,但flow-mode是仅目标模式。因此,源IP地址未缓存。借助于Supervisor上的set mls flow full 命令,可以启用“full-flow”模式以跟踪受感染的主机。
对于混合模式,请使用set mls flow full命令:
6500-sup(enable)set mls flow full Configured IP flowmask is set to full flow. Warning: Configuring more specific flow mask may dramatically increase the number of MLS entries.
对于本地IOS模式,使用mls flow ip full 命令:
Router(config)#mls flow ip full
启用“全流”模式时,会显示一条警告,指示MLS条目大幅增加。如果您的网络已感染了“红色代码”蠕虫,则增加MLS条目在短时间内产生的影响是合理的。蠕虫会导致MLS条目过多并呈上升趋势。
要查看收集的信息,请使用以下命令:
对于混合模式,请使用set mls flow full命令:
6500-sup(enable)set mls flow full Configured IP flowmask is set to full flow. Warning: Configuring more specific flow mask may dramatically increase the number of MLS entries.
对于本地IOS模式,使用mls flow ip full命令:
Router(config)#mls flow ip full
启用“全流”模式时,会显示一条警告,指示MLS条目大幅增加。如果您的网络已感染了“红色代码”蠕虫,则增加MLS条目在短时间内产生的影响是合理的。蠕虫会导致MLS条目过多并呈上升趋势。
要查看收集的信息,请使用以下命令:
对于混合模式,请使用show mls ent命令:
6500-sup(enable)show mls ent Destination-IP Source-IP Prot DstPrt SrcPrt Destination-Mac Vlan EDst ESrc DPort SPort Stat-Pkts Stat-Bytes Uptime Age -------------- --------------- ----- ------ ------ ----------------- ---- ---- ---- --------- --------- ---------- ----------- -------- --------
注意:当这些字段处于“全流”模式时,将填写所有这些字段。
对于本地IOS模式,使用show mls ip命令:
Router#show mls ip DstIP SrcIP Prot:SrcPort:DstPort Dst i/f:DstMAC -------------------------------------------------------------------- Pkts Bytes SrcDstPorts SrcDstEncap Age LastSeen --------------------------------------------------------------------
确定攻击中涉及的源IP地址和目标端口时,可以将MLS重新设置为“仅目标”模式。
对于混合模式,使用set mls flow destination命令:
6500-sup(enable) set mls flow destination Usage: set mls flow <destination|destination-source|full>
对于本地IOS模式,请使用mls flow ip destination命令:
Router(config)#mls flow ip destination
Supervisor (SUP) II/MSFC2组合会受到保护,不会受到攻击,因为会在硬件中执行CEF交换,并会维护netflow统计信息。因此,即使在“红色代码”攻击期间,如果启用全流模式,由于交换机制更快,路由器也不会被填满。在SUP I/MFSC1和SUP II/MSFC2上,启用全流模式和显示统计信息的命令相同。
使用本部分列出的技术,最大程度降低“红色代码”蠕虫对路由器的影响。
如果它在您的网络中可行,防止“红色代码”攻击的最简单方法是阻止发往端口80(WWW的公认端口)的所有流量。建立访问列表以拒绝发往端口80的IP数据包,并将其应用于面向感染源的接口的入站流量。
当静态路由指向广播接口时,ARP输入会耗尽大量内存,如下所示:
ip route 0.0.0.0 0.0.0.0 Vlan3
默认路由的每个数据包都会发送到VLAN3。但是,没有指定下一跳IP地址,因此,路由器会发送一个ARP请求来获取目的IP地址。除非已禁用代理ARP,否则该目标的下一跳路由器将使用自己的MAC地址进行应答。来自路由器的回复在ARP表中创建额外的条目,其中数据包的目的IP地址映射到下一跳MAC地址。“红色代码”蠕虫向随机IP地址发送数据包,为每个随机目的地址添加新的ARP条目。在ARP Input(ARP输入)过程中,每个新的ARP条目会消耗越来越多的内存。
请勿创建到接口的静态默认路由,尤其是当接口是广播(以太网/快速以太网/GE/SMDS)或多点(帧中继/ATM)时。任何静态默认路由都必须指向下一跳路由器的IP地址。在您更改了指向下一跳IP地址的默认路由之后,请使用clear arp-cache命令,以清除所有ARP条目。此命令可修复内存利用率问题。
为了降低IOS路由器上的CPU使用率,请从Fast/Optimum/Netflow交换更改为CEF交换。启用CEF有一些警告。下一节讨论CEF和快速交换之间的区别,并说明启用CEF的意义。
启用CEF以缓解由“红色代码”蠕虫引起的流量负载增加。Cisco IOS®软件版本11.1()CC、12.0和更高版本在Cisco 7200/7500/GSR平台上支持CEF。Cisco IOS软件版本12.0或更高版本支持其他平台上的CEF。您可以使用Software Advisor工具进行进一步调查。
有时,由于以下原因之一,您无法在所有路由器上启用CEF:
内存不足
平台结构不受支持
接口封装不受支持
以下是使用快速交换时的影响:
流量驱动的缓存-缓存为空,直到路由器交换数据包并填充缓存。
第一个数据包是进程交换的-第一个数据包是进程交换的,因为缓存最初是空的。
粒度缓存-缓存构建于主网中最具体的路由信息库(RIB)条目部分的粒度。如果RIB的主网络131.108.0.0具有/24s,则缓存将使用/24s构建以用于该主网络。
/32 cache is used -/32 cache is used to balance the load for each destination.(使用/32缓存平衡每个目标的负载。)当缓存平衡负载时,使用/32s为该主网构建缓存。
注意:最后两个问题可能会导致占用所有内存的巨大缓存。
在主网络边界缓存-使用默认路由,在主网络边界执行缓存。
缓存老化器-缓存老化器每分钟运行一次,并检查缓存的1/20 (5%)是否存在正常内存条件下的未使用条目,以及缓存的1/4 (25%)是否存在内存不足的情况(200k)。
要更改上述值,请使用ip cache-ager-interval X Y Z命令,其中:
X是<0-2147483>老化器运行之间的秒数。默认值为60秒。
Y是<2-50> 1/(Y+1)的缓存,每次运行都会老化(内存较低)。默认值为4。
Z是<3-100> 1/(Z+1)的缓存,每次运行都会过期(正常)。默认值为20。
以下是使用ip cache-ager 60 5 25的配置示例。
Router#show ip cache IP routing cache 2 entries, 332 bytes 27 adds, 25 invalidates, 0 refcounts Cache aged by 1/25 every 60 seconds (1/5 when memory is low). Minimum invalidation interval 2 seconds, maximum interval 5 seconds, quiet interval 3 seconds, threshold 0 requests Invalidation rate 0 in last second, 0 in last 3 seconds Last full cache invalidation occurred 03:55:12 ago Prefix/Length Age Interface Next Hop 4.4.4.1/32 03:44:53 Serial1 4.4.4.1 192.168.9.0/24 00:03:15 Ethernet1 20.4.4.1 Router#show ip cache verbose IP routing cache 2 entries, 332 bytes 27 adds, 25 invalidates, 0 refcounts Cache aged by 1/25 every 60 seconds (1/5 when memory is low). Minimum invalidation interval 2 seconds, maximum interval 5 seconds, quiet interval 3 seconds, threshold 0 requests Invalidation rate 0 in last second, 0 in last 3 seconds Last full cache invalidation occurred 03:57:31 ago Prefix/Length Age Interface Next Hop 4.4.4.1/32-24 03:47:13 Serial1 4.4.4.1 4 0F000800 192.168.9.0/24-0 00:05:35 Ethernet1 20.4.4.1 14 00000C34A7FC00000C13DBA90800
根据缓存老化器的设置,部分缓存条目会从快速缓存表中老化。当条目快速老化时,快速缓存表中的较大比例会老化,并且缓存表会变小。因此,路由器上的内存消耗会降低。缺点是缓存表中老化的条目会继续通过流量。初始数据包是进程交换的,这导致在为流构建新的缓存条目之前,IP输入中的CPU使用率都会出现短暂高峰。
在Cisco IOS软件版本10.3(8)、11.0(3)及更高版本中,IP缓存老化器的处理方式不同,如下面所述:
仅当配置中定义了service internal命令时,ip cache-ager-interval和ip cache-invalidate-delay命令才可用。
如果在老化无效运行之间的周期设置为0,那么这个老化进程则被完全禁用。
时间单位是秒。
注意:执行这些命令时,路由器的CPU使用率会增加。仅在绝对必要时使用这些命令。
Router#clear ip cache ? A.B.C.D Address prefix <CR>--> will clear the entire cache and free the memory used by it! Router#debug ip cache IP cache debugging is on
转发信息库(FIB)表根据路由表构建。因此,在转发第一个数据包之前,存在转发信息。FIB还包含与直接相连LAN主机相关的/32条目。
邻接(ADJ)表包含下一跳和直连主机的第2层重写信息(ARP条目创建CEF邻接)。
CEF中不存在使CPU利用率突增的缓存器老化器这一概念。若删除某个路由表条目,则同时会删除FIB条目。
注意:同样,指向广播或多点接口的默认路由意味着路由器将为每个新目的地发送ARP请求。来自路由器的ARP请求可能会创建一个巨大的邻接表,直到路由器内存耗尽。如果CEF无法分配内存,则CEF/DCEF会禁用自身。您需要再次手动启用CEF/DCEF。
以下是show ip cef summary命令的一些输出示例,其中显示内存使用情况。此输出是运行Cisco IOS软件版本12.0的Cisco 7200路由服务器的快照。
Router>show ip cef summary IP CEF with switching (Table Version 2620746) 109212 routes, 0 reresolve, 0 unresolved (0 old, 0 new), peak 84625 109212 leaves, 8000 nodes, 22299136 bytes, 2620745 inserts, 2511533 invalidations 17 load sharing elements, 5712 bytes, 109202 references universal per-destination load sharing algorithm, id 6886D006 1 CEF resets, 1 revisions of existing leaves 1 in-place/0 aborted modifications Resolution Timer: Exponential (currently 1s, peak 16s) refcounts: 2258679 leaf, 2048256 node Adjacency Table has 16 adjacencies Router>show processes memory | include CEF PID TTY Allocated Freed Holding Getbufs Retbufs Process 73 0 147300 1700 146708 0 0 CEF process 84 0 608 0 7404 0 0 CEF Scanner Router>show processes memory | include BGP 2 0 6891444 6891444 6864 0 0 BGP Open 80 0 3444 2296 8028 0 0 BGP Open 86 0 477568 476420 7944 0 0 BGP Open 87 0 2969013892 102734200 338145696 0 0 BGP Router 88 0 56693560 2517286276 7440 131160 4954624 BGP I/O 89 0 69280 68633812 75308 0 0 BGP Scanner 91 0 6564264 6564264 6876 0 0 BGP Open 101 0 7635944 7633052 6796 780 0 BGP Open 104 0 7591724 7591724 6796 0 0 BGP Open 105 0 7269732 7266840 6796 780 0 BGP Open 109 0 7600908 7600908 6796 0 0 BGP Open 110 0 7268584 7265692 6796 780 0 BGP Open Router>show memory summary | include FIB Alloc PC Size Blocks Bytes What 0x60B8821C 448 7 3136 FIB: FIBIDB 0x60B88610 12000 1 12000 FIB: HWIDB MAP TABLE 0x60B88780 472 6 2832 FIB: FIBHWIDB 0x60B88780 508 1 508 FIB: FIBHWIDB 0x60B8CF9C 1904 1 1904 FIB 1 path chunk pool 0x60B8CF9C 65540 1 65540 FIB 1 path chunk pool 0x60BAC004 1904 252 479808 FIB 1 path chun 0x60BAC004 65540 252 16516080 FIB 1 path chun Router>show memory summary | include CEF 0x60B8CD84 4884 1 4884 CEF traffic info 0x60B8CF7C 44 1 44 CEF process 0x60B9D12C 14084 1 14084 CEF arp throttle chunk 0x60B9D158 828 1 828 CEF loadinfo chunk 0x60B9D158 65540 1 65540 CEF loadinfo chunk 0x60B9D180 128 1 128 CEF walker chunk 0x60B9D180 368 1 368 CEF walker chunk 0x60BA139C 24 5 120 CEF process 0x60BA139C 40 1 40 CEF process 0x60BA13A8 24 4 96 CEF process 0x60BA13A8 40 1 40 CEF process 0x60BA13A8 72 1 72 CEF process 0x60BA245C 80 1 80 CEF process 0x60BA2468 60 1 60 CEF process 0x60BA65A8 65488 1 65488 CEF up event chunk Router>show memory summary | include adj 0x60B9F6C0 280 1 280 NULL adjacency 0x60B9F734 280 1 280 PUNT adjacency 0x60B9F7A4 280 1 280 DROP adjacency 0x60B9F814 280 1 280 Glean adjacency 0x60B9F884 280 1 280 Discard adjacency 0x60B9F9F8 65488 1 65488 Protocol adjacency chunk
当流数量较大时,CEF通常比快速交换占用更少的内存。如果内存已被快速交换缓存占用,您必须在启用CEF之前清除ARP缓存(通过clear ip arp命令)。
注意:清除缓存时,路由器的CPU使用率会出现峰值。
答:最近修复了一个NAT思科漏洞(CSCdu63623(仅限注册客户)),涉及可扩展性。当有数以万计的NAT流(根据平台类型)时,Bug会导致进程或中断级别的100% CPU使用率。
要确定原因是否出自此Bug,请发出show align命令,并验证路由器是否面临着校准错误。如果您确实看到了校验错误或欺骗内存访问,发出几次show align命令,并且检查错误是否增加。如果错误数量在增加,校准错误可能是中断级别CPU使用率较高的原因,而不可能是思科漏洞CSCdu63623(仅限于注册客户)。有关详细信息,请参阅欺骗访问和校正错误故障排除。
show ip nat translation命令显示活动转换的数量。NPE-300类处理器的熔解点约为20,000到40,000个转换。此数字因平台而异。
此熔毁问题之前由几个客户发现,但在“红色代码”之后,更多客户遇到过此问题。唯一的解决方法是运行NAT(而不是PAT),这样可以减少活动转换。如果您拥有7200,请使用NSE-1,并降低NAT超时值。
A. HyBridge输入进程处理IRB进程无法快速交换的所有数据包。IRB进程无法快速交换数据包的原因可能是:
数据包是广播数据包。
数据包是组播数据包。
目的地未知,需要触发ARP。
存在生成树BPDU。
如果同一网桥组中有数千个点对点接口,HyBridge输入会遇到问题。如果同一多点接口中有数千个VS,HyBridge输入也会遇到问题(但程度较轻)。
IRB出现问题的可能原因是什么?假设感染了“红色代码”的设备扫描IP地址。
路由器需要为每个目的IP地址发送ARP请求。对于扫描的每个地址,网桥组中的每条VC都会收到大量ARP请求。正常的ARP进程不会导致CPU问题。但是,如果存在ARP条目而没有网桥条目,路由器会泛洪发送到已存在ARP条目的地址的数据包。因为数据流是由程序交换的,所以可能会导致高CPU利用率。要避免此问题,请增加网桥老化时间(默认值为300秒或5分钟)以匹配或超过ARP超时(默认值为4小时),从而使两个计时器同步。
终端主机尝试感染的地址是广播地址。路由器进行等同于子网广播的工作,这种工作需要HyBridge输入程序重复。如果配置了no ip directed-broadcast命令,则不会出现这种情况。从Cisco IOS软件版本12.0中,默认情况下ip directed-broadcast命令处于禁用状态,这会导致丢弃所有IP定向广播。
下面是与“红色代码”无关并与IRB架构相关的边注:
需要复制第2层组播和广播数据包。因此,在广播网段上运行的IPX服务器出现问题会导致链路断开。您可通过用户策略来避免这种问题。有关详细信息,请参阅x数字用户线路(xDSL)网桥支持。您还必须考虑网桥访问列表,这些列表会限制允许通过路由器的流量类型。
为了缓解此IRB问题,您可以使用多个网桥组,并确保为BVI、子接口和VC提供一对一映射。
因为RBE完全避免了桥接堆栈,所以要优于IRB。您可以从IRB迁移到RBE。这些思科缺陷促使了这样的迁移:
CSCdr11146(仅限注册客户)
CSCdp18572(仅限注册客户)
CSCds40806(仅限注册客户)
A.以下是show logging命令输出的示例:
Router#show logging Syslog logging: enabled (0 messages dropped, 0 flushes, 0 overruns) ^ this value is non-zero Console logging: level debugging, 9 messages logged
检查您是否登录到控制台。如果是,请检查是否存在流量HTTP请求。接下来,检查是否有任何包含日志关键字的访问列表或监控特定IP流的调试。如果刷新增加,可能是因为控制台(通常是9600波特设备)无法处理收到的信息量。在这种情况下,路由器会禁用中断,并只处理控制台消息。解决方案是禁用控制台日志记录或删除您执行的任何类型的日志记录。
A.“红色代码”可能是原因。Cisco建议您在IOS路由器上禁用ip http server命令,这样它就不需要处理来自受感染主机的多次连接尝试。
有关“红色代码”,蠕虫的建议 章节介绍了各种临时解决方法。有关解决方法,请参阅建议。
另一种在网络入口点阻止“Code Red”蠕虫的方法是在Cisco路由器的IOS软件中使用基于网络的应用识别(NBAR)和访问控制列表(ACL)。请将此方法与Microsoft为IIS服务器推荐的修补程序结合使用。有关此方法的详细信息,请参阅使用NBAR和ACL在网络入口点阻塞“红色代码”蠕虫。
版本 | 发布日期 | 备注 |
---|---|---|
1.0 |
10-Dec-2001 |
初始版本 |