¿Cuál es una buena práctica de seguridad para almacenar una base de datos crítica en las computadoras portátiles de los desarrolladores?

33

Tenemos algunos datos:

  1. Los desarrolladores necesitan una réplica de la base de datos de producción en sus máquinas.
  2. Los desarrolladores tienen la contraseña de dicha base de datos en los archivos App.config.
  3. No queremos que los datos de dicha base de datos se vean comprometidos.

Algunas soluciones sugeridas y sus inconvenientes:

  1. Cifrado de disco completo. Esto resuelve todos los problemas, pero degrada el rendimiento de la computadora portátil, y somos una nueva empresa, por lo que no tenemos dinero para caballos de batalla.
  2. Crear una máquina virtual con disco duro encriptado y almacenar la base de datos en ella. Funciona bien, pero no ayuda demasiado, ya que hay una contraseña en Web.Config.
  3. Solución número 2 + que requiere que el desarrollador escriba la contraseña de la base de datos cada vez que ejecuta algo. Resuelve todos los problemas, pero es realmente engorroso para los desarrolladores que a veces inician la aplicación varias veces por minuto. Además, tenemos múltiples aplicaciones que se conectan a la misma base de datos, y la implementación de una pantalla de contraseña tendrá que diferir en cada una.

Entonces, mi pregunta es, si hay alguna solución común a dicho problema, o alguna sugerencia sobre cómo hacer que cualquiera de las soluciones anteriores sea viable.

Svarog
fuente
26
¿Ha medido realmente el impacto en el rendimiento del cifrado de disco completo? Lo he estado usando en computadoras portátiles bastante viejas y no reconocí ninguna degradación significativa del rendimiento. Los sistemas operativos modernos son bastante buenos para el almacenamiento en caché y los discos son lentos de todos modos. El peor impacto probablemente sea en la duración de la batería.
5gon12eder
69
Para ser honesto, esto no suena como el enfoque correcto. 1) ¿Por qué los desarrolladores necesitan una base de datos de producción en sus máquinas? ¿No hay una manera de crear datos ficticios para un dev db? 2) ¿Por qué la contraseña se almacena en texto plano en un archivo de configuración? Parece que estás tratando de poner una venda en un proceso defectuoso. Tal vez pueda revisar lo que realmente vive en las máquinas de desarrollo, así como también cómo se almacena la contraseña para la base de datos.
Thomas Stringer
2
Hay razones para que los desarrolladores necesiten una base de datos de producción. Por razones históricas, su trabajo está demasiado unido a los datos en vivo. Sé que es una mala idea, y si no encontramos una buena solución, pasaremos a datos ficticios. Por ahora estoy tratando de encontrar una buena solución sin eso.
Svarog
66
Ningún usuario de una MacBook Pro podría decirle por la velocidad de la máquina si el cifrado de disco completo está activado o desactivado en una unidad SSD. No hay diferencia Ninguno que puedas notar. Tal vez uno que pueda medir, pero nada que sea notable.
gnasher729
55
Secundo el comentario de @ gnasher729. Después de haber utilizado el cifrado de disco completo durante muchos años en entornos regulados (financieros y sanitarios), no tiene que ser un desgaste notable en el rendimiento. Muchas personas mencionan otros puntos válidos, pero en un entorno HIPAA es difícil tener una política razonable sin cifrado completo del disco, incluso si las bases de datos no se colocan en las computadoras portátiles. Los correos electrónicos y otros fragmentos de datos a menudo terminan allí de todos modos. Intercambiar archivos ... etc ... Full Disk Encryption no es adecuado, pero generalmente es necesario.
joshp

Respuestas:

100

No solo no desea una copia de la base de datos de producción, sino que en realidad puede ser ilegal. Por ejemplo, en los EE. UU., No puede mover los datos de producción fuera del entorno de producción si contienen información regulada, como datos de salud personal, datos financieros o incluso datos que podrían usarse en el robo de identidad. Si lo hace, podría recibir una multa, perder su posición de cumplimiento y, por lo tanto, estar sujeto a auditorías más agresivas, o incluso ser nombrado en una demanda.

Si necesita datos a escala de producción para las pruebas, tiene un par de opciones:

  1. Generar todos los datos ficticios. Esto es más complicado de lo que parece. Es sorprendentemente difícil y laborioso generar datos imaginarios sensibles.
  2. Anonimice sus datos de producción. Esto puede ser más fácil, pero proceda con precaución.

Para la opción # 2

  • En el entorno de producción, un administrador de base de datos autorizado realiza una copia de los datos de producción.
  • Aún en el entorno de producción, el mismo administrador autorizado ejecuta una rutina que anonimiza todos los datos confidenciales. En caso de duda, anonimizar.
  • Solo entonces los datos deberían trasladarse a otro entorno.
Corbin March
fuente
31
y la contraseña para la copia de la base de datos no debe ser la misma que para la versión de producción .....
Lightness Races with Monica
3
"Por ejemplo, en los Estados Unidos, no puede mover los datos de producción fuera del entorno de producción si contiene información regulada" ¿Qué? ¿Tienes una fuente para esto? ¿No puede, por ejemplo, usar copias de seguridad de una base de datos de producción como datos para el entorno de ensayo o como prueba de dbs en máquinas de desarrollador?
niñera
12
@nanny No si estás usando datos regulados. Por ejemplo, he trabajado bajo la regulación HIPAA. La HIPAA establece que "las entidades cubiertas también deben implementar políticas y procedimientos mínimos razonables necesarios que limiten la cantidad de información de salud protegida que se usa, divulga y solicita para ciertos fines". Una política mínima necesaria está abierta a alguna interpretación. Nuestro asesor legal sugirió una interpretación estricta que mantuvo los datos confidenciales contenidos donde los desarrolladores no podían acceder a ellos. (¿Es realmente necesario que hagan su trabajo?) La misma precaución se aplica al cumplimiento financiero como PCI.
Corbin Marzo
44
@nanny Tome esto como un rumor de un no abogado, pero según tengo entendido, las reglas varían mucho según el estado. El asesor legal con el que trabajo siempre se muestra cauteloso. Estrictamente hablando, los desarrolladores no necesitan SSN reales para realizar sus tareas, por lo que el abogado sugiere que esos SSN vivan en un entorno protegido donde los desarrolladores no puedan acceder a ellos. Sin embargo, no me escuches. Un abogado que vela por sus intereses a largo plazo será el mejor recurso.
Corbin Marzo
55
Estrictamente hablando, no es ILEGAL ser descuidado con PPI, a menos que esté haciendo trabajo del gobierno, entonces el Título 32 entra en juego ... pero es una exposición grave de responsabilidad civil. Sin embargo, esta es una gran respuesta. Votado
dwoz
9

¿Al menos puede darles a los desarrolladores máquinas virtuales en su centro de datos en las que puedan utilizar RD para este trabajo? Si bien realmente deberían estar funcionando a partir de datos que no son de producción, esto sería más seguro hasta que pueda llegar allí, ya que los datos no se almacenarían en computadoras portátiles fácilmente robadas.

Brian Knoblauch
fuente
esto se lee más como un comentario, vea Cómo responder
mosquito
55
@gnat, esta respuesta puede ser breve, pero es una muy buena alternativa sugerida.
No seas tan pedante, @gnat ... esta es una buena respuesta.
dwoz
@ dan1111 Ese es el problema. No es una respuesta. Es una alternativa. Eso lo convierte en un comentario, no en una respuesta.
corsiKa
2
@corsiKa, las respuestas que desafían la premisa de la pregunta están permitidas y, a menudo, son muy buenas respuestas. Ver problema XY: meta.stackexchange.com/questions/66377/what-is-the-xy-problem . Y las respuestas más detalladas pueden ser mejores, pero esta sigue siendo una respuesta.
8

Cambia tu forma de trabajar si es posible.

Como otros han señalado:

  • Usar datos de producción para el desarrollo no es una buena práctica.
  • Tener una contraseña almacenada en texto sin formato no es una buena práctica.

Ambos lo exponen a un riesgo significativo y deben cambiarse si es posible. Al menos, debe evaluar seriamente cuál sería el costo de realizar estos cambios. Si esta es una dependencia externa que no tiene poder para cambiar, considere plantear esto como una preocupación para quien tenga ese poder.

Sin embargo, en el mundo real, puede que realmente no sea posible cambiar esto. Suponiendo que lo que está haciendo es legal, es posible que tenga que vivir con este acuerdo (al menos temporalmente).

Si esto es realmente necesario, solo necesita hacer cifrado de disco completo.

Dados los riesgos, debe utilizar la mejor opción de seguridad disponible, y esta es la opción. Si hay un éxito en el rendimiento, vive con él. Es un costo de trabajar con datos confidenciales.

Si fuera su cliente, no me impresionaría que decidiera no utilizar la mejor opción de seguridad disponible con mis datos, ya que esto hizo que sus computadoras portátiles fueran un poco más lentas.


fuente
1
"No es una solución ideal" debería cambiarse por "una idea completamente estúpida" OMI
Darkhogg
@Darkhogg, tienes razón, debería ser más fuerte. Editado No iría tan lejos como "completamente estúpido" sin saber cuán sensible es la aplicación. Hablando en términos prácticos, el riesgo de compromiso es muy, muy bajo si se usa el cifrado de disco completo, por lo que es posible aprovechar demasiado esto como un problema de seguridad.
Estoy de acuerdo con el primer punto, pero no con el segundo. Si no está almacenando su contraseña en texto plano, ¿dónde la está almacenando? (1) texto cifrado o (2) su cerebro. Si (1), ¿dónde está almacenando la contraseña para el cifrado (bucle infinito detectado). Si (2), entonces espero que le guste levantarse a las 2:00 a.m. para escribir la contraseña para reiniciar el servicio.
emory
1

La respuesta de Corbin March es bastante buena, solo agregaré un detalle adicional, que generalmente tiene dos clases de datos en su base de datos de producción: metadatos del sistema / aplicación; y datos de usuario del cliente / datos transaccionales. Este último NUNCA debe usarse en un entorno de desarrollo "tal como está".

De hecho, es muy raro que necesite información real del cliente de producción para realizar el desarrollo.

Sin embargo, si el problema que el OP está describiendo aquí involucra datos de secretos comerciales o de otro modo datos del sistema altamente patentados que no involucran datos de clientes, eso es requerido por los desarrolladores ... el enfoque de seguridad debe involucrar un esquema que no tenga la contraseña de db se mantiene en texto sin formato en un archivo de recursos en alguna parte. Debe haber un mecanismo para, por ejemplo, regenerar una contraseña diaria, que no esté almacenada en el disco.

dwoz
fuente
55
client user data/transactional data... should NEVER be used in a development environment "as is." - Esto me parece inviable. Los problemas de programación relacionados con la producción que tienen que ver con los datos de un cliente específico no podrían resolverse bajo este acuerdo. Además, los datos reales en vivo son extremadamente útiles desde el punto de vista de las pruebas. El esfuerzo de privatización o anonimización debe centrarse únicamente en los datos que están específicamente regulados.
Robert Harvey
@RobertHarvey, solo es inviable si no puede reproducir el problema de producción en un entorno de desarrollo. Creo que a lo largo de mi carrera (largo) puedo contar con un par de dedos la cantidad de veces que los datos de prueba desinfectados adecuadamente no fueron adecuados para reproducir un error de producción. ¡La "información comercial patentada" va mucho más allá de los números de seguro social y los números CC!
dwoz
44
Pero si va a seguir esa ruta, tendrá personas de TI que no pueden hacer su trabajo porque no tienen acceso administrativo a todo. Admito que eso causa posibles problemas de Snowden, pero no veo una alternativa viable, aparte de contratar personas en las que pueda confiar. Sarbanes Oxley e HIPAA son muy específicos sobre qué tipo de datos necesitan ser secuestrados, y no incluye "todos los datos de producción", ni por asomo. Dicho esto, no creo que existan datos de producción de ningún tipo en las computadoras portátiles itinerantes.
Robert Harvey
1
-1 para NUNCA. Tus comentarios más matizados son mejores que tu respuesta; deberías editarlos en él.
1
@ dan1111 podemos aceptar estar en desacuerdo entonces. Los datos del cliente "tal cual" nunca NUNCA NUNCA se deben usar en sistemas de desarrollo. Siempre debe ser desinfectado. No crees esto porque aún no has sido mordido por esta mangosta rabiosa ... y eso es lo que es, cuando sucede. Un roedor loco y rabioso que intenta extraer tu sangre. Sigue mi consejo, evita la mangosta rabiosa.
dwoz el
1

No indica qué base de datos y qué entorno.

Si puede utilizar la seguridad integrada, entonces no se puede acceder a la base de datos sin iniciar sesión como ese usuario. Sí, si los datos están en el disco duro, pueden ser pirateados, pero esta es una defensa de primer nivel.

App.config me hace pensar que puede ser un .NET. Ponga config en una memoria USB y léalo desde la memoria USB. Si la unidad no está presente, haga que el usuario escriba la contraseña.

¿Hay alguna manera de almacenar la contraseña en la memoria la primera vez que todos la ingresan y leen? Nuevamente, no declaras el medio ambiente. Archivos mapeados en memoria

Con algunos TDE puede almacenar la clave en un dispositivo separado para que solo suministren la clave cuando se inicie el servidor de la base de datos.

paparazzo
fuente
0

Una opción posible es hacer una copia de la base de datos y eliminar esa copia con un script para que termine con datos diferentes de los que realmente están en producción. No terminará con los mismos datos que la producción, pero tendrá la misma escala.

Jason Crosby
fuente
esto parece simplemente repetir el punto hecho y explicado en la respuesta principal hace aproximadamente una semana
mosquito