关于ARP、MAC、IP欺骗以及TCP劫持

关于ARP、MAC、IP欺骗以及TCP劫持_第1张图片

首先说下ARP欺骗,主要参考http://www.rootsecure.net/content/downloads/pdf/arp_spoofing_slides.pdf 和 ARP协议揭密

ARP欺骗是攻击者B主动发送ARP响应来欺骗受害者C对ARP缓存表中网关A的IP和MAC映射进行更新,使网关的IP对应B的MAC,如此一来受害者C对网关A发送的数据就全部走到了攻击者B这里,那么B很容易就可以对数据进行sniff甚至篡改,最后再把数据转发给真正的网关A(B事先开启ip_forward功能)。

同样地攻击者B主动发送ARP响应来欺网关A对ARP缓存表中受害者C的IP和MAC映射进行更新,使受害者C的IP对应B的MAC,如此一来网关A对受害者C发送的数据就全部走到了攻击者B这里,那么B很容易就可以对数据进行sniff甚至篡改,最后再把数据转发给真正的受害者C(同样B事先开启ip_forward功能)。

现在看起来B已经顺利对A和C之间的通信进行了监控甚至篡改。ARP欺骗是基于MAC与IP映射关系的欺骗,对于网络层以上是透明的,所以也就达到了TCP劫持的目的,甚至是基于ssh v1的MITM(dsniff工具包里的sshmitm可以实现)。另外一些基于源IP地址信任的策略也轻松突破了(攻击者B不用开启ip_forward),就是实现了IP的欺骗(注意场景:局域网内哈)。还有就是《ARP协议揭密》一文中利用ICMP重定向报文进行跨网段的ARP欺骗因为条件有限我未做测试,实践过的同学请告知。

ARP欺骗的防御:网络中任意两节点之间双向IP+MAC静态绑定是最好的办法,当然维护成本也是比较高的。对于不能静态绑定的环境,可以参考http://www.xfocus.net/articles/200711/960.html 一文,正好我也安装了某ARP防火墙,发现文中的思路应该已经被采用,毕竟是07年的文章了。

再说下公网的IP欺骗,当然我说的是TCP连接(ICMP UDP这些随便你怎么玩),实现起来会很费劲,传说中凯文米特尼克做过。

从理论上看:攻击者B首先要对受信任者C进行Flood以免它对目标A的TCP产生RST回应而影响效果(这步不算难),然后攻击者B伪装C的IP对目标A发起SYN,目标A会向受信任者C回应SYN+ACK,所以C这个时候必须无响应,作为攻击者B收不到A给C的SYN+ACK,所以我们必须对A的TCP ISN进行预测(这个是难点,相关技术自行Google之),然后以正确的ACK值(A的ISN+1)和我们要发送的数据回复给目标A完成一次攻击。当然只是理论,我没有测试过。

最后说下MAC欺骗,主要参考http://www.cnblogs.com/wuxdotnet/archive/2010/04/07/1706654.html 和 http://huaidan.org/archives/2199.html

关于ARP、MAC、IP欺骗以及TCP劫持_第2张图片

每个数据包 都包含了 源mac地址(发送者的mac地址) ,目标mac地址(对方的mac地址)

交换机是通过mac表里mac地址和交换机端口的对应关系来传递网络数据的

如果我们改变mac地址和交换机端口的对应关系 那么就能达到我们的目的了

鉴于前面提到ARP欺骗的危害如此之大,所以一些网络环境里主机(网关)之间采用双向IP+MAC静态绑定来防御ARP欺骗。如此一来我们似乎没法在这种环境里面进行sniff(亲,场景是交换网络,不是共享网络哈),有一种比较暴力的方法就是泛洪交换机的MAC地址(dsniff工具包里的macof可以实现),这样确实会使交换机以广播模式工作(变成HUB工作方式)从而达到嗅探的目的,但是会造成交换机负载过大,网络缓慢和丢包甚至瘫痪。这个时候MAC欺骗就派上用场了,ARP欺骗是欺骗了IP/MAC的应关系,而MAC欺骗则是欺骗了MAC/PORT(交换机的端口)的对应关系。还是以攻击者B劫持受害者C作为例子(da为目的MAC,sa为源MAC):

mac欺骗举例说明

每个数据包 都包含了 源mac地址(发送者的mac地址) ,目标mac地址(对方的mac地址)

交换机是通过mac表里mac地址和交换机端口的对应关系来传递网络数据的

如果我们改变mac地址和交换机端口的对应关系 那么就能达到我们的目的了

现在局域网里有2台主机

主机Amac 08-10-17-25-ac-6d

主机Bmac 00-04-61-5f-44-11

交换机的mac表如下

Destination Address   Address Type     VLAN  Destination Port

-------------------  ------------  ----  --------------------

cc00.0e04.0000          Self                          1           Vlan1

0810.1725.ac6d          Dynamic                 1       FastEthernet0/2

0004.615f.4411           Dynamic                 1       FastEthernet0/1

这里看到 mac地址是 08-10-17-25-ac-6d  的主机A接在交换机的2号接口上

mac地址是 00-04-61-5f-44-11  的主机B接在交换机的1号接口上

交换机的mac学习功能

交换机检查收到数据包的源MAC地址,并查找MAC地址表中与之相匹配的项。如果不匹配,交换机将重新录该MAC地址和接收该数据帧的端口,这个过程被称作地址学习,

利用这个学习功能就能实现mac欺骗我们要让主机B收不到数据包

那就用主机A发送伪造的数据包 数据包的源mac地址是主机B的 就行了

发送成功后

交换机的mac表就变了

Destination Address   Address Type     VLAN  Destination Port

-------------------  ------------  ----  --------------------

cc00.0e04.0000          Self                          1           Vlan1

0810.1725.ac6d          Dynamic                 1       FastEthernet0/2

0004.615f.4411           Dynamic                 1       FastEthernet0/2

这时 交换机认为 主机B在 2号口了 其实主机B还是接在 1号口

这样我们成功实施了MAC欺骗 所有的发往主机B的数据 都发送到了2号端口,主机B收不到数据了

这时有个问题 主机B发送数据的时候 端口的对应·关系还是会变回正确的

这时就需要我们不停发送伪造的数据包来维持这个对应关系

MAC欺骗的防御:高级的交换机可以采用ip+mac+port 绑定,控制CAM表的自动学习,当然维护成本也会很高,除非网络节点比较稳定,很少增减节点。

你可能感兴趣的:(关于ARP、MAC、IP欺骗以及TCP劫持)