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
Scarica

cookie-poisoning - Dipartimento di Matematica e Informatica