Wstęp do skanowania portów 

Proces skanowania portów polega na (przeważnie automatycznym) sprawdzeniu, który port TCP lub UDP jest otwarty. Lista otwartych portów oraz informacje odnośnie usług hostowanych na tych portach, wyznacza potencjalne wektory ataków. Skanowanie portów jest typową metodą aktywnego zbierania informacji o celu, która wykorzystuje bezpośrednią interakcję z ofiarą. 

Przy wykorzystywaniu tej metody, należy uwzględnić (przed rozpoczęciem skanowania) potencjalny skutek jaki może wywołać generowanie dużego ruchu sieciowego skupionego na konkretnym serwerze. 

Skanowanie portów TCP 

Ten typ skanowania bazuje na metodzie three-way-handshake, która polega na negocjacji parametrów połączenia dwóch stron w taki sposób, jak przedstawiono poniżej:

Metoda three-way-handshake

Skanowanie portów TCP polega zatem na wykonaniu three-way-handshake z serwerem ofiary. Jeśli negocjacja zakończy się sukcesem, wówczas atakujący wie, że dany port jest otwarty. W przeciwnym wypadku port jest niedostępny tj. zamknięty bądź ruch do niego jest dedykowany np. dla zdefiniowanych adresów IP (port filtrowany).

Przykład skanowania portów TCP

Poniżej znajduje się przykład skanowania portów TCP hosta ofiary (Windows 10). Narzędziem użytym do tego celu jest nmap, który jest darmową usługą dostępną natywnie na systemie Kali Linux. Oczywiście narzędzie to można bardzo łatwo zainstalować na każdym systemie Linux bądź Windows (Zenmap).

Uruchamiając nmap z domyślnymi parametrami (czy z ich brakiem poza zdefiniowanym adresem IP ofiary), narzędzie pokazuje, które spośród tysiąca najpopularniejszych portów TCP są otwarte.

Jak widać, otwarte porty TCP to 135, 139, 445, 5357 oraz 6881. W tabeli SERVICE narzędzie pokazuje jakiego typu usługa jest hostowana.
Każdy z tych portów to potencjalna droga dla atakującego, ponieważ każda z tych dostępnych usług może posiadać publicznie znaną podatność, która może stanowić istotne ryzyko włamania się przez nią do systemu.

Skanowanie portów UDP

Mając na uwadze fakt, że o ile protokół TCP jest protokołem połączeniowym (tzn., aby nawiązać komunikację między dwoma stronami, to obie muszą wyrazić chęć i możliwość nawiązania tej komunikacji), to protokół UDP jest bezstanowy, czyli komunikacja między stronami odbywa się jednostronnie, bez negocjacji parametrów połączenia.

Różnica między TCP a UDP

Skanowanie portów UDP polega na wysłaniu pustego pakietu na konkretny port. Jeśli port UDP jest otwarty, wówczas strona wysyłająca nie dostaje odpowiedzi, jeśli zaś port UDP jest zamknięty wtedy strona wysyłająca pakiet dostaje informację ICMP, że port jest nieosiągalny.

Przykład skanowania portów UDP

Poniżej znajduje się przykład skanowania portów UDP. Podobnie jak w przykładzie poprzednim, skanowanie obejmowało tysiąc najpopularniejszych portów UDP.

Rezultatem jest informacja, że wszystkie tysiąc portów jest otwartych lub wyfiltrowanych. Konstrukcja protokołu UDP nie pozwala jednoznacznie rozstrzygnąć, czy port jest otwarty czy filtrowany, dlatego właśnie atakujący skupiają się głównie na portach TCP.

Podsumowanie

Skanowanie portów UDP jest często mało efektywne, ponieważ komunikat ICMP wysyłany jest w przypadku, gdy port UDP jest zamknięty. Co więc w przypadku, gdy między atakującym a ofiarą jest Firewall, który blokuje komunikaty ICMP? W takim przypadku atakujący może przypuszczać, że port jest otwarty lub filtrowany, podczas gdy jest zamknięty.

Weryfikacja statusu portów TCP jest znacznie prostsza, ale zostawia znacznie więcej śladów. Czy zatem łatwo jest dokonać detekcji, gdy organizacja posiada systemy monitorowania? Przeważnie tak, ale pamiętać należy, że skanowanie skanowaniu nie równe – to zagadnienie oraz wiele innych, zostanie rozwinięte w dalszych artykułach o fazie skanowania.