Vistas Integrity Level, Teil 2

Standardmäßig nutzt unter Vista nur der Internet Explorer die neuen Integrity Level. Mit Bordmitteln kann man sie auch auf andere Programme wie den Firefox anwenden, um das System noch sicherer zu machen.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 8 Min.
Von
  • Dr. Harald Bögeholz
Inhaltsverzeichnis

Der erste Teil ließ offen, wie überhaupt Prozesse zu ihren Berechtigungen und damit zu ihrem Integrity Level kommen. Gemäß dem von Vista-Vorgängern bekannten Windows-Sicherheitsmodell erbt ein Kindprozess normalerweise das Access Token seines Vaters. Vista ergänzt dieses Vorgehen um ein Bit im Access Token namens TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN, das für normale Benutzer gesetzt, in Administrator-Tokens jedoch gelöscht ist. Es bewirkt, dass neue Prozesse als Integrity Level das Minimum aus dem des erzeugenden Prozesses und dem der Datei bekommen, die den ausführbaren Code enthält. Damit kann ein normaler Anwender keine Prozesse mit einem Integrity Level starten, der höher als der der Exe-Datei ist.

Sollte also durch eine Sicherheitslücke in dem auf Low laufenden Internet Explorer Schadcode zur Ausführung gelangen, dann könnte dieser Programme auch nur auf der niedrigen Stufe starten. Dateien, die der IE in seine Verzeichnisse schreibt, erhalten per Vererbung den Integrity Level Low. Das schützt den Anwender davor, sie versehentlich auf einer höheren Stufe zu starten.

Um auszuprobieren, was ein mit Integrity Level Low laufender Prozess wie der IE so alles darf, öffnen Sie mit normalen Benutzerrechten eine Eingabeaufforderung und vergewissern sich mit whoami /all, dass sie auf der Stufe Medium läuft. Kopieren Sie den Kommandointerpreter cmd.exe aus \Windows\System32 in Ihr LocalLow-Verzeichnis. Mit icacls cmd.exe können Sie sich vergewissern, dass die Datei den Integrity Level Low hat; das "(I)" steht für inherited - geerbt. Wenn Sie nun diese cmd.exe starten, erhält der Prozess den Integrity Level Low, was sich wieder mit whoami /all überprüfen lässt.

Vergewissern Sie sich ruhig einmal, dass Sie von dieser Low-Kommandozeile aus selbst Ihre eigenen Dateien nicht mehr verändern können. Im Process Explorer lässt sich übrigens eine Spalte einblenden, die den Integrity Level anzeigt.

Whoami zeigt die Policy des Access Token leider nicht an. Wer der Sprache C mächtig ist und einen Compiler sowie das Vista-SDK zur Hand hat, kann aber vergleichsweise einfach hineinschauen. Hacken Sie dazu in das Beispielprogramm Mytoken aus dem SDK ein paar Zeilen hinein, die mit GetTokenInformation() die TokenMandatoryPolicy abfragen. Dort sehen Sie dann auch noch das andere Policy-Bit TOKEN_MANDATORY_POLICY_NO_WRITE_UP. Es bewirkt laut Dokumentation, dass man mit diesem Access Token nicht schreibend auf Objekte mit höherem Integrity Level zugreifen kann, und war in den von mir untersuchten Access Tokens immer gesetzt.

Bisher war zwar überwiegend von Dateien die Rede, aber der Zugriffsschutz der Integrity Levels reicht wesentlich weiter und erstreckt sich auf alle möglichen Objekte im System. So gilt das für Dateien Gesagte genauso für die Registry, einschließlich Container- und Objektvererbung. Mit der Kommandozeilenoption -k zeigt AccessChk Zugriffsrechte in der Registry statt im Dateisystem.

Auch Prozesse sind Objekte mit einem Security Descriptor, der einzelne Zugriffsrechte festlegt.

Auch Prozesse sind Objekte. Sie nehmen eine Sonderrolle ein, weil sie einerseits als Subjekte agieren können, wobei ihr Access Token zum Zuge kommt, und andererseits als Objekte einen Security Descriptor besitzen, der beschreibt, was andere mit ihnen anstellen dürfen. Wenn also ein Prozess einem anderen in den Speicher gucken möchte, dann kommt es auf das Access Token des handelnden Prozesses und den Security Descriptor des zu behandelnden Prozesses an, ob das erlaubt wird.

Im Process Explorer verstecken sich die Informationen aus dem Security Descriptor eines Prozesses hinter dem Knopf "Permissions" auf dem Reiter "Security". Von dort gehts mit "Erweitert" zu einem Dialog, der auf dem Reiter "Berechtigungen" die DACL des Prozesses anzeigt. Durch "Bearbeiten" eines Eintrags sieht man die Rechte dann endlich im Detail - jetzt wieder auf Englisch.

Den Integrity Level in der SACL eines Prozesses und seine Zugriffs-Flags verschweigt der Process Explorer allerdings. Diese Informationen bringt AccessChk zu Tage, indem man es mit

accesschk -p *

aufruft, und zwar am besten mit Administratorrechten, damit es auch an die Systemprozesse herankommt. Wie man sieht, haben alle Prozesse nicht nur "No Write Up" gesetzt, sondern auch "No Read Up". Das verhindert, dass eventuelle über den Internet Explorer eingeschleuste Trojaner im Speicher anderer Prozesse herumspionieren und dort vielleicht Passwörter klauen.

Um vertrauliche Daten vor den Augen des Internet Explorer zu verstecken, kann es ganz interessant sein, auch im Dateisystem die Zugriffs-Flags "No Read Up" und "No Execute Up" zu setzen. Mit Bordmitteln ist das schwierig: Icacls kann sie zwar anzeigen, bietet aber keine Option zum Setzen. Man kriegt es zwar zur Not hin, indem man sich in die Security Descriptor Definition Language SDDL einfuchst, die ACL mit der Icacls-Option /save abspeichert, mit einem Unicode-fähigen Editor - Notepad geht nicht - manipuliert und mit /restore wiederherstellt, doch komfortabler gehts mit dem Utility Chml von Mark Minasi.

Auf einer mit Administratorrechten gestarteten Kommandozeile setzt der Befehl

chml geheim -i:m -nw -nr -nx

das Verzeichnis "geheim" auf den Integrity Level Medium mit Zugriffs-Flags No Write Up, No Read Up und No Execute Up. Anders als Icacls aktiviert Chml standardmäßig die Vererbung; die Option -noinherit unterbindet dies auf Wunsch. Mit einem wie oben beschrieben auf Integrity Level Low gestarteten Kommandointerpreter können Sie sich überzeugen, dass Sie in dieses Verzeichnis jetzt nicht mehr hineinsehen können.

Integrity Levels lassen sich auf beliebige Programme anwenden, die man aus irgendwelchen Gründen für angreifbar oder weniger vertrauenswürdig hält. Um beispielsweise den Web-Browser Firefox "tieferzulegen", öffnen Sie eine Eingabeaufforderung mit Administratorrechten und wechseln in das Programmverzeichnis von Firefox, standardmäßig "C:\Program Files\Mozilla Firefox". Der Befehl

icacls firefox.exe /setintegritylevel low

ändert den Integrity Level der Programmdatei. Um Verzeichnisse für Firefox beschreibbar zu machen, setzt man mit

icacls Verzeichnisname /setintegritylevel (oi)(ci)low

ebenfalls den Integrity Level herunter, wobei die Angabe "(oi)(ci)" die Vererbung auf Dateien und Unterverzeichnisse aktiviert. Firefox benötigt für seine Benutzereinstellungen Schreibzugriff auf das Verzeichnis C:\Users\Name\AppData\Local\Mozilla\Firefox sowie C:\Users\Name\AppData\Roaming\Mozilla\Firefox. Außerdem nutzt Firefox beim Download das temporäre Verzeichnis C:\Users\Name\AppData\Local\Temp. Wenn Sie diesen Verzeichnissen mit Icacls den Integrity Level Low verpassen, läuft der tiefergelegte Firefox reibungslos.

Heruntergeladene Dateien dürfen Sie jetzt natürlich nicht mehr ohne weiteres überall speichern. Es ist daher zweckmäßig, sich ein Download-Verzeichnis mit Integrity Level Low anzulegen und Firefox anzuweisen, alle Downloads dort abzuspeichern (unter Einstellungen auf der Seite Allgemein).

Leider zeigt Vista nach dieser Konfiguration bei jedem Start des Firefox eine Sicherheitswarnung "Möchten Sie diese Datei ausführen?" an, deren Ursache wir noch nicht finden konnten. Durch den Klick auf "Ausführen" startet der Browser aber wie gewünscht mit dem Integrity Level Low.

Das Sicherheitsmodell von Windows Vista bietet interessante neue Möglichkeiten, die Zugriffe wenig vertrauenswürdiger Programme zum Schutz vor Sicherheitslücken auf einfache Weise zu beschränken. Die Zeit wird zeigen, ob und wie es Schädlingen in Zukunft vielleicht doch wieder gelingt, die neu errichteten Hürden zu überwinden.

  • Process Explorer im Software-Verzeichnis
    Sysinternals/Microsoft-Tool, das detaillierte Informationen zu allen Prozessen im System anzeigt.
  • Windows XP Service Pack 2 Support Tools im Software-Verzeichnis
    Enthält unter anderem das im Artikel erwähnte Kommandozeilenprogramm whoami.exe
  • AccessChk im Software-Verzeichnis
    Tool von Mark Russinovich zum Überprüfen von Zugriffsrechten, insbesondere zur Anzeige von Integrity Levels.
  • chml von Mark Minasi im Software-Verzeichnis
    Ein Utility zum Umgang mit Integrity Levels.

(bo)