Firewall/IDS i podszywanie się

Wielu pionierów ineternetu wykorzystywało globalną otwartą sieć opartą o uniwersalną przestrzeń adresową pozwalającą na tworzenie wirtualnych połączeń pomiędzy dwoma dowolnymi węzłami. Pozwalało to hostom na równoprawną komunikację przy której każdy mógł serwować i pobierać dane od drugiego. Ludzie mogli uzyskać dostęp do wszystkich swoich systemów z dowolnego miejsca w sieci. Wizja nieograniczonej łączności została ograniczona przez wyczerpujące się zapasy wolnych adresów IP i względy bezpieczeństwa. We wczesnych latach 90-tych organizacje zaczęły masowo wprowadzać systemy zaporowe dla ograniczenia możliwości komunikacji. Duże sieci zostały otoczone kordonem zabezpieczeń w postaci proxy aplikacyjnych, translacji adresów i filtrowania pakietów. Niczym nie ograniczany przepływ informacji ustąpił ścisłym regulacjom dotyczącym dozwolonych dróg komunikacji i treści nimi przesyłanych.

Zabezpieczenia sieciowe takie jak systemy zaporowe mogą bardzo utrudnić uzyskiwanie informacji o sieci i jej architekturze. Nmap posiada wiele funkcji pozwalających zrozumieć działanie złożonych sieci i na weryfikacje działania filtrów pakietów i ich zgodności z założeniami. Pozwala nawet na omijanie źle zaimplementowanych zabezpieczeń. Jednym z najlepszych sposobów na poznanie bezpieczeństwa swojej sieci jest próba jego przełamania. Zacznij myśleć jak atakujący, który stosuje techniki z tej części dokumentacji przeciwko Twojej sieci. Uruchom skanowania FTP bounce, Idle, dodaj fragmentację pakietów lub spróbuj uruchomić tunel omijający lokalne proxy.

W połączeniu z ograniczeniami aktywności sieciowej, firmy coraz częściej rozpoczynają monitorowanie ruchu sieciowego za pomocą systemów detekcji intruzów (IDS). Wszystkie popularne systemy IDS mają dołączone reguły wykrywające skanowania Nmapa, ponieważ skanowania takie czasami poprzedzają ataki. Wiele z tych systemów ostatnio przeistoczyło się w systemy prewencji (IPS), które aktywnie przeciwstawiają się niepożądanemu ruchowi. Niestety, dla administratorów sieci i producentów systemów IDS, wiarygodne wykrywanie złych intencji poprzez analizę pakietów jest ciężkim orzechem do zgryzienia. Cierpliwi atakujący, posiadający odpowiednie umiejętności podparte możliwościami Nmapa zwykle mogą ominąć systemy detekcji intruzów i ich działania nie zostaną wykryte. W tym samym czasie administratorzy muszą się zmagać z ogromną ilością fałszywych alarmów dotyczących niepoprawnie zaklasyfikowanej zupełnie niewinnej komunikacji.

Co jakiś czas ktoś sugeruje, że Nmap nie powinien oferować możliwości omijania systemów zaporowych czy systemów IDS. Argumentują to możliwością wykorzystania tych funkcji także przez atakujących, a nie tylko przez administratorów podnoszących bezpieczeństwo swoich sieci. Problemem jest sama logika, ponieważ atakujący i tak będą wykorzystywali tego typu metody używając innych narzędzi lub samemu wprowadzając odpowiednią funkcjonalność do kodu Nmapa. Równocześnie administratorzy będą mieli utrudniony dostęp do odpowiednich narzędzi i ich praca będzie trudniejsza. Uruchomienie nowoczesnego, bezpiecznego serwera FTP jest dużo skuteczniejszą metodą ochrony niż ograniczanie dostępności do narzędzi pozwalających na przeprowadzanie ataków FTP bounce.

Nie ma magicznej kuli (lub opcji Nmapa) do przełamywania i obchodzenia systemów zaporowych i IDS. Wymaga to umiejętności i doświadczenia. Dokładne instrukcje wykraczają poza zakres tej dokumentacji, która jest jedynie listą dostępnych opcji wraz z opisami jak one działają.

-f (fragmentacja pakietów); --mtu (Używanie wybranego MTU)

Opcja -f powoduje wykorzystywanie przy skanowaniu (włączając w to skanowanie ping) małych pofragmentowanych pakietów. Idea polega na podzieleniu nagłówka TCP na wiele pakietów, co powoduje utrudnienia w ich przetwarzaniu przez filtry pakietów, systemy detekcji intruzów oraz irytujące komplikacje przy ustalaniu co się dzieje. Ale uwaga! Wiele programów ma problemy przy obsłudze tego typu pakietów. Przestarzały sniffer Sniffit wykonuje nieprawidłową operacje i zostaje zamknięty zaraz po odebraniu już pierwszego z takich pakietów. Dodanie tej opcji spowoduje automatyczne dzielenie wszystkich pakietów wysyłanych przez Nmapa na mniejsze o rozmiarze maksymalnie 8 bajtów. Przykładowo 20 bajtowy nagłówek TCP zostanie podzielony na 3 pakiety: najpierw dwa po 8 bajtów i ostatni 4 bajty. Oczywiście każdy fragment dostaje własny nagłówek IP. Dodanie drugiej opcji -f powiększa wykorzystywany rozmiar fragmentów z 8 do 16 (redukując ilość fragmentów). Możliwe jest również podanie własnego rozmiaru za pomocą opcji --mtu. Nie używaj parametru -f, jeśli używasz --mtu. Podawany rozmiar musi być wielokrotnością 8. W niektórych systemach filtry pakietów nie otrzymują bezpośrednio pakietów, tylko są one wstępnie kolejkowane, tak jak w Linuxie przy ustawieniu opcji CONFIG_IP_ALWAYS_DEFRAG w kernelu, jednak w wielu przypadkach takie opcje nie są włączane ze względów wydajnościowych. Opcja taka nie jest również włączana jeśli zachodzi możliwość routowania poszczególnych pakietów różnymi ścieżkami. Niektóre systemy operacyjne potrafią defragmentować pakiety wysyłane przez kernel, Linux z iptables i modułem śledzenia połączeń jest jednym z przykładów. Uruchamiając skanowanie można podsłuchać za pomocą sniffera takiego jak Ethereal, czy wychodzące pakiety są rzeczywiście pofragmentowane. Jeśli system powoduje tego typu problemy, można wypróbować opcje --send-eth, która pomija stos TCP/IP i wysyła bezpośrenio ramki ethernetowe.

-D <decoy1 [,decoy2][,ME],...> (Ukrywaj skanowanie za pomocą innych hostów)

Powoduje skanowanie, wykrywane jako przychodzące z kilku miejsc równocześnie. System IDS może wykryć 5-10 różnych skanowań z różnych adresów, jednak nie będzie w stanie ocenić który z nich jest prawdziwym źródłem pochodzenia, a które tylko niewinnymi zasłonami. Chociaż metoda ta może zostać rozpoznana poprzez śledzenie ścieżki pakietów na routerach i innych aktywnych mechanizmów, ogólnie jest efektywną techniką na ukrywanie swojego adresu IP.

Podwając listę poszczególnych hostów-zasłon, trzeba je oddzielić przecinkami, można również na tej liście umieścic ME oznaczające pozycję własnego adresu IP na liście. W przypadku wykorzystania przynajmniej 6-tej pozycji na liście dla własnego IP, wiele popularnych systemów wykrywających skanowania (na przykład scanlogd firmy Solar Designer) nawet nie pokaże prawdziwego źródła pochodzenia pakietów na liście ataków. Jeśli ME nie zostanie dodane, Nmap umieści je losowo na liście.

Należy zwrócić uwagę, ze hosty-przykrywki powinny być dostępne, inaczej będzie można łatwo wykryć host skanujący i że można niechcący dokonać ataku SYN flood na hosty skanowane. Bezpieczniej jest używać adresów IP zamiast nazw systemów-przykrywek, bo nie zostawi to informacji w logach ich serwera nazw.

Przykrywki są używane zarówno przy początkowym skanowaniu ping (z wykorzystaniem ICMP, SYN ACK itp), podczas skanowania portów jak i przy wykrywaniu systemu operacyjnego. Technika ta nie działa podczas wykrywania wersji i skanowania metodą connect().

Używanie zbyt wielu adresów hostów-przykrywek znacznie spowalnia skanowanie i może nawet spowodować zmniejszenie dokładności. Dodatkowo niektórzy dostawcy usług odfiltrowują pakiety podszywające się pod adresy z innych sieci, jednak wielu nie robi tego wcale.

-S <adres_ip> (Ustawienie adresu nadawcy)

W niektórych przypadkach Nmap nie potrafi ustalić właściwego adresu nadawcy (i wyświetli stosowny komunikat). W takim przypadku należy za pomocą opcji -S podać adres lokalnego interfejsu przez który mają być wysyłane pakiety.

Inną możliwością tej opcji jest podmiana adresu nadawcy tak, by cel skanowania uważał, że skanuje go ktoś inny. Wyobraź sobie, ze firmę nagle zacznie skanować konkurencja! W przypadku takiego użycia, zwykle będzie wymagana opcja -e, a zalecana również -P0.

-e <interfejs> (Użyj wybranego interfejsu)

Informuje Nmapa przez który interfejs ma wysyłać i odbierać pakiety. Nmap powinien wykryć go automatycznie, ale jeśli mu się nie uda, można to zrobić ręcznie.

--source-port <numerportu>; -g <numerportu> (Używaj podanego portu źródłowego)

Jednym z najczęściej spotykanych problemów konfiguracyjnych jest ufanie danym przychodzącym z określonego portu źródłowego. Łatwo jest zrozumieć, czemu tak się dzieje. Administrator instaluje nowiusieńki system zaporowy, którego jedyną wadą są zgłoszenia od niepocieszonych użytkowników, którym nagle przestały działać aplikacje. Przykładem może być DNS, ponieważ odpowiedzi na zapytania z zewnętrznych serwerów przestały dochodzić do sieci. Innym przykładem jest FTP, przy stosowaniu aktywnych połączeń zewnętrzne serwery próbują utworzyć połączenia powrotne do klienta żądającego przesłania pliku.

Bezpieczne rozwiązanie dla tych problemów istnieje, często w formie aplikacyjnych serwerów proxy lub analizy protokołu przez systemy zaporowe. Niestety istnieją również inne łatwiejsze, ale i mniej bezpieczne rozwiązania. Wielu administratorów wpada w pułapkę zakładając, że dane przychodzące z portu 53 są zawsze odpowiedziami serwera DNS, a z 20 aktywnymi połączeniami FTP i zezwalając na przechodzenie takiego ruchu przez system zaporowy. Często zakładają, że żaden atakujący nie spróbuje wykorzystać takiej luki. Zdaża się również, że problem taki zostaje wprowadzony do konfiguracji jako tymczasowe rozwiązanie, jednak zapominają o jego zmianie na bardziej bezpieczne.

Przepracowani administratorzy nie są jedynymi, którzy wpadają w taką pułapkę. Wiele komercyjnych produktów jest dostarczanych z podobnymi problemami. Zdarzyło się to nawet firmie Microsoft, której filtry IPsec dostarczone z Windows 2000 i XP zawierają regułę wpuszczającą cały ruch TCP i UDP pochodzący z portu 88 (Kerberos). Innym dobrze znanym przykładem jest Zone Alarm personal firewall, który do wersji 2.1.25 włącznie nie filtrował pakietów UDP z portów 53 (DNS) i 67 (DHCP).

Nmap oferuje dwie ekwiwalentne opcje -g i --source-port pozwalające na wykorzystanie opisanej wyżej funkcjonalności poprzez podanie numeru portu z którego wysyła dane, o ile jest to tylko możliwe. Nmap musi używać różnych numerów portów dla poprawnego działania niektórych testów wykrywających system operacyjny, zapytania DNS również ignorują opcję --source-port, ponieważ Nmap wykorzystuje do tego biblioteki systemowe. Większość typów skanowania TCP, włączając skanowanie SYN obsługuje tę opcję we wszystkich przypadkach, podobnie jak i UDP.

--data-length <rozmiar> (Dodawaj losowe dane do wysyłanych pakietów)

Domyślnie Nmap wysyła pakiety o minimalnej wielkości zawierające jedynie sam nagłówek. Pakiety TCP mają 40 bajtów, a ICMP tylko 28. Ta opcja pozwala dołączać do większości pakietów losowe dane o podanym rozmiarze. Pakiety używane do detekcji systemu operacyjnego (-O) pozostają nie zmienione, ale przy większości pakietów ping i skanowania portów opcja ta jest wykorzystywana. Powiększanie pakietów spowalnia proces skanowania, jednocześnie czyniąc go mniej podejrzanym.

--ttl <wartość> (Ustaw czas życia pakietu IP)

Ustawia czas życia (TTL) pakietów na podaną wartość.

--randomize-hosts (Losowanie kolejności skanowania hostów)

Opcja powoduje włączenie losowania kolejności hostów w każdej grupie do 8096 hostów przed ich skanowaniem. Zachowanie takie czyni skanowanie mniej oczywistym dla wielu systemów monitorujących sieci, zwłaszcza w połączeniu z opcją spowalniającą skanowanie. Możliwe jest losowanie z jeszcze większych grup, poprzez zmianę stałej PING_GROUP_SZ w pliku nmap.h i rekompilacji. Innym rozwiązaniem jest wygenerowanie listy adresów IP za pomocą opcji lista skanowania (-sL -n -oN <nazwapliku>) i losowemu pomieszaniu adresów na niej za pomocą skryptu Perla, oraz podaniu jej Nmapowi za pomocą opcji -iL.

--spoof-mac <adres mac, prefiks, lub nazwa producenta > (Podmieniaj adres MAC)

Podaje Nmapowi adres MAC z użyciem którego będą wysyłane wszystkie pakiety ethernet. Opcja włącza również automatycznie --send-eth dla uzyskania pewności wysyłania pakietów na poziomie ethernetu. Podany adres MAC może przyjmować wiele postaci. Jeśli zostanie podany znak 0, Nmap wybierze kompletnie losowy adres MAC na czas trwania danej sesji. Podanie parzystej ilości cyfr heksadecymalnych (mogą być oddzielone dwukropkami), spowoduje wykorzystanie jej jako adresu MAC, przy czym jeśli podano mniej niż 12 cyfr szestnastkowych, Nmap wypełni pozostałość 6 bajtów losowymi wartościami. Jeśli podany ciąg nie jest 0 lub liczbą heksadecymalną, Nmap poszuka w pliku nmap-mac-prefixes nazwy producenta zawierającego podany ciąg (duże i małe litery nie są rozróżniane) i jeśli znajdzie, użyje identyfikatora producenta OUI (3 bajty) wypełniając pozostałe 3 bajty losowo. Przykłady poprawnych argumentów to Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, Cisco itp.

--badsum (Wysyłanie pakietów z nieprawidłową sumą kontrolną TCP/UDP)

Powoduje wstawianie do nagłówków wysyłanych pakietów nieprawidłowych sum kontrolnych. Jako że prawie każdy stos IP odrzuci tego typu pakiety, otrzymana odpowiedź najprawdopodobniej pochodzi od systemu zaporowego lub IDS, które nie przejmują się sumami kontrolnymi. Dokładniejszy opis tej techniki znajduje się pod adresem https://nmap.org/p60-12.txt