Perché faticare a rubare dati di sessione quando questa sessione può crearla lo stesso cracker e poi farla usare all'utente? In un attacco di tipo session fixation il cracker "fissa" un SID che farà poi usare all'utente attaccato. Vediamo come.
I passi per un attacco di tale tipo sono essenzialmente riportati di seguito.
Il cracker deve a questo punto far utilizzare all'utente attaccato (utente_A) tale SID, di modo che questi si autentichi a Sito_A, inserendo nome utente e password, ma usando nel contempo la sessione già iniziata dal cracker anziché crearne una nuova. Si presentano più strade per ottenere questo risultato.
Il cracker passa all'utente_A un link col SID in query string:
http://Sito_A/index.php?PHPSESSID=24c101d8df8614e8a2b4e493f830f541
Il cracker fa sfruttare all'utente una falla XSS, come visto per il session hijacking, con la differenza che questa volta il comando JavaScript da eseguire sarà document.cookie, il quale imposterà un cookie di sessione (proveniente appunto dal dominio sotto attacco) sulla macchina di utente_A. Segue quanto detto per il passo 1.
Nei passi 1 e 2 il cracker deve mantenere "in vita" la sessione, onde evitare che scada prima che utente_A la utilizzi (generalmente si ha un limite di durata per il tempo di vita delle sessioni, che non deve essere né troppo lungo né troppo breve, per non premiare i cracker da un lato ma non penalizzare troppo gli utenti dall'altro. La direttiva PHP che definisce questo lifetime è impostata nel php.ini).
Modificare spesso l'indentificatore della sessione per eviarne i furti
session_regenerate_id()
Al di là delle necessarie protezioni - che si evincono direttamente dalle descrizioni degli exploit possibili (attenzione dell'utente, programmazione, sistema e rete sicuri) - il "furto di identità" è realmente pericoloso quando l'utente attaccato abbia privilegi elevati o meglio quando stia operando in area amministrativa. In questi casi è opportuno modificare spesso l'ID di sessione tramite il comando standard PHP session_regenerate_id().
Sicuramente è necessario farlo ancora prima che avvenga il login - poniamo nella stessa pagina di autenticazione, prima di inviare i dati del form Web al server - e prima di una qualsivoglia ipotetica nuova richiesta di login, ad esempio per passare da utente ad amministratore di sistema o comunque innalzare i propri privilegi.
Sessioni PHP: cosa sono, come si usanoDalla configurazione di PHP, alla gestione delle sessioni in un... |
Continuous Integration: automatizziamo i client con PhingContinuous Integration: automatizziamo i client con Phing. Esempi... |
Archiviazione delle applicazioni PHP con PharCome incorporare intere applicazioni PHP all'interno di un singolo... |
I traits in PHP 5.4Cosa sono, a cosa servono e come si unsano i traits, la novità per... |
PHP 5.4: il web server integratoImpara ad usare il web server integrato nella versione 5.4 di PHP:... |
Guida Yii FrameworkCome creare applicazioni Web in modo semplice e veloce con il... |
Guida Applicazioni Facebook con PHPCome realizzare un'applicazione per Facebook. Dalle basi della... |
Guida PHP con Windows e IISInstallare ambienti per lo sviluppo e la produzione di applicazioni... |
Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.
Iscriviti alla newsletter
|
|
Corso PHP per Webmaster11 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |