Firewalking je technika, která umožňuje sbírat informace o pravidlech firewallu, případně o otevřených portech systému za firewallem. Představte si situaci, kdy znáte počet přeskoků mezi Vámi a firewallem. Pak postupně vytváříte IP pakety s TTL o jedna větší, než je zjištěný počet přeskoků a adresujete systémy za firewallem pomocí zvolených portů. Firewall IP paket buď zahodí a nebo propustí, ale v zápětí mu vyexpiruje TTL. Pokud se vrátila ICMP zpráva o vypršení TTL, pak známe původní IP paket a máme kompletní informaci o TCP/UDP portu, který je na firewallu povolen.
Pokud byste si tuto techniku chtěli vyzkoušet, navštivte náš hacking kurz 0x1 Nmap skenování počítačů na síti, kde si vyzkoušíte práci s nástrojem firewalk. Následující příklady demonstrují jeho použití.
Identifikujeme firewall
Předpokládejme, že jsme na interní síti a máme adresu 10.10.0.2. Adresa webserveru, který budeme testovat má IP adresu 10.80.0.1. Použijeme nástroj traceroute a pokusíme se zjistit, jak je od nás webserver 10.80.0.1 daleko.
1 2 3 4 5 6 7 8 |
traceroute 10.80.0.1 -n traceroute to 10.80.0.1 (10.80.0.1), 30 hops max, 60 byte packets 1 10.10.0.6 0.252 ms 0.157 ms 0.196 ms 2 * * * 3 * * * 4 * * * 5 * * * -- výpis zkrácen |
Z výpisu vidíme, že první a poslední systém, který mezi námi a webserverem 10.80.0.1 odpověděl, je systém s IP adresou 10.10.0.6. Další odpovědi nedorazily nebo jsou blokovány. Z toho můžeme usoudit, že prvek 10.10.0.6 nebo jeho soused je firewall.
Studenti hacking kurzů hackerlabu vědí, že linuxová varianta traceroute používá kombinaci IP_TTL s transportním protokolem UDP a inkrementuje cílové UDP porty v každé žádosti. Náš test selhal pravděpodobně tím, že na firewall přišel UDP paket se zakázaným cílovým portem. Existuje metoda, která umožňí propočítat a nastavit první IP paket s UDP portem podle potřeb, ale jsme lenivý a vyzkoušíme raději traceroute s variantou dotazu TCP na port 80, která musí v případě webserveru projít. Z následujícího výpisu máme jasno, prvek s IP adresou 10.10.0.6 je skutečně firewall, protože cílový webserver je ihned za ním.
1 2 3 4 |
traceroute --tcp 10.80.0.1 -n traceroute to 10.80.0.1 (10.80.0.1), 30 hops max, 60 byte packets 1 10.10.0.6 0.385 ms 0.458 ms 0.274 ms 2 10.80.0.1 4.876 ms 3.979 ms 3.416 ms |
Nástroj firewalk
Nyní přišel čas na test nástroje firewalk, seznámíme se nejdříve s jeho nápovědou, abychom znali syntaxi zadávání parametrů.
1 2 3 4 5 6 7 8 9 |
firewalk Firewalk 5.0 [gateway ACL scanner] Usage : firewalk [options] target_gateway metric [-d 0 - 65535] destination port to use (ramping phase) [-h] program help [-i device] interface [-n] do not resolve IP addresses into hostnames [-p TCP | UDP] firewalk protocol [-r] strict RFC adherence |
Z nápovědy vidíme, že za volitelnými přepínači následuje IP adresa firewallu (target_gateway) a pak IP adresa cíle (metric). Pokusíme se detekovat otevřené TCP porty na firewallu (10.10.0.6) a adresujeme cílový webserver (10.80.0.1). Pakety pro první detekci přeskoků a stanovení TTL+1 budou používat protokol TCP s portem 80 (-p tcp -d 80) a z edukativních důvodu omezíme počet zkoumaných portů při průchodu firewallem (-S 20,21,22,80,443,8080). Poslední parameter (-n) vypíná překlad doménových jmen. Nyní můžeme spustit nástroj firewalk.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
firewalk -p tcp -d 80 10.10.0.6 10.80.0.1 -S 20,21,22,80,443,8080 -n Firewalk 5.0 [gateway ACL scanner] Firewalk state initialization completed successfully. TCP-based scan. Ramping phase source port: 53, destination port: 80 Hotfoot through 10.10.0.6 using 10.80.0.1 as a metric. Ramping Phase: 1 (TTL 1): expired [10.10.0.6] Binding host reached. Scan bound at 2 hops. Scanning Phase: port 20: *no response* port 21: *no response* port 22: A! open (port listen) [10.80.0.1] port 80: A! open (port listen) [10.80.0.1] port 443: *no response* port 8080: *no response* Scan completed successfully. Total packets sent: 7 Total packet errors: 0 Total packets caught 5 Total packets caught of interest 3 Total ports scanned 6 Total ports open: 2 Total ports unknown: 0 |
Všimněte si hlášení „Binding host reached“, to znamená, že si nástroj ošahal zvolený firewall a přistupuje k mapování portů. Výstup nástroje firewalk ukazuje, že na firewallu jsou otevřeny TCP porty 22 a 80. U výpisu otevřených portů je v závorce skryta důležitá informace. Pokud je u otevřeného portu napsáno listen, tak původní paket dorazil až na port adresovaného serveru, kde poslouchá služba. V případě, že je v závorce napsáno expired, znamená to, že firewall komunikaci propustil, ale paket expiroval po cestě k cíli.
Závěr
Ukázali jsme si techniku firewalkingu a použití nástroje firewalk. Více informací naleznete na stránkách projektu firewalk a v dokumentu
To je pro dnešek vše. Zvažujete-li cestu etického hackera od začátku, rád uvidím na hacking kurzech.