Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book

OWASP ZAP – narzędzie ułatwiające testowanie aplikacji webowych

15 października 2013, 19:52 | Narzędzia | komentarzy 21

Wstęp

ZAP (ang. Zed Attack Proxy) to wielofunkcyjne darmowe narzędzie do testowania bezpieczeństwa aplikacji webowych rozwijane w ramach organizacji OWASP  (ang. Open Web Application Security Project). Jest proste w instalacji i obsłudze, co czyni je idealnym dla osób początkujących, chociaż profesjonaliści też znajdą w nim coś dla siebie. Dostępne jest w wielu wersjach językowych, w tym w języku polskim, oraz na różne systemy operacyjne.

ZAP_sesja

Przykładowy zrzut sesji.

Przyjrzyjmy się części możliwości, jakie oferuje ZAP.

 1. Lokalne proxy przechwytujące

Ustawienie proxy przechwytującego pozwala monitorować komunikację http wraz z jej zawartością. W razie potrzeby jesteśmy też w stanie przechwycić, zmodyfikować i ponownie przesłać każde wysłane żądanie.

ZAP_history

Przykładowy zrzut zarejestrowanej komunikacji.

Jeżeli chcemy przechwytywać tylko wybraną komunikację, możemy użyć tzw. punktów zatrzymania (ang. break points) pozwalających określić dokładne kryteria, takie jak treść:

  • określony ciąg znaków,
  • wyrażenie regularne,

i lokalizacja:

  • URL,
  • nagłówek żądania/odpowiedzi,
  • „ciało” żądania/odpowiedzi.
ZAP_break_points

Przykładowy zrzut konfiguracji punktów zatrzymania.

 2. Spider

Spider to narzędzie automatycznie wyszukujące powiązania (URL) znajdujące się na danej stronie. Działa ono w sposób rekurencyjny, podążając za znalezionym URL, i wznawia proces wyszukiwania do momentu osiągnięcia pewnej „głębokości” lub nieznalezienia nowych powiązań.

W celu wykrycia powiązań spider przeszukuje:

  • odpowiedzi HTML,
  • tagi Base, A, Link, Area – atrybut „href”,
  • tagi Frame, Iframe, Script, Img – atrybut „src”,
  • tag Meta – atrybut „http-equiv” w poszukiwaniu „location” i „refresh”,
  • tag Form – atrybut „action”,
  • komentarze,
  • odpowiedzi nie-HTML,
  • plik Robots.txt.
ZAP_spider

Przykładowy zrzut wyników działania tradycyjnego Spidera.

Natomiast Ajax Spider wykorzystuje Crawljax, który steruje przeglądarką za pomocą Selenium, by odkryć powiązania generowane przez aplikację nawet po stronie klienta.

Przykładowy zrzut wyników działania Ajax Spidera.

Przykładowy zrzut wyników działania Ajax Spidera.

3. Wymuszone przeglądanie

Funkcja wymuszonego przeglądania próbuje uzyskać bezpośredni dostęp do plików i katalogów, których nazwy znajdują się na liście dostarczonej w pliku tekstowym. Dzięki temu można wykryć ukryte pliki lub katalogi. Działanie tej funkcji jest oparte na kodzie projektu OWASP DirBuster.

ZAP_Forced_browse

Przykładowy zrzut wyniku wymuszonego przeglądania.

4. Aktywne i pasywne skanowanie

Oba skanowania wyszukują popularne podatności w aplikacjach webowych, takie jak:

  • Cross Site Scripting (XSS),
  • SQL Injection,
  • Path Traversal,
  • CRLF Injection i inne.

Różnią się oczywiście sposobem działania:

  • Pasywne skanowanie – analizuje wszystkie zarejestrowane odpowiedzi pochodzące od aplikacji, nie generując przy tym żadnego dodatkowego ruchu.
  • Aktywne skanowanie – pełni funkcję automatycznego skanera, generując odpowiednio przygotowane żądania w celu wykrycia podatności.
Przykładowy zrzut wyniku działania aktywnego skanowania.

Przykładowy zrzut wyniku działania aktywnego skanowania.

Wszystkie wykryte podatności są kategoryzowane ze względu na stopień zagrożenia (wysoki, średni, niski, informacyjny), automatycznie opisywane i zestawiane. ZAP daje możliwość wygenerowania pliku XML lub HML zawierającego raport z takiego zestawienia.

Przykładowy zrzut wykrytych podatności.

Przykładowy zrzut wykrytych podatności.

5. Zarządzanie dodatkami

Zarządzanie dodatkami pozwala na zwiększenie możliwości ZAP-a. Na przykład w łatwy sposób możemy dodać skaner portów bez konieczności przerywania pracy. Dodatki dzielone są na trzy kategorie zależne od ich danego statusu:

  • Release – określa wysoką jakość i poprawność działania,
  • Beta – określa znośną jakość ale dodatek może być niekompletny lub wymaga dalszych testów,
  • Alpha – określa początkowe stadium pracy nad danym dodatkiem.
Przykładowy zrzut okna zarządzania dodatkami.

Przykładowy zrzut okna zarządzania dodatkami.

6. Fuzzer

Fuzzing polega na przesyłaniu aplikacji niepoprawnych lub nieprzewidzianych danych. Ta funkcja wysyła do aplikacji serie żądań zawierających przygotowane wzorce ataków i analizuje jej odpowiedzi, podobnie jak w przypadku automatycznego skanowania podatności, ale w przeciwieństwie do niego to my (użytkownicy) decydujemy, w którym miejscu (w żądaniu) i jakie wzorce (wybrane z dostępnej bazy danych) zostaną użyte. Działanie fuzzera opiera się na kodzie projektu OWASP JBroFuzz oraz bazie danych FuzzDB.

Przykładowy zrzut wykorzystania Fuzzera.

Przykładowy zrzut wykorzystania Fuzzera.

7. Obsługa dynamicznych certyfikatów SSL

Dzięki obsłudze dynamicznych certyfikatów SSL możemy przechwytywać i analizować zaszyfrowaną komunikację. ZAP działa na zasadzie „man in the middle”, przekazując przeglądarce własny wygenerowany certyfikat. Każdy stworzony certyfikat pochodzi bezpośrednio od głównego certyfikatu „ZAP Root CA”. Co oznacza, że wystarczy raz dodać certyfikat „ZAP Root CA”, by każdy następnie wygenerowany certyfikat był zaufany.

8. Obsługa WebSockets

WebSocket pozwala na dwukierunkową komunikację za pośrednictwem jednego gniazda TCP. Obsługa websocketów pozwala zwiększyć możliwości ZAPa, przez co z jego pomocą jesteśmy w stanie:

  • monitorować komunikacje wykorzystującą WebSockety,
  • przechwycić i zmodyfikować ww. komunikację,
  • fuzzować komunikaty.

9. Obsługa skryptów

ZAP pozwala automatyzować pracę za pomocą skryptów napisanych w różnych językach (wspierających JSR 223), między innymi:

  • ECMAScript/Javascript,
  • Ruby,
  • Python,
  • Groovy i inne.
UWAGA! Skrypty są wykonywane z takimi samymi uprawnieniami jak ZAP, należy używać tylko zaufanych skryptów!

ZAP obsługuje różne rodzaje skryptów:

  • autonomiczne (Stand Alone) – uruchamiane ręcznie,
  • aktywne zasady (Active Rules) – działają jako część aktywnego skanera, mogą być włączane indywidualnie,
  • pasywne zasady (Passive Rules) – działają jako część pasywnego skanera, mogą być włączane indywidualnie,
  • proxy (Proxy) – mogą zmienić każde żądanie oraz odpowiedź, mogą być włączane indywidualnie,
  • ukierunkowane (Targeted) – działają na konkretne URL lub zestawy URLi, są uruchamiane ręcznie.

Wszystkie skrypty uruchamiane automatycznie są początkowo wyłączone, przed uruchomieniem należy je włączyć.

10. Podsumowanie

Widzimy, że ZAP oferuje szeroką gamę możliwości, co w połączeniu z prostą obsługą daje narzędzie skutecznie wykorzystywane nawet przez osoby z małym doświadczeniem w temacie bezpieczeństwa aplikacji webowych. Warto dodać, że jest to flagowy projekt aktywnie rozwijany przez społeczność OWASP.

 – Daniel Iziourov (daniel.iziourov<sekurak>gmail.com)

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. ZAP ostatnio dostał kopa, głównie dzięki grantom z programu GSoC. Rozwija się dużo dynamiczniej niż w kiedś i jest już niezłym konkurentem dla Burpa, nawet tego w wersji Pro. Burp ostatnio stoi trochę w miejscu i jak tak dalej pójdzie, dużo lepiej będzie stosować ZAPa.

    W każdym razie, jako oddany użytkownik Burpa, polecam każdemu wypróbować opisywane tutaj narzędzie. Ciekawe doświadczenie.

    Odpowiedz
  2. z3

    O, alternatywa dla burp’a.

    Odpowiedz
  3. Kuba

    Generalnie świtne narzędzie w szczególności Fuzzery

    Odpowiedz
  4. OiSiS

    Ja uzywam od jakiego czasu ZAPa, narzedzie jest ok. Szkoda ze WebScarab i WebGoat padlo bo tez mi sie podobaly. Szczegolnie WebGoat, mozna bylo sobie pocwiczyc rozne typy atakow. Jak ktos nie zna polecam.

    Odpowiedz
  5. bl4de

    @Daniel fajny tekst :)

    Przy okazji mam pytanie: czy wiecie, jak zmusić ZAP-a do współpracy z TOR-em?

    W Burp’ie można ustawić proxy zewnętrzne z opcją SOCKS, natomiast w ZAP-ie nie ma takiej możliwości i TOR odrzuca połączenia wychodzące z ZAP-a :(

    Generalnie case jest taki, że w Burpie używam łańcuszka:

    browser -> proxy Burpa (8080) -> TOR (SOCKS 9050) -> web (OK)

    a w ZAP-ie jest kiszka:

    browser -> proxy ZAPa (8080) -> TOR (9050 ale nie SOCKS i tu TOR odrzuca requesty) -> tu kiszka :(

    Będę wdzięczny za wskazówki.

    Odpowiedz
  6. OiSiS

    @bl4de
    Ja proponuję użyć do tego jakiegoś dobrego distra, które wszystko wysyła przez TORa, np: Whonix, Tails itp. ZAP jest na każdą platformę więc nie będzie z tym problemów. Jeżeli chcesz używać tego przez TORa to raczej nie do testowania swoich serwerów :) więc od razu postaw sobie distro w jakimś VirtualBoxie a do tego pliki maszynek w jakimś TrueCrypt wtedy będzie to miało ręce i nogi. Wcześniej jeszcze jakiegoś VPN.

    Odpowiedz
  7. bl4de

    @OiSiS

    Dziękuję za odpowiedź. Szkoda, że nie da się tego ustawić „natywnie”.

    > Jeżeli chcesz używać tego przez TORa to raczej nie do testowania swoich serwerów :)

    Oj tam oj tam… ;)

    Odpowiedz
  8. OiSiS

    @bl4de
    Natywnie pewnie tez sie da jakos to ustawic ale ja bym nie ryzykowal przy niezamowionym pentescie, zawsze cos boczkiem moze uciec a wtedy w pakiecie bedzie wizyta smutnych panow.

    Odpowiedz
  9. Dan

    @bl4de
    Sprawdzę to, jak znajdę rozwiązanie to dodam tutaj i poproszę ms by zaktualizował tekst :)

    Odpowiedz
  10. bl4de

    @Dan
    Ok, super, dzięki :)

    @OiSiS
    Nie no, wiadomo. Dlatego na razie pozostanę przy Burp’ie. Oczywiście niezamówione pentesty nie wchodzą w grę ;)

    Odpowiedz
  11. OiSiS
    Odpowiedz
  12. OiSiS

    @bl4de
    Dzięki, popatrzę jak to można ugryźć :), ja używam FireBuga, Edit Cookie, Hack Bar, Live HTTP Headers, NoScript. A z mniej hackierskich :) polecam: Speed Dial, Session Manager, YSlow.

    Odpowiedz
  13. bl4de

    @OiSiS
    Widzę standardowy „zestaw małego badacza” ;)

    Ja w pracy developerskiej, ze względu na jej charakter (stricte JavaScript) używam Chrome Developer Tools z dodatkiem AngularBatarang. Generalnie w Chrome Developer Tools da się pracować i z kodem źródłowym (Workspaces), jest świetny wbudowany debugger do JS i masa innych pomocnym „ficzerów”

    A, i jeszcze ostatnio znalazłem po prostu mega dodatek: „Quic source viewer” (https://chrome.google.com/webstore/detail/quick-source-viewer/cfmcghennfbpmhemnnfjhkdmnbidpanb) – coś wspaniałego, cały kod źródłowy „rozbity” na HTML, JS, CSS wraz z inline’owymi wstawkami w tych językach, a kod JavaScript dodatkowo „odobfuskowany” :)

    Odpowiedz
  14. OiSiS
    Odpowiedz
  15. bl4de

    @OiSiS

    ;)
    You’ve made my day :)

    A materiały z DEFCON’u to generalnie od lat „klasa wyższa” :)

    Chciałbym kiedyś wziąć udział w tej konferencji.

    Odpowiedz
  16. Dan

    @bl4de
    sry że tak późno ale jakoś nie miałem czasu spojrzeć na ten temat.

    Najłatwiej skorzystać z tzw. proxychain-a, ja użyłem Privoxy (http://www.privoxy.org), zatem wychodzi ci coś takiego:

    Przeglądarka -> ZAP (8080) -> Privoxy (8118) -> Tor (SOCKS5 9050) -> ???? -> Profit

    Na mailing liście ZAPa problem z SOCKS proxy wisi chyba już od 2 lat, ale nikomu nie chce się za to zabrać :P

    Odpowiedz
  17. bl4de

    @Dan
    Dzięki za odpowiedź. Też szukałem rozwiązania tego problemu na liście ZAP-a i też nie znalazłem… :/

    Odpowiedz
  18. MateuszM

    Czy są jakieś równoważne funkcjonalnie aplikacje napisane w czymś innym niż Java? Jeżeli dobrze pamiętam Burp Suite też jest w Javie wykonany.

    Zasadniczo nie mam nic przeciwko tej czy innej platformie ale zastanawiam się czy jest coś natywnego np. w C/C++? Czasami nie mam do dyspozycji JRE a klecenie skryptów w Perlu czy Pythonie i maglowanie wyników awk czy sed-em nie jest takie fajne i cukierkowe jak gotowy kombajn typu Burp/ZAP.

    Odpowiedz
  19. mIRO

    Słabialdo, nie da się zalogować :(((

    Odpowiedz

Odpowiedz