Firewall hin, Virenscanner her, das wirksamste Mittel gegen schädliche Windows-Programme liegt nur wenige Klicks entfernt: Arbeiten Sie als eingeschränkter Benutzer. In den wenigen Fällen, in denen das Schwierigkeiten bereitet, hilft Ihnen unser trickreiches neues Batch-Skript elegant über die Runden.
Unterthema: DropMyRights - der falsche Weg
Bitte beachten Sie auch diese Ergänzung!
Es ist ganz einfach, ein Windows-System in einen Hochsicherheitstrakt zu verwandeln: Entziehen Sie Ihrem Arbeits-Account die Administrator-Rechte. Die meisten Anwender merken bei ihrer täglichen Arbeit gar keinen Unterschied zwischen der gefährlichen Windows-Vorgabe mit Admin-Rechten und dem eingeschränkten Account. Nur in zwei seltenen Situationen fällt etwas auf: Bei fehlerhaften Programmen und wenn wirklich Verwaltungsaufgaben anfallen. Dieser Artikel beschreibt, wie Sie in wenigen Minuten ein pfiffiges Skript einrichten, das einzelne Programme bei Bedarf mit Administrator-Rechten startet.
Die Benutzerverwaltung in der Systemsteuerung in Windows XP unterscheidet zwei Typen von Benutzerkonten: Computeradministratoren und "Eingeschränkte Konten". Ein so beschnittener Account darf weder in das Windows-Verzeichnis auf einer NTFS-Partition schreiben noch manche Teile der Registry verändern. In einer solchen Konfiguration muss sich schädliche Software, die eventuell über Browser oder andere Programme eindringt, mit den Zugriffsrechten des eingeschränkten Benutzers bescheiden. Da der Systemdateien nicht verändern darf, sind sie auch vor Manipulationen durch den Schädling sicher. Falls Ihre Festplatte noch nicht mit dem NTFS-Dateisystem formatiert ist, können Sie das übrigens problemlos ändern. Der Kommandozeilenbefehl
convert c: /fs:ntfs
konvertiert beim nächsten Neustart Partition C: verlustfrei nach NTFS.
Doch einige Programmierer haben immer noch nicht mitbekommen, dass Microsoft schon mit Windows NT den Mulituser-Betrieb und die dazugehörige Rechteverwaltung eingeführt hat. Einige ignorieren zusätzlich die Programmierrichtlinien aus Redmond, was wo zu speichern ist. Wenn sie dann schließlich fehlgeschlagene Zugriffe in ihren Machwerken nicht abfangen, laufen die Programme unter einem eingeschränkten Account nicht korrekt. Doch selbst wer gezwungen ist, solch schlechte Software zu benutzen, muss nicht auf die Sicherheit des eingeschränkten Benutzers verzichten, wie der Artikel auf Seite 116 zeigt.
Wenn es dagegen am Computer wirklich etwas zu administrieren gibt, sind dafür tatsächlich meistens Administrator-Rechte nötig. Im Prinzip gibt es dafür einen ganz einfachen Mechanismus: Der Anwender kann ein Programm unter einem anderen Benutzerkonto starten, sofern für diesen ein Passwort gesetzt ist (und der Benutzer es kennt). Das geht entweder über den Eintrag "Ausführen als ..." im Kontextmenü oder mit dem Befehl "runas" auf der Kommandozeile.
Doch ignorante Programmierer haben Wege gefunden, auch runas zu unterlaufen. So gibt es minderwertige Installationsprogramme, die ihre Software nicht systemweit verfügbar machen, sondern nur für den Benutzer einspielen, der gerade angemeldet ist.
Das elegante Mittel gegen so viel Unwissenheit ist, dem Arbeits-Account Administrator-Rechte zuzuweisen, solange man sie braucht, und sie gleich danach wieder zu entziehen. Bereits vor über einem Jahr stellte c't ein Batch-Skript vor, das allerdings den Benutzer ab- und wieder anmeldet. Hier zeigen wir ein noch eleganteres Skript, das ein einzelnes Programm mit Admin-Rechten auf dem Desktop startet. Die Idee stammt von dem Microsoft-Mitarbeiter Aaron Margosis, der in seinem Blog bereits eine ähnliche Batch-Datei unter dem Namen MakeMeAdmin bereitstellt (siehe Soft-Link).
Sie macht sich zunutze, dass ein Programm mit den Rechten weiterläuft, die der Benutzer zum Zeitpunkt des Aufrufs hatte. Nicht nur der so gestartete Prozess läuft weiter mit Admin-Rechten, sondern auch alle seine Kinder, also von ihm aufgerufene Programme.
Auf CD finden Sie die wesentlich erweiterte Version MachMichAdmin.cmd. Unter anderem nimmt sie auf der Kommandozeile einen Programm- oder Dateinamen entgegen; sie öffnet dann diese Datei mit dem aktuellen Account und Administrator-Rechten. Wie das genau funktioniert, steht weiter unten.
Vor der eigentlichen Installation ist ein Doppelklick vonnöten: Importieren Sie als Administrator die Datei DefaultOwner.reg aus dem heruntergeladenen Archiv in die Registry. Sie stopft eine potenzielle Sicherheitslücke, die MachMichAdmin ins System reißen könnte; im NTFS hat jede Datei einen Besitzer, der in der Regel auch Vollzugriff hat. In der Grundkonfiguration trägt Windows beim Anlegen einer neuen Datei denjenigen Benutzer als Besitzer ein, in dessen Namen das Programm läuft. Wenn Sie also über MachMichAdmin unter Ihrem Arbeits-Account ein Programm installieren, gehören alle Programmdateien dem Arbeits-Account. Damit könnte selbst der eingeschränkte Benutzer die Programmdateien nachträglich verändern, und auch ein in seinem Namen laufender Virus könnte das. Glücklicherweise ist Windows auf diese Situation vorbereitet. Mit einem Registry-Eintrag lässt es sich so umstellen, dass alle von einem Administrator erzeugten Dateien als Besitzer die Gruppe "Administratoren" erhalten.
Da Sie ja dem Arbeits-Account später die Admin-Rechte nehmen, brauchen Sie einen anderen Admin-Zugang. Den bereits vorhandenen Account namens "Administrator" zu benutzen, ist keine gute Idee, da Windows ihn in einigen Details etwas anders behandelt als die anderen Administratoren. Legen Sie also in der Systemsteuerung unter "Benutzerkonten" ein neues Administrator-Konto mit beliebigem Namen an, zum Beispiel "Verwalter". Der Name sollte keine Leer- oder Sonderzeichen enthalten. Diesem Konto und Ihrem Arbeits-Account weisen Sie bei der Gelegenheit je ein Kennwort zu, denn sonst funktioniert weder das oben beschriebene runas noch MachMichAdmin.
Kopieren Sie nun die Datei MachMichAdmin.cmd auf die Festplatte, zum Beispiel ins Verzeichnis Programme. Öffnen Sie sie anschließend mit einem Texteditor, etwa über den Eintrag "Bearbeiten" im Kontextmenü. In der dreizehnten Zeile, die mit "set _Admin_" beginnt, tragen Sie nun hinter dem \ den eben vergebenen Admin-Namen ein. Damit ist das Skript einsatzbereit.
Um es komfortabel benutzen zu können, sollten Sie einige gut erreichbare Verknüpfungen anlegen. Dazu empfiehlt sich zum Beispiel der (versteckte) Ordner "SendTo" im Ordner des Arbeits-Accounts unter "Dokumente und Einstellungen". Dann taucht MachMichAdmin im Kontext-Menü unter "Senden an ..." auf. Eine anderer guter Platz für die Verknüpfung ist der Desktop. Dann steht MachMichAdmin als Ziel für Drag & Drop zur Verfügung und per Doppelklick startet es das konfigurierbare Default-Programm (Zeile 20 im Skript).
Nun ist die Zeit gekommen, dem Arbeits-Account die Admin-Rechte zu entziehen. Dazu genügen wenige Klicks in der Benutzerverwaltung der Systemsteuerung: zuerst "Konto ändern", dann auf den Arbeits-Account, dann "Kontotyp ändern" und schließlich auf den Radio-Button "Eingeschränkt". Nach einigen "OK"-Klicks melden Sie sich ab und mit dem so gesicherten Konto wieder an.
Um die Sicherheit weiter zu erhöhen und gleichzeitig MachMichAdmin zu testen, eignet sich das Programm kafu.exe (auf CD). Starten Sie das Skript, das nun zuerst nach dem Passwort des Admin-Accounts fragt. Anschließend öffnet sich ein weiteres Fenster, in dem Sie nach dem Passwort des eingeschränkten Benutzers gefragt werden. Sie müssen es nur beim ersten Aufruf eintippen, danach merkt es sich das Skript auf sichere Weise. Schließlich öffnet sich ein drittes Fenster mit rotem Hintergrund, in dem Sie mit Admin-Rechten arbeiten können. Ziehen Sie hier hinein kafu.exe und starten Sie das Programm mit Return.
Kafu (Keine Autostarts Für User) verhindert, dass ein als eingeschränkter User versehentlich gestartetes Schadprogramm sich dauerhaft im System einnisten kann. Ohne kafu können selbst eingeschränkte Benutzer über sieben verschiedene Methoden Programme automatisch starten lassen - und daher auch versehentlich Viren verewigen. Kafu ändert die Schreibrechte so, dass nur noch Administratoren Autostarts einrichten dürfen; es braucht dafür selbst Admin-Rechte, die es per MachMichAdmin bekommt.
Damit mehrere Explorer-Fenster mit unterschiedlichen Rechten auf demselben Desktop koexistieren können, muss unter "Extras/Ordneroptionen" auf dem Reiter "Ansicht" das Häkchen bei "Ordnerfenster in einem eigenen Prozess starten" gesetzt sein.
Um zu kontrollieren, mit welchen Rechten ein Programm läuft, eignet sich das Tool "Process Explorer" (auf CD). Es listet in den Eigenschaften eines Prozesses im Reiter "Security" die Sicherheitsgruppen und Privilegien auf. Um für alle Prozesse an diese Information zu kommen, muss es mit Administrator-Rechten laufen - man startet es also per Drag & Drop auf MachMichAdmin.
Eine weitere Möglichkeit speziell für den (Internet) Explorer ist das Programm PrivBar (siehe Soft-Link), das über ein rotes, gelbes oder grünes Lämpchen einschließlich der Information "Administrators", "Power User" (Hauptbenutzer) oder "User" (eingeschränkter Benutzer) die Rechteausstattung auf einen Blick anzeigt.
PrivBar erfordert eine manuelle Installation. Dazu öffnet man das ZIP-Archiv und kopiert die Datei PrivBar.dll in ein beliebiges Verzeichnis. Dann registriert man sie über das Kommando "regsvr32 <pfad>\PrivBar.dll" bei Windows und per Doppelklick auf PrivBarReg.reg als Explorer-Erweiterung. Jetzt noch in den Internet-Optionen unter "Erweitert" die "Browsererweiterungen von Drittanbietern" aktivieren und den Explorer neu starten - schon findet man im Explorer unter "Ansicht/Symbolleisten" die Toolbar PrivBar.
Mit diesen Einstellungen lässt sich komfortabel und sicher als eingeschränkter Benutzer arbeiten. Für Verwaltungsaufgaben holt man sich nur nach Bedarf per MachMichAdmin die erforderlichen Rechte. Wer damit zufrieden ist, braucht hier nicht weiter zu lesen. Im Folgenden finden Neugierige einige Erläuterungen, wie MachMichAdmin funktioniert.
Im Kern besteht MachMichAdmin eigentlich aus zwei Skripten. Eine minimale Fassung des ersten könnte so aussehen:
setlocal set Prog=cmd.exe /T:4F runas /env /user:Verwalter second.cmd
Die erste Zeile sorgt dafür, dass alle Variablen nach Ende des Skriptlaufs wieder ihre ursprünglichen Werte bekommen. In der zweiten wird das später mit Admin-Rechten aufzurufende Programm in die Variable Prog geschrieben. Der Parameter /T:4F für cmd.exe stellt das Fenster auf weißen Text auf rotem Hintergrund um, damit es sich von einer Eingabeaufforderung mit eingeschränkten Rechten unterscheidet.
Per runas wird dann mit den Rechten von "Verwalter" die zweite Batch-Datei gestartet. Der wichtige Trick ist dabei der Schalter /env, denn er bewirkt, dass alle Variablen ihre Werte auch in der Umgebung des neu gestarteten Programms behalten. Das ist offensichtlich für "Prog" wichtig, aber auch für die Variable Username, in der Windows automatisch den Namen des aktiven Benutzers einträgt. Ohne /env wäre das innerhalb von second.cmd "Verwalter", mit /env jedoch der Name des angemeldeten Benutzers. Der wird nun in second.cmd gebraucht:
net localgroup Administratoren "%Username%" /add runas /user:"%Username%" "%Prog%" net localgroup Administratoren "%Username%" /delete
Der erste net-Befehl fügt den Benutzer, der das erste Batch-Skript gestartet hat, der Administratoren-Gruppe hinzu, der zweite nimmt ihn wieder heraus. Zwischendurch startet der runas-Befehl das Programm im Namen des Benutzers. Das ist erforderlich, weil dieses Skript ja per runas aus dem ersten Skript unter dem Konto "Verwalter" gestartet wurde.
Zwei getrennte Skripte bergen die Gefahr, dass man eins verbaselt und das Ganze nicht mehr funktioniert. Um beide in einer Datei zu vereinen, macht man sich zu Nutze, dass die Variable Prog nur in second.cmd gebraucht wird und beim Aufruf des ersten Skripts noch nicht gesetzt ist:
if not ""=="%Prog%" goto second setlocal set Prog=cmd.exe /T:4F runas /env /u:root %~s0 exit /b :second net localgroup Administratoren "%Username%" /add runas /user:"%Username%" "%Prog%" net localgroup Administratoren "%Username%" /delete
Die Abfrage am Anfang prüft, ob die Variable Prog gesetzt ist und springt in diesem Falle sofort zum Label :second, worauf dieselben Befehle folgen, wie zuvor in second.cmd. Andernfalls geht es mit den Befehlen aus dem ersten Skript weiter. Im ersten runas ruft sich das Skript diesmal selbst auf. Denn die Variable %~s0 enthält den vollen Pfadnamen des ursprünglich gestarteten Skripts, allerdings mit kurzen Dateinamen. Näheres dazu verrät die Windows-Hilfe unter "Verwenden von Batchparametern". Das anschließende exit ist erforderlich, damit nach dem Selbstaufruf Schluss ist.
Diese Minimalversion hat noch einen gefährlichen Fehler: Wenn versehentlich ein Mitglied der Admin-Gruppe sie startet, schmeißt der letzte net-Befehl ihn ohne Nachfrage aus der Gruppe. Das vollständige MachMichAdmin-Skript macht diesen Fehler nicht. Es prüft, ob der Benutzer bereits ein Administrator ist und startet das Programm dann ohne Umwege.
In der Mini-Version fragen beide runas-Befehle nach einem Passwort, der erste nach dem des Verwalters, der zweite nach dem des eingeschränkten Benutzers. Um eine Abfrage einzusparen, kann man dem zweiten runas den Schalter /savecred mitgeben. Damit wird das Benutzer-Passwort nur für den Verwalter zugänglich und verschlüsselt in der Registry gespeichert.
Ein Programm zu starten, das dem Skript auf der Kommandozeile oder per Drag & Drop mitgegeben wird, ist unerwartet kompliziert. Das Problem ist, dass runas den gesamten Aufruf als einen Parameter erwartet. Wenn auf der Kommandozeile Leerzeichen stehen, muss daher die ganze Zeile in Anführungszeichen gesetzt werden. Das lässt sich im Skript jedoch nicht schematisch mit "%*" erledigen. Denn wenn die Kommandozeile selbst Anführungszeichen enthält, endet der Befehl für runas am ersten und es gibt eine Fehlermeldung. Vor jedes Anführungszeichen das erforderliche Escape-Zeichen \ einzufügen, ist mit Batch-Mitteln sehr aufwendig. Daher ist die einfachere Lösung, die Kommandozeile einfach in eine temporäre Batch-Datei zu schreiben und diese mit runas aufzurufen.
Das führt jedoch zu einer potenziellen Sicherheitslücke: Wenn es einem Angreifer gelingt, ein Skript einzuschmuggeln, das genauso heißt wie die temporäre Datei, und dem eingeschränkten Benutzer die Schreibrechte darauf zu entziehen, könnte MachMichAdmin es nicht überschreiben. Die CD-Version überprüft daher die Schreibrechte und bricht gegebenenfalls ab. (je)
[1] Axel Vahldiek, Selbstschutz, Das Sicherheitskonzept von Windows 2000 und XP, c't 15/04, S. 110
Michael Howard, "Senior Program Manager" der Secure Windows Initiative bei Microsoft, hat ein Programm namens DropMyRights geschrieben, das auf den ersten Blick eine ähnliche Sicherheit schafft wie MachMichAdmin, indem es genau das Gegenteil tut: Es nimmt einem einzelnen Prozess möglichst viele Rechte weg. Damit soll der Anwender weiterhin als Administrator arbeiten und nur "gefährdete" Programme wie den Browser mit geringeren Rechten starten - aber das ist eine schlechte Idee.
Microsoft schreibt ausdrücklich in der Dokumentation zu den Funktionen, die das Programm benutzt, dass man so etwas wie DropMyRights auf keinen Fall schreiben soll. Es reißt eine Sicherheitslücke, statt eine zu stopfen. Das Problem sind die Nachrichten, die sich Windows-Programme gegenseitig schicken. Damit kann beispielsweise ein Programm dem anderen Tastatureingaben vorgaukeln und es so fernsteuern.
Da ein Kontrollmechanismus fehlt, darf auch ein per DropMyRights eingeschränktes Programm jedem Administrator-Prozess solche Nachrichten schicken. Wenn der Benutzer als Admin arbeitet und nur den Browser per DropMyRights einschränkt, läuft auf jeden Fall ein Prozess namens "explorer.exe" mit Administrator-Rechten. Den muss ein Schädlingsprogramm nur fernsteuern, um beliebigen Schaden anzurichten. Tatsächlich gibt es bereits Beispielprogramme, die den Administrator-Explorer per Windows-Nachricht veranlassen, ein weiteres Programm mit vollen Rechten zu starten, das dann die eigentliche Schadfunktion enthält.
Bei MachMichAdmin ist die Gefahr durch Windows-Nachrichten verschwindend gering, da erstens nur ein Programm mit vollen Rechten läuft, dessen Namen der Angreifer nicht kennt. Zweitens ist nur dann ein fernsteuerbares Programm mit Administrator-Rechten aktiv, wenn es gerade gebraucht wird.
Mit dem Windows-Nachrichtendienst hat diese Art der Nachrichten übrigens nichts zu tun. Sie sind vielmehr ein Kernbestandteil von Windows und lassen sich daher nicht durch das Abschalten eines Dienstes entschärfen.