Firewalking, czyli spacer po zaporze ogniowej

Dokładna analiza sieci od strony intruza pozwala ocenić stan jej odporności i pokazać słabości. Każdy audyt bezpieczeństwa dotyczy testów penetracyjnych. Idea opiera się na symulacji działań potencjalnego intruza. Testy penetracyjne 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 firewalking.

Dokładna analiza sieci od strony intruza pozwala ocenić stan jej odporności i pokazać słabości. Każdy audyt bezpieczeństwa dotyczy testów penetracyjnych. Idea opiera się na symulacji działań potencjalnego intruza. Testy penetracyjne 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 firewalking.

Technika umożliwia zebranie informacji o zdalnej sieci poprzez analizę pakietu odpowiedzi, podobnego do pakietu generowanego przez narzędzie traceroute. Dokładny jej opis oraz narzędzie umożliwiające wykorzystanie po raz pierwszy zaprezentowali David Goldsmith i Michael Schiffman.

Metody badania zapór ogniowych

Firewalking jest techniką, która może być użyta do zbierania informacji o zdalnej sieci chronionej zaporą ogniową. Technika ta wykorzystuje pakiet IP podobny do pakietu generowanego przez traceroute, w celu określenia, czy może on przejść przez filtr pakietów zdefiniowany na zaporze sieciowej. Może być stosowana do sprawdzania portów, które są otwarte, lub określenia, jaki ruch do nich skierowany może być przekazywany przez zaporę:

  • open - port otwarty, oczekujący na połączenie;
  • pass throught - ruch przekazywany, zapora ogniowa przekazuje komunikację zmierzającą do określonego portu docelowego.
Używając firewalkingu, atakujący może także sprawdzać routery i hosty, znajdujące się za urządzeniem filtrującym pakiety. Aby w pełni zrozumieć powyższą technikę, należy szczegółowo prześledzić zasadę działania narzędzia traceroute.

<hr size=1 noshade>Podstawowa terminologia sieciowa

ACL (access-list) - zestaw reguł ustanawiających politykę bezpieczeństwa. Definiuje listy dostępu, zawierające reguły dopuszczające, odrzucające lub specyficznie traktujące określony typ ruchu.

Router/bramka - urządzenie umożliwiające przekazywanie pakietów. Poprzez zastosowanie ACL jest możliwa filtracja ruchu.

Ruch wchodzący - ruch przekazywany przez urządzenie trasujące, z zewnątrz do wnętrza sieci.

Ruch wychodzący - ruch przekazywany przez urządzenie trasujące, z wewnątrz sieci na zewnątrz.

Firewall - zapora ogniowa/filtr pakietów. Umożliwia filtrację oraz przekazywanie ruchu.

<hr size=1 noshade>

Traceroute - określenie trasy pakietu

Traceroute jest narzędziem, które określa trasę pakietu od komputera do hosta w Internecie. Pokazuje jednocześnie, ile hopów pakiet musi przejść, aby osiągnąć zdalny host, oraz przekazuje informację, jak dużo czasu zabiera każdy hop. Oryginalnie traceroute jest narzędziem stworzonym do pracy w systemie Unix, ale podobne narzędzia są praktycznie dostępne na wszelkie platformy systemowe. Traceroute pracuje, wysyłając pakiet UDP lub ICMP_ECHO (ping) do miejsca przeznaczenia, zwiększając monotonicznie w każdej próbie (domyślnie wykonywane są trzy próby) pole czasu życia pakietu (TTL - Time-To-Live) w nagłówku IP. Jeżeli traceroute wysyła pakiety UDP, docelowy numer portu jest zwiększany przy każdej kolejnej próbie.

W zwykłym trybie traceroute wysyła pakiet UDP lub ICMP z różną wartością pola TTL, którą można indywidualnie określić (domyślnie 30 przeskoków). Jeżeli wartość TTL wygaśnie na zdalnym routerze, zwracana jest odpowiedź ICMP_TIME_EXCEEDED. Informuje ona nadawcę, że pakiet IP nie zdołał przebyć całej drogi. Jeżeli TTL jest równy zero lub mniejszy, odeśle pakiet ICMP_ERROR_MESSAGE do sprawdzającego hosta.

Zwykle zasady zdefiniowane na filtrze pakietów blokują wiele tego typu zachowań. Jednak w przypadku specjalnie spreparowanych danych pakiety traceroute mogą przechodzić przez filtr pakietów, a nawet przez niektóre zapory ogniowe pracujące w trybie stateful inspection.

Podsumowując, ideę narzędzia traceroute można przedstawić w dwóch punktach:

1. Wysłanie X pakietów do docelowego IP z różnymi wartościami TTL.

2. Obserwacja zwrotnych komunikatów z określonych adresów IP (także odpowiedzi z komunikatami błędów ICMP).

Interesującą możliwością komunikatu ICMP_TIME_EXCEEDED jest fakt, że kopia danych oryginalnego pakietu jest załączona w danych zwrotnego komunikatu ICMP. Wysyłający może dopasować zwrotny komunikat ICMP do danych, które wysyła. Warto o tym pamiętać, o czym przekonamy się później.

Problemem dla traceroute są wyłącznie , które nie sygnalizują przeterminowania lub nie zmniejszają wartości pola TTL.

Zbieranie informacji przy użyciu narzędzia traceroute

Schemat badania ruchu ICMP

Schemat badania ruchu ICMP

Wiedząc, jak działa traceroute, można rozwinąć teorię o sposoby użycia narzędzia do zbierania informacji na temat danej sieci. Oto dwa przykłady użycia traceroute do ataku w sieci.

Pierwszy scenariusz zakłada sieć chronioną przez zaporę ogniową, która blokuje cały przychodzący ruch poza komunikatami ICMP i odpowiedziami ICMP. Spróbujmy użyć programu traceroute w celu pokazania, jakie hosty pracują za zaporą ogniową. Schemat ataku prezentuje rys. poniżej.

Zamiast domyślnego użycia pakietów UDP (Listing 1), możemy zmusić traceroute do użycia pakietów ICMP (Listing 2).

Listing 1

# traceroute 192.168.0.5

traceroute to 192.168.0.5 (192.168.0.5), 30 hops max, 38 byte packets

1 192.168.0.1 (192.168.0.1) 1.420 ms 2.334 ms 5.787 ms

2 192.168.0.2 (192.168.0.2) 8.301 ms 8.897 ms 7.948 ms

3 192.168.0.3 (192.168.0.3) 33.493 ms 14.341 ms 10.764 ms

4 * * *

5 * * *

Listing 2

# traceroute -I 192.168.0.5

traceroute to 192.168.0.5 (192.168.0.5), 30 hops max, 38 byte packets

1 192.168.0.1 (192.168.0.1) 1.470 ms 2.355 ms 5.792 ms

2 192.168.0.2 (192.168.0.2) 8.521 ms 9.817 ms 7.932 ms

3 192.168.0.3 (192.168.0.3) 12.591 ms 13.542 ms 10.223 ms

4 192.168.0.4 (192.168.0.4) 43.491 ms 44.541 ms 40.265 ms

5 192.168.0.5 (192.168.0.5) 53.293 ms 54.741 ms 50.723 ms

Jak widać, komunikaty ICMP bez problemu osiągają zdalny PC, przechodząc przez filtr pakietów.

Drugi scenariusz zakłada sieć chronioną przez zaporę ogniową, która blokuje cały przychodzący ruch poza pakietami UDP przychodzącymi na port 53 (usługa DNS). Scenariusz prezentuje rys. na następnej stronie.

Jak widać w Listingu 3, cały ruch traceroute jest blokowany na 4 hopie, ponieważ zapora ogniowa nie dopuszcza żadnego przychodzącego ruchu poza zapytaniami DNS. Wiedząc to, możemy łatwo mapować hosty znajdujące się za firewallem.

Listing 3

# traceroute 192.168.0.5

traceroute to 192.168.0.5 (192.168.0.5), 30 hops max, 38 byte packets

1 192.168.0.1 (192.168.0.1) 2.421 ms 2.132 ms 3.722 ms

2 192.168.0.2 (192.168.0.2) 8.001 ms 8.801 ms 8.742 ms

3 192.168.0.3 (192.168.0.3) 12.413 ms 14.332 ms 11.734 ms

4 * * *

5 * * *

Schemat badania ruchu DNS

Schemat badania ruchu DNS

Potrafimy już kontrolować następujące rzeczy:

  • źródłowy port, od którego startuje traceroute (domyślnie jego numer jest zwiększany monotonicznie przy każdej wysyłanej próbie);
  • liczbę wysyłanych prób w każdym etapie (domyślnie 3).
Możemy określić także liczbę hopów pomiędzy atakującym hostem i docelową siecią. Ta informacja pozwala nam kontrolować numer portu w każdej próbie osiągającej zaporę ogniową. Ponieważ standardowa zapora ogniowa nie analizuje zawartości pakietów, możemy sprawić, by nasz pakiet został uznany za zapytanie DNS i tym samym ominąć listę dostępu ACL. Po prostu rozpoczniemy nasz atak ze startowym numerem portu obliczonym według wzoru:

(docelowy_port - (liczba_hopów x liczba_prób)) -1

W naszym przypadku:

[53 - (5 x 3)] -1 = 37

Taka liczba prób spowoduje, że filtr pakietów zaakceptuje pojedynczy pakiet z określonym numerem portu w ściśle określonej próbie (Listing 4).

Listing 4

# traceroute -p37 192.168.0.5

traceroute to 192.168.0.5 (192.168.0.5), 30 hops max, 38 byte packets

1 192.168.0.1 (192.168.0.1) 2.411 ms 2.543 ms 3.122 ms

2 192.168.0.2 (192.168.0.2) 9.101 ms 9.821 ms 7.731 ms

3 192.168.0.3 (192.168.0.3) 13.112 ms 14.122 ms 11.928 ms

4 192.168.0.4 (192.168.0.4) 20.223 ms * *

5 * * *


TOP 200