Kompletny Przewodnik Po Nmap – Od Skanowania Portów Po Zaawansowaną Analizę - Security Bez Tabu

Kompletny Przewodnik Po Nmap – Od Skanowania Portów Po Zaawansowaną Analizę

Podstawy Nmap: skanowanie portów i hostów

Nmap (Network Mapper) to otwartoźródłowe narzędzie do skanowania sieci i audytów bezpieczeństwa – potrafi szybko przeskanować duże sieci, jak i pojedyncze hosty. Wykorzystuje pakiety niskiego poziomu IP do wykrywania hostów dostępnych w sieci, oferowanych przez nie usług, uruchomionych systemów operacyjnych i wielu innych informacji. Sercem Nmap jest skanowanie portów – podstawowa czynność, która pozwala odkryć, jakie porty TCP lub UDP są otwarte na danym hoście, a co za tym idzie, jakie usługi działają w sieci.

Nmap najpierw stara się ustalić, czy cel (host) jest aktywny. Domyślnie wysyła zapytania ping (ICMP Echo Request) lub pakiety TCP/ARP do wybranych portów, aby sprawdzić, czy host odpowiada. Jeśli host nie odpowiada na żadne próby, Nmap może uznać go za offline i pominąć dalsze skanowanie portów (można to wyłączyć opcją -Pn). Wykrywanie hostów (tzw. ping scan) samodzielnie uruchomisz poleceniem nmap -sn <adres> – to szybki sposób na sprawdzenie, które maszyny w podsieci są włączone.

Gdy host jest wykryty jako aktywny, Nmap przechodzi do skanowania portów. Domyślnie skanowanych jest około 1000 najpopularniejszych portów TCP na każdym badanym hoście (dzięki czemu skan jest szybszy, a i tak obejmuje większość typowych usług). Możesz to zmienić, wskazując konkretne porty przełącznikiem -p (np. -p 22,80,443) lub skanując wszystkie 65 535 portów -p-. Nmap obsługuje zarówno protokół TCP, jak i UDP – przy czym aby skanować porty UDP, należy użyć opcji -sU (domyślnie Nmap skanuje porty TCP). Domyślną metodą skanowania jest tzw. skanowanie TCP SYN (half-open scan), które jest najszybsze i dość dyskretne. Nmap wysyła pakiet SYN i czeka na odpowiedź: SYN/ACK wskazuje, że port jest otwarty, a RST (reset) oznacza port zamknięty. Ponieważ skan SYN nie nawiązuje pełnego połączenia (nie wysyła finalnego ACK), pozostaje trudniejszy do wykrycia przez usługę – stąd jego „skrytość”. Skan SYN wymaga uprawnień administratora (wysyłanie surowych pakietów) – jeśli ich brak lub skanujemy przez IPv6, Nmap automatycznie przełącza się na skanowanie TCP connect (-sT), które używa zwykłego połączenia TCP (trójstronnego handshake) do sprawdzania portów. Skan connect jest mniej dyskretny (zostawia ślad w logach usług jako pełne połączenie), ale i tak bywa przydatny, gdy nie możemy użyć SYN.

Drugim podstawowym trybem jest skanowanie UDP. Ponieważ UDP jest bezpołączeniowe, brak odpowiedzi z portu może oznaczać, że port jest otwarty (usługa odebrała pakiet i milczy) albo że filtr firewall go blokuje. Dlatego Nmap oznacza porty UDP bez odpowiedzi jako open|filtered – nie może rozróżnić, czy są otwarte czy filtrowane. Jeśli port UDP jest zamknięty, zwykle host zwraca pakiet ICMP „port unreachable”, co Nmap interpretuje jako stan zamknięty. Skanowanie UDP bywa wolniejsze – aby upewnić się, Nmap wysyła ponownie pakiety na brak odpowiedzi i czeka dłużej (firewalle często nie informują o odrzuconych pakietach, co zmusza skaner do prób retransmisji i spowalnia proces). Mimo to warto skanować UDP, bo istotne usługi (DNS, DHCP, SNMP itd.) działają właśnie na UDP.

Przykładowe skanowanie portów

Zobaczmy teraz w praktyce, jak wyglądają wyniki podstawowego skanu portów. Uruchomimy szybki skan SYN wybranych portów na przykładowym hoście i przeanalizujemy rezultat. Załóżmy, że interesuje nas, czy host 192.168.1.100 ma otwarte porty 22 (SSH) i 80 (HTTP):

# Skan SYN wybranych portów 22 i 80 na hoście 192.168.1.100
nmap -sS -p 22,80 192.168.1.100

Przykładowy fragment wyniku skanowania może wyglądać następująco:

Nmap scan report for 192.168.1.100
Host is up (0.0020s latency).

PORT    STATE    SERVICE
22/tcp  open     ssh
80/tcp  filtered http

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

W powyższym wyniku widać, że port 22/tcp jest oznaczony jako open, co oznacza otwarty – usługa SSH odpowiada na próby nawiązania połączenia. Port 80/tcp jest filtered, czyli Nmap nie otrzymał odpowiedzi – komunikacja na tym porcie jest prawdopodobnie blokowana (np. przez firewall), więc skaner nie jest w stanie stwierdzić, czy usługa HTTP tam działa. Inne porty nie zostały tu wymienione, co zazwyczaj oznacza, że są zamknięte (closed) – host odpowiedział resetem na pakiety SYN, lub w przypadku UDP zwrócił komunikat ICMP o niedostępności portu.

Wezwanie do działania: Spróbuj wykonać podobny skan na własnej maszynie lub w sieci lokalnej. Na przykład nmap -sS -p 22,80,<inne_porty> <adres_IP> – zobacz, jakie porty uzyskasz w stanie open, closed lub filtered. To doskonały sposób, aby przećwiczyć interpretację podstawowych wyników skanowania.

Najważniejsze opcje Nmap i tryby skanowania

Podstawowe skanowanie można wzbogacić o wiele opcji i przełączników, które dają Nmapowi ogromną elastyczność. Poniżej omówimy najważniejsze z nich – od wyboru portów, przez wykrywanie usług i systemów operacyjnych, po skrypty NSE. Wszystkie opcje można łączyć w jednym poleceniu, tworząc zaawansowane skany dostosowane do potrzeb.

Wybór portów i protokołów

Zakres portów: Jak wspomniano, domyślnie Nmap sprawdza ~1000 najczęściej używanych portów. Możesz to zmienić opcją -p. Przykłady:

  • -p 1-1023 – skanuj porty od 1 do 1023 (tzw. well-known ports).
  • -p 80,443,8080 – skanuj tylko konkretne porty 80, 443 i 8080.
  • -p- – skanuj wszystkie 65535 portów (od 1 do 65535). Uwaga: pełny skan wszystkich portów może potrwać długo.

Jeśli chcesz skanować zarówno porty TCP, jak i UDP jednocześnie, Nmap pozwala kwalifikować numery portów prefiksem T: lub U:. Np. -p T:22,80,U:53,161 przeskanuje porty 22/tcp, 80/tcp, 53/udp, 161/udp w ramach jednego uruchomienia (pamiętaj również o dodaniu opcji -sU, bo domyślnie bez niej UDP nie będą skanowane).

Szybkie skanowanie (-F): Dla bardzo pobieżnego rekonesansu można użyć opcji -F (fast scan), która ogranicza się do ~100 najpopularniejszych portów. Jest to przydatne, gdy zależy nam na czasie i chcemy sprawdzić tylko najbardziej typowe usługi.

Losowa kolejność vs sekwencyjna: Domyślnie Nmap losowo zmienia kolejność skanowanych portów, żeby wyniki były szybciej widoczne i by nie powodować stałego obciążenia tych samych usług. Można wymusić skanowanie po kolei opcją -r (rzadko potrzebne). W praktyce kolejność nie wpływa na wynik końcowy, jedynie na kolejność odkrywania otwartych portów.

Wykrywanie usług i wersji (-sV)

Odkrycie otwartego portu to dopiero początek – zazwyczaj chcemy wiedzieć, jaka usługa nasłuchuje na tym porcie i w jakiej wersji. Nmap umożliwia tzw. service fingerprinting – identyfikację usługi po charakterystycznych zachowaniach (banerach, odpowiedziach protokołowych). Aby z tego skorzystać, używamy opcji -sV (Service Version detection). Po dodaniu -sV Nmap spróbuje na każdym otwartym porcie zidentyfikować usługę – np. czy na porcie 22 jest OpenSSH czy Telnet, jaka wersja; czy na porcie 80 jest serwer Apache, Nginx czy IIS i w której wersji, itp.. Nmap posiada bazę sygnatur usług i na podstawie odpowiedzi (np. baneru powitalnego, niestandardowych komunikatów) dopasowuje znane wzorce. Wynik takiego skanowania w raporcie to dodatkowa kolumna VERSION z nazwą aplikacji i często numerem wersji.

Przykład: Dla portu 22 otwartego powyżej, zwykły skan pokazał ssh jako nazwę usługi. Gdybyśmy dodali -sV, wynik może pokazać np. ssh OpenSSH 7.4p1 Debian – co oznacza, że Nmap rozpoznał konkretną implementację (OpenSSH) i wersję 7.4p1. To cenna informacja: znając wersję usługi, możemy sprawdzić, czy ma znane podatności. Wykrywanie wersji usług jest więc kluczowe przy ocenie bezpieczeństwa hosta.

Warto pamiętać, że -sV może wydłużyć skan (Nmap często musi poczekać na baner lub przesłać kilka pakietów testowych do usługi). Jeśli zależy nam tylko na liście portów, można pominąć -sV. Jednak w większości audytów bezpieczeństwa opcja ta jest standardem – daje kontekst do otwartych portów.

Detekcja systemu operacyjnego (-O)

Wykrywanie systemu operacyjnego (OS detection) to kolejna potężna funkcja Nmap. Używając opcji -O, skaner spróbuje rozpoznać, jaki system operacyjny (i przybliżona wersja) działa na zdalnej maszynie. Nmap realizuje to poprzez fingerprinting stosu TCP/IP – wysyła zestaw specjalnie przygotowanych pakietów TCP i UDP, a następnie analizuje niemal każdy bit odpowiedzi otrzymanych od hosta. Różne systemy operacyjne (a nawet różne wersje jądra) implementują stos sieciowy w unikalny sposób – np. mają charakterystyczne wartości TTL domyślne, specyficzne flagi w pakietach RST, kolejność ustawiania pól, rozmiary okien, ID pakietów itp. Nmap porównuje wynik tych testów z obszerną bazą sygnatur (nmap-os-fingerprints), zawierającą opisy tysięcy systemów. Jeśli znajdzie dopasowanie, w raporcie pokaże przypuszczalny system (np. „Running: Linux 5.X”| „OS details: Linux 5.4 – 5.8”). Gdy detekcja nie będzie jednoznaczna, Nmap może podać kilka możliwych systemów wraz z tzw. „pewnością” dopasowania.

Aby OS detection zadziałało, cel powinien mieć przynajmniej jeden otwarty i jeden zamknięty port – to minimalny warunek do wykonania pełnego zestawu testów. Warto więc łączyć -O razem ze skanowaniem portów. Nmap informuje, jeśli nie ma wystarczających danych do detekcji systemu (np. same otwarte porty, brak zamkniętych). W takich sytuacjach można spróbować dodać przełącznik --osscan-guess, aby skaner podał najlepsze przypuszczenia co do systemu, nawet przy słabszych przesłankach.

Detekcja OS, podobnie jak -sV, jest cenna dla bezpieczeństwa – wiedząc, że host działa np. na Windows Server 2019, możemy skupić się na podatnościach typowych dla tej platformy. Użycie -O wymaga uprawnień administratora (podobnie jak skan SYN). Jeśli z jakiegoś powodu nie chcemy zdradzać się z fingerprintingiem, można tę opcję pominąć – ale w większości przypadków podczas pentestu lub audytu włączenie -O dostarcza bardzo przydatnych danych.

Skanowanie agresywne (-A) i skrypty NSE

Opcji i trybów Nmap jest tak wiele, że twórcy przewidzieli wygodny skrót: -A czyli Aggressive Scan. Ten tryb łączy kilka funkcji na raz: włącza detekcję systemu operacyjnego (-O), wykrywanie usług (-sV), oraz uruchamia domyślne skrypty NSE (-sC) i traceroute. Innymi słowy, nmap -A <cel> wykonuje kompleksowy skan, próbując zebrać maksymalnie dużo informacji. Jest to świetny sposób np. na szybki footprint nieznanego hosta. Trzeba jednak pamiętać, że agresywny skan jest dość głośny – wysyła dużo pakietów i łatwo zauważy go IDS/IPS, a usługi mogą odnotować nietypowe zapytania. Mimo to, w wewnętrznych testach często korzysta się z -A dla wygody.

Nmap Scripting Engine (NSE): Jednym z najbardziej zaawansowanych aspektów Nmap są skrypty NSE. Dzięki nim Nmap przestaje być tylko skanerem portów, a staje się rozbudowaną platformą do testów bezpieczeństwa. Skrypty NSE to małe programy (pisane w Lua) dołączone do Nmap, które potrafią automatycznie wykonać dodatkowe czynności wobec wykrytych hostów i usług. Istnieją skrypty do wykrywania znanych podatności, bruteforce haseł, sprawdzania konfiguracji SSL, wykrywania wersji protokołów, a nawet eksploitacji niektórych luk.

Skrypty podzielone są na kategorie (auth, vuln, safe, default, exploit, itd.). Domyślnie Nmap w trybie agresywnym uruchamia skrypty z kategorii „default” (-sC to skrót od --script=default). Są to skrypty uznane za bezpieczne i użyteczne – np. pobieranie wersji SSL/TLS certyfikatu, bannery, info o protokołach. Możemy też ręcznie uruchamiać wybrane skrypty lub kategorie: przełącznik --script pozwala podać nazwę skryptu lub kategorię. Przykłady:

  • nmap --script vuln <cel> – uruchomi skrypty z kategorii „vuln” (sprawdzające podatności) przeciwko hostom/portom wykrytym jako otwarte. To szybki sposób na automatyczne wykrycie znanych CVE (np. słynna luka SMB MS17-010 będzie od razu wykryta jeśli host jest podatny, a Nmap wyświetli info o numerze CVE).
  • nmap --script http-* -p 80 <cel> – uruchomi wszystkie skrypty, których nazwa zaczyna się od „http-” względem portu 80 (np. http-title do pobrania tytułu strony, http-headers do podejrzenia nagłówków, itd.).
  • nmap -sV --script=vulners <cel> – przykład użycia konkretnego skryptu vulners (spoza kategorii domyślnych). Skrypt ten po zidentyfikowaniu wersji usług (dlatego łączymy go z -sV) odpytuje bazę CVE online i wypisuje listę potencjalnych podatności danej wersji oprogramowania. Uwaga: skrypt jest intrusive (ingerujący) i wymaga dostępu do Internetu, ale bywa niezwykle pomocny.

Skryptów jest bardzo dużo – aby zobaczyć listę i opis, możesz użyć --script-help <nazwa> lub zajrzeć do dokumentacji. W praktyce jednak, używając Nmapa na co dzień, szybko poznasz kilka ulubionych skryptów pod konkretne potrzeby (np. ssl-enum-ciphers do sprawdzania szyfrowania SSL, smb-os-discovery dla SMB, ftp-anon dla FTP, itp.). NSE zmienia Nmap w potężne narzędzie automatyzujące wiele testów – to właśnie dzięki niemu można wykryć nie tylko otwarty port, ale np. podatną wersję Apache Struts na tym porcie.

Skanowanie IPv6

Warto wspomnieć, że Nmap obsługuje także IPv6. Skanowanie hostów IPv6 wymaga podania opcji -6 oraz oczywiście użycia adresów w notacji IPv6. Większość funkcji Nmap działa podobnie dla IPv6, choć są pewne różnice techniczne. Na przykład skan SYN w IPv6 nie jest możliwy w klasycznej formie – Nmap automatycznie użyje skanowania TCP connect dla IPv6 (wynika to z implementacji stosu IPv6). Host discovery w IPv6 opiera się na pakietach ICMPv6 (Echo Request) lub specyficznych dla IPv6 metodach (np. Neighbor Discovery zamiast ARP). Ważna uwaga: ze względu na ogromną przestrzeń adresową IPv6 nie skanuje się całych /64 metodą brute-force (to niewykonalne). Zamiast tego wybiera się konkretne adresy lub zakresy, o których wiemy, że są w użyciu. Nmap pomoże nam przeskanować usługę na IPv6 tak samo, jak na IPv4 – np. nmap -6 -sS -p 80 <IPv6-adres> sprawdzi port 80 na danym adresie IPv6.

Zaawansowane techniki skanowania

Mając opanowane podstawy i główne opcje, możemy zagłębić się w zaawansowane techniki, które Nmap oferuje dla bardziej wymagających scenariuszy. Dotyczą one głównie obchodzenia zabezpieczeń (firewalla, systemów IDS) oraz specjalistycznych metod skanowania używanych w testach penetracyjnych. Poniżej przybliżymy najważniejsze z nich.

Omijanie firewalli i IDS (Firewall evasion)

Wiele współczesnych sieci chronionych jest przez zapory sieciowe (firewall) i systemy detekcji intruzów (IDS/IPS), które utrudniają skanowanie. Nmap posiada jednak bogaty zestaw funkcji, które pozwalają testować te zabezpieczenia, a czasem je omijać. Pamiętajmy – jako etyczni testerzy wykorzystujemy te techniki, aby myśleć jak atakujący i sprawdzić, czy nasza sieć wytrzyma próby obejścia filtrów.

Oto niektóre sposoby utrudnienia wykrycia skanowania lub ominięcia prostych filtrów:

  • Fragmentacja pakietów (-f): Nmap może dzielić swoje pakiety na mniejsze fragmenty (np. 8-bajtowe). Włączając opcję -f, wszystkie pakiety skanujące zostaną pofragmentowane. Celem jest zmylenie prostych systemów wykrywających – niektóre starsze IDS/IPS źle radzą sobie ze składaniem zfragmentowanych pakietów, co utrudnia im rozpoznanie skanu. Uwaga: fragmentacja bywa zawodna i może powodować niestabilność niektórych stosów TCP/IP, więc stosuj ostrożnie. Możesz też użyć --mtu <wartość> żeby ręcznie ustawić rozmiar fragmentów (musi być wielokrotnością 8 bajtów).
  • Zmiana źródłowego portu (-g/--source-port): Ciekawa technika polegająca na ustawieniu numeru portu źródłowego pakietów wychodzących. Niektórzy administratorzy (lub kiepskie firewalle) przepuszczają ruch z pewnych portów uznanych za „bezpieczne” – np. pozwalają wszystko, co przychodzi ze źródłowego portu 53 (bo wygląda jak odpowiedź DNS) albo 20 (FTP data) itp. Opcja -g 53 spowoduje, że Nmap wyśle pakiety od siebie z portu 53 – dla filtrów może to wyglądać jak normalna odpowiedź DNS, a nie skan. Oczywiście dziś większość firewalli nie daje się nabrać na tak prosty trik, ale w specyficznych sytuacjach może pomóc. W podobny sposób działa --source-port z dowolnym numerem.
  • Adresy przynęty (-D): Nmap pozwala „ukryć” prawdziwe źródło skanu, poprzez wygenerowanie ruchu z wielu fałszywych adresów IP jednocześnie. Opcja -D przyjmuje listę adresów (tzw. decoys), które Nmap symuluje jako dodatkowe skanujące. System IDS/firewall widzi np. 10 różnych IP skanujących cel równocześnie i nie wie, które jest prawdziwe – podejrzewa atak rozproszony. Można nawet dodać ME w liście, aby wpleść własny adres losowo pomiędzy przynęty. Należy przy tym uważać: używać istniejących, żywych adresów jako przynęt (inaczej łatwo odfiltrować fałszywy ruch), i nie przesadzać z ich liczbą (dużo przynęt spowalnia skan i może obniżyć jego dokładność). Technika decoy nie zadziała przy skanowaniu z pełnym otwarciem TCP (-sT) ani przy wykrywaniu wersji – stosujemy ją głównie z SYN, ACK itp.
  • Tryb Idle scan (-sI): To zaawansowana i sprytna metoda, która pozwala skanować z ukrycia, wykorzystując inny system jako „pośrednika” (tzw. zombie). W dużym skrócie: wskazujemy adres zombi (musi być systemem mało aktywnym, z przewidywalnym ciągiem IP ID w pakietach). Nmap używa go do wysyłania spoofowanych pakietów do celu, a odpowiedzi rozpoznaje analizując zmiany w identyfikatorach IPID zombiego. Efekt: cel widzi skan z IP zombiego, nie naszego. Jeśli się powiedzie, Idle scan daje nam wynik bez ujawniania naszej tożsamości! Wadą jest wymaganie specyficznego zombiego i podatność na zakłócenia – to raczej metoda dla ciekawostki i bardzo stealth scenariuszy. Wynik idle scan może oznaczać porty jako closed|filtered gdy Nmap nie ma pewności co do wyniku. Ze względu na złożoność, idle scan jest rzadko używany poza testami laboratoryjnymi, ale warto wiedzieć, że istnieje.
  • Skan ACK (-sA): Ten typ skanu nie służy do wykrywania otwartych portów, lecz do mapowania reguł firewall. Pakiet ACK wysłany na dowolny port zwykle oczekuje RST z powrotem (niezależnie czy port otwarty czy zamknięty – ACK zastał „niemające kontekstu” połączenie). Jeśli firewall przepuszcza pakiety do danego portu, host odpowie RST (port unfiltered – niefiltrowany). Jeśli firewall blokuje pakiet, odpowiedzi nie będzie (port filtered). Skan ACK pozwala więc stwierdzić, które porty są filtrowane, a które nie, bez wywoływania alertów przez SYN. Technika ta bywa używana przed lub po właściwym skanowaniu, aby ocenić politykę firewall (np. „wszystko zabronione oprócz…?”). Nmap oznacza wyniki skanu ACK jako unfiltered lub filtered. Porty unfiltered można potem przeskanować innym typem skanu, by sprawdzić czy są otwarte czy zamknięte.

W arsenal Nmapa jest jeszcze kilka innych opcji ułatwiających obchodzenie zabezpieczeń, np. --data-length (dodanie losowych danych do pakietów, żeby wyglądały mniej podejrzanie), manipulacje czasem życia pakietów --ttl, opóźnienia między pakietami --scan-delay, a także ustawienia trybów czasowych -T0-T5 (od skanowania paranoidalnego bardzo powoli, po szaleńczy bardzo szybko). Użycie wolniejszych trybów (np. -T0 lub ręczny --scan-delay) może pomóc ominąć systemy IDS/IPS poprzez rozproszenie w czasie – atakujący o wysokiej cierpliwości mogą rozłożyć skan na wiele godzin/dni, by wtopić się w ruch tła. Nmap daje pełną kontrolę nad tymi parametrami.

Ukryte i specjalne tryby skanowania (FIN, Null, Xmas, Maimon)

Poza SYN i ACK, Nmap obsługuje również całą gamę nietypowych scanów TCP, które wysyłają różne kombinacje flag w pakiecie, licząc na nieoczywiste odpowiedzi. Celem tych metod jest często ominięcie prymitywnych firewalli lub IDS, które rozpoznają tylko klasyczny wzorzec SYN. Zaliczamy do nich m.in.:

  • Skan FIN (-sF): wysyła segment TCP z ustawioną flagą FIN (bez SYN) – serwery zgodne z RFC powinny odpowiedzieć RST na zamknięty port, a zignorować (nie odpowiedzieć) na port otwarty. Skan FIN oznacza więc brak odpowiedzi jako otwarty|filtrowany (port otwarty lub filtrowany), a RST jako zamknięty. Podobnie działają skany Null (-sN) – pakiet bez żadnych flag, oraz Xmas (-sX) – pakiet z flagami FIN, PSH, URG (świecący się jak choinka 🎄). Te trzy rodzaje to tzw. stealth scans obywające się bez SYN. Działają dobrze na systemy typu Unix; natomiast Windows (stos TCP/IP Microsoftu) traktuje pakiety bez SYN inaczej i zawsze odpowiada RST – przez co skany FIN/Null/Xmas nie są skuteczne na hostach Windows (wszystkie porty wyjdą jako zamknięte). Mimo ograniczeń, te skany bywają używane gdy firewall filtruje pakiety SYN, ale przepuszcza inne – wtedy mogą ujawnić coś, czego zwykły SYN scan nie widzi.
  • Skan Maimon (-sM): to odmiana FIN wykorzystująca specyficzne zachowanie starych systemów BSD w odpowiedzi na pakiet FIN/ACK. Obecnie rzadko używany praktycznie.
  • Skan UDP (-sU): omówiony wcześniej – w kontekście ukrytych metod warto dodać, że brak odpowiedzi w UDP jest traktowany jako open|filtered, co często utrudnia interpretację wyniku. Naprzeciw temu wychodzi kombinacja skanów – np. równoczesne użycie -sS -sU pozwala w jednym przebiegu skanować TCP i UDP, co jest wygodne.
  • Skan IP protokołów (-sO): Nmap potrafi też skanować numery protokołów IP (0-255) poza TCP/UDP. Pozwala to sprawdzić, jakie protokoły sieciowe host obsługuje (ICMP, GRE, etc.). Ta egzotyczna opcja przydaje się rzadko, ale istnieje.

Każdy z tych trybów może znaleźć niszowe zastosowanie w zależności od konfiguracji celu. W praktyce najczęściej używane zaawansowane skany to SYN, ACK oraz UDP, ewentualnie skrypty NSE i kombinacje z -Pn (bez ping) czy -D (przynęty), aby poradzić sobie z firewallami. Dobrze jest znać możliwości Nmapa, nawet jeśli nie każdy tryb użyjemy na co dzień.

Wezwanie do działania: Przetestuj wybrane zaawansowane opcje w kontrolowanym środowisku (np. w swojej sieci labowej). Spróbuj użyć -sF lub -sX przeciwko znanemu hostowi i porównaj wyniki ze zwykłym skanem SYN. Zastosuj opcję -D z kilkoma fałszywymi adresami (np. adresami publicznych DNS) i przeanalizuj logi firewall – czy prawdziwy skanujący ginie w tłumie? Takie eksperymenty dadzą Ci wyczucie, jak działają techniki stealth i firewall evasion w praktyce.

Analiza wyników skanowania

Umiejętność interpretacji wyników Nmap jest równie ważna co samo wykonanie skanu. Raport Nmap dostarcza mnóstwo informacji – od listy otwartych portów, poprzez wersje usług, aż po estymację systemu operacyjnego i wynik działania skryptów. Poniżej omawiamy, na co zwrócić uwagę analizując wyniki.

Stany portów i ich znaczenie

Nmap klasyfikuje każdy sprawdzony port do jednego z sześciu stanów: otwarty (open), zamknięty (closed), filtrowany (filtered), niefiltrowany (unfiltered), otwarty|filtrowany (open|filtered), zamknięty|filtrowany (closed|filtered). Większość z nich już poznaliśmy, ale podsumujmy:

  • Otwarty (open): Na danym porcie działa aplikacja, która przyjmuje połączenia (TCP) lub pakiety (UDP). Dla bezpieczeństwa, każdy otwarty port to potencjalny punkt ataku – warto upewnić się, że usługa jest zabezpieczona aktualną wersją i nie jest niepotrzebnie wystawiona.
  • Zamknięty (closed): Port jest dostępny (host odpowiada np. RST na SYN), ale nie ma na nim aktywnej usługi. Zamknięte porty nie oferują bezpośrednio zagrożenia, jednak pokazują, że host istnieje i może być osiągalny. Włączony, ale zamknięty port może zostać w przyszłości otwarty przez uruchomienie usługi – dlatego administrator może chcieć go zablokować firewallem, aby stał się filtrowany.
  • Filtrowany (filtered): Nmap nie otrzymał odpowiedzi od portu i nie wie, czy jest otwarty czy zamknięty – komunikacja jest filtrowana (najczęściej przez firewall). Ten stan frustruje skanujących, bo ukrywa prawdziwy status portu. W praktyce większość portów na hostach publicznych będzie filtrowana – brak odpowiedzi albo komunikat administratively prohibited. Nmap w trybie default ponawia kilkukrotnie próbę, co spowalnia skan. Dla analizy: port filtrowany oznacza „tu może coś być, ale tarcza blokuje”.
  • Niefiltrowany (unfiltered): Port dostępny, jednak Nmap nie mógł stwierdzić, czy open czy closed. Taki status pojawia się głównie w skanie ACK (gdy port odpowiada RST, czyli nie jest blokowany przez firewall). Oznacza to, że port przepuszcza pakiety, ale np. nie był sprawdzany pod kątem otwarcia w danym skanie. Dalsze skany (SYN/FIN) mogą dać bardziej konkretne info (open/closed).
  • Open|filtered: Jak wspomniano przy UDP – Nmap nie dostał odpowiedzi i nie wie, czy port nasłuchuje, czy jest filtrowany. Taki status jest typowy dla skanów UDP, FIN, Null, Xmas – brak odpowiedzi może oznaczać zarówno brak usługi, jak i odrzucenie przez firewall. W raportach open|filtered to stany niepewne – wymagają dodatkowych metod (np. skanu w innym trybie lub obserwacji ruchu), by rozstrzygnąć.
  • Closed|filtered: Rzadko spotykany – używany w specyficznych sytuacjach, np. gdy Nmap wykonuje skan Idle i nie jest w stanie odróżnić portu zamkniętego od przefiltrowanego. Jeśli widzisz closed|filtered, prawdopodobnie masz do czynienia z zaawansowaną techniką skanowania i wynikiem, który mówi „nie dało się ustalić, ale na pewno nie jest to stan otwarty”.

Analizując raport, skupiamy się oczywiście głównie na portach otwartych – to one reprezentują dostępne usługi. Porty zamknięte potwierdzają obecność hosta (host up), a filtrowane sygnalizują działanie mechanizmów obronnych. Warto odnotować, które porty są otwarte i czy jest to spodziewane (np. serwer web powinien mieć 80/443 otwarte, ale czy powinien mieć otwarty Telnet na porcie 23?).

Informacje o usługach i systemach

Jeśli skanowaliśmy z opcją -sV, przy każdym otwartym porcie zobaczymy szczegółowe informacje o usłudze. Przykładowy wiersz z wyniku może wyglądać tak:

22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)

Znaczenie pól:

  • 22/tcp – numer portu i protokół.
  • open – stan portu.
  • ssh – nazwa usługi (z bazy /etc/services lub heurystyki Nmap).
  • OpenSSH 7.9p1 Debian 10+deb10u2 – dodatkowy banner/version info wykryty dzięki -sV. Tu wskazuje konkretną wersję serwera SSH.
  • (protocol 2.0) – czasem w nawiasie Nmap podaje dodatkowe dane, np. wersję protokołu.

Dla usług HTTP Nmap może też wyświetlić np. tytuł strony (jeśli użyliśmy skryptu http-title) albo informację o certyfikacie SSL (ssl-cert skrypt). Wyniki skryptów NSE pojawiają się pod danym portem, poprzedzone nazwą skryptu. Przykład dla HTTP:

80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
| http-title: "Strona przykładowa"
| http-server-header: Apache/2.4.29 (Ubuntu)

Tu skan (np. z -sV -sC) wykrył, że na porcie 80 działa Apache 2.4.29 na Ubuntu, a skrypty NSE pobrały tytuł strony głównej oraz banner serwera HTTP. Te dodatkowe dane są bezcenne przy analizie – np. od razu wiemy, że serwer Apache 2.4.29 jest dość stary (warto sprawdzić znane CVE dla tej wersji), a tytuł strony może zdradzać, jaka aplikacja tam działa.

W sekcji OS (jeśli użyliśmy -O lub -A), Nmap przedstawi typ urządzenia (router/PC/serwer itp.), system operacyjny i jego wersję (często z kilkoma możliwymi wariantami). Np.:

Device type: general purpose
Running: Microsoft Windows 10 or 2016
OS CPE: cpe:/o:microsoft:windows_10:1709
OS details: Microsoft Windows 10 1709 - 1909, Windows Server 2016
Network Distance: 1 hop

Interpretacja: host wygląda na zwykły komputer, prawdopodobnie Windows 10 (wersja 1709-1909) lub odpowiadający temu Windows Server 2016. CPE to ustandaryzowany identyfikator systemu. Network Distance mówi, że host jest 1 hop od nas (czyli w tej samej sieci / bezpośrednio osiągalny).

Jeśli Nmap nie rozpozna systemu, poda komunikat typu OS: Uknown i unikalny ID odcisku palca, zachęcając do przesłania go do maintainerów Nmapa w celu uzupełnienia bazy.

Podczas analizy wyników zebranych przez Nmap, warto kierować się kilkoma pytaniami:

  • Czy znalezione otwarte porty są spodziewane? Np. na serwerze web spodziewamy się 80/tcp i 443/tcp. Jeśli widzimy dodatkowo 3306/tcp (MySQL) otwarty na świat – to potencjalny problem (baza danych dostępna zdalnie).
  • Czy usługi mają aktualne wersje? Nmap podaje wersje – jeśli widzimy stare wersje (np. OpenSSH 7.4, Apache 2.4.29 jak wyżej), to sygnał, że trzeba sprawdzić znane podatności dla tych wersji. Tutaj z pomocą przychodzi NSE (skrypty typu vuln lub wspomniany vulners).
  • Czy host jest za firewallem? Wiele portów filtered może wskazywać, że działa firewall, który dropuje nieautoryzowany ruch. Np. często cała reszta poza kilkoma portami będzie filtrowana.
  • Czy któreś usługi nie są dupikatami? Np. dwa serwery HTTP na różnych portach – może jeden to panel administracyjny? Dwa serwery SSH (na 22 i 2222) – może jeden testowy? Takie rzeczy warto wychwycić.
  • Informacje z banerów/skryptów: Czasem baner potrafi zdradzić więcej niż byśmy chcieli. Np. ftp może pozwolić na anonymous login (Nmap ma skrypt, który to sprawdza). Albo na porcie 80 skrypt wykrył phpMyAdmin – co niesie określone ryzyka. Analiza raportu Nmap to trochę jak rozwiązywanie układanki – łączymy fakty, by ocenić powierzchnię ataku na dany host.

Na koniec, dobrze jest zapisać wyniki skanowania w pliku dla dokumentacji. Nmap oferuje kilka formatów wyjściowych: zwykły (-oN), grepowalny (-oG), XML (-oX), a także -oA <prefix> zapisujący wszystkie trzy jednocześnie. Dzięki temu można później przeszukać wyniki, wczytać je do innych narzędzi lub przedstawić w raporcie. Przykład: nmap -sV -O -oA wynik_skanu 192.168.1.0/24 zapisze wynik skanowania całej podsieci zarówno jako tekst, XML, jak i grep.

Dlaczego to ma znaczenie?

Znajomość Nmapa i umiejętność wykorzystania go w pełni to absolutna podstawa pracy każdego inżyniera bezpieczeństwa i administratora sieci. Skanowanie portów to pierwszy krok w odkrywaniu potencjalnych słabych punktów – dla atakującego otwarty port to zaproszenie do dalszej eksploracji, a dla obrońcy – sygnał do upewnienia się, że dana usługa jest odpowiednio zabezpieczona lub że w ogóle powinna być dostępna. Każdy otwarty port to potencjalny cel ataku, dlatego tak ważne jest monitorowanie i ograniczanie dostępu do niepotrzebnych usług.

Regularne skanowanie własnej infrastruktury pozwala wejść w buty atakującego – zobaczyć naszą sieć tak, jak widzi ją ktoś z zewnątrz. Wyniki skanów wskazują, gdzie należy zaktualizować oprogramowanie, wyłączyć zbędną usługę, dołożyć firewall lub zmianę konfiguracji. Z kolei w testach penetracyjnych, Nmap stanowi fundament fazy rekonesansu – szybko dostarcza maksymalnie dużo informacji o celach.

Nmap, dzięki swojej popularności, jest też narzędziem weryfikującym konfigurację bezpieczeństwa. Jeśli Twój IDS nie wykrywa skanowania Nmapem – jest problem. Jeśli firewall przepuszcza pakiety fragmentowane albo daje się nabrać na -g 53 – to sygnał, że należy poprawić reguły. Odpalając różne tryby skanowania przeciwko własnej sieci, możesz zweryfikować skuteczność swoich zabezpieczeń (co zaleca sam autor Nmap).

Na koniec, parę rekomendacji odnośnie korzystania z Nmap w profesjonalny sposób:

  • Skanuj tylko za zgodą lub w swoim środowisku: Nmap to potężna broń – nie skanuj obcych sieci bez zezwolenia. Nieautoryzowane skanowanie może być nielegalne w wielu jurysdykcjach, traktowane jako próba ataku. Zawsze upewnij się, że masz uprawnienia do testowania danego zasobu.
  • Dokumentuj i wyciągaj wnioski: Zachowuj logi skanowań (np. w formacie XML) i sporządzaj listy otwartych portów/usług. Monitoruj zmiany w czasie – dziś port zamknięty, jutro otwarty? Może ktoś uruchomił nieautoryzowaną usługę.
  • Aktualizuj Nmap i bazę sygnatur: Projekt Nmap jest ciągle rozwijany – regularnie pojawiają się nowe skrypty NSE, uaktualniane sygnatury usług i OS. Świeża wersja zapewnia najlepszą skuteczność wykrywania.
  • Łącz Nmap z innymi narzędziami: Sam Nmap to dopiero początek. Wykorzystaj jego wyniki w skanerach podatności (np. import do Nessus/OpenVAS), użyj skryptów NSE do szybkich testów podatności, a dla pogłębionej analizy usług sięgnij po narzędzia specjalistyczne (np. nikto dla HTTP, smbclient dla SMB itp.). Nmap wskaże Ci drogę, co badać dalej.
  • Myśl nieszablonowo: Nmap daje ogromną swobodę – możesz skanować całe sieci, wybrane hosty, używać losowych odstępów, tunelować przez VPN, itp. W realnych testach trzeba często dostosować strategię skanowania do sytuacji (ograniczenia czasowe, adresowe, ryzyko wykrycia). Czasem lepiej skanować wolniej i po cichu, innym razem można iść na pełną szybkość. Doświadczenie z Nmapem pozwoli Ci dobrać właściwe podejście.

A wersja z GUI?

Dla większości użytkowników, nawet tych zaawansowanych, wystarczy nmap. Jeśli nie lubisz terminali, zawsze możesz zajrzeć do zenmap, opartej na GUI wersji nmapa.

Podsumowanie

Podsumowując, Nmap to szwajcarski scyzoryk w rękach pentestera i administratora. Pozwala zarówno ofensywnie znaleźć dziury w systemach, jak i defensywnie sprawdzać, czy nasza infrastruktura nie wystawia za dużo na świat. Poniżej szybka checklista korzystania z Nmap w praktyce:

  • Przygotowanie: Zainstaluj najnowszą wersję Nmap na swojej platformie (Linux, macOS, Windows). Upewnij się, że masz odpowiednie uprawnienia (root/Administrator) do pełnego skanowania.
  • Wybór celu: Określ zakres IP lub hosty do skanowania. Zacznij od małego zakresu, by nie generować zbyt dużego ruchu na raz.
  • Wykrywanie hostów: Wykonaj ping scan: nmap -sn <sieć> aby zobaczyć, które hosty są aktywne. Od razu wyklucz niedostępne adresy, oszczędzisz czas.
  • Skanowanie portów: Uruchom podstawowy skan portów TCP: nmap -sS -p- <cel> – przeskanuj wszystkie porty TCP, aby niczego nie przegapić. Dodaj -sU jeśli zależy Ci też na UDP (ewentualnie ogranicz liczbę portów UDP dla czasu).
  • Głębsza analiza usług: Ponów skan z kluczowymi opcjami: -sV -O -sC (lub -A agresywnie) na istotne hosty. Zdobądź informacje o wersjach usług, systemie operacyjnym, uruchom domyślne skrypty NSE by wykryć typowe problemy.
  • Zapisywanie wyników: Użyj -oA <prefix> by zapisać wyniki skanu (format normalny, XML, grep). Umożliwi to późniejszą analizę, raportowanie i porównanie z kolejnymi skanami.
  • Analiza raportu: Przejrzyj uważnie otwarte porty. Zadaj sobie pytania: Czy dana usługa powinna być dostępna? Czy wersja jest aktualna? Czy porty są właściwie filtrowane? Zanotuj znaleziska wymagające działania.
  • Dalsze akcje: Dla podejrzanych usług użyj skryptów NSE lub innych narzędzi (np. sprawdź podatności, spróbuj zalogować się jeśli to test). Dla każdej otwartej usługi, która nie powinna być otwarta – zaplanuj jej wyłączenie lub ograniczenie dostępu.
  • Testy zabezpieczeń: Wykonaj skany w różnych trybach (UDP, FIN, fragmentacja, decoy) przeciwko własnym zabezpieczeniom. Sprawdź, co przechodzi przez firewall, a co jest wykrywane. Upewnij się, że Twój IPS alarmuje na skan SYN/UDP.
  • Cykliczność: Ustal harmonogram regularnych skanów (np. co miesiąc) swojej infrastruktury. Zwłaszcza po większych zmianach (nowe serwery, otwarcie portu w firewallu) – skanuj, by nie pozostawić „otwartych drzwi”. Nmap może być zautomatyzowany w skryptach CI/CD lub systemach monitoringu bezpieczeństwa.

Nmap to narzędzie o ogromnych możliwościach – ten przewodnik pokrył zarówno fundamenty skanowania portów, jak i zaawansowane triki. Teraz wszystko w Twoich rękach: wykorzystaj tę wiedzę do zabezpieczenia swoich systemów i świadomego testowania sieci. Powodzenia w mapowaniu sieci!

Bibliografia

Jeden komentarz do “Kompletny Przewodnik Po Nmap – Od Skanowania Portów Po Zaawansowaną Analizę”

Możliwość komentowania została wyłączona.