Nmap

Sieć, terminal i Ty…

“Znajomość wroga i znajomość siebie to klucz do zwycięstwa w stu bitwach.” – Sun Tzu

Czym jest Nmap?

Nmap (Network Mapper) to darmowe, open-source’owe narzędzie do eksploracji sieci i audytu bezpieczeństwa.

Stworzone przez Gordona Lyona (Fyodor) w 1997 roku, do dziś pozostaje standardem w branży cyberbezpieczeństwa.

Możliwości Nmap:

Instalacja

sudo apt update
sudo apt install nmap
sudo dnf install nmap
sudo zypper install nmap
brew install nmap

tutaj można znaleźć więcej informacji o homebrew

- Pobierz instalator ze strony: https://nmap.org/download.html#windows - Uruchom instalator i wykonaj instalację zgodnie z kreatorem
nmap --version

Podstawowe skanowanie

Najprostsza forma skanowania - sprawdza 1000 najpopularniejszych portów TCP.
sudo nmap scanme.nmap.org

krótkie objaśnienie dla sudo nmap scanme.nmap.org

  • Host is up (0.24s latency): Oznacza, że host odpowiada na zapytania i jest aktywny w sieci. Czas opóźnienia (latency) wyniósł 0.24 sekundy.
  • Other addresses for scanme.nmap.org (not scanned): Adresy alternatywne (np. IPv6), które nie zostały przeskanowane, np. 2600:3c01::f03c:91ff:fe18:bb2f.
  • Not shown: 994 closed tcp ports (reset): Spośród typowych 1000 portów TCP na hoście, 994 porty są zamknięte i odpowiadają resetem pakietu TCP, dlatego nie są wyświetlane domyślnie (by wynik był czytelniejszy).
  • Tabela PORT STATE SERVICE: PORT — numer portu i protokół (tu TCP)
  • STATE — status portu:
    • open — port jest dostępny i nasłuchuje na połączenia (usługa działa)
    • filtered — nmap nie może określić czy port jest otwarty, ponieważ pakiety są blokowane przez firewall lub filtr i nie otrzymuje odpowiedzi
  • SERVICE — standardowa nazwa usługi przypisana do portu (wg IANA)
  • Szczegóły z przykładu:
    • 22/tcp open ssh: Port 22 jest otwarty i działa na nim usługa SSH (Secure Shell). Oznacza to, że można próbować połączyć się zdalnie przez SSH.
    • 42/tcp filtered nameserver: Port 42 jest filtrowany — prawdopodobnie firewall blokuje pakiety wysłane przez nmap, dlatego stan nie jest jednoznacznie określony.
    • 80/tcp open http: Port 80 jest otwarty, co oznacza działającą usługę HTTP (serwer www).
    • 593/tcp filtered http-rpc-epmap: Port 593 jest filtrowany.
    • 9929/tcp open nping-echo: Port 9929 otwarty, jest to usługa nping-echo (powiązana z narzędziem Nmap).
    • 31337/tcp open Elite: Port 31337 otwarty, usługa oznaczona jako „Elite”, często używany jako port testowy w celach edukacyjnych lub demonstracyjnych.`
nmap 192.168.1.0/24
nmap scanme.nmap.org 192.168.1.5 scanme.nmap.org0
nmap -iL targets.txt

Typy skanowania portów

Nmap oferuje różne techniki skanowania portów, które pozwalają dostosować analizę do celu, poziomu dyskrecji i potrzeb szybkiego wykrywania. Każdy typ skanu działa inaczej i daje różne rodzaje informacji, dlatego warto znać ich podstawy.

Domyślny i najpopularniejszy typ skanowania. Szybki i stosunkowo dyskretny.
sudo nmap -sS scanme.nmap.org

TCP SYN Scan (skan furtki, stealth scan) -sS

To najpopularniejszy i zalecany typ skanowania. Nmap wysyła pakiet SYN (część 3-stopniowego uścisku dłoni TCP), ale nie nawiązuje pełnego połączenia. Dzięki temu jest szybki i bardziej dyskretny, bo nie jest rejestrowany jako pełne połączenie.

Nie wymaga uprawnień root, ale jest bardziej widoczny w logach.
nmap -sT scanme.nmap.org

TCP Connect Scan -sT

Wykonuje pełne nawiązanie połączenia TCP. Jest mniej dyskretny i wolniejszy, ale przydatny, gdy nie mamy uprawnień do wykonywania surowych pakietów (np. jako zwykły użytkownik).

Skanowanie portów UDP - wolniejsze, ale konieczne dla pełnego obrazu.
sudo nmap -sU scanme.nmap.org

UDP Scan -sU

Skanuje porty UDP, które działają inaczej niż TCP i są często pomijane. Jest wolniejszy i mniej dokładny z powodu braku potwierdzeń ze strony protokołu UDP, ale bardzo ważny, aby wykryć wszystkie usługi.

Skanowanie TCP i UDP jednocześnie.
sudo nmap -sS -sU scanme.nmap.org

Inne specjalistyczne skany

  • Null Scan -sN: wysyła pakiety bez flag TCP:
    • Pakiet TCP wysyłany bez żadnych ustawionych flag (pole flag w nagłówku TCP jest równe 0).
    • Mechanizm: gdy pakiet bez flag trafia do zamkniętego portu, zgodnie z RFC 793 host powinien odpowiedzieć pakietem RST (reset).
    • Jeśli port jest otwarty, host nie odpowiada wcale.
    • Dlatego brak odpowiedzi oznacza port otwarty lub filtrowany (np. przez firewall).
    • Zaleta: jest to bardzo dyskretna metoda, ponieważ wiele systemów nie loguje takich nietypowych pakietów.
    • Wada: nie można rozróżnić portu otwartego od filtrowanego, bo w obu przypadkach brak odpowiedzi.
  • FIN Scan -sF: wysyła pakiety z flagą FIN
    • Pakiet TCP z ustawioną tylko flagą FIN (która normalnie służy do zamykania połączenia).
    • Działa podobnie do Null Scan: zamknięte porty odpowiadają pakietem RST, otwarte porty pozostają bez odpowiedzi.
    • Ta metoda jest często używana do omijania prostych zapór, które reagują tylko na pakiety SYN.
  • Xmas Scan -sX: wysyła pakiety z flagami FIN, PSH, URG (pakiet świeci jak choinka)
    • Pakiet TCP z ustawionymi flagami FIN, PSH i URG.
    • Nazwa pochodzi od tego, że ten pakiet „świeci się” jak choinka (ang. Xmas tree).
    • Działa na tej samej zasadzie co Null i FIN: brak odpowiedzi oznacza port otwarty/filtrowany, odpowiedź RST wskazuje port zamknięty.
    • Ta metoda bywa używana do wykrywania szczególnych konfiguracji firewalli i systemów.

Te techniki mogą pomóc w wykrywaniu portów, które próbują ukryć zapory sieciowe (firewalle).

Dobierając typ skanowania, łączymy szybkość, dyskrecję i szczegółowość. Najczęściej zaczynamy od TCP SYN, potem uzupełniamy UDP lub specjalistyczne metody, szczególnie w przypadkach audytów bezpieczeństwa.

  • Wszystkie trzy skany wykorzystują luki i różnice w implementacji TCP, aby dyskretnie wykrywać porty.

  • Skanowanie bazuje na braku odpowiedzi jako oznace portu otwartego lub chronionego.

  • Są skuteczne przeciwko niektórym firewallom i systemom, ale w nowoczesnych systemach mogą być blokowane lub monitorowane.

  • Wymagają uprawnień administratora, bo operują na pakietach na niższym poziomie.

Wykrywanie usług i systemów

nmap pozwala nam nie tylko zobaczyć, które porty są otwarte, ale także jaki dokładnie program lub usługa na nich działa, oraz jaki system operacyjny jest uruchomiony na skanowanym hoście.

Identyfikuje dokładne wersje uruchomionych usług.
nmap -sV scanme.nmap.org

Skanowanie wersji usług — nawiązuje interakcję z usługami, pobiera tzw. banery (informacje o wersji i typie usługi), co pomaga nam ustalić, np. czy serwer WWW to Apache 2.4.53 czy może nginx 1.18. Takie informacje są nieocenione przy ocenie podatności i planowaniu dalszych działań.

Próbuje określić system operacyjny na podstawie odpowiedzi sieciowych.
sudo nmap -O scanme.nmap.org

Rozpoznaje system operacyjny. Wysyła zestaw specjalnych pakietów i analizuje odpowiedzi z różnych warstw, porównując je z bazą znanych sygnatur. To pozwala z dużym prawdopodobieństwem wskazać, czy to jest Linux, Windows, macOS, a nawet konkretną wersję.

Łączy wykrywanie OS, wersji, skryptów i traceroute.
sudo nmap -sV -O scanme.nmap.org
lub
sudo nmap -A scanme.nmap.org

W praktyce, często łączymy te skany używając -sV -O lub opcji -A, która wykonuje analizę wersji, wykrywa system operacyjny, uruchamia skrypty NSE i trasa traceroute jednocześnie. To daje nam pełny obraz celu, choć trwa dłużej i jest bardziej „głośne” w sieci.

Dzięki tym technikom możemy przygotować dokładną mapę infrastruktury i lepiej ocenić ryzyka bezpieczeństwa. Pamiętajmy jednak, że niektóre systemy mogą ukrywać te informacje lub reagować na skanowanie, dlatego ważne jest testowanie różnych parametrów.

Zaawansowane techniki

Kilka przykładowych technik, które można wykorzystywać w różnych scenariuszach

nmap -p 22,80,443 scanme.nmap.org
nmap -p 1-1000 scanme.nmap.org
nmap -p- scanme.nmap.org
Skanuje tylko 100 najpopularniejszych portów.
nmap -F scanme.nmap.org
Kontrola szybkości skanowania (0-5, gdzie 0=najwolniejsze, 5=najszybsze).
nmap -T4 scanme.nmap.org
nmap -Pn scanme.nmap.org
nmap -f scanme.nmap.org
nmap --data-length 25 scanme.nmap.org

Nmap Scripting Engine (NSE)

NSE to potężny framework pozwalający na automatyzację zadań sieciowych. Zawiera setki gotowych skryptów do testowania bezpieczeństwa.

Dzięki skryptom można wykonać dokładniejsze testy bezpieczeństwa, wykrywać podatności, zbierać dodatkowe informacje o usługach, a nawet przeprowadzać proste ataki (np. brute force).

To moduł, który umożliwia automatyzację zaawansowanych testów bezpieczeństwa i zbierania informacji o sieci poprzez skrypty napisane w języku Lua.

Jak uruchomić skrypty?

  • Dołącz opcję –script z nazwą skryptu lub grupą skryptów.
  • Domyślnie można też użyć -sC, które uruchamia tzw. zestaw domyślnych, bezpiecznych skryptów.
nmap -sC scanme.nmap.org

Najłatwiej zacząć od opcji -sC, która uruchamia podstawowy zestaw bezpiecznych skryptów i daje szybki wgląd w usługi na hoście. Dalej mamy możliwość uruchamiania pojedynczych skryptów lub całych kategorii, np. vuln do wykrywania podatności, czy smb-os-discovery do szczegółowego rozpoznawania usług SMB.

nmap --script vuln scanme.nmap.org
nmap --script auth scanme.nmap.org
nmap --script discovery scanme.nmap.org
nmap --script http-enum scanme.nmap.org
nmap --script ssh-brute scanme.nmap.org
nmap --script-help all
nmap --script-help vuln

NSE to świetny sposób na rozbudowę naszych skanów, automatyzację i zaoszczędzenie czasu podczas audytów lub pentestów.

Do najważniejszych zalet można zaliczyć:

  • Różnorodność i modularność:

    NSE zawiera ponad tysiąc skryptów, podzielonych na kategorie:

    • auth — uwierzytelnianie i sprawdzanie haseł
    • broadcast — wykrywanie usług przez protokoły rozgłoszeniowe
    • default — standardowy zestaw skryptów na podstawową analizę
    • discovery — zbieranie informacji o sieci i usługach
    • dos — testy podatności na ataki typu denial-of-service
    • exploit — próby wykorzystania znanych luk
    • external — integracja z zewnętrznymi narzędziami i serwisami
    • fingerprint — detekcja charakterystycznych cech hosta
    • malware — wykrywanie znanego złośliwego oprogramowania
    • safe — skrypty bezpieczne dla produkcyjnych środowisk
    • intrusive — bardziej agresywne, mogące wywołać nieoczekiwane zachowania
  • Możliwość tworzenia własnych skryptów:

    NSE jest niezwykle elastyczne — użytkownicy mogą pisać własne skrypty w języku Lua, co pozwala na dostosowanie testów do konkretnych potrzeb, automatyzację powtarzalnych czynności i integrację nmap z niestandardowymi scenariuszami.

  • Parametry i konfiguracja:

    Skrypty NSE mogą przyjmować różne argumenty (–script-args), co pozwala dostosować ich działanie do specyficznych warunków, np. podać dane uwierzytelniające lub określić zakres testów.

  • Aktualizacje i społeczność:

    Skrypty NSE są stale rozwijane i aktualizowane przez społeczność. Regularne aktualizacje nmapa wprowadzają nowe skrypty i poprawiają istniejące, odpowiadając na rosnące zagrożenia i nowe typy usług.

Zapisywanie wyników

nmap -oN scan.txt scanme.nmap.org

- oN – zapis do pliku tekstowego (czytelny, łatwy do późniejszej analizy, np. -oN wynik.txt)

nmap -oX scan.xml scanme.nmap.org

- oX – zapis w formacie XML, co umożliwia późniejszą konwersję do HTML, czy też parsowanie przez skrypty lub narzędzia automatyczne

nmap -oG scan.gnmap scanme.nmap.org

- oG – zapis w formacie łatwym do manipulacji przez narzędzia typu grep, awk, sed (np. -oG wynik_grep.txt) ***Zapisuje do trzech formatów w jednym pliku bazowym wynik.***

nmap -oA scan scanme.nmap.org

- oA – zapis w trzech formatach jednocześnie: tekstowym, XML i grepable, co jest najbardziej uniwersalne (np. -oA wynik)

Automatyczne wznawianie i tworzenie raportów:

  • –resume — wznowienie przerwanego skanowania, jeśli wcześniej uruchomiono z tym parametrem.
  • –append-output — dodanie wyników do istniejącego pliku (np. w celu kolejnych etapów skanowania).
  • –stylesheet <ścieżka/URL> — konwersja wyników XML do HTML za pomocą własnych styli.
  • –no-stylesheet — wyłącza styli w plikach XML, co przydaje się np. podczas automatycznego parsowania.

Różne tryby i szczegóły:

  • -v – podnosi poziom raportowania, informuje o przebiegu skanowania
  • -d[poziom] – poziom debugowania (0-9)
  • -A – aktywuje wykrywanie OS, wersji usług, skryptów NSE
  • -6 – skan IPv6

Zapisywanie wyników jest kluczowe, aby mieć dokumentację swojego skanowania i móc później analizować rezultaty, raportować lub wznowić prace. Dzięki różnorodności formatów (tekst, XML, grepable) można dostosować raport do własnych potrzeb i automatyzacji.

Praktyczne przykłady

sudo nmap -sS -sU -T4 -A -v -PE -PP -PS80,443 -PA3389 -PU40125 -PY -g 53 --script "default or (discovery and safe)" scanme.nmap.org
nmap -T4 -F 192.168.1.0/24
nmap -sn 192.168.1.0/24
nmap -p 80,443 --script http-enum,http-headers,http-methods scanme.nmap.org

Aspekty prawne i etyczne

UWAGA: Skanowanie sieci bez zgody właściciela może być nielegalne!

Ta część jest niezwykle ważna, ponieważ nmap, choć jest potężnym narzędziem do eksploracji sieci i testów bezpieczeństwa, może być używany również w sposób nielegalny i nieetyczny. Dlatego chcę podkreślić kilka kluczowych zasad, których warto przestrzegać.

Zasady odpowiedzialnego użycia:

Nmap jest legalny i szeroko stosowany przez:

Podsumowując, świadomość aspektów prawnych i etycznych jest nieodzowną częścią pracy z narzędziami takimi jak nmap. Faktyczne korzyści dla bezpieczeństwa można osiągnąć wyłącznie, gdy działamy w granicach prawa i z poszanowaniem innych.

Przydatne zasoby

📚 Oficjalna dokumentacja

nmap.org/book

🔧 Nmap Scripting Engine

nmap.org/nsedoc

Podsumowanie

Nmap to absolutna podstawa w arsenale każdego specjalisty ds. bezpieczeństwa. Jego wszechstronność, moc i elastyczność sprawiają, że pozostaje narzędziem numer jeden do rekonesansu sieciowego od ponad 25 lat.

Kluczowe punkty do zapamiętania:

  • Zacznij od prostych skanów i stopniowo zwiększaj złożoność
  • Zawsze używaj -v (verbose) aby widzieć postęp skanowania
  • Zapisuj wyniki w różnych formatach dla późniejszej analizy
  • Eksperymentuj z NSE - to tam tkwi prawdziwa moc Nmap
  • Pamiętaj o aspektach prawnych i etycznych

Dzięki za poświęcony czas.

Tagi: nmap, security, network, pentesting, cybersecurity