A Quick Port Scanning Tutorial
Jednym z moich celów przy tworzeniu Nmapa jest utrzymanie prostoty jego najczęstszych zastosowań, przy jednoczesnym zachowaniu elastyczności dla niestandardowych i zaawansowanych skanów. Zostało to osiągnięte za pomocą interfejsu wiersza poleceń, który oferuje dziesiątki opcji, ale wybiera rozsądne wartości domyślne, gdy nie są one określone. Nowicjusz może zacząć od polecenia tak prostego jak mapa <target>
.Tymczasem zaawansowani użytkownicy czasami określają tak wiele opcji, że ich linia terminala zawija się dookoła.
Podobna równowaga musi być osiągnięta z wyjściem polecenia. Najważniejsze wyniki powinny wyróżniać się nawet dla okazjonalnego użytkownika, który nie przeczytał nawet strony man. Jednak dane wyjściowe powinny być wystarczająco wyczerpujące i zwięzłe, aby pasowały profesjonalnym testerom penetracyjnym, którzy codziennie uruchamiają Nmapa na tysiącach maszyn. Użytkownicy wystarczająco inteligentni, aby przeczytać tę książkę lub kod źródłowy Nmapa, zyskują większą kontrolę nad skanerem i wgląd w to, co naprawdę oznaczają dane wyjściowe Nmapa.
Tutorial demonstruje kilka typowych scenariuszy skanowania portów Nmapa i wyjaśnia dane wyjściowe. Celem jest po prostu zapoznanie nowych użytkowników na tyle dobrze, aby zrozumieli resztę tego rozdziału.
Najprostszym poleceniem Nmapa jest po prostu nmap. Bardziej interesującym poleceniem jest nmap<target>
, które wykonuje następujące czynności:
-
Konwertuje
<target>
z nazwy hosta na adres IPv4 przy użyciu DNS. Jeśli zamiast nazwy podany jest adres IP, wyszukiwanie to jest pomijane. -
Wyszukuje hosta, domyślnie za pomocą pakietu ICMP echo request i pakietu TCP ACK na porcie 80, aby określić, czy jest on włączony i działa. Jeśli nie, Nmap zgłasza ten fakt i kończy pracę. Mogłem podać
-Pn
, aby pominąć ten test. Zobacz Rozdział 3, Wykrywanie hostów („Skanowanie ping”). -
Konwersja docelowego adresu IP z powrotem na nazwę przy użyciu zapytania reverse-DNS. Ze względu na sposób działania DNS nazwa odwrotna może nie być taka sama jak
<target>
podana w wierszu poleceń. To zapytanie można pominąć za pomocą opcji-n
w celu zwiększenia szybkości i wykrywalności. -
Uruchamia skanowanie portów TCP na najpopularniejszych 1000 portach wymienionych w
nmap-services
. Zazwyczaj używane jest skanowanie ukradkowe SYN, ale w przypadku nierootowanych użytkowników Uniksa, którym brakuje uprawnień niezbędnych do wysyłania nieprzetworzonych pakietów, zamiast tego stosowane jest skanowanie connect. -
Wypisuje wyniki na standardowe wyjście w normalnym formacie czytelnym dla człowieka i kończy pracę. Inne formaty wyjściowe i lokalizacje (pliki) mogą być określone, jak opisano w rozdziale 13, Formaty wyjściowe Nmapa. Przykład 4.2 wyświetla wyniki, gdy scanme.nmap.org jest użyte jako
<target>
.
Przykład 4.2. Proste skanowanie: nmap scanme.nmap.org
# Starting Nmap ( http://nmap.org )Nmap scan report for scanme.nmap.org (64.13.134.52)Not shown: 994 filtered portsPORT STATE SERVICE22/tcp open ssh25/tcp closed smtp53/tcp open domain70/tcp closed gopher80/tcp open http113/tcp closed authNmap done: 1 IP address (1 host up) scanned in 4.99 seconds
Pierwszy wiersz wyjściowy w przykładzie 4.2 podaje po prostu adres URL do pobrania Nmapa. Czas uruchomienia Nmapa oraz numer wersji również są zazwyczaj podawane, jednak w tej książce zostały one usunięte dla zachowania spójności i uniknięcia zawijania wierszy.
Kolejna linia podaje docelowy adres IP (IPv4 w tym przypadku) oraz odwrotną nazwę DNS (znaną również jako rekord PTR), jeśli jest ona dostępna. Nmap obiecuje pokazać „interesujące porty”, choć wszystkie skanowane porty są brane pod uwagę. Porty uznane za najbardziej interesujące, ponieważ są otwarte lub znajdują się w rzadko spotykanym stanie dla danego hosta, są wyszczególnione indywidualnie. Kiedy wiele portów znajduje się w stanie pojedynczo nie otwartym, są one traktowane jako stan domyślny i agregowane w pojedynczej linii, aby uniknąć rozcieńczania wyników tysiącami nieinteresujących wpisów. W tym przypadku Nmap odnotowuje, że 994 porty są filtrowane.
Następnie pojawia się tabela interesujących portów, która dostarcza wyników skanowania kluczy. Kolumny różnią się w zależności od użytych opcji, ale w tym przypadku zawierają numer portu i protokół, stan i protokół usługi dla każdego portu. Usługa tutaj jest tylko przypuszczeniem dokonanym przez wyszukanie portu w nmap-services
. Usługa byłaby wymieniona jako unknown
, gdyby któryś z portów nie miał nazwy zarejestrowanej w tym pliku. Trzy z tych portów są otwarte, a trzy zamknięte.
Na koniec Nmap raportuje kilka podstawowych statystyk czasowych, zanim zakończy pracę. Statystyki te obejmują liczbę określonych celów, liczbę celów, które skaner ping znalazł, oraz całkowity czas skanowania.
Pomimo że to proste polecenie jest często wszystkim, co jest potrzebne, zaawansowani użytkownicy często idą znacznie dalej. W przykładzie 4.3 skanowanie zostało zmodyfikowane za pomocą czterech opcji. -p0-
prosi Nmapa o przeskanowanie każdego możliwego portu TCP, -v
prosi Nmapa, aby był bardzo dokładny,-A
włącza agresywne testy, takie jak zdalne wykrywanie systemu operacyjnego, wykrywanie usług/wersji oraz Nmap Scripting Engine(NSE). Wreszcie, -T4
włącza bardziej agresywną politykę czasową, aby przyspieszyć skanowanie.
Przykład 4.3. Bardziej złożone: nmap -p0- -v -A -T4 scanme.nmap.org
# Starting Nmap ( http://nmap.org )Completed Ping Scan at 00:03, 0.01s elapsed (1 total hosts)Scanning scanme.nmap.org (64.13.134.52) Discovered open port 22/tcp on 64.13.134.52Discovered open port 53/tcp on 64.13.134.52Discovered open port 80/tcp on 64.13.134.52SYN Stealth Scan Timing: About 6.20% done; ETC: 00:11 (0:07:33 remaining)Completed SYN Stealth Scan at 00:10, 463.55s elapsed (65536 total ports)Completed Service scan at 00:10, 6.03s elapsed (3 services on 1 host)Initiating OS detection (try #1) against scanme.nmap.org (64.13.134.52)Initiating Traceroute at 00:1064.13.134.52: guessing hop distance at 9Completed SCRIPT ENGINE at 00:10, 4.04s elapsedHost scanme.nmap.org (64.13.134.52) appears to be up ... good.Nmap scan report for scanme.nmap.org (64.13.134.52)Not shown: 65530 filtered portsPORT STATE SERVICE VERSION22/tcp open ssh OpenSSH 4.3 (protocol 2.0)25/tcp closed smtp53/tcp open domain ISC BIND 9.3.470/tcp closed gopher80/tcp open http Apache httpd 2.2.2 ((Fedora))|_HTML title: Go ahead and ScanMe!113/tcp closed authDevice type: general purposeRunning: Linux 2.6.XOS details: Linux 2.6.20-1 (Fedora Core 5)Uptime guess: 2.457 days (since Thu Sep 18 13:13:24 2008)TCP Sequence Prediction: Difficulty=204 (Good luck!)IP ID Sequence Generation: All zerosTRACEROUTE (using port 80/tcp)HOP RTT ADDRESS9 10.36 metro0.sv.svcolo.com (208.185.168.173)10 10.29 scanme.nmap.org (64.13.134.52)Nmap done: 1 IP address (1 host up) scanned in 477.23 seconds Raw packets sent: 131432 (5.783MB) | Rcvd: 359 (14.964KB)
Nmap z pewnością dostarczyła żądanej dosadności w przykładzie 4.3! Na szczęście dodatkowe dane wyjściowe są łatwe do zrozumienia. Pierwsze 13 nowych linii to informacje o przebiegu pracy programu, pozwalające użytkownikowi dowiedzieć się, co się dzieje, gdy wpatruje się w terminal z nadzieją na dobrą wiadomość. To, co można uznać za dobrą wiadomość, zależy od tego, czy jest ona administratorem systemu, który musi naprawić problemy, pen-testerem, który potrzebuje informacji o problemach, czy też black-hat crackerem próbującym je wykorzystać. Około tuzina podobnych linii zostało usuniętych dla zachowania zwięzłości. Linijki „discovered open port” (odkryty otwarty port) informują na bieżąco o otwartych portach, dzięki czemu użytkownik może zacząć w nie walić jeszcze przed zakończeniem skanowania. Linijka „scan timing” podaje szacowany czas zakończenia skanowania, dzięki czemu użytkownik wie, czy powinien dalej gapić się w ekran, czy zjeść lunch. Ponieważ warunki sieciowe (opóźnienia, przeciążenia, szerokość pasma itp.) oraz zasady filtrowania pakietów różnią się tak bardzo, te same opcje skanowania mogą trwać 30 sekund w przypadku jednego hosta i 45 minut w przypadku innego. Aby uzyskać aktualny szacunkowy czas skanowania, wystarczy nacisnąć przyciskenter.
Tabela portów nie pokazuje żadnych nowych portów. Wszystkie dodatkowe skanowane porty są w stanie przefiltrowanym, zwiększając liczbę przefiltrowanych portów z 994 do 65 530. Chociaż nie ma nowych portów, zmieniły się wpisy. Nowa kolumna VERSION
zawiera nazwę aplikacji i szczegóły dotyczące wersji nasłuchującej usługi. Wynika to z wykrywania usług, jednej z funkcji włączanych za pomocą opcji -A
. Inną cechą wykrywania usług jest to, że wszystkie protokoły usług w kolumnie SERVICE
zostały faktycznie zweryfikowane. W poprzednim skanowaniu były one oparte na stosunkowo słabej heurystyce polegającej na wyszukiwaniu numerów portów nmap-services
. To wyszukiwanie w tabeli było tym razem poprawne, ale nie zawsze będzie.
Inną funkcją dodaną przez opcję -A
jest silnik NmapScripting Engine, który został szczegółowo omówiony w rozdziale 9, Nmap Scripting Engine. Jedynym pokazanym tutaj skryptem jest HTMLtitle
. Istnieją dziesiątki innych skryptów, ale żaden z nich nie znalazł użytecznych wyników dla tej maszyny. Wyniki tracertou zostały również dodane przez -A
. Opcja ta jest bardziej wydajna i ma większe możliwości niż większość programów traceroute, ponieważ sondy są wykonywane równolegle, a Nmap wykorzystuje wyniki skanowania do określenia korzystnego typu sondy (w tym przypadku są to pakiety TCP na port 80).
Większość pozostałych nowych linii pochodzi z wykrywania systemu operacyjnego (również włączonego przez -A
), co zostało szczegółowo omówione w rozdziale 8, Zdalne wykrywanie systemu operacyjnego. Ostatni wiersz pokazuje, że całe to ekstrainfo miało swoją cenę – skanowanie trwało prawie 100 razy dłużej niż w przykładzie 4.2, „Simple scan: nmap scanme.nmap.org” (477 sekund w porównaniu z 5).