La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Copyright © 2007 - The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation.

Presentazioni simili


Presentazione sul tema: "Copyright © 2007 - The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation."— Transcript della presentazione:

1 Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License. The OWASP Foundation OWASP-Day Università La Sapienza Rome 10 th September Anti-Anti-XSS: bypass delle difese del browser Alberto Revelli Portcullis Computer Security

2 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy Senior Consultant per Portcullis Computer Security (Londra) Technical Director del chapter italiano di OWASP Co-autore della OWASP Testing Guide v.2.0 Sviluppatore del tool sqlninja - PROPOSITO DI ME...

3 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy CONTENUTI DELLA PRESENTAZIONE Contesto di riferimento Attacco a cookies httpOnly Attacco alla Same Origin Policy JS-less malware

4 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy CONTESTO DI RIFERIMENTO Per quanto il Cross Site Scripting sia una vulnerabilità che risiede lato server, negli anni gli sviluppatori di browser hanno implementato numerosi sistemi di difesa utili a proteggere il browser Tali sistemi di difesa, per quanto spesso concepiti più in generale per proteggere l'utente da siti ostili, garantiscono di riflesso una buona protezione anche contro attacchi di tipo XSS

5 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy CONTESTO DI RIFERIMENTO (cont.) Tra tali difese, ci concentreremo specificatamente su: Cookies httpOnly Same Origin Policy Possibilità di disabilitare JavaScript (es.: No-Script add-on di Giorgio Maone per Firefox) Come vedremo, utilizzare questi meccanismi può non essere sufficiente per evitare che un browser si tramuti nella porta di ingresso alla nostra rete

6 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy CONTENUTI DELLA PRESENTAZIONE Contesto di riferimento Attacco a cookies httpOnly Attacco alla Same Origin Policy JS-less malware

7 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy Cookies httpOnly Introdotti da Microsoft nell'Ottobre 2002 con Internet Explorer 6 sp1 Vieta al codice JavaScript di accedere all'oggetto document.cookie anche se si trova nello stesso dominio Feature disponibile anche su Firefox, grazie all'omonimo add-on pubblicato da Stefan Esser https://addons.mozilla.org/en- US/firefox/addon/3629https://addons.mozilla.org/en- US/firefox/addon/3629 Esempio: Set-Cookie: ID= e1fd4f1d; expires=Mon, 24-Aug :11:21 GMT; path=/; domain=.victim.com; httpOnly

8 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy Esempio: cookie standard

9 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy Esempio: cookie httpOnly

10 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy TRACE HTTP METHOD Nel 2003, Jeremiah Grossman pubblica un paper introducendo la tecnica del Cross Site Tracing per catturare anche i cookie marcati httpOnly Tale tecnica usa il metodo TRACE, specificato nella RFC 2616 (HTTP/1.1) Tale metodo genera un semplice eco della richiesta al web server e viene utilizzato in ambito di debug,

11 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy ~ $ telnet 80 Trying Connected to owasp.org. Escape character is '^]'. TRACE /test.html HTTP/1.0 Header1: Value1 Cookie: abcde12345 HTTP/ OK Date: Sat, 01 Sep :09:26 GMT Server: Apache/2.2.2 (Fedora) Connection: close Content-Type: message/http TRACE /test.html HTTP/1.0 Header1: Value1 Cookie: abcde12345 Connection closed by foreign host. TRACE HTTP METHOD (ESEMPIO) Il valore del cookie e' incluso nella risposta, che e' accessibile via JS

12 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy OK, MA NELLA PRATICA ? Il problema e' ovviamente a questo punto come costringere il browser della vittima ad effettuare un TRACE. I metodi, per fortuna, non mancano: ActiveX XMLHttpRequest Java Flash function sendTrace() { var req = new ActiveXObject("Microsoft.XMLHTTP"); req.open("TRACE","/",false); req.send(); alert(req.responseText); }

13 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy ANTI-XST Come detto, questo tipo di attacco non e' affatto recente, e negli anni sono state introdotte delle contromisure: Lato server, disabilitazione del metodo TRACE Lato client, divieto ai browser di utilizzare tale metodo Contemporaneamente però, sono state individuate altrettante contro-contromisure

14 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy ANTI-ANTI-XST Atto 1: Il Server non supporta TRACE Proxy Server Che succede se l'utente utilizza un proxy, come succede per quasi tutti gli utenti in ambito corporate ? Quanti amministratori ad oggi disattivano questo metodo sui loro proxy ? function sendTrace() { var req = new ActiveXObject("Microsoft.XMLHTTP"); req.open("TRACE","/",false); req.setRequestHeader("Max-Forwards","0"); req.send(); alert(req.responseText); } Web Server TRACE Cookie

15 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy ANTI-ANTI-XST Atto 2: Il browser vieta TRACE Storicamente, gli sviluppatori non sono mai molto precisi nel filtrare tutti i modi possibili per passare una certa stringa function sendTrace() { var req = new ActiveXObject("Microsoft.XMLHTTP"); req.open("\r\nTRACE","/",false); req.send(); alert(req.responseText); } La presenza di \r\n è esplicitamente consentita dalla RFC 2616 (sezione 4.1) Microsoft ha da poco fissato questo specifico bug, ma è verosimile che altri vettori di attacco siano tuttora possibili

16 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy ANTI-ANTI-XST: \r\n su IE6.0 sp2

17 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy CONTENUTI DELLA PRESENTAZIONE Contesto di riferimento Attacco a cookies httpOnly Attacco alla Same Origin Policy JS-less malware

18 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy SAME ORIGIN POLICY: BACKGROUND Netscape introduce la Same Origin Policy con Navigator 2 Gli script caricati da una origine non possono accedere agli oggetti provenienti da una diversa origine Tale origine comprende protocollo, hostname e porta La S.O.P. non tiene in considerazione l'indirizzo IP Con l'introduzione di JavaScript, sono stati subito chiari agli sviluppatori i rischi legati all'esecuzione, sul browser degli utenti, di codice passato da un web server non necessariamente fidato Particolare rilievo è stato dato all'eventualità che il codice del sito A possa in qualche modo accedere ad elementi relativi al sito B: un malicious site potrebbe provare a catturare i cookie di altri siti

19 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy XSS: L'ANTI - SAME ORIGIN POLICY Un attacco di Cross Site Scripting, andando ad iniettare codice JavaScript all'interno del sito vulnerabile, fa in modo che tale codice sia eseguito all'interno della sua stessa origin, rendendo inefficace quindi la Same Origin Policy e quindi accedendo agli oggetti della pagina stessa (es.: document.cookie). Il codice JavaScript è comunque in grado di creare nuove connessioni verso altri domini, ma non sarà in grado di accedere alle risposte. Uno degli obiettivi dei bad guys è pertanto quello di aggirare questa limitazione, in maniera che del malware caricato dal sito A sia in grado di attaccare il sito B, trasformando quindi il browser della vittima in un open proxy a disposizione dell'intruso Il fatto che la S.O.P. faccia riferimento a hostnames e non ad indirizzi IP suggerisce gia' una possibile strada: DNS !

20 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy GIOCANDO CON IL TTL DEL DNS... Evil.com DNS Server Evil.com Web Server x.x.x.x Internal Server y.y.y.y Scopo del gioco: con un malicious JS all'indirizzo x.x.x.x, attaccare il web server all'indirizzo y.y.y.y Il JavaScript puo' essere eseguito dalla vittima tramite un XSS su un sito 'trusted', inserendo il codice in un IFRAME invisibile

21 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy GIOCANDO CON IL TTL DEL DNS... Evil.com DNS Server Evil.com Web Server x.x.x.x Internal Server y.y.y.y La vittima, tramite un XSS, richiede il codice JS su Per fare questo, ha bisogno di risolvere tale indirizzo e manda pertanto una query DNS al server autoritativo per quel dominio

22 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy GIOCANDO CON IL TTL DEL DNS... Evil.com DNS Server Evil.com Web Server x.x.x.x Internal Server y.y.y.y Il DNS Server risponde passando l'indirizzo x.x.x.x Il TTL della risposta però viene settato a pochi secondi

23 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy GIOCANDO CON IL TTL DEL DNS... Evil.com DNS Server Evil.com Web Server x.x.x.x Internal Server y.y.y.y La vittima carica il codice JavaScript, associato al dominio evil.com Tale codice, resta in attesa qualche secondo, attendendo che l'indirizzo x.x.x.x venga cancellato dalla cache. Poi richiede una nuova connessione a

24 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy GIOCANDO CON IL TTL DEL DNS... Evil.com DNS Server Evil.com Web Server x.x.x.x Internal Server y.y.y.y La vittima contatta ancora il DNS di evil.com, che questa volta risponde con l'indirizzo y.y.y.y

25 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy GIOCANDO CON IL TTL DEL DNS... Evil.com DNS Server Evil.com Web Server x.x.x.x Internal Server y.y.y.y y.y.y.y viene quindi associato a evil.com, e il JavaScript può ora accedere alla sua risposta Nella realtà non funziona, o almeno non funziona in maniera così semplice, a causa del DNS Pinning

26 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy DNS PINNING I browser più comuni si difendono contro attacchi come quelli appena visti attraverso una tecnica chiamata DNS Pinning Tale tecnica consiste nell'associare un hostname ad un indirizzo IP per l'intera sessione, indipendentemente dal TTL della risposta del DNS Server Il problema però non e' stato del tutto risolto. La maggior parte delle implementazioni del DNS Pinning può essere tuttora aggirata. Ad esempio, in Explorer 7 è sufficiente indicare entrambi gli indirizzi IP nella risposta del DNS, e poi rendere il primo non disponibile: il browser comincerà ad utilizzare per le richieste successive il secondo IP (quello della vittima) Un elevato potenziale di attacco, risiede inoltre nel fatto che vari plug-in (es.: Java, Flash) utilizzano un DNS Pinning indipendente da quello del browser

27 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy ESEMPIO: ANTI-DNS PINNING VIA LIVE CONNECT LiveConnect is a feature of Web browsers that allows Java and JavaScript software to intercommunicate within a Web page. It allows JavaScript to invoke applet methods, or to access the Java runtime libraries (http://en.wikipedia.org/wiki/LiveConnect)http://en.wikipedia.org/wiki/LiveConnect Consente quindi ad uno script di accedere alle librerie Java Il browser scarica il malicious script da ed effettua il pinning di questo dominio all'indirizzo IP del web serverwww.evil.com Lo script utilizza LiveConnect per avviare una JVM e aprire una socket La socket cerca di connettersi a ma poichè essa non utilizza il pinning del browser, effettua una nuova richiesta DNSwww.evil.com Il DNS Server di evil.com risponde con l'indirizzo IP della vittima, e lo script è in grado di attaccare tale host.

28 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy POSSIBILI APPLICAZIONI È possibile attaccare server della intranet che sarebbero altrimenti inaccessibili dall'esterno. David Byrne ha mostrato una demo all'ultima BlackHat conference in cui, dall'esterno, ha lanciato con successo un exploit contro un web server di una intranet Intranet Hacking Attaccando numerosi browser contemporaneamente, è possibile effettuare attacchi di click frauding. Cinque ricercatori dell Stanford University, con un semplice ad su Internet del prezzo di 100$, sono stati in grado di controllare circa indirizzi IP Botnets

29 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy CONTENUTI DELLA PRESENTAZIONE Contesto di riferimento Attacco a cookies httpOnly Attacco alla Same Origin Policy JS-less malware

30 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy L'ULTIMA LINEA DI DIFESA: STATIC BROWSING In tutti gli scenari visti finora, è sempre stato necessario eseguire codice (Java o JavaScript) sul browser della vittima A fronte di questi rischi, è possibile disabilitare completamente tali linguaggi per i siti non fidati (es.: No-Script plugin) Se è vero che questo riduce in maniera considerevole la superficie di attacco, è altrettanto vero che alcune peculiarità con cui ogni browser effettua il parsing di una pagina web sono sufficienti per aggirare in parte il problema Come proof-of-concept, vediamo come creare una pagina html completamente statica che, visualizzata dalla vittima, effettua un portscanning di un host della sua rete interna e ci invia i risultati

31 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy BACKGROUND: FIREFOX & HTML tag This element defines the relationship between two linked documents Firefox interrompe il parsing del documento finchè la richiesta HTTP a non è stata completata Il tempo necessario per tale richiesta varia a seconda che l'host esista o meno, e a seconda che la connessione avvenga su una porta aperta o chiusa

32 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy ESEMPIO 1: HOST SCANNER Per ogni host, viene effettuata una connessione. Tale connessione viene conclusa subito se l'host risponde. Con un timeout in caso contrario Per ogni host, viene fatta una connessione al nostro server. Gli intervalli di tempo ci dicono quali host hanno risposto e quali no Credit a Jeremiah Grossman per l'idea :)

33 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy.... [04/Sep/2007:22:16: ] "GET /scan.html HTTP/1.1" [04/Sep/2007:22:17: ] "GET /?ip= HTTP/1.1" [04/Sep/2007:22:17: ] "GET /?ip= HTTP/1.1" [04/Sep/2007:22:18: ] "GET /?ip= HTTP/1.1" [04/Sep/2007:22:18: ] "GET /?ip= HTTP/1.1" [04/Sep/2007:22:19: ] "GET /?ip= HTTP/1.1" [04/Sep/2007:22:20: ] "GET /?ip= HTTP/1.1" ESEMPIO 1: HOST SCANNER Come si vede dal log, ogni host impiega svariati secondi a rispondere, tranne il , che quindi è attivo !

34 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy ESEMPIO 2: PORT SCANNER Per creare un port scanner, dobbiamo però risolvere 2 ulteriori problemi: Se porta è aperta, il impiegherà un tempo molto lungo per andare in timeout. Bisogna quindi riuscire a parallelizzare lo scan, pur continuando a sfruttare il blocco del parsing di Firefox Firefox, come misura di sicurezza, non consente connessioni a moltissime porte (22, 53, 110,...). Come riuscire a scansionarle ? Per il primo problema, basta usare gli IFRAME: ognuno di essi si occupa indipendentemente di una porta diversa E per il secondo, il workaround è semplice: non è consentito, ma ftp://x.x.x.x:22 sì !http://x.x.x.x:22ftp://x.x.x.x:22

35 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy ECCO IL NOSTRO PORT SCANNER! Il file principale...

36 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy.... [04/Sep/2007:23:00: ] "GET /?port=444 HTTP/1.1" [04/Sep/2007:23:00: ] "GET /?port=445 HTTP/1.1" [04/Sep/2007:23:00: ] "GET /?port=446 HTTP/1.1" [04/Sep/2007:23:00: ] "GET /?port=442 HTTP/1.1" [04/Sep/2007:23:00: ] "GET /?port=443 HTTP/1.1" [04/Sep/2007:23:00: ] "GET /?port=444-closed HTTP/1.1" [04/Sep/2007:23:00: ] "GET /?port=446-closed HTTP/1.1" [04/Sep/2007:23:00: ] "GET /?port=442-closed HTTP/1.1" ESEMPIO 2: PORT SCANNER Ed ecco il risultato sul log del nostro webserver ! Le porte 443 e 445 sono aperte (un IIS ?)

37 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy Le numerose difese a disposizione degli utenti, pur limitando fortemente il rischio, non risolvono il problema Un malintenzionato con sufficienti skill e determinazione e' in grado di sfruttare un XSS per attaccare anche i browser piu' protetti Una visita di un utente al sito sbagliato, e un intruso può avere un accesso interattivo nella rete interna...MORALE ?

38 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy LINKS

39 OWASP-Day – La Sapienza, 10 th Sep 07 OWASP Italy This presentation has been created using Open Source software only


Scaricare ppt "Copyright © 2007 - The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation."

Presentazioni simili


Annunci Google