Wiele razy w swoim życiu miałem do czynienia z sytuacjami, że oprogramowanie komputera nie działało poprawnie. Bardzo często powodem takiego stanu rzeczy był brak aktualizacji systemu operacyjnego lub poszczególnych programów. O ile na komputerze domowym niepodłączonym do internetu (a są jeszcze takie?) nie stanowi to krytycznej luki bezpieczeństwa, to na komputerach służbowych czy serwerach dbanie o aktualizacje bezpieczeństwa powinno być priorytetem. Dziś zaprezentuję w jaki sposób można sprawdzić poziom zabezpieczeń swoich maszyn — komputerów, serwerów, aplikacji. Przedstawione metody są znane przede wszystkim pentesterom, ale też hakerom. Wiedza na temat tego, jak zdobywać informacje przydaje się nie tylko do samego włamywania się (od strony hackingu), ale też do lepszego zabezpieczania (od strony administratora).
UWAGA: ten tekst pisany jest wyłącznie w celach edukacyjnych. Nie używaj poniższego oprogramowania do skanowania czy włamywania się na komputery bez zgody ich właścicieli.
Zanim jednak przejdę do sedna, chciałbym wyjaśnić pojęcie, które pojawiło się w poprzednim akapicie. Pentester to osoba wyszukująca podatności i luki w systemach informatycznych, także symulująca ataki możliwe do przeprowadzenia przez hakerów (testy penetracyjne). Takie testy mają na celu ocenę bieżącego stanu zabezpieczeń systemu. Działania te polegają na analizie systemu pod kątem występowania nieaktualnego oprogramowania, błędnej konfiguracji programowej lub sprzętowej, czy nawet niewystarczającej wiedzy użytkownika/administratora. Zasadniczą różnicą między testem penetracyjnym a włamaniem jest fakt zgody atakowanej osoby czy firmy, która w takim teście występuje. Ponadto osoba przeprowadzająca test zobowiązana jest do przedstawienia raportu ze swojej pracy. W raporcie pentestera przedstawione są zatem w szczególności informacje o znalezionych podatnościach i odporności systemu na próby przełamania zabezpieczeń oraz wskazówki, jak można poprawić bezpieczeństwo systemu.
Na potrzeby tego artykułu, do zbudowania laba użyłem następujących narzędzi:
- VirtualBox w wersji 6.1.22 z zainstalowanym rozszerzeniem VirtualBox Extension Pack,
- Metasploitable2 — specjalnie przygotowana maszyna wirtualna zawierająca oprogramowanie, które posiada luki bezpieczeństwa,
- Kali Linux 2021 — dystrybucja linuxa przygotowana z myślą o wykonywaniu testów penetracyjnych, zawierająca wiele przydatnego oprogramowania.
Celowo nie pokazuję konfiguracji całego środowiska oraz pomijam niektóre kroki. Osoby zainteresowane przeprowadzeniem podobnych testów we własnym zakresie poradzą sobie samodzielnie. Artykuł ma na celu pokazanie jak łatwo jest się włamać na nieaktualny i dziurawy system. Chcę też przestrzec administratorów czy opiekunów systemów (a także normalnych użytkowników komputerów), aby nigdy nie tracili czujności.
Rozpoznanie
Pierwszą czynnością, od której należy zacząć, jest analiza sieci. Dzięki temu dowiemy się, czy są jakieś potencjalne cele do ataku. W Kali znajdziemy mnóstwo oprogramowania, które zbiera informacje o sieci.
Jak widać, jest z czego wybierać. Posłużę się dziś programem nmap, który znajduje się w domyślnej instalacji używanego systemu. Na początek zobaczmy jakie hosty są dostępne w sieci:
┌──(kali㉿kali)-[~]
└─$ arp -i eth1
Address HWtype HWaddress Flags Mask Iface
10.0.2.4 ether 08:00:27:d9:f6:01 C eth1
10.0.2.3 ether 08:00:27:05:64:19 C eth1
10.0.2.2 ether 52:54:00:12:35:00 C eth1
10.0.2.1 ether 52:54:00:12:35:00 C eth1
Widać, że aktywne są cztery hosty. Spróbujmy zatem dowiedzieć się o nich czegoś więcej:
┌──(kali㉿kali)-[~]
└─$ nmap -sV -p- 10.0.2.1-4
Starting Nmap 7.91 ( https://nmap.org ) at 2021-06-14 17:57 EDT
Nmap scan report for 10.0.2.1
Host is up (0.00016s latency).
Not shown: 65534 closed ports
PORT STATE SERVICE VERSION
53/tcp open domain (generic dns response: NOTIMP)
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port53-TCP:V=7.91%I=7%D=6/14%Time=60C7D0E4%P=x86_64-pc-linux-gnu%r(DNSV
SF:ersionBindReqTCP,E,"\0\x0c\0\x06\x81\x84\0\0\0\0\0\0\0\0");
Nmap scan report for 10.0.2.4
Host is up (0.00059s latency).
Not shown: 65505 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.3.4
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
23/tcp open telnet Linux telnetd
25/tcp open smtp Postfix smtpd
53/tcp open domain ISC BIND 9.4.2
80/tcp open http Apache httpd 2.2.8 ((Ubuntu) DAV/2)
111/tcp open rpcbind 2 (RPC #100000)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
512/tcp open exec netkit-rsh rexecd
513/tcp open login
514/tcp open tcpwrapped
1099/tcp open java-rmi GNU Classpath grmiregistry
1524/tcp open bindshell Metasploitable root shell
2049/tcp open nfs 2-4 (RPC #100003)
2121/tcp open ftp ProFTPD 1.3.1
3306/tcp open mysql MySQL 5.0.51a-3ubuntu5
3632/tcp open distccd distccd v1 ((GNU) 4.2.4 (Ubuntu 4.2.4-1ubuntu4))
5432/tcp open postgresql PostgreSQL DB 8.3.0 - 8.3.7
5900/tcp open vnc VNC (protocol 3.3)
6000/tcp open X11 (access denied)
6667/tcp open irc UnrealIRCd
6697/tcp open irc UnrealIRCd (Admin email admin@Metasploitable.LAN)
8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
8180/tcp open http Apache Tomcat/Coyote JSP engine 1.1
8787/tcp open drb Ruby DRb RMI (Ruby 1.8; path /usr/lib/ruby/1.8/drb)
33285/tcp open nlockmgr 1-4 (RPC #100021)
35082/tcp open mountd 1-3 (RPC #100005)
58079/tcp open status 1 (RPC #100024)
59005/tcp open java-rmi GNU Classpath grmiregistry
Service Info: Hosts: metasploitable.localdomain, irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 4 IP addresses (2 hosts up) scanned in 131.03 seconds
Maszyna, która mogła by nas zainteresować z punktu widzenia nieaktualnego oprogramowania to 10.0.2.4. Widzimy tu wiele otwartych portów, a każdy z nich to potencjalny cel ataku. Można zauważyć, że uruchomione oprogramowanie jest w bardzo nieaktualnych wersjach. Sprawdźmy zatem, czy znane są jakieś exploity (programy, których celem jest wykorzystanie znanych luk bezpieczeństwa) na niektóre z dostępnych serwisów. Do tego celu użyjemy bardzo popularnego pakietu metasploit.
Serwer WWW
Po uruchomieniu metasploita za pomocą polecenia msfconsole, spróbujmy uzyskać trochę więcej informacji o serwerze http. Na początek użyjemy modułu auxiliary/scanner/http/http_version.
Wiemy już, że naszym potencjalnym celem jest serwer Apache w wersji 2.2.8 z zainstalowanym modułem mod_dav oraz PHP w wersji 5.2.4. Zanim przejdziemy do dalszego skanowania metasploitem, warto sprawdzić, czy administrator nie zostawił nam pliku phpinfo.php.
Jak widać, plik taki znajduje się na serwerze. Zawiera on przydatne informacje np. o użytych rozszerzeniach, czy lokalizacji plików konfiguracyjnych. Skoro wiemy już co jest odpowiedzialne za serwowanie stron www, spróbujmy znaleźć inne webaplikacje na tym serwerze. W tym celu użyjemy innego skanera, mianowicie auxiliary/scanner/http/dir_scanner.
Znaleźliśmy kolejne potencjalne wektory ataku: cgi-bin wskazujący, że serwer może uruchamiać pliki binarne oraz phpMyAdmin. Sprawdźmy zatem, czy mamy dostępne jakieś exploity.
Spróbujmy go zatem użyć:
Sukces! Otrzymaliśmy zdalny dostęp do serwera, wykorzystując luki w php. Jako że apache uruchomiony jest z użytkownika www-data, to tylko takie uprawnienia aktualnie mamy. Naszym celem jest jednak zdobycie konta administratora. Spróbujmy zatem innego wektora ataku.
Serwer FTP
Na serwerze uruchomione są dwa serwery FTP: vsftpd w wersji 2.3.4 oraz ProFTPD w wersji 1.3.1. Spróbujmy dowiedzieć się czegoś o tym pierwszym.
┌──(kali㉿kali)-[/usr/share/nmap/scripts]
└─$ nmap --script ftp-vsftpd-backdoor 10.0.2.4
(…)
PORT STATE SERVICE
21/tcp open ftp
| ftp-vsftpd-backdoor:
| VULNERABLE:
| vsFTPd version 2.3.4 backdoor
| State: VULNERABLE (Exploitable)
| IDs: BID:48539 CVE:CVE-2011-2523
| vsFTPd version 2.3.4 backdoor, this was reported on 2011-07-04.
| Disclosure date: 2011-07-03
| Exploit results:
| Shell command: id
| Results: uid=0(root) gid=0(root)
(…)
Tym razem wykorzystaliśmy skrypt nmapa o nazwie ftp-vsftpd-backdoor. Sprawdza on, czy zainstalowana wersja jest podatna na atak. W odpowiedzi widzimy, że jest podatna na atak oznaczony CVE-2011-2523. Spróbujmy zatem użyć metasploita, aby dostać się na maszynę.
Jak widać, tym razem z pełnym powodzeniem uzyskaliśmy dostęp do terminala z uprawnieniami root.
Serwer Samba
Podobny wynik uzyskamy, jeśli spróbujemy exploitować serwer wymiany plików z systemami Windows (Samba). Tego typu oprogramowanie jest często spotykane w firmowych sieciach wewnętrznych. Oczywiście, i tym razem użyjemy metasploit, tym razem jednak używając exploita exploit/multi/samba/usermap_script z payloadem payload/cmd/unix/reverse. Konfiguracja oraz wynik uruchomienia na screenie:
Serwer MySQL
Narzędzie metasploit nadaje się też do ataków siłowych (brute force). Dla przykładu skaner auxiliary/scanner/mysql/mysql_login:
Ta konkretna konfiguracja sprawdza, czy na mysql można zalogować się userem root bez hasła. Jak widać, próba zakończyła się powodzeniem. Nic nie stoi jednak na przeszkodzie, aby uzupełnić opcje PASS_FILE czy USER_FILE odpowiednimi plikami zawierającymi loginy i hasła, a metasploit zacznie próby logowania na kombinacje wszystkich loginów i haseł z plików. Jeżeli jakaś próba się powiedzie, dostaniemy w odpowiedzi login i hasło. Z tymi danymi baza stoi przed nami otworem.
Podsumowanie
Jak widać, sam wywiad na temat tego, co znajduje się w sieci, nie jest specjalnie skomplikowany. Mając świadomość, jakie usługi u nas działają, możemy sami spróbować znaleźć i użyć odpowiednie exploity. Jeśli uda nam się przełamać zabezpieczenia — koniecznie trzeba przeprowadzić aktualizacje. Jeśli nie — nie wolno spocząć na laurach. Można się też zastanowić, czy hakowanie rzeczywiście jest takie proste. Wszak wystarczy wydać parę poleceń i ma się roota na zdalnej maszynie. W zaprezentowanych przykładach było łatwo. W środowisku laboratoryjnym nie działają żadne systemy IDP/IPS, nie ma więc problemu, żeby robić „hałas” w sieci. Również użycie specjalnie przygotowanego systemu z niezałatanymi dziurami wiele ułatwia. W rzeczywistym środowisku działają (lub powinny — jeśli nie, poproś swojego administratora o skonfigurowanie takowych) różnego rodzaju firewalle czy systemy monitorujące ruch sieciowy, które wyłapują anomalie i niestandardowe pakiety. Te potrafią skutecznie opóźnić, czy nawet zablokować różnego rodzaju ataki oraz informują administratorów o podejrzanych działaniach. Także odpowiednia konfiguracja usług (na przykład niepozostawianie pustych lub domyślnych haseł, instalacja oprogramowania typu fail2ban do blokowania prób brute force) pomaga zabezpieczać serwery. Ale nade wszystko trzeba pamiętać o aktualizacji swojego oprogramowania. Producenci starają się wydawać łatki bezpieczeństwa tak szybko, jak to jest możliwe. W przypadku krytycznych podatności, takie aktualizacje wydawane są niemal natychmiastowo. Jednak każdego dnia odkrywane są nowe luki 0-day na różne programy. Baza exploitów jest ciągle aktualizowana.
Powyższe przykłady pokazują w działaniu raptem kilka narzędzi dostępnych dla pentesterów czy hakerów. Do dyspozycji mamy cały zbiór narzędzi do skanowania sieci, OSINTu, skanowania systemów pod kątem występowania konkretnych podatności, analizy webaplikacji, baz danych, łamaczy haseł, narzędzi do atakowania sieci Wi-Fi, narzędzi wspomagających ataki socjotechniczne i wiele innych. Zaprezentowane w tym artykule stanowią jedynie ułamek możliwości tego, co jest do dyspozycji. Zainteresowanych tematem polecam strony takie jak https://niebezpiecznik.pl, https://z3s.pl czy https://sekurak.pl. Prawie codziennie pojawiają się na nich informacje o nowych podatnościach czy metodach działania hakerów. Wiedza na temat sposobów ich działania na pewno nie zaszkodzi, a w kluczowych momentach może nas uchronić przed tragicznymi skutkami ich działalności.
Autorem tekstu jest Łukasz Wojtyczka.