Negli ultimi anni la disponibilità di Browser sempre più avanzati e le grandi capacità di calcolo dei Client hanno portato all’attenzione della comunità di sicurezza una serie di attacchi o tecniche che hanno come bersaglio principale l’utente dell’applicazione. I vendor e organizzazioni come IEFT e W3C hanno considerato opportuna l’implementazione di alcune protezioni attivabili tramite Header HTTP.
Gli header devono essere configurati per non rilasciare le informazioni, ottimizzare cache e codifica. Di contro manipolando direttamente i pacchetti HTTP è possibile alterare anche le risposte dell’applicazione o il suo funzionamento. Durate il talk analizzeremo attacchi come l’UI Redressing / HTTP Response Splitting, HTTP Verb Tampering e molto altro.
6. Agenda
Introduzione
!
Come
si
sono
evolute
le
minacce…
…e
il
perchè
degli
HTTP
Security
Headers?
!
HTTP
Request
e
HTTP
Response
!
Gli
HTTP
Security
Header
!
Conclusioni
7. Come
si
sono
evolute
le
minacce
nel
tempo
e
perchè
sono
importan3
gli
HTTP
Header
12. HTTP
Request
e
Response
HTTP Request
Method <SP>
URI
<SP> Protocol
HTTP Response
Protocol <SP>
Code
<SP>
<CR> <LF>
<CR> <LF>
Header: Value
Header: Value
<CR> <LF>
<CR> <LF>
Header: Value
Header: Value
<CR> <LF>
<CR> <LF>
Header: Value
Explanati
on
Header: Value
<CR> <LF>
<CR> <LF>
Body
<CR> <LF>
<CR> <LF>
Body
13. HTTP
Request
-‐
Method
• Quali
sono
i
metodi
che
l’applicazione/il
web
server
acce)ano?
Quali
sono
correN?
HTTP
Verb
Exploit
/
Tampering
• GET
• POST
• PUT
(operazioni
sui
file)
• DELETE
(operazioni
sui
file)
• TRACE
(rifle)ere
parametri)
• CONNECT
(usare
l’host
come
proxy)
• ANTANI
(???)
• Come
lo
verifico?
curl -kis -X METHOD -v http://onofri.org/
15. HTTP
Request
-‐
URI
• Al
ne)o
della
Data
Validaon
come
la
conosciamo,
un
aspe)o
interessante
a
livello
più
basso
è
come
i
parametri
possono
essere
intepreta.
Possono
essere
inquina,
per
bypassare
dei
filtri
o
altro?
Si
con
la
HTTP
Parameter
Pollu3on.
• Come
lo
verifico?
curl -kis http://onofri.org/path.php?
parametro=valore1¶metro=valore2
16. HTTP
Request
-‐
URI
(es.)
Web
Applica3on
Server
Cosa
viene
processato?
ASP.NET
/
IIS
Tu)e
le
occorrenze,
concatenate
da
una
virgola
ASP
/
IIS
Tu)e
le
occorrenze,
concatenate
da
una
virgola
PHP
/
Apache
L’ulma
occorrenza
PHP
/
Zeus
L’ulma
occorrenza
JSP
/
Servlet
/
Tomcat
La
prima
occorrenza
JSP
/
Servlet
/
Oracle
AS
10g
L’ulma
occorrenza
JSP
/
Servlet
/
Je)y
L’ulma
occorrenza
IBM
Lotus
Domino
L’ulma
occorrenza
IBM
HTTP
Server
La
prima
occorrenza
mod_perl
/
libpareq2
/
Apache
La
prima
occorrenza
Perl
CGI
/
Apache
La
prima
occorrenza
mod_wsgi
(Python)
/
Apache
La
prima
occorrenza
Python
/
Zope
Tu)e
le
occorrenze
se
le
meNamo
come
lista
param=[‘valore1’,
‘valore2’]
17. HTTP
Request
-‐
Version
• A)ualmente
ulizziamo
il
protocollo
HTTP
nelle
sue
due
versioni.
HTTP/
1.0
e
HTTP/1.1.
e
sta
per
uscire
HTTP/2.0
• Tra
le
differenze
principali
che
ci
possono
interessare
è
la
presenza
di
vhost
!
• Come
lo
verifico?
curl -kis —http1.0 -H “Host: onofri.org” http://
67.222.36.105
curl -kis —http1.1 -H “Host: onofri.org” http://
67.222.36.105
18. HTTP
Request
-‐
Header
• Nonostante
nei
browser
non
vediamo
gli
header,
anche
solo
l’invio
di
ques
può
modificare
completamente
il
comportamento
del
server
e/o
dell’applicazione.
• Cookie
(Data
Validaon)
• Authorizaon
(Basic
Authencaon)
• Host
(già
visto)
• Origin
(lo
vediamo
dopo)
• Upgrade
(cambio
di
protocollo)
• Via
(Data
Validaon,
Non
Repudiaon)
• User-‐Agent
(Data
Validaon)
• Referer
(Data
Validaon,
Autorizzazione)
• Inoltre
possiamo
ulizzare
diversi
a)acchi
manipolando
gli
header
anche
per
quesoni
di
DoS
(es.
Slowloris)
20. HTTP
Response
-‐
Protocol
/
Code
/
Explana3on
• Possiamo
capire
come
ci
risponde
il
server
a
livello
di
protocollo
e
codice
(parcolarmente
ule
se
manipoliamo
l’header)
• Da
qui
possiamo
o)enere
molte
informazioni
sui
codici
di
errore
per
capire
come
si
stru)ura
l’applicazione
(es.
se
usa
dei
redirect,
pagine
404
personalizzate…)
32. HTTP
Response
-‐
Header
• Gli
Header
sono
una
fonte
molto
interessante
e
importante
di
informazioni
• Policy
relave
al
caching
e
alla
durata
della
pagina
(es.
Pragma,
Cache-‐Control)
• Policy
per
l’accesso
alle
informazioni
(es.
Content-‐Type)
• Codifica
• Set-‐Cookie
(HTTPOnly,
Secure,
Path,
Domain,
Expire,
Max-‐Age)
• Possono
rilasciare
informazioni
(es.
Server,
X-‐Powered-‐By,
Alternates…)
• Possono
essere
usa
per
proteggere
gli
uten
33. HTTP
Response
-‐
Header
(cont.)
• E
se
negli
Header
possiamo
inserire
dei
parametri?
• HTTP
Response
SpliNng
• Open
Redirect
• Header
Injecon
HTTP Response
Protocol <SP>
Code
<SP>
Explanati
on
<CR> <LF>
Header: Value
<CR> <LF>
Header: Value
<CR> <LF>
Header: Value
<CR> <LF>
<CR> <LF>
Body
34. HTTP
Response
-‐
Header
(es.)
curl -kisI http://onofri.org
HTTP/1.1 200 OK
Date: Sat, 26 Oct 2013 16:00:00 GMT
Server: Apache
Content-Language: en-US
Content-Location: http://onofri.org/
Content-Script-Type: text/javascript
Content-Style-Type: text/css
Revisit-after: 7 days
Cache-Control: post-check=0, pre-check=0, false, no-store, no-cache, must-revalidate
Pragma: no-cache
Expires: -1
imagetoolbar: false
MSThemeCompatible: no
X-UA-Compatible: IE=7
P3P: CAO DSP AND SO ON
pics-Label: (pics-1.1 "http://www.icra.org/pics/vocabularyv03/" l gen true for "http://
www.siatec.net" r (n 0 s 0 v 0 l 0 oa 0 ob 0 oc 0 od 0 oe 0 of 0 og 0 oh 0 c 0) gen true for
"http://www.siatec.net" r (n 0 s 0 v 0 l 0 oa 0 ob 0 oc 0 od 0 oe 0 of 0 og 0 oh 0 c 0))
X-XRDS-Location: http://pip.verisignlabs.com/user/simone/yadisxrds
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
Strict-Transport-Security: max-age=0
Vary: Accept-Encoding
Content-Type: text/html;charset=utf-8
37. Protezione
dall’UI
Redressing
/
Click
Jacking
X-‐Frame-‐Op3ons
solitamente
impostato
con
il
valore
“DENY”
o
con
valori
congrui
se
l’applicazione
ulizza
frame
e
iframe,
evita
l’apertura
di
frame
contenen
contenu
arbitrari,
migando
a)achi
di
po
UI
Redressing
/
ClickJacking.
Questo
header
è
stato
inizialmente
presentato
dai
vendor
ed
è
pertanto
nel
formato
X-‐Frame-‐Opons.
A)ualmente
è
in
un
Drau
della
IETF
e
diventerà
Frame-‐Opons.
39. Protezione
accessoria
an3-‐MiTM
Strict-‐Transport-‐Security
solitamente
impostato
con
un
valore
consono
“max-‐age”
e
ulteriori
valori
come
includeSubDomains,
specifica
al
browser
che
è
possibile
visualizzare
i
contenu
solamente
tramite
il
protocollo
HTTPS,
migando
a)acchi
Man-‐In-‐The-‐Middle.
40. Policy
per
i
permessi
sui
contenu3
Content-‐Security-‐Policy
specifica
una
policy
per
il
browser
sul
po
di
contenu
permessi
all’interno
della
pagina
e
la
relava
origine.
Aiuta
ad
idenficare
e
migare
una
serie
di
a)acchi
come
il
Cross
Site
Scripng
e
il
Man-‐In-‐
The-‐Middle.
Per
esempio
una
policy
che
perme)e
l’ulizzo
di
una
qualsiasi
pologia
di
contenuto
da
tuN
i
domini
so)o
example.com
è
default-‐src
'self'
*.onofri.org;
.
E’
possibile
inoltre
specificare
un
indirizzo
per
la
segnalazione
di
una
violazione,
supportando
l’idenficazione
di
eventuali
a)acchi
di
Phishing.
Ad
esempio
per
inviare
la
violazione
è
possibile
ulizzare
report-‐uri
h@ps://onofri.org/report/vioaDon/.
E’
possibile
anche
semplicemente
monitorare
la
policy
specificata
ulizzando,
insieme
all’header
che
stabilisce
la
policy,
Content-‐Security-‐Policy-‐
Report-‐Only.
Questo
header
è
stato
inizialmente
presentato
dai
vendor
ed
è
pertanto
nel
formato
X-‐Content-‐
Security-‐Policy
e
X-‐WebKit-‐CSP.
A)ualmente
è
in
un
Drau
del
W3C
e
diventerà
Content-‐Security-‐Policy
41. Policy
per
l’accesso
da
parte
di
si3
terzi
Cross
Origin
Resource
Sharing
specifica
una
policy
per
il
browser
sull’accesso
alle
informazioni
tramite
richieste
XMLH)pRequest
quando
queste
violerebbero
la
same-‐origin-‐policy.
L’header
CORS
può
essere
ulizzato
per
specificare
le
poliche
relavamente
all’accesso
delle
informazioni
da
applicazioni
esterne
alla
same-‐origin
e/o
al
same-‐domain.
Una
richiesta
conene
l’header
Origin,
che
specifica
l’origine
della
richiesta.
Il
CORS
era
stato
inizialmente
pensato
per
VoiceXML,
successivamente
è
stato
inserito
in
una
raccomandazione
a
se
stante.
42. Policy
per
l’accesso
da
parte
di
si3
terzi
(es.)
Header
Significato
Access-‐Control-‐Allow-‐Origin
specifica
l’origine
permessa
Access-‐Control-‐Allow-‐CredenDals
specifica
quando
è
possibile
esporre
le
credenziali
Access-‐Control-‐Expose-‐Headers
specifica
quali
sono
gli
header
che
è
possibile
esporre
alla
API
CORS
Access-‐Control-‐Max-‐Age
specifica
la
durata
massima
della
cache,
come,
1728000
Access-‐Control-‐Allow-‐Methods
specifica
i
metodi
permessi,
come
POST,
GET,
OPTIONS
Access-‐Control-‐Allow-‐Headers
specifica
la
possibilità
di
ulizzo
di
alcuni
header
personalizza,
come
X-‐
Customheader
Access-‐Control-‐Request-‐Method
specifica
quali
metodi
possono
essere
ulizza
per
la
richiesta
Access-‐Control-‐Request-‐Headers
quali
header
possono
essere
ulizza
per
la
richiesta
43. Protezioni
accessorie
per
Internet
Explorer
X-‐Content-‐Type-‐Op3ons
solitamente
impostato
con
il
valore
“nosniff”
specifica
al
browser
di
usare
il
mime
type
definito
senza
eseguire
l’override.
Miga
eventuali
a)acchi
di
po
Cross
Site
Scripng
all’interno
di
un
file
JSON.
E’
supportato
solo
da
Internet
Explorer.
X-‐Download-‐Op3ons
solitamente
impostato
con
il
valore
“noopen”
non
perme)e
l’apertura
di
file
–
come
ad
esempio
dei
PDF
–
all’interno
del
browser.
Miga
eventuali
infezioni
di
file
e
migliora
l’usabilità.
E’
supportato
solo
da
Internet
Explorer.
!