ARP-- 在 TCP/IP 协议栈中, 最不安全的协议莫过于 ARP 了, 我们经常听到的网络扫描, 内网渗透, 流量欺骗等等, 他们基本上都与 ARP 有关系, 甚至可以说, 他们的底层都是基于 ARP 实现的但是 ARP 的是实现仅需一问一答的两个包即可, 实现上很简单
一 ARP 协议
ARP(Address Resolution Protocol)地址解析协议, 目的是实现 IP 地址到 MAC 地址的转换
在计算机间通信的时候, 计算机要知道目的计算机是谁(就像我们人交流一样, 要知道对方是谁), 这中间需要涉及到 MAC 地址, 而 MAC 是真正的电脑的唯一标识符
为什么需要 ARP 协议呢? 因为在 OSI 七层模型中, 对数据从上到下进行封装发送出去, 然后对数据从下到上解包接收, 但是上层 (网络层) 关心的 IP 地址, 下层关心的是 MAC 地址, 这个时候就需要映射 IP 和 MAC
ARP 之简单请求应答
当两台计算机在同一个局域网通信, 我们以 ping 命令为例, 该命令使用的 ICMP 协议
PC1 依据 OSI 模型依次从上至下对数据进行封装, 包括对 ICMP Date 加 IP 包头的封装, 但是到了封装 MAC 地址的时候, PC1 首先查询自己的 ARP 缓存表, 发现没有 IP2 和他的 MAC 地址的映射, 这个时候 MAC 数据帧封装失败我们使用 ping 命令的时候, 是指定 PC2 的 IP2 的, 计算机是知道目的主机的 IP 地址, 能够完成网络层的数据封装, 因为设备通信还需要对方的 MAC 地址, 但是 PC1 的缓存表里没有, 所以在 MAC 封装的时候填入不了目的 MAC 地址
那么 PC1 为了获取 PC2 的 MAC 地址, PC1 要发送询问信息, 询问 PC2 的 MAC 地址, 询问信息包括 PC1 的 IP 和 MAC 地址 PC2 的 IP 地址, 这里我们想到一个问题, 即使是询问信息, 也是需要进行 MAC 数据帧的封装, 那这个询问信息的目的 MAC 地址填什么呢, 规定当目的 MAC 地址为 ff-ff-ff-ff-ff-ff 时, 就代表这是一个询问信息, 也即使后面我要说的广播
PC2 收到这个询问信息后, 将这里面的 IP1 和 MAC1(PC1 的 IP 和 MAC)添加到本地的 ARP 缓存表中, 然后 PC2 发送应答信息, 对数据进行 IP 和 MAC 的封装, 发送给 PC2, 因为缓存表里已经有 PC1 的 IP 和 MAC 的映射了呢这个应答信息包含 PC2 的 IP2 和 MAC2PC1 收到这个应答信息, 理所应当的就获取了 PC2 的 MAC 地址, 并添加到自己的缓存表中
经过这样交互式的一问一答, PC1 和 PC2 都获得了对方的 MAC 地址, 值得注意的是, 目的主机先完成 ARP 缓存, 然后才是源主机完成 ARP 缓存之后 PC1 和 PC2 就可以真正交流了
ARP 之广播请求单播回应
上图面的图解是不完全的 ARP 协议, 因为在局域网里边不会只有两台主机, 这里就要考虑如何在局域网众多主机里获得目的主机的 MAC
和上面的一样, 刚开始 PC1 并不知道 PC2 的 MAC 地址, 同样需要发送 ARP 请求, 但是这个局域网里主机很多, 怎么唯独获取 PC2 的 MAC 呢, 我们想到和一群陌生人交流一样, 可以挨着询问一遍, 这就是我们要说的广播, 首先 PC1 广播发送询问信息(信息和上一张图介绍的一样), 在这个普通交换机上连接的设备都会受到这个 PC1 发送的询问信息
接下来需要做的是, 所有在这个交换机上的设备需要判断此询问信息, 如果各自的 IP 和要询问的 IP 不一致, 则丢弃, 如图 PC3Route 均丢弃该询问信息, 而对于 PC2 判断该询问信息发现满足一致的要求, 则接受, 同样的写入 PC1 的 IP 和 MAC 到自己的 ARP 映射表中
最后, PC2 单播发送应答信息给 PC1, 告诉 PC1 自己的 IP 和 MAC 地址
二 ARP 数据包信息
ARP 数据的详细信息列表如下
Hardware type | 硬件类型,标识链路层协议 |
Protocol type | 协议类型,标识网络层协议 |
Hardware size | 硬件地址大小,标识 MAC 地址长度,这里是 6 个字节(48bti) |
Protocol size | 协议地址大小,标识 IP 地址长度,这里是 4 个字节(32bit) |
Opcode | 操作代码,标识 ARP 数据包类型,1 表示请求,2 表示回应 |
Sender MAC address | 发送者 MAC |
Sender IP address | 发送者 IP |
Target MAC address | 目标 MAC,此处全 0 表示在请求 |
Target IP address | 目标 IP |
ARP 请求包
ARP 应答包
内容格式和上图相似, 不过会有目的地址对应的 MAC 地址, ARP 数据包类型字段为 2
三 ARP 攻击
我们知道, 当 PC1 对 PC2 正常通信的时候 (先别管攻击者 PC3),PC2PC1 会先后建立对方的 IP 和 MAC 地址的映射(即建立 ARP 缓存表), 同时对于交换机而言, 它也具有记忆功能, 会基于源 MAC 地址建立一个 CAM 缓存表(记录 MAC 对应接口的信息), 理解为当 PC1 发送消息至交换机的 Port1 时, 交换机会把源 MAC(也就是 MAC1) 记录下来, 添加一条 MAC1 和 Port1 的映射, 之后交换机可以根据 MAC 帧的目的 MAC 进行端口转发, 这个时候 PC3 只是处于监听状态, 会把 PC1 的广播丢弃
正常的 PC3 会把广播包丢弃, 同样的 PC3 可以抓住这一环节的漏洞, 把不属于自己的广播包接收, 同时回应一个虚假的回应包, 告诉 PC1 我就是 PC2
(IP2-MAC3), 这样 PC1 会收到两个回应包(一个正确的 IP2-MAC2, 一个虚假的 IP2-MAC3), 但是 PC1 并不知道到底哪个是真的, 所以 PC1 会做出判断, 并且判断后到达的为真, 那么怎么让虚假的回应包后到达呢, PC3 可以连续不断的发送这样的回应包, 总会把哪个正确的回应包覆盖掉
而后 PC1 会建立 IP2-MAC3 这样一条 ARP 缓存条目, 以后当 PC1 给 PC2 发送信息的时候, PC1 依据 OSI 模型从上至下在网络层给数据封装目的 IP 为 IP2 的包头, 在链路层通过查询 ARP 缓存表封装目的 MAC 为 MAC3 的数据帧, 送至交换机, 根据查询 CAM 表, 发现 MAC3 对应的接口为 Port3, 就这样把信息交付到了 PC3, 完成了一次 ARP 攻击
如果 ARP 攻击严重话, 会导致同一个局域网 (也是同一个广播域) 的所有主机的 ARP 缓存表中都存放着错误的 IP 和 MAC 的映射, 如上图, 每台主机的 ARP 缓存表中, 不论哪个 IP, 都会映射到攻击者的 MAC 地址 MAC1 上, 这样该局域网内的所有主机的消息都发送到 Hacker 的主机上
来源: http://www.bubuko.com/infodetail-2517109.html