201105 owasp fuzzing interpretera php
TRANSCRIPT
![Page 2: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/2.jpg)
$ whoami
STUDENT
2010 2011
GSoC STUDENT
WSPÓŁPRACUJĘ Z
MATEUSZ KOCIELSKIhttp://shm.nation.pl/http://digitalsun.pl/[email protected]
PUBLIKACJE
PROJEKTY
![Page 3: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/3.jpg)
Plan wykładu● Automatyczne wyszukiwanie błędów● Analiza statyczna, analiza dynamiczna● Krótki wstęp do fuzzingu● Język PHP● Minerva● Wykorzystywanie podatności intepretera
●
● Przyszłość projektu
![Page 4: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/4.jpg)
Automatyczne wyszukiwanie błędów
● Dlaczego automatycznie?● Jesteśmy leniwi...● Niskie koszty (koszt napisania + analiza
znalezionych podatności)● Oszczędność czasu (lub innych zasobów)
![Page 5: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/5.jpg)
REWELACJA...ale...
●...czy automat potrafi tyle ile człowiek?●…czy da się taki automat zbudować? Jeżeli tak, to jak?●….czy to wszystko oznacza, że przestaniemy być potrzebni?
![Page 6: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/6.jpg)
Automat idealny
● Wczytuję inny program● Znajduję WSZYSTKIE błędy● Generuję ładny kolorowy raport
![Page 7: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/7.jpg)
JAK GO ZBUDOWAĆ?
![Page 8: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/8.jpg)
NIEROZSTRZYGALNOŚĆ● Istnieją problemy nierozstrzygalne (tzn. takie, których nie można rozwiązać przy pomocy algorytmu)
● Problem stopu (czy dany program się zatrzymuje?)
● Bazując na teorii mocy można się szybko przekonać o tym, że Turing ma rację
● Redukcja naszego problemu do problemu stopu ALAN TURING (1912-1954)
![Page 9: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/9.jpg)
NIE JEST ŹLE!
● Możemy budować automaty „prawie” idealne (takie, które się czasem mylą)
… a co najważniejsze ...
● Możemy czuć się potrzebni!!!
![Page 10: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/10.jpg)
RODZAJE ANALIZ
ANALIZA STATYCZNA
● Badamy statyczne obiekty
● Przykład:
Analizujemy źródła w poszukiwaniu wywołań printf, w których ciąg formatujący
pochodzi od użytkownika.
ANALIZA DYNAMICZNA
● Badamy działające obiekty
● Przykład:
Podpinamy się pod wywołania funkcji malloc(), free() i badamy czy program nie próbuje zwolnić dwa razy tej samej
pamięci.
![Page 11: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/11.jpg)
ANALIZA STATYCZNA
● clang● splint● klocwork● lint ● …
![Page 12: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/12.jpg)
ANALIZA DYNAMICZNA
● Valgrind● dmalloc● SPIKE● ...
![Page 13: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/13.jpg)
FUZZING
● Metoda analizy dynamicznej polegająca na karmieniu programu losowymi danymi i badaniu jego zachowania (np. przy użyciu innych narzędzi analizy dynamicznej)
● Dobrym wyznacznikiem tego, że dzieje się coś złego może być naruszenie ochrony pamięci
● Metodę zaproponował prof. Barton Miller● Jak przeszukiwać wykładniczą przestrzeń?
![Page 14: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/14.jpg)
JAK ZAPRZYJAŹNIĆ SIĘ Z FUZZINGIEM?
● Uwierzyć, że działa!● Dobrym dowodem są fuzzery napisane przez
DigitalDwarf.be (pokonały m.in.. OpenBSD, irssi...)
● Nauczyć się teorii prawdopodobieństwa● Użyć mądrej metody generowania danych:
● Algorytmy ewolucyjne● Gramatyki bezkontekstowe● Więzy● Whitebox fuzzing
![Page 15: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/15.jpg)
JĘZYK PHP
[…] PHP - obiektowy, skryptowy język programowania zaprojektowany do generowania stron internetowych w czasie rzeczywistym […]
źródło: Wikipedia
„PHP jest prawie tak ekscytujący jak szczoteczka do zębów. Używasz go codziennie, odwala za ciebie robotę, jest prostym narzędziem, więc? Kto chciałby poczytać o szczoteczkach?”
Rasmus Lerdorf
![Page 16: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/16.jpg)
JĘZYK PHP
● Dynamicznie typowany● Każda funkcja ma jakiś typ:
● string * int → string● str_repeat(55, "foo"); → PHP Warning: str_repeat()
expects parameter 2 to be long, string given in - on line...
![Page 17: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/17.jpg)
JĘZYK PHP
● Wsparcie dla popularnych serwerów HTTP● apache, apache2, thttpd● cgi, fcgi● cli
![Page 18: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/18.jpg)
CIEKAWOSTKA
● for(;!$x;); - 11 znaków● PHP 5.3.6 with Suhosin-Patch (cli) (built: Apr 18
2011 11:14:25)
$ php -d max_execution_time=1 bla.php 2> /dev/null
*** glibc detected *** php: double free or corruption (fasttop): 0x093cf758 ***
![Page 19: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/19.jpg)
PHP popularność
● 25% httpd apache deklaruje, że używa PHP● z tego 25% używa patcha Suhosin
25%<
![Page 20: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/20.jpg)
MINERVA
● Fuzzer interpretera PHP● Licencja BEERWARE● Napisany w PYTHONIE● Łatwa konfiguracja● Duża elastyczność
(możliwe dokładanie własnych funkcji)
● Oficjalna wersja 1.0
![Page 21: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/21.jpg)
POPRZEDNIE PRÓBY FUZZOWNIA INERPETERA
● Fusil, Lixam● Weź losową ilość losowych danych i zaaplikuj do
losowej funkcji
● PFF● Na podstawie dostarczonego szablonu zbuduj
losowe wywołania (typy ograniczone do napisów i liczb)
● Powyższe fuzzery miały swoje 5 minut chwały:● Lixam znalazł jednego buffer overflowa...● ...a w PFF znaleziono błąd :-))
![Page 22: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/22.jpg)
JAK DZIAŁA MINERVA?
![Page 23: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/23.jpg)
CO UDAŁO SIĘ ZNALEŹĆ?
● Use-after-free (sqlite)● Double free (imap)● Integer overflow (calendar)● Buffer overrun (mbstring)● ...inne (fnmatch, stream x 2, openssl)● …i wiele (jeszcze) nieopublikowanych błędów
![Page 24: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/24.jpg)
JAK WYKORZYSTAĆ BŁĘDY W INTEPRETERZE
● Błędy związane z zarządzniem pamięcią (use-after-free, double free)● PHP ma własny alokator pamięci, który jest
zorganizowany w kolejki FIFO przechowujące kawałki pamięci o danej wielkości
● Alokator ma zabezpieczenia... ale standardowo są one wyłączone (ze względu na narzut czasowy)
![Page 25: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/25.jpg)
CZYLI
0.001DAY
![Page 26: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/26.jpg)
STACK BUFFER OVERFLOW W MODULE SOCKET
● błąd w funkcji socket_create:● W obsłudze socketów typu AF_UNIX
[…]
memcpy(&s_un.sun_path, addr, addr_len);
[…]
![Page 27: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/27.jpg)
JAK GO WYKORZYSTAĆ?
● Do próby unieruchomienia serwera● Do zrzucenia sobie shella● Do zmuszenia httpd, żeby serwował treść, którą
sobie życzymy!
![Page 28: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/28.jpg)
SZCZEGÓŁY ATAKU
● Dziękuję n1x0nowi i s1m0nowi za pomoc w przygotowaniu działającego exploita
● Jak zmusić Apache do serwowania własnej treści?● ap_run_handler() → _hooks()● Sam złośliwy uchwyt może zawierać tylko
wywołanie funkcji ap_rputs()
● Musimy zadbać o „normalny” powrót do interpretera PHP (zend_try, zend_catch wykorzystuje long/set_jmp)
● Skąd wziąć pamięć na własny uchwyt?
![Page 29: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/29.jpg)
PLAN ATAKU
socket_connect()
SHELLCODE
HOOKS
EVIL HANDLER
![Page 30: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/30.jpg)
POTENCJALNE PROBLEMY
● ASLR● SSP● PIE● Skąd wziąć adres ar_rputs i tablicy _hooks?
![Page 31: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/31.jpg)
DEMO
![Page 32: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/32.jpg)
Jak się zabezpieczyć?● Wyłączyć moduł socket w PHP● Naprawić błąd (dołożyć warunek sprawdzający
czy nie próbujemy skopiować zbyt wiele pamięci)
● SSP posiadające __memcpy_chk eliminuje problem
● Użyć disabled_functions
![Page 33: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/33.jpg)
CO DALEJ?●PHP jest językiem obiektowym (aktualnie Minerva w żaden sposób z tego nie korzysta)
●Generowanie bardziej skomplikowanych programów
●Pomiar pokrycia kodu przy pomocy gcov
●Obsługa innych języków (MinervaJS)
●Przetestowanie modułów FTP, MySQL itp.
●Przeprojektowanie (OCaml)
![Page 34: 201105 OWASP Fuzzing interpretera PHP](https://reader033.vdocuments.pub/reader033/viewer/2022052321/55682bf1d8b42ab7198b4b71/html5/thumbnails/34.jpg)
Q&A