Sicherheitsschleuse

Fordert unter Windows XP oder Vista ein Programm Administratorrechte, weiß der Benutzer nicht, ob es diese womöglich missbraucht, um beispielsweise Schadroutinen zu installieren. Dieser Artikel stellt zwei Tools vor, mit denen sich die Befugnisse von Programmen besser kontrollieren lassen als mit dem Rechte-Modell des Betriebssystems und die verhindern, dass Software heimlich über die Stränge schlägt.

In Pocket speichern vorlesen Druckansicht 5 Kommentare lesen
Lesezeit: 14 Min.
Von
  • Matthias Withopf
Inhaltsverzeichnis

Unter Windows empfiehlt es sich, bei der täglichen Arbeit auf Administratorrechte zu verzichten (siehe c't 5/2007, Seite 138). Das schützt das System vor ungewollter Sabotage etwa durch Löschen von Systemdateien oder durch Starten von Schadsoftware. Daher lautet der Expertenrat, den angemeldeten Benutzer nur mit Standardrechten auszustatten. So einfach sich dieser Rat in der Theorie anhört, so problematisch erweist er sich in der Praxis.

Der Knackpunkt ist die Installation von Anwendungen, die fast immer Administratorrechte voraussetzt. Mit diesen Rechten hat ein Installationsprogramm aber volle Kontrolle über den PC und kann auch ungefragt und unbemerkt Operationen ausführen, die der Benutzer nicht erlauben würde, bekäme er nur etwas davon mit.

Installiert beispielsweise das Setup einer Anwendung unbemerkt einen Kernel-Treiber, kann diese sich jederzeit die volle Kontrolle über den Rechner verschaffen. Nach der Installation die Administratorrechte wieder abzugeben und als normaler Benutzer zu arbeiten bleibt hinsichtlich der Sicherheit dann wirkungslos. Das hat beispielsweise das Debakel um den CD-Kopierschutz von Sony BMG gezeigt, der sich als Root Kit entpuppte. Auch DVD-Player, iTunes und Co. installieren DRM-bezogene Treiber und Dienste, von denen niemand so genau sagen kann, was sie wirklich tun.

Man muss also auf die Installation von Programmen verzichten - oder rüstet zur Gegenwehr. Zwei Hilfsmittel hierfür stellen wir vor: IEController (IEC) und WinSecurityGate (WSG). Sie funktionieren quasi als Schleuse zwischen der Software und dem Betriebssystem und lassen nur Zugriffe durch, die erlaubt sind beziehungsweise unverdächtig erscheinen. Die Funktionen, auf die sich die Wirkungsbereiche der beiden Programme erstrecken, sind in den Tabellen „Von IEController überwachte Funktionen“ und „Von WinSecurityGate blockierte Funktionen“ aufgelistet.

IEC überwacht die Ausführung eines Programms und verhindert je nach Einstellung kritische Aktionen oder fragt den Benutzer um seine Erlaubnis. Dazu benötigt man keine Admin-Rechte. Wie der Name nahe legt, war IEController ursprünglich dazu gedacht, den Internet Explorer zu überwachen. Das Menü, in dem sich beispielsweise JavaScript und JScript unabhängig voneinander deaktivieren oder nur bestimmte Active-X-Controls erlauben lassen, zeugt davon.

Doch IEC bietet viele Kontrollfunktionen, die ihn für die Überwachung jedes beliebigen Programms prädestinieren. Standardmäßig startet er zwar den Internet Explorer, aber wenn Sie ihn mit einem anderen Programm, beispielsweise Ihrem Mail-Client starten möchten, müssen Sie nur das Symbol oder die Verknüpfung auf das IEC-Symbol ziehen. Dann öffnet sich ein Dialog, in dem Sie unter dem Reiter „Konfiguration“ auf die Schaltfläche „Symbol für Konfiguration anlegen“ klicken. Dann wird auf dem Desktop eine neue Verknüpfung angelegt, über die Sie das Programm künftig starten können, damit es unter der Kontrolle von IEC läuft.

IEC kommt ohne Installation aus und nimmt keine Veränderungen am System vor. Das Programm lässt sich nach dem Auspacken der EXE- und DLL-Dateien in ein Verzeichnis direkt starten. Es generiert lediglich in der Registry unter „HKEY_CURRENT_USER\Software“ den Schlüssel „c't\IEController“. Dort legt es für den Start über das IEC-Symbol und über jede weitere wie oben beschrieben erzeugte Verknüpfung jeweils einen eigenen Satz von Optionen ab. Man kann also für jedes Programm individuelle Einstellungen vornehmen oder auch beispielsweise für den Browser mehrere Verknüpfungen mit unterschiedlich strengen Vorgaben anlegen.

Um Einstellungen zu ändern, rufen Sie den Konfigurationsdialog von IEC auf, indem sie nach dem Doppelklick auf das Programmsymbol die linke Maustaste gedrückt halten. Während das überwachte Programm aktiv ist, lässt sich der Dialog über die Tastenkombination „Alt-Caps-Lock“ öffnen. Ein Tipp: Gewöhnen Sie sich an, die Tastenkombination gleich zweimal zu drücken. Dadurch vermeiden Sie, dass Caps Lock aktiv bleibt.

Es ist durchaus möglich, dass Programme unter der Kontrolle des IEC abstürzen. Das hängt einerseits von den Kontrolleinstellungen ab und andererseits von der Fähigkeit der überwachten Software, mit der Sperre seiner Aufrufe umzugehen: Bemerkt es, wenn beispielsweise eine Datei nicht zum Schreiben geöffnet werden kann? Versucht es dann in einer Endlosschleife, diese Datei zu öffnen? Meist gelingt es, die Konfiguration durch Versuch und Irrtum so anzupassen, dass das Programm läuft und man sicher sein kann, dass es nichts Böses tut.

Auf etlichen Karteikarten des IEC-Dialogs erreicht man dazu über den Button „Experten-Konfiguration“ einen Dialog für individuelle Einstellungen. Hier kann man den Modus auf „Nachfragen“ stellen. IEC erkundigt sich dann vor jedem Eingreifen, ob die Aktion erlaubt oder verboten sein soll. Die Antwort kann nur für einen Aufruf, für alle während der aktuellen Session oder für immer gelten. Generelle Ausnahmen werden in einer Whitelist erfasst und lassen sich dort auch wieder löschen. Höchste Priorität hat die Blacklist, um bestimmte Aktionen unabhängig von anderen Einstellungen zuverlässig zu unterbinden. Damit kann man die Einstellung individuell an ein Programm anpassen.

Außerdem schreibt IEC auf Wunsch bestimmte Daten, etwa gesperrte Aktionen, in die Debug-Konsole von Windows. Diese Daten lassen sich mit DebugView (siehe Soft-Link) auslesen. DebugView muss mit Administratorrechten gestartet werden, was man durch Anklicken mit der rechten Maustaste und „Ausführen als ...“ erreicht.

IEC läuft unter Windows XP und Server 2003 sowie 2000 und NT. Auch die 64-Bit-Versionen und Vista werden unterstützt. Die Versionen 1 und 2 von IEController haben wir bereits 2003 vorgestellt [1, 2]. Daher gehen wir hier auf die Neuerungen in Version 3 ein. Dazu gehört das „Vererben“ der überwachten Ausführung: Startet ein Programm unter der Aufsicht von IEC ein weiteres, kann es ebenfalls unter dessen Kontrolle ausgeführt werden. Damit geht die Kontrolle nicht verloren, wenn beispielsweise ein Installationsprogramm ein anderes aus einer CAB-Datei auspackt, startet und sich selbst beendet.

Weitere Neuerungen sind die Überwachung von Funktionen für Prozesse, Dienste und Treiber. Viele Schadprogramme öffnen den Explorer-Prozess und schleusen dort mittels der Windows-Funktion CreateRemoteThread() Code ein. Dadurch taucht kein verdächtiges Schadprogramm im Task-Manager auf. Außerdem ist der Explorer als zentrale Windows-Komponente üblicherweise in der Ausnahmeliste von Firewalls und anderen Schutzprogrammen aufgeführt. Die Schadsoftware kann daher auf diesem Wege unerkannt Daten über den Internetzugang herausschmuggeln. IEC meldet, wenn das überwachte Programm diese Windows-Funktion benutzt.

Wie erwähnt, gilt es das Installieren von Diensten und Treibern, die später mit Systemrechten agieren, unbedingt zu beschränken. Daher schlägt IEC Alarm, wenn das überwachte Programm versucht, solche Dienste oder Treiber zu installieren.

Die Zugriffskontrolle auf die Registry lässt sich nun feiner einstellen als bei früheren Versionen, die nur Schreibzugriffe generell blockieren konnten. Mittlerweile lassen sich Änderungen der System-Registry, der sensiblen Internetkonfiguration sowie der verschiedenen Möglichkeiten sperren, die parasitäre Programme nutzen, um sich per Autostart oder Browser Helper Object ins System einzuklinken.

Besonders perfide sind systemweite Hooks, die beispielsweise Key-Logger verwenden, um andere Programme zu belauschen. Durch diesen Mechanismus kann ein Programm alle anderen zwingen, eine beliebige DLL zu laden und darin enthaltenen Code auszuführen. Das funktioniert bis Windows XP sogar über Benutzergrenzen hinweg. Dadurch kann auch ein Programm mit Standardrechten ein anderes, mit Administratorrechten auf demselben Windows-Desktop gestartetes infiltrieren, beispielsweise eine Sicherheitssoftware. Meldet IEC, dass ein Programm von diesen Hook-Funktionen Gebrauch macht, ist höchste Vorsicht geboten.

Neu ist auch die Möglichkeit, Datei- und Registry-Operationen, die ein Programm durchgeführt hat, bei dessen Beenden wieder rückgängig zu machen. Sie ist aber mit Vorsicht zu benutzen, da es passieren kann, dass IEC Daten zurückschreibt, die das System mittlerweile geändert hatte. Dadurch kann es zu einem inkonsistenten Zustand kommen. IEC überwacht nicht nur die dokumentierten Win32-Funktionen, sondern insbesondere auch die vorwiegend undokumentierten nativen Nt-Aufrufe, die die eigentliche Arbeit leisten. Eine lesenswerte Beschreibung dieser Aufrufe findet sich in [3].

IEController kann beispielsweise verhindern, dass ein DVD-Player Daten ins Internet sendet, oder dass ein Instant-Messanger Dateien ausspioniert. Unser zweites Tool bietet weniger Funktionen, gewährleistet aber einen permanenten Grundschutz: WinSecurityGate ist quasi eine auf die kritischen Punkte reduzierte Version des IEC, die einmal gestartet systemweit aktiv bleibt und die man nur durch einen Neustart wieder los wird. Sie blockiert die überwachten Funktionen bedingungslos auf Kernel-Ebene.

Es gibt sicherlich Programme, die die rigorose Sperrung verdächtiger Funktionen durch WSG ins Stolpern bringt. Wenn WSG das Nachladen von Treibern blockiert, dann betrifft dies sogar Windows selbst: Treiber, die beim Start von WSG bereits geladen sind, funktionieren auch weiterhin, aber etwa solche, die beim Anschluss von Plug&Play-Geräten installiert werden sollen, bleiben außen vor.

Der Konfigurationsdialog, in dem man diese Option deaktivieren kann, erscheint nur beim Start, danach fragt WSG nicht mehr beim Benutzer nach und dieser kann keine Einstellung mehr ändern. Das Aufrufen von Funktionen für die grafische Benutzeroberfläche aus dem Kernel wäre kaum so sicher zu bewerkstelligen, dass nicht ein Programm sie abfangen könnte, um etwa alle Funktionen abzuschalten. Indem WSG auf die Kommunikation mit dem Benutzer und die Möglichkeit verzichtet, Ausnahmen zu definieren, wird es Schadprogrammen deutlich erschwert, sich an der Überwachung vorbeizumogeln und dennoch kritische Aktionen aufzurufen.

WSG ist selbst ein Kernel-Treiber. Er wird durch ein User-Mode-Programm installiert, das unter Administratorrechten gestartet werden muss. Der Treiber macht quasi die Tür hinter sich zu, sodass sich keine weiteren Treiber oder Dienste mehr einnisten können. Er bleibt so lange aktiv, bis man den PC herunterfährt. Nach dem Neustart muss er durch das User-Mode-Programm wieder geladen werden. Dieses startet man wie beschrieben mit „Ausführen als ...“ von Hand oder trägt es unter „Geplante Tasks“ (Programme/Zubehör/Systemprogramme) für jeden Systemstart ein. Der Assistent fragt dabei nach dem Benutzer, unter dessen Rechten das Programm gestartet werden soll. Hier gibt man einen Benutzer mit Administratorrechten an.

Für den automatischen Start beim Booten lässt sich der Konfigurations-Dialog abschalten. Dazu wählt man einmal im Dialog den Punkt „Diese Meldung nicht mehr anzeigen“ an. Danach bleiben die zuletzt gewählten Einstellungen gültig. Ändert man später seine Meinung, lässt sich der Dialog durch einen Doppelklick auf das Programmsymbol und Gedrückthalten der linken Maustaste wieder aufrufen. Um geänderte Einstellungen dann abzuspeichern, klickt man auf „Ok“. Läuft WSG bereits, gibt es eine Fehlermeldung, dass der Treiber nicht gestartet werden kann. Die Einstellungen werden aber dennoch abgespeichert.

WSG funktioniert nur mit den 32-Bit-Versionen von Windows. Wenn auf dem PC weitere Sicherheitssoftware läuft, die ähnliche Mechanismen nutzt wie WSG, sind Probleme nicht auszuschließen. Eine Fehlfunktion wäre dann ungleich tragischer als beim IEC, da WSG als Kernel-Treiber einen Systemabsturz verursachen kann.

Die Schutzmechanismen im Einzelnen: Wenn man die Installation von Treibern und Diensten blockiert, wird ein Teil der Registry vor Manipulation geschützt. In diesem Teil sind Informationen über den Start von Treibern und Diensten hinterlegt. WSG verhindert damit, dass solche Software neu installiert oder deinstalliert wird. Das Blockieren von Kernel-Treibern verhindert hingegen das Starten von bereits konfigurierten Treibern.

WSG kann ebenso wie der IEC globale Hook-Funktionen und damit Key-Logger systemweit blockieren. Sperrt man den Zugriff auf den Explorer-Prozess, können Schadprogramme keinen Code in den Internet-Explorer-Prozess einschleusen. „PROCESS_TERMINATE blockieren“ sorgt auf Wunsch dafür, dass Prozesse sich gegenseitig nicht hart beenden können. Dies verhindert, dass Schadprogramme eventuell laufende Sicherheitssoftware einfach abschießen. Außerdem kann WSG lästige Änderungen der Startseite des Internet Explorer und der im Browser eingetragenen Suchmaschine verhindern.

Durch Einträge in der HOSTS-Datei lassen sich Zugriffe auf bestimmte Internetadresse umleiten oder blockieren. Schadsoftware nutzt diesen Mechanismus, um beispielsweise Antiviren-Software vom Update-Server des Herstellers abzuschneiden oder Zugriffe etwa auf Bank-Server zu Phishing-Zwecken umzuleiten. WSG verhindert deshalb Schreibzugriffe auf die HOSTS-Datei.

Auch WSG kann ein Protokoll schreiben, das per DebugView einsehbar ist. Es ist wichtig, DebugView vor WSG zu starten, da dieses andernfalls den notwendigen Treiber zum Protokollieren der Kernel-Meldungen aussperren würde. Der Prozess, der eine verbotene Aktion ausführen wollte, lässt sich an seiner PID identifizieren. Die eindeutige Prozesskennung kann man beispielsweise im Task Manager nachschlagen, der auch den Namen des Prozesses aufführt.

IEC und WSG sichern etliche Angriffspunkte, an denen Windows verletzlich ist. Doch wie jede Software können auch sie keine totale Sicherheit bieten. Sie ersetzen vor allem nicht die Aufmerksamkeit des Anwenders.

Auch können IEC und WSG nicht nachträglich ein befallenes System abdichten. Wenn es bereits kompromittiert ist, nützen die beiden Programme nicht mehr viel. Man sollte daher das System regelmäßig mit Antiviren-Programmen (siehe Seite 142) überprüfen. Gegen den Befall durch Schädlinge hilft eine Neuinstallation von Windows, nach der man am besten gleich zu IEC und WSG greift.

[1] Matthias Withopf, Axel Kossel, Internet Explorer an die Kette gelegt, Echte Kontrolle über aktive Inhalte, c't 1/03, S. 86

[2] Matthias Withopf, Axel Kossel, Kontrolliertes Risiko, Sicherheitstool (nicht nur) für den Internet Explorer, c't 21/03, S. 108

[3] Gary Nebbett, Windows NT/2000 Native API Reference, Expert insight for Windows NT/2000 software developers, ISBN 1-57870-199-6

Soft-Link

Von IEController überwachte Funktionen
Wirkungsbereich Funktionen
ActiveX/COM CoCreateInstanceEx(), CoGetClassObject()
Dateien NtCreateFile(), NtOpenFile(), NtDeleteFile(), NtQueryAttributesFile(), NtQueryFullAttributesFile()
Prozesse/Threads CreateProcessA/W(), NtOpenProcess(), NtOpenThread(), OpenProcess(),
TerminateProcess(), TerminateJobObject(), NtWriteVirtualMemory(), NtCreateThread(), NtCreateProcess(), NtCreateProcessEx(), RtlCreateProcessParameters()
Registry NtQueryKey(), NtOpenKey(), NtCreateKey(), NtDeleteKey(), NtFlushKey(), NtEnumerateKey(), NtQueryValueKey(), NtQueryMultipleValueKey(), NtDeleteValueKey(), NtSetValueKey(), NtEnumerateValueKey()
Netzwerk/Internet socket(), closesocket(), getsockname(), connect(), accep()t, listen(), bind(), send(), sendto(), recv(), recvfrom(), select(), setsockopt(), WSALookupServiceNextWInternetConnectA/W(), InternetOpenUrlA/W(), InternetOpenA/W(), HttpAddRequestHeadersA/W(), HttpOpenRequestA/W(), HttpSendRequestA/W(), InternetReadFile(), InternetReadFileExA(), InternetWriteFile()
Hooks SetWindowsHookExA/W(), SetWindowsHookExW(), SetWinEventHook(), AttachThreadInput()
Treiber/Dienste OpenSCManagerA/W(), OpenServiceA/W(), CreateServiceA/W()
Von WinSecurityGate blockierte Funktionen
Wirkungsbereich Funktionen
Treiber NtLoadDriver()
Dateien NtCreateFile(), NtOpenFile()
Registry NtSetValueKey(), NtDeleteValueKey()
Prozesse NtOpenProcess()
Hooks KeUserModeCallback()

(ad)