UNIVERSITÀ DI PERUGIA DIPARTIMENTO DI MATEMATICA E INFORMATICA Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Cookies poisoning Prof. Stefano Bistarelli C Consiglio Nazionale delle Ricerche Iit Istituto di Informatica e Telematica - Pisa Università “G. d’Annunzio” Dipartimento di Scienze, Pescara
UNIVERSITÀ DI PERUGIA DIPARTIMENTO DI MATEMATICA E INFORMATICA Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Cookies poisoning cookies gessable broken authentication session hijacking Prof. Stefano Bistarelli C Consiglio Nazionale delle Ricerche Iit Istituto di Informatica e Telematica - Pisa Università “G. d’Annunzio” Dipartimento di Scienze, Pescara
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 3 A3. Broken Authentication e Session Management Processo di autenticazione Meccanismo di autenticazione implementato non adeguato Gestione delle sessioni web HTTP protocollo stateless: è necessario implementare una corretta gestione delle sessioni
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 4 Meccanismi di autenticazione non adeguati A3. Broken Authentication
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 5 A3. Broken Authentication (2)
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 6 A.3: Concetto di “gestione della sessione” nel mondo reale Dipendente Banca A. Ferrari Mario Rossi Carta di identità Mario Rossi Buongiorno Mario Rossi Ticket #33 Verifica identità in base alla carta di identità Ticket #33: mi dia 1000 euro dal mio conto Tenga 1000 euro Sig. Rossi Verifica identità in base al ticket Meccanismo di autenticazione? Meccanismo di gestione della sessione? Livello di sicurezza del sistema? Num. 33 Firma: A.Ferrari
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 7 [1] [2] Invio form di autenticazione via HTTPS [3] inserisce username/password via HTTPS [4] Welcome page personale e Set Cookie=TWFyaW8123 Mario Rosssi Web Server --Richieste seguenti-- --Procedura di autenticazione-- Verifica credenziali: se ok client autenticato Generazione del cookie [6] Invio del contenuto Token di autenticazione Cookie=TWFyaW8123 Verifica del cookie: Identifica il mittente Invio del contenuto al DEST Username/password [5] Richiesta dell’estratto CC ( mia-banca.it/cont.jsp) Cookie=TWFyaW8123 A.3: Gestione della sessione web
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 8 Se altero la GET HTTP, “forgiando” il cookie sono in grado di accedere al contenuto di un’altra persona [6a] Invio del contenuto di Paolo Verdi Verifica del cookie: TWFyaW8122 Identifica il mittente Paolo Verdi Invio del contenuto di Paolo Verdi al destinatario Mario Rossi Mario Rossi I dati relativi all’utenza di Verdi non sono stati adeguatamente protetti Cookie=TWFyaW8122 [5a]Richiesta dell’estratto CC ( mia-banca.it/cont.jsp) A.3: Furto di identità proteggerecredenziali di autenticazione token di sessione Per implementare una corretta gestione delle sessioni è necessario proteggere sia le credenziali di autenticazione di un utente che i token di sessione generati dal server ed assegnati all’utente
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 9 A.3: Errata gestione della sessione - Furto di identità Cookie poisoning Alterando campi forniti al client tramite un cookie (stato), un attaccante puo’ impersonare un utente per accedere a servizi web. Cookie: lang=en-us; ADMIN=no; y=1 ; time=10:30GMT ; Cookie: lang=en-us; ADMIN=yes; y=1 ; time=12:30GMT ; Cookie guessable Cookie:aefdsg6757nb90 ; M.Rossi Cookie:aefdsg6757nb92 ; G.Verdi Cookie:aefdsg6757nb9? ; V.Bianchi
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 10 Review your account Find where the confidential data is
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 11 So Many Cookies TestSess ‘Site cookie’ Seg TestPerm ProfileAddressVerified ProfileID MEMUSER USERID SESSIONUSERID PROFILE
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 12 Eliminate each one until the ones that matter are left In this case ‘SESSIONUSERID=505741’ Is the number incremental? Keep everything the same except decrement the number – ‘SESSIONUSERID=505740’
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 13 Victoria’s Secret Victoria’s Secret, November 27, 2002 Order ID parameter in the order status page Order status page bound to your session, but not the parameters $50,000 fine and publicity in 2003 Victoria’s Secret
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 14 Quale e’ la soluzione al problema? Suggerimenti..
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 15 Usare hashing, encryption, nonces, timestamp
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 16 Lab: In this scenario, you have a public-facing web application accepts anonymous requests from the Internet. Cookies are used to store state on the client machines, but the cookies are being tampered with by malicious users, leading to possible cross-site scripting attacks and general data tampering mischief.
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 17 Controllando codice: Page_load chiama display_cookie string cookieValue = readCookie(); if (null == cookieValue) { lblCookieInfo.Text = "No cookie was found."; } else { // Note that there is an XSS vulnerability here. // The user can change the contents of any cookie! lblCookieInfo.Text = "Cookie found: " + cookieValue; } Su tag: Possiamo usare cookie come input e fare un XSS attack come prima!!! (provare a settare come cookie alert(‘ciao’)
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 18 Modifichiamo cookie in black Per IE andare sotto C:\Documents and Settings\Stefano Bistarelli\Cookies Per firefox C:\Documents and Settings\Stefano Bistarelli\Dati applicazioni\Mozilla\Firefox\Profiles Nota: E se lo modifichiamo con lo …. ?? Funziona!!! Ma su IE no
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 19 Perche? IE ha un controllo sulla lunghezza dei cookies Ma ora lo bypassiamo Usiamo tool per editare cookies iecv.zip Altro problema i caratteri Bypassiamo Usiamo X al posto dei caratteri vietati e popi editiamo a mano il file!! FUNZIONA!!!
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 20 Difesa: Controllare i cookies come se fossero un input!! Al solito A tamper detector: Add new item, new class TamperDetector using System; using System.Text; using System.Security.Cryptography; using System.Configuration; public class TamperDetector { public static string AddTamperDetection(string s) { return s; } public static string CheckAndRemoveTamperDetection(string s) { return s; } public static string GenerateRandomKey() { return string.Empty; } public class DataTamperingException : Exception { public DataTamperingException(string msg) : base(msg) {} }
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 21 AddTamperDetection public static string AddTamperDetection(string s) { byte[] data = Encoding.UTF8.GetBytes(s); byte[] hash = getKeyedHash().ComputeHash(data); return Convert.ToBase64String(hash) + '|' + s; } static HMACSHA1 getKeyedHash() { string skey = ConfigurationManager.AppSettings["validationKey"]; byte[] key = Convert.FromBase64String(skey); return new HMACSHA1(key); }
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 22 CheckAndRemoveTamperDetection public static string CheckAndRemoveTamperDetection(string s) { int i = s.IndexOf('|'); if (-1 == i) throw new DataTamperingException("Unexpected format."); string prefix = s.Substring(0, i); string suffix = s.Substring(i + 1); byte[] hash = Convert.FromBase64String(prefix); byte[] data = Encoding.UTF8.GetBytes(suffix); byte[] computedHash = getKeyedHash().ComputeHash(data); if (!isEqual(hash, computedHash)) throw new DataTamperingException("String has been modified!"); return suffix; } static bool isEqual(byte[] a, byte[] b) { if (a.Length != b.Length) return false; for (int i = 0; i < a.Length; ++i) if (a[i] != b[i]) return false; return true; }
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 23 GenerateRandomKey Usata per salvare su web.config la chiave per fare hash public static string GenerateRandomKey() { byte[] rnd = new byte[16]; // 128 bits new RNGCryptoServiceProvider().GetBytes(rnd); return Convert.ToBase64String(rnd); }
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 24 Change to write and read cookie cookie.Value = TamperDetector.AddTamperDetection(value); return TamperDetector.CheckAndRemoveTamperDetection(cookie.Value);
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 25 Gestione ecc su displaycookie Cambia displaycookie per gestire eccezione void displayCookie() { try { string cookieValue = readCookie(); if (null == cookieValue) { lblCookieInfo.Text = "No cookie was found."; } else { // Note that there is an XSS vulnerability here. // The user can change the contents of any cookie! lblCookieInfo.Text = "Cookie found: " + cookieValue; } catch (DataTamperingException) { lblCookieInfo.Text = "Cookie has been tampered with or corrupted!"; }
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 26 Aggiunta chiave a web.config Aggiungi a Page_Load in Default.aspx lblRandomKey.Text = TamperDetector.GenerateRandomKey(); Run: Copia su web.config la stringa
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 27 Se ora modifico i cookie Errore!!!