Probleme mit dem IE7 beim Verlagern von Verzeichnissen unter Windows Vista

Zu den neuen Sicherheitstechnologien in Internet Explorer 7 unter Windows Vista zählt der Internet Explorer Protected Mode. Er ist standardmäßig für alle Sicherheitszonen mit Ausnahme der Zone der vertrauenswürdigen Sites aktiviert. Dieser geschützte Modus verwendet Mandatory Integrity Control, um die Fähigkeit eines Angreifers zu verringern, Benutzerdateien, Prozesse, Systemdateien oder Registrierungsschlüssel ohne die ausdrückliche Zustimmung des Benutzers zu ändern bzw. bösartigen Code im Computer zu installieren.

Mandatory Integrity Control unterscheidet gundsätzlich zwischen verschiedenen Integritätsebenen, welche vereinfacht durch Niedrig, Mittel, Hoch und System bezeichnet werden. Alle Objekte ohne verbindliche Beschriftung werden von Windows Vista als mittel betrachtet. Prozesse mit niedriger Integrität können zum Beispiel nur auf Ordner, Dateien und Registrierungsschlüssel schreibend zugreifen, die explizit mit niedriger Integrität verbindlich beschriftet wurden.

Bei der Ausführung im geschützten Modus ist der Internet Explorer ein Prozess mit niedriger Integrität. Er kann somit in einem Benutzerprofil oder auch an Systemstandorten keinen Schreibzugriff auf Dateien und Registrierungsschlüssel erhalten. IE7 und seine Erweiterungen können im geschützten Modus nur auf Adressen mit niedriger Integrität schreiben. Deshalb gibt es unter Windows Vista neue Ordner wie Temporary Internet Files, History, Cookies, Favorites und Temporary Files,welche mit niedriger Integrität verbindlich beschriftet sind. Des Weiteren läuft Internet Explorer Protected Mode auf einer niedrigen Desktop-Integritätsebene, was ihn daran hindert, bestimmte Windows-Meldungen an Prozesse mit höherer Integrität zu senden.

Sollte ein Internet Explorer-Prozess durch eine noch unbekannte Sicherheitslücke kompromittiert oder vom Benutzer ungewollt Malware ausgeführt werden, verhindert der geschützte Modus in Windows Vista durch Mandatory Integrity Control nichtgenehmigte Zugriffe auf empfindliche Systembereiche und trägt damit zur Schadensbegrenzung bei. Ein Angreifer kann so zum Beispiel nicht einfach einen Keylogger in den Autostart-Ordner des Benutzers installieren - genausowenig wie ein kompromittierter Prozess Anwendungen auf dem Desktop nicht durch Windows-Meldungen manipulieren kann.

Soviel zu dem Hintergrund, jetzt zu dem Problem:

Immer wenn ein Benutzer Systemordner wie die Favoriten oder den Pfad zum Verzeichnis für temporäre Dateien verändert, um sie zum Beispiel auf eine eigene Partition oder eine andere Festplatte zu verlegen, muss er darauf achten, dass die neuen Verzeichnisse auch mit der richtigen Integrität beschriftet werden. Alle Verzeichnisse, die man verlegen möchte, in die der IE7 schreiben können soll oder muss, müssen explizit mit niedriger Integrität beschriftet sein. Anderenfalls kann man zum Beispiel beim Drucken von Webseiten oder beim Hinzufügen oder Verändern der eigenen Favoriten die Fehlermeldung: <Pfad> wurde nicht gefunden. Stellen Sie sicher, dass der Pfad bzw. die Internetadresse richtig ist.

Wie kann man das Problem lösen? Mit Windows Vista wird ein Kommandozeilenprogramm icacls.exe mitgeliefert. Dieses Programm gibt nicht nur die aktuellen Berechtigungen (ACLs) einer Datei aus, sondern erlaubt auch die Anzeige und das Verändern von Integritätsbeschriftungen von Dateien. Eine weitere Möglichkeit ist AccessChk von Sysinternals. Es erlaubt zusätzlich auch den Zugriff auf Registrykeys und Prozesse. Anbei ein Beispiel für meinen Favoritenordner (Standardpfad %USERPROFILE%\Favorites):

C:\>icacls "%USERPROFILE%"\Favorites
C:\Users\<Benutzer>\Favorites <Domäne>\<Benutzer>:(I)(F)
<Domäne>\<Benutzer>:(I)(OI)(CI)(IO)(F)
NT-AUTORITÄT\SYSTEM:(I)(F)
NT-AUTORITÄT\SYSTEM:(I)(OI)(CI)(IO)(F)
VORDEFINIERT\Administratoren:(I)(F)
VORDEFINIERT\Administratoren:(I)(OI)(CI)(IO)(F)
Verbindliche Beschriftung\Niedrige Verbindlichkeitsstufe:(OI)(CI)(NW)

Als zweites Beispiel der Pfad zum Verzeichnis für temporäre Dateien (Standardpfad %TEMP%):

C:\>icacls %TEMP%
C:\Users\<Benutzer>\AppData\Local\Temp <Domäne>\<Benutzer>:(I)(F)
<Domäne>\<Benutzer>:(I)(OI)(CI)(IO)(F)
NT-AUTORITÄT\SYSTEM:(I)(F)
NT-AUTORITÄT\SYSTEM:(I)(OI)(CI)(IO)(F)
VORDEFINIERT\Administratoren:(I)(F)
VORDEFINIERT\Administratoren:(I)(OI)(CI)(IO)(F)

Hier fehlt die verbindliche Beschriftung - IE7 benutzt standardmäßig ein Unterverzeichnis mit dem Namen Low:

C:\>icacls "%TEMP%"\Low
C:\Users\<Benutzer>\AppData\Local\Temp\Low <Domäne>\<Benutzer>:(I)(F)
<Domäne>\<Benutzer>:(I)(OI)(CI)(IO)(F)
NT-AUTORITÄT\SYSTEM:(I)(F)
NT-AUTORITÄT\SYSTEM:(I)(OI)(CI)(IO)(F)
VORDEFINIERT\Administratoren:(I)(F)
VORDEFINIERT\Administratoren:(I)(OI)(CI)(IO)(F)
Verbindliche Beschriftung\Niedrige Verbindlichkeitsstufe:(OI)(CI)(NW)

Wenn man also den Ablageort von Verzeichnissen verändert und obige Fehlermeldung erhält oder bestimmte Arbeitsabläufe im IE7 nicht mehr funktionieren, sollte man prüfen, ob die Verzeichnise richtig beschriftet sind. Sollte das nicht der Fall sein, kann man mit icacls.exe auch die verbindliche Beschriftung selbst vornehmen:

C:\>icacls "<Pfad zum Favoritenordner>" /setintegritylevel (OI)(CI)low /T

Mit Hilfe von icacls.exe kann man natürlich auch Anwendungen manuell mit niedrigerer Integrität starten. Wer zum Beispiel Firefox (oder einen anderen Lieblingsbrowser) mit niedriger Integrität laufen lassen möchte, kann das folgendermassen tun. Ich setze dabei voraus, dass sich das Benutzerprofil, in welches Firefox schreiben können muss, im Standardpfad %APPDATA%\Mozilla\Firefox\Profiles unter qvv0o7gk.default befindet. Der Name des Profilverzeichnisses wird von Firefox beim ersten Start zufällig gewählt und das Profil entsprechend angelegt. Der Aufruf von icacls.exe muss aus einer administrativer Eingabeaufforderung heraus erfolgen:

C:\>icacls "C:\Program Files\Mozilla Firefox\firefox.exe" /setintegritylevel low
Bearbeitete Datei: C:\Program Files\Mozilla Firefox\firefox.exe
1 Dateien erfolgreich verarbeitet, bei 0 Dateien ist ein Verarbeitungsfehler aufgetreten.

C:\>icacls %APPDATA%\Mozilla\Firefox\Profiles\qvv0o7gk.default /setintegritylevel (OI)(CI)low /T
Bearbeitete Datei: C:\Users\danielme\AppData\Roaming\Mozilla\Firefox\Profiles\qvv0o7gk.default
1 Dateien erfolgreich verarbeitet, bei 0 Dateien ist ein Verarbeitungsfehler aufgetreten.

Wenn man den Status der Anwendung überprüfen möchte, kann man mit dem Process Explorer die Integrität der gerade gestarteten Anwendung überprüfen. Dazu muss man unter View > Select Columns... auf dem Process Image Reiter die Haken bei Integrity Level setzen:

Nachteilig an dieser manuellen Lösung ist die Tatsache, dass Firefox nicht wirklich für die Nutzung mit niedriger Integrität programmiert wurde. Zum Beispiel kann man keine Dateien aus Firefox heraus herunterladen, da Firefox das normale Temp-Verzeichnis benutzt, welches nicht mit niedriger Integrität beschriftet ist:

Daher rate ich dringend davon ab, diese Konfiguration heute per Hand umsetzen zu wollen. In einem Testnetz mit den neuen Techniken herumzuspielen und die Grenzen auszuloten ist eine Sache. Für die produktive Arbeitsumgebung sind jedoch noch einige Veränderungen am Design von Firefox notwendig. Die Entwickler von Mozilla trafen sich auf Einladung von Microsoft im Herbst letzten Jahres mit dem Microsoft Vista Team und laut Vladimir Vukićević ist die Unterstützung von niedriger Integrität und bessere Zusammenarbeit mit UAC für Gecko 1.9/Firefox 3 in Planung.