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 Università “G. d’Annunzio” Dipartimento di Scienze, Pescara C Consiglio Nazionale delle Ricerche Iit Istituto di Informatica e Telematica - Pisa 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 Università “G. d’Annunzio” Dipartimento di Scienze, Pescara C Consiglio Nazionale delle Ricerche Iit Istituto di Informatica e Telematica - Pisa Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione 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 S. Bistarelli - Metodologie di Secure Programming 3 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione A3. Broken Authentication Meccanismi di autenticazione non adeguati S. Bistarelli - Metodologie di Secure Programming 4 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione A3. Broken Authentication (2) S. Bistarelli - Metodologie di Secure Programming 5 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione A.3: Concetto di “gestione della sessione” nel mondo reale Dipendente Banca Mario Rossi A. Ferrari Carta di identità Mario Rossi Num. 33 Buongiorno Mario Rossi Firma: A.Ferrari Ticket #33 Ticket #33: mi dia 1000 euro dal mio conto Verifica identità in base alla carta di identità Verifica identità in base al ticket Tenga 1000 euro Sig. Rossi Meccanismo di autenticazione? Meccanismo di gestione della sessione? Livello di sicurezza del sistema? S. Bistarelli - Metodologie di Secure Programming 6 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione A.3: Gestione della sessione web --Procedura di autenticazione-Web Server Mario Rosssi [1] https://www.mia-banca.it [2] Invio form di autenticazione via HTTPS Username/password [3] inserisce username/password via HTTPS Verifica credenziali: se ok client autenticato Generazione del cookie [4] Welcome page personale e Cookie=TWFyaW8123 Set Cookie=TWFyaW8123 Token di autenticazione --Richieste seguenti-[5] Richiesta dell’estratto CC (https://www. mia-banca.it/cont.jsp) Cookie=TWFyaW8123 Verifica del cookie: Identifica il mittente Invio del contenuto al DEST [6] Invio del contenuto S. Bistarelli - Metodologie di Secure Programming 7 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione A.3: Furto di identità Mario Rossi Per implementare unalacorretta sessioni Se altero GET HTTP, gestione “forgiando” delle il cookie sono in è necessario grado accedere al contenuto di un’altra persona di un utente proteggere sia le dicredenziali di autenticazione che i token di sessione generati dal server ed assegnati all’utente Verifica del cookie: [5a]Richiesta dell’estratto CC (https://www. mia-banca.it/cont.jsp) Cookie=TWFyaW8122 [6a] Invio del contenuto di Paolo Verdi TWFyaW8122 Identifica il mittente Paolo Verdi Invio del contenuto di Paolo Verdi al destinatario Mario Rossi I dati relativi all’utenza di Verdi non sono stati adeguatamente protetti S. Bistarelli - Metodologie di Secure Programming 8 A.3: Errata gestione della sessione - Furto di identità Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione 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 S. Bistarelli - Metodologie di Secure Programming 9 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Review your account Find where the confidential data is S. Bistarelli - Metodologie di Secure Programming 10 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione So Many Cookies TestSess ‘Site cookie’ Seg TestPerm ProfileAddressVerified ProfileID MEMUSER USERID SESSIONUSERID PROFILE S. Bistarelli - Metodologie di Secure Programming 11 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione 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’ S. Bistarelli - Metodologie di Secure Programming 12 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Victoria’s Secret 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 S. Bistarelli - Metodologie di Secure Programming 13 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Quale e’ la soluzione al problema? Suggerimenti .. S. Bistarelli - Metodologie di Secure Programming 14 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Usare hashing, encryption, nonces, timestamp S. Bistarelli - Metodologie di Secure Programming 15 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione 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. S. Bistarelli - Metodologie di Secure Programming 16 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione 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: <asp:Label ID="lblCookieInfo" runat="server"></asp:Label><br /> Possiamo usare cookie come input e fare un XSS attack come prima!!! (provare a settare come cookie <script>alert(‘ciao’)</script> S. Bistarelli - Metodologie di Secure Programming 17 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Modifichiamo cookie in black Per IE andare sotto Per firefox C:\Documents and Settings\Stefano Bistarelli\Dati applicazioni\Mozilla\Firefox\Profiles Nota: C:\Documents and Settings\Stefano Bistarelli\Cookies <pages validateRequest="false"/> E se lo modifichiamo con lo <script> …. ?? Funziona!!! Ma su IE no S. Bistarelli - Metodologie di Secure Programming 18 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione 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!!! S. Bistarelli - Metodologie di Secure Programming 19 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Difesa: Controllare i cookies come se fossero un input!! Al solito <pages validateRequest=“true"/> 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) {} } S. Bistarelli - Metodologie di Secure Programming 20 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione 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); } S. Bistarelli - Metodologie di Secure Programming 21 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione 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; } S. Bistarelli - Metodologie di Secure Programming 22 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione 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); } S. Bistarelli - Metodologie di Secure Programming 23 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Change to write and read cookie cookie.Value = TamperDetector.AddTamperDetection(value); return TamperDetector.CheckAndRemoveTamperDetection(cookie.Value); S. Bistarelli - Metodologie di Secure Programming 24 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione 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!"; } } S. Bistarelli - Metodologie di Secure Programming 25 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Aggiunta chiave a web.config Aggiungi a Page_Load in Default.aspx lblRandomKey.Text = TamperDetector.GenerateRandomKey(); Run: Copia su web.config la stringa <appSettings> <add key="validationKey" value=""/> </appSettings> S. Bistarelli - Metodologie di Secure Programming 26 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Se ora modifico i cookie Errore!!! S. Bistarelli - Metodologie di Secure Programming 27