1. 刚工作在科来做协议分析时的笔记,小十年了,前期的图比较粗糙,做个知识的迁移与同步。现在再看,都是刚工作时激情满满的回忆。

1. 基础知识

1.1 ARP协议

ARP主要用来进行IP地址到MAC地址的解析。ARP的Opcode有两个(1:请示,2:响应)
image.png

1.2 CAM表

在交换机上只有CAM表,CAM表记录MAC地址与物理端口的对应关系,CAM表如下图所示:
image.png

1.3 二层访问逻辑

局域网中在二层A访问B怎么走呢?
1.首先A会发一个ARP请示,请示B IP对应的MAC地址
2.B收到A的请示以后会响应一个ARP响应包,告诉A自己的MAC地址
3.A发包给B以后直接把相关的数据包给B对应的MAC地址
4.有交换机的时候交换机会查询自己的CAM表,从而了解这个MAC通过哪个物理接口出去

1.4 ICMP协议

ICMP全称Internet Control Message Protocol,中文名为因特网控制报文协议。它工作在OSI的网络层,向数据通讯中的源主机报告错误。ICMP可以实现故障隔离和故障恢复。
网络本身是不可靠的,在网络传输过程中,可能会发生许多突发事件并导致数据传输失败。网络层的IP协议是一个无连接的协议,它不会处理网络层传输中的故障,而位于网络层的ICMP协议却恰好弥补了IP的缺限,它使用IP协议进行信息传递,向数据包中的源端节点提供发生在网络层的错误信息反馈。
ICMP报文结构如下图所示:
image.png

类型:标识生成的错误报文,它是ICMP报文中的第一个字段;
代码:进一步地限定生成ICMP报文。该字段用来查找产生错误的原因;
校验和:存储了ICMP所使用的校验和值。
未使用:保留字段,供将来使用,起值设为0
数据:包含了所有接受到的数据报的IP报头。还包含IP数据报中前8个字节的数据;

ICMP提供的诊断报文如下所示:
image.png

2.基本情况

2.1 网络拓扑

image.png

2.2 ARP表

正常情况下三台主机的ARP表如下所示:
主机A的ARP表如下所示:
image.png
主机B的ARP表如下所示:
image.png
Hacker的ARP表如下所示:
image.png

3. ARP攻击

正常情况下如果主机A和主机B进行通信的话,它们之间的通信是不会经过Hacker的机器的。但是如果Hacker想让A和B通信的流量经过它,它就可以进行ARP中间人欺骗攻击,即分别向A发送一个报文告诉主机A 192.168.1.30对应的MAC为Hacker的MAC,再告诉主机B 192.168.1.10所对应的MAC为Hacker的MAC,这样的话Hacker这台主机便同时欺骗了主机A和主机B,但是这个时候流量可以到Hacker这台主机,但是它并不能转发A和B之间的流量,如果想让Hacker这台主机可以转发A和B之间的流量应该开启Hacker这台机器的转发功能。

3.1 欺骗客户端A

对主机A进行欺骗,向192.168.1.10发个arp reply报文,告诉它192.168.1.30的MAC为Hacker这台主机的MAC
image.png
主机A的ARP表:
image.png
抓包分析
image.png

3.2 欺骗客户端B

对主机B进行欺骗,向192.168.1.30发个arp reply报文,告诉它192.168.1.10的MAC为Hacker这台主机的MAC
image.png
主机B的ARP表
image.png
抓包分析:
image.png
可以看到主机A和主机B都被欺骗了,主机A所对应主机B的MAC为Hacker的MAC,主机B所对应主机A的MAC为Hacker的MAC。

3.3 开启路由转发

开启Hacker的转发功能,这样Hacker这台机器就可以转发主机A和主机B之间的通信了。

echo 1 > /proc/sys/net/ipv4/ip_forward

image.png

3.4 欺骗后效果

我在主机B上开启telnet服务,然后在主机A登陆,在Hacker上抓包。
image.png
我只开启dsniff这个工具只抓用户名和密码的数据包,其他都不抓。
image.png

4. 如何判断ARP中间人攻击

4.1 ICMP重定向

这样的话,Hacker就达到进行中间人攻击的目的,不过这个攻击有个问题。Hacker在进行欺骗的时候,会向A和B都发ICMP重定向报文,Hacker产生的ICMP重定向报文如下所示:
image.png
image.png
image.png

同理;192.168.1.20也会向192.168.1.30发送ICMP重定向报文,告诉192.168.1.30去192.168.1.10直接送过去,而不需要经过192.168.1.20.其ICMP重定向报文如下所示:
image.png
image.png

4.2 IP地址冲突

判断IP地址冲突的主要方式就是一个IP地址对应多个MAC地址,由于攻击者hacker在攻击的时候会向主机A和主机B都发ARP响应包来进行ARP欺骗,但是真实的主机A和B也有可能(只是有可能,如果攻击者一直发的话,主机A和B都有对方的ARP表项的时候就不会发起ARP查询,这里面可以查询一下ARP缓存的时候,在缓存超时前发相应的ARP响应报文,这样就可以保障对方不会发起ARP查询)收到对方的ARP请示,这样它们也会进行ARP响应,这样就会造成同一个IP地址有多个MAC地址的情况,但是这种情况要看攻击者的发包频率对主机A和B是否有相应的ARP表,如果有的话就不会查询,所以这种IP地址冲突的情况只是有一定概率出现,主要看攻击者的控制能力。

5. 如何不被发现

如果想要做攻击效果明显,不容易被对方发现。我们可以在Hacker上做个策略,不让Hacker这台攻击主机发送ICMP重定向报文,这样的话即使别人抓包的话也看不到ICMP重定向报文。
通过上面可以看到,攻击者发送的是ICMP主机重定向,其类型为5,代码为1,这个时候我们在攻击者主机禁用类型5代码1的重定向报文即可。
image.png
直接禁用output的ICMP 类型5,代码1的报文,查看help,相应的参数配置为
image.png

iptables -A OUTPUT  -p icmp --icmp-type 5/1  -j DROP

image.png