Die Benutzerkontensteuerung (, kurz UAC) ist ein Sicherheitsmechanismus von Microsoft Windows, welcher mit Windows Vista eingeführt wurde. Die Benutzerkontensteuerung wurde eingeführt, weil viele Windows-Anwender mit Administratorprivilegien arbeiten, welche bis Windows XP direkt auf gestartete Anwendungen übertragen wurden. Dieses Verhalten stellte ein großes Sicherheitsrisiko dar, weil so auch Schadsoftware administrative Rechte erhielt. Mit aktiver Benutzerkontensteuerung erhalten Anwendungen zunächst nur die Rechte eines normalen Nutzers, selbst wenn der Nutzer Administratorprivilegien hat.
Anwendungen können bei Bedarf administrative Rechte vom Administrator anfordern. Der Administrator muss die Rechteerhöhung ausdrücklich gewähren. Der Mechanismus ist bedingt mit dem unter UNIX-Systemen bekannten sudo Befehl vergleichbar.
Das Verhalten der Benutzerkontensteuerung ist anpassbar. Beispielsweise kann eingestellt werden, dass anstelle eines einfachen Bestätigungsdialoges das Anmeldepasswort zur Rechteerhöhung eingegeben werden muss.
Technisch bildet die Benutzerkontensteuerung die Grundlage für das Sandboxing von Programmen und Verzeichnissen unter Windows. Sie ermöglicht die Vergabe von Privilegien an Prozesse und die Isolierung von Prozessen und Fenstern, die auf demselben System mit unterschiedlichen Rechten ausgeführt werden.
Least-Privilege-Prinzip
Unter aktuellen Versionen von Windows wird bei der Installation ein Benutzerkonto mit Administratorrechten angelegt. Obwohl für den täglichen Gebrauch normale Nutzerrechte ausreichend sind, legen viele Anwender kein zusätzliches Benutzerkonto mit eingeschränkten Rechten an und betreiben ihren PC stattdessen mit dem Benutzerkonto, welches über volle Administratorrechte verfügt.
Da Prozesse grundsätzlich die Rechte des Nutzers "erben", bedeutete dies vor der Einführung der Benutzerkontenkontrolle, dass jede Software, auch Schadsoftware, mit vollen Administratorrechten gestartet wurde und so uneingeschränkten Zugriff auf das System hatten.
Mit Windows Vista, welches erstmals Microsofts Security Development Lifecycle anwendete, wurde mit der Benutzerkontensteuerung ein Sicherheitsmechanismus eingeführt, um das Prinzip des least user access oder least-privileged user account (LUA) umzusetzen. Mitglieder der Gruppe Administratoren erhalten beim Anmelden zwei Token: einen als Administrator und einen als Standardnutzer. Diese Nutzer werden als „Geschützte Administratoren“ (Protected Administrators, PA) bezeichnet. Sie arbeiten meistens mit normalen Nutzerrechten, können diese aber erhöhen, wenn es die Aufgabe erfordert. Um eine Manipulation der Rechteerhöhung durch Schadsoftware zu vermeiden, findet diese standardmäßig auf dem sicheren Desktop statt.
In die Benutzerkontensteuerung wurde auch der Befehl Runas implementiert. Der Befehl ermöglicht, Administrationsaufgaben mit einem normalen Benutzerkonto durchzuführen. Dazu muss das Konto und das Passwort eines Administrators in einem Dialog eingegeben werden. Diese UAC-Abfrage wird als „Eingabeaufforderung für erhöhte Rechte für Standardbenutzer“ (Over-the-shoulder, OTS) bezeichnet, während die Rechteerhöhung von Geschützten Administratoren als „Administratorbestätigungsmodus“ (Admin Approval Mode, AAM) bezeichnet wird.
Sicherheitskonzept Neben der Möglichkeit der Verwendung von Zugriffssteuerungslisten (englisch Access Control Lists, ACL) und den Privilegien, die zur feineren Rechtevergabe (oder -verbot) auch schon unter XP vorhanden waren, kam ab Windows NT 6.0 (Vista) noch der „Integrity Level“ hinzu. Im Deutschen wurde dies etwas unglücklich mit „Verbindlichkeitsstufe“ übersetzt, aber auch „Integritätsebenen“ ist ein geläufiger Begriff. Die Verbindlichkeitsstufe ist ein Sicherheitsmechanismus der Vorrang vor der Zugriffssteuerungsliste hat, also Zugriffe auch dann verhindert, wenn sie die Zugriffssteuerungsliste erlauben würde. Dazu bekommt jeder Prozess in seinem Access Token einen sogenannten Integrity Level (IL) verpasst, der ausdrücken soll, wie vertrauenswürdig er ist. Die hohe Verbindlichkeitsstufe bildet zusammen mit den administrativen Privilegien die beiden Teile des „administrativen Schlüsselbundes“, neben der Zugriffssteuerungsliste.
Integritätsebenen Jedes Objekt im System befindet sich auf einer von fünf Stufen, gekennzeichnet durch ein Label in seinem Security Descriptor. Die Grundidee der Integrity Levels (IL) ist es, dass Prozesse, die auf einer niedrigeren Stufe laufen, Objekte mit höherer Stufe nicht beschreiben können (No Write-up). So kann ein Prozess mit niedriger Verbindlichkeitsstufe den auf „Medium“ stehenden Benutzerdaten nichts anhaben und schon gar nicht den noch höher eingestuften Systemkomponenten. Zugriffe von unten nach oben sind also beschränkt, während auf gleicher Ebene oder von oben nach unten alles erlaubt ist – im Rahmen der Zugriffssteuerungsliste. Die fünf Integritätsebenen sind:
Systemverbindlichkeitsstufe Höchste Stufe, ist nur Systemprozessen wie svchost.exe, csrss.exe, winlogon.exe usw. und dem Benutzer SYSTEM sowie LocalSystem, LocalService und NetworkService vorbehalten. Hohe Verbindlichkeitsstufe Ist die Stufe der Benutzergruppen Administratoren, Sicherungs-Operatoren, Netzwerkkonfigurations-Operatoren und Kryptografie-Operatoren. Dies ist nötig, damit deren Prozesse durch User Interface Privilege Isolation (UIPI) nicht von Standardnutzerprozessen beeinflusst werden können. Mittlere Verbindlichkeitsstufe Ist die Stufe der Standardbenutzer (authentifizierte Benutzer). Die meisten Ordner und Verzeichnisse auf der Festplatte haben diese Integritätsebene, ebenso die Prozesse dieser Nutzer. Niedrige Verbindlichkeitsstufe Entspricht dem „geschützten Modus“ des Internet Explorers, welches das erste Programm war, das dieses Sandboxing nutzte. Auf der Festplatte gibt es unter %userprofile%\Appdata\LocalLow ein Verzeichnis mit niedriger Verbindlichkeitsstufe, in das diese Prozesse schreiben können. In der Registry steht mit HKCU\Software\AppDataLow ein äquivalenter Verzeichnispfad mit IL „low“ zur Verfügung. Die Benutzergruppe „Jeder“ hat ebenfalls diese Verbindlichkeitsstufe. Nicht vertrauenswürdige Verbindlichkeitsstufe Entspricht quasi einem Sandkasten im Sandkasten. Diese Integritätsebene wird für Anonymous-Anmeldungen verwendet. Da standardmäßig kein Verzeichnispfad mit diesem IL existiert, können diese Prozesse nur im Arbeitsspeicher existieren. Die Registerkarten des Google Chrome laufen z. B. mit dem Security Descriptor „nicht vertrauenswürdige Verbindlichkeitsstufe“.
Die Hauptziele der Mandatory Integrity Control (MIC) sind die Trennung von Standardnutzerprozessen von Prozessen mit erhöhten Rechten, weswegen auch das Component Object Model die Integritätsebenen beachtet. Ferner wird durch die Verbindlichkeitsstufen ein Schreibschutz im Wurzelverzeichnis des Rechners gewährleistet, während andererseits Anwendungen wie der Internet Explorer nur beschränkte Änderungsmöglichkeiten von Nutzerdaten und -profil haben. Während im Allgemeinen bei Objekten nur „No Write-up“ gilt, setzt das Prozessmanagement im NT-6-Kernel „No Read-up“ und „No Write-up“ bei laufenden Prozessen, um eine Manipulation der höhergestellten Prozesse zu verhindern. Es ist lediglich SYNCHRONIZE, PROCESS_QUERY_LIMITED_INFORMATION und PROCESS_TERMINATE möglich.
Normalerweise bekommt jede Anwendung die Rechte des Prozesses, von dem sie gestartet wurde. Das würde aber bedeuten, dass wenn ein Anwender den Internet Explorer startet, dieser auch mit mittlerer Verbindlichkeitsstufe laufen würde. Um das zu verhindern, gibt es im Access Token eines Accounts den Eintrag TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN, welcher bei Benutzeraccounts gesetzt und bei administrativen Accounts nicht gesetzt ist. Ist dieser Eintrag gesetzt, bewirkt er, dass Prozesse, welche gestartet werden, keine höheres Integrity Level bekommen können, als der EXE-Datei zugewiesen wurde. Da dem iexplorer.exe nur das IL „Low“ zugewiesen ist, wird diese Datei bei normalen Benutzern auch nur in dieser Stufe gestartet. Wenn der Administrator UAC abschaltet, laufen alle seine Prozesse mit hoher Verbindlichkeitsstufe, da jedem Prozess das administrative Token zugewiesen wird. Alle Dokumente und Dateien, welche dieser Administrator erzeugt, besitzen dann die Integritätsebene „hoch“. Wird nun die Benutzerkontensteuerung wieder aktiviert, bekommt jeder von ihm angeklickte Prozess/Ordner nur das Standardnutzer-Token (IL „mittel“) zu sehen, weswegen er diese Dateien ohne Admin-Rechte nicht mehr öffnen kann.
Die Verbindlichkeitsstufe eines Ordners gilt entweder nur für diesen selbst (object inherit, OI) oder für das ganze Verzeichnis (container inherit, CI). Wird eine Datei z. B. in %userprofile%\Appdata\LocalLow oder ein Unterverzeichnis desselben geschoben, erhält diese die niedrige Verbindlichkeitsstufe, egal welche sie vorher hatte (Abstufung vorausgesetzt).
Privilegien Die administrativen Privilegien sind der zweite Teil des „Schlüsselbundes“. Unter NT 6.0 wurden die Probleme, die sich bei der Arbeit mit einem Standardnutzeraccount ergaben, entschärft, indem neue Privilegien hinzukamen und manche Aufgaben nicht mehr administrativ sind. Unter XP wurde nicht zwischen Zeitzone und Systemzeit unterschieden, obwohl nur letztere für die Sicherheit relevant ist. Ab Vista gibt es deshalb die Unterscheidung zwischen dem Privileg, die Systemzeit zu ändern (SeSystemTimePrivilege) und dem Privileg die Zeitzone zu ändern (SeTimeZonePrivilege). Ferner können drahtlose Internetverbindungen und Energieoptionen des Rechners ohne Adminrechte konfiguriert werden. Die Installation von kritischen Windows-Updates ist nun ebenfalls als Standardnutzer möglich. In Firmennetzen können auch Treiber und ActiveX-Elemente von bestimmten Seiten installiert werden, wenn dies durch die Administratoren in den Gruppenrichtlinien freigegeben wurde. Die Privilegien der einzelnen Gruppen können unter Start > secpol.msc > Lokale Richtlinien > Zuweisen von Benutzerrechten angesehen oder geändert werden. Die folgende Liste enthält nicht alle Privilegien und Gruppen von NT-6.X-Systemen. Sie dient nur der Veranschauung der Unterschiede zwischen Administratoren und Benutzern.