Exécution avec des privilèges d’administrateur

La première étape pour déterminer le type de compte sous lequel votre application doit s’exécuter consiste à examiner les ressources que l’application utilisera et les API privilégiées qu’elle appellera. Vous constaterez peut-être que l’application, ou une grande partie de celle-ci, n’a pas besoin de privilèges d’administrateur. L’écriture de code sécurisé, par Michael Howard et David LeBlanc, offre une excellente description de la façon d’effectuer cette évaluation et est fortement recommandée. (Cette ressource n’est peut-être pas disponible dans certaines langues et certains pays.)

Vous pouvez fournir les privilèges dont votre application a besoin avec moins d’exposition aux attaques malveillantes en utilisant l’une des approches suivantes :

  • Exécutez sous un compte avec moins de privilèges. Pour ce faire, utilisez PrivilegeCheck pour déterminer les privilèges activés dans un jeton. Si les privilèges disponibles ne sont pas adéquats pour l’opération en cours, vous pouvez désactiver ce code et demander à l’utilisateur de se connecter à un compte avec des privilèges d’administrateur.
  • Divisez en une fonction d’application distincte qui nécessite des autorisations d’administrateur. Vous pouvez fournir à l’utilisateur un raccourci qui exécute la commande Exécuter. Pour obtenir des instructions détaillées sur la configuration du raccourci, recherchez « runas » dans l’aide. Par programme, vous pouvez configurer la commande Exécuter sous la clé de Registre De clé AppId de votre application.
  • Authentifiez l’utilisateur en appelant CredUIPromptForCredentials (GUI) ou CredUICmdLinePromptForCredentials (ligne de commande) pour obtenir le nom d’utilisateur et le mot de passe. Pour obtenir un exemple, consultez Demander des informations d’identification à l’utilisateur.
  • Empruntez l’identité de l’utilisateur. Un processus qui démarre sous un compte à privilèges élevés comme System peut emprunter l’identité d’un compte d’utilisateur en appelant ImpersonateLoggedOnUser ou des fonctions d’emprunt d’identité similaires, réduisant ainsi le niveau de privilège. Toutefois, si un appel à RevertToSelf est injecté dans le thread, le processus retourne aux privilèges système d’origine.

Si vous avez déterminé que votre application doit s’exécuter sous un compte disposant de privilèges d’administrateur et qu’un mot de passe administrateur doit être stocké dans le système logiciel, consultez Gestion des mots de passe pour connaître les méthodes permettant d’effectuer cette opération en toute sécurité.