Każdy administrator sieci zdaje sobie sprawę z niebezpieczeństw czyhających na jego dane w Internecie. Na długiej liście zagrożeń obok wirusów, koni trojańskich, spamu itp. znajdują się również bezpośrednie ataki hakerów. Tylko dogłębne poznanie metod ataków stosowanych przez hakerów, pozwoli na zastosowanie odpowiednich zabezpieczeń. Pierwszym etapem działania hakera jest rekonesans sztuka zbierania informacji o celu. Rekonesans może być najbardziej pracochłonnym elementem ataku, jednak prawidłowo przeprowadzony pozwoli agresorom na poznanie pełnego profilu zabezpieczeń celu. W tym artykule omówię tylko fragment tego bardzo szerokiego tematu sk anowanie portów. Cele skanowania portów wykrycie aktywnych usług TCP i UDP wykrycie typu systemu operacyjnego celu wykrycie konkretnych aplikacji lub wersji danych usług Rodzaje skanowania Zanim opiszę konkretne narzędzia, przypomnę dostępne techniki skanowania portów. Większość z tych technik jest dostępna w doskonałym narzędziu nmap, którego autorem jest Fyodor < // fyodor@insecure.org // Ten adres e-mail jest ukrywany przed spamerami, włącz obsługę JavaScript w przeglądarce, by go zobaczyć // >. - połączenie TCP (TCP connect scan) najbardziej podstawowa forma skanowania TCP; polega na połączeniu z wybranym portem i przeprowadzeniu pełnego trójstronnego powitania (SYN, SYN/ACK i ACK); jeżeli port nasłuchuje połączenie powiedzie się, w przeciwnym razie port nie jest dostępny; metoda ta jest łatwa do wykrycia ponieważ w logach celu znajdować się będzie wiele informacji o błędach spowodowanych przez połączenia z usługami, które są następnie odrazu przerywane; W celu połączenia TCP nie potrzebne są uprawnienia root'a. - TCP SYN ta technika jest często nazywana skanowaniem półotwartym (half-open scanning) ponieważ nie jest nawiązywane pełne połączenie TCP, lecz do wybranego portu przesyłany jest pakiet SYN tak jak w przypadku prawdziwego połączenia i następuje oczekiwanie na odpowiedź; Jeśli port odpowie sygnałem SYN/ACK to oznacza, że port nasłuchuje; natomiast odpowiedź RST/ACK oznacza zazwyczaj, że port nie nasłuchuje; Komputer przeprowadzający skanowanie przesyła następnie sygnał RST/ACK, dzięki czemu połączenie nie jest nawiązane i może nie zostać odnotowane w logach celu. Do zbudowania pakietu SYN niezbędne są uprawnienia root'a. - TCP FIN polega na przesłaniu do wybranego portu pakietu FIN, cel powinien odpowiedzieć pakietem RST dla wszystkich zamkniętych portów. - TCP Xmas Tree polega na przesłaniu do wybranego portu pakietów FIN, URG i PUSH; cel powinien odpowiedzieć pakietem RST dla wszystkich zamkniętych port 1 / 6
ów. - TCP Null technika ta wyłącza wszystkie flagi; cel powinien odpowiedzieć pakietem RST dla wszystkich zamkniętych portów. - TCP ACK technika używana do kontroli działania zapory ogniowej; pozwala na określenie czy zapora ogniowa celu to tylko prosty filtr pakietów, dopuszczający jedynie nawiązane połączenia (połączenia z ustawionym bitem ACK), czy też może jest to zaawansowana zapora przeprowadzająca rozbudowane filtrowanie pakietów. - UDP technika wykorzystywana do ustalenia które porty UDP (User Datagram Protokol) są otwarte na hoście; polega na przesłaniu pakietu UDP do wybranego portu. Jeśli wybrany port odpowie komunikatem ICMP port unrechable, to oznacza że jest on zamknięty; w przeciwnym razie można wnioskować, że port jest otwarty lub Firewall zablokował komunikację. netcat (nc) szwajcarski scyzoryk Program netcat autorstwa Hobbita < // hobbit@avian.org // Ten adres e-mail jest ukrywany przed spamerami, włącz obsługę JavaScript w przeglądarce, by go zobaczyć // > zasłużył na miano szwajcarskiego scyzoryka dzięki swojej uniwersalności. Pośród wielu zaawansowanych funkcji, których nie będę omawiał w tym artykule program nc pozwala również na podstawowe skanowanie TCP i UDP. Dystrybucja Debian zawiera pakiet netcat oraz netcat6; ten ostatni zawiera wsparcie dla IPv6; Instalacja w Debianie sprowadza się do polecenia apt-get install netcat. Dokładny opis programu możemy oczywiście przeczytać za pomocą polecenia man nc. Najprostsza składnia programu wygląda tak: nc -opcje host porty. Opcje -v i -vv pozwalają na dwustopniowe zwiększanie opisowości danych wynikowych; opcja -z udostępnia zerowy tryb wejścia-wyjścia (używany właśnie do skanowania); a opcja -wx gdzie: X to liczba sekund pozwala na określenie limitu czasowego dla każdego połączenia. Standardowo nc korzysta z portów TCP, przeprowadzenie skanowania UDP umożliwia opcja -u. buczula:~# nc -v -z -w2 127.0.0.1 1-200 localhost.localdomain [127.0.0.1] 113 (auth) open localhost.localdomain [127.0.0.1] 111 (sunrpc) open localhost.localdomain [127.0.0.1] 80 (www) open localhost.localdomain [127.0.0.1] 22 (ssh) open Network Mapper (nmap) Program nmap to niewątpliwie najlepszy z dostępnych skanerów. Pakiet nmap jest oczywiście dostępny w Debianie, użytkownicy pozostałych dystrybucji znajdą go pod adresem http://www.insecure.org/nmap. Program nmap udostępnia wszystkie techniki skanowania opisane na początku tego artykułu oraz wiele innych. Oto jego podstawowe funkcje: buczula:~# nmap -h Nmap 3.93 Usage: nmap [Scan Type(s)] [Options] Some Common Scan Types ('*' options require root privileges) * -ss TCP SYN stealth port scan (default if privileged (root)) -st TCP connect() port scan (default for unprivileged users) 2 / 6
* -su UDP port scan -sp ping scan (Find any reachable machines) * -sf,-sx,-sn Stealth FIN, Xmas, or Null scan (experts only) -sv Version scan probes open ports determining service & app names/versions -sr RPC scan (use with other scan types) Some Common Options (none are required, most can be combined): * -O Use TCP/IP fingerprinting to guess remote operating system -p ports to scan. Example range: 1-1024,1080,6666,31337 -F Only scans ports listed in nmap-services -v Verbose. Its use is recommended. Use twice for greater effect. -P0 Don't ping hosts (needed to scan www.microsoft.com and others) * -Ddecoy_host1,decoy2[,...] Hide scan using many decoys -6 scans via IPv6 rather than IPv4 -T General timing policy -n/-r Never do DNS resolution/always resolve [default: sometimes resolve] -on/-ox/-og Output normal/xml/grepable scan logs to -il Get targets from file; Use '-' for stdin * -S /-e Specify source address or network interface --interactive Go into interactive mode (then press h for help) Example: nmap -v -ss -O www.my.com 192.168.0.0/16 '192.88-90.*.*' SEE THE MAN PAGE FOR MANY MORE OPTIONS, DESCRIPTIONS, AND EXAMPLES buczula:~# nmap -ss 192.168.0.2 Starting nmap 3.93 ( http://www.insecure.org/nmap/ ) at 2005-12-29 15:06 CET Interesting ports on 192.168.0.2: (The 1663 ports scanned but not shown below are in state: closed) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 111/tcp open rpcbind 113/tcp open auth 709/tcp open entrustmanager Nmap finished: 1 IP address (1 host up) scanned in 10.920 seconds Aby zapisać wyniki działania programu do pliku w czytelnym dla człowieka formacie należy skorzystać z opcji -on nazwapliku. buczula:~# nmap -sf 192.168.0.0/24 -on plik Opcja -O pozwala odgadnąć system operacyjny skanowanego celu. 3 / 6
buczula:~# nmap -O localhost Starting nmap 3.93 ( http://www.insecure.org/nmap/ ) at 2005-12-29 15:26 CET Interesting ports on localhost.localdomain (127.0.0.1): (The 1662 ports scanned but not shown below are in state: closed) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 111/tcp open rpcbind 113/tcp open auth 699/tcp open unknown 709/tcp open entrustmanager Device type: general purpose Running: Linux 2.4.X 2.5.X 2.6.X OS details: Linux 2.5.25-2.6.8 or Gentoo 1.2 Linux 2.4.19 rc1-rc7 Uptime 0.184 days (since Thu Dec 29 11:02:08 2005) Nmap finished: 1 IP address (1 host up) scanned in 2.616 seconds Nmap oferuje możliwości zasypania skanowanej sieci nadmiarową informacją, w celu utrudnienia wykrycia prób skanowania. Służy do tego opcja -D. Powoduje ona uruchamianie fałszywych prób skanowania podczas działania prawdziwego skanowania. Realizowane jest to poprzez podszywanie się pod adresy źródłowe innych serwerów i wymieszanie tych sfałszowanych prób skanowania z prawdziwym skanowaniem. Wybrany na cel komputer będzie miał poważne problemy z wykryciem wszystkich prób skanowania i określeniem, które z nich są fałszywe a które prawdziwe. Należy pamiętać o przestrzeganiu zasady wybierania fałszywych adresów, które są aktywne. Jeśli o tym zapomnimy to wybrany na cel komputer może zostać zalany pakietami SYN, co może spowodować sytuację odmowy usługi. buczula:~# nmap -ss 192.168.0.2 -D 10.0.0.1 Starting nmap 3.93 ( http://www.insecure.org/nmap/ ) at 2005-12-29 15:45 CET Interesting ports on 192.168.0.2: (The 1663 ports scanned but not shown below are in state: closed) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 111/tcp open rpcbind 113/tcp open auth 709/tcp open entrustmanager Nmap finished: 1 IP address (1 host up) scanned in 10.224 seconds Skanowanie portów jest popularną metodą stosowaną przez hakerów w celu identyfikacji zapory ogniowej (Firewall) zainstalowanej na komputerze ofiary. Ponieważ w obecnych czasach 4 / 6
prawie codziennie wykrywane są nowe luki w praktycznie wszystkich dostępnych na rynku zaporach ogniowych, to ustalenie typu i wersji zapory zainstalowanej na komputerze wybranym na cel jest dla agresora bardzo cenna wskazówką. W celu ustalenia tych informacji halerzy skanują określone, domyślne porty. Niektóre zapory można w ten sposób jednoznacznie zidentyfikować, np. Proxy Serwer firmy Microsoft nasłuchuje zazwyczaj na portach TCP 1080 i 1745 a Firewall-1 firmy Checkpoint nasłuchuje na portach TCP 256,257 i 258. buczula:~# nmap n vv PO p256,1080,1745 192.168.0.1-60.254 Zastosowana w powyższym przykładzie opcja PO wyłącza pingowanie pakietami ICMP przed samym skanowaniem. Funkcja ta jest bardzo przydatna ponieważ większość zapór ogniowych nie odpowiada na pakiety ICMP ECHO. Wykrywanie i przeciwdziałanie skanowaniu portów. Wykryte na czas próby skanowania portów pozwoli nam domyśleć się, kiedy nastąpi atak i jakie będzie jego źródło. Do tego celu najlepiej nadają się systemy wykrywania włamań IDS (Intrusion Detection System). Osobiście polecam zastosowanie programu snort, pakiet snort jest oczywiście dostępny w Debianie i wielu innych dystrybucjach Linuxa. Temat konfiguracji snort a jest tak szeroki, że zdecydowałem się omówić go w przyszłości w osobnym artykule. Na linuxowej maszynie można w prosty sposób zablokować mozliwość skanowania jej portów wprowadzając odpowiednie regóły do konfiguracji zapory ogniowej. Zastosowanie przedstawionych w poniższym przykładzie regół iptables spowoduje, że nasza maszyna będzie niewidoczna dla agresora a w logach systemowych (/var/log/messages) zostanie odnotowana każda próba skanowania. echo "Blokada skonaowania portow..." # Skanowanie SYN (nmap -ss) SYN -j LOG --log-prefix " $LOG Skanowanie SYN" SYN -j DROP # Metoda ACK (nmap -sa) ACK -j LOG --log-prefix " $LOG Skanowanie ACK" ACK -j DROP # Skanowanie FIN (nmap -sf) FIN -j LOG --log-prefix " $LOG Skanowanie FIn" FIN -j DROP 5 / 6
# Metoda Xmas Tree (nmap -sx) FIN,URG,PSH -j LOG --log-prefix " $LOG Skanowanie Xmas Tre" FIN,URG,PSH -j DROP # Skanowanie Null (nmap -sn) iptables -A INPUT -m conntrack --ctstate INVALID -p tcp --tcp-flags! SYN,RST,ACK,FIN,PSH,URG SYN,RST,ACK,FIN,PSH,URG -j LOG --log-prefix " $LOG Skanowanie Null" iptables -A INPUT -m conntrack --ctstate INVALID -p tcp --tcp-flags! SYN,RST,ACK,FIN,PSH,URG SYN,RST,ACK,FIN,PSH,URG -j DROP 6 / 6