Post on 20-Mar-2016
description
UNIVERSITÀ DI PERUGIADIPARTIMENTO DI MATEMATICA E INFORMATICAMaster di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Cookies poisoning
Prof. Stefano Bistarelli
C Consiglio Nazionale delle RicercheIit Istituto di Informatica e Telematica - Pisa
Università “G. d’Annunzio”Dipartimento di Scienze, Pescara
UNIVERSITÀ DI PERUGIADIPARTIMENTO DI MATEMATICA E INFORMATICAMaster di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Cookies poisoningcookies gessablebroken authenticationsession hijacking
Prof. Stefano Bistarelli
C Consiglio Nazionale delle RicercheIit Istituto di Informatica e Telematica - Pisa
Università “G. d’Annunzio”Dipartimento di Scienze, Pescara
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 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
4
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Meccanismi di autenticazione non adeguati
A3. Broken Authentication
S. Bistarelli - Metodologie di Secure Programming
5
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
6
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
BancaA. Ferrari
Mario Rossi
Carta di identità Mario Rossi
Buongiorno Mario RossiTicket #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
S. Bistarelli - Metodologie di Secure Programming
7
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
[1] https://www.mia-banca.it
[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 mittenteInvio del contenuto al DEST
Username/password
[5] Richiesta dell’estratto CC (https://www. mia-banca.it/cont.jsp)Cookie=TWFyaW8123
A.3: Gestione della sessione web
S. Bistarelli - Metodologie di Secure Programming
8
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
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:
TWFyaW8122Identifica il mittente Paolo VerdiInvio 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 (https://www. mia-banca.it/cont.jsp)
A.3: Furto di identità
Per implementare una corretta gestione delle sessioni è necessario proteggereproteggere sia le credenziali di credenziali di autenticazioneautenticazione di un utente che i token di sessionetoken di sessione generati dal server ed assegnati all’utente
S. Bistarelli - Metodologie di Secure Programming
9
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della ComunicazioneA.3: Errata gestione della sessione - Furto A.3: Errata gestione della sessione - Furto di identità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.RossiCookie:aefdsg6757nb92 ; G.VerdiCookie:aefdsg6757nb9? ; V.Bianchi
S. Bistarelli - Metodologie di Secure Programming
10
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
11
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
12
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
13
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
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
S. Bistarelli - Metodologie di Secure Programming
14
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
15
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
16
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
17
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
18
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
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: <pages validateRequest="false"/>
E se lo modifichiamo con lo <script> …. ?? Funziona!!! Ma su IE no
S. Bistarelli - Metodologie di Secure Programming
19
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
20
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 TamperDetectorusing 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
21
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
22
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
23
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
24
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
25
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
26
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
27
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Se ora modifico i cookie Errore!!!