Comencemos con las restricciones:
- Necesita algún tipo de secreto compartido para enviarlo a un servicio para autenticarse, por lo que necesita poder acceder al texto sin formato.
- Esto debe hacerse de manera automatizada (desatendida).
- Le gustaría proteger las credenciales tanto como sea posible.
Primero, debemos reconocer que es imposible protegerlos por completo , y que puede o no valer la pena hacerlo. Si alguien puede ejecutar el código en su servidor, puede hacer casi cualquier cosa que pueda hacer el servicio legítimo, incluida la lectura de las claves y el uso de las mismas para realizar solicitudes a servicios remotos. Sin embargo, dependiendo de la cantidad de inconvenientes que estés dispuesto a sufrir, puedes hacer que sean más difíciles de usar.
Primero, comencemos con las "mejores prácticas" que tienen poco o ningún impacto en la capacidad de usarlas.
- Ejecute cada servicio en su servidor como un usuario separado. Lo ideal es agregar un sistema MAC como SELinux o AppArmor para contener un compromiso.
- Almacene claves / secretos en archivos que solo se pueden leer con el servicio adecuado y bloquee los permisos lo más posible. (0400 en Linux.)
- Asegúrese de que las claves brinden el menor acceso necesario en el extremo remoto. ¿Cargando archivos a un cubo S3? Cree un token de acceso con solo ese permiso. (De esta manera, si está comprometido, limita el daño que puede hacer un atacante).
Si necesita ir más allá de este punto, puede hacer algunas cosas:
- Almacena los secretos en un módulo de hardware. (En particular, si el criptográfico asimétrico es una opción). Esto no impedirá que un atacante use sus credenciales, pero evitará que se filtren.
- Use un módulo de hardware que requiera interacción humana. Cuando se inicia el servicio, deberá ingresar un PIN, y luego el servicio mantendrá la clave desencriptada solo en la memoria. (Por supuesto, un buen atacante probablemente puede sacar la clave de la memoria, pero eleva el nivel).
Más allá de este punto, nos metemos en el "estúpido para la mayoría de las aplicaciones": espaciamiento de aire, tokens interactivos que requieren PIN para cada firma, etc. La naturaleza desatendida desaparecerá rápidamente.