Estoy intentando modelar & implementar una solución de encriptación transparente por proceso basada en archivos para Linux. Quiero que cada proceso tenga sus propios archivos encriptados. Quiero bloquear a Firefox para que no lea mi clave privada gpg (digamos que mi clave privada no está encriptada por defecto)
Actualmente es el siguiente:
- Conecte los envoltorios syscall (a través de una biblioteca inyectada con
LD_PRELOAD
globalmente) para el acceso a archivos (abrir, abrir, leer, escribir, crear, cerrar) y verificar si la ruta a acceder está cubierta por el cifrado (por ejemplo, ~ / .mozilla). si no se llama a la ruta, se llama a la función regular. - Pida al administrador de claves (un demonio privilegiado) las claves a través de un socket Unix
- Cifrar (al escribir / agregar / crear) o descifrar (al leer) los datos
Mis preguntas son:
- Estoy usando recvmsg / sendmsg para encontrar el pid que solicitó una clave. ¿Puede un adversario manipularlo?
- Estoy usando
/proc/*something*/exe
para encontrar la ruta del ejecutable de pid. ¿Es seguro (puede un proceso falsificarlo?) - El administrador de claves proporciona la misma clave a los procesos con la misma ruta de ejecución y uid. ¿Hay una mejor manera de modelarlo?