¿Dónde almacenar un pimiento?

2

Suponiendo que esté usando un pimiento en su hash de contraseña, ¿dónde debería almacenarse? Sé que no debe almacenarlo en la base de datos ya que se puede encontrar fácilmente allí durante un volcado y la idea es tener algo almacenado fuera de la base de datos, pero ¿no puede presentar un caso similar para almacenarlo en su código fuente? Mi instinto sería almacenarlo en un lugar diferente al lugar donde se encuentran tu código y tus hashes, de modo que un atacante que comprometa a ambos tenga menos posibilidades de comprometer la pimienta también.

Mis primeros pensamientos sobre dónde almacenarlo:

Windows

  • En el registro;
  • utilizando DPAPI;

Linux

  • ??? (No estoy familiarizado con los sistemas Linux)

multiplataforma

  • en un servidor externo, presumiblemente como un servicio consumible que recibe una contraseña y devuelve un hash;
  • en hardware especial como un periférico de seguridad o un enclave seguro que funciona de manera similar al servidor externo.

Probablemente podría encontrar una razón para cada uno de estos métodos, así como una razón en contra de cada uno de ellos. ¿Dónde almacenas la pimienta?

    
pregunta Nzall 24.03.2016 - 19:52
fuente

2 respuestas

6

Si tienes un HSM , entonces el pimiento debería estar en ese HSM, porque ese es el objetivo de tener un HSM .

De lo contrario, el pimiento es una clave que debe manejarse como tal. Tener una clave implica la gestión de claves; no debe (y, en realidad, no debe) estar codificado en la fuente. El código fuente se copia en varios lugares: máquina del desarrollador, sistemas de versiones, muchas copias de seguridad ... La clave es realmente una propiedad del servidor instancia (servidor único o conjunto de servidores que utilizan el mismo conjunto de servidores). usuarios registrados) mientras que la fuente se comparte, conceptualmente, entre muchas instancias de servidor.

En Windows, la DPAPI es lo que hará más felices a los auditores, aunque se puede decir que la protección adicional ofrecida por DPAPI no es, de hecho, tan grande. Si reinicia su servidor, se inicia automáticamente; esto significa que, independientemente de dónde coloque el pimiento, el almacenamiento en frío del servidor (contenido del disco duro) es suficiente para recuperar el pimiento. El pimiento tiene la intención de resistir los accesos de lectura de parcial por parte de los atacantes (razón por la cual no lo coloca en la base de datos), pero si el atacante puede leer el registro, entonces tiene mucho control sobre el máquina y probablemente tampoco se verá obstaculizada por DPAPI. Si usa el registro, ajuste los derechos de acceso en esa clave específica para que solo los usuarios relevantes puedan leerlo (normalmente, la cuenta de usuario con la que se ejecuta el servidor).

El uso de un archivo conlleva el riesgo de acceso de lectura a través de un script PHP mal desarrollado que termina volcando el contenido de los nombres de archivos elegidos por el atacante.

En Linux no hay registro ni DPAPI, así que use un archivo de configuración. Se podría tratar de ejecutar el procesamiento de pimienta en un proceso distinto al que se accede a través de algún mecanismo de comunicación entre procesos (por ejemplo, sockets de nivel Unix), y ejecutar el código del servidor real en un chroot .

En todos los casos, usar un pimiento tiene sus propios costos: usted tiene una clave que administrar, es decir, generar de forma segura y mantenerse seguro. Si pierde esa clave, perderá la capacidad de verificar las contraseñas de los usuarios, lo que puede ser muy inconveniente. En ese sentido, la pimienta es más crítica que la clave privada del servidor para su certificado SSL.

    
respondido por el Thomas Pornin 24.03.2016 - 20:28
fuente
1

En mi orden preferido

  1. En un módulo de seguridad de hardware ( DIY o opciones baratas )

  2. En una tarjeta inteligente conectada al servidor web (probablemente será lenta)

  3. En una computadora conectada al servidor web con una API muy, muy simple, que puede calcular los HMAC por usted pero que no entregará la clave

  4. En un archivo en el servidor web que solo puede ser leído por el proceso del servidor web

respondido por el Neil McGuigan 24.03.2016 - 20:20
fuente

Lea otras preguntas en las etiquetas