Software, die mehr Daten in den Memory Buffer schreibt als hineinpassen, ist ein willkommenes Ziel für Buffer-Overflow-Attacken. Wir sagen Ihnen, wie Sie das verhindern. [...]
Buffer-Overflow-Attacken gehören zu den ältesten und gängigsten Ursachen für Sicherheitslücken auf Code-Basis. Dabei sind in C oder C++ programmierte Applikationen deutlich anfälliger für solche Programmierfehler, als Software, die auf anderen Entwicklungssprachen basiert. Um diese Fehler und somit Buffer-Overflow-Angriffe durch kriminelle Hacker zu verhindern, hat die Entwickler-Community diverse sichere Entwicklungsmethoden entwickelt, die inzwischen auch von den großen Softwareplayern am Markt als Teil ihres Secure Development Lifecycles adaptiert wurden.
Buffer Overflow – Definition
Zunächst einmal ist es wichtig, zu wissen, wie eine Buffer-Overflow-Attacke überhaupt definiert wird. Es handelt sich um eine Memory-Sicherheitslücke, bei der die Software nicht hinreichend die Grenzen des zugewiesenen Memory Buffers überprüft und in der Folge mehr Daten hineinschreibt als hineinpassen. Das sorgt dafür, dass die Daten in angrenzende Speicherbereiche „überschwappen“ und dort gespeicherte Informationen überschreiben. Die Folge sind häufig Abstürze oder Sicherheitslücken, die von kriminellen Hackern ausgenutzt werden können.
Buffer-Overflow-Attacken im Trend
Im September 2019 veröffentlichte die MITRE Corporation eine Liste der Top 25 Software-Schwachstellen. Dabei belegten „buffer handling errors“ – eine Art Überkategorie von Buffer-Overflow-Angriffen den ersten Rang.
Das ist angesichts der langen Historie dieser Angriffstechnik und entsprechenden Bemühungen, dieser endgültig den Garaus zu bereiten, überraschend. Allerdings hat MITRE das Schwachstellen-Ranking auch zum ersten Mal seit 2011 aktualisiert und dazu auf eine neue Basis gestellt: Die Bewertungsformel für die Security-Löcher kombiniert nun die Frequenz von Sicherheitslücken in der National Vulnerabilities Database (Grundlage sind die Jahre 2017 und 2018) mit dem durchschnittlichen Schweregrad der Attacke. Das Ranking spiegelt also das Gesamtrisiko von bestimmten Schwachstellen ab – basierend auf deren Häufigkeit und Bedrohungslevel.
Ein weiterer Grund für das Wiedererstarken von Buffer-Overflow-Angriffen könnte in der massenhaften Verbreitung von IoT-Geräten liegen. Diesbezüglich wurden in den letzten Jahren immer wieder schlechte Code-Qualität und massive Sicherheitsverfehlungen bemängelt. Die Firmware dieser Embedded Systems wurde entsprechend häufig von Buffer-Overflow-Attacken heimgesucht. Geändert hat sich dennoch kaum etwas – mal abgesehen davon, dass immer mehr solcher Devices im Internet, Business-Netzwerken und Privathaushalten zum Einsatz kommen.
Beispiele für Buffer-Overflow-Angriffe
Ein Buffer Overflow stellt in der Regel einen schwerwiegenden Angriff auf die IT-Sicherheit dar, weil sie dazu führen können, dass kriminelle Hacker die vollständige Kontrolle über den überschriebenen Speicherplatz erlangen. Ist das einmal geschehen, sind dem Schadcode Tür und Tor geöffnet. Doch auch wenn es nicht dazu kommt, führt ein Buffer-Overflow-Angriff oft zu einem Absturz der Software und damit zu einem Denial-of-Service-Status, der die Verfügbarkeit der Applikation und aller zugehörigen Prozesse einschränkt. Speziell wenn Server betroffen sind, die durchgehende Verfügbarkeit gewährleisten sollen, ist das problematisch.
In bestimmten Fällen können kriminelle Hacker Buffer-Overflow-Attacken auch dazu nutzen, um kritische Einstellungen innerhalb des Applikations-Speichers zu überschreiben (etwa ein Flag, dass Auskunft über die Administratorrechte von Usern gibt). Das kann in einer Rechteausweitung auf Applikations- oder gar Systemebene resultieren. Fehlerhaftes Handling der Buffer-Grenzen kann Angreifern auch ermöglichen, Daten außerhalb des Buffers zu lesen statt sie zu überschreiben. Diese Praxis bezeichnet man als „out-of-bounds read“. Diese Methode bringen kriminelle Hacker auch zum Einsatz, um Informationen über weitere Angriffsmöglichkeiten auszuspähen. Zwar unterscheiden sind „out-of-bounds reads“ von Buffer-Overflow-Attacken, sie werden aber durch die dieselben Programmierfehler ermöglicht.
Wie Sie Buffer Overflow verhindern
Da Buffer-Overflow-Angriffe das Resultat von Coding-Fehlern sind, besteht der einfachste Weg diese zu verhindern darin, Ihre Softwareentwickler entsprechend zu schulen. Diverse Coding Guides, Fachbücher und auch Zertifizierungsprogramme thematisieren das Buffer-Overflow-Problem. Das CERT Coordination Center und das SEI der Carnegie Mellon University haben darüber hinaus Coding-Standards für diverse Programmiersprachen (darunter auch C und C++) veröffentlicht.
Buffer Overflows lassen sich darüber hinaus auch automatisiert verhindern: Zum Beispiel mit Hilfe von Programmiersprachen, Frameworks und Bibliotheken die als „memory safe“ gelten, weil diverse Funktionen, die einen Buffer Overflow verursachen können, entsprechend abgesichert wurden. Softwareentwickler können ebenfalls dazu beitragen, die Wahrscheinlichkeit für Buffer Overflows zu mindern, indem sie bei ihrer Arbeit auf Features wie ASLR und PIE setzen. Auch der Einsatz von Compiler Flags und Extensions kann hierbei sinnvoll sein.
Leider bietet keine dieser Maßnahmen hundertprozentige Sicherheit vor einer Buffer-Overflow-Attacke. Deshalb sind regelmäßige Reviews des Programmcodes und Application Security Testing – sowohl mit internen als auch externen Security Teams – von entscheidender Bedeutung.
Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation CSO Online.
*Lucian Constantin arbeitet als Korrespondent für den IDG News Service.
**Florian Maier beschäftigt sich für Computerwoche.de mit vielen Themen rund um Technologie und Management. Daneben betätigt er sich auch in sozialen Netzen.
Be the first to comment