Ausführen mit Administratorrechten

Der erste Schritt beim Festlegen des Kontotyps, unter dem Ihre Anwendung ausgeführt werden muss, besteht in der Untersuchung, welche Ressourcen die Anwendung verwendet und welche privilegierten APIs sie aufruft. Möglicherweise stellen Sie fest, dass die Anwendung oder große Teile davon keine Administratorrechte erfordern. Das Schreiben von Secure Code von Michael Codes und David LeBlanc bietet eine hervorragende Beschreibung der Durchführung dieser Bewertung und wird dringend empfohlen. (Diese Ressource ist in einigen Sprachen und Ländern möglicherweise nicht verfügbar.)

Sie können die Berechtigungen, die Ihre Anwendung benötigt, mit einer geringeren Gefährdung durch böswillige Angriffe bereitstellen, indem Sie einen der folgenden Ansätze verwenden:

  • Führen Sie unter einem Konto mit weniger Berechtigungen aus. Eine Möglichkeit besteht in der Verwendung von PrivilegeCheck, um zu bestimmen, welche Berechtigungen in einem Token aktiviert sind. Wenn die verfügbaren Berechtigungen für den aktuellen Vorgang nicht ausreichen, können Sie diesen Code deaktivieren und den Benutzer auffordern, sich bei einem Konto mit Administratorrechten zu anmelden.
  • Unterbricht eine separate Anwendungsfunktion, die Administratorberechtigungen erfordert. Sie können dem Benutzer eine Verknüpfung bereitstellen, mit der der Befehl RunAs ausgeführt wird. Ausführliche Anweisungen zum Einrichten der Verknüpfung finden Sie unter "Runas" in der Hilfe. Programmgesteuert können Sie den Befehl RunAs unter dem Registrierungsschlüssel AppId Key für Ihre Anwendung konfigurieren.
  • Authentifizieren Sie den Benutzer, indem Sie CredUIPromptForCredentials (GUI) oder CredUICmdLinePromptForCredentials (Befehlszeile) aufrufen, um Benutzername und Kennwort zu erhalten. Ein Beispiel finden Sie unter Frage des Benutzers nach Anmeldeinformationen.
  • Identität des Benutzers angenommen. Ein Prozess, der unter einem Konto mit hohen Berechtigungen wie System beginnt, kann die Identität eines Benutzerkontos durch Aufrufen von ImpersonateLoggedOnUser oder ähnlichen Identitätswechselfunktionen übernehmen und so die Berechtigungsebene verringern. Wenn jedoch ein Aufruf von RevertToSelf in den Thread eingefügt wird, kehrt der Prozess zu den ursprünglichen Systemberechtigungen zurück.

Wenn Sie festgestellt haben, dass Ihre Anwendung unter einem Konto mit Administratorrechten ausgeführt werden muss und dass ein Administratorkennwort im Softwaresystem gespeichert werden muss, finden Sie unter Behandeln von Kennwörtern Methoden, um dies sicher zu tun.