Ho appena letto in rete una vulnerabilità di sicurezza recentemente scoperta in ASP.NET. Puoi leggere i dettagli qui.
Il problema risiede nel modo in cui ASP.NET implementa l'algoritmo di crittografia AES per proteggere l'integrità dei cookie generati da queste applicazioni per archiviare informazioni durante le sessioni dell'utente.
Questo è un po 'vago, ma qui è una parte più spaventosa:
La prima fase dell'attacco richiede alcune migliaia di richieste, ma una volta che ha successo e l'attaccante ottiene le chiavi segrete, è totalmente invisibile. Le conoscenze crittografiche richieste sono molto basilari.
Tutto sommato, non ho abbastanza familiarità con il tema della sicurezza / crittografia per sapere se questo è davvero così serio.
Quindi, tutti gli sviluppatori ASP.NET dovrebbero temere questa tecnica che può possedere qualsiasi sito Web ASP.NET in pochi secondi o cosa?
In che modo questo problema influisce sullo sviluppatore ASP.NET medio? Ci riguarda affatto? Nella vita reale, quali sono le conseguenze di questa vulnerabilità? E, infine: esiste qualche soluzione alternativa che previene questa vulnerabilità?
Grazie per le tue risposte!
EDIT: Fammi riassumere le risposte che ho ricevuto
Quindi, questo è fondamentalmente un tipo di attacco "padding oracle". @Sri ha fornito un'ottima spiegazione sul significato di questo tipo di attacco. Ecco un video scioccante sul problema!
Informazioni sulla gravità di questa vulnerabilità: Sì, è davvero serio. Consente all'attaccante di conoscere la chiave della macchina di un'applicazione. Quindi, può fare alcune cose molto indesiderate.
- In posizione della chiave della macchina dell'app, l'utente malintenzionato può decrittografare i cookie di autenticazione.
- Ancora peggio, può generare cookie di autenticazione con il nome di qualsiasi utente. Pertanto, può apparire come chiunque sul sito. L'applicazione non è in grado di distinguere tra te o l'hacker che ha generato un cookie di autenticazione con il tuo nome.
- Gli consente anche di decrittografare (e anche generare) i cookie di sessione , sebbene non sia pericoloso come il precedente.
- Non così grave: può decrittografare il ViewState crittografato delle pagine. (Se usi ViewState per archiviare dati riservati, non dovresti farlo comunque!)
- Abbastanza inaspettato : con la conoscenza della chiave della macchina, l'attaccante può scaricare qualsiasi file arbitrario dall'applicazione Web, anche quelli che normalmente non possono essere scaricati! (Incluso Web.Config , ecc.)
Ecco alcune buone pratiche che non risolvono il problema ma aiutano a migliorare la sicurezza generale di un'applicazione Web.
- È possibile crittografare i dati sensibili con Configurazione protetta
- Usa solo i cookie HTTP
- Prevenire gli attacchi DoS
Ora concentriamoci su questo problema.
- Scott Guthrie ha pubblicato una voce al riguardo sul suo blog
- Post sul blog FAQ di ScottGu sulla vulnerabilità
- Aggiornamento di ScottGu sulla vulnerabilità
- Microsoft ha un avviso di sicurezza a riguardo
- Comprensione della vulnerabilità
- Ulteriori informazioni sulla vulnerabilità
La soluzione
- Abilita customErrors e crea una singola pagina di errore a cui vengono reindirizzati tutti gli errori . Sì, anche 404s . (ScottGu ha detto che la differenziazione tra 404s e 500s è essenziale per questo attacco.) Inoltre, nel tuo
Application_Error
oError.aspx
metti del codice che fa un ritardo casuale. (Genera un numero casuale e usa Thread.Sleep per dormire così a lungo.) Ciò renderà impossibile all'aggressore decidere cosa è successo esattamente sul tuo server. - Alcune persone hanno raccomandato di tornare a 3DES. In teoria, se non si utilizza AES, non si riscontra la debolezza della sicurezza nell'implementazione di AES. A quanto pare, questo non è affatto raccomandato .
Alcuni altri pensieri
Grazie a tutti coloro che hanno risposto alla mia domanda. Ho imparato molto non solo su questo problema, ma sulla sicurezza web in generale. Ho contrassegnato la risposta di @ Mikael come accettata, ma anche le altre risposte sono molto utili.