
Escáner de limitación de tasa global en Linux (CVE-2016-5696)
grill, también conocido como limitación de tasa global en Linux, es un escáner para CVE-2016-5696 (TCP puro fuera de la ruta).
$ go get github.com/nogoegst/grill
No uses nunca enlaces inalámbricos en el camino hacia los hosts. La pérdida constante de paquetes y las retransmisiones reducen drásticamente la precisión del escaneo.
Usa la menor cantidad de NATs posible (hasta 0), ya que introducen retrasos y modifican los paquetes.
Actualmente grill utiliza alrededor de 400KBit/s de promedio y máx. 500Kbit/s de ancho de banda de salida (16 escaneos concurrentes).
Para evitar la interferencia del kernel durante el escaneo, añade una regla a tu cortafuegos para descartar los paquetes RST salientes.
Para PF (/etc/pf.conf):
block drop out quick proto tcp flags R/R
luego # pfctl -f /etc/pf.conf.
Para NetFilter:
# iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP
grill lee stdin y escanea los hosts que recibe de él (hasta 16 escaneos concurrentes). El formato de entrada es host port\n.
# cat probe | grill -i interface -dll gateway-MAC [-sll src-MAC] [-sip src-IP] > results
El formato de salida es host:port,recievedChACKs,1stBurstSendingTime,2ndBurstSendingTime.
Para obtener resultados legibles, pasa los resultados por la utilidad verdict (está en el directorio verdict):
cat results | verdict
Así es la vida. Diviértete y haz el amor.
Para escanear los relays de la red Tor, simplemente obtén y formatea el último consenso:
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
Y luego simplemente pasa el archivo resultante como entrada a grill.
Por ahora, escanear toda la red Tor debería tardar menos de 30m (16 escaneos concurrentes).
Conseguí escanear toda la red en 7m44s usando 127 escaneos concurrentes y en 6m30s reduciendo aún más el timeout a 1.7s (esto probablemente no sea seguro debido a la pérdida de paquetes, la congestión, etc.).
Ten en cuenta que 127 es el número máximo (y razonable) de BPFs abiertos en OpenBSD. En Linux este límite es mayor, pero dejará tu kernel casi bloqueado. De todos modos, buena suerte.
grill está enormemente inspirado por un escáner Scapy similar de David Stainton [https://github.com/david415/scan_for_rfc5961]
y por el PoC de violentshell [https://github.com/violentshell/rover].