Bezpieczeństwo internetowych Marek Zachara http://marek.zachara.name 1/23
Aplikacje internetowe znajdują się pod ciągłym 'ostrzałem' Jest to wynikiem skali: ponad 3 mld użytkowników sieci 900 mln 'hostnames' 200 mln 'active' 5 mln 'PCs' 2/23
Ataki można podzielić na dwie główne klasy Ataki na użytkowników Ataki na system Przykłady Przykłady XSS DoS CSRF Code Injection Phishing Buffer Overflow 3/23
OWASP TOP 10 A1 : Injection A2 : Broken Session and Authentication A3 : Cross Site Scripting A4 : Insecure Direct Object References A5: Security Misconfiguration A6 : Sensitive Data Exposure A7 : Missing Function Level Wstrzyknięcia danych do SQL, OS, LDAP i innych interpreterów Błędne mechanizmy np. identyfikatorów sesji, kluczy, haseł itp. Przyjęcie i przesłanie do innego wadliwych danych (skryptu) Istnienie publicznie dostępnych odwołań do wewnętrznych obiektów Konfiguracja serwera, algorytmów szyfrowania, firewall i itp. Brak wzmocnionej ochrony dla szczególnie istotnych danych (np. karty) Nieprawidłowe mechanizmy autoryzacji (np. oparte na GUI) A8 : Cross Site Request Forgery Wykorzystanie i jego np. danych sesji (bez ich poznania) A9 : Components with Known Vulnerabilities Korzystanie z bibliotek i algorytmów zawierających znane podatności A10: Unvalidated Redirects and Forwads Użycie niezaufanych danych do przekierowania page flow Source: https://www.owasp.org/index.php/category:owasp_top_ten_project 4/23
HTTP jest protokołem bezpołączeniowym Nie pozwala na identyfikację kolejnych zapytań Problem jest rozwiązywane przez użycie 'Identyfikatora Sesji' (ang. SID) Generowany (zwykle losowo) przy pierwszym połączeniu Identyfikuje zapytania Przekazywany przez cookies, pola input lub jako parametry URL i Obsługiwany automatycznie przez framework i i języki programowania WWW 5/23
Jak działa sesja HTTP 6/23
Identyfikator sesji jest JEDYNYM elementem identyfikującym zapytania. Główne klasy to: Session sniffing Podsłuchanie ID sesji Session fixation Wymuszenie ID sesji Session riding Wykorzystanie cudzej sesji 7/23
Metody podsłuchania identyfikatora sesji Przechwycenie ruchu TCP/IP Podsłuchanie komunikacji WiFi Ataki na protokół BGP, DNS, itp. Odczyt SID na komputerze 8/23
Wymuszenie sesji Session Fixation = Atakujący generuje SID Następnie przekazuje SID ofierze I przekonuje do zalogowania do serwisu z tym SID em Dzięki temu może korzystać z serwisu tak jak ofiara ataku 9/23
Session Raiding / Cross Site Request Forgery <img src= http://server/order?product=12&deliver=my@email... Ofiara otwiera spreparowaną stronę WWW w trakcie gdy jest zalogowana do serwisu Kod HTML tej strony skutkuje zapytaniem do serwisu Przeglądarka dołącza do zapytania ciasteczko z SID 10/23
Cross Site Scripting (XSS) <script>...</script> Uruchomienie skryptu, przesłanie danych Portal / Blog 11/23
Atak na protokół: DNS Spoofing Serwer Banku 198.23.12.1 www.mojbank.pl router 198.23.12.1 Prawidłowy serwer DNS 123.01.20.10 240.190.99.2 Serwer DNS 240.190.99.1 Serwer WWW 240.190.99.2 12/23
Bezpośrednie aplikacje internetowe Uzyskanie dostępu do zasobów serwera: Bazy danych Strony WWW (publikacja malware) Kluczy, haseł i danych autoryzacyjnych Innych elementów sieci lokalnej Może być etapem pośrednim w ataku złożonym (wielostopniowym) 13/23
SQL Injection niechlubny zwycięzca Login: admin Password: ' OR 1==1; ' SELECT id FORM users WHERE login = ' ' $_POST[ login ] AND password = ' $_POST[ password ]' Zwróci z reguły pierwszy wiersz tabeli! 14/23
Inne przykłady 'Code Injection' PHP (ASP/JSP) LDAP OS/Shell Generalnie, przekazanie do wykonania parametrów w formie string jest Bardzo Złym PomysłemTM <? include($_get['section'])?> admin.php http://phishsite.mebad/../../../../../etc/passwd <input type= hidden name= user_id value= 34 > 15/23
Przykład ataku parameter tampering" www.exploit db.com/exploits/14360 http://mydomain/mystruts.action? ('\u0023_memberaccess[\'allowstaticmethodaccess\']') (meh)=true&(aaa) (('\u0023context[\'xwork.methodaccessor.denymethodexecution\' ]\u003d\u0023foo')(\u0023foo\u003dnew %20java.lang.Boolean("false")))&(asdf)(('\u0023rt.exit(1)') (\u0023rt\u003d@java.lang.runtime@getruntime()))=1 Wykorzystuje kodowanie znaków specjalnych przy pomocy kodów UTF Pozwala na uruchomienie arbitralnego kodu w Java z prawami web server a 16/23
Forceful browsing Ręczne wybranie ścieżki lub zasobu Przeglądanie katalogów /some_hidden_dir/ Ominięcie elementu procesu /form5.asp Kod źródłowy strony/obiektu /index.php.bak 17/23
Ataki Denial of Service 'Zalanie' serwera wieloma zapytaniami Zapytania szczególnie obciążające zasoby Awaria serwera / Szczególne przypadki Blokowanie kont Programowy 'shutdown' Samo blokada (log forging, IDS) Archetyp: black fax 18/23
Distributed DoS (DDoS) Atak prowadzony z wielu źródeł Sumaryczna przepustowość/wydajność klientów większa od serwera Exploit technologii / protokołu: amplification attack Skąd brać grupy komputerów do prowadzenia ataku: Wolontariusze (akcje społeczne) Bot nety 19/23
Slow Loris GET http://www.someserver.co/ HTTP/1.1 Host: www.someserver.co Connection: keep alive User Agent: Mozilla/5.0 X my: a X my: a X my: a X my: a X my: a X my: a X my: a 20/23
RUDY are you Dead Yet? POST http://www.someserver.co/ Host: www.someserver.co Connection: keep alive Content Length: 1000000 User Agent: Mozilla/5.0 login: xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 21/23
XML Bomb (billion laughs) Atak na parser XML (lub inne parsery) Przykładowy kod: <!ENTITY lol1 'lol'> <!ENTITY lol2 '&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;'> <!ENTITY lol3 '&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;'> <!ENTITY lol4 '&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;'> Powoduje stworzenie dużej ilości instancji (np. miliard) podstawowego obiektu (lol) Kod XML jest poprawny exploit specyfikacji 22/23
Dziękuję za uwagę. Pytania? Dokument udostępniany na licencji Creative Commons Wykorzystane materiały: Clipart openclipart.org Internet map The Opte Project Elementy licencjonowane (royalty free), nie mogą być wykorzystywane oddzielnie: Tło slajdów (background) oraz ikony osób ('awatary') więcej informacji: http://marek.zachara.name Attribution Share Alike 23/23