Nmap Security Scanner
Intro
Ref Guide
Install Guide
Download
Changelog
Book
Docs
Security Lists
Nmap Hackers
Nmap Dev
Bugtraq
Full Disclosure
Pen Test
Basics
More
Security Tools
Pass crackers
Sniffers
Vuln Scanners
Web scanners
Wireless
Exploitation
Packet crafters
More
Site News
Site Search:
Exploit World
Advertising
About/Contact
Credits
Sponsors:
|

Jednym z pierwszych kroków rekonesansu sieciowego jest redukcja
(czasami ogromnych) zakresów adresów IP do listy aktywnych lub
interesujących hostów. Skanowanie każdego portu na każdym adresie
IP jest wolne i przeważnie niepotrzebne. Oczywiście to co czyni host
interesującym głównie zależy od celu skanowania. Administratorzy sieci
mogą być zainteresowani hostami udostępniającymi określoną usługę podczas
gdy audytorzy bezpieczeństwa mogą chcieć przyjrzeć się każdemu urządzeniu
posiadającemu adres IP. Administratorowi może wystarczać wykorzystanie
pinga ICMP do zlokalizowania hostów w jego wewnętrznej sieci, podczas gdy
audytor przeprowadzający zewnętrzne testy penetracyjne może wykorzystywać
dziesiątki różnych testów do ominięcia reguł filtrowania systemu
zaporowego. Ponieważ niezbędne są różne metody wykrywania hostów, Nmap oferuje
szeroki wachlarz opcji pozwalających na wybieranie wykorzystywanych technik.
Wykrywanie hostów często jest zwane skanowaniem Ping, jednak wykracza
daleko poza proste wysyłanie zapytania ICMP echo request znanego z
programu ping.
Użytkownik może pominąć etap wykrywania poprzez wykorzystanie opcji skanowania
listy (-sL), poprzez wyłączenie pingowania
(-P0) lub wykorzystania różnych kombinacji wieloportowego
badania za pomocą testów TCP SYN/ACK, UDP, i ICMP. Celem tych testów jest
uzyskanie informacji o adresach IP, które są aktualnie dostępne (są
wykorzystywane przez urządzenie sieciowe lub komputer). W przypadku wielu
sieci tylko mały procent wykorzystywanych adresów IP jest równocześnie
aktywnych. Jest to szczególnie powszechne w sieciach prywatnych zgodnych
z adresacją RFC1918, takich jak 10.0.0.0/8. Ta sieć zawiera 16 milionów
adresów IP, ale widziałem nie raz firmy wykorzystujące niecały tysiąc z
nich. Opcja wykrywania hostów pozwala na szybkie wykrycie rzeczywiście
wykorzystywanych adresów IP z całej dostępnej puli. Jeśli nie podano opcji wybierającej metodę wykrywania hostów, Nmap
wysyła pakiety TCP ACK na port 80 i zapytanie ICMP Echo Request query
do każdego badanego adresu. Wyjątkiem od tej reguły jest skanowanie
ARP przeprowadzane dla aktualnego segmentu sieci ethernet. W
przypadku uruchamiania przez nie uprzywilejowanych użytkowników
systemów UNIX, wysyłany jest pakiet SYN zamiast ACK z wykorzystaniem
wywołania systemowego connect().
Ustawienia domyślne są tożsame z opcjami -PA -PE.
Takie wykrywanie hostów jest najczęściej wystarczające podczas
skanowania sieci lokalnej, jednak podczas audytów bezpieczeństwa
zalecane jest wykorzystywanie bardziej zaawansowanych opcji. Opcje -P* (które wybierają sposób pingowania) mogą
być łączone. Możesz poprawic dokładność wykrywania hostów za systemem
zaporowym poprzez stosowanie wielu różnych portów/flag TCP i typów ICMP.
Zwracam uwagę, że wykrywanie hostów ARP (-PR) jest
z założenia włączane podczas testów sieci lokalnej w ramach tego samego
segmentu, nawet jeśli podasz inne opcje -P*, ponieważ
praktycznie zawsze tak jest szybciej i efektywniej. Opcje kontroli wykrywania hostów. -
-sL (Lista skanowania) Lista skanowania jest okrojoną funkcją wykrywania hostów, która
po prostu wyświetla wszystkie adresy z podanych zakresów skanowania i
nie wysyła żadnych pakietów do nich. Domyślnie Nmap wykonuje
odwrotne zapytania DNS o badane adresy aby poznać ich nazwy. Często
niespodzianką jest jak dużo informacji mogą udzielić już same nazwy
hostów. Na przykład
fw.chi.playboy.com jest systemem
zaporowym w biurze Playboy Enterprises w Chicago. Na końcu Nmap
podaje także całkowitą liczbę adresów IP. Lista skanowania jest
dobrym sposobem na sprawdzenie i uzyskanie pewności, że prawidłowo
podano zakres skanowania. Jeśli nie rozpoznajesz nazw domen na
uzyskanej liście, warto sprawdzić podany zakres, co pozwala unikąć
niepotrzebnego skanowania sieci nieznanej firmy. Ideą tej opcji jest wyświetlanie prostej listy adresów, z tego
powodu bardziej zaawansowana funkcjonalność taka jak skanowanie
portów, wykrywanie systemu operacyjnego czy pingowanie nie może być
łączone z tą metodą. Jeśli chcesz wyłączyć pingowanie podczas
skanowania, poczytaj na ten temat w opisie opcji
-P0. -
-sP (Skanowanie Ping) Ta opcja nakazuje Nmapowi przeprowadzać tylko
skanowanie typu Ping (wykrywanie hostów), a wynikiem jej
działania jest lista aktywnych hostów. Dodatkowe testy (takie jak
skanowanie portów lub wykrywanie systemu operacyjnego) nie są
przeprowadzane. Metoda ta idzie krok dalej niż lista skanowania i
może być wykorzystywana w podobnym celu. Pozwala na przeprowadzenie
delikatnego rekonesansu bez zwracania zbytniej uwagi. Posiadanie
wiedzy na temat ilości aktywnych hostów jest bardziej wartościowe
dla atakujących niż sama lista adresów zawierająca adres IP i
nazwę hosta. Również administratorzy systemów często korzystają z tej
opcji. Pozwala ona na łatwe i szybkie określenie liczby hostów w
sieci lub monitorowanie dostępności serwerów. Opcja ta często jest
nazywna Ping Sweep i daje bardziej wiarygodne wyniki niż pingowanie
adresu broadcast, ponieważ niektóre adresy mogą na niego nie
odpowiedzieć. Domyślnie opcja -sP wysyła pakiety ICMP echo
request i pakiety TCP na port 80. W przypadku wykonywania z konta
nie uprzywilejowanego użytkownika wysyłane są pakiety SYN (z
wykorzystaniem funkcji systemowej
connect()) na port 80 badanego
hosta. Jeśli uprzywilejowany użytkownik próbuje przeskanować adresy
w lokalnej sieci ethernet, wykorzystywane są zapytania ARP
(-PR), chyba że dodano opcję
--send-ip.
Dla większej wygody opcja -sP może być łączona w
dowolny sposób z innymi metodami wykrywania hostów (opcje
-P*, nie dotyczy -P0).
Jeśli wybrano któryś z typów testów i numer portu, nie są
wykorzystywne domyślne ustawienia (ACK i echo request).
Wykorzystywanie tych opcji jest szczególnie zalecane, jeśli
pomiędzy badanym systemem, a hostem na którym jest uruchomiony
Nmap jest system zaporowy, inaczej niektóre (lub wszystkie) hosty
nie zostaną wykryte. -
-P0 (Bez pinga)
Ta opcja wyłącza całkowicie wykrywanie hostów. Normalnie
Nmap próbuje wykryć aktywne adresy przed rozpoczęciem właściwego
skanowania. Domyślnie Nmap przeprowadza tylko testy takie jak
skanowanie portów, wykrywanie wersji i systemu operacyjnego tylko
dla hostów, które zostały wcześniej wykryte jako aktywne. Wyłączenie
wykrywania hostów za pomocą opcji -P0 powoduje,
że Nmap próbuje wykonać wszystkie żadane typy skanowania na
każdym podanym adresie IP. Jeśli więc jako cel
w linii pleceń podano klasę B (/16), wszystkie 65,536 adresów
zostanie przeskanowane. Drugi znak w opcji -P0 jest
zerem, a nie literą O. Wykrywanie hostów jest pomijane jak przy
wyświetlaniu listy skanowania, jednak zamiast zatrzymać się i
wyświetlić listę, Nmap kontynuuje i przeprowadza założone testy
na każym adresie IP, tak jak by był wykryty jako aktywny. -
-PS [listaportów] (TCP SYN Ping) Opcja ta powoduje wysyłanie pustych pakietów TCP z ustawioną
flagą SYN. Domyślnie port docelowy to 80 (konfigurowalne przed
kompilacją za pomocą stałej DEFAULT_TCP_PROBE_PORT w pliku
nmap.h), ale inny port może być
podany jako parametr. Możliwe jest również podanie listy portów,
odzielonych przecinkami
(np. -PS22,23,25,80,113,1050,35000), co spowoduje
przeprowadzenie testów na wszystkich podanych portach równolegle.
Ustawiona flaga SYN sugeruje badanemu systemowi, że próbujesz
nawiązać z nim połączenie. Normalnie zdalny port będzie zamknięty
i zostanie wysłany z powrotem pakiet z flagą RST (reset). Jeśli
port będzie otwarty, host będzie próbował wykonać drugi krok z
trójstopniowego procesu nawiązywania połączenia odpowiadając za
pomocą pakietu TCP SYN/ACK. Nmap zamiast wysłać pakiet ACK, który by
pomyślnie zakończył nawiązywanie połączenia, w tym momencie przerwie
połączenie wysyłając pakiet RST. Pakiet RST jest wysyłany przez
kernel systemu na którym pracuje Nmap automatycznie, w odpowiedzi
na niespodziwany pakiet SYN/ACK, a nie przez samego Nmapa. Nmap nie zwraca uwagi czy port jest otwarty czy zamknięty.
W zależności od uzyskanej omówionej wcześniej odpowiedzi (RST lub
SYN/ACK) host jest uznawany za dostępny. W systemach UNIX, tylko użytkownik uprzywilejowany -
root - może wysyłać niskopoziomowe
pakiety raw TCP. W przypadku użytkowników nie posiadających
odpowiednich uprawnień wykorzystywane jest obejście w postaci
wykorzystania funkcji systemowej connect() do wykonania połączeń ze
wskazanymi portami. Jeśli connect() zwróci poprawność wykonania
operacji lub błąd odmowy połączenia ECONNREFUSED, stos TCP musiał
otrzymać pakiet z flagami SYN/ACK lub RST i host jest uznawany za
dostępny. Jeśli próba nawiązania połączenia została przerwana po
przekroczeniu maksymalnego czasu oczekiwania, host jest oznaczany
jako niedostępny. To obejście jest również wykorzystywane dla
protokołu IPv6, ponieważ wysyłanie niskopoziomowych pakietów raw TCP
nie jest jeszcze dostępne w Nmapie. -
-PA [lista portów] (TCP ACK Ping) Metoda TCP ACK ping jest dosyć podobna do powyżej opisanego
SYN ping. Różnica, jak łatwo zgadnąć, polega na wykorzystaniu flagi
ACK zamiast SYN. Flaga ACK jest wykorzystywana do potwierdzania
otrzymania danych za pomocą utworzonego wcześniej połączenia TCP,
jednak w tym wypadku połączenie takie nie istnieje. Z tego powodu
badany system powinien zawsze odpowiedzieć pakietem z flagą RST,
świadczącą o nie isnieniu takiego połączenia. Opcja -PA, tak jak SYN, używa portu numer 80 i
również może przyjmować listę portów jako argument (w takim samym
formacie). Jeśli program został uruchomiony przez
nie uprzywilejowanego użytkownika lub badany jest adres IPv6,
wykorzystywane jest opisane wcześniej obejście za pomocą connect().
Obejście to nie jest idealne, ponieważ funkcja connect() wysyła
pakiet SYN zamiast oczekiwanego ACK. Powodem udostępniania zarówno metody SYN jak i ACK jest
zwiększenie szansy na ominięcie systemu zaporowego. Wielu
administratorów konfiguruje routery i proste systemy zaporowe tak,
żeby blokowały przychodzące pakiety SYN, poza przychodzącymi do
publicznych serwerów takich jak WWW czy pocztowych. Zabezpiecza to
przed przychodzeniem innych połączeń przy jednoczesnym nie
zakłucaniu pozostałej transmisji wychodzącej do Internetu. Takie
bezstanowe (non-stateful) rozwiązanie zajmuje mało zasobów systemu
zaporowego/routera i jest szeroko wspierane przez filtry sprzętowe i
programowe. Linuxowy firewall Netfilter/iptables dla wygody posiada
opcję --syn, która implementuje takie właśnie
bezstanowe filtrowanie. W przypadku takiego systemu zaporowego testy
wykorzystujące metodę SYN ping (-PS) zostaną
prawdopodobnie zablokowane w przypadku zamkniętych portów. W tym
przypadku metoda ACK pozwoli na obejście tych zabezpieczeń. Innym popularnym typem jest firewall wykorzystujący stany
(stateful) do blokowania niechcianych pakietów. Taka funkcjonalność
jest najczęściej spotykana w wysokiej klasy systemach zaporowych, które
stają się z roku na rok coraz popularniejsze. Linuxowy
Netfilter/iptables posiada opcję --state, która
kategoryzuje pakiety na podstawie stanu połączenia. Metoda SYN
prawdopodobnie będzie działała poprawnie dla tego typu systemów,
ale już pakiet z ACK zostanie rozpoznany jako nieprawidłowy i
zostanie zablokowany. Rozwiązaniem tego problemu jest wykorzystywanie
jednocześnie obu metod SYN i ACK poprzez podanie parametrów
-PS i -PA. -
-PU [listaportów] (UDP Ping) Kolejną metodą wykrywania hostów jest UDP ping, który wysyła
puste (o ile nie wykorzystano opcji --data-length)
pakiety UDP na wskazane porty. Lista portów jest podawana w takim
samym formacie jak dla wcześniej opisanych opcji -PS
i -PA. Jeśli nie podano numerów portów, domyślnie
używany jest port 32338. Port ten może być zmieniony przed
kompilacją poprzez zmianę stałej DEFAULT_UDP_PROBE_PORT w pliku
nmap.h. Wybór tak mało
popularnego portu został podyktowany chęcią uniknięcia wysyłania
pakietów do otwartych portów, co w przypadku tego testu nie
przyniosło by oczekiwanego efektu. W przypakdu kiedy port jest zamknięty na badaniej maszynie, w
odpowiedzi na pakiet UDP powinien zostać odesłany pakiet ICMP
port unreachable oznaczający brak możliwości komunikacji z wybranym
portem. Po otrzymaniu takiej odpowiedzi Nmap oznacza host jako
dostępny. Inne typy odpowiedzi ICMP, takie jak host/sieć niedostępna
czy przekroczony czas życia TTL oznaczają, że badany host nie jest
dostępny, podobnie interpretowany jest brak odpowiedzi. Jeśli badany
port jest otwarty, większość typowych usług zignoruje pusty pakiet i
nie zostanie wysłana żadna informacja zwrotna. Właśnie dla tego
domyślnie testowanym portem jest 31338, który jest bardzo rzadko
wykorzystywany. Wiele usług, takich jak chargen, odpowie na pusty
pakiet co spowoduje, że Nmap uzna host za dostępny. Główną zaletą tego typu skanowania jest fakt, że omija systemy
zaporowe i filtry skupiające sie tylko na TCP. Przykładowo, miałem
kiedyś szerokopasmowy router bezprzewodowy Linksys BEFW11S4.
Zewnętrzny interfejs tego urządzenia filtrował domyślnie wszystkie
porty TCP, za to testy UDP zwracały odpowiedzi ICMP port unreachable,
co ujawnia istnienie urządzenia. -
-PE;
-PP;
-PM (Typy ICMP Ping) Dodatkowo poza opisanymi wcześniej metodami wykrywania hostów
TCP i UDP, Nmap może wysyłać standardowe pakiety ICMP znane z
typowego programu ping.
Nmap wysyła pakiety ICMP typu 8 (echo request) do badanego hosta i
oczekuje typu 0 (echo reply) w odpowiedzi. Niestety wiele hostów i
systemów zaporowych blokuje tego typu pakiety, zamiast odpowiadać
prawidłowo i zgodnie z
RFC
1122. Z tego powodu skanowania nieznanych hostów w internecie
za pomocą tej metody przeważnie nie są wiarygodne. Jednakże
administratorzy systemów monitorujący wewnętrzne sieci mogą z
powodzeniem efektywnie wykorzystywać tą metodę. Takie wykorzystanie
zapytań ICMP echo request jest możliwe za pomocą opcji
-PE. Zapytanie echo request jest standardowym zapytaniem ICMP ping,
jednak Nmap nie poprzestaje na tym. Standard ICMP
(RFC
792) opisuje także zapytania timestamp request, information
request, i address mask request o kodach odpowiednio 13, 15 i 17.
Podczas kiedy założonym efektem działania tych zapytań jest uzyskanie
informacji typu maska sieci czy aktualny czas, mogą być one
wykorzystane do wykrywania aktywności hostów. System który odpowiada,
jest uznawany za aktywny. Nmap nie obsługuje zapytań information
request, jako że nie są one często spotykane. RFC 1122 zaleca, że
“host NIE POWINIEN obsługiwać tych zapytań”.
Zapytania timestamp i address mask mogą być wysyłane z wykorzystaniem
opcji odpowiednio -PP i -PM.
Odpowiedzi timestamp reply (ICMP kod 14) lub address mask reply
(kod 18) ujawniają aktywność hosta. Te dwa zapytania mogą być
pomocne, kiedy administrator specyficznie blokuje zapytania
echo request zapominając przy tym blokować inne typy ICMP, które
mogą być wykorzystane w tym samym celu. -
-PR (ARP Ping) Jednym z najczęściej spotykanych scenariuszy wykorzystania
Nmapa jest skanowanie sieci lokalnej ethernet. W większości sieci
LAN, w szczególności wykorzystujących adresację prywatną zalecaną
przez RFC1918, większość adresów IP nie jest wykorzystywana. Kiedy
Nmap próbuje wysłać pakiet raw IP taki jak ICMP echo
request, by poprawnie zaadresować ramkę ethernet system operacyjny
musi określić (ARP) docelowy adres sprzętowy korespondujący z
docelowym adresem IP.
Takie zachowanie jest często powolne i problematyczne, ponieważ
systemy operacyjne nie zostały napisane z uwzględnieniem potrzeby
wysyłania milionów zapytań ARP o niedostępne hosty w krótkim
czasie. Skanowanie ARP wykorzystuje zoptymalizowany algorytm Nmapa
do wysyłania zapytań ARP. Po otrzymaniu odpowiedzi Nmap nie musi
się nawet martwić o oparte na IP pakiety ping, ponieważ już wie,
że host jest aktywny. Takie zachowanie pozwala na dużo szybsze
i bardziej wiarygodne skanowanie. Z tego powodu zachowanie takie
jest domyślne podczas skanowania sieci, którą Nmap wykryje jako sieć
lokalną należącą do tego samego segmentu. Nawet jeśli zostaną podane
inne typy skanowania ping (takie jak -PE lub
-PS), Nmap używa ARP zamiast nich do wykrywaia
hostów w lokalnej sieci ethernet. Jeśli nie chcesz używać ARP do
skanowania, dodaj opcję --send-ip. -
-n (Wyłącz zapytania DNS)
Nakazuje Nmapowi nigdy nie używać zapytań
odrotnych do serwerów DNS o nazwy przypisane do adresów IP. Jako że
zapytania DNS są najczęściej długo trwają, opcja ta przyspiesza
pracę. -
-R (Wymuś zapytania DNS)
Nakazuje Nmapowi zawsze wykonywać
odwrotne zapytania do serwera DNS o nazwy dla skanowanych adresów
IP. Domyślnie zapytania są wykonywane tylko dla aktywnych
hostów. -
--system_dns (Używaj systemowego DNS)
Domyślnie Nmap określa nazwy dla adresów IP poprzez wysyłanie
zapytań bezpośrednio do serwerów DNS skonfigurowanych w systemie, o
ile są dostępne. Wiele zapytań (często dziesiątki) jest wykonywanych
równolegle dla uzyskania wiekszej szybkości. Dodanie tej opcji
wymusza wykorzystywanie rozwiązywania nazw za
pośrednictwem systemu operacyjnego (każdorazowo o pojedyncze IP za
pomocą funkcji getnameinfo()). Ta opcja jest wolniejsza i jest
użyteczna tylko w sporadycznych przypadkach, chyba że w Nmapie jest
błąd w kodzie DNS - prosze się z nami skontaktować w tym przypadku.
W przypadku skanowania sieci IPv6, rozwiązywanie nazw jest zawsze
wykonywane z wykorzystaniem systemu operacyjnego. -
--dns_servers <server1[,server2],...>
(Serwery do wykonywania zapytań DNS)
Domyślnie Nmap próbuje odczytać serwery DNS wpisane do pliku
resolv.conf (UNIX) lub rejestru (Win32). Alternatywnie, możesz użyć
tej opcji do podania własnych serwerów. Opcja ta nie jest
uwzględniana, jeśli użyto również opcji --system_dns
lub skanowane są adresy IPv6. Używanie wielu serwerów DNS jest często
dużo szybsze, niż tylko jednego.
|
|