案例检测ARP欺骗?

wen 网络安全 40

本文目录导读:

案例检测ARP欺骗?

  1. 核心原理:ARP欺骗的本质
  2. 方法一:命令行检测(适合临时排查,Windows/Linux/Mac通用)
  3. 方法二:专业工具检测(推荐,适合深度分析)
  4. 方法三:自动化脚本检测(Python,适合进阶)
  5. 方法四:预防与被动检测(防御性策略)
  6. 最佳检测流程

检测ARP欺骗通常需要观察网络流量中的异常行为IP/MAC地址不匹配,由于你提到的是“案例检测”,我将提供几种不同场景下的检测方法,涵盖手动命令行检测、专业工具检测以及自动化脚本检测。

以下是针对ARP欺骗的检测方案:

核心原理:ARP欺骗的本质

攻击者伪造ARP应答,将网关IP目标主机IP映射到攻击者的MAC地址,检测的关键在于:发现同一IP对应了多个不同的MAC地址,或同一MAC地址对应了多个不同的IP


命令行检测(适合临时排查,Windows/Linux/Mac通用)

这是最快速、最基础的方法,适合怀疑自己是否被ARP欺骗。

查看当前ARP缓存表

在终端输入命令,查看所有ARP条目:

  • Windows: arp -a
  • Linux/Mac: arp -an

重点检查对象:

  • 网关条目:你的默认网关IP对应的MAC地址,正常情况下,这个MAC地址应该是你的路由器物理接口(通常印在路由器背面或可通过路由器管理界面查询)。
  • 频繁出现的MAC:如果同一个MAC地址(00-11-22-33-44-55)出现在了多个不同IP(例如网关IP、同事IP、服务器IP)的条目中,极大概率是ARP欺骗,攻击者将所有流量都导向了自己的机器。

手动交叉验证(关键步骤)

  1. 记录当前网关MAC:从 arp -a 中记下网关IP对应的MAC地址(记为 MAC_A)。
  2. 获取真实网关MAC:直接访问路由器管理后台,查看WAN口或LAN口的真实MAC地址(记为 MAC_B)。
  3. 比较
    • MAC_A == MAC_B:目前安全(但可能下一秒被攻击)。
    • MAC_A != MAC_B确认遭受ARP欺骗

专业工具检测(推荐,适合深度分析)

对于实验室或企业环境,使用专用ARP分析工具更准确。

Wireshark(抓包分析,最权威)

  • 操作:在混杂模式下抓包,过滤 arp
  • 判断规则
    • 大量非请求的ARP应答:如果网络中没有对应的ARP请求,却出现了大量的 ARP Reply,尤其是针对网关IP的应答,这是典型的主动欺骗特征。
    • Duplicated IP 提示:Wireshark 的专家系统(Expert Info)会自动标记 Duplicate IP address detected 错误,说明同一IP有不同MAC在响应。
    • 分析发包源:查看 Sender MAC address 是否来自非路由器的MAC。

ARPWatch(Linux专用守护进程)

  • 作用:这是一个监控工具,持续监听局域网内的ARP活动。
  • 检测逻辑:它会建立一个“IP-MAC”绑定的基线,当检测到IP对应的MAC地址发生变化(且变化未经合理授权)时,它会立即通过syslog告警或弹出窗口。
  • 命令示例sudo arpwatch -i eth0

Nmap(扫描验证)

  • 操作:使用 nmap -sn 192.168.1.0/24(扫描整个网段)。
  • 检测逻辑:Nmap会发送ARP请求并收集响应,如果发现同一个IP地址在控制台被展示了两次,但MAC地址不同,或者同一个MAC地址对应了多个IP,则说明存在欺骗。

自动化脚本检测(Python,适合进阶)

如果你需要自动检测并告警,可以使用Python脚本监听ARP数据包。

示例:检测同一IP出现多个MAC

from scapy.all import sniff, ARP
ip_mac_map = {}  # 用于存储“IP -> MAC”的映射
def detect_arp_poison(packet):
    if packet.haslayer(ARP) and packet[ARP].op == 2:  # op=2表示ARP应答
        # 提取包中的发送方IP和MAC
        ip = packet[ARP].psrc
        mac = packet[ARP].hwsrc
        # 检查是否是已知IP-MAC对
        if ip in ip_mac_map:
            if ip_mac_map[ip] != mac:
                # 重要:同一IP的MAC地址发生了变化!
                print(f"[!] ARP欺骗检测: IP {ip} 之前MAC为 {ip_mac_map[ip]},现在MAC为 {mac}")
        else:
            # 记录首次发现的映射
            ip_mac_map[ip] = mac
# 开始监听eth0网卡
print("正在监听ARP应答... 按Ctrl+C停止")
sniff(iface="eth0", prn=detect_arp_poison, filter="arp", store=0)
  • 使用前提:需要安装 scapy 库(pip install scapy)。
  • 运行:以管理员/root权限运行(因为需要操作原始套接字)。
  • 原理:脚本维护一个字典,当检测到同一个IP对应的MAC地址与之前记录不同时,即触发告警。

预防与被动检测(防御性策略)

如果不想每次都手动查,可以从架构上做防御,反向判断问题:

  1. 启用DHCP Snooping(交换机设置):交换机只允许信任端口(如连接路由器的端口)发送的DHCP应答,阻止用户私设DHCP服务器和ARP欺骗。
  2. 静态ARP绑定(主机端)
    • 在网关上或主机上手动将网关IP与MAC地址绑定,避免缓存被篡改。
    • Windows:arp -s 192.168.1.1 00-11-22-33-44-55
    • 注意:这种方式无法彻底防御欺骗(例如Linux下的arp攻击会强制更新)。

最佳检测流程

  1. 发现症状:突然断网、无法上网、能上网但网速极慢(被中间人窃听)。
  2. 初步排查:用 arp -a 检查网关MAC是否正常。
  3. 深入验证:使用 Wireshark 抓包,过滤 arp,查看是否有重复IP或大量ARP回复。
  4. 定位攻击者:如果确认被欺骗,找到那个 冒充网关MAC 的真实设备,查看连接交换机该端口的指示灯对应的设备,使用 Nmap -O 扫描其IP,确定攻击者操作系统。

注意:如果是在公司或公共网络中,请勿在没有授权的情况下运行ARP欺骗或反欺骗脚本,这可能违反网络安全规定。

抱歉,评论功能暂时关闭!