Elenco di attacchi di sessione Web e contromisure

3

Sto scrivendo un nuovo sito web in PHP e userò i cookie per tracciare i dati della sessione utente. Prima di finalizzare il progetto, voglio assicurarmi che il sito non sia vulnerabile agli attacchi. Ho scritto un elenco di metodi di attacco e ho escogitato delle contromisure per ciascuno di essi. Qualcuno può pensare ad altri metodi di attacco e in tal caso proporre anche contromisure adeguate?

Un elenco di tutti i metodi di attacco che potrei pensare:

  1. cookie di sessione Indovina / bruteforce
  2. Ruba cookie di sessione (ad esempio se l'utente malintenzionato salva il cookie di sessione su USB)
  3. Scripting tra siti
  4. Phishing (fissazione della sessione)
  5. Iniezione SQL
  6. Iniezione header HTTP

Va notato che userò il mio database per memorizzare le informazioni sulla sessione, non le funzioni di sessione standard di PHP. Quando rilevo un attacco eseguirò una funzione chiamata warn_and_halt() che registrerà l'attacco e informerà il sysadmin, quindi interromperà la sessione sotto attacco.

Le mie contromisure per ciascuno dei suddetti tipi di attacco sono:

  1. Piuttosto che usare un intero grande per l'ID di sessione memorizzato nel cookie, genererò il mio numero casuale e poi lo cancellerò con qualcosa come SHA-1 per renderlo un po 'più difficile da indovinare. Naturalmente l'ID di sessione potrebbe non essere univoco se viene creato in questo modo, quindi dovrò controllare tutti gli altri ID di sessione nel database e rigenerare se l'ID di sessione appena generato esiste già. Sono fiducioso con questa misura.

  2. Suppongo che l'USB verrà trasferito su un altro computer e il cookie di sessione caricato in un altro browser. Registrerò l'agente utente (nome del browser) per ogni sessione. Se l'agente utente cambia durante la sessione, allora creerò warn_and_halt() . Ho letto di persone che usano l'indirizzo IP per convalidare l'ID di sessione, ma non penso che lo userò del tutto dato che gli indirizzi IP possono cambiare durante una sessione per ragioni completamente innocenti - per esempio se il router dell'utente resetta e negozia un nuovo IP con il loro ISP. Qualcuno può suggerire ulteriori contromisure qui?

  3. Imposterò il cookie di sessione come HTTPonly e controlleremo anche il dominio dei cookie in entrata. A mio parere non c'è molto di ciò che può essere fatto per impedire che ciò accada su un browser: il browser potrebbe scegliere di non rispettare la flag HTTPonly - nulla che io possa fare lì! Qualcuno conosce un modo migliore per prevenire XSS?

  4. Immagino che il phishing si verifichi in caso di "cattiva" registrazione da parte dell'utente nel mio sito, quindi invio via email un link come <a href='javascript:void(0);' onclick="document.cookie='sessionid=xxxx';document.location='http://mywebsite/'"> all'utente "ignaro". Questo imposterà un cookie di sessione senza "dimenticarlo" sapendolo. Quindi "ignaro" inserirà le proprie informazioni personali e l'utente "cattivo" ha queste informazioni! Penso che la maggior parte dei browser non consentirà che il dominio del nuovo cookie sia impostato come mywebsite, quindi "dimentico" è abbastanza sicuro. Tuttavia, controllerò il dominio in arrivo di ogni cookie per assicurarmi che sia per il mio sito web. Utilizzerò sicuramente i cookie, piuttosto che GET o POST per memorizzare l'ID di sessione. Inoltre, risolverò la fissazione della sessione cambiando l'ID di sessione per ogni pagina visitata.

  5. L'iniezione SQL è un problema con un ambito molto più ampio rispetto al furto di ID di sessione, ma lo neutralizzerò in generale evitando sempre i dati in arrivo (compresi i cookie) e filtrando i caratteri errati con espressioni regolari. Penso di avere questo molto ben coperto.

  6. Ho appena saputo dell'inputione header HTTP. Tuttavia, sembra abbastanza facile da contrastare: basta sfuggire ai campi dell'intestazione in entrata, specialmente per i ritorni a capo e per convalidare le intestazioni in entrata.

Quindi questi sono tutti gli attacchi e le contromisure che potrei pensare (dopo un bel po 'di lettura online). Se vedi qualcosa che ho perso, per favore rispondi. Se vedi che nessuna delle mie contromisure è insufficiente, ti preghiamo di dirlo.

    
posta mulllhausen 03.07.2011 - 03:24
fonte

2 risposte

3

Hai chiesto: "qualcuno conosce un modo migliore per prevenire xss?"

Il modo migliore per prevenire XSS è di informarti su XSS ed evitare l'introduzione di vulnerabilità XSS nel tuo codice. Inizia leggendo il seguente documento:

(Vedi anche funzioni PHP per prevenire XSS .)

Successivamente, ti consiglio di leggere sulla sicurezza web. Inizia leggendo le seguenti introduzioni alla sicurezza Web per gli sviluppatori:

Questo ti aiuterà a evitare l'XSS. Ci sono molte altre risorse sul web e su questo sito; dai un'occhiata.

Nota: il flag HTTPonly non non impedisce XSS. Inoltre, contrariamente a quanto si crede, fornisce poca sicurezza aggiuntiva: se il tuo sito web contiene una vulnerabilità XSS, sarà spesso ancora possibile per un utente malintenzionato fare cose cattive all'utente. La flag HTTPonly rende l'attaccante più difficile da lavorare, ma alla fine, si dovrebbe presumere che un hacker sofisticato probabilmente continuerà ad andare altrettanto lontano. Ora non sto discutendo contro HTTPonly. Il flag HTTPonly è una buona idea, se non interrompe la funzionalità del sito. Ma non dovresti affidarti su di esso come difesa contro XSS. È una particolare difesa porosa.

    
risposta data 11.12.2011 - 05:18
fonte
2

Informazioni su alcuni dei tuoi punti:

  1. L'hashing di un numero casuale ti darà di nuovo un numero casuale. Fare ciò sarebbe sensato solo se il tuo numero casuale originale proviene da un piccolo spazio (ad esempio ipotetico), e se qualche altro valore segreto entra nell'hashing (quindi l'attaccante non può fare lo stesso hashing). E poi questo sarebbe chiamato MAC.

  2. Non vedo alcun motivo per cui un utente malintenzionato debba utilizzare l'USB per rubare un cookie di sessione (o come sarebbe vantaggioso farlo). Inoltre, anche le stringhe di user-agent possono essere simulate. Inoltre, in che modo un utente malintenzionato può accedere al cookie?

    • Se ha accesso diretto al computer client per vedere cosa fa il browser, può fare qualsiasi cosa (e non hai modo di impedirlo).
    • Se può vedere il traffico di rete e leggere il cookie da lì ... allora stai facendo qualcosa di sbagliato. Utilizza SSL (o migliore TLS) per il trasporto, ad esempio HTTPS.
risposta data 09.12.2011 - 22:36
fonte

Leggi altre domande sui tag