刚工作在科来做协议分析时的笔记,小十年了,前期的图比较粗糙,做个知识的迁移与同步。现在再看,都是刚工作时激情满满的回忆。
1. 基础知识
1.1 ARP协议
ARP主要用来进行IP地址到MAC地址的解析。ARP的Opcode有两个(1:请示,2:响应)
1.2 CAM表
在交换机上只有CAM表,CAM表记录MAC地址与物理端口的对应关系,CAM表如下图所示:
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报文结构如下图所示:
类型:标识生成的错误报文,它是ICMP报文中的第一个字段;
代码:进一步地限定生成ICMP报文。该字段用来查找产生错误的原因;
校验和:存储了ICMP所使用的校验和值。
未使用:保留字段,供将来使用,起值设为0
数据:包含了所有接受到的数据报的IP报头。还包含IP数据报中前8个字节的数据;
ICMP提供的诊断报文如下所示:
2.基本情况
2.1 网络拓扑
2.2 ARP表
正常情况下三台主机的ARP表如下所示:
主机A的ARP表如下所示:
主机B的ARP表如下所示:
Hacker的ARP表如下所示:
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
主机A的ARP表:
抓包分析
3.2 欺骗客户端B
对主机B进行欺骗,向192.168.1.30发个arp reply报文,告诉它192.168.1.10的MAC为Hacker这台主机的MAC
主机B的ARP表
抓包分析:
可以看到主机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
3.4 欺骗后效果
我在主机B上开启telnet服务,然后在主机A登陆,在Hacker上抓包。
我只开启dsniff这个工具只抓用户名和密码的数据包,其他都不抓。
4. 如何判断ARP中间人攻击
4.1 ICMP重定向
这样的话,Hacker就达到进行中间人攻击的目的,不过这个攻击有个问题。Hacker在进行欺骗的时候,会向A和B都发ICMP重定向报文,Hacker产生的ICMP重定向报文如下所示:
同理;192.168.1.20也会向192.168.1.30发送ICMP重定向报文,告诉192.168.1.30去192.168.1.10直接送过去,而不需要经过192.168.1.20.其ICMP重定向报文如下所示:
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的重定向报文即可。
直接禁用output的ICMP 类型5,代码1的报文,查看help,相应的参数配置为
iptables -A OUTPUT -p icmp --icmp-type 5/1 -j DROP