Per quanto tempo i campi della password HTML (inviati al server come postati) rimangono in memoria?

3

In qualsiasi struttura web sul lato server principale, di solito c'è un meccanismo per leggere l'input del modulo HTML, ad es. in ASP, per un elemento HTML, <input type="text" name="the_field" /> , è Request.Form("the_field") , dove Request.Form è un oggetto di tipo dizionario in cui i valori vengono analizzati dai dati POST in coppie chiave / valore.

Ci sono anche varie raccomandazioni per mantenere solo le password in memoria per un tempo minimo, fino a includere un array di caratteri mutevole invece di una stringa immutabile, bloccandolo in modo che non possa essere sfogliato o copiato e azzerando ogni elemento dell'array quando fatto (o usando qualcosa come .NET SecureString , che fa lo stesso).

Dato ciò, quali meccanismi potrebbero esistere per comunicare al server Web che è necessario trattare i dati del modulo postati come sicuri e fare il pinning / clearing per, diciamo, un campo HTML <input type="password" /> ?

Si potrebbe ragionevolmente aspettarsi che il browser faccia il miglio supplementare per i campi password (anche se mi aspetto che non lo facciano), perché possono dedurre dal markup che tali protezioni sono necessarie.

Il livello di trasporto è coperto da HTTPS e non è in discussione.

Ma nulla di ciò che ho visto fornisce al server web la semantica dei dati post, quindi può scegliere di applicare protezioni in-memory.

Ho avuto un paio di idee su come una cosa del genere potrebbe essere gestita in un server web se progettata da zero (si noti che non sto progettando un server web da zero!):

  1. Applica le protezioni in memoria a tutte le richieste: Sembra che potrebbe essere più diretto, ma potrebbe avere un impatto negativo sulle prestazioni per le pagine che non sono strettamente sensibili ma vengono servite sotto SSL (es. Siti tutto-SSL o pagine 'My Account' che non hanno campi 'Nuova password'). Potrebbe essere configurabile a "tutte le richieste" / "Solo HTTPS"

  2. Standardizzazione di un'intestazione HTTP che definisce i campi da proteggere: attenua il problema all-SSL, ma fornisce un ovvio punto di partenza per l'ispezione (anche se sono sicuro che txtUser=foo&txtPassword=bar è già un indicatore abbastanza buono). Prenderesti x anni per il W3C per concordare uno standard, e un altro y anni per i browser per implementarlo.

  3. Registra campi postali sicuri nella configurazione del server (o attraverso l'integrazione della lingua): Il parser del flusso di richiesta del server sarà responsabile della lettura di ogni chiave del post, verificando l'elenco interno e applicando protezioni di memoria al successivo valore di post. Forse anche escludendolo dal normale Request.Form al posto di un oggetto Request.Passwords con una struttura di dati adatta allo scopo, o sostituendo il valore Request.Form con un riferimento all'oggetto SecureString .

Quindi ci sono server web che già lo fanno (o qualcosa del genere), o ti permettono un accesso a livello abbastanza basso per implementare queste protezioni manualmente? Ho pensato che forse la pipeline integrata di IIS7, ma non riesco a vedere un evento che viene eseguito abbastanza presto.

Sono necessarie protezioni del genere, o è solo una soluzione alla ricerca di un problema? In tal caso, cosa rende questo non necessario quando la gestione della password in-app di una app desktop non è?

    
posta jimbobmcgee 23.07.2014 - 14:20
fonte

1 risposta

2

Se le "protezioni" tradizionali per dati sensibili nella RAM desktop (ad esempio SecureString ) siano realmente necessarie o meno, è discutibile. Quando gli aggressori possono leggere il contenuto della RAM, hanno già un sacco di controllo sulla macchina. Possiamo ancora giustificare alcune misure proattive nel senso seguente:

  • La RAM in una macchina può perdere sul disco, attraverso la memoria virtuale .
  • Il meccanismo ibernazione sui laptop è anche incline a copiare i contenuti della RAM sul disco.
  • Le macchine desktop possono essere infettate dal malware (attraverso la credulità dell'utente) che potrebbe essere eseguito con privilegi limitati, ma essere comunque in grado di esplorare il contenuto della RAM di altri processi in esecuzione per lo stesso utente.
  • La sicurezza fisica dei computer desktop (e in particolare dei laptop) non può essere garantita in ogni momento; l'attaccante può afferrare la macchina e scappare.

Per questi motivi, è meglio che le password e gli altri dati sensibili siano "protetti", ovvero impediti in qualche modo da perdite sul disco e rimossi forzatamente dalla RAM immediatamente dopo l'uso, riducendo così la finestra di vulnerabilità.

Nessuno di questi motivi si applica ai server (anche il bit sulla "memoria virtuale": se il server colpisce lo spazio di scambio, allora non ha abbastanza RAM, la RAM è a buon mercato al giorno d'oggi, i buoni server non usano lo spazio di swap a tutti ). Pertanto, si può sostenere che i server non devono applicare le tradizionali protezioni in-RAM per le password.

    
risposta data 23.07.2014 - 15:30
fonte

Leggi altre domande sui tag