
Varrer serviços ocultos .onion com nmap usando Tor, proxychains e dnsmasq em um container Docker alpine mínimo.
Use o nmap para escanear serviços "onion" ocultos na rede Tor. Imagem mínima baseada em Alpine, usando proxychains para encapsular o nmap. Tor e dnsmasq são executados como daemons via s6, e o proxychains encapsula o nmap para usar o proxy SOCKS do Tor na porta 9050. O Tor também é configurado via DNSPort para resolver anonimamente requisições DNS na porta 9053. O dnsmasq é configurado com este localhost:9053 como servidor DNS autoritativo. O Proxychains é configurado para usar proxy DNS através do resolvedor local, para que todas as requisições DNS passem pelo Tor e as aplicações possam resolver endereços .onion.
$ docker run --rm -it milesrichardson/onion-nmap -p 80,443 facebookcorewwwi.onion
[tor_wait] Wait for Tor to boot... (might take a while)
[tor_wait] Done. Tor booted.
[nmap onion] nmap -p 80,443 facebookcorewwwi.onion
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/libproxychains4.so
[proxychains] DLL init: proxychains-ng 4.12
Starting Nmap 7.60 ( https://nmap.org ) at 2017-10-23 16:17 UTC
[proxychains] Dynamic chain ... 127.0.0.1:9050 ... facebookcorewwwi.onion:443 ... OK
[proxychains] Dynamic chain ... 127.0.0.1:9050 ... facebookcorewwwi.onion:80 ... OK
Nmap scan report for facebookcorewwwi.onion (224.0.0.1)
Host is up (2.7s latency).
PORT STATE SERVICE
80/tcp open http
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 3.58 seconds
Quando o container inicia, ele lança o Tor e o dnsmasq como daemons. O script tor_wait então espera o proxy SOCKS do Tor estar ativo antes de executar seu comando.
Por padrão, argumentos para docker run são passados para /bin/nmap que chama o nmap com os argumentos -sT -PN -n "$@" necessários para funcionar sobre Tor (via explainshell.com).
Por exemplo, isto:
docker run --rm -it milesrichardson/onion-nmap -p 80,443 facebookcorewwwi.onion
será executado como:
proxychains4 -f /etc/proxychains.conf /usr/bin/nmap -sT -PN -n -p 80,443 facebookcorewwwi.onion
Além do script personalizado para o nmap, existem scripts wrapper personalizados para curl e nc para encapsulá-los no proxychains, em /bin/curl e /bin/nc. Para chamá-los, basta especificar curl ou nc como o primeiro argumento para docker run. Por exemplo:
docker run --rm -it milesrichardson/onion-nmap nc -z 80 facebookcorewwwi.onion
será executado como:
proxychains4 -f /etc/proxychains.conf /usr/bin/nc -z 80 facebookcorewwwi.onion
e
docker run --rm -it milesrichardson/onion-nmap curl -I https://facebookcorewwwi.onion
será executado como:
proxychains4 -f /etc/proxychains.conf /usr/bin/curl -I https://facebookcorewwwi.onion
Se quiser chamar qualquer outro comando, incluindo o original /usr/bin/nmap ou /usr/bin/nc ou /usr/bin/curl, você pode especificá-lo como o primeiro argumento para o docker run, por exemplo:
docker run --rm -it milesrichardson/onion-nmap /usr/bin/curl -x socks4h://localhost:9050 https://facebookcorewwwi.onion
Há apenas uma variável de ambiente: DEBUG_LEVEL. Se você a definir para qualquer valor diferente de 0, mais informações de depuração serão impressas (especificamente, as tentativas de conexão ao Tor enquanto espera a inicialização). Exemplo:
$ docker run -e DEBUG_LEVEL=1 --rm -it milesrichardson/onion-nmap -p 80,443 facebookcorewwwi.onion
[tor_wait] Wait for Tor to boot... (might take a while)
[tor_wait retry 0] Check socket is open on localhost:9050...
[tor_wait retry 0] Socket OPEN on localhost:9050
[tor_wait retry 0] Check SOCKS proxy is up on localhost:9050 (timeout 2 )...
[tor_wait retry 0] SOCKS proxy DOWN on localhost:9050, try again...
[tor_wait retry 1] Check socket is open on localhost:9050...
[tor_wait retry 1] Socket OPEN on localhost:9050
[tor_wait retry 1] Check SOCKS proxy is up on localhost:9050 (timeout 4 )...
[tor_wait retry 1] SOCKS proxy DOWN on localhost:9050, try again...
[tor_wait retry 2] Check socket is open on localhost:9050...
[tor_wait retry 2] Socket OPEN on localhost:9050
[tor_wait retry 2] Check SOCKS proxy is up on localhost:9050 (timeout 6 )...
[tor_wait retry 2] SOCKS proxy UP on localhost:9050
[tor_wait] Done. Tor booted.
[nmap onion] nmap -p 80,443 facebookcorewwwi.onion
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/libproxychains4.so
[proxychains] DLL init: proxychains-ng 4.12
Starting Nmap 7.60 ( https://nmap.org ) at 2017-10-23 16:34 UTC
[proxychains] Dynamic chain ... 127.0.0.1:9050 ... facebookcorewwwi.onion:443 ... OK
[proxychains] Dynamic chain ... 127.0.0.1:9050 ... facebookcorewwwi.onion:80 ... OK
Nmap scan report for facebookcorewwwi.onion (224.0.0.1)
Host is up (2.8s latency).
PORT STATE SERVICE
80/tcp open http
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 4.05 seconds