Partager via


Exécution avec des privilèges d’administrateur

La première étape de l’établissement du type de compte sous lequel votre application doit s’exécuter consiste à examiner les ressources utilisées par l’application et les API privilégiées qu’elle appellera. Vous pouvez constater que l’application, ou de grandes parties, ne nécessite pas de privilèges d’administrateur. Écriture de code sécurisé, par Michael Howard et David LeBlanc, offre une excellente description de la façon de procéder à cette évaluation et est vivement recommandée. (Cette ressource peut ne pas être disponible dans certaines langues et pays.)

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

  • Exécutez-le 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 actuelle, vous pouvez désactiver ce code et demander à l’utilisateur de se connecter à un compte disposant de privilèges d’administrateur.
  • Séparez-vous d’une fonction d’application distincte qui nécessite des autorisations d’administrateur. Vous pouvez fournir à l’utilisateur un raccourci qui exécute la commande RunAs. Pour obtenir des instructions détaillées sur la configuration du raccourci, recherchez « runas » dans l’aide. Par programme, vous pouvez configurer la commande RunAs sous la clé appId clé de Registre appid pour 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 à l’utilisateur des informations d’identification.
  • Empruntez l’identité de l’utilisateur. Un processus qui commence sous un compte hautement privilégié 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 d’administrateur doit être stocké dans le système logiciel, consultez Gestion des mots de passe pour connaître les méthodes d’exécution en toute sécurité.