📄 530.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>apue</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center"> ● UNIX网络编程 (BM: clown) </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="519.htm">上一层</a>][<a href="531.htm">下一篇</a>]
<hr><p align="left"><small>发信人: scz (小四), 信区: Security <br>
标 题: libnet使用举例(5) <br>
发信站: 武汉白云黄鹤站 (Sun Jul 30 17:22:14 2000), 站内信件 <br>
<br>
日期:2000-07-30 17:02 <br>
<br>
这次以ICMP重定向报文的DoS为例继续介绍libnet库编程。ICMP重定向攻击很久了, <br>
长期不看又会对某些技术细节有所忽略,回顾一下。 <br>
<br>
-------------------------------------------------------------------------- <br>
<br>
缺省路由向发送者报告另一条到特定主机的更短路由,就是ICMP重定向。最初,网络 <br>
路由重定向是被支持的,然而后来网络路由重定向遭到异议而废弃。除了路由器,主 <br>
机必须服从ICMP重定向。 <br>
<br>
下文引自W.Richard Stevens TCP/IP Illustrated, Volume I page 123: <br>
<br>
一台4.x BSD主机接收到ICMP重定向报文,为了防止失常的路由、主机或者恶意的入 <br>
侵者不正确地修改系统路由表,做了如下检查: <br>
<br>
1. 新路由必须是直达的 <br>
<br>
所谓直达,就是本机到该路由无须经过其他路由,直接利用ARP寻址,利用MAC地 <br>
址投递报文。 <br>
<br>
2. 重定向包必须来自去往目标的当前路由 <br>
<br>
比如,A欲去往Z,A和Z不在一个子网内,主机A当前选路规则下所经过的的第一个 <br>
路由是G,但G认为H比自己更优化,于是告诉A更改当前选路规则使得到Z时优先使 <br>
用H。这个重定向报文必须来自G,而不是其他主机或路由。 <br>
<br>
A目前的路由表里可能有F、G两条路由,都可以经其到达Z,但是G比F优先,那么 <br>
A目前只能接受来自G的重定向报文,来自F的重定向报文被认为无效而丢弃。后面 <br>
实验中的很多现象都与这条规则相关,必须加强理解。 <br>
<br>
3. 重定向包不能通知主机用自己做路由 <br>
<br>
虽然这是合理要求,但Pwin98允许通知主机用自己做路由,实际上就造成了DoS。 <br>
其他系统尚未测试过。 <br>
<br>
4. 被改变的路由必须是一条间接路由 <br>
<br>
所谓间接路由就是我们平时所理解的路由,那么什么是直接路由呢,利用MAC地址 <br>
进行报文投递而已,同一子网,明白了?因此若A和B在同一子网,A不可能利用 <br>
ICMP重定向使B发往子网内IP的包流向自己,但可以使B发往子网外IP的包流向自 <br>
己。 <br>
<br>
ICMP重定向提供了一种相当有效的DoS。不象ARP入口,这些特定主机路由入口永不过 <br>
期(就和你用route add命令手工增加路由一个道理,如果没有刷新出现,不存在过期 <br>
问题)。注意,攻击没有要求必须从局域网内发起,事实可以从广域网上发起。如果 <br>
子网所用DNS位于网关外,产生一个到该DNS的错误路由是很容易的,于是...... <br>
<br>
我在Pwin98下测试过,由ICMP重定向包产生的路由都是掩码为255.255.255.255的特 <br>
定主机路由,没有办法产生诸如255.255.0.0这样掩码下的网络路由。此外,不知道 <br>
是不是系统实现有差别,反正Pwin98下,通过ICMP增加上来的特定主机路由会过期, <br>
什么情况下过期,据观察似乎长期不使用就过期,route add增加的不会过期。通过 <br>
ICMP增加的指向自身的病态路由即使过期也会保留残像,非病态路由从路由表中彻底 <br>
消失。 <br>
<br>
许多桌面操作系统线性搜索自己的路由表,如果你利用ICMP重定向包加了太多特定主 <br>
机路由到它们的路由表中,嘿嘿。对于Unix系统,虽然搜索路由表时不是线性搜索, <br>
但过多的特定主机路由会消耗大量的内存空间。这些都属于DoS攻击范畴。 <br>
<br>
现代操作系统或多或少提供了屏蔽ICMP重定向包的机会,具体如何实现我现在也很乱。 <br>
<br>
-------------------------------------------------------------------------- <br>
<br>
<br>
这是我在华为的时候写的,有些东西已经不大记得,一些实验数据丢弃了,重新测试。 <br>
此次我们不考虑利用ICMP重定向进行监听,仅仅考虑DoS攻击。 <br>
<br>
伪造一个来自192.168.0.1的ICMP重定向包,从MAC层开始伪造。 <br>
<br>
1) 利用05 01重定向报文(针对特定主机)依旧可以修改2K的路由表!但是无法使2K的 <br>
特定主机路由指向自己(而Pwin98可以),2K在这点上改进得不错。被重定向过的 <br>
特定主机路由长时间不消失,可以手工route delete掉。如果已经重定向到某个 <br>
IP,再发重定向包企图指向其他IP失败。 <br>
<br>
其实最后一条实验结果的本意可能不是你理解的那样,注意到前面我们提到过, <br>
重定向包必须来自去往目标的当前路由,否则重定向报文会被认为非法而丢弃。 <br>
这才是真正原因。我们无法利用ICMP重定向报文产生两条特定主机路由,因为第 <br>
二次将是修改特定主机路由,而非增加特定主机路由。98下route add可以手工增 <br>
加两条特定主机路由,但实际上只有一条生效,否则选路规则相当胡乱,个人认 <br>
为这是route add命令本身实现上的缺陷。如果已经重定向到某个IP,需要重新构 <br>
造一个重定向报文使得其源IP是上次指定的路由IP,这样的报文才会生效。 <br>
<br>
2K下可以用route add增加一条路由,使之指向自身,这和重定向包不能通知主机 <br>
用自己做路由不矛盾。此时增加的路由可以被route delete删除。 <br>
<br>
2) Pwin98下,可以使特定主机路由指向自己。被重定向过的特定主机路由长时间不 <br>
消失,删除时分两种情况,如果该特定主机路由不是指向自己,可以手工 <br>
route delete掉,如果指向自己,route delete的时候会报告找不到该路由, <br>
route change时同样报告找不到该路由,netstat -nr却还能看到该路由, <br>
route -f参数不能删除该路由,注销重登录也不能删除该路由,想其他办法刷新 <br>
路由表吧,没有继续测试如何删除该病态路由。 <br>
<br>
98下可以用route add增加一条路由,使之指向自身,此路由可以被route delete <br>
删除。但是,重定向包导致指向自身的病态路由就无法用route delete删除。98 <br>
对route命令的实现相当混乱,比如可以 <br>
route add 202.99.11.161 mask 255.255.255.255 192.168.10.3 <br>
route add 202.99.11.161 mask 255.255.255.255 192.168.10.4 <br>
route add 202.99.11.161 mask 255.255.255.255 192.168.10.5 <br>
此时用netstat -nr查看会同时看到三条特定主机路由和一条缺省路由,但 <br>
telnet 202.99.11.161 80的时候使用的仅仅是192.168.10.3,并不在失败后尝试 <br>
10.4、10.5以及缺省路由,这使得DoS攻击成立。 <br>
route change 202.99.11.161 mask 255.255.255.255 192.168.0.1 <br>
修改的是10.5对应的那条路由,telnet 202.99.11.161 80同样会失败,理由同上。 <br>
route delete 202.99.11.161后会同时删除这三条特定主机路由,此结论对ICMP <br>
重定向导致指向自身的病态路由无效。 <br>
<br>
通过ICMP增加的非病态路由与route add增加的路由效果一致。如果先被人用ICMP <br>
在缺省路由基础上增加过一条特定主机路由192.168.10.3,然后自己route add了 <br>
另外一条特定主机路由192.168.0.1,此时使用的还是第一条特定主机路由 <br>
192.168.10.3。再次伪造ICMP重定向包,源IP为192.168.10.3,目标IP为 <br>
192.168.10.60,可以继续"修改"后者路由表里的特定主机路由,不再是"增加"特 <br>
定主机路由。 <br>
<br>
对于前述病态路由,无法删除的情况下,依旧可以route add 202.99.11.161增加 <br>
另外一条特定主机路由,route delete可以删除后续增加的这条路由,病态路由 <br>
依旧。指向自身的病态路由增加上来,初期对IP寻径造成很坏的影响,我不确定 <br>
这个影响会持续到什么时候,何时过期等等。似乎通过手工route add一条特定主 <br>
机路由会"加快"病态路由影响的消失。该影响"彻底"消失后,route delete掉手 <br>
工增加的特定主机路由,继续使用缺省路由。但是用netstat -nr还是看到病态路 <br>
由,尽管这个时候没有影响了,faint。这种情况下,除了残像,其他都恢复到没 <br>
有残像的状态,可以伪造一个源IP为缺省路由IP的重定向包重新替192.168.10.60 <br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -