Product SiteDocumentation Site

4.15. Schutz vor Pufferüberläufen

Pufferüberlauf (buffer overflow) wird eine verbreitete Art von Angriffen auf Software [37] genannt, welche die unzureichende Überprüfung von Eingabegrenzen ausnutzen (ein Programmierfehler, der häufig bei der Programmiersprache C auftritt), um durch Programmeingaben Befehle auf der Maschine auszuführen. Diese Attacken über Server, die auf Verbindungen warten, oder über lokal installierte Software, die einem Benutzer größere Privilegien gewährt (setuid oder setgid) kann zu einem kompromittierten System führen.
Es gibt hauptsächlich vier Methoden, um sich gegen Pufferüberläufe zu schützen:
  • Patchen Sie den Kernel, um das Ausführen des Stapelspeichers zu verhindern. Sie können entweder Exec-Shield, OpenWall oder PaX (ist in den Grsecurity- und Adamantixpatches enthalten) verwenden.
  • Verbessern Sie den Quellcode, indem Sie Werkzeuge einsetzen, die Teile finden, die zu dieser Verwundbarkeit führen könnten.
  • Übersetzen Sie den Quellcode neu, um vernünftige Prüfungen einzuführen, um Überläufe zu verhindern. Benutzen Sie dazu den http://www.research.ibm.com/trl/projects/security/ssp/ Patch für GCC (der von http://www.adamantix.org verwendet wird).
Debian GNU/Linux liefert bis einschließlich der Veröffentlichung 3.0 Software, um alle diese Methoden bis auf den Schutz bei der Übersetzung des Quellcodes (das wurde aber schon in http://bugs.debian.org/213994 nachgefragt) zu implementieren.
Beachten Sie, dass selbst wenn Debian einen Compiler zur Verfügung stellen würde, der Schutz vor Stapel- und Pufferüberläufen bieten würde, so doch alle Pakete neu übersetzt werden müssten, um diese Eigenschaft einzuführen. Tatsächlich ist das die Aufgabe der Distribution Adamantix (unter anderen Fähigkeiten). Die Auswirkungen dieses neuen Features auf die Stabilität der Software muss aber noch ermittelt werden (einige Programme und einige Prozessoren werden vielleicht deswegen nicht mehr funktionieren).
Seien Sie auf jeden Fall gewarnt, dass selbst diese Umgehungen des Problems nicht vor Pufferüberläufen schützen können, da es Möglichkeiten gibt, diese zu überlisten, wie in http://packetstorm.linuxsecurity.com/mag/phrack/phrack58.tar.gz des phrack-Magazins oder in COREs Advisory http://online.securityfocus.com/archive/1/269246 beschrieben.
Wenn Sie Ihren Schutz gegen Pufferüberläufe (unabhängig von der gewählten Methode) testen wollen, können Sie paxtest installieren und die angebotenen Tests laufen lassen.

4.15.1. Kernelpatch zum Schutz vor Pufferüberläufen

Ein Kernelpatch, der Schutz vor Pufferüberläufen bietet, ist der Openwall-Patch, der diese im Linux-Kernel 2.2 verhindern soll. Für 2.4 oder neuere Kernel müssen Sie die Umsetzung von Exec-Shield oder die von PaX (ist im Grsecurity-Patch kernel-patch-2.4-grsecurity und im Adamantix-Patch kernel-patch-adamantix enthalten) benutzen. Für weitere Informationen zum Einsatz dieser Patches lesen Sie Abschnitt 4.14, „Den Kernel patchen“.

4.15.2. Prüfprogramme für Pufferüberläufe

Zur Nutzung von Werkzeugen zum Aufspüren von Pufferüberläufen benötigen Sie in jedem Fall Programmiererfahrung, um den Quellcode zu reparieren (und neu zu kompilieren). Debian stellt beispielsweise bfbtester (einen Überlauftester, der Programme per Brute-Force (durch Testen aller Möglichkeiten) nach Überläufen der Kommandozeile und von Umgebungsvariablen durchtestet) bereit. Andere interessante Pakete sind auch rats, pscan, flawfinder und splint.


[37] Sie sind in der Tat so verbreitet, dass sie die Grundlage für 20% aller gemeldeten Sicherheitsmängel pro Jahr darstellen, wie von http://icat.nist.gov/icat.cfm?function=statistics herausgefunden wurde.