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:
|

Zależności czasowe i wydajnośćZawsze najważniejszym priorytetem przy tworzeniu Nmapa była
wysoka wydajność. Domyślne skanowanie (nmap
<nazwahosta>) hosta w sieci lokalnej
zajmuje tylko jedną piątą sekundy. Jest to zadowalający czas, jednak przy
skanowaniu setek tysięcy adresów sumaryczny czas staje się bardzo duży.
Dodatkowo niektóre typy skanowania, takie jak skanowanie UDP i detekcja
wersji także wpływają negatywnie na czas wykonania, podobnie jak konfiguracja
systemów zaporowych, na przykład limitująca ilość pakietów. Nmap posiada
możliwości równoległego skanowania i odpowiednie zaawansowane algorytmy
przyspieszające skanowanie, a użytkownik posiada ogromne możliwości
wpływania na to jak są one wykorzystywane. Zaawansowani użytkownicy
uważnie przeglądający komendy Nmapa, nakazują mu dostarczanie tylko
istotnych informacji zgodnie z przyjętymi wymaganiami i założeniami
czasowymi. Techniki przyspieszające skanowanie dotyczą ograniczenia wykonywania
mało istotnych testów i częstej zmiany wersji Nmapa na najnowszą (zmiany
dotyczące przyszpieszenia pracy są wprowadzane dosyć często). Optymalizacja
parametrów dotyczących szybkości skanowania również ma duży wpływ i
została opisana poniżej. -
--min-hostgroup <ilość_hostów>;
--max-hostgroup
<numhosts> (Zmiana ilości hostów w grupie) Nmap posiada możliwość skanowania portów i wersji na wielu hostach
równocześnie. Jest to realizowane poprzez dzielenie listy adresów docelowych
na grupy, które są następnie kolejno skanowane. Ogólnie skanowanie większych
grup jest bardziej efektywne. Wadą tego rozwiązania jest opóźnienie w podawaniu
wyników testów do czasu przeskanowania całej grupy. Przykładowo, jeśli Nmap
rozpoczął skanowanie w grupach po 50 adresów, żadne wyniki nie zostaną
wyświetlone (poza informacjami podawanymi przez -v) do czasu zakończenia
skanowania pierwszych 50 adresów. Domyślnie Nmap stosuje rozwiązanie kompromisowe. Rozpoczyna z grupą o
rozmiarze 5, co pozwala szybko wyświetlić pierwsze wyniki, a następnie
stopniowo powiększa rozmiar grupy aż do maksymalnie 1024. Dokładne
wykorzystywane rozmiary grup są uzależnione od podania dodatkowych opcji.
Dla uzyskania większej efektywności Nmap używa większych grup dla skanowań UDP
oraz przy skanowaniach TCP dotyczących zaledwie kilku portów. Jeśli maksymalny rozmiar grupy został określony za pomocą opcji
--max-hostgroup, Nmap nigdy nie przekroczy tego limitu.
Analogicznie podanie minimalnego rozmiaru za pomocą
--min-hostgroup wymusi stosowanie grup o przynajmniej takim
rozmiarze. Nmap może użyć mniejszej grupy tylko w przypadku, kiedy ilość
adresów do przeskanowania jest mniejsza niż założone minimum. Obie wymienione
opcje pozwalają na utrzymywanie rozmiaru grupy w podanym przedziale, jednak
jest to rzadko potrzebne. Podstawowym zastosowaniem tych opcji jest podawanie dużego minimalnego
rozmiaru grupy tak, żeby pełne skanowanie odbywało się szybciej. Często
stosowaną wartością jest 256, co pozwala na skanowanie w kawałkach o rozmiarze
klasy C. Przy skanowaniu wielu portów, stosowanie większych wartości
minimalnych przeważnie nie poprawi wydajności. W przypadku skanowania małych
ilości portów pomocne może być stosowanie grup o rozmiarze 2048 lub nawet
większym. -
--min-parallelism <ilość_prób>;
--max-parallelism
<ilość_prób> (Kontrola współbierzności testów) Opcja ta kontroluje ilość jednoczesnych dla danej grupy adresów
testów i jest wykorzystywana podczas wykrywania hostów i skanowania portów.
Domyślnie Nmap dobiera idealną ilość testów w zależności od parametrów sieci.
Jeśli jakiś pakiet zostanie zagubiony, zwalnia i zaczyna wykonywać
mniejszą ilość testów równolegle. Nmap próbuje powoli przyspieszać, jeśli nie
są gubione pakiety. Podane opcje pozwalają na określenie minimalnego i
maksymalnego limitu ilości jednocześnie wykonywanych testów. Normalnie ilość
ta może spaść do 1 przy złych warunkach sieciowych lub wzrosnąć do kilkuset
w idealnych warunkach. Najczęściej wykorzystywana jest opcja
--min-parallelism do ustawiania wyższej niż 1 wartości przy
skanowaniu sieci przy złych warunkach. Zmiana tej opcji może być ryzykowna,
ponieważ ustawienie zbyt wysokiej wartości może sie odbić na poprawności testów.
Wykorzystanie jej także pociąga za sobą zmniejszenie możliwości Nmapa w
zakresie dynamicznego dostosowywania się do warunków panujących w sieci.
Ustalenie minimalnej ilości na 10 może być sensowne, jednak powinno być
stosowane w ostateczności. Opcja --max-parallelism jest czasami wykorzystywana do
zmuszenia Nmapa do nie przeprowadzania więcej niż jednego testu równolegle, co
może być użyteczne w połączeniu z opcją--scan-delay (opisaną
dalej). -
--min_rtt_timeout <czas>,
--max-rtt-timeout <czas>,
--initial-rtt-timeout
<czas> (Kontrola czasu oczekiwania na wykonanie testu) Nmap posiada mechanizm kontrolujący czas oczekiwania na wynik testu,
zanim nie zostanie on ponowiony. Czas oczekiwania jest zależny od czasu
wykonania poprzednich testów. Jeśli opóźnienia w sieci okażą sie duże i
zmienne, czas oczekiwania może zwiększyć sie do kilku sekund. Początkowa
wartość jest dosyć konserwatywna (wysoka) i może taka pozostać w przypadku
skanowania nie odpowiadających hostów. Opcje przyjmują wartości w milisekundach, ale można dodać litery
s, m
lub h odnoszące się odpowiednio do sekund,
minut i godzin. Podanie niższych wartości --max-rtt-timeout i
--initial-rtt-timeout niż domyślne, może znacząco skrócić czas
skanowania. Jest to głównie widoczne w przypadku skanowania bez wykorzystywania
pinga (-P0) oraz przy skanowaniu dobrze filtrowanych sieci.
Nie można również przesadzać w drugą stronę, ustawienie zbyt małego czasu
może przekładać sie na dłuższy czas skanowania przez niepotrzebne retransmisje
spowodowane upływem czasu oczekiwania na odpowiedź. Jeśli wszystkie skanowane hosty są w sieci lokalnej, sensownym agresywnym
ustawieniem opcje --max-rtt-timeout jest 100 milisekund.
Jeśli skanowany ma być inny segment, warto sprawdzić czasy odpowiedzi dla
protokołu ICMP - za pomocą narzędzia ping lub innego pozwalającego na
definiowanie pakietów mogących omijać system zaporowy, takiego jak hping2.
Interesującą nas wielkością jest maksymalny czas odpowiedzi dla 10 lub więcej
pakietów. Uzyskany czas może zostać po podwojeniu wykorzystany jako wartość dla
--initial-rtt-timeout, a po pomnożeniu przez trzy lub cztery
dla --max-rtt-timeout. Nie jest zalecane ustawianie
maksymalnego rtt poniżej 100ms, niezależnie od czasów pingowania, podobnie
większego niż 1000ms. --min_rtt_timeout jest rzadko wykorzystywaną funkcją,
która może być przydatna jeśli komunikacja sieciowa jest tak niepewna, że nawet
domyślne ustawienia Nmapa są zbyt agresywne. Jako że Nmap redukuje czas
oczekiwania tylko do momentu w którym sieć zacznie działać poprawnie, potrzeba
dodatkowego wydłużania czasu oczekiwania nie jest normalna i powinna zostać
zaraportowana jako błąd na liście dyskusyjnej nmap-dev.
-
--max-retries <ilość> (Maksymalna ilość prób ponawiania skanowania portów)
Kiedy Nmap nie otrzyma odpowiedzi na skanowanie portu, może to oznaczać,
że port ten jest filtrowany. Możliwe jest jednak także, że pakiet testu lub
odpowiedzi po prostu zaginął w sieci, albo że host limituje ilość możliwych
odpowiedzi w jednostce czasu i właśnie tymczasowo je zablokował. Większą
pewność uzyskuje się dzieki powtarzaniu testu w przedstawionych przypadkach.
Jeśli Nmap wykryje problemy z komunikacją sieciową, może ponawiać próbę badania
portu wiele razy, zanim sie podda. Z jednej strony zwiększa to dokładność
testów, z drugiej wydłuża czas ich wykonania. Jeśli wydajność jest krytycznym
aspektem, skanowania mogą zostać przyspieszone poprzez limitowanie dozwolonej
ilości retransmisji. Ustawienie opcji --max-retries 0 ,
całkowicie wyłączającej powtarzanie testów jest wykorzystywane sporadycznie.
Domyślnie (bez stosowania opcji -T) dozwolone jest
maksymalnie 10 powtórzeń. Jeśli sieć działa prawidłowo i skanowane hosty nie
limitują ilości pakietów, Nmap zwykle wykorzystuje jedną retransmisję. Dlatego też
większość skanowań nie zostanie dotkniętych zmianą wartości
--max-retries na trzy. Stosowanie tak niskich wartości pozwala
na znaczne przyspieszenie skanowania hostów limitujących ilość odpowiedzi.
Jeśli Nmap będzie zbyt szybko poddawał się przy skanowaniu portów, część
informacji nie zostanie zebrana, dlatego być może warto skorzystać z opcji
przerywającej test --host-timeout, która dotyczy całego hosta,
a nie tylko pojedynczych testów. -
--host-timeout <czas> (Pomijaj powolne hosty)
Skanowanie niektórych hostów trwa bardzo długo.
Może to być spowodowane niezbyt wydajnym sprzętem sieciowym lub
oprogramowaniem, limitowaniem ilości pakietów czy restrykcjami systemu
zaporowego. Niewielki procent hostów może zabrać większość czasu przeznaczonego
na skanowanie. Czasami najlepszym rozwiązaniem jest ich pominięcie z
wykorzystaniem opcji --host-timeout z parametrem oznaczającym
ilość milisekund, jakie jesteśmy w stanie poświęcić na czekanie per host.
Parametr można również podawać w sekundach, minutach lub godzinach dodając
odpowiednio litery s,
m lub h.
Często dodaję 30m żeby mieć pewność, że Nmap
nie będzie skanował jednego hosta dłużej niż pół godziny. Trzeba pamiętać, że
Nmap może równolegle w tym czasie skanować inne hosty, więc nie bedzie to czas
kompletnie stracony. Host który przekroczy czas jest pomijany i nie są dla
niego wyświetlane wyniki takie jak lista portów, system operacyjny czy wersje
usług. -
--scan-delay <czas>;
--max_scan-delay
<czas> (Ustaw opóźnienie pomiędzy testami) Opcja pozwala na narzucenie czasu w milisekundach jaki musi minąć
pomiędzy kolejnymi testami dla badanego hosta. Podobnie jak przy innych opcjach
pozwalających na określanie czasu, można dodać
s,
m lub h
do parametru do określenia go odpowiednio w sekundach, minutach lub godzinach.
Opcja ta jest szczególnie użyteczna w przypadku systemów limitujących ilość
pakietów. Solaris zwykle odpowiada na skanowanie UDP poprzez wysyłanie tylko
jednego pakietu ICMP na sekundę, więc wysyłanie zapytań szybciej jest zupełnie
nie potrzebne. Wykorzystanie opcji --scan-delay 1s pozwala na
wymuszenie odpowiedniej prędkości skanowania. Normalnie Nmap stara się
wykryć jaka powinna być optymalna prędkość skanowania dla każdego hosta, jednak
ręczne dodanie takiej opcji nie zaszkodzi, o ile znana jest optymalna prędkość. Kiedy Nmap zwiększa czas opóźnienia, dostosowując go do
limitu ilości otrzymywanych odpowiedzi, czas skanowania dramatycznie rośnie.
Opcja --max_scan-delay pozwala na ustawienie maksymalnego
limitu do którego może być automatycznie zwiększane opóźnienie. Ustawienie
tej wartości zbyt nisko może spowodować niepotrzebne retransmisje i
pominięcie niektórych portów w przypadku hostów ściśle limitujących ilość
pakietów. Inną możliwością wykorzystanie opcji --scan-delay
jest omijanie systemów detekcji intruzów (IDS/IPS). -
-T
<Paranoid|Sneaky|Polite|Normal|Aggressive|Insane>
(Ustawnienie szablonu zależności czasowych skanowania)
Opisane wcześniej opcje do zmiany zależności czasowych pozwalają na
efektywne i precyzyjne sterowanie skanowaniem, jednak wiele osób uzna je za
niepotrzebnie skomplikowane. Dodatkowo w wielu przypadkach dobranie
odpowiedniej kombinacji parametrów może zająć więcej czasu, niż samo
skanowanie. Z tego powodu Nmap oferuje prostrze rozwiązanie w postaci
sześciu szablonów. Ich wybór jest możliwy poprzez wykorzystanie opcji
-T z parametrem oznaczającym numer lub nazwę szablonu.
Dostępne szablony to paranoid (0, paranoidalny), sneaky (1, podstępny),
polite (2, grzeczny), normal (3, normalny), aggressive (4, agresywny) i
insane (5, szalony). Pierwsze dwa wykorzystywane są do omijania systemów
IDS. Szablon polite spowalnia skanowanie powodując mniejsze obciążenie łącza
i zmniejszające wykorzystanie zasobów w badanym systemie. Domyślnie używany
jest normal, więc podawanie -T3 nic nie zmieni. Szablon
agresywny przyspiesza skanowanie przy założeniu że korzystamy z szybkiej i
nie przeciążonej sieci. Insane zakłada wykorzystanie ponad przeciętnie szybkiej
sieci lub jeśli chcemy uzyskać dużą szybkość kosztem możliwej utraty
dokładności. Szablony pozwalają poinformować Nmapa jak dużej agresywności od niego
oczekujemy przy jednoczesnym pozwoleniu mu na automatyczne dobieranie
pozostałych parametrów czasowych. Wprowadzane też są inne drobne modyfikacje,
do których nie istnieją odzielne opcje. Na przykład, -T4
zabrania wzrostu dynamicznego opóźnienia skanowania powyżej 10ms dla portów
TCP, a w przypadku -T5 powyżej 5ms. Szablony mogą być używane
w połączeniu z innymi opcjami do ustawiania zależności czasowych o ile zostaną
umieszczone przed pozostałymi opcjami w linii poleceń
(inaczej domyślne ustawienia z szablonu zastąpią ustawione innymi opcjami).
Większość dzisiejszych sieci może być z powodzeniem skanowana z wykorzystaniem
opcji -T4. Jeśli używasz łącza szerokopasmowego lub sieci ethernet, rekomendowane
jest stałe używanie szablonu -T4. Wiele osób lubi
-T5, lecz jest ono jak dla mnie trochę za agresywne. Ludzie
czasami używają -T2 ponieważ myślą, że zminiejszają szanse
na zawieszenie serwera lub uważają się za bardziej kulturalnych z założenia,
często nie zdając sobie sprawy z tego, jak wolne jest -T Polite
- ich skanowania może trwać dziesięć razy dłużej. Zawieszanie hostów i problemy
z pasmem są rzadko spotykane przy domyślym -T3, i ta opcja jest
polecana dla ostrożnych skanujących. Nie włączanie detekcji wersji jest daleko
bardziej efektywnym sposobem na unikanie problemów. Podczas gdy opcje -T0 i -T1 mogą być
użyteczne przy unikaniu wykrycia przez systemy IDS, są niesamowicie powolne
przy skanowaniu setek adresów lub portów. Przy tak długich skanowaniach możesz
raczej chcieć ustawić ręcznie poszczególne zależności czasowe, niż polegać na
predefiniowanych wartościach z -T0 i -T1.
Głównym efektem działania T0 jest ograniczenie ilości
równolegle przeprowadzanych testów do jednego i wprowadzenie odstępu pomiędzy
kolejnymi testami o długości 5 minut. Opcje T1 i
T2 są podobne, ale czakają już tylko odpowiednio 15 i 0.4
sekundy pomiędzy testami. T3 jest domyślnym ustawieniem Nmapa
włączając w to zrównoleglanie testów. T4 jest odpowiednikiem
podania opcji --max-rtt-timeout 1250 --initial-rtt-timeout 500
--max-retries 6 i ustawienia maksymalnego opóźnienia przy skanowaniu
TCP na 10 milisekund. Opcja T5 jest alternatywą dla
--max-rtt-timeout 300 --min_rtt_timeout 50 --initial-rtt-timeout 250
--max-retries 2 --host-timeout 900000 oraz ustawienia maksymalnego
czasu opóźnienia dla skanowania TCP na 5ms.
|
|