Port Scanning - Wprowadzenie, Port Scanning - Wprowadzenie


Port Scanning - Wprowadzenie  

0x01 graphic

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:

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.



Wyszukiwarka