Questo è possibile in parte, su Windows, utilizzando l'API Windows Data Protection ; più specificamente la funzione CryptProtectData . Questa funzione consente di crittografare i dati su un profilo utente o su una macchina, in modo che solo tale entità possa recuperare i dati.
La tua configurazione sarà simile a questa:
- Un utente del servizio dedicato è configurato per l'applicazione.
- Un'applicazione di aiuto in esecuzione mentre quell'utente di servizio crittografa le credenziali con
CryptProtectData
, con dwFlags
impostato su 0 e lo memorizza su disco o nel registro.
- L'applicazione viene eseguita come utente del servizio e decrittografa le credenziali all'avvio, utilizzando
CryptUnprotectData
.
- Crea un gruppo per gli utenti del servizio applicazioni che è non anche con privilegi in altri modi (ad esempio parte del gruppo Administrators)
- Utilizza questa tecnica per consentire agli utenti del gruppo di avviare / interrompere il servizio.
- Accertati che il gruppo non possa scrivere / modificare il file eseguibile o una qualsiasi DLL all'interno della directory dell'applicazione o altrimenti eseguire un eseguibile arbitrario nel contesto dell'utente del servizio dell'applicazione. Ciò significa anche che non dovrebbero essere in grado di modificare le chiavi e i valori del Registro di sistema per il servizio in
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
.
È importante notare che, se gli amministratori dell'applicazione sono in grado di modificare il binario dell'applicazione o eseguire un programma nel contesto dell'utente del servizio dell'applicazione, potrebbero semplicemente chiamare CryptUnprotectData
e ottenere l'accesso alle credenziali.
Se rendi gli amministratori di queste applicazioni parte del gruppo degli amministratori completi, darai loro le chiavi del regno: possono installare ed eseguire qualsiasi software a loro piace (incluso il codice in modalità kernel) e saranno in grado di bypassare qualsiasi controllo implementato. Non farlo se vuoi mantenere il controllo.