Qual è una buona pratica di sicurezza per l'archiviazione di un database critico sui laptop degli sviluppatori?


33

Abbiamo alcuni dati:

  1. Gli sviluppatori hanno bisogno di una replica del database di produzione sui loro computer.
  2. Gli sviluppatori hanno la password per detto database nei file App.config.
  3. Non vogliamo che i dati in detto database siano compromessi.

Alcune soluzioni suggerite e i loro svantaggi:

  1. -Disk-crittografia completa. Questo risolve tutti i problemi, ma degrada le prestazioni del laptop e noi siamo una start-up, quindi non abbiamo soldi per i powerhorses.
  2. Creazione di una macchina virtuale con disco rigido crittografato e archiviazione del database su di essa. Funziona bene, ma non aiuta molto, dal momento che c'è una password in Web.Config.
  3. Soluzione numero 2 + che richiede allo sviluppatore di digitare la password del database ogni volta che esegue qualcosa. Risolve tutti i problemi, ma è davvero complicato per gli sviluppatori che a volte accendono l'applicazione più volte al minuto. Inoltre, abbiamo più applicazioni che si collegano allo stesso database e l'implementazione di una schermata di password dovrà differire in ciascuna.

Quindi, la mia domanda è: se esiste una soluzione comune a tale problema o qualche suggerimento su come rendere praticabile una delle soluzioni sopra?


26
Hai effettivamente misurato l'impatto delle prestazioni della crittografia dell'intero disco. L'ho usato su laptop abbastanza vecchi e non ho riconosciuto alcun significativo peggioramento delle prestazioni. I moderni sistemi operativi sono abbastanza bravi nella memorizzazione nella cache e i dischi sono comunque lenti. L'impatto peggiore è probabilmente sulla durata della batteria.
5gon12eder

69
Ad essere onesti, questo non sembra l'approccio giusto. 1) Perché gli sviluppatori hanno bisogno di un database di produzione sui loro computer? Non esiste un modo per creare dati fittizi per un db di sviluppo? 2) Perché la password è memorizzata in testo normale in un file di configurazione? Stai cercando di mettere un cerotto su un processo imperfetto, a quanto pare. Forse puoi rivedere ciò che vive effettivamente sui computer degli sviluppatori e come viene memorizzata la password per il database.
Thomas Stringer,

2
Ci sono ragioni per cui gli sviluppatori hanno bisogno del database di produzione. Per motivi storici il loro lavoro è troppo accoppiato con i dati in tempo reale. So che questa è una cattiva idea, e se non troviamo una buona soluzione, passeremo ai dati fittizi. Per ora sto cercando di trovare una buona soluzione senza quella.
Svarog,

6
Nessun utente di un MacBook Pro potrebbe dire dalla velocità della macchina se la crittografia del disco completo è attivata o disattivata su un'unità SSD. Non c'è alcuna differenza. Nessuno che puoi notare. Forse uno che puoi misurare, ma nulla di evidente.
gnasher729,

5
Io secondo il commento di @ gnasher729. Avendo utilizzato la crittografia completa del disco per molti anni in ambienti regolamentati (finanziari e sanitari), non deve essere un notevole consumo di prestazioni. Molte persone sollevano altri punti validi, ma in un ambiente HIPAA è difficile avere una politica ragionevole senza la crittografia completa del disco, anche se i database non sono posizionati sui notebook. E-mail e altri frammenti di dati spesso finiscono comunque lì. Scambia file .... ecc ... La crittografia completa del disco non è adeguata, ma di solito è necessaria.
joshp,

Risposte:


100

Non solo non si desidera una copia del database di produzione, ma potrebbe anche essere illegale. Ad esempio, negli Stati Uniti, non è possibile spostare i dati di produzione fuori dall'ambiente di produzione se contengono informazioni regolamentate come dati sulla salute personale, dati finanziari o persino dati che potrebbero essere utilizzati nel furto di identità. In tal caso, potresti essere multato, perdere la tua conformità e quindi essere soggetto a controlli più aggressivi o addirittura essere nominato in una causa.

Se hai bisogno di dati su scala di produzione per i test, hai un paio di opzioni:

  1. Genera tutti i dati fittizi. Questo è più complicato di quanto sembri. È sorprendentemente difficile e laborioso generare dati immaginari sensibili.
  2. Anonimizza i tuoi dati di produzione. Questo può essere più semplice, ma procedere con cautela.

Per l'opzione n. 2

  • Nell'ambiente di produzione, un amministratore di database autorizzato crea una copia dei dati di produzione.
  • Sempre nell'ambiente di produzione, lo stesso amministratore autorizzato esegue una routine che anonimizza tutti i dati sensibili. In caso di dubbio, anonimizzare.
  • Solo allora i dati dovrebbero essere spostati in un altro ambiente.

31
e la password per la copia del database non dovrebbe essere la stessa della versione di produzione .....
Lightness Races con Monica,

3
"Ad esempio, negli Stati Uniti, non è possibile spostare i dati di produzione fuori dall'ambiente di produzione se contengono informazioni regolamentate" Cosa? Hai una fonte per questo? Non è possibile, ad esempio, utilizzare i backup di un database di produzione come dati per l'ambiente di gestione temporanea o come test di dbs su macchine sviluppatore?
tata

12
@nanny Non se stai usando dati regolamentati. Ad esempio, ho lavorato ai sensi del regolamento HIPAA. L'HIPAA afferma che "Le entità coperte devono anche attuare politiche e procedure minime necessarie per limitare la quantità di informazioni sanitarie protette utilizzate, divulgate e richieste per determinati scopi". Una politica minima necessaria è aperta a qualche interpretazione. Il nostro legale ha suggerito un'interpretazione rigorosa che conteneva i dati sensibili in cui gli sviluppatori non potevano accedervi. (È davvero necessario che facciano il loro lavoro?) La stessa cautela si applica alla conformità finanziaria come PCI.
Corbin,

4
@nanny Prendi questo come sentito da un non avvocato, ma a quanto ho capito, le regole variano notevolmente da uno stato all'altro. Il consulente legale con cui lavoro ha sempre commesso errori dal lato della cautela. A rigor di termini, gli sviluppatori non hanno bisogno di SSN effettivi per svolgere i loro compiti, quindi i consigli suggeriscono che gli SSN vivono in un ambiente protetto dove gli sviluppatori non possono accedervi. Non ascoltarmi, però. Un avvocato che cerca i tuoi interessi a lungo termine sarà la miglior risorsa.
Corbin,

5
A rigor di termini, non è ILLEGALE essere trascurati con PPI, a meno che non si stia svolgendo un lavoro governativo, quindi entra in gioco il Titolo 32 ... ma si tratta di una seria esposizione alla responsabilità civile. questa è comunque un'ottima risposta. upvoted.
2

9

Puoi almeno dare agli sviluppatori VM nel tuo datacenter che possono RD per questo lavoro? Mentre dovrebbero davvero lavorare su dati non di produzione, questo sarebbe più sicuro fino a quando non ci si arriva poiché i dati non verrebbero archiviati su laptop rubati facilmente.


questo sembra più un commento, vedi Come rispondere
moscerino del

5
@gnat, questa risposta potrebbe essere breve ma è un'ottima alternativa suggerita.

Non essere così pedante, @gnat ... questa è una bella risposta.
2

@ dan1111 Questo è il problema. Non è una risposta È un'alternativa Questo lo rende un commento, non una risposta.
corsiKa

2
@corsiKa, sono consentite risposte che sfidano la premessa della domanda e sono spesso ottime risposte. Vedi problema XY: meta.stackexchange.com/questions/66377/what-is-the-xy-problem . E risposte più dettagliate potrebbero essere migliori, ma questa è ancora una risposta.

8

Cambia il tuo modo di lavorare, se possibile.

Come altri hanno sottolineato:

  • L'uso dei dati di produzione per lo sviluppo non è una buona pratica.
  • Avere una password memorizzata in testo normale non è una buona pratica.

Entrambi espongono a rischi significativi e devono essere modificati se possibile. Dovresti almeno valutare seriamente quale sarebbe il costo per apportare queste modifiche. Se questa è una dipendenza esterna che non hai il potere di cambiare, considera di sollevarla come una preoccupazione per chiunque abbia quel potere.

Nel mondo reale, tuttavia, potrebbe davvero non essere possibile cambiarlo. Supponendo che ciò che stai facendo sia legale, potresti dover convivere con questo accordo (almeno temporaneamente).

Se questo è veramente necessario, devi solo eseguire la crittografia dell'intero disco.

Dati i rischi, è necessario utilizzare l'opzione di sicurezza più disponibile e questo è tutto. Se c'è un colpo di prestazione, vivi con esso. È un costo per lavorare con dati sensibili.

Se fossi tuo cliente, non sarei impressionato dal fatto che tu abbia deciso di non utilizzare la migliore opzione di sicurezza disponibile con i miei dati, perché ha reso i tuoi laptop leggermente più lenti.


1
"Non una soluzione ideale" dovrebbe essere cambiato per "un'idea completamente stupida" IMO
Darkhogg,

@Darkhogg, hai ragione, dovrebbe essere più forte. Modificato. Non andrei fino a "completamente stupido" senza sapere quanto sia sensibile l'applicazione. In pratica, il rischio di compromesso è molto, molto basso se si utilizza la crittografia completa del disco, quindi è possibile considerarlo troppo come un problema di sicurezza.

Concordo con il primo punto, ma non con il secondo. Se non stai memorizzando la tua password in testo normale dove la stai memorizzando (1) testo cifrato o (2) il tuo cervello. Se (1) allora dove stai memorizzando la password per il codice (rilevato loop infinito). Se (2), spero che ti piaccia svegliarti alle 2:00 per digitare la password per riavviare il servizio.
emory

1

La risposta di Corbin March è piuttosto buona, aggiungerò solo un dettaglio aggiuntivo, che generalmente hai due classi di dati nel tuo database di produzione: metadati di sistema / applicazione; e dati utente client / dati transazionali. Quest'ultimo non dovrebbe MAI essere usato in un ambiente di sviluppo "così com'è".

È molto raro infatti che siano necessarie informazioni reali sul cliente di produzione per fare lo sviluppo.

Tuttavia, se il problema qui descritto dall'OP riguarda dati segreti commerciali o altrimenti dati di sistema altamente proprietari che non riguardano i dati dei clienti, ciò è richiesto dagli sviluppatori ... l'approccio alla sicurezza deve coinvolgere uno schema che non ha la password db mantenuta in chiaro in un file di risorse da qualche parte. È necessario un meccanismo per, ad esempio, rigenerare una password giornaliera, che non è memorizzata sul disco.


5
client user data/transactional data... should NEVER be used in a development environment "as is." - Mi sembra poco funzionale. In base a tale accordo, i problemi di programmazione relativi alla produzione relativi ai dati di un cliente specifico sarebbero irrisolvibili. Inoltre, i dati in tempo reale effettivi sono estremamente utili dal punto di vista del test. Lo sforzo di privatizzazione o anonimizzazione dovrebbe essere focalizzato esclusivamente sui dati specificamente regolati.
Robert Harvey,

@RobertHarvey, non è realizzabile se non riesci a riprodurre il problema di produzione in un ambiente di sviluppo. Penso che per tutta la mia carriera (lungo) posso contare su un paio di dita il numero di volte in cui i dati di test opportunamente sterilizzati non erano adeguati per riprodurre un bug di produzione. Le "Informazioni commerciali proprietarie" vanno ben oltre i numeri SSN e CC!
2

4
Ma se seguirai questa strada, avrai persone IT che non possono fare il loro lavoro perché non hanno accesso amministrativo a tutto. Ammetto che causa potenziali problemi a Snowden, ma non vedo un'alternativa praticabile, se non quella di assumere persone di cui ti puoi fidare. Sarbanes Oxley e HIPAA sono molto specifici su quale tipo di dati debbano essere sequestrati e non includono "tutti i dati di produzione", non per un lungo periodo. Detto questo, non credo che dati di produzione di alcun tipo possano mai esistere sui laptop mobili.
Robert Harvey,

1
-1 per MAI. I tuoi commenti più sfumati sono migliori della tua risposta; dovresti modificarli in esso.

1
@ dan1111 allora possiamo concordare di non essere d'accordo. I dati dei clienti "così come sono" non devono MAI MAI MAI essere utilizzati nei sistemi di sviluppo. Dovrebbe essere sempre disinfettato. Non ci credi perché non sei ancora stato morso da questa rabbiosa mangusta ... ed è quello che è, quando succede. Un rabbioso pazzo roditore che intende attirare il tuo sangue. Segui il mio consiglio, evita la rabbiosa mangusta.
2

1

Non si specifica quale database e quale ambiente.

Se è possibile utilizzare la sicurezza integrata, il database non è accessibile senza aver effettuato l'accesso come tale utente. Sì, se i dati si trovano sul disco rigido possono essere compromessi, ma si tratta di una difesa di primo livello.

App.config mi fa pensare che questo possa essere un .NET. Inserisci config in una chiavetta USB e leggila dalla chiavetta USB. Se l'unità non è presente, inserire l'utente nella password.

Esiste un modo per archiviare la password in memoria la prima volta che viene inserita e letta da tutti. Ancora una volta non dichiari l'ambiente. File mappati in memoria

Con alcuni TDE è possibile archiviare la chiave su un dispositivo separato in modo che forniscano semplicemente la chiave all'avvio del server di database.


0

Un'opzione possibile è quella di creare una copia del database e scrub quella copia con uno script in modo da finire con dati diversi da quelli effettivamente in produzione. Non finirai con gli stessi dati della produzione ma avrai la stessa scala.


questo sembra semplicemente ripetere il punto sollevato e spiegato nella risposta migliore circa una settimana fa
moscerino del
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.