NFsec Logo

Fire(wall)walking – spacer po zaporze ogniowej

02/05/2010 w Ataki Internetowe Brak komentarzy.  (artykuł nr 255, ilość słów: 2642)

F

irewalking w oryginalnym znaczeniu odnosi się do spaceru po ogniu / żarze. Od strony informatycznej stosuje się to pojęcie do dokładnej analizy sieci i zapory ogniowej od strony intruza. Analiza taka pozwala na ocenę stanu jej odporności i ukazania słabości. Można stwierdzić, że każdy audyt bezpieczeństwa sieciowego dotyczy przeprowadzania testów penetracyjnych. Wówczas idea opiera się na symulacji działań potencjalnego intruza. Testy penetracyjne lub tzw. pentesty przeprowadza się przy założeniu, że nie są znane: struktura oraz usługi badanej sieci.

Interesującą techniką umożliwiającą wykonanie takiej analizy sieci jest właśnie firewalking, czyli technika pierwotnie rozwinięta przez Mike’a Schiffman’a oraz Davida Goldsmith’a umożliwiająca skanowanie sieci chronionej zaporą ogniową (ang. firewall) oraz badanie konfiguracji samej zapory ogniowej, a dokładniej jej list kontroli dostępu (ang. ACL – Access Control List). Technika ta jest zbliżona do metody traceroute umożliwiającej badanie trasy pakietów w sieci. Pozwala sprawdzić, jakie rodzaje pakietów są przepuszczane przez firewall chroniący daną sieć – jakie porty są otwarte na zaporze (ang. open), a które są przekazywane do chronionej sieci (ang. pass throught). Wykorzystując firewalking można również odkryć topologię chronionej sieci (podsieci, routery i inne urządzenia).

Technika traceroute polega na wysyłaniu pakietów o rosnących wartościach TTL (ang. Time-To-Live) – z reguły zaczyna się od TTL=1 i inkrementuje o 1, a otrzymany ciąg odpowiedzi ICMP pozwala określić trasę do maszyny docelowej (czasami może istnieć wiele tras i odpowiedzi nie zawsze będą jednoznaczne), gdyż wartość pola TTL jest zmniejszana na każdym routerze pośredniczącym w transmisji. W momencie gdy osiągnie wartość 0, router gubi pakiet i zwraca komunikat ICMP Time Exceeded (wraz z swoim źródłowym adresem IP) informujący o tym, że host docelowy nie został jeszcze osiągnięty. Wartość TTL jest zwiększana dopóki nie zostanie zwrócony odpowiedni komunikat ICMP Destination Unreachable – jeśli host działa poprawnie jest to Port Unreachable , jeśli nie ma do niego sieciowego dostępu to generowany jest błąd Host Unreachable przez ostatni węzeł sieciowy. Możemy sprawdzić to na przykładzie:

agresor:~# traceroute 12.34.56.78
traceroute to 12.34.56.78 (12.34.56.78), 30 hops max, 40 byte packets
 1  agresor.pl (4.3.2.1)  0.330 ms  0.298 ms  0.285 ms
 2  router1.pl (66.666.666.1)  14.837 ms  15.755 ms  16.942 ms
 3  router2.pl (66.666.666.2)  17.552 ms  18.713 ms  20.156 ms
 4  router3.pl (66.666.666.3)  25.295 ms  26.736 ms  28.419 ms
 5  router4.pl (66.666.666.4)  29.615 ms  31.299 ms  32.260 ms
 6  router5.pl (66.666.666.5)  36.894 ms  37.583 ms  38.227 ms
 7  router6.pl (66.666.666.6)  39.929 ms  28.307 ms  29.118 ms
 8  target1.pl (12.34.56.78)   34.382 ms  33.379 ms  36.175 ms

Jak widać, aby traceroute dotarł do celu musiał zwiększać pole TTL, aż osiągnęło wartość 8. Zgodnie z założeniami, jeśli pakiet TTL miał wartość 7 to odpowiedź z routera nr 6 powinna zostać zwrócona w postaci komunikatu ICMP 11:

agresor:~# hping3 -V -1 -t 7 -c 1 12.34.56.78
using eth0, addr: 4.3.2.1, MTU: 1500
HPING 12.34.56.78 (eth0 12.34.56.78): icmp mode set, 28 headers + 0 data bytes
TTL 0 during transit from ip=66.666.666.6 name=66.666.666.6.isp.pl

--- 12.34.56.78 hping statistic ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms

Co potwierdza analiza pakietów:

ICMP echo req (28 bytes) from agresor.pl to 12.34.56.78 (src HWaddr 000347ac3f20) on eth0
ICMP time excd (56 bytes) from 66.666.666.6 to agresor.pl (src HWaddr 0018d1398393) on eth0

Zwiększając TTL do 8 oraz używając pakietu UDP zamiast ICMP, powinniśmy otrzymać odpowiedni komunikat ICMP Destination Unreachable:

agresor:~# hping3 -V -2 -t 8 -c 1 12.34.56.78
using eth0, addr: 4.3.2.1, MTU: 1500
HPING 12.34.56.78 (eth2 12.34.56.78): udp mode set, 28 headers + 0 data bytes
ICMP Port Unreachable from ip=12.34.56.78 name=12-34-56-78.isp.pl

--- 12.34.56.78 hping statistic ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms

Technika firewalking, podobnie jak traceroute, wysyła pakiety z odpowiednim polem TTL. Jest w pewnym sensie rozwinięciem traceroute – generowane pakiety mogą być różnych typów i z różnymi parametrami i numerami portów. W technice tej wymagane są trzy hosty – pierwszy, wykonujący firewalking, drugi pełniący rolę bramy / firewall’a oraz trzeci znajdujący się za bramą / firewall’em. Najpierw wyznaczana jest minimalna wartość TTL tak, aby pakiet mógł dotrzeć do bramy łączącej skanowaną sieć ze światem. Następnie badanie firewalla polega na wysyłaniu różnych rodzajów pakietów z polem TTL zwiększonym o 1 tak, aby pakiet mógł przeskoczyć firewall i zobaczyć jaki rodzaj hostu za nim stoi – kolejny router czy serwer. Przy badaniu pozostałych hostów w sieci również stosuje się wartość TTL zwiększoną o 1, przy badaniu zaś podsieci – wartości odpowiednio większe. Mike Schiffman i David Goldsmith w tym celu stworzyli aktywne narzędzie bezpieczeństwa sieciowego – firewalk, pozwalające na określenie jakie protokoły są przekazywane przez zaporę sieciową. Firewalk wysyła pakiety TCP lub UDP z zwiększonym TTL o 1 niż liczba routerów / bram do sprawdzanej zapory sieciowej. Jeśli firewall zezwala na tego rodzaju ruch – jest on przekazywany do celu znajdującego się wewnątrz chronionej sieci. Powodzenie tej metody zależy głównie od możliwości wychodzenia komunikatów ICMP Time Exceeded przez zdalną zaporę ogniową. Niestety firewalk nie jest już rozwijany dlatego bardzo prosty przykład zostanie zaprezentowany za pomocą takich narzędzi jak traceroute oraz hping. Pierwszym krokiem jest określenie minimalnej odległości do wybranego celu:

agresor:~# traceroute target2.pl
traceroute to target2.pl (12.12.21.21), 30 hops max, 40 byte packets
 1  agresor.pl (6.6.9.9)  0.619 ms  0.692 ms  0.702 ms
 2  router1.pl (212.25.5.69)  11.720 ms  12.877 ms  14.071 ms
 3  router2.pl (80.150.150.180)  15.522 ms  16.222 ms  17.441 ms
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *

Brak odpowiedzi na wysyłane pakiety UDP sygnalizowany jest znakiem gwiazdki “*” i prawdopodobnie wynika z filtrowania pakietów. Możemy przełączyć traceroute na pakiety ICMP ECHO:

agresor:~# traceroute -I target2.pl
traceroute to target2.pl (12.12.21.21), 30 hops max, 40 byte packets
 1  agresor.pl (6.6.9.9)  0.593 ms  0.654 ms  0.650 ms
 2  router1.pl (212.25.5.69)  9.397 ms  10.603 ms  13.069 ms
 3  router2.pl (80.150.150.180)  13.129 ms  13.763 ms  15.474 ms
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *

Jeśli efekt pozostaje ten sam to ostatnią próbą są pakiety TCP SYN:

agresor:~# traceroute -T target2.pl
traceroute to target2.pl (12.12.21.21), 30 hops max, 40 byte packets
 1  agresor.pl (6.6.9.9)  0.722 ms  0.681 ms  0.686 ms
 2  router1.pl (212.25.5.69)  29.681 ms  30.620 ms  31.052 ms
 3  router2.pl (80.150.150.180)  14.029 ms  15.226 ms  17.147 ms
 4  * * *
 5  * * *
 6  target2.pl (12.12.21.21)  59.753 ms  60.326 ms  61.914 ms
 7  target2.pl (12.12.21.21)  68.972 ms  58.191 ms  58.273 ms

Problemem, w tym przypadku wynika z firewalla umieszczonego prawdopodobnie na piątym i czwartym węźle, który filtruje pakiety typu UDP i ICMP uniemożliwiając tym samym dokładne zbadanie trasy pakietów. W wielu przypadkach jednak zapory pozwalają na przejście pakietów inicjujących połączenie TCP SYN do konkretnych portów, za którymi kryją się nasłuchujące usługi serwerów chronionych przez firewall. Na przykładzie powyżej widać, że dzięki tego rodzaju metodzie traceroute “automatycznie” wykrył, że za portem 80 (standardowy port w trybie -T, który można zmienić dzięki opcji -p [nr portu]) szóstego hosta (według numeracji traceroute) “chowa” się kolejny host. Jest to również dla nas podpowiedź, by w poszukiwaniu reszty otwartych portów używać skanowania typu TCP SYN:

agresor:~# nmap -PN -sS -p 1-80 target2.pl

Starting Nmap 4.62 ( http://nmap.org ) at 2010-05-03 17:44 CEST
Interesting ports on target2.pl (12.12.21.21):
Not shown: 78 filtered ports
PORT   STATE  SERVICE
21/tcp open   ftp
80/tcp open   http

Nmap done: 1 IP address (1 host up) scanned in 2.931 seconds

W tym zakresie portów została wykryta również usługa FTP. Ostatnią czynnością jest sprawdzenie “topologicznego” rozmieszczenia tych usług – zaczynając od portu FTP oraz minimalnego TTL równego 5 odpowiadającego ostatniemu filtrowi sieciowemu. Omijamy w ten sposób filtr pakietów na 4 węźle i sprawdzamy czy usługa FTP nie znajduje się już na 5‘tce:

agresor:~# hping3 -V -S -t 5 -c 1 -p 21 12.12.21.21
using eth0, addr: 6.6.9.9, MTU: 1500
HPING 12.12.21.21 (eth0 12.12.21.21): S set, 40 headers + 0 data bytes

--- 12.12.21.21 hping statistic ---
1 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms

Brak odpowiedzi na pakiet SYN sugeruje, że drugi Firewall nie udostępnia usługi FTP. Daje nam to tymczasowy obraz sieci:

[Router1]-[Router2]-[Firewall/Router]-[Firewall/Router]
                                              |
                                            21/80 TCP
                                              |
                                      [Router ? Serwer]
                                              |
                                      [Router ? Serwer]

Sprawdzamy czy usługa FTP nie znajduje się na 6‘tce:

agresor:~# hping3 -V -S -t 6 -c 1 -p 21 12.12.21.21
using eth0, addr: 6.6.9.9, MTU: 1500
HPING 12.12.21.21 (eth0 12.12.21.21): S set, 40 headers + 0 data bytes
len=46 ip=12.12.21.21 ttl=59 DF id=0 tos=0 iplen=44
sport=21 flags=SA seq=0 win=5840 rtt=39.9 ms
seq=379077794 ack=114171087 sum=5b5a urp=0

--- 12.12.21.21 hping statistic ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 39.9/39.9/39.9 ms

W odpowiedzi otrzymaliśmy pakiet SYN/ACK, co oznacza, że usługa FTP znajduje się na szóstym węźle liczonym według listingu traceroute. W dodatku TTL=59, który pokonał 5 węzłów sieciowych sugeruje, że usługa znajduje się na serwerze Linuksowym (TTL=64 – 5 = 59). W ten sam sposób możemy sprawdzić czy serwer FTP nie jest zarazem serwerem WWW:

agresor:~# hping3 -V -S -t 6 -c 1 -p 80 12.12.21.21
using eth0, addr: 6.6.9.9, MTU: 1500
HPING 12.12.21.21 (eth0 12.12.21.21): S set, 40 headers + 0 data bytes
TTL 0 during transit from ip=12.12.21.21 name=target2.pl

--- 12.12.21.21 hping statistic ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms

Otrzymaliśmy komunikat ICMP Time Exceeded, co oznacza, że węzeł 6 przekazuje pakiety kierowane na port 80 dalej do węzła 7, co potwierdza zwiększenie TTL o 1:

agresor:~# hping3 -V -S -t 7 -c 1 -p 80 12.12.21.21
using eth0, addr: 6.6.9.9, MTU: 1500
HPING 12.12.21.21 (eth0 12.12.21.21): S set, 40 headers + 0 data bytes
len=46 ip=12.12.21.21 ttl=58 DF id=0 tos=0 iplen=44
sport=80 flags=SA seq=0 win=5840 rtt=44.1 ms
seq=27375734 ack=1918260500 sum=7956 urp=0

--- 12.12.21.21 hping statistic ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 44.1/44.1/44.1 ms

Daje nam to następujący obraz sieci:

[Router1]-[Router2]-[Firewall/Router]-[Firewall/Router]
                                              |
                                            21/80 TCP
                                              |
                                   [Router 80 / Serwer 21]
                                              |
                                         [Serwer 80]

W celu ochrony przed skanowaniem tą metodą można filtrować wychodzące pakiety ICMP 11. Większość zapór sieciowych powinna zawierać reguły całkowicie blokujące ruch komunikatów ICMP używanych przy poleceniach ping i traceroute do Internetu (w przypadku małych sieci ze względu na możliwości skanowania hostów za pomocą protokołu ICMP warto rozważyć blokadę wszystkich rodzajów wychodzących komunikatów ICMP). Wyjątkiem mogą być objęte tylko zaufane systemy, z których możemy przeprowadzić szybką diagnostykę. Efekt ten możemy uzyskać na przykład poprzez odpowiednie wpisy iptables:

iptables -A INPUT -p icmp --icmp-type 8 -s [zaufane IP] -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 ! -d [zaufane IP] -j DROP
iptables -A OUTPUT -p icmp --icmp-type 11 ! -d [zaufane IP] -j DROP

Należy również pomyśleć o odpowiednich regułach dla adresatów IP znajdujących się wewnątrz chronionej sieci tak, aby nie zablokować im możliwości używania narzędzia traceroute. Blokada wychodzących komunikatów ICMP 11 spowodowała również blokadę wykrywania przez traceroute w trybie TCP SYN przekazywania ruchu na porcie 80’tym:

agresor:~# traceroute -T target2.pl
traceroute to target2.pl (12.12.21.21), 30 hops max, 40 byte packets
 1  agresor.pl (6.6.9.9)  0.684 ms  0.657 ms  0.712 ms
 2  router1.pl (212.25.5.69) (213.25.2.66)  12.479 ms  14.224 ms  16.832 ms
 3  router2.pl (80.150.150.180)  20.494 ms  20.681 ms  20.893 ms
 4  * * *
 5  * * *
 6  target2.pl (12.12.21.21)  66.721 ms  57.522 ms  57.994 ms

Dodatkowym maskowaniem dla blokady wychodzących komunikatów ICMP 11 jest filtrowanie wszystkich pakietów z niską wartością TTL (np. < 5) i zwracanie odpowiedniego komunikatu ICMP 3:

iptables -A INPUT -i eth0 -p all -m ttl --ttl-eq 0 -j DROP
iptables -A INPUT -i eth0 -p all -m ttl --ttl-lt 5 ! -s [zaufane IP] -j REJECT --reject-with icmp-port-unreachable
iptables -A FORWARD -p all -i eth0 -o eth1 -m ttl --ttl-eq 0 -j DROP
iptables -A FORWARD -p all -i eth0 -o eth1 -m ttl --ttl-lt 5 ! -s [zaufane IP] -j REJECT --reject-with icmp-port-unreachable

W przypadku wpisu dotyczącego przekazywania pakietów (łańcuch FORWARD) eth0 jest interfejsem zewnętrznym (publicznym), a eth1 jest interfejsem wewnętrznym (lokalnym). Dodatkowo blokujemy pakiet z wartością TTL 0. Tego rodzaju pakiet może istnieć jedynie wtedy, gdy router przekazujący pakiet do naszej sieci działa wadliwie lub pakiet pochodzi z komputera w tej samej podsieci. Oprócz podjęcia kroków utrudniających łatwe wykonanie tej techniki sam firewall powinien być wyposażony w system IDS/IPS (ang. Intrusion Detection System / Intrusion Prevention System) umożliwiający wykrywanie i blokowanie jednej z głównych faz tego ataku, czyli skanowania portów za pomocą różnych technik i protokołów.

Więcej informacji: K. Folga, Firewalking, czyli spacer po zaporze ogniowej, Networld 1 czerwca, 2005, hping, Parametry jądra i protokołów sieciowych

Kategorie K a t e g o r i e : Ataki Internetowe

Tagi T a g i : , , , , , , , , , , , , , ,

Komentowanie tego wpisu jest zablokowane.