关于嗅探与ARP欺骗的原理,网络上有很多很好的帖子和文章,但大部分都忽略了数据在网络中的转发过程。实际上用嗅探和ARP欺骗来做标题有点忽悠的成分,因为嗅探本身就包含了主动嗅探和被动嗅探,而ARP欺骗又是一个单独的技术,欺骗的目的只是让数据经过本机,即:主动嗅探=ARP欺骗+抓包。在了解嗅探和ARP欺骗原理之前,我们必须对数据包在各种(交换网络、共享网络等)网络环境中的传输过程,笔者在这边也只针对交换网络和共享网络进行探讨。
若未加说明,文章中的三层指的是网络层,二层指的是数据链路层。
一.数据在网络中的转发过程:
1.数据在交换网络中的传输过程如下图(PC1发包给PC2)
注:此图是以公网网络为基础,如果PC为内网或者加入私有网络则在出口要考虑NAT等情况
a)PC1发现目标IP110.1.1.2(网络号110.1.1.0)与本机不在同网段(掩码为24位,所以本机网络号为1.1.1.0),因此PC1会将数据包丢给网关,为了数据报文能够到达网关,PC1封装的报文里头会以网关的MAC作为目的MAC(网络数据传输,原目的IP不变,原目的MAC通过三层网络时会不断改变)。
b)数据报文到达二层交换机(这里只涉及二层交换,如果是三层交换机并设置了端口IP,则会有所不同)后,由于二层交换机拆解数据报文时只拆解到二层(只拆解到原目的MAC),根本看不懂IP,所以会查找MAC-接口映射表(所谓的建立虚拟链路),发现网关MAC对应的是E5口,则将数据包从E5口丢出去。
c)路由器R1收到数据报文后查看原目的IP(路由器属于三层设备,拆解数据包到IP层),查看数据包的目的IP为110.1.1.1,进而查找路由表,发现数据要到达目的网络,数据包必须往下一跳218.1.1.2发送,因此路由器对数据包进行重封装,查看ARP表,原、目的IP保持不变,将原MAC修改成R1出接口(连接到R2的那个端口)的MAC地址,目的MAC改成R2的进接口(R2接R1的接口MAC地址),接下来和二层传输一样,将数据包丢给R2。
d)R2收到数据包后与R1做的操作一样,直到数据报文到达目标。根据之前的步骤可以推出数据报文到达目标后,原IP、目的IP不变,原MAC为R2接PC2的接口MAC、目的MAC为PC2的MAC。PC2发现数据报文的目的IP和目的MAC与本机相符(非攻击者),从而拆解数据包,获得数据报文内容。回复报文的时候和之前的传输一样。
2.数据在共享网络中的传输图(PC1发包给PC2)
数据报文在共享网络中的传输和交换网络唯一的不同在于第二个步骤,交换网络中交换机会根据MAC-端口对应表进行传输,也就是说除了网关(以图为例),其他同交换机下的PC机无法收到数据报文(没出现攻击的情况下)。而在共享网络中,由于HUB属于一层设备,对于到达本身的数据报文,HUB会对报文进行广播(除了收到报文的那个接口),因此接在同HUB的所有PC都能收到该报文。注:通常情况下,网卡都是工作在非混杂模式,也就是说即使收到数据报文,网卡会判断目的MAC是否和自己的一样,不一样的话代表数据包不是给自己的,因此会丢弃,只接收那些目的MAC和自己一样的数据报文。在嗅探时必须开启混杂模式,在该模式下,网卡不对数据报文进行判断,一锅端!二.ARP欺骗:1.欺骗过程及原理从上面的数据报文传输过程可以知道二层传输是通过MAC进行传输的,在传输过程中PC需要查询ARP表。因此攻击者只要可以改变目标的ARP表就能实现攻击,从而将数据牵引到自己的机器上,如图
a)在正常情况下,PC1通过本地ARP表知道网关1.1.1.2的MAC地址为1.1.1.10260.8c01.1111,所以PC1封装包的时候会将目的MAC设置成路由器的MAC地址。交换机通过MAC-端口对应表能够正常的将数据报文从E1口转发给路由器,实现数据传输。
b)黑客对PC2有完全的控制权,通过不断发送(假冒的)ARP报文告诉PC1,自己才是1.1.1.1对应的MAC是0260.8c01.1113。
c)PC1收到黑客发的ARP报文后,刷新自己的ARP表,将1.1.1.1的MAC误认为是0260.8c01.1113。
d)PC1将要访问外网数据报文的目的MAC设置成0260.8c01.1113(PC2的MAC,目测PC1被自己的ARP表给骗了)。
e)交换机通过拆解包发现目的MAC对应的端口为E4(PC2的那个接口,连锁反应了!),就将数据报文从E4口丢出。
f)PC2成功得到PC1发往外网的请求报文。偷看后重新封包,原IP、目的IP不改变,将原MAC改成PC2的MAC,目的MAC改成网关的(数据包恢复正常,看起来和没攻击时PC1发出的报文完全一样),PC2修改完后将数据包丢给交换机,从而欺骗实现,当然对于该包的回应报文,由于路由器ARP表没被污染,所以能够正常的将返回报文直接丢给PC1。
2.如何选择欺骗方向 在欺骗过程中,选择正确的欺骗方向也是很重要的,通过阅读我们可以看到上面的欺骗方向是PC1à网关。那么我们如何确定正确的欺骗方向呢?
a) 员工工作网络,我们知道正常请求报文里面含有大量的敏感信息,如网站管理后台账户密码等。而请求包的走向是员工PCà网关,如果黑客控制的电脑与员工内部同一网段,那么正常情况下黑客会欺骗员工的PC机自己是网关,从而截获请求报文
b)服务器网络,而在机房(服务器网络)中,管理员一般会在外部进行访问,即请求报文是由网关转发给服务器,也就是说请求报文的走向是网关à服务器,如果黑客控制的是机房里的一台服务器,为了截获到请求报文中的服务器登录密码等敏感信息,攻击者一般会对网关发起欺骗,告诉网关自己是某台或者某些服务器。
c) 实际上不管在员工网络或者机房内部网络,黑客比较习惯与进行双向欺骗,一方面告诉网关自己是某些终端,另一方面告诉同网段的其他终端自己是网关,但是该方法会产生大量的垃圾信息,因为在回应报文中基本上不会携带敏感的信息。
3. ARP欺骗的瓶颈为了得到更多的敏感信息,很多人会使用双向+批量的欺骗方式,一方面告诉网关自己的MAC对应的IP是网段内所有的IP(这样无论数据报文是给哪台机子的,只要是发送给同网段机器网关都会转发给攻击者);另一方面欺骗所有同网段终端自己是网关(实际上欺骗同网段所有的终端比较容易,直接将ARP包的目的mac设置成FFFFFFFFF就行了),从而所有终端发出的报文都会经过攻击者的机器。但是如果这样子做,攻击者控制的机器直接承载了整个网段的数据流量,要对整个网段的数据进行处理,重封装、再转发,这在服务器的性能和配置上要求可不是一般的苛刻,所以选择好欺骗对象和方向显得非常重要。#p#
三.嗅探和ARP欺骗的区别
a) 嗅探一般存在于共享网络中,在共享网络中一般使用HUB作为接入层,经过HUB的数据报文不管长得什么样,因为HUB工作在第一层,看不懂二层以上的报文是啥样子的,所以一律以广播处理,在同一网段的计算机只要将网卡设置成混杂模式即可。
b) 嗅探在交换网络中不适用,因为交换机是通过MAC-端口对应表来转发数据报文的,所以在交换网络中如果只将网卡设置成混杂模式,而不进行ARP欺骗,其结果只能接受到网络中的广播包。
c) 共享网络中适用ARP欺骗,那是多此一举,适用ARP欺骗的方式会对影响网络流量,对网络造成很大的影响,另外适用ARP欺骗会产生大量的ARP报文,很容易被发现。而嗅探对整个网络几乎没有影响,因为嗅探只是做监听,而不会产生多余的数据报文。
四.加密是否安全
很多人说使用HTTPS或者VPN等手段就可以防止嗅探或者ARP欺骗,这是不全面的。具体要看什么网络及什么技术。下面笔者针对HTTPS和VPN在共享、交换网络中进行探讨。
1. 共享网络+嗅探
a) 在共享网络使用HTTPS确实可以很好的解决数据被窃取的问题(当然个人证书泄露除外),由于监听的机器没有证书也就无法进行解密。
b) 在共享网络中使用VPN技术不一定能够防止,部分VPN技术只是在原有的数据报文多加一个IP报头,对于数据内容本身未做加密,攻击者使用监听技术获取该类数据还是能正常获取报文的内容的
2. 交换网络+ARP嗅探从原理上讲,该类型的攻击属于中间人攻击,可以伪造任何证书,因此对于HTTPS等来说,攻击者只要偷梁换柱,伪造证书就可以成功获得数据的明文信息。但对于部分使用秘钥不通过公网传输的协议(例如使用publikey验证的SSH,KEY不通过网络传输)就无法截取明文信息,也无法伪造。
3. 共享网络+ARP欺骗该类型攻击和第2中攻击没啥两样,就不做详细讨论了五.如何防止ARP欺骗及嗅探。实际上网上已经有很多种解决方案了,但在这边还是小提一下简单的防止方式。第四点也有提到了一部分。在交换网络中一般使用双向绑定就可以解决ARP欺骗的问题了,有些牛人说可以直接伪造MAC欺骗交换机,这也是一种绕过方法,但实际上这种方法可行性不高,虽然有时候确实能够截获到数据报文,但会时交换机的MAC-端口对应表产生混乱,另外报文若发给你就不会发给目标服务器,会产生拒绝服务攻击。在共享网络中使用双向绑定理论上是没效果的,因为只要经过HUB的数据都会进行广播,即使绑定,所有终端也会收到数据报文。Hub不像二层交换,有MAC-端口对应表。当然对于嗅探和ARP攻击的原理、利用和防御不止文中提到的这些,文章只是笔者的一点心得体会,仅供参考。说这么多,实际上要进行ARP攻击的话,一个cain、一个sniffer、一个ettercap就可以完全搞定了。