Sicher ist sicher

Grsecurity und PaX
Kommentare

So gut wie alle Einbrüche in Computersysteme resultieren aus Fehlern im Design, der Implementierung oder der Konfiguration von Software. Das populäre Grsecurity-Projekt schafft hier Abhilfe. Es stellt einen Patch zur Verfügung, der den Standard-Linux-Kernel (Vanilla Kernel) um zahlreiche Sicherheitsfeatures ergänzt.

Ein Fehler in einem Programm kann zu einem unerwarteten Programmablauf führen. In bestimmten Situationen ist es möglich, diesen Fehler so zu seinen Gunsten auszunutzen, dass das Programm fremde, von außen herbeigeführte Aktionen ausführt und dem Angreifer damit einen Zugriff auf das System ermöglicht.

Beispielszenario für einen Angriff: Ein auf dem Server aktiver Dienst, wie zum Beispiel der Mailserver Sendmail oder der Webserver Apache, ist in einer verwundbaren Version installiert oder fehlerhaft konfiguriert und es kursiert ein Remote-Exploit. Bei diesem Remote-Exploit handelt es sich um ein Programm, das den Fehler in der Software ausnutzt, ohne bereits lokalen Zugriff auf dem Server zu haben; der Angriff kann zum Beispiel aus dem Internet erfolgen. Nach dem erfolgreichen Ausführen des Remote-Exploit wird auf dem Zielsystem eine Shell (eine Kommandozeile, über die Befehle auf einem System abgesetzt werden können) gestartet. Der Angreifer hat somit Zugriff auf den Server. Da auf einem Server installierte Dienste in der Regel unter einem speziellem Benutzer laufen, der mit eingeschränkten Rechten ausgestattet ist, verfügt der Angreifer nach dem erfolgreichen Ausführen des Remote-Exploit über die Berechtigungen des angegriffenen Dienstes. Im besten Fall, sofern die Berechtigungen im Dateisystem richtig gesetzt sind (z.B. sollte der Benutzer für den Webserver nur lesende und die Berechtigung zum Ausführen von Dateien, die für den Webserver bestimmt sind, haben), ist es dem Angreifer nicht möglich, großen Schaden im System anzurichten. Durch das Ausnutzen von lokalen Sicherheitslücken, wie z.B. Fehler im Kernel oder Programmen mit Superuser-Rechten (SUID), ist es jedoch oftmals nur noch ein kurzer Weg, die Rechte des eingeschränkten Benutzers zu Rechten des Superuser (root) auszubauen und damit Vollzugriff auf dem Zielsystem zu erlangen.

Das Problem

Das Problem der aktuellen Lösung ist, dass auftretende Fehler erkannt und darauf bereinigt werden müssen. Daraus resultiert ein endloser Zyklus der Fehlersuche und des darauf folgenden Behebens (Auditing). Auditing ist teuer, zeitaufwändig, langsam und garantiert keine fehlerfreie Software. Menschen machen bekanntlich Fehler. Sicherheitsbewusste Administratoren verbringen oftmals einen Großteil ihrer Arbeitszeit mit dem Schließen von Sicherheitslücken durch das Einspielen von Patches. Bei einem Patch wird zwischen Binärprogrammen (ersetzen kompletter Programmteile, meist von Herstellern proprietärer Software) und dem Quellcode (Ersetzen der geänderten Zeilen im Quellcode) unterschieden. Im Quellcode bereitgestellte Änderungen erfordern das Kompilieren der Anwendung nach dem Patchen.

Die Lösung

Grsecurity setzt auf die Vorgehensweise der Erkennung, Prävention und Eingrenzung. Die Überlegenheit gegenüber dem herkömmlichen Verfahren liegt in der pro-aktiven Vorgehensweise. Grsecurity ist einfach zu konfigurieren. Maßnahmen, die dem Ausbau der Systemsicherheit dienen, laufen automatisiert ab. Das grundlegende Vorgehen, das Betriebssystem an sich vor dem Ausnutzen von Fehlern in einer Software zu schützen, sichert nicht nur gegen bekannte Fehler, die vielleicht noch nicht gepatcht sind. Selbst Fehler in einer Software, die noch nicht publik sind, zu der aber schon Exploits verfügbar sind, können zum größten Teil nicht auf einem mit Grsecurity abgesicherten System ausgenutzt werden. Der Administrator kann sich wieder mehr seinen eigentlichen Aufgaben, der Konfiguration und Pflege des Betriebssystems und der benutzten Software, widmen.

Historie des Projekts

Der Initiator des Projekts, Brad Sprengler, startete Grsecurity (Greater security) in 2001 auf Basis der Portierung von Openwall auf Linux. Das Projekt ist unter der GPL lizensiert. Ursprünglich für die 2.4-Kernelserie programmiert, wird die heutige stabile Kernelserie 2.6 auch unterstützt. Die aktuell stabile Grsecurity-Version 2.1.9 ist für den Kernel 2.4.33.3 und 2.6.18 verfügbar. Die Philosophie hinter Grsecurity:

  • Systemsicherheit kann nicht auf einer Ebene etabliert werden.
  • Zusätzliche Sicherheit muss benutzerfreundlich sein.
  • Jede auf dem System installierte Software muss geschützt werden können.
  • Das schwächste Glied in der Kette ist meistens der Mensch.
Features

Eine vollständige Liste der Funktionalität von Grsecurity ist auf der Projektseite unter dem Menüpunkt FEATURES zu finden. Hauptfunktionalitäten:

  • Verhindern des Ausnutzens von Buffer-Overflows (PaX)
  • Role-Based Access Control (RBAC)
  • Randomisierungen (TCP/IP Stack und Prozess-IDs)
  • Eingeschränkte Sichtbarkeit von Prozessen
  • Change Root (chroot) Hardening
  • Auditing-Funktionen
  • Trusted Path Execution
  • Konfiguration über Sysctl
Download, Installation und Konfiguration

Die aktuelle Version der Linux-Kernel-Quellen finden Sie auf der Homepage des Linux-Kernel-Projekts. Die aktuelle Version von Grsecurity und Gradm (für die Administration des RBAC-System) finden Sie im Download-Bereich auf der Homepage des Projekts. Nach dem Herunterladen des Kernels und Grsecurity können Sie zur Installation und Konfiguration übergehen. Zuerst entpacken Sie das Kernelarchiv und patchen es darauf mit dem für die Kernelversion vorgesehenen Grsecurity-Patch. Im nächsten Schritt wird der Linux-Kernel und Grsecurity über make menuconfig konfiguriert. Die Optionen für die Konfiguration von Grsecurity und PaX finden Sie unter dem Punkt „Security Options“ (Abbildung 1).

Abb.1: Die Optionen für die Konfiguation von Grsecurity und PaX sind unter „Security Options“ zu finden

Bei Grsecurity können Sie zwischen den Security-Levels „Low“, „Medium“, „High“ und „Custom“ wählen. Wählen Sie „Custom“, so können alle Einstellungen selbst aktiviert oder deaktiviert werden. Die Level „Low“, „Medium“, „High“ definieren ein vorgefertigtes Regelset.Unter dem Punkt PaX können Sie ebenfalls alle Optionen zur Konfiguration selbst wählen. Für jede Option ist eine Hilfe hinterlegt. Es ist Ihnen überlassen, welche von Grsecurity bereitgestellten Funktionen zur Absicherung des Systems konfiguriert werden. Nach der Konfiguration muss der Kernel kompiliert und installiert werden. Achten Sie bitte genau auf Ihr Vorgehen. Wählen Sie falsche Optionen aus oder installieren den Kernel nicht richtig, bootet Ihr System eventuell beim nächsten Systemstart nicht. Eine genaue Anleitung zur Installation finden Sie in der Quickstart-Anleitung von Grsecurity.

PaX

PaX, als Bestandteil des Grsecurity-Projekts, ist ein Patch für den Linux-Kernel, der dem Ansatz des niedrigsten Privilegs folgt („least-privilege approach“). Über diese Vorgehensweise wird sichergestellt, dass ein Programm nur tun darf, was es zur Ausführung tun muss.

PaX kennzeichnet bspw. Speicherbereiche, die nur gelesen oder geschrieben werden müssen, als nicht ausführbar, Programm-Speicher als nicht beschreibbar und streut Speicheradressen (Randomisierung). Diese Veränderungen im Linux-Kernel verhindern eine Großzahl von Angriffen auf Serversysteme wie zum Beispiel verschiedene Arten des Pufferüberlaufes (Buffer Overflow), das Ausführen von eingeschleustem Code (direct code execution), und erschwert aufgrund der Randomisierung von Speicheradressen verschiedene Angriffsmethoden, die darauf angewiesen sind, die Struktur des virtuellen Programmspeichers zu kennen (z.B.: ret2libc).

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -