Kurzfassung
Buffer-Overflow-Angriffe treten auf, wenn ein Programm Daten über seinen zugewiesenen Speicherbereich hinaus schreibt. Dadurch entsteht eine Schwachstelle, die es Hacker:innen ermöglicht, Schadcode einzuschleusen und die Kontrolle über ein System zu übernehmen. Angriffe können Stack-basiert oder Heap-basiert sein und kommen am häufigsten in älteren, komplexen Programmen vor, die in Sprachen wie C/C++ oder Assembler geschrieben sind. Die Abwehr dagegen erfordert die Modernisierung von Legacy-Systemen, das zeitnahe Einspielen von Sicherheits-Patches, die Verwendung sichererer Programmiersprachen und die Aktivierung von Schutzmaßnahmen für ausführbare Speicherbereiche.
Funktionsweise von Buffer-Overflow-Angriffen
Während eines Pufferüberlaufs schreibt ein Programm Daten in einen Speicherbereich außerhalb des Puffers. Dieser Schritt kann Ihre Daten beschädigen oder Ihr Programm zum Absturz bringen.
Hacker:innen wissen das und nutzen manchmal Ihren harmlos wirkenden Puffer, um Ihr Gerät zu übernehmen.
Im Grunde ist ein Puffer ein Lebensretter, wenn einem Ihrer Programme der Arbeitsspeicher ausgeht und es nicht abstürzen soll. Das Programm kann Daten in diesem Puffer speichern und weiterarbeiten. Wenn Ihr Programm noch mehr Speicher benötigt, als in einem Puffer verfügbar ist, ist es anfällig für einen Buffer-Overflow-Angriff.
Buffer-Overflow-Angriffe verursachten einige der berüchtigtsten Hacking-Vorfälle, vom Morris-Wurm im Jahr 1998 bis zu Stagefright im Jahr 2015.
Wir erklären Ihnen, wie sie funktionieren, und helfen Ihnen zu verstehen, wie Sie sich davor schützen können.
Was ist ein Pufferüberlauf?
Fast jeder Computer verfügt über einen Puffer. Dieser dedizierte Bereich kann Daten speichern oder übertragen, sodass Sie ohne mehrfache Abstürze weiterarbeiten können. Aber selbst der beste verfügbare Puffer hat seine Grenzen. Und wenn Sie ihn überschreiten, beginnt ein Überlauf.
Ein Pufferüberlauf kann sein:
| Typ | Ursache | Auswirkung |
|---|---|---|
| Versehentlich | Sie versuchen, innerhalb eines Programms zu viel zu tun, und überschreiten den Platz, den das Programm Ihnen zur Verfügung stellt. | Das Programm kann beginnen, sich unberechenbar zu verhalten, und in einigen Fällen kann es vollständig ausfallen. |
| Absichtlich | Jemand sendet Daten, die für Ihr Programm zu groß sind. Dieser Datensatz enthält Code, der die gültigen Versionen ersetzen kann. | Wenn der neue Code ausgeführt wird, kann er das Programm dazu veranlassen, Dinge zu tun, die Sie nicht erwarten. |
Es mag für einen Hacker schwierig erscheinen, ein Programm zu entwickeln, das Ihr Programm sowohl vollständig versteht als auch dessen Funktionsweise ändern kann. Aber leider kommen diese Angriffe relativ häufig vor.
Welche Arten von Buffer-Overflow-Angriffen gibt es?
Jedes Programm enthält einen Puffer, aber ein:e Angreifer:in kann eine von zwei Methoden anwenden, um diesen zu übernehmen und einen Angriff zu starten.
Ein Buffer-Overflow-Angriff kann sein:
| Angriffstyp | Methode | Ergebnis |
|---|---|---|
| Stack-basiert | Ihr:e Angreifer:in sendet Daten an ein Programm, und diese Übertragung wird in einem zu kleinen Stack-Puffer gespeichert. Ihr Hacker könnte eine „Push“-Funktion wählen und neue Elemente oben auf dem Stack speichern. Oder der Hacker könnte eine „Pop“-Funktion wählen, das oberste Element entfernen und es ersetzen. | Das bedeutet, dass der:die Hacker:in offiziell bösartigen Code eingeschleust und die Kontrolle übernommen hat. |
| Heap-basiert | Ihr Hacker korrumpiert Daten im Heap. | Diese Codeänderung zwingt Ihr System dazu, wichtige Daten zu überschreiben. |
Als Benutzer:in sehen Sie möglicherweise nicht, wie diese Änderungen stattfinden. Aber wenn Sie diese Entwicklung nicht aufhalten, könnte Ihr Programm ins Stocken geraten und zum Stillstand kommen. Mit der Zeit könnte es abstürzen.
Da Pufferüberläufe häufig auf wichtige Programme wie Betriebssysteme abzielen, könnte ein Hack dazu führen, dass Sie mit einem Gerät zurückbleiben, das Sie nicht mehr kontrollieren können.
Was macht Ihr Programm anfällig für einen Pufferüberlauf?
Es ist einfacher, einen Angriff zu verhindern, als sich davon zu erholen. Glücklicherweise gibt es zahlreiche Maßnahmen, die Sie ergreifen können, um Ihr Unternehmen zu schützen.
Beginnen Sie damit, den Code zu untersuchen, den Sie während der Entwicklung verwenden. Zu den für Buffer-Overflow-Angriffe anfälligen Programmiersprachen gehören:
- Assembly
- C/C++
- Fortran
Diese Sprachen bieten keinen integrierten Schutz und ermöglichen keine routinemäßigen Überprüfungen auf Überläufe.
Welche Code-Eigenschaften machen Ihr Programm zu einem Angriffsziel?
Untersuchen Sie als Nächstes Ihren Code. Es ist für Hacker einfacher, einen Angriff zu starten, wenn Ihre Programme:
- Kompliziert. Fällt es Ihnen schwer, das Verhalten Ihres Programms vorherzusagen?
- Extern. Benötigen Sie Daten von Drittanbietern oder externe Daten, um die Aktionen innerhalb des Programms zu steuern? Werden Dateneigenschaften extern gesteuert?
- Älter. Haben Sie Legacy-Komponenten verwendet, um das Programm zu erstellen?
Fast jedes Unternehmen verfügt über ein altes, maßgeschneidertes Programm, das jede:r Mitarbeiter:in jeden Tag nutzt. Möglicherweise haben Sie Bedenken, dieses System zu ersetzen, da es speziell für Sie entwickelt wurde. Aber offensichtlich bringen Altsysteme Risiken mit sich, die schwer zu mindern oder zu beseitigen sind.
Wie können Sie einen Buffer-Overflow-Angriff verhindern?
Hacker:innen machen sich seit Jahren Puffer zunutze, aber es eröffnen sich neue Möglichkeiten für ihre Arbeit. Expert:innen zufolge könnten beispielsweise vernetzte Geräte (einschließlich Internet-of-Things-Elementen wie Kühlschränken und Türklingeln) anfällig für diese Angriffe sein.
Welche Maßnahmen können Sie ergreifen, um einen Buffer-Overflow-Angriff zu verhindern?
Schützen Sie Ihr Unternehmen, indem Sie diese grundlegenden Schritte befolgen:
- Verwenden Sie neue Betriebssysteme. Es ist an der Zeit, Legacy-Programme mit abgelaufenen Support-Systemen auszumustern. Neuerer Code bietet mehr Schutzmaßnahmen.
- Achten Sie auf die Sprache. In Common Business-Oriented Language (COBOL), Python und Java geschriebene Programme sind wahrscheinlich sicherer als andere.
- Leerzeichen hinzufügen. Einige Programme unterstützen den Schutz ausführbarer Speicherbereiche. Wenn dies aktiviert ist, kann ein Hacker keinen Code ausführen, der über einen Overflow-Angriff eingeschleust wurde.
- Verlassen Sie sich auf Entwickler:innen. Systemadministrator:innen beklagen oft, dass Entwickler:innen ihre Fehlerberichte ignorieren. Bleiben Sie hartnäckig. Wenn Sie ein Problem entdecken, das zu einem Buffer Overflow führt, sprechen Sie so lange darüber, bis es jemand behebt.
- Installieren Sie Ihre Patches. Wenn Entwickler:innen Buffer-Overflow-Probleme entdecken, beheben sie diese mit Code. Im Februar 2021 beispielsweise veröffentlichten Sudo-Entwickler:innen einen genau solchen Patch und empfahlen den Nutzer:innen, ihn anzuwenden.
Ihren Code zu überwachen, das Verhalten zu analysieren und häufig zu testen, sind alles gute Ideen. Aber um Ihr Unternehmen zu schützen, müssen Sie noch mehr tun.
Arbeiten Sie mit Okta zusammen, um Ihre wichtigsten Ressourcen mit einem System für starke Authentifizierung zu schützen. Erfahren Sie mehr darüber, wie wir Unternehmen wie Ihres unterstützen können.
Häufig gestellte Fragen
Was ist ein Buffer-Overflow-Angriff?
Ein Buffer-Overflow-Angriff tritt auf, wenn ein Programm mehr Daten empfängt, als sein zugewiesener Speicherpuffer fassen kann. Die überschüssigen Daten gelangen in den angrenzenden Speicher, was vorhandene Daten beschädigen, das Programm zum Absturz bringen oder es Angreifer:innen ermöglichen kann, Schadcode einzuschleusen und auszuführen.
Was ist der Unterschied zwischen einem Stack-basierten und einem Heap-basierten Buffer-Overflow?
Bei einem stackbasierten Angriff sendet der:die Angreifer:in Daten an ein Programm, die in einem unterdimensionierten Stack-Puffer gespeichert werden, und nutzt „push“- oder „pop“-Funktionen, um Schadcode einzuschleusen. Bei einem Heap-basierten Angriff manipulieren Angreifer:innen Daten innerhalb des Heap-Speicherbereichs, wodurch das System gezwungen wird, kritische Daten zu überschreiben.
Welche Programmiersprachen sind am anfälligsten für Buffer-Overflow-Angriffe?
Sprachen wie Assembler, C/C++ und Fortran sind besonders anfällig, da sie über keinen integrierten Überlaufschutz verfügen und keine routinemäßigen Überlaufprüfungen unterstützen. Sprachen wie COBOL, Python und Java gelten allgemein als sicherere Alternativen.
Welche Arten von Programmen sind am anfälligsten für einen Buffer Overflow?
Programme, die komplex und schwer vorhersehbar sind, auf externe Daten oder Daten von Drittanbietern angewiesen sind oder mit Legacy-Komponenten entwickelt wurden, sind am anfälligsten. Ältere, maßgeschneiderte Systeme, die Unternehmen nur ungern ersetzen, stellen eine häufige Risikoquelle dar.
Wie können sich Organisationen vor Buffer-Overflow-Angriffen schützen?
Zu den wichtigsten Abwehrmaßnahmen gehören das Upgrade auf moderne Betriebssysteme, die Verwendung sichererer Programmiersprachen, die Aktivierung von Schutzmaßnahmen für ausführbare Speicherbereiche, das zeitnahe Einspielen von Sicherheits-Patches sowie die Aufrechterhaltung einer offenen Kommunikation zwischen Systemadministrator:innen und Entwickler:innen über identifizierte Schwachstellen.
Sind vernetzte Geräte anfällig für Buffer-Overflow-Angriffe?
Ja. Expert:innen weisen darauf hin, dass vernetzte Geräte, einschließlich Internet-of-Things-Elementen wie Kühlschränken und Türklingeln, anfällig für Buffer-Overflow-Angriffe sein können, was die potenzielle Angriffsfläche über herkömmliche Computer und Server hinaus erweitert.
Referenzen
Buffer-Overflow-Angriff. Umfassende Sicherheit: Ein praxisorientierter Ansatz.
Buffer Overflow. OWASP.
Buffer-Overflow-Angriff. Santa Clara University.
Was ist ein Buffer Overflow? Und wie Hacker:innen diese Schwachstellen ausnutzen. (Januar 2020). CSO.
Kernel Space: Ignorieren Linux-Entwickler:innen Fehlerberichte? (September 2007). Networkworld.
Heap-basierte Pufferüberlauf-Schwachstelle in Sudo. (Februar 2021). Cybersecurity and Infrastructure Security Agency.