Esto es posible hasta cierto punto, en Windows, utilizando la API de protección de datos de Windows ; más específicamente la función CryptProtectData . Esta función le permite cifrar datos contra un perfil de usuario o una máquina, de modo que solo esa entidad pueda recuperar los datos.
Su configuración se vería así:
- Un usuario de servicio dedicado está configurado para la aplicación.
- Una aplicación auxiliar que se ejecuta como usuario de servicio encripta las credenciales con
CryptProtectData
, con dwFlags
establecido en 0, y las almacena en el disco o en el registro.
- La aplicación se ejecuta como el usuario del servicio y descifra las credenciales en el inicio, usando
CryptUnprotectData
.
- Cree un grupo para usuarios de servicios de aplicaciones que no también tenga privilegios de otras maneras (por ejemplo, parte del grupo de administradores)
- Utilice esta técnica para permitir que los usuarios de ese grupo inicien / detengan el servicio.
- Asegúrese de que el grupo no pueda escribir / modificar el archivo ejecutable, o cualquiera de las DLL dentro del directorio de la aplicación, o causar que un ejecutable arbitrario se ejecute en el contexto del usuario del servicio de la aplicación. Esto también significa que no deberían poder modificar las claves de registro y los valores para el servicio en
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
.
Es importante tener en cuenta que, si los administradores de la aplicación pueden modificar el binario de la aplicación o ejecutar un programa en el contexto del usuario del servicio de la aplicación, simplemente podrían llamar a CryptUnprotectData
y obtener acceso a las credenciales.
Si hace que estos administradores de aplicaciones formen parte del grupo completo de administradores, les está dando las claves del reino: pueden instalar y ejecutar el software que deseen en este momento (incluido el código del modo kernel) y podrán Evita cualquier control que implementes. No hagas eso si quieres mantener el control.