¿Están cifrados los archivos de la base de datos de MySQL?

10

Estoy intentando almacenar de forma segura las credenciales de los usuarios en una base de datos MySQL que está alojada en un servidor diferente al de la aplicación (la comunicación entre ambas es segura).

Inicialmente asumí que sin un conocimiento de nombre de usuario / contraseña para MySQL, nadie puede acceder y leer los datos. Sin embargo, me he dado cuenta de que podría haber un escenario en el que un atacante podría obtener acceso a este servidor SQL y simplemente hacer una copia de los archivos de la base de datos que se encuentran en el disco.

¿Están cifrados los archivos de la base de datos MySQL en el disco?

¿Puedo leer directamente los datos de estos archivos sin saber mi nombre de usuario / contraseña de MySQL? Estoy considerando encriptar y desencriptar las credenciales en la aplicación y almacenar solo la versión encriptada en la base de datos, ¿pero es necesario?

    
pregunta leopik 30.10.2016 - 11:31
fuente

4 respuestas

13
  

¿Los archivos de la base de datos MySQL que están almacenados en el disco están cifrados?

No, no lo son.

Puede (relativamente) probar esto fácilmente moviendo . ibd o . myd a un sistema diferente, donde todavía puede leerlos. O simplemente puede abrirlos y probablemente verá al menos parte del contenido de las tablas en texto sin formato.

Algunos motores MySQL proporcionan cifrado opcional, como innodb . MySQL Enterprise Edition también proporciona cifrado opcional.

    
respondido por el tim 30.10.2016 - 13:17
fuente
6
  

¿Puedo leer directamente los datos de estos archivos sin saber mi nombre de usuario / contraseña de MySQL?

Usted apuesta.

  

Estoy considerando encriptar y desencriptar las credenciales en la aplicación y almacenar solo la versión encriptada en la base de datos, ¿pero es necesario?

Tampoco almacene contraseñas de texto sin formato en su base de datos, y tampoco use cifrado simétrico (si lo hace, entonces cuando pierda su clave junto con las contraseñas cifradas, perdió).

La forma de almacenar contraseñas (en cualquier lugar, no importa si las almacena en archivos sin formato, bases de datos o en otro lugar) es saltearlas y hacerlas con una función hash segura. Una función hash toma una cadena de entrada y devuelve una cadena de aspecto aleatorio de longitud fija como una salida. Almacena esta cadena de apariencia aleatoria en su base de datos.

Cuando desee verificar si alguien ingresó la contraseña correcta, ejecute la contraseña a través de la función hash y verifique la cadena resultante contra la cadena en su base de datos.

De esta manera, las contraseñas no están expuestas (las funciones hash son funciones de una sola vía, lo que significa que no se puede invertir la función hash sin un gran esfuerzo).

Tenga en cuenta que simplemente hash de la contraseña no es suficiente. Tiene que concatenar un valor de sal aleatorio a la contraseña antes de modificarla y luego almacenar la salida de la función de hash Y el valor de sal en su base de datos. Necesitas hacer esto por varias razones:    1. Si no lo hace, entonces las contraseñas idénticas producirán una idéntica       valor hash    2. Alguien con algún tiempo en sus manos podría precalcular una tabla de       Contraseñas de hash (tablas del arco iris). Usando un valor de sal hace esto       Operación mucho más cara.

Hay funciones hash disponibles para las contraseñas de hash, por ejemplo, bcrypt. Usa uno de ellos en lugar de rodar el tuyo. NO utilice una función hash estándar como md5 o sha1. Todos están diseñados para ser rápidos, que es lo opuesto a lo que quieres en una función de hash de contraseña (para que los ataques de fuerza bruta en tu archivo de contraseña sean más difíciles cuando se roban).

    
respondido por el Pascal 30.10.2016 - 16:10
fuente
1
  

donde un atacante podría obtener acceso a este SQL

En este punto, ya han pasado por alto la mayoría de sus controles de seguridad y tienen acceso a los datos, que generalmente es el objetivo del ataque (el robo de credenciales se realiza con el objetivo de obtener acceso a los datos). Las contraseñas de los usuarios deben estar con un código de acceso seguro (las contraseñas de mysql nativas se guardan en la base de datos, pero probablemente no se cifrarán en la aplicación).

Cualquier tipo de cifrado transparente, como LUKS o FUSE, también será transparente para un atacante con acceso al servidor en ejecución.

Puede haber cosas que podría considerar, como el uso de hash de nombres de usuario para hacerlos más anónimos (considere el ataque de Ashley Maddison), pero sin entender lo que aún intenta proteger en esta etapa del juego, es difícil recomendarlo. Le sugiero que obtenga más beneficios al centrar su atención en evitar que un atacante llegue tan lejos / detectando un posible compromiso del servidor.

    
respondido por el symcbean 30.10.2016 - 17:18
fuente
1
Are MySQL database files that are stored on disk encrypted?

No. MySQL no, por defecto, encripta sus archivos. No tiene claro qué tipo de datos está cifrando, pero parece que la mejor solución en su caso sería una solución de cifrado basada en columnas. Esto le permitirá cifrar las columnas seleccionadas que contienen información confidencial y definir políticas / claves de cifrado para cada columna.

Una buena solución también debería permitirle tener control sobre el ciclo de vida de las teclas enc / dec.

Todo esto puede ser muy útil, especialmente para el cumplimiento de cualquier regulación seria de protección de datos privada.

Esta solución "MyDiamo" es una opción viable para el cifrado basado en columnas y el precio es bastante razonable.

Si desea el cifrado a nivel de archivo, le recomiendo que utilice el cifrado MySQL Enterprise como se sugiere anteriormente.

    
respondido por el NA AE 15.12.2016 - 03:57
fuente

Lea otras preguntas en las etiquetas