slides

Transcript

slides
Università degli Studi di Milano
Facoltà di Scienze Matematiche, Fisiche e Naturali
Anno Accademico 2009/2010
Sicurezza delle applicazioni web: protocollo HTTP
Roberto Paleari
[email protected]
23 Novembre 2009
R. Paleari
Protocollo HTTP
23 Novembre 2009
1 / 28
Sommario
1
Introduzione
2
Introduzione al protocollo HTTP
3
Analisi e manipolazione di traffico HTTP
4
Sessioni HTTP
R. Paleari
Protocollo HTTP
23 Novembre 2009
2 / 28
Architettura infrastruttura web
web browser
page request
server response
web server
spawn new worker
spawn new worker
interpreter
HTML
R. Paleari
script
Protocollo HTTP
query
DB
23 Novembre 2009
3 / 28
HTTP: HyperText Transfer Protocol
Cos’è?
elemento fondamentale su cui si basa il Web
protocollo di livello applicazione usato per trasferire dati tra
client ed web server
protocollo text-based, stateless
in uso le versioni 1.0 (RFC 1945) e 1.1 (RFC 2616)
incapsulato in connessioni TCP (default: porta 80)
Goal
trasmissione di documenti ed elementi multimediali
oggi utilizzato in contesti diversi (e.g, SOAP)
R. Paleari
Protocollo HTTP
23 Novembre 2009
4 / 28
Richiesta pagina http://www.example.com/test.html
browser
DNS server
web server
A? www.example.com
A 123.45.67.89
Client ↔ server DNS
il browser interroga un server DNS per ottenere l’indirizzo IP
del server web
R. Paleari
Protocollo HTTP
23 Novembre 2009
5 / 28
Richiesta pagina http://www.example.com/test.html
browser
DNS server
web server
A? www.example.com
A 123.45.67.89
GET /index.html HTTP/1.1
Client → server web
il browser si collega alla porta TCP 80 del server e invia una
richiesta HTTP
R. Paleari
Protocollo HTTP
23 Novembre 2009
5 / 28
Richiesta pagina http://www.example.com/test.html
browser
DNS server
web server
A? www.example.com
A 123.45.67.89
GET /index.html HTTP/1.1
HTTP/1.1 200 OK
Client ← server web
il server web processa la richiesta ricevuta e restituisce una
riposta (e.g., la pagina HTML)
R. Paleari
Protocollo HTTP
23 Novembre 2009
5 / 28
Richieste HTTP
Struttura
1
request line (e.g.,
GET /index.html HTTP/1.1)
2
header (opzionali, e.g.,
3
linea vuota
4
corpo del messaggio (opzionale)
User-Agent: Mozilla/5.0 (X11; U; Linux i686)
Note
request line e header terminati da CRLF (“\r\n”)
linea vuota → CRLF
implementazioni flessibili (e.g., richieste accettate anche con
linee terminate da LF)
R. Paleari
Protocollo HTTP
23 Novembre 2009
6 / 28
Request line e metodi HTTP
metodo
risorsa
versione
GET /index.html HTTP/1.1
R. Paleari
Protocollo HTTP
23 Novembre 2009
7 / 28
Request line e metodi HTTP
metodo
risorsa
versione
GET /index.html HTTP/1.1
Metodi (GET /index.html HTTP/1.1)
GET per recuperare la risorsa specificata
HEAD simile a GET, ma il server non restituisce il corpo
POST richiesta che include dati del body, come ad esempio:
dati da inserire in un forum, newsgroup, mailing list, . . .
dati provenienti da un form di un’altra pagina HTML
input da inserire in un database
I HTTP/1.1 ⇒ aggiunti OPTIONS, PUT, DELETE, TRACE, CONNECT
R. Paleari
Protocollo HTTP
23 Novembre 2009
7 / 28
Risorsa e versione del protocollo
Risorsa (GET /index.html HTTP/1.1)
specificata tramite URI assoluta o path assoluto
URI assoluta solo quando si effettua una richiesta attraverso
un proxy (e.g., GET
http://security.dico.unimi.it/index.html HTTP/1.1)
path assoluto per richieste dirette al server (e.g., GET
/index.html HTTP/1.1)
Versione del protocollo (GET /index.html HTTP/1.1)
major/minor number della versione del protocollo
in 1.1 è obbligatorio inserire l’header Host
I
normalmente viene utilizzata la versione 1.1
R. Paleari
Protocollo HTTP
23 Novembre 2009
8 / 28
Request header principali
Authorization credenziali di autenticazione
e.g., Basic + “username:password”, codificato in base64
(roberto:mypassword ⇔ cm9iZXJ0bzpteXBhc3N3b3JkCg==)
If-Modified-Since il server resistuisce la risorsa solo se modificata
dopo la data specificata
Referer pagina di provenienza
User-Agent agente con cui è stata effettuata la richiesta
Entity header
Contiene meta-informazioni sul body, ad esempio:
Content-Length lunghezza del payload contenuto nella richiesta
Content-Type tipo di payload (e.g., application/x-www-form-urlencoded)
R. Paleari
Protocollo HTTP
23 Novembre 2009
9 / 28
Request header principali
User-Agent
Browser/OS
User-Agent
Mozilla/Linux
Mozilla/Win XP
Opera 8.50/Win XP
IE 1.5/Win NT
IE 2.0/Win 95
IE 3.01/Win 98
IE 7.0b1/Win XP
IE 7.0b/Win Vista
...
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) . . .
Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1) . . .
Opera/8.50 (Windows NT 5.1; U; en)
Mozilla/1.22 (compatible; MSIE 1.5; Windows NT)
Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)
Mozilla/2.0 (compatible; MSIE 3.01; Windows 98)
Mozilla/4.0 (compatible; MSIE 7.0b; Win32)
Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)
...
R. Paleari
Protocollo HTTP
23 Novembre 2009
10 / 28
Request header principali
User-Agent
Browser/OS
User-Agent
Mozilla/Linux
Mozilla/Win XP
Opera 8.50/Win XP
IE 1.5/Win NT
IE 2.0/Win 95
IE 3.01/Win 98
IE 7.0b1/Win XP
IE 7.0b/Win Vista
...
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) . . .
Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1) . . .
Opera/8.50 (Windows NT 5.1; U; en)
Quanto
sonoMSIE 1.5; Windows NT)
Mozilla/1.22
(compatible;
Mozilla/1.22
(compatible;
MSIE 2.0; Windows 95)
attendibili
gli header?
Mozilla/2.0 (compatible; MSIE 3.01; Windows 98)
Mozilla/4.0 (compatible; MSIE 7.0b; Win32)
Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)
...
R. Paleari
Protocollo HTTP
23 Novembre 2009
10 / 28
Esempio richiesta HTTP (GET)
GET /index.html HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.1) ...
Accept: text/xml,text/html;q=0.9,text/plain;q=0.8,*/*;q=0.5
Accept-Language: it,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.google.com/
If-Modified-Since: Fri, 05 Jan 2007 14:30:45 GMT
If-None-Match: "7f0f1-7-ecdaaf40"
R. Paleari
Protocollo HTTP
23 Novembre 2009
11 / 28
Esempio richiesta HTTP (POST)
POST /test.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.1) ...
Accept: text/xml,text/html;q=0.9,text/plain;q=0.8,*/*;q=0.5
Accept-Language: it,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.google.com/
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
testo=prova
R. Paleari
Protocollo HTTP
23 Novembre 2009
12 / 28
Risposte HTTP
Struttura
1
status-line (e.g., HTTP/1.1 200 OK)
2
header (opzionali) (e.g., Server: Apache/2.2.3)
3
linea vuota
4
corpo del messaggio (opzionale)
I
status-line e header terminati da CRLF
I
linea vuota = CRLF
Status line
1
versione del protocollo (e.g., HTTP/1.1)
2
status code (risultato dell’operazione, e.g., 200)
3
testo associato allo status code (e.g., OK)
R. Paleari
Protocollo HTTP
23 Novembre 2009
13 / 28
Status code
tre cifre: la prima indica la classe della risposta, le altre due
precisano il significato
Classi di risposta
1xx informazione - richiesta ricevuta parzialmente, il client deve
completarla (HTTP 1.1)
2xx successo - azione ricevuta, compresa e accettata con successo
3xx redirezione - necessarie altre azioni per completare la richiesta
4xx client error - richiesta con sintassi errata o non soddisfacibile
5xx server error - il server non è in grado di rispondere ad una
richiesta valida
R. Paleari
Protocollo HTTP
23 Novembre 2009
14 / 28
Codici di risposta
Esempi
Codice
200
201
202
301
307
400
401
403
404
500
503
R. Paleari
Descrizione
OK
Created
Accepted
Moved Permanently
Temporary Redirect
Bad Request
Unauthorized
Forbidden
Not Found
Internal Server Error
Service Unavailable
Protocollo HTTP
23 Novembre 2009
15 / 28
Response header principali
Server informazioni generali sul server web
Location utilizzato nei redirect, indica la locazione della risorsa
Last-Modified quando la risorsa è stata modificata (per caching)
Content-Length lunghezza del payload
Content-Type tipo di payload
Esempio
HTTP/1.1 200 OK
Date: Fri, 05 Jan 2007 14:55:09 GMT
Server: Apache/2.2.3 (Debian) PHP/4.4.4-8
Last-Modified: Fri, 05 Jan 2007 14:30:45 GMT
ETag: "7f0f1-7-ecdaaf40"
Accept-Ranges: bytes
Content-Length: 5
Content-Type: text/html; charset=UTF-8
ciao
R. Paleari
Protocollo HTTP
23 Novembre 2009
16 / 28
Passaggio parametri
Metodo GET
l’utente passa i dati all’applicazione attraverso form HTML o
tecnologie lato client
tutto si deve tradurre in richieste HTTP
Caso 1: passaggio parametri tramite form
<form action="submit.php" method="get">
<input type="text" name="var1" />
<input type="hidden" name="var2" value="b" />
<input type="submit" value="invia" />
</form>
Caso 2: parametri embedded nell’URL
<a href="submit.php?var1=a&var2=b">link</a>
Richiesta corrispondente
GET /submit.php?var1=a&var2=b HTTP/1.1
Host: www.example.com
...
R. Paleari
Protocollo HTTP
23 Novembre 2009
17 / 28
Passaggio parametri
Metodo POST
Ex.1: parametri POST
<form action="submit.php" method="post">
<input type="text" name="var1" />
<input type="text" name="var2" />
<input type="submit" value="invia" />
</form>
POST /submit.php HTTP/1.1
Host: localhost
...
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
var1=a&var2=b
R. Paleari
Protocollo HTTP
23 Novembre 2009
18 / 28
Passaggio parametri
Metodo POST
Ex.1: parametri POST
<form action="submit.php" method="post">
<input type="text" name="var1" />
<input type="text" name="var2" />
<input type="submit" value="invia" />
</form>
POST /submit.php HTTP/1.1
Host: localhost
...
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
var1=a&var2=b
Ex.2: GET + POST
<form action="test.php?var3=c&var4=d"
method="post">
<input type="text" name="var1" />
<input type="text" name="var2" />
<input type="submit" value="invia" />
</form>
R. Paleari
POST /test.php?var3=c&var4=d HTTP/1.1
Host: localhost
...
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
var1=a&var2=b
Protocollo HTTP
23 Novembre 2009
18 / 28
Traffico HTTP
payload incapsulato in pacchetti TCP (default: porta 80)
comunicazione “in chiaro”
Monitoring del traffico
per analisi black-box dell’applicazione web
strumenti di sniffing (e.g., ngrep, tcpdump, wireshark, . . . )
non consentono l’analisi di traffico TLS/SSL
R. Paleari
Protocollo HTTP
23 Novembre 2009
19 / 28
Traffico HTTP
payload incapsulato in pacchetti TCP (default: porta 80)
comunicazione “in chiaro”
Monitoring del traffico
per analisi black-box dell’applicazione web
strumenti di sniffing (e.g., ngrep, tcpdump, wireshark, . . . )
non consentono l’analisi di traffico TLS/SSL
Manipolazione HTTP
Manipolazione HTTPS
browser tradizionali
estensioni browser
proxy
(e.g., Firefox → Tamper Data)
netcat, curl, . . .
proxy
R. Paleari
Protocollo HTTP
23 Novembre 2009
19 / 28
Proxy HTTP
modifica del traffico HTTP/HTTPS
indipendenti dall’applicazione
HTTPS: il browser notificherà l’errore nella verifica del
certificato SSL
Alcuni proxy HTTP
WebScarab (http://www.owasp.org/)
Burp (http://www.portswigger.net/proxy/)
Paros (http://www.parosproxy.org/
R. Paleari
Protocollo HTTP
23 Novembre 2009
20 / 28
Proxy HTTP
modifica del traffico HTTP/HTTPS
indipendenti dall’applicazione
HTTPS: il browser notificherà l’errore nella verifica del
certificato SSL
Alcuni proxy HTTP
WebScarab (http://www.owasp.org/)
Burp (http://www.portswigger.net/proxy/)
Paros (http://www.parosproxy.org/
R. Paleari
Protocollo HTTP
23 Novembre 2009
20 / 28
Sessioni HTTP
Introduzione
Problema
stateless: ogni richiesta è indipendente dalle precedenti
applicazioni web dinamiche richiedono il concetto di sessione
I
come fare?
A cosa serve una sessione?
evitare login ad ogni pagina
memorizzare preferenze utente
tenere traccia di azioni precedenti (e.g., shopping cart)
...
R. Paleari
Protocollo HTTP
23 Novembre 2009
21 / 28
Sessioni HTTP
Soluzioni
concetto di sessione implementato dall’applicazione web
informazioni sulla sessione corrente trasmesse client e server
Come trasmettere le informazioni di sessione?
R. Paleari
Protocollo HTTP
23 Novembre 2009
22 / 28
Sessioni HTTP
Soluzioni
concetto di sessione implementato dall’applicazione web
informazioni sulla sessione corrente trasmesse client e server
Come trasmettere le informazioni di sessione?
1
payload HTTP
<INPUT TYPE="hidden" NAME="sessionid" VALUE="7456">
R. Paleari
Protocollo HTTP
23 Novembre 2009
22 / 28
Sessioni HTTP
Soluzioni
concetto di sessione implementato dall’applicazione web
informazioni sulla sessione corrente trasmesse client e server
Come trasmettere le informazioni di sessione?
1
payload HTTP
<INPUT TYPE="hidden" NAME="sessionid" VALUE="7456">
2
URL
http://www.example.com/page.php?sessionid=7456
R. Paleari
Protocollo HTTP
23 Novembre 2009
22 / 28
Sessioni HTTP
Soluzioni
concetto di sessione implementato dall’applicazione web
informazioni sulla sessione corrente trasmesse client e server
Come trasmettere le informazioni di sessione?
1
payload HTTP
<INPUT TYPE="hidden" NAME="sessionid" VALUE="7456">
2
URL
http://www.example.com/page.php?sessionid=7456
3
header HTTP (e.g., Cookie)
GET /page.php HTTP/1.1
Host: www.example.com
...
Cookie: sessionid=7456
...
R. Paleari
Protocollo HTTP
23 Novembre 2009
22 / 28
Cookie
Cosa sono?
dati creati dal server e memorizzati sul client
trasmessi tra client e server utilizzando header HTTP
Client
Server
GET / HTTP/1.1
Host: www.google.com
...
HTTP/1.1 302 Found
Location: http://www.google.it/
Set-Cookie: PREF=ID...
...
GET / HTTP/1.1
Host: www.google.it
Cookie: PREF=ID...
...
R. Paleari
Protocollo HTTP
23 Novembre 2009
23 / 28
Cookie
Struttura
Attributo
Descrizione
nome=valore
expires
path
domain
dati generici (unico campo obbligatorio)
data di scadenza
percorso per il quale il cookie è valido
dominio per il quale il cookie è valido (e.g.,
.google.it)
flag che indica se il cookie deve essere trasmesso
solo attraverso un canale sicuro
secure
I
standardizzati in RFC 2109
R. Paleari
Protocollo HTTP
23 Novembre 2009
24 / 28
Sessioni
Due possibilità per realizzare una sessione:
1
dati inseriti manualmente nelle richieste/risposte (obsoleto e
insicuro)
2
meccanismo implementato dal linguaggio di programmazione
Cookie di sessione
tecnica maggiormente utilizzata
dati di sessione memorizzati sul server
al client è passato un id di sessione tramite cookie
ad ogni richiesta, il client spedisce i cookie al server
(e.g., Cookie:
PHPSESSID=da1dd139f08c50b4b1825f3b5da2b6fe)
il server recupera le informazioni di sessione tramite l’id
R. Paleari
Protocollo HTTP
23 Novembre 2009
25 / 28
Sessioni
Sicurezza
elemento critico (e.g., usate per autenticazione)
rischio: bypass del sistema ti autenticazione!
devono essere valide per un periodo di tempo limitato
Attacco
Possibili soluzioni
intercettazione
predizione
brute force
session fixation
SSL/TLS
generatori pseudocasuali efficaci
lunghezza id
controllo IP, Referer, rigenerazione id
R. Paleari
Protocollo HTTP
23 Novembre 2009
26 / 28
Sessioni
Sicurezza – Session hijacking
Vittima
Attaccante
Web server
GET /login.php?user=foo&pass=bar
Set-Cookie:
sessionID=23245
GET /main.php
Cookie: sessionID=23245
R. Paleari
Protocollo HTTP
23 Novembre 2009
27 / 28
Sessioni
Sicurezza – Session fixation
Vittima
Attaccante
Web server
GET /index.php
Set-Cookie: sessionID=23245
http://www.target.it/?sessionID=23245
GET /?sessionID=23245
GET /login.php?user=foo&pass=bar
R. Paleari
Protocollo HTTP
23 Novembre 2009
28 / 28