Cómo implementar el cifrado de la base de datos

Si no es un especialista en criptografía y seguridad, se recomienda que no implemente el cifrado de la base de datos usted mismo, no importa cuán tentador se sienta esa ruta. Es mejor elegir la solución que mejor se adapte a su caso de uso y modelo de amenaza, o pedirle a una empresa dedicada al desarrollo competente en seguridad que le proporcione dicha solución.

Sin conocer sus casos de uso, además, es un consejo muy amplio que puedo dar, después de haber pasado muchos años en el tema.

Existen múltiples enfoques para el cifrado de la base de datos, y todos dependen de un modelo de amenaza: qué está protegiendo, contra quién, qué partes de su sistema tienen más probabilidades de verse comprometidas. La criptografía no es una bala de plata y protege bien contra los riesgos que has evaluado bien en primer lugar.

No hay demasiados lugares en los que pueda cifrar los datos.

  • Nivel de aplicación Cifrar / descifrar datos en su aplicación, enviarlos a la base de datos. Problemas: ubicación clave, la base de datos no puede hacer nada con datos cifrados, solo necesita cifrado selectivo en campos confidenciales. Riesgos: la aplicación está más cerca del usuario en este esquema, por lo que también está más cerca del atacante.
  • Entre aplicación y almacenamiento . Puede cifrar en el lado de la base de datos, si tiene tales capacidades. De esta manera, mantiene secretos en el lado de la aplicación y blobs encriptados en el lado de la base de datos, por lo que comprometer ambos es necesario para filtrar la mayoría de los datos. El TDE mencionado anteriormente es uno de los casos secundarios de cifrado del lado de la base de datos, donde los secretos están bien compartimentados en un entorno separado. Riesgos: modelo de riesgo frágil. Hazlo mal y TDE / cifrado de proxy / cifrado en consulta se volverá inútil, solo consumiendo recursos.
  • Cifrado de disco Los datos en reposo están protegidos a nivel de disco. Protege bien contra el compromiso físico. Si el sistema pierde discos físicos, son inútiles. No ayuda mucho en el entorno moderno, donde el sistema operativo debajo de la base de datos probablemente se vea comprometido primero, no el hardware físico.

Aspectos a tener en cuenta : la aplicación comprometida pierde tanta información como ahora está dentro de la aplicación, más las credenciales para acceder a la base de datos (que pueden incluir o no los secretos).
Existen algunas técnicas para evitar que las credenciales se filtren desde el lado de la aplicación, no hay muchas técnicas que eviten que los atacantes alteren el flujo de la aplicación de manera que descargue todos los registros de la base de datos uno por uno, como una acción legítima. No hay balas de plata, lo siento, pero hay un montón de trucos que tal vez quieras emplear (ver los enlaces a continuación).

Algunos enlaces para leer más:

  1. Para cosas más modernas como SSE, CryptDB, Homomorphic Encryption de una manera menos orientada al usuario y más fundamental, consulte la increíble presentación de Tony Arcieri – Frontiers in Cryptography.
  2. La compañía para la que trabajo hace mucho sobre el cifrado de bases de datos y backend, y hace algún tiempo escribimos una serie de publicaciones en el blog para hacer una descripción general de las técnicas y enfoques modernos en la protección de backend (que incluye, pero está lejos de limitarse a, la investigación que realizamos). También hemos lanzado recientemente la herramienta de cifrado de bases de datos de código abierto Acra, con un diseño criptográfico clásico aplicado a problemas modernos (soy uno de los ingenieros detrás de la parte criptográfica).
  3. Vormetric hace un muy buen trabajo explicando la arquitectura de seguridad detrás de sus soluciones de cifrado de bases de datos (hacen TDE, cifrado en el lado de la aplicación, compartimentación de claves, muchas cosas) en la página de cifrado de bases de datos.
  4. Sorprendentemente, Cisco ha producido una crítica bastante sensata sobre la implementación del cifrado de la base de datos en la aplicación, con pocos iniciadores prácticos para pensar: Cifrado de la base de datos para el desarrollo de aplicaciones

Si lo que pregunta es cómo encriptar los datos en reposo, especialmente almacenados en la base de datos, tiene pocas opciones.

a) Cifrado de disco completo que tiende a cifrar el sistema de archivos y, por lo tanto, protegerá los datos cuando se pierdan, es decir, los archivos robados y restaurados.

b) Cifrado de datos transparente (TDE): lo proporciona el proveedor de base de datos (Oracle / SQL Server, etc.) que cifra los datos antes de almacenarlos y los recupera en texto sin formato.

Esto es completamente transparente, por lo que generalmente no sirve de nada, excepto para decir “Estoy en conformidad, los datos están encriptados”. Cualquier persona que tenga acceso a la base de datos tendrá acceso a los datos en texto plano.

Por lo tanto, debe tener habilitada la Auditoría y tener configurado el control de acceso a nivel de usuario de la base de datos.

c) Agregar dispositivo / envoltorio / a nivel de código: hay muchas formas de lograrlo. Por lo general, los datos se cifran en la capa de aplicación (usted escribe el código) o en la capa de red (algo así como CipherCloud) antes de que los datos lleguen al destino (en este caso, la base de datos) o algún motor transparente (algunas soluciones instalarán un agente en la base de datos, algunas enrutarán el tráfico a través de un puerto diferente, etc.) que se cifra antes de que se almacenen los datos.

Esto es mucho mejor que TDE, ya que puede imponer el control de acceso en la capa de aplicación y cuando los datos se almacenan en DB, se encriptan. Entonces, si alguien consulta la base de datos sin pasar por el agente / proxy, no puede ver texto sin formato.

Una forma sencilla de averiguar si los datos están realmente protegidos es “seguir los datos” desde el momento en que se producen los datos y de cuántas maneras diferentes se consumen, incluidas las herramientas SQL.

El cifrado sin control de acceso carecerá de sentido en la mayoría de los casos y será simplemente una “solución de casilla de seguridad que yo también cumpla”.

Curiosamente, la respuesta es la misma que la pregunta “¿Cómo construyo un avión?”

A: con cuidado.

Con toda seriedad, sin embargo, este es un tema muy complicado que no se puede responder en Quora: las personas pasan años en esto y todavía se equivocan.