Università degli Studi di Milano Facoltà di Scienze Matematiche, Fisiche e Naturali Anno Accademico 2009/2010 Sicurezza delle applicazioni web: protocollo HTTP Roberto Paleari roberto@security.dico.unimi.it 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 spawn new worker web server spawn new worker interpreter HTML script query DB R. Paleari Protocollo HTTP 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., User-Agent: Mozilla/5.0 (X11; U; Linux i686) 3 linea vuota 4 corpo del messaggio (opzionale) 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 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 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/5.0 (X11; U; Linux i686; en-us; rv:1.7.8)... Mozilla/Win XP Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1)... Opera 8.50/Win XP Opera/8.50 (Windows NT 5.1; U; en) IE 1.5/Win NT Mozilla/1.22 (compatible; MSIE 1.5; Windows NT) IE 2.0/Win 95 Mozilla/1.22 (compatible; MSIE 2.0; Windows 95) IE 3.01/Win 98 Mozilla/2.0 (compatible; MSIE 3.01; Windows 98) IE 7.0b1/Win XP Mozilla/4.0 (compatible; MSIE 7.0b; Win32) IE 7.0b/Win Vista 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/5.0 (X11; U; Linux i686; en-us; rv:1.7.8)... Mozilla/Win XP Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1)... Opera 8.50/Win XP Opera/8.50 (Windows NT 5.1; U; en) IE 1.5/Win NT Mozilla/1.22 Quanto (compatible; sonomsie 1.5; Windows NT) IE 2.0/Win 95 Mozilla/1.22 attendibili (compatible; gli header? MSIE 2.0; Windows 95) IE 3.01/Win 98 Mozilla/2.0 (compatible; MSIE 3.01; Windows 98) IE 7.0b1/Win XP Mozilla/4.0 (compatible; MSIE 7.0b; Win32) IE 7.0b/Win Vista 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) status-line e header terminati da CRLF 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 Descrizione 200 OK 201 Created 202 Accepted 301 Moved Permanently 307 Temporary Redirect 400 Bad Request 401 Unauthorized 403 Forbidden 404 Not Found 500 Internal Server Error 503 Service Unavailable R. Paleari 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> 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 R. Paleari 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 browser tradizionali proxy netcat, curl,... Manipolazione HTTPS estensioni browser (e.g., Firefox Tamper Data) 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 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 2 URL <INPUT TYPE="hidden" NAME="sessionid" VALUE="7456"> 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 2 URL <INPUT TYPE="hidden" NAME="sessionid" VALUE="7456"> 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... GET / HTTP/1.1 Host: www.google.it Cookie: PREF=ID...... HTTP/1.1 302 Found Location: http://www.google.it/ Set-Cookie: PREF=ID...... R. Paleari Protocollo HTTP 23 Novembre 2009 23 / 28
Cookie Struttura Attributo nome=valore expires path domain secure Descrizione 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 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 intercettazione predizione brute force session fixation Possibili soluzioni 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