¿Cómo separar los datos confidenciales de almacenamiento y las contraseñas de hash?

8

Escenario: Tengo una aplicación web con un sistema de autenticación (clásico). La aplicación es básicamente una interfaz para una base de datos (MongoDB) que contiene datos confidenciales. Heblo correctamente las contraseñas almacenadas.

Asumir hash evita que el atacante sepa las contraseñas cuando ya obtuvo acceso a la base de datos:

Pregunta 1: ¿Hay un punto para las contraseñas de hash cuando almacena todos los datos en una base de datos?

Pregunta 2: ¿Cuál es la forma correcta de separar los datos confidenciales y las credenciales? ¿Bases de datos separadas? ¿Usar el sistema de autenticación integrado de Mongo para la autenticación de usuarios, tal vez?

    
pregunta Icki 22.09.2017 - 16:29
fuente

2 respuestas

1

Con respecto a Pregunta 1 :

En el caso general, sí, lo hace. No conoce los detalles de un posible ataque futuro, por lo que su trabajo consiste en hacer que una explotación real de cualquier vulnerabilidad sea lo más difícil posible.

Como usted sabe, la misión de seguridad de la información es proporcionar tres valores: confidencialidad , integridad y disponibilidad . Supongamos que un pirata informático obtuvo una copia completa de su base de datos (que afecta a confidencialidad ). Al poder iniciar sesión como usuario, puede asumir integridad (modificando los datos del usuario y realizando acciones en su nombre) y disponibilidad (por ejemplo, cambiando el correo electrónico que puede ser utilizado para recuperar el acceso.

Antes de cambiar a la pregunta 2 . Que yo sepa, MongoDB también tiene control de acceso en un nivel de recopilación, por lo que podría ayudar a limitar la propagación de ataques. También puede considerar el cifrado de entradas confidenciales en una base de datos para que el acceso de solo lectura no autorizado no sea tan crítico.

Respecto a la pregunta 2: No hay una forma correcta porque las decisiones de seguridad deben tomarse en función de muchos factores que pueden derivarse del análisis de riesgos. Puede almacenar credenciales de usuario en una base de datos diferente o crear un servidor de autenticación independiente, o usar servicios de autenticación de terceros (OAuth).

El objetivo principal aquí es mantener un equilibrio entre el precio de la implementación, el soporte de los controles de seguridad y una pérdida potencial que podría tener en caso de una violación de datos. Mi intuición es mantenerlo simple y seguir las recomendaciones básicas de seguridad (como el uso de contraseñas y la segregación de acceso mediante las herramientas de control de acceso de MongoDB) combinadas con otros controles de seguridad del sistema (como la validación estricta de entrada de usuario) que puede encontrar, por ejemplo, en OWASP ASVS checklist .

    
respondido por el Andrii K 18.07.2018 - 00:48
fuente
0

Pregunta 1: el punto de las contraseñas de hash es que si el atacante obtuvo una copia de su base de datos, no debería descifrar fácilmente las credenciales para evitar que se hagan pasar por los usuarios.

Teniendo en cuenta que muchos usuarios reutilizan contraseñas o simplemente las cambian de una manera muy sutil, puede también ayuda a reducir la propagación del compromiso a otros componentes de la infraestructura.

El hashing también evita el riesgo de empleados internos o desleales, ya que los empleados que pueden tener acceso total a la base de datos no podrán usar la información para hacerse pasar por otros usuarios de la aplicación, incluso si obtuvieron una copia de los hashes.

Pregunta 2: esta es completamente otra pregunta, que puede ser necesaria hacer por separado y proporcionar más detalles, para poder dar una respuesta más específica o menos vaga

    
respondido por el Jorge Alvarenga 22.09.2017 - 23:31
fuente

Lea otras preguntas en las etiquetas