Address Resolution Protocol,地址解析协议。
根据 IP 地址获取物理地址的一个协议。位于传输层。
ARP 协议的内容
主机发送信息时将包含目标 IP 地址的 ARP 请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该 IP 地址和物理地址存入本机 ARP 缓存中并保留一定时间,下次请求时直接查询 ARP 缓存以节约资源。
地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送 ARP 应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机 ARP 缓存;由此攻击者就可以向某一主机发送伪 ARP 应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个 ARP 欺骗。ARP 命令可用于查询本机 ARP 缓存中 IP 地址和 MAC 地址的对应关系、添加或删除静态对应关系等。相关协议有 RARP、代理 ARP。NDP 用于在 IPv6 中代替地址解析协议。
一句话总结:ARP 协议以广播的形式向其它结点询问特定 IP 地址的 MAC 地址,把结果记录在本地缓存中。
mac 地址
长度 48bit,6B,全名 Media Address Control。
任何一个网卡的 Mac 地址都是唯一的。
危险的 ARP 协议
如果要在 TCP/IP 协议栈中选择一个"最不安全的协议",那么我会毫不犹豫把票投给 ARP 协议。我们经常听到的这些术语,包括"网络扫描"、"内网渗透"、"中间人拦截"、"局域网流控"、"流量欺骗",基本都跟 ARP 脱不了干系。大量的安全工具,例如大名鼎鼎的 Cain、功能完备的 Ettercap、操作傻瓜式的 P2P 终结者,底层都要基于 ARP 实现。
ARP 欺骗的防御措施
- 不要把网络安全信任关系建立在 IP 基础上或 MAC 基础上(RARP 同样存在欺骗的问题),理想的关系应该建立在 IP+MAC 基础上。
- 设置静态的 MAC-->IP 对应表,不要让主机刷新设定好的转换表。
- 除非很有必要,否则停止使用 ARP,将 ARP 做为永久条目保存在对应表中。
- 使用 ARP 服务器。通过该服务器查找自己的 ARP 转换表来响应其他机器的 ARP 广播。确保这台 ARP 服务器不被黑。
- 使用“proxy”代理 IP 的传输。
- 使用硬件屏蔽主机。设置好路由,确保 IP 地址能到达合法的路径(静态配置路由 ARP 条目),注意,使用交换集线器和网桥无法阻止 ARP 欺骗。
- 管理员定期用响应的 IP 包中获得一个 RARP 请求,然后检查 ARP 响应的真实性。
- 管理员定期轮询,检查主机上的 ARP 缓存。
- 使用防火墙连续监控网络。注意有使用 SNMP 的情况下,ARP 的欺骗有可能导致陷阱包丢失。 [6]
- 若感染 ARP 病毒,可以通过清空 ARP 缓存、指定 ARP 对应关系、添加路由信息、使用防病毒软件等方式解决。
NDP 协议
地址解析协议是 IPv4 中必不可少的协议,但在 IPv6 中将不再存在地址解析协议。在 IPv6 中,地址解析协议的功能将由 NDP(邻居发现协议,Neighbor Discovery Protocol)实现,它使用一系列 IPv6 控制信息报文(ICMPv6)来实现相邻节点(同一链路上的节点)的交互管理,并在一个子网中保持网络层地址和数据链路层地址之间的映射。邻居发现协议中定义了 5 种类型的信息:路由器宣告、路由器请求、路由重定向、邻居请求和邻居宣告。与 ARP 相比,NDP 可以实现路由器发现、前缀发现、参数发现、地址自动配置、地址解析(代替 ARP 和 RARP)、下一跳确定、邻居不可达检测、重复地址检测、重定向等更多功能。
NDP 与 ARP 的区别
IPv4 中地址解析协议是独立的协议,负责 IP 地址到 MAC 地址的转换,对不同的数据链路层协议要定义不同的地址解析协议。IPv6 中 NDP 包含了 ARP 的功能,且运行于因特网控制信息协议 ICMPv6 上,更具有一般性,包括更多的内容,而且适用于各种数据链路层协议; 地址解析协议以及 ICMPv4 路由器发现和 ICMPv4 重定向报文基于广播,而 NDP 的邻居发现报文基于高效的组播和单播。