Title: Cookies%20poisoning
1Cookies poisoning
C Consiglio Nazionale delle Ricerche Iit
Istituto di Informatica e Telematica - Pisa
Università G. dAnnunzioDipartimento di
Scienze, Pescara
2Cookies poisoningcookies gessablebroken
authenticationsession hijacking
C Consiglio Nazionale delle Ricerche Iit
Istituto di Informatica e Telematica - Pisa
Università G. dAnnunzioDipartimento di
Scienze, Pescara
3A3. 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
4A3. Broken Authentication
- Meccanismi di autenticazione non adeguati
5A3. Broken Authentication (2)
6A.3 Concetto di gestione della sessione nel
mondo reale
Dipendente Banca A. Ferrari
Mario Rossi
Verifica identità in base alla carta di identità
Num. 33 Firma A.Ferrari
Verifica identità in base al ticket
Meccanismo di autenticazione? Meccanismo di
gestione della sessione? Livello di sicurezza del
sistema?
7A.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
3 inserisce username/password via HTTPS
Username/password
--Richieste seguenti--
8A.3 Furto di identità
Mario Rossi
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 allutente
Se altero la GET HTTP, forgiando il cookie sono
in grado di accedere al contenuto di unaltra
persona
I dati relativi allutenza di Verdi non sono
stati adeguatamente protetti
9A.3 Errata gestione della sessione - Furto di
identità
10Review your account
- Find where the confidential data is
11So Many Cookies
- TestSess
- Site cookie
- Seg
- TestPerm
- ProfileAddressVerified
- ProfileID
- MEMUSER
- USERID
- SESSIONUSERID
- PROFILE
12- Eliminate each one until the ones that matter are
left - In this case SESSIONUSERID505741
- Is the number incremental?
- Keep everything the same except decrement the
number SESSIONUSERID505740
13Victorias Secret
- Victorias 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
Victorias Secret
14Quale e la soluzione al problema?
15- Usare hashing, encryption, nonces, timestamp
16Lab
- 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.
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
- ltaspLabel ID"lblCookieInfo" runat"server"gtlt/asp
Labelgtltbr /gt - Possiamo usare cookie come input e fare un XSS
attack come prima!!! - (provare a settare come cookie ltscriptgtalert(ciao
)lt/scriptgt ?
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
- ltpages validateRequest"false"/gt
- E se lo modifichiamo con lo ltscriptgt . ??
- Funziona!!! ?
- Ma su IE no ?
19Perche?
- 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!!!
20Difesa
- Controllare i cookies come se fossero un input!!
- Al solito ltpages validateRequesttrue"/gt
- 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 CheckAndRemoveTamperDetec
tion(string s) - return s
-
- public static string GenerateRandomKey()
- return string.Empty
-
-
21AddTamperDetection
- public static string AddTamperDetection(string s)
- byte data Encoding.UTF8.GetBytes(s)
- byte hash getKeyedHash().ComputeHash(d
ata) - return Convert.ToBase64String(hash) ''
s -
-
- static HMACSHA1 getKeyedHash()
- string skey ConfigurationManager.AppSett
ings"validationKey" - byte key Convert.FromBase64String(skey
) - return new HMACSHA1(key)
-
22CheckAndRemoveTamperDetection
- public static string CheckAndRemoveTamperDetectio
n(string s) - int i s.IndexOf('')
- if (-1 i) throw new DataTamperingExcept
ion("Unexpected format.") - string prefix s.Substring(0, i)
- string suffix s.Substring(i 1)
- byte hash Convert.FromBase64String(pre
fix) - byte data Encoding.UTF8.GetBytes(suffi
x) - byte computedHash getKeyedHash().Compu
teHash(data) - if (!isEqual(hash, computedHash))
- throw new DataTamperingException("Stri
ng has been modified!") - return suffix
-
- static bool isEqual(byte a, byte b)
- if (a.Length ! b.Length) return false
- for (int i 0 i lt a.Length i)
- if (ai ! bi) return false
- return true
-
23GenerateRandomKey
- Usata per salvare su web.config la chiave per
fare hash - public static string GenerateRandomKey()
- byte rnd new byte16 // 128 bits
- new RNGCryptoServiceProvider().GetBytes(rn
d) - return Convert.ToBase64String(rnd)
-
24Change to write and read cookie
- cookie.Value TamperDetector.AddTamperDetection(v
alue) - return TamperDetector.CheckAndRemoveTamperDetecti
on(cookie.Value)
25Gestione 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!" -
-
26Aggiunta chiave a web.config
- Aggiungi a Page_Load in Default.aspx
- lblRandomKey.Text TamperDetector.GenerateRandomK
ey() - Run
- Copia su web.config la stringa
- ltappSettingsgt
- ltadd key"validationKey" value""/gt
- lt/appSettingsgt
27- Se ora modifico i cookie
- Errore!!! ?