Autor: AHT
Was passiert, wenn man (ab Vista) die UAC deaktiviert?
Das UAC Popup
Wer kennt das nicht - man startet irgendeine Anwendung und plötzlich kommt so ein dummes Popup, das ein Programm auf den Rechner zugreifen möchte und man soll dies bestätigen (siehe hier).
Auf Dauer kann das ziemlich nervig sein - erst recht, wenn man das vom guten alten XP her gar nicht gewohnt ist; da ist es doch sehr vorteilhaft, dass diese nervige Sache über die Systemsteuerung recht einfach abschaltbar ist:
Systemsteuerung -> Benutzerkonten -> Benutzerkontensteuerung ein- oder ausschalten
Doch sollte man das wirklich tun? Im Prinzip muss dass jeder selbst wissen - und damit das jeder selbst entscheiden kann und weiß was da passiert, schreibe ich dieses Posting hier.
Der Access Token und die Zugriffsrechte
Es wäre doch sehr schlecht, wenn jeder kleine Angestellte mit einem PC Arbeitsplatz dazu in der Lage wäre, die kompletten Einstellungen des Computers zu ändern und mal nebenbei die Post des Chefs zu lesen. Auf aktuellen Windows Betriebssystemen ist es deshalb so, das eben nicht jeder alles darf.
Wie regelt Windows das aber intern?
Im Prinzip wird jeder gestarteten Anwendung eine Art "elektronischer Ausweis" mitgegeben, der unter anderem Angaben dazu enthält, wer genau das Programm gestartet hat (Loginname), welchen Gruppen (zum Beispiel Administrator oder nur Gast am PC) diese "Person" angehört und über welche speziellen Rechte verfügt wird. Dieser "Ausweis" nennt sich in Fachkreisen Access Token.
Objekte, mit denen ein Programm etwas tun kann (zum Beispiel die Dateien) besitzen das Gegenstück zu diesem Ausweis - die "Sicherheitsbeschreibung". Die "Sicherheitsbeschreibung" (in Fachkreisen Security Descriptor) muss man sich vorstellen wie eine Art Liste, in der vermerkt ist, welche Gruppe oder welcher User genau was mit dem Objekt tun darf - also in etwa so:
- Administratoren -> Vollzugriff ist erlaubt (lesen, schreiben,..)
- Benutzer -> nur lesen ist erlaubt
- ...
Na ja - bei Kindern ist es meist so, dass das was nicht direkt verboten ist, als erlaubt gilt . Windows sieht das zum Glück anders - alles was nicht erlaubt ist, ist generell verboten. In dieser Liste können aber nicht nur Erlaubnisse vermerkt sein, sondern auch Verbote. Ein Verbot hat höchste Priorität - ist also etwas verboten und es wird später in der Liste erlaubt, darf das Programm das trotzdem nicht - da ist also nichts mit: "Papa hat aber gesagt, ich darf das!".
MIL, MIC, IL und die Integritäten
Liest man sich irgendwelche Sachen über Betriebssysteme ab Vista durch, stößt man des öfteren auf so merkwürdige Abkürzungen oder Begriffe wie MIL, MIC, IL, Integritäten oder Integritätslevel. Jetzt wäre es doch schön, wenn man beim Abschalten der UAC mit solchen Sachen nichts zu tun bekommen würde - genau das Gegenteil ist aber der Fall, denn gerade hier wirkt sich die Abschaltung der UAC besonders aus.
Es ist deshalb nicht gerade unwichtig wenigstens oberflächlich zu wissen, was das eigentlich ist:
Ab Vista gibt es neben der bereits angesprochenen Zugriffsliste für Objekte eine weitere solche Liste, die aber nur einen Eintrag hat. Dieser Eintrag setzt das Objekt (zum Beispiel eine Datei) auf einen bestimmten Level (IL oder Integritätslevel) und gibt an, was ein Programm, das in seinem Access Token einen niedrigeren Level hat als das Objekt, mit dem Objekt nicht darf (zum Beispiel lesen oder schreiben).
Folgende Level gibt es:
- Systemverbindlichkeitsstufe
- Hohe Verbindlichkeitsstufe
- Mittlere Verbindlichkeitsstufe
- Niedrige Verbindlichkeitsstufe
- Nicht vertrauenswürdige Verbindlichkeitsstufe
Existiert bei einem Objekt dieser zusätzliche Eintrag nicht, gilt immer die Mittlere Verbindlichkeitsstufe mit einem Verbot des Lesens und Schreibens für Programme in einem niedrigeren Level.
Es soll damit unter anderem verhindert werden, das normale Programme in Bereiche schreiben, die dem Betriebssystem vorbehalten sind.
Privilegien
Ein besonderer Teil des "elektronischen Ausweises" Access Token sind die Privilegien. Privilegien sind einfach nur Rechte, bestimmte Systemeinstellungen setzen zu dürfen (wie zum Beispiel die Systemzeit). Diese Privilegien sind in der Regel den Gruppen zugeordnet - ist auch logisch so, denn ein Administrator muss ja wesentlich mehr Einstellungen setzen dürfen, als jemand, der nur ein normaler Benutzer ist.
Bei mir zu Hause ist das ganz ähnlich - da dürfen auch nur die alleine mit meinem Auto fahren, die zur Gruppe der mindestens achtzehnjährigen gehören und als Privileg einen Führerschein besitzen.
Zugriffsrechte in Registry
So, nach dem Grundlagenquatsch geht es jetzt an das Eingemachte! Wir schauen uns zuerst mal die Zugriffsbeschreibung eines Registryeintrages an. So in etwa sieht der Registryeintrag
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
aus, wenn man sich die Zugriffsrechte betrachtet:
ZitatAlles anzeigen
Eintrag #1 ist bezogen auf: Benutzer
Typ von Eintrag #1: Erlaubnis
Access Right in Eintrag #1: GENERIC_READ = Leserechte
Eintrag #2 ist bezogen auf: Administratoren
Typ von Eintrag #2: Erlaubnis
Access Right in Eintrag #2: GENERIC_ALL = Vollzugriff
Eintrag #3 ist bezogen auf: SYSTEM
Typ von Eintrag #3: Erlaubnis
Access Right in Eintrag #3: GENERIC_ALL = Vollzugriff
Den schon angesprochenen Integritätslevel-Eintrag besitzen Registryschlüssel standardmäßig nicht - es gilt für einen Registryschlüssel also normalerweise der Level (IL) Mittlere Verbindlichkeitsstufe - das wird später noch wichtig.
Was auf diesen Schlüssel an Gegebenheiten bezüglich der Rechte zutrifft, gilt im Prinzip auch für alle anderen Schlüssel unter HKEY_LOCAL_MACHINE.
Im Schlüssel HKEY_LOCAL_MACHINE liegen unter anderem die globalen Autostarteinträge für Programme - also alles das, was sich automatisch generell und überall beim Starten des Systems selbst ausführt (zum Beispiel Dienste, Treiber, etc.). Ein perfekter Ort um Trojaner und RootKits zu installieren.
Hier fällt auf, das normale Benutzer nur Leserechte haben - normale Benutzer können hier also keine Einträge machen.
Der Token eines im Adminaccount gestarteten Programms
Wir loggen uns jetzt mal (mit eingeschalteter UAC) in unseren Adminaccount ein und starten ganz normal unter Vista notepad.exe, den Texteditor. Ein Blick auf den "elektronischen Ausweis" Access Token von notepad sieht folgendermaßen aus - hier erst mal die Gruppen:
ZitatAlles anzeigen
None -> standardmäßig aktiviert + aktiviert
Jeder -> standardmäßig aktiviert + aktiviert
Administratoren -> deaktiviert
Benutzer -> standardmäßig aktiviert + aktiviert
INTERAKTIV -> standardmäßig aktiviert + aktiviert
Authentifizierte Benutzer -> standardmäßig aktiviert + aktiviert
Diese Organisation -> standardmäßig aktiviert + aktiviert
S-1-5-5-0-181379 -> standardmäßig aktiviert + aktiviert
LOKAL -> standardmäßig aktiviert + aktiviert
NTLM-Authentifizierung -> standardmäßig aktiviert + aktiviert
Mittlere Verbindlichkeitsstufe -> deaktiviert + aktivierter Integritätslevel
Was fällt hier auf?[INDENT]Die Gruppe Administratoren ist als deaktiviert markiert:[INDENT]Im Prinzip bedeutet das, dass die Gruppe Administratoren für Erlaubnisse in der Zugriffsliste von Objekten wirkungslos ist. Kann Notepad hier also auf eine Datei zugreifen, in die nur ein Admin schreiben darf? Nein, natürlich nicht! Wird einem Administrator in der Zugriffsliste eines Objektes aber etwas verboten, zeigt dieser Gruppeneintrag sehr wohl Wirkung.
Wenn man sich nun die Zugriffsliste des Registryeintrages unter HKEY_LOCAL_MACHINE nochmals ansieht, kann ein normal in einem Adminaccount gestartetes Programm zum Beispiel vernünftig einen Trojaner global in die Registry einschleusen? Eigentlich nicht...
Bei einem Programm, das mit Adminrechten gestartet wurde (zum Beispiel durch das Bestätigen eines UAC Popups), ist diese Gruppe aktiviert. Neben dem Gruppeneintrag fehlen auch die Privilegien der Gruppe Administratoren.
[/INDENT]Der IL ist Mittlere Verbindlichkeitsstufe:[INDENT]Bei einem Programm, das mit Adminrechten gestartet wurde (zum Beispiel durch das Bestätigen eines UAC Popups), ist der IL Hohe Verbindlichkeitsstufe. Auf Objekte im Level Hohe Verbindlichkeitsstufe darf notepad hier also nicht zugreifen - zum Beispiel auf das Rootverzeichnis C:\.
[/INDENT][/INDENT]Schaltet man die UAC ab, werden sämtliche im Adminaccount gestarteten Programme mit aktivierter Gruppe Administratoren und deren zusätzlichen Privilegien ausgeführt. Aber nicht nur das - des weiteren werden bestimmte Funktionen des Integritätslevels deaktiviert, in dem die einzelnen Programme laufen. Gerade das hat verschiedene Auswirkungen, die man nicht unbedingt gleich sieht...
Der Internet Explorer ab Vista
Interessant wird die Sache beim Internet Explorer. Wir starten den unter Vista einfach mal und werfen einen Blick auf den "elektronischen Ausweis" Access Token seines Hauptprozesses iexplore.exe.
Hier sind wieder die Gruppen:
ZitatAlles anzeigen
None -> standardmäßig aktiviert + aktiviert
Jeder -> standardmäßig aktiviert + aktiviert
Administratoren -> deaktiviert
Benutzer -> standardmäßig aktiviert + aktiviert
INTERAKTIV -> standardmäßig aktiviert + aktiviert
Authentifizierte Benutzer -> standardmäßig aktiviert + aktiviert
Diese Organisation -> standardmäßig aktiviert + aktiviert
S-1-5-5-0-181379 -> standardmäßig aktiviert + aktiviert
LOKAL -> standardmäßig aktiviert + aktiviert
NTLM-Authentifizierung -> standardmäßig aktiviert + aktiviert
Niedrige Verbindlichkeitsstufe -> deaktiviert + aktivierter Integritätslevel
Aufgrund des sehr niedrigen ILs darf der iexplore.exe eigentlich fast gar nichts - er darf nicht in die Registry, er darf auf kaum eine Datei zugreifen,... Das kann sehr wichtig werden, wenn ein Trojaner über eine infizierte Internetseite versucht den IE zu "kapern".
Auch mit deaktivierter UAC ändert sich daran nicht sehr viel, da der IE weiterhin in einem niedrigen Integritätslevel läuft. Es gibt da aber einige Zusatzfunktionen des Integritätslevels, auf die ich noch nicht eingegangen bin und auf die sich das Abschalten der UAC sehr wohl auswirkt...
Messages und Hooks
Messages? Hooks? Was ist denn das schon wieder?
Beides hat mit Fenstern zu tun - Fenster sind die netten (meist viereckigen) Dinger, die beim Starten einer Anwendung erscheinen, die man dann anklicken oder aus denen man etwas auslesen oder eingeben kann. Intern funktionieren Fenster über Nachrichten (Messages). Wenn zum Beispiel in ein Eingabefenster ein A getippt wird, erhält die Anwendung bestimmte Nachrichten, also Messages, die dann ausgewertet werden können.
Windows bietet aber auch die Möglichkeit, die Nachrichten von einer fremden Anwendung abfangen, auswerten und verändern zu lassen - man gibt zum Beispiel in Programm 1 ein A ein, Programm 2 fängt diese Eingabe ab und ändert sie in B. Im Eingabefenster von Programm 1 würde dann nicht das getippte A erscheinen, sondern ein B. Ein solches Abfangen von Nachrichten nennt sich Message Hook oder Window Hook.
Fenster kann man, genauso wie Dateien, als Objekte sehen. Sie haben aber einen großen Unterschied - sie sind nicht durch eine Zugriffsbeschreibung vor dem Zugriff irgendeines Programms geschützt - das heißt, jeder Hans und Franz kann im Prinzip eine Message an ein Programmfenster senden und damit das Programm dazu veranlassen, bestimmte Sachen zu tun. Das gleiche gilt für die Hooks - ein Keylogger funktioniert zum Beispiel auf diese Weise.
Wenn man sich nun überlegt, dass ja nicht nur Programme durch den jeweiligen User gestartet werden, sondern manche auch durch das Betriebssystem (Dienste zum Beispiel), die dann mit einem ganz anderen Access Token und anderen Rechten laufen, kann das schon etwas problematisch werden.
Chris Padget hat das in seinem White Paper zur Shatter Attack recht gut erkannt - ich muss aber gestehen, dass er die Gefährlichkeit dieser Attacke zur damaligen Zeit noch etwas untertrieben hat - denn vorher Code irgendwie in dem Service unterzubringen, ist gar nicht nötig. Desweiteren ging das mit jedem Fenster - ein Edit muss nicht vorhanden sein.
Microsoft hat diese Sicherheitslücke bezüglich der Fenster erst etwas unterschätzt, ab Vista ist dieses Sicherheitsloch aber folgendermaßen geschlossen:
- Ein Message Hook kann ("in der Regel") nur noch in Programme installiert werden, die im selben Integritätslevel laufen, wie das Programm, das den Hook installieren möchte. Ein normal gestartetes Programm könnte also zum Beispiel nicht Messages im Internet Explorer abfangen, da der Integritätslevel des IEs herabgesetzt ist.
- Messages können nicht mehr an Programme gesendet werden, die in einem höheren Integritätslevel laufen, als das Programm, das die Message senden will. Services über Messages zu beeinflussen, ist also nicht mehr möglich.
So, jetzt kommts: Genau diese beiden Neuerungen werden auch mit aufgehoben, wenn man die UAC deaktiviert. Es ist dann also wieder möglich, global Messages abzufangen (also einen Keylogger zu installieren, der sämtliche Tastatureingaben auf dem System hookt) und Messages an interaktive Dienste (Dienste mit einem Fenster auf dem Desktop) zu senden.
Kleine Zusammenfassung
Um es noch einmal auf den Punkt zu bringen: Was lässt man denn jetzt eigentlich zu, wenn man die UAC Popups abstellt?
- Deaktiviert man die UAC, verleiht man jedem in einem Administratoraccount normal gestarteten Programm die Rechte, auf das komplette Betriebsystem zuzugreifen. Ist die UAC aktiviert, muss ein Programm erst anmelden, dass es auf wichtige Sachen des Betriebsystems zugreifen möchte und der User kann das über das UAC Popup ablehnen.
- Deaktiviert man die UAC, ermöglicht man jedem in einem Administratoraccount normal gestarteten Programm, Message Hooks in alle anderen Anwendungen zu installieren. Man öffnet also zum Beispiel einem Keylogger sämtliche Türen.
- Deaktiviert man die UAC, ermöglicht man es jedem normal gestarteten Programm, Messages an administrative Programme oder interaktive Dienste zu senden. Diese höher gestellten Programme können dann Aktionen für Programme tätigen, die diese selbst eigentlich gar nicht dürfen.