wtorek, 24 września 2013

Nmap idle scanning - jak skanować i nie zostać wykrytym

Skanowanie jałowe (ang. Idle Scanning) jest jednym z wielu sposobów skanowania komputerów w sieci. Jest to jednak dość wyjątkowa metoda, gdyż prawidłowo przeprowadzona uniemożliwia wykrycie naszego (skanującego) komputera przez ofiarę. Teoretyczne podstawy tego skanowania na pierwszy rzut oka mogą wydawać się dość złożone. Nie trzeba być jednak ekspertem aby je zrozumieć, co postaram się tu udowodnić. Pamiętajmy, że tylko dogłębne zapoznanie się z zasadami działania  pozwala na pełne wykorzystanie tej metody w "codziennym życiu" i zapewni nam maksymalne bezpieczeństwo. 

W technice skanowania jałowego oprócz hosta skanującego i skanowanego korzystamy z trzeciej  maszyny, tzw. zombie. Zombie może być jakimś nieużywanym systemem uruchomionym w sieci (w szczególności również w internecie) lub gdy działamy w sieci lokalnej może być maszyną wirtualną uruchomioną na naszym komputerze skanującym (należy wówczas zachować dodatkowe środki ostrożności). Ważne jest, aby zombie samoczynnie nie generował żadnego ruchu ani nie był przez nikogo używany.

Pomimo, że idle scanning zostało odkryte (czy może wynalezione?) już 1998 roku i większość systemów operacyjnych jest już uodporniona na bycie komputerem zombie nie oznacza to, że nie ma sposobu aby samemu uruchomić odpowiednio spreparowany (lub po prostu starszy) system operacyjny w naszej sieci wykorzystując do tego chociażby oprogramowanie VirtualBox.

Zasadniczo skanowanie jałowe bazuje na trzech założeniach:
  1. Próba nawiązania połączenia TCP z określonym portem na hoście skanowanym poprzez wysłanie komunikatu SYN kończy się odpowiedzią SYN/ACK w przypadku gdy ten port jest otwarty lub RST gdy port jest zamknięty.
  2. Komputer odbierający nieoczekiwany komunikat SYN/ACK odpowiada wiadomością RST, natomiast odebranie nieoczekiwanego komunikatu RST jest ignorowane.
  3. Nagłówek każdego pakietu w internecie posiada numer identyfikacyjny IPID. Niektóre systemy operacyjne wysyłając dane powiększają o stałą wartość IPID każdego pakietu (najczęściej zwiększają jego wartość o 1). Analiza zmian wartości IPID kolejnych pakietów daje nam wiedzę o ilości wysłanych przez dany host pakietów.
Osobno te trzy założenia nie wiele wnoszą, jednak gdy połączymy je w całość oraz dodamy  możliwość fałszowania adresu ip nadawcy otrzymujemy gotowy przepis na skanowanie portów, które pozwala nam na pozostanie niewykrytym.

Wracając jeszcze na moment do teorii... zacznijmy od tego, że wszystkie pakiety poruszające się w sieci podzielone są na warstwy zgodnie z Modelem OSI. Nas będzie interesowała przede wszystkim jego trzecia warstwa; nagłówek protokołu IP. 

Nagłówek IP

Głównymi atrybutami nagłówka IP są źródłowe i docelowe adresy hostów. Poza nimi będzie nas także interesowało pole numer identyfikacyjny (IPID), które reprezentuje kolejny numer datagramu w całej paczce danych. Przy przesyłaniu przez sieć dużych plików lub podczas transmisji strumieniowych IPID umożliwia poskładanie rozdzielonych danych w jeden spójny plik (lub strumień) na hoście docelowym.

Charakterystyczną, a w przypadku skanowania jałowego najważniejszą cechą numeru identyfikacyjnego jest sposób w jaki system operacyjny przydziela mu wartość w przypadku gdy nie jest on elementem transmisji strumieniowej lub częścią większego pliku (np podczas pingowania, gdzie każdy wysłany pakiet jest niezależny). W takiej sytuacji większość nowoczesnych systemów operacyjnych nadaje mu wartość 0 lub losową. Starsze (np Windows XP SP3) lub odpowiednio spreparowane systemy, każdemu wysłanemu pakietowi nadają po prostu kolejne wartości. Sposób numerowania najłatwiej sprawdzić korzystając z programu hping3

hping3

Można także wykorzystać bardziej wyrafinowane sposoby, na przykład skaner IPIDSeq wbudowany w metasploit lub skrypt do nmap o tej samej nazwie. IPIDSeq to skaner pomagający wykryć komputery zombie. Domyślnie wysyła on 6 komunikatów SYN na port 80 oraz analizuje pola IPID uzyskanych odpowiedzi:

IPIDSeq wbudowany w Metasploit

Oczywiście zmiany IPID można obserwować także w programie Wireshark i korzystając ze zwykłego ping'a.

Gdy znaleźliśmy już host zombie to większość pracy mamy już za sobą. Jednak zanim przystąpimy do właściwego skanowania wyjaśnijmy na czym ono polega. Zasadniczo idle scanning składa się z trzech kroków powtarzanych dla każdego skanowanego portu:
  1. Sprawdzenie wartości IPID na komputerze zombie.
  2. Na komputerze skanującym generujemy klasyczny komunikat SYN jednak ze sfałszowanym adresem nadawcy tak, aby odpowiedź zamiast do nas wróciła do komputera zombie. Wiemy już, że gdy zombie odbierze nieoczekiwany komunikat SYN/ACK to powiększy wartość IPID (odpowie komputerowi skanowanemu), natomiast odebranie RST zostanie zignorowane (nic nie zostanie wysłane).
  3. Ponownie sprawdzamy jak zmieniła się wartość IPID na zombie. Jeśli wartość wzrosła oznacza to port otwarty, jeśli nie - zamknięty.
Przeprowadźmy teraz porównanie klasycznego skanowania oraz skanowania jałowego z hostem zombie. W przypadku klasycznego skanowania SYN otrzymujemy nastepujące wyniki:


Oczywiście system IDS na skanowanym hoście już zdążył wykryć nas i nasze działanie, gdyż cały ruch pochodzi bezpośrednio z naszej maszyny. Przyjrzyjmy się teraz wynikom skanowania jałowego:


W efekcie dostajemy tę samą listę portów. Różnica polega na tym, że za drugim razem ewentualne systemy IDS na hoście skanowanym wykryły zombie jako tego dokonującego skanowania, my natomiast pozostaliśmy w ukryciu.

Podsumowując, po znalezieniu w penetrowanej sieci hosta zombie przy pomocy skanera IPIDSeq lub hping3 wystarczy tylko wykonać polecenie:
nmap -PN -sI zombie target 
warto także użyć flagi -PN, powodującej zaniechanie domyślnego ping'owania celu przed właściwym skanowaniem. Po tak przeprowadzonym skanowaniu, jedyne pakiety jakie dochodzą do hosta skanowanego pochodzą od zombie, co w szczególności widać w programie Wireshark uruchomionym na komputerze skanowanym: 

wireshark na maszynie skanowanej

Dla chcących wiedzieć jeszcze więcej polecam artykuł dotyczący skanowania jałowego na oficjalnej stronie nmap'a: http://nmap.org/book/idlescan.html oraz serie wykładów dotyczących bezpieczeństwa sieci z PJWSTK: http://edu.pjwstk.edu.pl/wyklady/bsi/scb/main14.html.

Brak komentarzy:

Prześlij komentarz