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
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.
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.
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.
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.
Natomiast Ajax Spider wykorzystuje Crawljax, który steruje przeglądarką za pomocą Selenium, by odkryć powiązania generowane przez aplikację nawet po stronie klienta.
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.
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.
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.
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.
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.
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.
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)
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.
Ja się tylko obawiam żeby „nagle” za jakiś czas nie było stopu developmentu – tak jak w przypadku https://www.owasp.org/index.php/OWASP_WebScarab_NG_Project
O, alternatywa dla burp’a.
Generalnie świtne narzędzie w szczególności Fuzzery
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.
@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.
@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.
@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… ;)
@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.
@bl4de
Sprawdzę to, jak znajdę rozwiązanie to dodam tutaj i poproszę ms by zaktualizował tekst :)
@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ę ;)
A ja mam pytanie trochę z innej beczki. Co to za wtyczki do FireFoxa które widać na filmiku kolegi: http://www.youtube.com/watch?v=aQCrxwXdNOA
@OiSiS
Web Developer Toolbar :)
FF:
https://addons.mozilla.org/pl/firefox/addon/web-developer/
Chrome:
https://chrome.google.com/webstore/detail/web-developer/bfbameneiokkgbdmiekhjnmfkcnldhhm?hl=pl&utm_source=chrome-ntp-launcher
@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.
@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” :)
@bl4de
Coś dla Ciebie, łap: http://www.youtube.com/watch?v=0QT4YJn7oVI
innym też polecam, fajna sprawa.
@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.
@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
@Dan
Dzięki za odpowiedź. Też szukałem rozwiązania tego problemu na liście ZAP-a i też nie znalazłem… :/
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.
Słabialdo, nie da się zalogować :(((