Sekcje

Przejdź na skróty do treści. | Przejdź do nawigacji


Baza wiedzy Publikacje Testy penetracyjne aplikacji WWW

Testy penetracyjne aplikacji WWW

Wstęp

Chcesz potrenować realizację testów penetracyjnych na systemach w LAB?

Zapraszamy na szkolenie: zaawansowane bezpieczeństwo aplikacji www.

W pierwszej części artykułu przedstawiliśmy ogólną tematykę związaną z bezpieczeństwem i audytem bezpieczeństwa plikacji www. W niniejszym tekście przedstawimy jedną z najskuteczniejszych metod badania bezpieczeństwa aplikacji webowej - testy penetracyjne.

Często audyt aplikacji WWW przybiera formę kontrolowanych ataków na aplikację. Działając w ten sposób audytorzy lokalizują podatności w sposób, który mógłby być wykonany przez hackerów.  Cały proces – nazywany niekiedy testem penetracyjnym aplikacji  - opisujemy bardziej szczegółowo w dalszej części artykułu.  Inne – bardziej ogólne i komplementarne podejścia do audytu bezpieczeństwa aplikacji webowej prezentujemy w następnej kolejności.

Cel testów penetracyjnych

Mając świadomość w jaki sposób wykonywane są testy penetracyjne (symulacja realnych ataków), można wskazać pytania, na które odpowiedzieć może tego typu audyt:

  • Jakie luki bezpieczeństwa znajdują się w aplikacji? Jakie są potencjalne skutki wykorzystania tych podatności przez hackerów? W jaki sposób można naprawić znalezione błędy?
  • Jakie metody zabezpieczające przed atakami wykorzystuje aplikacja WWW?
  • W jakim stopniu działają ewentualne dodatkowe środki ochrony zaimplementowane w systemie (np. firewalle aplikacyjne, systemy klasy IDS).
  • W jakim stopniu próby ataków są wykrywane ? (np. poprzez reakcje zespołu bezpieczeństwa na automatycznie generowane alarmy).
  • Przez jaki czas aplikacja oraz cały system mogą skutecznie opierać się atakom?

Testy tego typu najczęściej wykonywane są w sposób ściśle usystematyzowany. Całość opiera się na kilku logicznie połączonych ze sobą fazach. Poniżej prezentujemy przykładowe etapy testu penetracyjnego – przy zaznaczeniu, iż w zależności od przyjętej metodologii mogą one ulegać pewnym zmianom.

Testy penetracyjne - etapy prac

Etap I – wstępne badanie.

Audytorzy badają ogólną charakterystykę aplikacji. Na tym etapie nie wykonywane są jeszcze ataki na system. Przykładowe testy obejmują:

  • Sprawdzenie czy aplikacja dostępna jest do pobrania w Internecie (np. jako OpenSource).
    W takim przypadku – w dalszym kroku - hacker może zainstalować aplikację w swoim testowym środowisku, ułatwiając tym samym analizę. Może również dokonać analizy kodu źródłowego, również w ten sposób zwiększając prawdopodobieństwo wykrycia istotnej luki bezpieczeństwa.
  • Sprawdzenie czy aplikacja nie jest wykorzystywana w innych firmach – możliwe jest uzyskanie tego typu informacji np. korzystając z przeglądarki Google. Poza standardowymi metodami wyszukiwania, istnieje możliwość wykorzystania techniki  google  hacking – czyli zadawania zaawansowanych zapytań do Google precyzyjnie określających poszukiwane zasoby. Po lokalizacji aplikacji w wielu środowiskach, hacker może próbować znaleźć podatności w najsłabiej zabezpieczonym systemie, a następnie przenieść atak na swój główny cel.
  • Sprawdzenie czy audytor / firma audytorska nie testowała wcześniej aplikacji – w ramach prac zleconych przez innego klienta. Jeśli tak – istnieje prawdopodobieństwo, iż błędy wykryte w trakcie zupełnie innego audytu bezpieczeństwa, znajdują się również w obecnie testowanej aplikacji.
  • Sprawdzenie czy dana aplikacja nie posiada znanych błędów. Często hackerzy nie tracą czasu na poszukiwanie podatności w aplikacji w sposób bezpośredni. Niekiedy wystarczy zaznajomić się z archiwami znanych list dyskusyjnych dotyczących bezpieczeństwa (np. „słynny” bugtraq), aby zlokalizować krytyczne błędy bezpieczeństwa w konkretnej aplikacji.

Warto zauważyć, że już podczas takiego wstępnego badania mogą zostać wykryte krytyczne luki bezpieczeństwa, mogące prowadzić do całkowitego przejęcia kontroli nad systemem przez hackera.

Dla osoby atakującej system, dalsze kroki są zazwyczaj niekonieczne. Zakładany cel  - tj. przełamanie systemu - został osiągnięty. Jednak w przypadku osób przeprowadzających testy penetracyjne to dopiero początek pracy – zadaniem audytorów jest wykrycie jak największej ilości podatności i tym samym minimalizowanie prawdopodobieństwa ich znalezienia przez wrogie osoby.

Etap II - Mapowanie aplikacji

Po wstępnym etapie prac następuje przygotowanie do bardziej szczegółowych testów. Audytorzy  starają się uzyskać jak najwięcej informacji  technicznych oraz funkcjonalnych dotyczących konkretnej instancji aplikacji. Zbierane są dane możliwe do pozyskania podczas normalnego korzystania z oprogramowania. Testerzy – poza przeglądarką internetową - używają jednak dodatkowe specyficzne narzędzia (np. http proxy). Badane są takie czynniki jak:

  • Ustalenie technologii w jakiej zbudowana została aplikacja – umożliwi to późniejsze dalsze profilowanie testów dla konkretnej technologii.
  • Ustalenie ogólnych mechanizmów zaimplementowanych w celu ochrony aplikacji (np. sposoby walidacji formularzy).
  • Ustalenie jakiego typu mechanizmy uwierzytelniania i autoryzacji zostały wykorzystane w aplikacji. 
  • Wykorzystanie ogólnych mechanizmów aplikacyjnych (np. częste wykorzystanie AJAX czy technologii Flash).
  • Wykorzystanie znanych komponentów czy bibliotek (ułatwi to próbę lokalizacji podatności w tych komponentach).
  • Funkcjonalności dostępne w aplikacji.
  • Funkcjonalności  szczególnie narażone na atak.

Przykładowe informacje, które mogą być uzyskane na tym etapie:

  • Aplikacja wykorzystuje technologię PHP.
  • W systemie została wykorzystana biblioteka OpenSource, posiadająca krytyczne błędy bezpieczeństwa i umożliwiająca zdalne przejęcie kontroli nad systemem.
  • Aplikacja korzysta z własnego podsystemu uwierzytelniania. Używane są identyfikatory sesji, których długość jest niewystarczająca. Umożliwia to przejęcie kontroli nad kontami zalogowanych użytkowników. 

Zauważmy, iż do tej pory wykonanie realnych ataków nie było konieczne – zatem niemożliwym było również wykrycie naruszeń bezpieczeństwa przez właściciela aplikacji. Jednocześnie tego typu pasywne badania pozwoliły na uzyskanie wielu interesujących informacji o aplikacji, a być może nawet znalezienie możliwości całkowitego przełamania systemu.

Etap III – atak

Po wcześniejszych etapach, niejako sondujących audytowane środowisko, następuje część związana z wykonaniem realnych ataków na aplikację. Jest to często najbardziej czasochłonna część audytu, dająca niejednokrotnie najlepsze wyniki. Faza rozpoczyna się odpowiednim doborem narzędzi, za pomocą których będzie wykonana symulacja ataków oraz tzw. payloadów do ataków (tj. odpowiednio spreparowanych fragmentów danych, które będą przesyłane do aplikacji w celu lokalizacji podatności). Tego typu dobór znacznie optymalizuje audyt, zwiększając jego skuteczność. Przykładowo – testowanie błędów charakterystycznych dla bazy danych MySQL jest stratą czasu, kiedy pewne jest, że aplikacja wykorzystuje bazę danych Oracle.
W tabeli poniżej prezentujemy klasy błędów bezpieczeństwa występujących w aplikacjach webowych. Podatności te mogą być wykryte przez test penetracyjny. Dodatkowo tabela zawiera przykładowe efekty, które może osiągnąć hacker wykorzystując daną lukę.

Wybrane klasy podatności wraz z zagrożeniami płynącymi z ich wykorzystania.

Klasa błędu
Przykłady możliwych skutków wykorzystania błędu przez hackera
SQL injection Zdalny dostęp do bazy danych – tryb odczytu / zapisu;  zdalny dostęp do panelu administracyjnego systemu; zdalny dostęp do systemu operacyjnego; pełne przejęcie kontroli nad atakowanym systemem.
XSS (Cross Site Scripting) Przejmowanie dostępu do kont zalogowanych użytkowników; kontrola nad przeglądarką internetową użytkownika;  uruchomienie keyloggera działającego na poziomie przeglądarki; dostęp do schowka systemu Windows; ataki typu phishing.
CSRF (Cross Site Request Forgery) Kontrola nad przeglądarką użytkownika; przejęcie kontroli nad aplikacją webową, do którego dostęp ma ofiara.
Broken Authentication and Session Management Dostęp do kont ofiar; dostęp do poufnych danych.
Authorization Bypass Dostęp do poufnych danych; zwiększenie uprawnień w atakowanym systemie.
Malicious Code Execution Zdalny dostęp do systemu operacyjnego; pełne przejęcie kontroli nad atakowanym systemem.
Information Leakage   
Dostęp do poufnych informacji – zarówno technicznych – np. dotyczących konfiguracji serwera, jak i biznesowych – np. dane finansowe klientów.
Insecure Communications   
Dostęp do poufnych danych; przechwytywanie loginów i haseł użytkowników.
Path Traversal
Dostęp do poufnych informacji; pełne przejęcie kontroli nad atakowanym systemem.
DoS (Denial of Service) Nieautoryzowane wyłączenie działania aplikacji; zablokowanie możliwości dostępu do aplikacji przez użytkowników - np. wyłączenie bankowości elektronicznej.
File Inclusion Możliwość przejęcia kontroli nad atakowanym systemem.
Logic Flaws Możliwość szkodliwego wpływu na logikę biznesową aplikacji – np. uzyskanie towaru ze sklepu internetowego bez zapłaty czy wykonywanie przelewów bankowych bez obciążania własnego konta.

 

Powyższa lista jest długa, choć warto zaznaczyć że zdecydowanie nie wyczerpuje ona wszystkich klas podatności, które mogą znaleźć się w aplikacji webowej.  Powstaje również pytanie – jak często błędy te występują w aplikacjach webowych? Otóż z naszego doświadczenia wynika, iż trudno jest wskazać rozbudowaną aplikację webową,  nie posiadającą choć kilku znaczących błędów bezpieczeństwa. Jednocześnie bardzo wiele aplikacji posiada podatności o znaczeniu krytycznym (np. SQL injection czy stored XSS).

Sposoby prowadzenia testu penetracyjnego (symulowany atak)

Często symulacja ataku prowadzona jest dwoma sposobami: metodą manualną oraz automatyczną. 
Metoda ręczna pozwala wykryć krytyczne, a zarazem nietypowe błędy bezpieczeństwa. Jest to również jedyny sposób umożliwiający wykrycie pewnej klasy błędów – np. logicznych. Metoda automatyczna umożliwia z kolei przyspieszenie procesu wykrywania częstych, a stosunkowo prostych do wykrycia podatności. 
Metoda hybrydowa – stanowiąca połączenie dwóch powyższych sposobów prowadzenia testu   optymalizuje czas prac przy jednoczesnej maksymalizacji uzyskanego efektu.

Zalety i wady automatycznych narzędzi do wykonywania testów penetracyjnych.

Zalety Wady
  • Wysoka szybkość wykonania testów.
  • Możliwość objęcia testami nawet bardzo dużej aplikacji.
  • Do wykonania podstawowych testów -nie wymagana specjalistyczna wiedza.
  • Automatyczna generacja ogólnego raportu.


  • Z założenia brak wykrywania pewnych klas błędów (np. błędów w logice biznesowe czy błędów w architekturze).
  • Ze względów czasowych, algorytmy zawarte w oprogramowaniu testującym, ograniczają badanie aplikacji – niewykrycie potencjalnie znacznej ilości błędów.
  • Brak implementacji zaawansowanych ataków – np. ataków czasowych – zmniejszenie skuteczności testu.
  • Raporty dostępne jedynie w języku angielskim, prezentowane w postaci jednego, ogólnego szablonu.

 

 Zalety i wady manualnego wykonywania testów penetracyjnych.

Zalety Wady
  • Możliwe wykrycie nietypowych błędów, charakterystycznych dla konkretnej konfiguracji aplikacji.
  • Możliwe badanie błędów architektonicznych czy błędów w logice biznesowej.
  • Możliwość przygotowania dedykowanych raportów - dla badanej aplikacji.
  • Wykonanie zaawansowanych ataków.
  • Stosunkowo wysoka czasochłonność podejścia.
  • Praktycznie brak możliwości analizy bardzo dużej aplikacji jedynie tą metodą.
  • Metoda wrażliwa na błędy audytora.
  • Wymagana specjalistyczna wiedza oraz doświadczenie audytorów.

Testy penetracyjne – przygotowanie dowodu istnienia luki

W przypadku znalezienia podatności, przygotowany jest tzw. Proof of Concept, czyli możliwie realny przykład udowadniający, iż dana podatność rzeczywiście istnieje w systemie. Optymalnie aby PoC przygotowywany był dla każdej zgłaszanej przez audytorów luki.

W czym mogą być pomocne tego typu przykłady? Poza wspomnianym powyżej uprawdopodobnieniem istnienia podatności, całość może być niezmiernie użyteczna przy naprawie błędu. Dowody istnienia luk są jednym z istotniejszych elementów, które znajdują się w raportach poaudytowych.

Etap IV – przygotowanie raportów

Podczas prac testowych, przygotowywane są często dwa raporty. Skrócony raport dla managementu, zawierający takie informacje jak:

  • Podsumowanie wykonanych prac.
  • Skrótowy opis najistotniejszych znalezionych podatności. 
  • Szacowany poziom bezpieczeństwa aplikacji.
  • Rekomendowane środki zaradcze.

Raport zlokalizowanych podatności, zawierający przykładowo:

  • Słowny opis podatności.
  • Lokalizacja podatności - opis sposobu, w jaki można zlokalizować i powtórzyć testowy atak na podatność (PoC).
  • Poziom niebezpieczeństwa podatności.
  • Łatwość odkrycia błędu przez potencjalnego atakującego.
  • Sposób naprawy podatności.

Warto zaznaczyć, iż raporty w zależności od charakteru audytu mogą się między sobą różnić. Przykładowo – dokument powstały w wyniku testu zgodności systemu z ustawą o ochronie danych osobowych będzie zawierał specyficzne elementy określone w Ustawie. W ogólności jednak dobrze przygotowane dokumenty poaudytowe umożliwiają:

  • Osobom nietechnicznym odczytanie wniosków poaudytowych (w tym określenie poziomu bezpieczeństwa aplikacji oraz ewentualne rekomendacje zmian - wyartykułowane na ogólnym poziomie).
  • Osobom technicznym – uzyskanie szczegółowych informacji na temat całościowego bezpieczeństwa aplikacji.
  • Osobom odpowiedzialnym za kwestie konfiguracyjne i programistyczne związane z audytowanym systemem - lokalizację znalezionych przez audytorów podatności oraz późniejszą naprawę błędów.

Etap V – sprawdzenie skuteczności poprawek

Po dostarczeniu raportów, audytowana firma wdraża poprawki usuwające wykryte błędy bezpieczeństwa. Często jednak pomija się kolejny etap prac testowych - sprawdzenie skuteczności wprowadzonych korekt. Warto mieć świadomość, iż poprawka błędu bezpieczeństwa może być nieskuteczna. Istnieje zarówno wiele metod obejścia wprowadzonych zabezpieczeń jak i mnogość wariantów wykorzystania danej podatności. Aby uzyskać wysokie prawdopodobieństwo usunięcia błędu, warto dokładnie, ponownie sprawdzić znalezione wcześniej luki.

Najczęściej proces ten polega na powtórzeniu większości wykonanych w trakcie audytu testów, jednak ograniczając się tylko do wcześniej znalezionych podatności.

Testy penetracyjne - etapy

Inne warianty audytu aplikacji WWW

Opisany wcześniej audyt sprowadza się w głównej mierze do testów penetracyjnych aplikacji. Jednak całą procedurę można rozszerzyć o takie elementy jak:

  • Audyt infrastruktury (np. serwera HTTP, serwera aplikacyjnego, systemu operacyjnego czy też bazy danych, z której korzysta aplikacja).
  • Audyt sieci, w której znajduje się badany system.
  • Recenzja bezpieczeństwa aplikacji - na ogólnym poziomie abstrakcji. Np. lokalizacja błędów architektonicznych, integracyjnych czy mających miejsce w procedurach utrzymaniowych aplikacji. 
  • Audyt oparty o ściśle określone wytyczne - np. test  systemu na zgodność z ustawą o ochronie danych osobowych.

Niekiedy trudno jest określić, jaki zakres audytu wybrać – w takim przypadku zalecamy poprosić  o uzasadnioną rekomendację firmę, z którą zamierzamy współpracować przy audycie.

Kiedy warto wykonywać audyt bezpieczeństwa?

Najprostsza odpowiedź na to pytanie wygląda następująco: wtedy, kiedy ma to największą wartość biznesową dla przedsiębiorstwa. W praktyce jednak często trudno jest określić sytuacje, w której audyt przyniesie nam największą korzyść. W przypadku aplikacji webowych można posłużyć się pewnymi ogólnymi zasadami. Często pozytywna odpowiedź na zaledwie jedno z poniższych pytań może potwierdzić słuszność decyzji o wykonaniu audytu bezpieczeństwa.

  • Kiedy w aplikacji przetwarzane są istotne dane (np.: dane Klientów przedsiębiorstwa, dane finansowe, dane osobowe).
  • Kiedy znaczna część  działalności firmy opiera się o aplikacje webowe udostępnione w Internecie (np. sklepy internetowe działające w Sieci).
  • Kiedy w dostępnym w Internecie systemie przetwarzane są dane osobowe – system taki powinien spełniać wymogi określone w ustawie o ochronie danych osobowych.
  • Kiedy wartość chronionych danych znacznie przerasta koszty audytu oraz inne stosowane zabezpieczenia.
  • Kiedy istnieją podejrzenia naruszenia bezpieczeństwa aplikacji.
  • Kiedy chcemy znacznie zminimalizować ryzyko ataku na system IT, w którego skład wchodzą rozwiązania oparte o WWW.

Warto również pamiętać, iż audyt służy przede wszystkim zmniejszaniu ryzyka, za którym stoją realne straty przedsiębiorstwa. Poza szkodami bezpośrednio finansowymi, mogą to być:

  • Utrata reputacji  (np. po udanym włamaniu na portal firmowy i nieautoryzowanej zmianie jego treści; po tzw. szumie medialnym dotyczącym niewielkiego poziomu bezpieczeństwa w obrębie danej organizacji).
  • Utrata korzyści (np. po wyłączeniu z działania sklepu internetowego).
  • Konsekwencje wynikające ze złamania wymogów prawnych (np. po złamaniu ustawy o ochronie danych osobowych).

Zalety i wady audytu bezpieczeństwa aplikacji webowych

Często decyzja o wykonaniu i zakresie audytu bezpieczeństwa, podejmowana jest w oparciu o bardzo wiele specyficznych kryteriów. Z racji na charakter niniejszego artykułu niemożliwym jest zaprezentowanie skrótowego, a zarazem możliwie pełnego zestawienia kryteriów przydatnych do podjęcia decyzji o przeprowadzeniu audytu. Istnieją jednak pewne ogólne cechy charakteryzujące tego typu prace, o których wspominamy poniżej.

 Wśród zalet audytu bezpieczeństwa można wyliczyć:

  • Dostarczenie dokumentacji zawierającej przekonywujące informacje dla zarządu - o stanie bezpieczeństwa systemu – umożliwiające podjęcie świadomej decyzji o ryzyku.
  • Dokładne wskazanie podatności wraz ze sposobem ich naprawy.
  • Możliwość kompleksowej weryfikacji bezpieczeństwa całego systemu IT.
  • Możliwość wdrożenia ochrony systemu przed rzeczywistymi atakami.
  • Elastyczny kosztowo sposób zwiększania bezpieczeństwa organizacji.

Wśród wad audytu można wyliczyć:

  • Konieczność  zaangażowania pracowników firmy zlecającej audyt w całość prac (koordynacja prowadzenia testów, koordynacja naprawy podatności).
  • W przypadku niekompletnej technicznej wiedzy audytorów – efekt niższy od spodziewanego.
  • Dodatkowy koszt dla organizacji zlecającej audyt.

Podsumowanie

Obecnie zdecydowana większość ataków na systemy webowe udostępniane w Internecie odbywa się w warstwie aplikacyjnej.  Spowodowane jest to łatwością ataku oraz słabym zabezpieczeniem samych aplikacji WWW. Metodą weryfikującą bezpieczeństwo systemów webowych jest audyt bezpieczeństwa, który często przybiera formę symulowanych realnych ataków na aplikację, zwanych testami penetracyjnymi. Jest to jedna ze skuteczniejszych metod sprawdzenia bezpieczeństwa systemu, pozwalająca sprawdzić jego rzeczywistą ochronę.

W krajach wysoko rozwiniętych, ataki na systemy IT stały się faktem – aby się o tym przekonać wystarczy prześledzić doniesienia zagranicznej prasy. W Polsce era hackingu dopiero się rozpoczyna. Czy Twój system jest na tyle bezpieczny aby oprzeć się nowym zagrożeniom?

Zapraszamy na szkolenie autorskie autora artykułu -
testy penetracyjne systemów IT.

--Michał Sajdak (michal.sajdak@securitum.pl)

Przydatne informacje? Polub nas na facebooku.

Nawigacja
 
Darmowy magazyn o ITsec

zine
Subskrybuj RSS:
RSS