Actualmente estoy formulando mejores prácticas y requisitos de seguridad para el desarrollo continuo de software Java en mi departamento y resolví con la recomendación de usar el marco de trabajo de Jasypt para el cifrado / descifrado de las credenciales de la cuenta de servicio almacenadas en los archivos de propiedades de la aplicación en el sistema. El requisito general de los padres de nuestro equipo de Seguridad Cibernética es que los datos confidenciales en reposo deben protegerse mediante cifrado, sin embargo, no se proporcionan detalles sobre la administración de claves adecuada.
El esquema apropiado proporcionado por Jasypt es usar un algoritmo PBE que toma una contraseña secreta como entrada y la usa para descifrar la información protegida en los archivos de propiedades de la aplicación. Puede proporcionar la contraseña secreta de varias maneras, y la forma universal más apropiada que parece equilibrar la comodidad, la compatibilidad y la seguridad es obtener este secreto a través de una variable de entorno de usuario en tiempo de ejecución.
Claramente, la configuración de una variable de entorno global no es segura, y nuestro administrador del sistema afirma que no podemos establecerla en el nivel del usuario porque afirma que solo se cargaría como parte del perfil de bash, y eso significaría que la aplicación requiere que se inicie desde un shell, lo que impide que se ejecute como un proceso daemon.
Estaba pensando que podría ejecutar la aplicación desde un script de shell bash donde la variable de entorno necesaria se establece dentro del alcance del script antes de que se ejecute el comando de la aplicación Java. Entonces podría leer la protección de ese archivo de script de shell solo para el usuario en tiempo de ejecución del proceso del daemon.
El sistema operativo en cuestión es RHEL 6.5 que se ejecuta en servidores virtualizados dentro de nuestra intranet privada.
Mi pregunta es, ¿hay alguna vulnerabilidad notable en la que un atacante pueda obtener el valor de la variable de entorno de alguna manera? Por ejemplo, al ejecutar bash history, grepping procesos en ejecución, echar un vistazo a la memoria compartida, etc?
En general, ¿existen fallas importantes notables con este enfoque?