Hacker können die Kontrolle über ein System übernehmen, indem sie die Speicherkapazität eines Dienstes ausschöpfen. Wie führen Hacker solche Pufferüberlaufangriffe durch?
Wie greifen Hacker Systeme mit Viren und Malware an? Manchmal kann es sich um Ransomware handeln; Manchmal kann es sich um einen Angriff handeln, der Ihre Systemanforderungen verbraucht. Pufferüberlauf ist eine dieser Angriffsmethoden – aber was ist das eigentlich? Wie funktionieren diese Angriffe?
Was ist ein Pufferüberlauf?
Was sind eigentlich ein Puffer und ein Stapel? Der Puffer ist ein Feld, in dem einige Eingabeinformationen, die Sie Ihrem Computer geben, warten, bevor sie den Speicher erreichen. Das Abrufen von Daten aus dem Speicher ist ein systemermüdender Vorgang. Wenn also im Pufferbereich genügend Platz vorhanden ist, rufen Sie die Daten direkt von hier ab. Dies bedeutet eine Leistungssteigerung für Ihr Gerät. Wenn der für den Puffer verfügbare Speicherplatz voll ist, muss dieser natürlich in den Speicher geschrieben werden.
Stack ist im Wesentlichen eine Datenstruktur, in der Daten-Push- (Hinzufügen) und Pop- (Entfernen) Vorgänge stattfinden. Die Konzepte von Puffer und Stapel sind ziemlich ähnlich; Der Puffer funktioniert jedoch wie ein Stapel, der eingehende Daten vorübergehend speichert.
Pufferüberläufe können ein herausforderndes Thema sein, aber wie der Name schon sagt, treten sie auf, wenn eine Datenüberlastung vorliegt. Sie möchten sich beispielsweise bei einem System anmelden. Die Entwickler können dem Benutzernamen 250 Byte Speicherplatz zuweisen. Wenn Sie 300 Byte Daten eingeben, läuft der Puffer über. Dieser Überlauf kann sich auf andere Daten im Speicher auswirken und Schäden verursachen.
Das ist großartig für Hacker. Cyberkriminelle können dieses Durcheinander mit verschiedenen Angriffsvektoren kombinieren, um beispielsweise das System zu hacken und sich als Administrator anzumelden.
Um den Pufferüberlauf zu verstehen, müssen Sie die wichtigsten Themen kennen Interne Architektur der CPU, Speicherregister und wie der Speicher Daten verarbeitet. Hier sind einige Begriffe zur CPU, die Sie kennen müssen.
Versammlungsordnung |
Eine Low-Level-Programmiersprache, d. h. nahe an der Maschinensprache. |
Puffer |
Eine feste Größe zugewiesener Speicherplatz. |
Bytecode |
Eine kompilierbare Codeform in einer Zwischensprache, die in einer Hochsprache geschrieben ist. |
Compiler |
Ein Programm, das Programmiersprache in Maschinencode umwandelt. |
Haufen |
Dynamischer, variabler Speicherplatz. |
Die Grundlagen der Gedächtnistheorie
Ohne Verständnis der Speichertheorie kann es in der Praxis schwierig sein, Pufferüberlaufprobleme zu lösen. Man kann es sich so vorstellen, als würde man versuchen, ein Haus zu bauen, ohne zu wissen, wie man eine Mauer baut.
Stellen Sie sich vor, Sie möchten aus der Sicht eines Hackers einen Pufferüberlauf ausführen. Dazu müssen Sie den Speicher manipulieren und die CPU Ihren Code ausführen lassen. Wenn Sie jemand mit böswilliger Absicht wären, wäre Ihr Ziel hier, den Speicher zu überlasten und auch zusammenhängende Speicherbereiche zu manipulieren.
Zunächst müssen Sie sich jedoch auf die Konzepte Heap, Stack und Textsegment konzentrieren.
Während der Stapel erstellt wird, verwendet der Speicher hohe Speicheradressen. Hohe Speicheradressen bedeuten den erweiterten Speicherbereich. Dann beginnen die Adresswerte zu sinken. Der Speicherstapel verwendet während der Speichernutzung eine Methode namens LIFO (Last In, First Out). Variablen im Stapelspeicher sind nur innerhalb des Bereichs gültig, in dem sie definiert sind. Wenn sie außerhalb dieses Bereichs liegen, tritt ein Fehler auf.
Der Stapelspeicher hingegen arbeitet dynamisch und muss nicht bei hohen Adressen beginnen. Es gibt kein festgelegtes Limit für den Heap-Speicher; Alle Grenzen werden vom Betriebssystem festgelegt. Es ist möglich, den Heap-Speicher dynamisch zu ändern, und diese Grenzwerte können sich entsprechend den Anforderungen des Benutzers während der Heap-Nutzung ändern. Die Grenzen des Heap-Speichers hängen von Faktoren ab, die vom Betriebssystem und der Hardware bestimmt werden. Mit anderen Worten: Es bietet eine dynamische Nutzung innerhalb dieser Grenzen.
Das Textsegment enthält den Programmcode und die Datensegmente enthalten globale Daten. Hoher Adressenanteil Stapel- und Heapspeicher unter sich. Das System reserviert zur Laufzeit beide Speicher.
Um den Pufferüberlauf besser zu verstehen, sollten Sie die allgemeinen Datenregister untersuchen, die Ihre Computerarchitektur zum Speichern von Daten verwendet. Anstatt jeden Datensatz einzeln zu analysieren, konzentrieren Sie sich auf das Wesentliche.
- ESP (Extended Stack Pointer): Dieses Register enthält die Adresse oben im Stapel.
- EBP (Extended Base Pointer): Dies enthält den Basiszeiger.
- EIP (Extended Instruction Pointer): Und dieses Register enthält die Adresse des nächsten auszuführenden Befehls.
Diese Fachbegriffe mögen etwas verwirrend klingen, aber stellen Sie sich alle als kleine Partitionen im Speicher vor.
Wie funktionieren Pufferüberlaufangriffe?
Wenn Sie einem Stapel neue Daten hinzufügen, werden diese Daten oben eingefügt. Alle neuen Daten werden dann nach unten verschoben. ESP steht ganz oben auf der Liste. In diesem Fall geht das ESP also zu einer niedrigeren Speicheradresse. Stellen Sie sich vor, dass die oben hinzugefügten Daten das ESP nach unten drücken.
Wenn ein Programm ausgeführt wird, erstellt das System einen Stapelrahmen mit lokalen Variablen. Der Hauptzweck eines Pufferüberlaufangriffs besteht darin, Zugriff auf die EIP- oder Absenderadresse zu erhalten. Ein Hacker mit Zugriff auf diese Adresse kann ihr befehlen, auf beliebigen Schadcode zu verweisen, der sich dann auf das gesamte System auswirkt.
Mit jedem neuen Datenbit wächst der Stapel in Richtung EBP. Die eigentliche Frage hier ist: Können wir den EBP in Richtung EIP verschieben, wenn wir zu viele Daten eingeben? Auf diese Weise befinden sich die gewünschten Daten oder Codes auf dem EIP und Sie können die gewünschten Ergebnisse sehen. Es bleibt nur noch, es auszuführen. Wenn Sie das Programm ausführen, verweist es auf Ihren EIP-Code und startet die Ausführung. Wenn Sie also ein Hacker wären, hätten Sie Ihren ersten Pufferüberlaufangriff ausgeführt.
Um das Beispiel aus einem anderen Blickwinkel zu betrachten, können Sie Flüssigkeiten unterschiedlicher Dichte, ESP, EBP und EIP genannt, in einem Behälter betrachten. Stellen Sie sich vor, dass sich das ESP oben im Behälter befindet, weil seine Dichte geringer ist. Genau wie Olivenöl und Wasser sollten sie sich nicht vermischen. Der Schadcode ist also eine weitere Flüssigkeit – wenn man ihn in den Behälter gibt, bringt er dieses Gleichgewicht durcheinander, verdrängt etwas Flüssigkeit und vermischt sich mit dem EIP. Dies weist auf einen Pufferüberlauf hin.
So schützen Sie sich vor Pufferüberlaufangriffen
Wie verhindern Sie also, dass das passiert?
Erstens ist es wichtig, während des gesamten Softwareentwicklungsprozesses gute Codierungspraktiken anzuwenden, um Sicherheitslücken zu minimieren. Sorgfältig geschriebener Code kann die Wahrscheinlichkeit von Pufferüberläufen verringern.
Ein weiterer Schritt besteht darin, Abwehrmechanismen zu nutzen, um Speicherbereiche zu überwachen, die Grenzen von Puffern zu überprüfen und Angriffe zu erkennen. Schließlich müssen Sie Systeme regelmäßig aktualisieren und Patches anwenden. Updates, die Schwachstellen beheben, erschweren es Angreifern, bekannte Schwachstellen auszunutzen. Darüber hinaus bietet der Einsatz von Verteidigungstools wie Software und Firewall eine zusätzliche Sicherheitsebene.
Ergreifen Sie Maßnahmen gegen Pufferüberläufe
Pufferüberlaufangriffe stellen eine erhebliche Bedrohung für Ihre Cybersicherheit dar und daher ist es natürlich wichtig, Vorkehrungen dagegen zu treffen. Glücklicherweise ist es möglich, diese Angriffe zu blockieren und die Abwehrmechanismen zu stärken. Viele gute Sicherheitspraktiken, wie z. B. die Aktualisierung der Software zur Behebung von Patches, tragen zum Schutz vor solchen Angriffen und anderen Schwachstellen bei.