
Tor, proxychains, dnsmasq를 사용하여 최소한의 alpine Docker 컨테이너에서 nmap으로 .onion 히든 서비스를 스캔합니다.
nmap을 사용하여 Tor 네트워크 상의 숨겨진 'onion' 서비스를 스캔합니다. alpine 기반의 최소 이미지로, proxychains를 사용하여 nmap을 래핑합니다. Tor와 dnsmasq는 s6을 통해 데몬으로 실행되며, proxychains는 Tor SOCKS 프록시(포트 9050)를 사용하도록 nmap을 래핑합니다. Tor는 또한 DNSPort를 통해 DNS 요청을 포트 9053으로 익명으로 해결하도록 구성됩니다. dnsmasq는 이 localhost:9053을 권위 있는 DNS 서버로 사용하도록 구성됩니다. Proxychains는 로컬 리졸버를 통해 DNS를 프록시하도록 구성되므로, 모든 DNS 요청은 Tor를 거치고 애플리케이션은 .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
컨테이너가 부팅되면 Tor와 dnsmasq를 데몬으로 실행합니다. 그런 다음 tor_wait 스크립트는 Tor SOCKS 프록시가 준비될 때까지 기다린 후 명령을 실행합니다.
기본적으로 docker run에 전달된 인자는 /bin/nmap으로 전달되며, Tor에서 작동하기 위해 필요한 -sT -PN -n "$@" 인자를 사용하여 nmap을 호출합니다 (via explainshell.com).
예를 들어, 다음 명령:
docker run --rm -it milesrichardson/onion-nmap -p 80,443 facebookcorewwwi.onion
은 다음과 같이 실행됩니다:
proxychains4 -f /etc/proxychains.conf /usr/bin/nmap -sT -PN -n -p 80,443 facebookcorewwwi.onion
nmap에 대한 사용자 정의 스크립트 외에도 curl 및 nc에 대한 사용자 정의 래퍼 스크립트가 /bin/curl 및 /bin/nc에 존재하여 proxychains로 래핑합니다. 이를 호출하려면 docker run의 첫 번째 인자로 curl 또는 nc를 지정하면 됩니다. 예:
docker run --rm -it milesrichardson/onion-nmap nc -z 80 facebookcorewwwi.onion
은 다음과 같이 실행됩니다:
proxychains4 -f /etc/proxychains.conf /usr/bin/nc -z 80 facebookcorewwwi.onion
그리고
docker run --rm -it milesrichardson/onion-nmap curl -I https://facebookcorewwwi.onion
은 다음과 같이 실행됩니다:
proxychains4 -f /etc/proxychains.conf /usr/bin/curl -I https://facebookcorewwwi.onion
원래의 /usr/bin/nmap 또는 /usr/bin/nc 또는 /usr/bin/curl을 포함한 다른 명령을 호출하려면 docker run의 첫 번째 인자로 지정할 수 있습니다. 예:
docker run --rm -it milesrichardson/onion-nmap /usr/bin/curl -x socks4h://localhost:9050 https://facebookcorewwwi.onion
환경 변수는 하나만 있습니다: DEBUG_LEVEL. 이 값을 0 이외의 값으로 설정하면 더 많은 디버깅 정보가 출력됩니다 (특히 Tor 부팅을 기다리는 동안 Tor에 연결을 시도하는 과정). 예:
$ 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