2011-01-18 3 views
6

Mi piacerebbe rendere irrecuperabile il contenuto di un file caricato su un server Web dopo che è stato utilizzato. Le mie preoccupazioni sono:Come assicurarsi che il contenuto dei file caricati non possa essere ripristinato dopo l'uso?

  1. Quando viene caricato il file, è vero memorizzato in una directory temporanea (ad esempio di Windows directory Temp) e come posso cancellare tutte le tracce da lì?

  2. Il contenuto del file può essere scritto nella memoria virtuale e come posso garantire che non lo sia o rimuovere il contenuto una volta scritto?

  3. Se si crittografa il file, dovrei comunque preoccuparmi del contenuto salvato nella directory Temp, nella memoria virtuale o altrove prima che il file venisse crittografato?

  4. È possibile eseguire un'eliminazione sicura in tutte le aree interessate (temp, memoria virtuale, altre) e come si fa?

  5. Ci sono dei problemi che ho perso o un modo alternativo per raggiungere l'obiettivo dichiarato?

N.B. Questa è un'applicazione Web ASP.NET.

Modifica: Grazie a djeeg per indicare un collegamento su come riposizionare la directory di caricamento temporaneo in qualcosa di più controllabile.

Qualsiasi feedback sugli altri punti?

+0

+1 per una domanda ben definita. risposta djechelon colpire su un aspetto che si dovrebbe dare un'occhiata più da vicino a "fiducia". Devi ricordare che ci sarà sempre una superficie esposta e devi fidarti di qualcuno. Se sei così preoccupato che hai bisogno di un server dedicato fisicamente sicuro e di un kill switch (un modo per distruggere fisicamente i dati), allora non dovrai preoccuparti troppo della meccanica interna. – Robert

+0

Nota: .Net è un runtime gestito e la memorizzazione temporanea dei dati è specifica per l'implementazione e, in quanto tale, qualsiasi tentativo di cancellare dati da un sistema in esecuzione sarà una sfida senza fine, poiché qualsiasi aggiornamento potrebbe modificare l'implementazione effettiva. – Robert

risposta

3

Disk Security

Puoi lasciare wipe utility fare il lavoro per voi.

Se si esegue ASP.NET su Mono/Linux, è possibile utilizzare il comando wipe tramite la classe Process (assicurarsi che il pacchetto di pulizia sia installato).

Se si esegue Windows, l'approccio è lo stesso. Utilizzare un'utilità wipe.exe che esegue la pulizia completa quando è necessario disporre in modo sicuro del file.

Mi piace il sito Web this che distribuisce un wipe.exe gratuito, che non è incluso nell'installazione standard di Windows (troppo male).

Il secondo modo è implementare lo Guttman algorithm, ma penso che sia più economico utilizzare il codice di qualcun altro.

Ricordare che la pulizia è molto intensa per I/O, non aspettare che si completi o si può rallentare notevolmente l'applicazione. Inoltre, su siti Web con carichi elevati potresti riscontrare un rallentamento significativo.

sicurezza memoria

La classe SecureString aiuta a non lasciare traccia di una stringa in memoria. Ma quando lavori con i file lavori effettivamente con i flussi. Non sono sicuro di preoccuparmi del contenuto della memoria volatile (anche se gestisci documenti di Wikileaks).

È necessario innanzitutto eseguire un'analisi delle minacce indicando quali sono le principali minacce alla memoria. Ecco alcune domande:

  1. Qualcuno può accedere al server con un account amministratore/root con la possibilità di eseguire un dump della memoria? (Gli utenti normali non possono leggere la memoria e .NET impedisce il sovraccarico del buffer a causa di puntatori non utilizzati)
  2. Qualcuno può accedere fisicamente al server? Non ti fidi abbastanza del tuo hosting provider? Esegui invece un server virtuale?

Se la risposta non è non si deve preoccupare per la sicurezza memoria

sicurezza Lo spazio di swap

Anche se si esegue su Windows, fammi chiamare "swap" il file di paging, o file di memoria virtuale o altro. Potresti pensare a disabilitarlo (assicurati di disporre di abbondanti quantità di RAM) o, altrimenti, potresti pensare a crittografarlo (ma ottieni una riduzione delle prestazioni).

Tuttavia, per consentire a qualcuno di eseguire la scansione del file di scambio in fase di runtime, deve essere root o avere accesso fisico al server di spegnimento.

Se i dati sono troppo sensibili, vorrei disattivare lo swap.

[Aggiungi] Sono sicuro che si già uso SSL per caricare il file, nel caso in cui si dimentica alcuni principi ...

0

assicurarsi file caricato è crittografato. This dovrebbe fare il trucco. È necessario un qualche tipo di algoritmo di scambio chiave sicura troppo, non sono sicuro di quello, provare googling

javascript secure key exchange 

Assicurarsi di non passare i dati decriptati in giro. Decifra e usa i dati nella stessa classe o metodo e assicurati di cancellare i dati prima che garbage collector rilasci il tuo oggetto. Proteggi il tuo swap (io sono un ragazzo di Linux, quindi non so come farlo in Windows).

Infine, rendersi conto che questo è un problema difficile da risolvere in modo sicuro e che qualsiasi soluzione preparata a metà o prodotta a casa sarà probabilmente spezzata in pochi minuti se il guadagno previsto è sufficientemente alto. La sicurezza è un compromesso. Quanto valgono i tuoi dati?