Protegiendo la contraseña maestra en la memoria

5

Suponiendo que quiero ingresar la contraseña maestra solo una vez al inicio del programa, ¿cómo se protege esta contraseña maestra en la memoria después de eso? ¿La clave de cifrado después de derivarse de la contraseña se vuelve a cifrar? Si es así, ¿por qué? ¿Se almacena en varias partes y se ensambla solo antes de ser utilizado?

¿Cómo se hace este tipo de cosas por lo general? ¿Vale la pena el esfuerzo?

    
pregunta graywolf 10.06.2016 - 14:54
fuente

1 respuesta

5

Creo que tener datos confidenciales (ya sea la contraseña o la clave derivada, etc.) en la memoria no es algo con lo que la mayoría de los sistemas se ocupan .

Dicho esto, aquí hay varios métodos de mitigación posibles para proteger datos privados en memoria . Esto podría aplicarse a una variedad de temas, Servidor, Móvil o Escritorio. Los principales son los mismos. Tampoco estoy seguro de qué vectores de ataque le interesan más. (Virus, ataques físicos)

  1. Un primer paso obvio sería deshabilitar intercambiar , que es una función que toma las 'páginas' de memoria menos utilizadas y las escribe en un espacio en el disco duro. Sería fragmentado, pero es muy posible que el atacante obtenga datos con este método.

    Es posible que algunos sistemas operativos proporcionen un medio para almacenar memoria especialmente marcada que está prohibido almacenar en intercambio. Sin embargo, nunca lo he investigado, y estoy seguro de que es más complejo que su variable de tiempo de ejecución típica. Si lo hiciera de esta manera, ya no tendría que deshabilitar el intercambio en toda la máquina teniendo asociado el impacto de rendimiento.

    @Stephane comenta que Windows tiene una opción llamada CryptProtectMemory que encripta la memoria. Creo que esto es inteligente, ya que de esa manera solo debería prohibirse el intercambio de la clave, en lugar de cada pieza individual de información confidencial.

  2. En cuanto a la Memoria en sí (intercambiada o no), si inició sesión como root o como la misma cuenta de usuario en el que se está ejecutando el proceso, hay un medio para volcar todo memoria para ese proceso dado. Muchos de los lenguajes de programación de alto nivel proporcionan esta funcionalidad internamente con las mismas condiciones de cuenta de usuario.

    • Android resuelve este problema al proporcionar a cada aplicación su propia cuenta de usuario en el sistema operativo, lo que brinda muchos beneficios adicionales.
    • Los entornos de servidor a menudo tienen servicios segregados en cuentas de usuario alternativas para ayudar a contener posibles infracciones, tanto desde la memoria como desde la perspectiva del almacenamiento del sistema de archivos. (¡Nunca ejecute un servicio público como root!)
    • En un entorno de escritorio tradicional, no hay mucho que pueda hacer para proteger los procesos que se ejecutan en la misma cuenta de usuario.
  3. La última posibilidad sería un módulo de hardware especial (ya sea para almacenar los datos o una clave de cifrado para los datos) que esté separado del sistema operativo principal. Sugeriría echar un breve vistazo a Trusted Execution Environment (TEE) y / o Secure Element (SE). Consulte Sistema de almacén de claves de Android .

    También existe el método más extremo de usar una computadora completamente separada (pequeña), es decir, Raspberry PI.

    Relacionados: enlace

  4. Específicamente para su ejemplo de una contraseña maestra, por supuesto, no puede almacenar la contraseña maestra general, sino la contraseña final que se extrajo de la tienda. De esta manera, el usuario debe volver a ingresar la contraseña maestra cuando visite un sitio nuevo.

respondido por el George Bailey 10.06.2016 - 15:18
fuente

Lea otras preguntas en las etiquetas