Bezpieczeństwo nowoczesnych aplikacji internetowych
Transkrypt
Bezpieczeństwo nowoczesnych aplikacji internetowych
Bezpieczeństwo Gospodarka, finanse, administracja, wojsko, rozrywka: nowoczesnych aplikacji BitLock, BitCoins, Smile-to-Pay Cloud, Internet of Things internetowych Augmented Reality pojazdy autonomiczne inteligentne tworzywa dr inż. Michał Szychowiak http://www.cs.put.poznan.pl/mszychowiak © dr inż. Michał Szychowiak Web Bezpieczeństwo nowoczesnych aplikacji internetowych 2 Bezpieczeństwo nowoczesnych aplikacji internetowych 4 Web jako platforma operacyjna Content providers, social networks, game platforms Cloud Facebook CloudOS Google+ Joli OS MySpace ZeroPC Instagram xOS Netvibes mobile: Chrome OS, Firefox OS YouTube in browser: ZimDesk, iSpaces, SilveOS Digg Steam © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 3 © dr inż. Michał Szychowiak Technologie HTML, XML, XHTML, FBML, JavaScript, JSON, JSONP, E4X ŚRODOWISKO WYKONAWCZE HTTP, HTTPS, SOAP, XML-RPC RIA (Rich Internet Applications): Ajax, Flash frameworks: jQuery, Dojo, MooTools, WebGL, GWT, Adobe Flex, .... SOA (Service-Oriented Architecture) Web Services REST Bezpieczeństwo nowoczesnych aplikacji internetowych © dr inż. Michał Szychowiak 5 Technologia stara i dobrze znana? <img src=obrazek.png © dr inż. Michał Szychowiak © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 6 Technologia stara i dobrze znana? title="Game on" class=gui_img> Bezpieczeństwo nowoczesnych aplikacji internetowych <img 7 src=obrazek.png?parametr=">Game on"> © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 8 Encje Nowe encje nazwane nazwane: np. > definiowane dyrektywą <!ENTITY> kod ASCII (lub UTF): np. > > parsowane w kodzie strony oraz w adresach URL ! – co skutkuje możliwością ataku XXE (External XML Entity) <img src="http://serwer.org/obrazek.png"> <a href="javascript:alert(1)"> <?xml version="1.0"?> <!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <atack>&xxe;</atack> © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 9 Encje nie są parsowane w bloku <script> Bezpieczeństwo nowoczesnych aplikacji internetowych 10 © dr inż. Michał Szychowiak Ale w XHTML <script> nie zmienia trybu parsowania <script> <script> parametr='Tekst '+alert(1);'; parametr='Tekst '+alert(1);'; ... ... </script> </script> apostrof ! © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 11 © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 12 All input is evil! Niejednorodność zachowania przeglądarek zakoduj / podmień wszelkie potencjalnie niebezpieczne znaki (np. ' " , ; / 0x00–0x1F) zanim je wykorzystasz (prześlesz dalej) niestandardowe zachowanie utrudnia kontrolę Content-Disposition: attachment; filename="evil_file.exe;.txt" w nazwach plików (polu Content-Disposition) zamień na np. : _ narzędzia kontroli pobierania uznają to za plik .txt, ale np. IE przytnie nazwę do ‘;’ pola Location, Redirect – niebezpieczny jest ; znaki niełacińkie (diakrytyzowane) koduj % lub wg. RFC 2047, RFC 2231 w ciasteczkach wszystkie w/w znaki są niebezpieczne – najlepiej kodować base64 również popularne dokładanie „bezpiecznego” rozszerzenia do pobrań nic tu nie da filtruj adresy URL i najlepiej dopuszczaj tylko (zamieniaj na) bezwzględne nigdy nie zakładaj, że coś zostanie zakodowane bo tak nakazuje standard Bezpieczeństwo nowoczesnych aplikacji internetowych 13 © dr inż. Michał Szychowiak © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 14 Ogromne możliwości Problemy z kodowaniem adresu pełny dostęp do DOM (z uwzględnieniem SOP) http://wp.pl&p=123@167772161/ = ? http://[email protected]@o2.pl/ = ? document.body.children[4].children[0].style.color = "red"; document.images[7].src = "picture.jpg"; document.getElementsByTagName("input")[2].value = "Hello"; http://wp.pl / evil.org/ = ? document.getElementById("output").innerHTML = "Hello<br>"; frames[2].document.forms[1].pole1.value= "Hello"; top.location.path = "/new/page2.html"; \338 var window_handle = window.open("", "window_name"); © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 15 © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 16 Ogromne możliwości Sposoby dołączania kodu przesłonięcia nazw <script> ... </script> <script scr=... > <script> eval = alert; ... eval("Hello World!"); </script> javascript: onLoad=... onClick=... onError=... eval(...) setTimeout(...) setInterval(...) expression(...) © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 17 © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 18 Sposoby dołączania kodu wieloetapowe parsowanie kodu Analiza kodu <div onClick="setTimeout('fun(\'" + dane + "\')', 1000)"> © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 19 obfuscation, np. JScript.Encode © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 20 Wykrywanie zagrożeń Wykrywanie zagrożeń automatyczne samodzielne Cross-Site Scripting (XSS) / Remote File Inclusion (RFI) do parsowania JSON lepiej używać JSON.parse() zamiast eval() Cross-Site Cooking (XSC) przy dynamicznym tworzeniu kodu wystrzegać się danych pozyskanych z zewnątrz szczególnie funkcja eval() oczywiście równie niebezpieczna jest setTimeout() ... np. w przyp. HTML używać tylko bezpiecznych właściwości (innerText, textContent) i metod (createTextNode(), createElement(), appendChild()) unikać innerHTML czy document.write() © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 21 © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 22 Same-Origin Policy Caja/Cajita narzędzie Google do „przepisywania” kodu JavaScript Dokument źródłowy Docelowy zasób IE inne w celu zautomatyzowanego usunięcia niektórych podatności i zamknięcia aplikacji w wirtualnej piaskownicy (iFrame) http://foo.bar.com/a http://foo.bar.com/b Google Sites, Google Apps Script http://foo.bar.com/... http://www.foo.bar.com/... http://foo.bar.com/... https://foo.bar.com/... http://foo.bar.com:8080/... http://foo.bar.com/... wcześniej też MySpace i Yahoo! podobny projekt dla języka Java: Joe-E © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 23 © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 24 SOP i postMessage() rozluźnienie SOP postMessage(...) wysyła komunikat tekstowy do innego okna przy czym pozwala zdefiniować listę dozwolonych odbiorców document.domain document.domain = "bar.com" Dokument źródłowy http://foo.bar.com/... Docelowy zasób IE inne http://login.bar.com/... uwaga: otwiera SOP na wszystkie ∗.bar.com ! w szczególności katastrofalne będzie document.domain=".com" © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 25 SOP i postMessage() parent.postMessage("game=3", "https://foo.bar.com"); addEventListener("message", game_level, false); ... function game_level(msg) { if (msg.origin == "https://login.bar.com") { ... } } © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 26 SOP i XMLHttpRequest rozluźnienie SOP postMessage(...) wysyła komunikat tekstowy do innego okna przy czym pozwala zdefiniować listę dozwolonych odbiorców document.domain ignorowane var req = new XMLHttpRequest(); req.open('GET', 'http://foo.bar.com/foo.php?x=1', false); req.send(null); parent.postMessage("game=3", "https://foo.bar.com"); addEventListener("message", game_level, false); ... function game_level(msg) { if (msg.origin.indexOf(".bar.com") != -1 { ... } } © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 27 GET /foo.php?x=1 HTTP/1.0 Host: foo.bar.com Origin: http://funnygames.com żądanie jest wysyłane, ale SOP nie pozwoli przeczytać odpowiedzi chyba że serwer skorzysta z CORS © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 28 Cross-Origin Resource Sharing SOP i XMLHttpRequest dopuszczalne nagłówki: HTTP/1.0 200 OK ... Access-Control-Allow-Origin: http://funnygames.com Access-Control-Allow-Methods: POST, GET ... Content-Type Content-Language Last-Modified Expires Cache-Control Pragma ... uwaga na samobójcze Access-Control-Allow-Origin: ∗ stąd popularna stała się metoda weryfikacji pochodzenia: X-Custom © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 29 Podstawowe zagrożenie – DNS rebinding Bezpieczeństwo nowoczesnych aplikacji internetowych 30 iFrames atakujący kontroluje serwer DNS swojej domeny, np. gamecrack.com strona / aplikacja nawiguje do witryny gamecrack.com i dostaje adres IP z krótkim czasem TTL z witryny pobiera złośliwy skrypt, który chce zaatakować inną lokalizację, np. funnygames.com oczywiście SOP zabroni ... chyba że skrypt odwoła się do gamecrack.com, a kontrolowany serwer DNS zwróci tym razem adres IP celu (funnygames.com lub np. adres z sieci wewnętrznej ofiary) © dr inż. Michał Szychowiak © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 31 domyślna reguła ramek potomnych: ramki mogą nawigować między sobą tylko jeśli „pochodzą” (SOP) od wspólnego przodka nie wyklucza to wszystkich „międzyramkowych” zagrożeń (m.in. overlay iFrames, opaque iFrames, clickjacking, UI redressing) dodatkowe nagłówki HTTP: X_Frame-Options: same-origin X_Frame-Options: deny ramki w piaskownicy: <iframe src="..." sandbox="allow-same-origin"></iframe>; © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 32 Przydatne nagłówki HTTP WTYCZKI X-XSS-Protection: 1; mode=block X-Frame-Options: deny X-Frame-Options: allow-from: foo.bar.com Adobe / Shockwave Flash Microsoft Silverlight Content-Security-Policy: default-src 'self'; script-src https://∗.bar.com https://mi6.mil.uk; font-src https://fonts.bar.com; frame-src https://login.bar.com; img-src ...; media-src ...; object-src ...; ... © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 33 Java © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 34 Wtyczki wywołania Flash i Action Script <object data= ...> ActionScript wywodzi się z JavaScript <embed src= ...> stąd duże podobieństwo pw. bezpieczeństwa np.: dodatkowa funkcjonalność = dodatkowe zagrożenia, np. full screen <object data="game.swf" type="application/x-shockwave-flash"> <param name="param1" value="value1"> <param name="param2" value="value2"> ... </object> Content-Type: ignorowane, choć nie zawsze, co rodzi problemy © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 35 możliwość nawigacji w oknach przeglądarki (getURL(), navigateToURL()) wewnętrzny uproszczony parser HTML – możliwe przypisanie kodu (TextField.htmlText, TextArea.htmlText) – nie filtrowane daje potencjalną szansę na wstrzyknięcie np. złośliwych łączy © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 36 Flash i Action Script Flash i Action Script własny model polityki SOP własny model polityki SOP aplikacje Flash pobrane z funnygames.com otrzymują uprawnienia (w tym ciasteczka) do funnygames.com nawet gdy są osadzone na stronie gamecrack.com metoda Security.allowDomain("funnygames.com") uwaga na Security.allowDomain("∗") ! parametry znacznika <object> i <embed> a to strona osadzenia kontroluje sposób wykorzystania aplikacji <object ... AllowScriptAccess="sameorigin"> <object data="http://funnygames.com/img/avatar.png" type="application/x-shockwave-flash"> <object ... AllowScriptAccess="never"> <object ... AllowScriptAccess="full"> © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 37 Flash i Action Script © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 38 Flash i Action Script własny model polityki SOP własny model polityki SOP parametry znacznika <object> i <embed> parametry znacznika <object> i <embed> <object ... AllowFullScreen="false"> <object ... AllowNetworking="all"> <object ... AllowFullScreen ="true"> <object ... AllowNetworking="internal"> <object ... AllowNetworking="none"> © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 39 © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 40 Flash i Action Script Silverlight własny model polityki SOP łudzące podobieństwo do Flash loadPolicyFile("crossdomain.xml") crossdomain.xml → clientaccesspolicy.xml <cross-domain-policy> <allow-access-from domain="foo.bar.com"/> <allow-http-request-headers-from domain=" ∗.bar.com" headers="X-Game-Header,..." /> </cross-domain-policy> pozbawione wielu problematycznych elementów, np. parsera HTML brak Security.allowDomain, więc i Security.allowDomain("∗") za to jest RegisterScriptableObject(...) dodatkowe metareguły kontroli ładowania polityki ograniczenie ścieżki do /crossdomain.xml ograniczenie Content-Type: text/x-cross-domain-policy © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 41 Web Services © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 42 WEB SERVICES WebSphere SOA Suite Windows Communication Foundation © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 43 © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 44 Architektura SOA Uwierzytelnianie bezpośrednie S C C S HTTP: Basic, Digest, kryptograficzne (np. OAuth, Amazon AWS) SSL/TLS: X.509 REST-WS: S C Uwierzytelnianie pośrednie C HTTP: ciasteczka SOAP-WS: SAML S C C Bezpieczeństwo nowoczesnych aplikacji internetowych 45 © dr inż. Michał Szychowiak Bezpieczeństwo nowoczesnych aplikacji internetowych 46 © dr inż. Michał Szychowiak PDP SOAP WS-Security C © dr inż. Michał Szychowiak SOAP S Bezpieczeństwo nowoczesnych aplikacji internetowych 47 C © dr inż. Michał Szychowiak PEP SOAP PEP S Bezpieczeństwo nowoczesnych aplikacji internetowych 48