Port Scanning - Wprowadzenie
Linux.com Security:
Port Scanning - Wprowadzenie
by Matt Michie
Thursday June 7th, 2001
Wersja orginalna:
http://www.linux.com/enhance/newsitem.phtml?aid=12424&sid=1&page=1
Tłumaczył: Robert Sobieski - 12.06.2001
Aktualna wersja tłumaczenia:www.linuxpub.w.pl
"Jeżeli znasz swojego wroga i znasz siebie, nie musisz się bać o wynik setki bitew. Jeżeli znasz siebie ale nie znasz wroga, z każdym zwycięstwem wygrywasz, możesz jednak ponieść porażkę. Jeżeli nie znasz ani wroga ani siebie, przegrasz każdą bitwę." -- Sun Tzu, The Art of War
Co to jest Port Scanning?
Port scanning jest techniką która umożliwia sprawdzenie systemu pod kątem otwartych "portów" TCP/IP. W języku laika, jeżeli porównamy adres IP do numeru telefonu, to port jest odpowiednikiem numeru wewnętrznego telefonu.
Dla przykładu, jeżeli chcę porozmawiać z Linusem Torvaldsem w pracy, muszę najpierw wybrać numer do Transmeta (jego firmy), a następnie łączę się z jego numerem wewnętrznym. W ten sposób, więcej niż jedna osoba może korzystać z tego samego numeru telefonu. Analogicznie, porty TCP/IP umożliwiają aby poprzez jeden adres IP można było obsłużyć wiele różnych połączeń.
Standard TCP/IP zezwala na dostęp do różnych portów w zakresie 1 - 65535. W Linuksie, porty poniżej 1024 wymagają "prawa roota" aby pogram mógł przyłączyć się do nich.
Część bardziej popularnych portów:
echo 7/tcp
discard 9/tcp
qotd 17/tcp #quote
ftp-data 20/tcp
ftp 21/tcp
ssh 22/tcp # SSH Remote Login Protocol
telnet 23/tcp
smtp 25/tcp #mail
time 37/tcp #timeserver
domain 53/tcp # name-domain server
gopher 70/tcp # Internet Gopher
finger 79/tcp
www 80/tcp # WorldWideWeb HTTP
www 80/udp # HyperText Transfer Protocol
pop3 110/tcp # POP version 3
sunrpc 111/tcp # RPC 4.0 portmapper TCP
auth 113/tcp #authentication tap ident
nntp 119/tcp # USENET News Transfer Protocol
ntp 123/udp # Network Time Protocol
imap2 143/tcp # Interim Mail Access Proto v2
snmp 161/udp # Simple Net Mgmt Proto
irc 194/tcp # Internet Relay Chat
irc 194/udp
ldap 389/tcp # Lightweight Directory Access Protocol
https 443/tcp # Secure HTTP
mysql 3306/tcp # MySQL
ircd 6667/udp # Internet Relay Chat
webcache 8080/tcp # WWW caching service
Bardziej pełną listę standardowych portów znajdziecie w /etc/services.
Program telnet może być użyty do podłączenia do tych portów. Na przykład pisząc:
telnet www.yahoo.com 80
Po wydaniu polecenia zobaczymy:
Connected to www.yahoo.akadns.net.
Escape character is '^]'.
Napisz:
GET / [return][return]
Serwer web odpowie wysyłając kilka linii HTML. Normalna przeglądarka web powinna zinterpretować ten kod HTML i wyświetlić poprawnie grafikę i tekst.
Program do skanowania portów, działa w podobny sposób. Próbuje podłączyć się do określonych portów i wykryć który jest "otwarty" i czy usługa na tym porcie odpowiada, tak jak serwer web odpowiedział w naszym przykładzie.
Najprostszy (chociaż bardzo czasochłonnym) sposób to telnetowanie się do każdego portu na wybranym hostcie zaczynając od 0 i kończąc na 65535, notując który port zezwala na połączenie.
Kontynuując analogię z numerami telefonicznymi, to dzwoniąc do Transmeta i wybierając kolejno wewnętrzne numer, pozwoli nam określić który jest używany a który nie.
Jednak komputery idealnie nadają się do automatyzacji takich zadań i tego powinniśmy od nich oczekiwać. Sprytni programiści mogą napisać skrypty lub programy które wykonają za nich całą robotę.
Czy skaner portów jest nam potrzebny?
Port scanning jest ważnym narzędziem umożliwiającym wykrycie które usługi na naszym komputerze są aktywne. Domyślne instalacje Linuksa często pozostawiają wiele niepotrzebnych usług aktywnych, co nie wpływa pozytywnie na bezpieczeństwo systemu.
Aby upewnić się jakie usługi mamy uruchomione możemy przeskanować porty własnego systemu. Port scanning jest również dobrą techniką do testowania poprawności reguł firewall.
Port scanning jest bardzo ważnym, pierwszym krokiem który pozwoli poznać nam nasz system. Jeżeli nie wiemy jakie usługi pracują w na naszym komputerze, nie jest możliwe aby poprawnie zabezpieczyć się przed złośliwymi crackerami. To bardzo ważne aby zaznajomić się z programami przeznaczonymi do skanowania portów, gdyż często dokładnie tych samych narzędzi używają "wrogowie". Crackerzy, często używają skanera portów aby wykryć czy system ma uruchomione usługi które są podatne na exploity.
Zawansowane narzędzia z serii skanerów portów potrafią nawet zezwolić atakującemu wykryć jaki system operacyjny jest uruchomiony, czy nawet numer wersji kernela!
Jakie programy do skanowania portów są dostępne? Poniżej znajduje się mały przykład programów dostępnych pod Linuksa znalezionych na serwerze Freshmeat:
cpscan
DPS
EscAniA
exscan
gservicescan
ipps
just another port scanner
localscan
multiscan
mnps
ndiff
Network Superscanner
nmap
nmapfe
nskan
oscano
portscanphp
php distributed portscanner
portspy
pzilla
QTPortFrawl
scanner
UNF Distributed Portscanner
zaerscan
Jak używać takich programów?
Po pierwsze powinniśmy być świadomi tego że, skanowanie systemu jeżeli nie należy on do nas lub nie jesteśmy jego administratorem może to być niezgodne z prawem, a już na pewno bardzo niegrzeczne. Nigdy nie skanuj innych systemów poprzez Internet bez zezwolenia. To tak jakbyś obchodził sąsiadów i próbował otwierać wszystkie drzwi które nie są zamknięte. Zależnie od rodzaju skanowania, może to być uznane za atak typu Denial of Service. Po prostu tego nie rób.
Wśród przedstawionych programów, najobszerniejszy i szeroko stosowany jest nmap (Network Mapper). Infoworld wyraził się o nmap w następujący sposób "jeżeli twoim celem jest poznanie swojej sieci z odległości 40,000-stóp, to narzędzia dla Windows przeznaczone do port scanningu będą wystarczające. Ale jeżeli chcesz poważnie zainteresować się bezpieczeństwem swojej sieci i znaleźć wszystkie dziury w systemie , musisz poświęcić trochę czasu na instalację Linuksa i zacząć używać nmap'a."
Jednym z celów autora nmap'a było wyeliminowanie wielu rodzajów skanerów z jego warsztatu i zastąpienie go jednym. Dlatego, nmap obsługuje prawie każdą technikę port scanningu i TCP/IP fingerprinting. Nmap umożliwia przeskanowanie całej podsieci tak dokładnie jak pojedynczego hosta. Złośliwe osoby czasami używają zawansowanych opcji nmap'a aby ukryć skanowanie hosta poprzez internet. Kiedy poznasz lepiej te zagadnienia, dobrym pomysłem jest wypróbowanie niektórych z tych opcji na swoim systemie aby zobaczyć efekty i ustalić czy nasze zabezpieczenia są w stanie wykryć skanowanie tego typu.
Po pierwsze, pobierz program nmap z http://www.insecure.org/nmap/. Na stronie są źródła, binaria i pakiety, jeden z nich powinien pracować w dystrybucji, której używasz. Nmap jest również dostępny dla większości innych systemów uniksowych.
Po instalacji nmap'a, uruchomimy skaner na wszystkie nasze porty. Wykonamy to następującym poleceniem:
$ nmap localhost -p 1-65535
Przykładowe wyjście:
Starting nmap V. 2.53 by fyodor@insecure.org (www.insecure.org/nmap/)
Interesting ports on takauji (127.0.0.1):
(The 65531 ports scanned but not shown below are in state: closed)
Port State Service
111/tcp open sunrpc
113/tcp open auth
515/tcp open printer
6000/tcp open X11
Nmap run completed -- 1 IP address (1 host up) scanned in 6 seconds
Powyżej, wynik skaonwania nmap'em pokazał cztery otwarte porty, podany jest numer portu i nazwa usługi standardowo pracującej na tym porcie. Choćby nawet to był standardowy port, to nie przeszkadza uruchomić na tym porcie dowolnego programu. W rzeczywistości, jeżeli do systemu dokonano włamania, back-door może być umieszczony na którymś ze standardowych portów aby zamaskować go przed identyfikacją takim narzędziem jak nmap. Innymi słowy - kolumna z nazwami usług nie powinna być traktowana jako pewna informacja, a jedynie pomoc.
Kolumna statusu (state) może przybierać trzy różne wartości: open, filtered lub unfiltered. Open jest wyświetlany kiedy nmap ma dostęp do tego portu, filtered kiedy port jest dostępny poprzez reguły firewalla , a unfiltered lub closed kiedy usługa nie jest dostępna na tym porcie. Domyślnie zamknięte (closed) porty nie są wyświetlane.
Jeżeli skanujemy jakiegoś hosta poprzez wolną sieć, dobrym pomysłem może okazać się szybkie skanowanie - "fast" - które polega na łączeniu się tylko na standardowe porty, które zostaną znalezione w /etc/services. To znacznie zredukuje liczbę skanowanych portów które zostaną sprawdzone według ważności.
Na przykład:
$ nmap -F localhost -vv
Starting nmap V. 2.53 by fyodor@insecure.org (www.insecure.org/nmap/)
No tcp,udp, or ICMP scantype specified, assuming vanilla
tcp connect() scan.
Use -sP if you really don't want to portscan (and just
want to see what hosts are up).
Host takauji (127.0.0.1) appears to be up ... good.
Initiating TCP connect() scan against takauji (127.0.0.1)
Adding TCP port 111 (state open).
Adding TCP port 6000 (state open).
Adding TCP port 113 (state open).
Adding TCP port 515 (state open).
The TCP connect scan took 0 seconds to scan 1062 ports.
Interesting ports on takauji (127.0.0.1):
(The 1058 ports scanned but not shown below are in state: closed)
Port State Service
111/tcp open sunrpc
113/tcp open auth
515/tcp open printer
6000/tcp open X11
Nmap run completed -- 1 IP address (1 host up) scanned in 0 seconds
Opcja -vv przełącza wyjście w tryb verbose, czyli pełnej informacji, Co może pomóc przy wolnych połączeniach. Tryb verbose umożliwia uzyskanie raportu podczas gdy nmap przechodzi poprzez różne porty.
Jeżeli chcemy wykryć jaki OS jest uruchomiony na hoście, musimy użyć opcji -O jak poniżej (musisz być rootem aby skorzystać z fingerprinting):
# nmap -F -O localhost
Starting nmap V. 2.53 by fyodor@insecure.org (www.insecure.org/nmap/)
[SNIP]
TCP Sequence Prediction: Class=random positive increments
Difficulty=1749463 (Good luck!)
Remote operating system guess: Linux 2.1.122 - 2.2.14
Inny przykład:
# nmap -F -O godai
Starting nmap V. 2.53 by fyodor@insecure.org (www.insecure.org/nmap/)
Interesting ports on godai (192.168.22.22):
(The 1058 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
113/tcp open auth
TCP Sequence Prediction: Class=random positive increments
Difficulty=42674 (Worthy challenge)
Remote operating system guess: OpenBSD 2.6
TCP/IP fingerprint na podstawie różnicy sekwencji TCP, próbuje najlepiej ustalić rodzaj systemu operacyjnego. Kevin Mitnick używał tej techniki w 1994 na słabych stosach TCP/IP aby włamać się do komputera Tsutomu Shimomura's. (http://www.tao.ca/fire/bos/0037.html).
Bardziej losowa sekwencja jest trudniejsza do odgadnięcia wskutek tego jest bezpieczniejsza.
Inną opcją którą powinieneś znać jest ustawienie szybkości skanowania. Bez wątpienia stary system operacyjny mógłby zostać uszkodzony, jeżeli skanowanie przebiegałoby zbyt szybko.
Nmap has the following timings: -T
[Paranoid|Sneaky|Polite|Normal|Aggressive|Insane]
Warto zapoznać się ze stronami podręcznika systemowego aby znaleźć najlepsze możliwe dostosowanie charakterystyki skanowania do swoich potrzeb. Strony man są napisane na tyle dobrze, że poświęcając troszeczkę czasu możemy poznać bardzo zawansowane opcje programu. A eksperymenty na localhost'cie pozwalają poznać możliwości nmap'a.
Jakich narzędzi można używać do wykrycia skanowania portów?
Pod podanymi adresami znaleźć można kilka dobrych narzędzi do wykrywania i zwalczania skanowania naszego systemu. Instalacja i konfiguracja tych narzędzi zostanie opisana w przyszłych artykułach. Poniżej znajdziecie kilka adresów:
Podsumowanie
Port scanning jest jedną z podstawowych technik z zakresu bezpieczeństwa. Nie jest ważna tylko dlatego że pozwala poznać własne uruchomione usługi, ale uzmysławia jak potencjalny intruz może wykorzystać ją przeciwko nam. W większości wypadków skanowanie systemu jest pierwszym krokiem przy włamaniu do systemu. Posiadanie wiedzy na ten temat daje administratorowi Linuksa więcej szans na wcześniejsze udaremnienie ataku oraz umożliwia w znacznym stopniu zapobieganie im.
Matt Michie napisał dla Linux.com.