Login
Newsletter
Werbung

Mo, 5. Mai 2003, 21:00

Software::Security

Exec Shield schützt vor Sicherheitslücken

Ein Patch für Kernel 2.4 namens "Exec Shield" soll das Ausnutzen von Sicherheitslücken in Applikationen erschweren.

Die x86-Architektur hat einen fatalen grundsätzlichen Fehler. Sie kann nicht zwischen Lese- und Ausführungsrechten unterscheiden. Aus diesem Grund ist es möglich, ausführbare Programme in Speichersegmenten zu plazieren, die eigentlich nur les- und schreibbar sein sollten. Dies führt dazu, daß Stack- und Heap-Überläufe in Applikationen immer wieder Sicherheitslücken darstellen, besonders wenn die betroffenen Programme mit erweiterten Rechten laufen.

Ingo Molnar hat nun einen Patch für Kernel 2.4.21-rc1 entwickelt, der dieses Problem auf äußerst clevere Weise umgeht. Die Segmente bleiben ausführbar, jedoch setzt der Scheduler eine Grenze, oberhalb der kein ausführbarer Code liegen darf. Diese Grenze wird in einem Segment verwaltet, das der Scheduler vor jedem Prozeßwechsel auf den korrekten Wert für die jeweilige Applikation setzt.

Zusätzlich werden ausführbare Segmente in den Speicherbereich von 1-16 MB gelegt, soweit möglich (dies sind eine virtuelle Speicheradressen, jeder Prozeß kann diese unabhängig von anderen belegen). Dieser Bereich heißt »ASCII Armor«. Es ist der Adreßbereich, bei dem das oberste Byte der Adresse 0 ist. Viele Angriffe beruhen darauf, daß eine URL oder sonst ein String an die Applikation übergeben wird, um eine bestimmte Adresse anzuspringen. Enthält die Adresse jedoch eine 0 wie im »ASCII Armor«, ist das nicht mehr möglich, da URLs und Strings kein Nullzeichen enthalten können.

Der Overhead liegt bei 2-3 Taktzyklen pro Prozeßwechsel und einem geringen Mehraufwand bei mmap-Aufrufen. Der Nachteil des Patches ist, wie auch beim »non-exec stack patch«, daß einzelne Programme damit nicht funktionieren. Diese fallen in zwei Klassen:

  • Programme, die die Trampolin-Technik verwenden, die ausführbaren Code auf dem Stack benötigt. Bei solchen Programmen ist es möglich, mit dem Tool »chkstk« den Stack wieder ausführbar zu machen. Diese Information wird in der Programmdatei selbst gespeichert.
  • Programme, die annehmen, daß Lese- und Ausführungsrechte unter x86 identisch sind. Dies ist vor allem XFree86, das in der neuesten (CVS)-Version bereits korrigiert ist. Wer nicht updaten kann, kann mit dem Kommando »echo 1 > /proc/sys/kernel/X-workaround« einen Workaround aktivieren.

Der Patch und das Tool chkstk sind von http://people.redhat.com/mingo/exec-shield/ herunterzuladen. Wichtig ist noch, daß auch dieser Patch keinen absoluten Schutz vor Pufferüberläufen bietet. Er macht es nur Angreifern schwerer, einen Überlauf auszunutzen. (Dank an Dimitri.)

Werbung
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung