Detekcja usług i wersji
Przy skanowaniu zdalnego systemu, Nmap może wykryć otwarte porty
takie jak 25/tcp, 80/tcp czy 53/udp. Wykorzystując bazę danych zawierającą
około 2,200 popularnych usług, znajdującą się w pliku
nmap-services
, Nmap odczyta
przypuszczalne nazwy usług dla wykrytych portów - odpowiednio serwer
pocztowy (SMTP), serwer WWW (HTTP) i serwer nazw (DNS). Takie działanie
jest zwykle poprawne, większość aplikacji słuchających na porcie 25, to
rzeczywiście serwery pocztowe. Jednakże, niech Twoja ocena bezpieczeństwa
niepolega na tych podpowiedziach! Ludzie mogą i często umieszczają usługi
na dziwnych portach.
Nawet jeśli Nmap sie nie myli i hipotetyczny serwer z przykładu powyżej udostępnia usługi SMTP, HTTP i DNS, nie jest to duża ilość informacji na temat tych usług. Przeprowadzając testy bezpieczeństwa (lub zwykłą inwentaryzację zasobów) swojej firmy lub klienta, potrzeba uzyskać dokładniejsze informacje na temat usług: jaka aplikacja i w jakiej wersji jest zainstalowana na serwerze SMTP czy DNS. Posiadanie tych informacji w znaczący sposób wpływa na możliwość ustalenia podatności danej aplikacji. Detekcja wersji pozwala na uzyskanie takiej informacji.
Po tym jak zostaną wykryte za pomocą innych technik skanowania
dostępne usługi TCP i UDP, detekcja wersji odpytuje porty w celu określenia
dalszych szczegółów na temat aplikacji. Baza danych
nmap-service-probes
zawiera opisy
wielu usług i próbuje dopasować je do uzyskanych informacji. Nmap stara się
najpierw określić protokół wykorzystywany przez usługę (np. ftp, ssh,
telnet, http), następnie nazwę aplikacji (np. ISC Bind, Apache httpd,
Solaris telnetd), wersję usługi, nazwę hosta, typ urządzenia (np. drukarka,
router), rodzinę systemów operacyjnych (np. Windows, Linux) i czasami
uzyskuje dodatkowe informacje (takie jak czy X serwer przyjmuje połączenia,
obsługiwane wersje protokołu SSH czy nazwę użytkownika KaZaA). Oczywiście
większość usług nie dostarczy wszystkich tych informacji. Jeśli Nmap został
skompilowany z OpenSSL, będzie potrafił łączyć się z serwerami SSL i
uzyskiwać informacje od usług ukrytych za szyfrowaną warstwą. Kiedy zostaną
wykryte usługi RPC, odpowiedni skaner (-sR
) zostanie
automatycznie uruchomiony do ustalenia oprogramowania i wersji RPC.
Z powodu specyfiki UDP, po zakończeniu skanowania niektóre porty pozostają
w stanie otwarty|filtrowany
, jako że ten
typ skanowania nie potrafi określić, czy port jest otwarty czy filtrowany.
Skanowanie wersji spróbuje uzyskać odpowiedź od takiego portu (tak jak to
robi przy otwartych portach) i jeśli to się uda, zmieni stan na otwarty.
Porty TCP w stanie otwarty|filtrowany
są
traktowane w ten sam sposób. Należy zwrócić uwagę, że opcja
-A
poza innymi rzeczami włącza wykrywanie wersji. Dodatkowa
dokumentacja na temat działania detekcji wersji jest dostępna pod adresem
https://nmap.org/vscan/
.
Jeśli Nmap otrzyma odpowiedź, ale nie jest w stanie dopasować jej do żadnej znanej usługi, wyświetli specjalny odcisk palca (fingerprint) usługi wraz z adresem URL, pod którym można go następnie wysłać wraz ze stosownym opisem, jeśli jesteśmy pewni jakiej usłudze odpowiada. Proszę poświęcić te kilka minut na wysłanie informacji o nieznanych usługach, a będą mogli z tego skorzystać również inni użytkownicy Nmapa. Dzięki temu sposobowi wysyłania Nmap rozpoznaje około 3,000 odcisków dla ponad 350 protokołów usług, takich jak smtp, ftp, http itp.
Detekcja wersji jest włączana i kontrolowana następującymi opcjami:
-
-sV
(Detekcja wersji usług) Włącza detekcję wersji usług, opisaną powyżej. Alternatywnie można użyć opcji
-A
do jednoczesnego włączenia detekcji wersji usług i systemu operacyjnego.-
--allports
(Nie pomijaj żadnych portów przy detekcji wersji) Domyslnie, skanowanie wersji Nmapa pomija port TCP 9100, ponieważ niektóre drukarki po prostu drukują wszystko, co zostanie przysłane na ten port, powodując wydruk setek stron z zapytaniami HTTP, binarnymi zapytaniami SSL itp. Takie zachowanie może zostać wyłączone poprzez modyfikację lub usunięcie dyrektywy
Exclude
w plikunmap-service-probes
, lub poprzez dodanie opcji--allports
, wymuszającej skanowanie wszystkich portów niezależnie od dyrektywyExclude
.-
--version-intensity <poziom>
(Ustaw poziom skanowania wersji) Podczas przeprowadzania skanowania wersji (
-sV
), Nmap przeprowadza serię testów, przy czym każdy z nich ma przypisany swój poziom pomiędzy 1 a 9. Niskie poziomy działają poprawnie w stosunku do najpopularniejszych usług, wysokie numery obejmują mało popularne. Poziom skanowania określa które testy zostaną wykonane. Czym wyższy poziom, tym większa szansa na prawidłowe rozpoznanie mało popularnych usług. Domyśly poziom to 7. Jeśli test zostanie powiązany z wykrytą usługą z plikunmap-service-probes
, określoną dyrektywąports
, zostanie on wykonany niezależnie od ustalonego poziomu wykrywania wersji. Zachowanie takie ma na celu zawsze poprawne wykrywanie domyślnych usług na otwartych portach, wykrywanie serwera DNS na porcie 53, SSL na porcie 443 itp.-
--version-light
(Włącz tryb delikatny) Jest wygodniejszym odpowiednikiem ustalającym wartość
--version-intensity 2
. Opcja ta pozwala na znaczne przyspieszenie wykrywania wersji, kosztem dokładności.-
--version-all
(Użyj wszystkich testów) Odpowiednik opcji
--version-intensity 9
, powodujący wykonanie wszystkich możliwych testów na każdym porcie.-
--version-trace
(Śledzenie aktywności skanowania wersji) Opcja włącza opcje śledzenia błędów podczas wykrywania wersji, powodując wyświetlanie dodatkowych informacji na temat prowadzonych działań. Opcja ta jest częścią większej
--packet-trace
.-
-sR
(Skanowanie RPC) Metoda ta działa w połączeniu z różnymi metodami skanowania portów Nmapa. Na wszystkie wykryte wcześniej porty są wysyłane komendy NULL SunRPC i za ich pomocą sprawdzane jest, czy dany port należy do usług RPC. Jeśli tak, identyfikowana jest aplikacja i jej wersja. Opcja pobiera takie same informacje jak komenda rpcinfo -p, nawet jeśli host jest chroniony za pomocą systemu zaporowego (lub TCP wrapperów). Hosty pośrednie zombie nie są obsługiwane przy tym trybie skanowania. Opcja jest automatycznie aktywowana jako część wykrywania wersji usług (
-sV
). Jako że detekcja wersji jest daleko bardziej uniwersalna, opcja-sR
jest wykorzystywana sporadycznie.