我们想一下,假如黑客假扮成一个企业的雇员,是不是就可以和真正的雇员交换企业敏感数据了?!而要骗过计算机则包括许多不同的技术,一个常用的是——ARP缓存中毒(ARP Cache Poisoning)。ARP,即 Address Resolution Protocol,地址解析协议。
ARP中毒能让局域网内的黑客对企业内网造成巨大的网络破坏,而且通常是“不可治愈”的,因此每一个网络管理员都应该明白这种攻击究竟是如何进行的,并确保企业的网络安全。
ARP先将网络设备的MAC地址和其IP地址关联起来的,这样在同一个局域网内的设备就能相互知道彼此的存在。ARP基本上就是一种网络上的“点名”。
ARP,一个十分简单的协议,仅仅只包含了4种消息类型:
1. ARP请求。计算机A询问整个局域网,“Who has this IP address?” (“谁的IP地址是这个?”)
2. ARP响应。计算机B告诉计算机A,“I have that IP. My MAC address is [whatever it is].” (我的IP地址是那个。我的MAC地址是[XX:XX:XX:XX:XX:XX])
3. 反向ARP请求。和ARP请求的概念一样,但是计算机A询问,“Who has this MAC address?” (谁的MAC地址是这个?)
4. 反向ARP响应。计算机B告诉计算机A,“I have that MAC. My IP address is [whatever it is]” (我的MAC地址是那个。我的IP地址是XXX. XXX. XXX. XXX)
所有的网络设备都有一个ARP映射表,就是内存里的一小段存储着目前该设备已经匹配的IP地址和MAC地址对。ARP映射表确保该设备不会向它已经通讯过的设备重复发送ARP请求。
这里是一次常规的ARP通信的例子。一个接待员,告诉Word程序打印最新的公司通信录。这是她今天的第一个打印任务。她的计算机 (IP地址是192.168.0.16) 希望发送这个打印任务到办公室的打印机 (IP地址是192.168.0.45)。所以接待员的计算机就会像整个局域网广播一个ARP请求去询问,“Who has the IP address, 192.168.0.45?” (谁的IP地址是192.168.0.45?)。
局域网内所有的设备都会忽略这个ARP请求,除了办公室的打印机。这台打印机发现它的IP地址就是请求里的IP地址,于是它发送一个ARP响应:“嘿,我的IP地址是192.168.0.45. 这是我的MAC地址:00:90:7F:12:DE:7F”。
现在接待员的计算机知道了这台打印机的MAC地址。它现在能将这个打印任务发给正确的设备(打印机),并且在它的ARP映射表里将打印机的MAC地址00:90:7F:12:DE:7F和它的IP地址192.168.0.45关联起来。
网络的设计者可能出于高效的考虑将ARP的对话过程设计得如此简单。不幸的是,因为没有任何形式的认证方法,这种简单也带来了巨大的安全隐患。
ARP认为通信双方都是安全可信的,实际上就是好骗的。当一个网络中的设备发出去一个广播ARP请求时,它只是简单的相信当收到一个ARP响应时,这个响应真的是来自正确的设备 (因为按照协议只有IP地址对应的设备才会发出相应报文)。ARP没有提供任何方法去认证响应的设备就真是如它报文里所说的那台。实际上,许多操作系统实现ARP时都是尽管没有发出任何ARP请求但仍然接受来自其他设备的ARP响应。
好了,想象自己是一个恶意的黑客。你刚刚才知道ARP协议没有任何认证ARP响应的方法。你已经知道了很多设备在没有发出任何请求的情况下仍然接受响应。嗯,我为什么不能制造一个完美有效但是恶意的,包含任何我自己选择的IP地址和MAC地址的ARP响应报文?由于受害者的计算机会盲目地接受这个ARP响应并添加到它的ARP映射表中,因此让受害者那极易受骗的计算机将任何我选的IP地址关联到任何MAC地址。更进一步,我能广播我做的假冒ARP响应到受害者的整个网络中,欺骗网络中所有的计算机。
回到现实中来。现在你可能知道了为什么这种常用技术叫做ARP缓存中毒 (或者叫ARP中毒):攻击者欺骗你的局域网中的设备,误导或者 “毒害” 它所知道其他设备的位置。
这种使攻击者能关联任何IP地址和MAC地址的能力让其可以进行很多种攻击,包括拒绝服务攻击(DoS, Denial of Service),中间人攻击(Man in the Middle)和MAC洪泛(MAC Flooding)。
一个黑客可以只做简单的操作就将一个重要的IP地址和一个错误的MAC地址绑定。例如,黑客可以发送一个ARP响应报文 (到你的计算机) 将你所在网络的路由器 (即我们常说的网管) IP地址和一个根本不存在的MAC地址绑定起来。你的计算机一位它知道默认网关在哪,但是事实上它的所有数据包,其目的地址都不在这个网络的网段上 (因为那个不存在的MAC不在此局域网的网段上) ,它们最后消逝在了无尽的比特流中 (即因数据包的生命周期到了而信号消失)。仅仅这一下,黑客就能阻止你连上因特网。单这种恐怖而又简单的攻击使攻击者足以给网络带来了巨大的危害。