KEK control de acceso

2

Tengo un servidor linux.

Quiero cifrar (y descifrar) los datos almacenados en una base de datos. Hay varios procesos que necesitan poder hacer esto, algunos de ellos son mis propias aplicaciones, pero también los scripts que se ejecutan en nginx.

Quiero usar una clave de cifrado de datos (DEK) para hacerlo. Para desbloquear el DEK utilizo una clave de cifrado de clave (KEK). El KEK se proporciona preguntando al administrador cuando se inicia el sistema.

¿Cuál es la mejor manera de almacenar el DEK para que estos procesos (¡pero solo estos!) tengan acceso a él?

Mi idea inicial era almacenarla en la memoria compartida, pero eso significa que cada proceso tiene acceso potencial a ella. (¿es correcto?)

La siguiente idea fue almacenarlo en un tmpfs, que al menos tiene algún control de acceso (con respecto a UID y GID) en el que el proceso puede y no puede leerlo.

    
pregunta Lieuwe 08.02.2018 - 13:54
fuente

1 respuesta

1

Conceptos erróneos sobre KEK y DEK

El KEK no está destinado a ser almacenado, solo el eDEK (DEK encriptado) es. KEK se ingresa una vez y se usa para descifrar el eDEK. El DEK se guarda en la memoria por cualquier proceso que lo requiera, ya que es fundamentalmente necesario que una clave esté presente en la memoria para poder utilizarla para el descifrado. El KEK debe mantenerse en la memoria solo el tiempo suficiente para descifrar el eDEK, luego debe sobrescribirse (para evitar que permanezca en la memoria liberada). Como la administración de claves en la memoria puede ser difícil, con muchas maneras de arruinar las cosas, recomiendo encarecidamente utilizar el software existente diseñado para este fin. Si no sabe cómo y por qué debería bloquear memoria que contendrá material clave , o cómo garantizar que las llamadas memset no sean optimizado al borrar material clave de la memoria, no debe implementar sistemas de cifrado usted mismo. Utilice una solución existente, o al menos una biblioteca criptográfica de alto nivel y fácil de usar.

Memoria compartida

Con respecto a su declaración sobre la memoria compartida, eso depende de lo que quiere decir con memoria compartida. memoria compartida POSIX (shmem) es un método para almacenar objetos en la memoria que cualquier proceso con Los permisos adecuados pueden acceder. Es similar a su idea de almacenar datos en tmpfs, excepto que la memoria compartida POSIX utiliza una API especial para acceder a los objetos. En ese caso, almacenar algo sensible para un usuario determinado en la memoria compartida puede no ser una gran idea.

La otra definición de memoria compartida es la memoria presente en el espacio de direcciones de más de un proceso. Un proceso debe elegir compartir una determinada región de memoria con otro proceso, pasando MAP_SHARED para mmap al solicitar memoria desde el kernel. Por lo general, esto se realiza mediante un proceso principal que luego se divide en dos procesos que comparten una región específica de la memoria. En este caso, la memoria solo es compartida por procesos que lo permiten explícitamente.

Modelado de amenazas

Es necesario definir su modelo de amenaza. ¿De quién estás protegiendo estos datos? ¿Dónde están posicionados en relación a los datos? ¿Qué nivel de acceso tienen? En general, un sistema operativo ya proporcionará controles de acceso a nivel de software, lo que hará que el cifrado sea una herramienta incorrecta para evitar que un proceso malintencionado acceda a los datos que se utilizan en otros lugares. El almacenamiento encriptado está diseñado para brindar seguridad data-at-rest , protegiendo los datos en el disco duro conduzca, en caso de ser robado o de lo contrario caer en las manos equivocadas. Para este modelo de amenaza en el que se pretende utilizar el cifrado, no es necesario que proporcione la clave para más procesos de los que se necesitan para leer la base de datos. Específicamente, debe permitir que el software de la base de datos realice el cifrado y el descifrado, permitiendo que cualquier persona con permiso para conectarse al servidor de la base de datos pueda leer el contenido, sujeto a los permisos de nivel de software.

    
respondido por el forest 08.02.2018 - 15:43
fuente

Lea otras preguntas en las etiquetas