Warning: Missing argument 2 for artykul(), called in /homez.143/epubzmnd/linuxpub/old/lib/druk.php on line 22 and defined in /homez.143/epubzmnd/linuxpub/old/lib/artykul.php on line 8
LinuxPub : Port Scanning : Dokumentacja, Wiadomości, Pomoc, Forum, Howto, Manual, Bezpieczeństwo Fragment strony http://linuxpub.pl/. Wydrukowano:23.05.2012 03:02
Powrót Powrót 
 
Wyślij znajomemu

Port Scanning - Wprowadzenie
Linux.com Security

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 Link do www.linuxpub.w.pl

"Jeżeli znasz swojego wroga i znasz siebie, nie musisz się bać o wynik 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, Sztuka wojny

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:

http://www.psionic.com/abacus/portsentry/
http://www.openwall.com/scanlogd/
http://www.snort.org/

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.


 


Do góry Do góry 
 
Powrót Powrót 
Wyślij znajomemu