中间人攻击——ARP 欺骗的原理、实战及防御?(1)什么是网关
首先来简单解释一下什么是网关,网关工作在 OSI 七层模型中的传输层或者应 用层,用于高层协议的不同网络之间的连接,简单地说,网关就好比是一个房间 通向另一个房间的一扇门。
(2)ARP 协议是什么
ARP(Address Resolution Protocol)地址转换协议,工作在 OSI 模型的数据 链路层,在以太网中,网络设备之间互相通信是用 MAC 地址而不是 IP 地址, ARP 协议就是用来把 IP 地址转换为 MAC 地址的。而 RARP 和 ARP 相反,它是 反向地址转换协议,把 MAC 地址转换为 IP 地址。 假设 A(192.168.1.2)与 B(192.168.1.3)在同一局域网,A 要和 B 实现通信。A 首 先会发送一个数据包到广播地址(192.168.1.255),该数据包中包含了源 IP(A)、 源 MAC、目的 IP(B)、目的 MAC,这个数据包会被发放给局域网中所有的主 机,但是只有 B 主机会回复一个包含了源 IP(B)、源 MAC、目的 IP(A)、 目的 MAC 的数据包给 A,同时 A 主机会将返回的这个地址保存在 ARP 缓存表 中。
(3)ARP 欺骗原理
上面提到过了 ARP 缓存表,在每台主机都有一个 ARP 缓存表,缓存表中记录了 IP 地址与 MAC 地址的对应关系,而局域网数据传输依靠的是 MAC 地址。假设主机 A 192.168.1.2,B 192.168.1.3,C 192.168.1.4; 网关 G 192.168.1.1; 在同一局域网,主机 A 和 B 通过网关 G 相互通信,就好比 A 和 B 两个人写信, 由邮递员 G 送信,C 永远都不会知道 A 和 B 之间说了些什么话。但是并不是想 象中的那么安全,在 ARP 缓存表机制存在一个缺陷,就是当请求主机收到 ARP 应答包后,不会去验证自己是否向对方主机发送过 ARP 请求包,就直接把这个 返回包中的 IP 地址与 MAC 地址的对应关系保存进 ARP 缓存表中,如果原有相 同 IP 对应关系,原有的则会被替换。 这样 C 就有了偷听 A 和 B 的谈话的可能,继续思考上面的例子:
C 假扮邮递员,首先要告诉 A 说:“我就是邮递员” (C 主机向 A 发送构造好
的返回包,源 IP 为 G 192.168.1.1,源 MAC 为 C 自己的 MAC 地址),愚蠢的
A 很轻易的相信了,直接把“C 是邮递员”这个信息记在了脑子里;
C 再假扮 A,告诉邮递员:“我就是 A” (C 向网关 G 发送构造好的返回包,
源 IP 为 A 192.168.1.2,源 MAC 地址为自己的 MAC 地址),智商捉急的邮递 员想都没想就相信了,以后就把 B 的来信送给了 C,C 当然就可以知道 A 和 B 之间聊了些什么
上面 ABCG 的故事就是 ARP 双向欺骗的原理了
ARP 单向欺骗就更好理解了,C 只向 A 发送一个返回包,告诉 A:G 192.168.1.1
的 MAC 地址为 5c-63-bf-79-1d-fa(一个错误的 mac 地址),A 把这个信息
记录在了缓存表中,而 G 的缓存表不变,也就是说,A 把数据包给了 C,而 G
的包还是给 A,这样就是 ARP 单向欺骗了。