2009-10-07 6 views
17

È possibile che un'applicazione C++ in esecuzione su Windows rilasci i privilegi in fase di esecuzione?Eliminazione dei privilegi in C++ su Windows

Ad esempio, se un utente avvia la mia applicazione come amministratore, ma non c'è motivo di eseguire la mia applicazione come amministratore, posso in qualche modo rinunciare ai privilegi di amministratore?

In breve, vorrei scrivere codice nella funzione main() che elimina i privilegi di cui non ho bisogno (ad esempio, accesso in scrittura nella directory di Windows).

risposta

16

Sì, è possibile utilizzare AdjustTokenPrivileges per rimuovere i privilegi non necessari e pericolosi dal token. Puoi disabilitare se non necessario immediatamente (il privilegio può essere abilitato in seguito) o rimuovere del tutto un privilegio dal tuo token.

È inoltre possibile creare un token limitato tramite CreateRestrictedToken e riavviare l'applicazione in esecuzione con quel token limitato. CreateRestrictedToken può essere utilizzato per disabilitare i privilegi e rimuovere gruppi (come il gruppo Administrators) da un token.

Potrebbe essere possibile utilizzare AdjustTokenGroups per rimuovere il gruppo di amministratori dal token del processo in esecuzione, ma non l'ho mai provato su un processo già in esecuzione.

Si noti che l'accesso in scrittura alla directory di Windows non è coperto da un privilegio. Le risorse nel sistema hanno ACL's che controllano chi ha accesso. Il sistema e gli amministratori hanno accesso in scrittura alla directory di Windows.