grill,即 Linux 中的全局速率限制,是一个针对 CVE-2016-5696(纯 TCP 路径外攻击)的扫描器。
$ go get github.com/nogoegst/grill
前往主机的路径上绝对不要使用无线链路。持续丢包和重传会大幅降低扫描精度。
尽可能减少 NAT 层数(降至 0),它们会引入延迟并改变数据包。
目前 grill 平均使用约 400KBit/s,最大 500KBit/s 的出站带宽(16 个并发扫描)。
为避免扫描期间的内核干扰,请向防火墙添加规则以丢弃出站 RST 数据包。
对于 PF (/etc/pf.conf):
block drop out quick proto tcp flags R/R
然后执行 # pfctl -f /etc/pf.conf。
对于 NetFilter:
# iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP
grill 从 stdin 读取主机并扫描(最多 16 个并发扫描)。输入格式为 host port\n。
# cat probe | grill -i interface -dll gateway-MAC [-sll src-MAC] [-sip src-IP] > results
输出格式为 host:port,recievedChACKs,1stBurstSendingTime,2ndBurstSendingTime。
要获取人类可读的结果,请通过 verdict 工具(位于 verdict 目录)处理结果:
cat results | verdict
就是这样。玩得开心,尽情去爱。
要扫描 Tor 网络的中继,只需获取并格式化最新共识:
curl https://collector.torproject.org/recent/relay-descriptors/consensuses/`date -u +'%Y-%m-%d-%H-00-00-consensus'` | grep '^r '| awk '{print $7" "$8}' > probe-consensus
然后将生成的文件传递给 grill 输入。
截至目前,扫描整个 Tor 网络应该不到 30 分钟(16 个并发扫描)。
我通过使用 127 个并发扫描在 7 分 44 秒内扫描了整个网络,并通过进一步将超时时间减小到 1.7 秒在 6 分 30 秒内完成(由于丢包、拥塞等原因,这可能不太安全)。
请注意,127 是 OpenBSD 中可打开的 BPF 的最大数量(合理值)。在 Linux 中此限制更高,但这几乎会使内核停滞。无论如何,祝你好运。
grill 深受 David Stainton 的类似 Scapy 扫描器 [https://github.com/david415/scan_for_rfc5961] 以及 violentshell 的概念验证 [https://github.com/violentshell/rover] 的启发。