Ein Pufferüberlauf tritt auf, wenn ein Programm, das Daten in einen Puffer schreibt, dabei die Kapazität dieses Puffers überschreitet. Es ist, als würde man einen halben Liter Milch in ein Glas für 0,4 Liter gießen.
Nach Lektüre dieses Artikels können Sie Folgendes:
Ähnliche Inhalte
Sicherheit von Webanwendungen?
Data Scraping
Cross-Site-Request-Forgery
Brute-Force-Angriff
Warum HTTPS verwenden?
Abonnieren Sie theNET, Cloudflares monatliche Zusammenfassung der beliebtesten Einblicke in das Internet!
Link zum Artikel kopieren
Pufferüberläufe sind eine Anomalie, die auftritt, wenn Software, die Daten in einen Puffer schreibt und dabei die Kapazität des Puffers überschreitet. Das führt dazu, dass benachbarte Speicherstellen überschrieben werden. Mit anderen Worten: Zu viele Informationen werden an einen Container übergeben, der nicht über ausreichend Speicherplatz verfügt, und diese Informationen nehmen letztendlich den Platz von Daten in benachbarten Containern ein.
Pufferüberläufe können von Angreifern ausgenutzt werden, um den Speicher eines Computers zu modifizieren und die Programmausführung zu untergraben oder die Kontrolle zu übernehmen.
Ein Puffer oder Datenpuffer ist ein Bereich des physischen Speichers, in dem Daten vorübergehend gespeichert werden, während sie von einem Ort an einen anderen verschoben werden. Diese Puffer befinden sich normalerweise im RAM-Speicher. Computer verwenden häufig Puffer, um die Performance zu verbessern. Die meisten modernen Festplatten nutzen die Pufferung, um effizient auf Daten zuzugreifen Viele Online-Dienste verwenden ebenfalls Puffer. Beispielsweise werden beim Online-Video-Streaming häufig Puffer eingesetzt, um Unterbrechungen zu verhindern. Wenn ein Video gestreamt wird, lädt der Videoplayer jeweils ungefähr 20 % des Videos herunter und speichert es in einem Puffer. Anschließend wird es aus diesem Puffer gestreamt. Auf diese Weise wirken sich geringfügige Schwankungen der Verbindungsgeschwindigkeit oder kurze Unterbrechungen des Dienstes nicht auf die Performance des Videostreams aus.
Puffer enthalten definierte Datenmengen. Sofern das Programm, das den Puffer verwendet, keine integrierten Anweisungen zum Verwerfen von Daten enthält, überschreibt es Daten im Speicher neben dem Puffer, wenn zu viel an den Puffer gesendet wird.
Pufferüberläufe können von Angreifern ausgenutzt werden, um Software zu beschädigen. Trotz des guten Verständnisses sind Pufferüberlaufangriffe immer noch ein großes Sicherheitsproblem, das Cyber-Sicherheitsteams zusetzt. Im Jahr 2014 waren Hunderte Millionen Benutzer wegen einer Sicherheitslücke der SSL-Software einer als „Heartbleed“ bekannten Bedrohung durch Angriffe mit Pufferüberlauf ausgesetzt.
Angreifer können absichtlich eine sorgfältig gestaltete Eingabe in ein Programm einspeisen, durch die das Programm versucht, diese Eingabe in einem Puffer zu speichern, der nicht groß genug ist, und dann Teile des mit dem Pufferbereich verbundenen Speichers überschreibt. Wenn das Speicherlayout des Programms genau definiert ist, können die Angreifer absichtlich Bereiche überschreiben, von denen bekannt ist, dass sie ausführbaren Code enthalten. Die Angreifer können diesen Code dann durch ihren eigenen ausführbaren Code ersetzen, was die Funktionsweise des Programms erheblich verändern kann.
Wenn der überschriebene Teil im Speicher beispielsweise einen Pointer enthält (ein Objekt, das auf eine andere Stelle im Speicher verweist), kann der Code der Angreifer diesen Code durch einen anderen Pointer ersetzen, der auf eine Exploit-Nutzlast verweist. Das kann die Kontrolle über das gesamte Programm auf den Code des Angreifers übertragen.
Einige Programmiersprachen sind anfälliger für Pufferüberläufe als andere. C und C++ sind zwei beliebte, aber angreifbare Sprachen, da sie keinen integrierten Schutz gegen den Zugriff auf oder das Überschreiben von Daten in ihrem Speicher enthalten. Windows, Mac OSX und Linux enthalten Code, der in einer oder beiden Sprachen geschrieben ist.
Moderne Sprachen wie Java, PERL und C# verfügen über integrierte Features, die das Risiko eines Pufferüberlaufs verringern, aber nicht vollständig beseitigen können.
Glücklicherweise verfügen moderne Betriebssysteme über Laufzeitschutz, der hilft, Pufferüberlaufangriffe abzuschwächen. Lassen Sie uns zwei gängige Schutzmaßnahmen untersuchen, die dazu beitragen, das Risiko des Missbrauchs zu verringern:
Softwareentwickler können auch Vorsichtsmaßnahmen gegen Sicherheitsschwachstellen durch Pufferüberlauf ergreifen, indem sie in Sprachen mit integriertem Schutz schreiben oder in ihrem Code spezielle Sicherheitsverfahren einsetzen.
Trotz aller Vorsichtsmaßnahmen entdecken Entwickler immer neue Sicherheitslücken durch Pufferüberlauf, manchmal erst nachdem sie erfolgreich ausgenutzt wurden. Wenn neue Sicherheitslücken entdeckt werden, müssen die Ingenieure die betroffene Software patchen und sicherstellen, dass Benutzer der Software Zugriff auf den Patch erhalten.
Es gibt eine Reihe verschiedener Pufferüberlaufangriffe, die unterschiedliche Strategien anwenden und auf unterschiedliche Codeteile abzielen. Es folgen einige der bekanntesten.
*Computer basieren auf zwei verschiedenen Modellen der Speicherzuweisung, dem Stack und dem Heap. Beide befinden sich im RAM des Computers. Der Stack ist übersichtlich organisiert und enthält Daten nach dem Last-in-First-out-Prinzip. Unabhängig davon, welche Daten zuletzt im Stack abgelegt wurden, werden sie als erste ausgegeben, ähnlich wie die zuletzt in ein Munitionsmagazin eingelegte Kugel als erste abgefeuert wird. Der Heap ist ein unorganisierter Pool mit zusätzlichem Speicher. Daten werden in keiner bestimmten Reihenfolge in den Heap ein- oder aus diesem ausgegeben. Da der Zugriff auf den Speicher eines Stacks viel schneller ist als der Zugriff auf einen Heap, ist der Heap im Allgemeinen für größere Datenmengen oder Daten reserviert, die ein Programmierer explizit verwalten möchte.