
리눅스에서의 전역 속도 제한 (CVE-2016-5696) 스캐너
grill, 일명 Linux의 전역 속도 제한(global rate-limiting)은 CVE-2016-5696(순수 TCP 오프패스)를 위한 스캐너입니다.
$ go get github.com/nogoegst/grill
*호스트로 가는 경로에 무선 링크를 절대 사용하지 마십시오. 지속적인 패킷 손실 및 재전송은 스캔 정확도를 크게 떨어뜨립니다.
가능한 NAT를 적게 사용하십시오 (0개까지), NAT는 지연을 유발하고 패킷을 변경합니다.
현재 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 네트워크의 릴레이를 스캔하려면 마지막 합의(consensus)를 가져와서 포맷하십시오:
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의 PoC [https://github.com/violentshell/rover]에서 큰 영감을 받았습니다.