Login
Newsletter
Werbung

Mo, 28. Mai 2007, 00:00

Systeme mit Systrace härten

Sicherheit des Systems

Ein System wie Systrace selbst hat auch mit einigen Sicherheitsproblemen zu kämpfen, z.B. Aliasen auf Systemressourcen, Dateinamen von Programmen, die in einem Chroot laufen oder der Verfolgung von Prozess-IDs.

Der Zugriff auf ein und dieselbe Datei ist unter Unix dank symbolischer Links und relativer Pfadnamen auf unendlich viele Arten möglich. Außerdem können Dateien von verschiedenen Diensten, wie z.B. Proxys, NFS oder CFS, bereitgestellt werden. Derartige Dienste sind für Systrace nicht sichtbar, müssen aber trotzdem korrekt funktionieren.

Weiterhin ist es möglich, eine Race-Condition zu produzieren, die eine Systrace-Sandkiste aushebelt. Systrace benötigt für die Überprüfung eines Systemaufrufs eine gewisse Zeitspanne. Während dieser Zeitspanne kann ein anderer Prozess den eigentlichen Systemaufruf des zu überwachenden Programmes ändern. Systrace erkennt diese Änderung nicht und gestattet die Ausführung des inzwischen geänderten Systemaufrufs.

Um diesen Problemen zu begegnen, verwendet Systrace nur normalisierte Dateinamen und Systemaufrufe. Alle Dateinamen und Parameter für Systemaufrufe werden von Systrace normalisiert, indem Dateinamen in absolute Form ­ also ohne Symlinks oder relative Pfadangaben ­ umgewandelt werden. Diese normalisierten Werte werden dem Betriebssystem wieder übergeben. Ausgenommen hiervon sind nur einige Systemaufrufe wie readlink. Weiterhin werden diese Werte auf einem nicht änderbaren Puffer zwischengespeichert, sodass kein anderer Prozess die Werte manipulieren kann. Der Kernel verweigert die Ausführung von Systemaufrufen, die Symlinks als Argumente enthalten. Somit werden nur noch von Systrace normalisierte Aufrufe, die erlaubt sind, ausgeführt. Alle anderen Aufrufe werden abgelehnt.

Werden Systemaufrufe abgelehnt, müssen die überwachten Programme entsprechende Fehlermeldungen bekommen. Da nicht alle Programme eine funktionierende Fehlerbehandlung implementieren, kann in der Richtlinie ein bestimmter Fehlercode spezifiziert werden.

Ebenfalls zu betrachten ist ein Richtlinien-Wechsel und Prozess-Beendigung. Wenn ein überwachter Prozess einen neuen Prozess startet, wird der alte Prozess vom System aus dem Speicher entfernt. Der neue Prozess wird stattdessen ausgeführt. Dieser neue Prozess kann ein vertrauenswürdiges Programm sein, sodass keine weitere Überwachung notwendig ist. Es kann aber auch ein Prozess sein, der mit einer anderen Richtlinie besser überwacht wird. Systrace überwacht Systemaufrufe auf Erfolg und kann so nach einem geglückten execve-Systemaufruf den neuen Prozess mit einer anderen Richtlinie überwachen oder die Überwachung beenden.

Mithilfe des log-Befehls kann in einer Richtlinie jeder ausgeführte Systemaufruf protokolliert werden. Somit ist es möglich, mit einer Systrace-überwachten Shell alle execve-Aufrufe eines Benutzers zu überwachen. Hierbei muss man aber unbedingt datenschutzrechtliche und andere rechtliche Regelungen beachten.

Die gesamten Richtlinien werden in einzelnen Dateien gespeichert. Kann ein Einbrecher die Richtlinien-Dateien manipulieren, kann er Systrace aushebeln. Daher sind die Richtlinien-Dateien unbedingt zu schützen. Dazu kann man neben restriktiven Schreibrechten die NetBSD-Dateiflags (schg) in Verbindung mit den SecurityLeveln verwenden. Möchte man diese Methode nicht einsetzen, sollten die Richtlinien zumindest regelmäßig mit einem Integritätsprüfer wie mtree(8), Aide oder Tripwire überprüft werden.

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung