﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Tauruser-文章分类-网络</title><link>http://www.cppblog.com/Tauruser/category/1352.html</link><description>Enjoy Every Day</description><language>zh-cn</language><lastBuildDate>Tue, 20 May 2008 07:25:47 GMT</lastBuildDate><pubDate>Tue, 20 May 2008 07:25:47 GMT</pubDate><ttl>60</ttl><item><title>什么是ARP欺骗[转载]</title><link>http://www.cppblog.com/Tauruser/articles/5129.html</link><dc:creator>Tauruser</dc:creator><author>Tauruser</author><pubDate>Fri, 07 Apr 2006 04:03:00 GMT</pubDate><guid>http://www.cppblog.com/Tauruser/articles/5129.html</guid><wfw:comment>http://www.cppblog.com/Tauruser/comments/5129.html</wfw:comment><comments>http://www.cppblog.com/Tauruser/articles/5129.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tauruser/comments/commentRss/5129.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tauruser/services/trackbacks/5129.html</trackback:ping><description><![CDATA[
		<span class="oblog_text">
				<span class="tpc_content">
						<font size="2">什么是ARP欺骗 <br /><br />　　我们先复习一下上面所讲的ARP协议的原理。在实现TCP/IP协议的网络环境下，一个ip包走到哪里，要怎么走是靠路由表定义，但是，当ip包到达该网络后，哪台机器响应这个ip包却是靠该ip包中所包含的硬件mac地址来识别。也就是说，只有机器的硬件mac地址和该ip包中的硬件mac地址相同的机器才会应答这个ip包，因为在网络中，每一台主机都会有发送ip包的时候，所以，在每台主机的内存中，都有一个 arp--&gt; 硬件mac 的转换表。通常是动态的转换表（该arp表可以手工添加静态条目）。也就是说，该对应表会被主机在一定的时间间隔后刷新。这个时间间隔就是ARP高速缓存的超时时间。<br /><br />　　通常主机在发送一个ip包之前，它要到该转换表中寻找和ip包对应的硬件mac地址，如果没有找到，该主机就发送一个ARP广播包，于是，主机刷新自己的ARP缓存。然后发出该ip包。 <br /><br />　　了解这些常识后，现在就可以谈在以太网络中如何实现ARP欺骗了，可以看看这样一个例子。 <br />同一网段的ARP欺骗 <br />　 <br />　　同一网段的ARP欺骗 <br /><br />图2 同一网段的arp欺骗 <br /><br />　　如图2所示，三台主机<br />　　A: ip地址 192.168.0.1 硬件地址 AA:AA:AA:AA:AA:AA<br />　　B: ip地址 192.168.0.2 硬件地址 BB:BB:BB:BB:BB:BB<br />　　C: ip地址 192.168.0.3 硬件地址 CC:CC:CC:CC:CC:CC<br /><br />　　一个位于主机B的入侵者想非法进入主机A，可是这台主机上安装有防火墙。通过收集资料他知道这台主机A的防火墙只对主机C有信任关系（开放23端口(telnet)）。而他必须要使用telnet来进入主机A，这个时候他应该如何处理呢？<br /><br />　　我们这样考虑，入侵者必须让主机A相信主机B就是主机C，如果主机A和主机C之间的信任关系是建立在ip地址之上的。如果单单把主机B的ip地址改的和主机C的一样，那是不能工作的，至少不能可靠地工作。如果你告诉以太网卡设备驱动程序，自己IP是192.168.0.3，那么这只是一种纯粹的竞争关系，并不能达到目标。我们可以先研究C这台机器如果我们能让这台机器暂时当掉，竞争关系就可以解除,这个还是有可能实现的。在机器C当掉的同时，将机器B的ip地址改为192.168.0.3,这样就可以成功的通过23端口telnet到机器 A上面，而成功的绕过防火墙的限制。<br /><br />　　上面的这种想法在下面的情况下是没有作用的，如果主机A和主机C之间的信任关系是建立在硬件地址的基础上。这个时候还需要用ARP欺骗的手段让主机A把自己的ARP缓存中的关于192.168.0.3映射的硬件地址改为主机B的硬件地址。<br /><br />　　我们可以人为的制造一个arp_reply的响应包,发送给想要欺骗的主机,这是可以实现的,因为协议并没有规定必须在接收到arp_echo后才可以发送响应包.这样的工具很多,我们也可以直接用snifferpro抓一个arp响应包,然后进行修改。 <br /><br />　　你可以人为地制造这个包。可以指定ARP包中的源IP、目标IP、源MAC地址、目标MAC地址。<br />这样你就可以通过虚假的ARP响应包来修改主机A上的动态ARP缓存达到欺骗的目的。<br />　　下面是具体的步骤：<br />　　1. 他先研究192.0.0.3这台主机，发现这台主机的漏洞。 <br />　　2. 根据发现的漏洞使主机C当掉，暂时停止工作。 <br />　　3. 这段时间里，入侵者把自己的ip改成192.0.0.3 <br />　　4. 他用工具发一个源ip地址为192.168.0.3源MAC地址为BB:BB:BB:BB:BB:BB的包给主机A，要求主机A更新自己的arp转换表。 <br />　　5. 主机更新了arp表中关于主机C的ip--&gt;mac对应关系。 <br />　　6. 防火墙失效了，入侵的ip变成合法的mac地址，可以telnet 了。 <br /><br />　　上面就是一个ARP的欺骗过程，这是在同网段发生的情况，但是，提醒注意的是，在B和C处于不同网段的时候，上面的方法是不起作用的。<br /><br />不同网段的ARP欺骗 <br /><br />　　不同网段的ARP欺骗<br /><br /><br />图3 不同网段之间的ARP欺骗<br /><br />　　如图3所示A、C位于同一网段而主机B位于另一网段，三台机器的ip地址和硬件地址如下：<br />　　A: ip地址 192.168.0.1 硬件地址 AA:AA:AA:AA:AA:AA<br />　　B: ip地址 192.168.1.2 硬件地址 BB:BB:BB:BB:BB:BB<br />　　C: ip地址 192.168.0.3 硬件地址 CC:CC:CC:CC:CC:CC<br /><br />　　在现在的情况下，位于192.168.1网段的主机B如何冒充主机C欺骗主机A呢？显然用上面的办法的话，即使欺骗成功，那么由主机B和主机A之间也无法建立telnet会话，因为路由器不会把主机A发给主机B的包向外转发，路由器会发现地址在192.168.0.这个网段之内。<br /><br />　　现在就涉及到另外一种欺骗方式―ICMP重定向。把ARP欺骗和ICMP重定向结合在一起就可以基本实现跨网段欺骗的目的。<br /><br />　　什么是ICMP重定向呢？<br /><br />　　ICMP重定向报文是ICMP控制报文中的一种。在特定的情况下，当路由器检测到一台机器使用非优化路由的时候，它会向该主机发送一个ICMP重定向报文，请求主机改变路由。路由器也会把初始数据报向它的目的地转发。我们可以利用ICMP重定向报文达到欺骗的目的。<br /><br />　　下面是结合ARP欺骗和ICMP重定向进行攻击的步骤：<br />　　1. 为了使自己发出的非法ip包能在网络上能够存活长久一点，开始修改ip包的生存时间ttl为下面的过程中可能带来的问题做准备。把ttl改成255. (ttl定义一个ip包如果在网络上到不了主机后，在网络上能存活的时间，改长一点在本例中有利于做充足的广播) <br />　　2. 下载一个可以自由制作各种包的工具（例如hping2） <br />　　3. 然后和上面一样，寻找主机C的漏洞按照这个漏洞当掉主机C。 <br />　　4. 在该网络的主机找不到原来的192.0.0.3后，将更新自己的ARP对应表。于是他发送一个原ip地址为192.168.0.3硬件地址为BB:BB:BB:BB:BB:BB的ARP响应包。 <br />　　5. 好了，现在每台主机都知道了，一个新的MAC地址对应192.0.0.3,一个ARP欺骗完成了，但是，每台主机都只会在局域网中找这个地址而根本就不会把发送给192.0.0.3的ip包丢给路由。于是他还得构造一个ICMP的重定向广播。 <br />　　6. 自己定制一个ICMP重定向包告诉网络中的主机："到192.0.0.3的路由最短路径不是局域网，而是路由，请主机重定向你们的路由路径，把所有到192.0.0.3的ip包丢给路由。" <br />　　7. 主机A接受这个合理的ICMP重定向，于是修改自己的路由路径，把对192.0.0.3的通讯都丢给路由器。 <br />　　8. 入侵者终于可以在路由外收到来自路由内的主机的ip包了，他可以开始telnet到主机的23口。 <br /><br />　　其实上面的想法只是一种理想话的情况，主机许可接收的ICMP重定向包其实有很多的限制条件，这些条件使ICMP重定向变的非常困难。<br /><br />　　TCP/IP协议实现中关于主机接收ICMP重定向报文主要有下面几条限制：<br />　　1. 新路由必须是直达的 <br />　　2. 重定向包必须来自去往目标的当前路由 <br />　　3. 重定向包不能通知主机用自己做路由 <br />　　4. 被改变的路由必须是一条间接路由 <br /><br />　　由于有这些限制，所以ICMP欺骗实际上很难实现。但是我们也可以主动的根据上面的思维寻找一些其他的方法。更为重要的是我们知道了这些欺骗方法的危害性，我们就可以采取相应的防御办法。</font>
				</span>
				<script type="text/javascript">
						<!--
google_ad_client = "pub-7732955500433250";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "image";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_link = "0000FF";
google_color_bg = "FFFFFF";
google_color_text = "000000";
google_color_url = "008000";
//-->
				</script>
				<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
				</script>
		</span>
<img src ="http://www.cppblog.com/Tauruser/aggbug/5129.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tauruser/" target="_blank">Tauruser</a> 2006-04-07 12:03 <a href="http://www.cppblog.com/Tauruser/articles/5129.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>