Now Reading
Welches sind Pufferüberlauf-Angriffe und wie werden sie vereitelt?

Welches sind Pufferüberlauf-Angriffe und wie werden sie vereitelt?

Was sind Pufferüberlauf-Angriffe und wie werden sie vereitelt?

[ad_1]

Seither dem Morris-Wurm sind Pufferüberläufe in dieser Welt dieser Schwachstellen berüchtigt

Jener Morris-Wurm von 1988 war eine dieser branchenerschütternden Erfahrungen, die offenbarte, wie schnell sich ein Wurm durch eine Schwachstelle, die wie Pufferüberlauf oder Pufferüberlauf prestigeträchtig ist, verteilen kann. Rund 6.000 dieser 60.000 Computer, die mit ARPANET, einem Vorläufer des Internets, verbunden sind, waren mit dem Morris-Wurm infiziert. Obwohl dieser Offensive wenige positive Auswirkungen hatte, insbesondere durch die Aufforderung an die Softwarehersteller, Schwachstellen trocken zu nehmen, und durch die Schaffung des ersten Computer Emergency Response Teams (CERT), war dieser Offensive zusammen mit weitem nicht dieser letzte, dieser aus einem Pufferüberlauf Kapital verhauen konnte.

Im Jahr 2001 befiel dieser Schlüssel Red-Wurm mehr wie 359.000 Computer, hinaus denen die IIS-Software von Microsoft umgesetzt wurde. Schlüssel Red hat Webseiten verunstaltet und versucht, Denial-of-Tafelgeschirr-Angriffe zu starten, darunter verdongeln hinaus verdongeln Webserver des Weißen Hauses.

Dann, im Jahr 2003, griff dieser SQL-Slammer-Wurm mehr wie 250.000 Systeme an, hinaus denen die SQL Server-Software von Microsoft umgesetzt wurde. SQL Slammer stürzte Router ab, welches den Netzwerkverkehr im World Wide Web erheblich verlangsamte oder sogar stoppte. Sowohl die Schlüssel Red- wie genauso die SQL Slammer-Würmer verteilen sich übrig Pufferüberlauf-Schwachstellen.

Mehr wie dreißig Jahre nachdem dem Morris-Wurm werden wir immer noch von Pufferüberlauf-Schwachstellen mit all ihren negativen Hören geplagt. Obwohl wenige verschiedene Programmiersprachen oder Funktionen von ihnen zu Händen ein unsicheres Plan zuständig zeugen, scheint dieser Schuldige ungefähr dieser fehlbare Gebrauch dieser Sprachen zu sein. Um zu verstehen, wie es zu Pufferüberläufen kommt, sollen wir kleine Menge übrig den Speicher, insbesondere den Stack, wissen und darüber, wie Softwareentwickler beim Schreiben von Schlüssel den Speicher sorgfältig verwalten sollen.

Welches ist ein Puffer und wie kommt es zu einem Pufferüberlauf?

Ein Puffer ist ein Speicherblock, dieser einem Softwareprogramm vom Operating system zugewiesen wird. Es liegt in dieser Verantwortung eines Programms, vom Operating system die Menge an Speicher anzufordern, die es zu Händen eine korrekte Ausgabe gewünscht. In einigen Programmiersprachen wie Java, Kohlenstoff#, Pythonschlange, Go und Rust erfolgt die Speicherverwaltung maschinell. In anderen Sprachen wie Kohlenstoff und Kohlenstoff++ sollen Programmierer die Zuweisung und Freigabe von Speicher manuell verwalten und sicherstellen, dass Speichergrenzen nicht überschritten werden, während sie die Pufferlängen begutachten.

Demgegenüber ob von Programmierern, die Codebibliotheken falsch verwenden, oder von denen, die sie schreiben, können Fehler gemacht werden. Ebendiese sind die Ursache zu Händen viele Software-Schwachstellen, die entdeckt und ausgenutzt werden können. Ein richtig entworfenes Sendung sollte die maximale Speichergröße zu Händen die Datenspeicherung angeben und sicherstellen, dass solche Größe nicht überschritten wird. Ein Pufferüberlauf tritt hinaus, wenn ein Sendung Statistik übrig den ihm zugewiesenen Speicher hinaus in verdongeln daneben angeordneten Speicherblock schreibt, dieser zu Händen eine andere Verwendung charakteristisch ist oder einem anderen Prozess gehört.

Da es zwei Haupttypen von Pufferüberläufen gibt – heap-basiert und stack-basiert – ist ein einleitendes Wort zum Unterschied zwischen Heap und Stack opportun.

Jener Stapel vs. dieser Menge

Im Vorfeld ein Sendung umgesetzt wird, weist ihm dieser Loader verdongeln virtuellen Adressraum zu, dieser Adressen sowohl zu Händen den Heap wie genauso zu Händen den Stack enthält. Jener Heap ist ein Speicherblock, dieser zu Händen globale Variablen und Variablen verwendet wird, denen zur Spieldauer Speicher zugewiesen wird (energiegeladen zugewiesen).

Verwandt wie ein Stapel Teller an einem Buffet besteht ein Software-Stack aus Frames, die die lokalen Variablen einer aufgerufenen Routine enthalten. Frames werden beim Hereinrufen von Funktionen hinaus den Stack geschoben (hinaus den Stack gelegt) und zusammen mit dieser Rückkehr aus dem Stack fern (fern). Wenn mehrere Threads vorhanden sind, gibt es mehrere Stapel.

Ein Stack ist im Vergleich zu einem Heap sehr schnell, allerdings die Verwendung des Stack hat zwei Nachteile. Erstens ist dieser Stapelspeicher restriktiv, welches bedeutet, dass dasjenige Stellen großer Datenstrukturen hinaus dem Stapel die verfügbaren Adressen schneller erschöpft. Zweitens hat jeder Frame eine Nutzungsdauer, die hinaus seine Existenz hinaus dem Stack unverbesserlich ist, welches bedeutet, dass es nicht zulässig ist, hinaus Statistik von einem Frame zuzugreifen, dieser aus dem Stack herausgenommen wurde. Wenn mehrere Funktionen Zugriff hinaus dieselben Statistik erfordern, ist es besser, die Statistik hinaus dem Heap zu stellen und verdongeln Zeigestock hinaus solche Statistik (seine Note) an solche Funktionen zu Emesis.

Pufferüberläufe können sowohl im Heap wie genauso im Stack sich zeigen, wir subsumieren uns hier jedoch hinaus die häufigere Variante: stapelbasierte Pufferüberläufe.

Stapelbasierte Pufferüberläufe: Betiteln dieser Rücksendeadresse

Da Frames zusammen mit jedem Funktionsaufruf übereinander gestapelt werden, werden genauso Rückkehradressen hinaus den Stack gelegt, die dem Sendung mitteilen, wo die Ausgabe fortgesetzt werden soll, wenn eine aufgerufene Routine verschlossen ist:

Die Rückkehradresse befindet sich in dieser Nähe dieser Puffer, die die lokalen Variablen enthalten. Wenn es demnach einem bösartigen Sendung gelingt, mehr Statistik in verdongeln Puffer zu schreiben, wie es ingestieren kann, kommt es zu einem Pufferüberlauf. Statistik, die nicht in den vorgesehenen Puffer passen, können in die Rücksprungadresse überschwappen und solche betiteln.

Tritt zusammen mit dieser typischen Verwendung eines anfälligen Programms ein Pufferüberlauf hinaus, ist dieser neue Zahl dieser überschriebenen Rücksprungadresse meistens kein gültiger Speicherort, welches bedeutet, dass dasjenige Sendung verdongeln Speichersegmentierungsfehler generiert und eine Fehlerbehebung erforderlich ist – für den Fall dies dieser Kernpunkt ist nicht möglich ist, kann dasjenige Sendung nicht fest werden oder sogar abstürzen, wenn es versucht, von dieser Routine zurückzukehren, deren Stack-Frame durch den Überlauf verändert wurde. Cyberkriminelle können jedoch Pufferüberläufe nutzen, um die Absenderadresse mit einem gültigen Speicherort zu betiteln, dieser gerade heraus hinaus ihren Schadcode verweist, wodurch sie in vielen Fällen Shells starten und die vollständige Leistungsnachweis übrig die Computer dieser Todesopfer übernehmen können. Jener Stuxnet-Wurm zum Muster nutzte eine Pufferüberlauf-Schwachstelle, um eine Root-Shell zu starten.

Wenige Exploit-Codes verwenden sogar verdongeln cleveren Verfahrensweise, um den Schaden am Stack zu reparieren, nachdem eine böswillige Maßnahme umgesetzt wurde, um die ursprüngliche Rücksendeadresse wiederherzustellen. Hinaus solche Weise versuchen die Angreifer, die Menschenraub dieser Return-Befehl zu verschleiern und dasjenige Sendung folglich wie erwartet laufen zu lassen.

Muster – Kodierung von Hexadezimalzeichen wie Bytewerte

Pro Softwareentwickler, die an einem kürzlich entdeckten Pufferüberlauf im Jahr 2021 schaulustig sind, eröffnen wir den folgenden Schlüssel in Kohlenstoff an, zusammen mit dem es sich um eine vereinfachte und neu geschriebene Version einer Schwachstelle im ZTE MF971R LTE-Router handelt, die wie CVE-2021-21748 verfolgt wird:

Dies obige Sendung demonstriert eine Routine, die eine Zeichenfolge existent aus hexadezimalkompatiblen Zeichen in ein Formular mit dieser Hälfte des Speicherbedarfs kodiert. Zwei Zeichen können wie tatsächliche Bytewerte (in hexadezimal) stillstehen, so dass die Zeichen ‘0‘ und ‘1‘, dargestellt durch die Byte-Werte 30 und 31, bzw. kann Wort für Wort wie Byte-Zahl dargestellt werden 01. Ebendiese Funktionsvielfalt wurde im Rahmen dieser Umgang von Passwörtern durch den ZTE-Router verwendet.

Wie in den Kommentaren des Codes erwähnt, ist die hexString, mit einer Größe von 21 Zeichen, ist zu weit zu Händen die byteWerte Puffer, dieser nur eine Größe von 4 Zeichen hat (obwohl er solange bis zu 8 Zeichen in codierter Form ingestieren kann) und es wird nicht überprüft, ob dieser encodeHexAsByteValues Routine führt nicht zu einem Pufferüberlauf.

Schutzmechanismus vor Pufferüberlauf-Angriffen

Außer von sorgfältiger Programmierung und Tests von dieser Softwareentwickler nach sich ziehen moderne Compiler und Betriebssysteme mehrere Mechanismen implementiert, um die Implementierung von Pufferüberlaufangriffen zu verschlimmern. Am Muster des Kooperationsrat der Arabischen Staaten des Golfes-Compiler-Treibers zu Händen Linux wollen wir von kurzer Dauer zwei Mechanismen erwähnen, die er verwendet, um die Nutzbarmachung von Pufferüberläufen zu verhindern: Stack-Randomisierung und Stack-Korruptions-Erkennung.

Stapel-Randomisierung

Ein Teil des Erfolgs von Pufferüberlauf-Angriffen hängt davon ab, verdongeln gültigen Speicherort zu Kontakt haben, dieser hinaus den Exploit-Schlüssel verweist. In dieser Vergangenheit waren die Stack-Speicherorte ziemlich gemeinschaftlich, da dieselben Kombinationen von Programmen und Betriebssystemversionen dieselben Stack-Adressen hatten. Dies bedeutete, dass Angreifer verdongeln Offensive – verwandt wie ein Stamm eines biologischen Virus – orchestrieren konnten, um dieselbe Sendung-Operating system-Zusammensetzung anzugreifen.

Die Stack-Randomisierung weist zu Beginn dieser Programmausführung eine zufällige Menge an Speicherplatz hinaus dem Stack zu. Dieser Speicherplatz ist nicht dazu gedacht, vom Sendung verwendet zu werden, sondern soll dem Sendung erlauben, zusammen mit jeder Ausgabe unterschiedliche Stapeladressen zu nach sich ziehen.

Ein hartnäckiger Angreifer kann jedoch die Stack-Randomisierung den Rest geben, während er wiederholt verschiedene Adressen versucht. Eine Technologie besteht darin, eine heftige Menstruationsblutung Sequenz von zu verwenden NOP (keine Operation) Anweisungen, die lediglich den Programmzähler steigern, zu Beginn des Exploit-Codes. Dann muss dieser Angreifer nur noch die Note einer dieser vielen erraten NOP Anweisungen, anstatt die genaue Note des Beginns des Exploit-Codes erraten zu sollen. Dies wird wie „NOP Schlitten“, denn wenn dasjenige Sendung zu einem davon springt NOP Anweisungen, es gleitet durch den Rest dieser NOPs solange bis zum eigentlichen Start des Exploit-Codes. Jener Morris-Wurm zum Muster begann mit 400 NOP Anweisungen.

Es existiert eine ganze Stil von Techniken, die wie Adreßraum-Layout-Randomisierung bezeichnet werden, um sicherzustellen, dass andere Teile eines Programms, wie Programmcode, Bibliothekscode, globale Variablen und Heap-Statistik, jeweils, wenn dasjenige Sendung umgesetzt wird, unterschiedliche Speicheradressen nach sich ziehen.

Erkennung von Stapelbeschädigungen

Eine andere Methode zum Verhindern eines Pufferüberlaufangriffs besteht darin, zu wiedererkennen, wenn dieser Stapel lückenhaft wurde. Ein üblicher Umstand ist wie Stack Protector prestigeträchtig, dieser verdongeln zufälligen Canary-Zahl, genauso Guard-Zahl genannt, zwischen die lokalen Puffer eines Stack-Frames und den Rest des Stack einfügt. Vor dieser Rückkehr von einer Routine kann dasjenige Sendung dann den Zustand des Canary-Werts begutachten und eine Fehlerroutine hereinrufen, wenn ein Pufferüberlauf den Canary-Zahl geändert hat.

Abschließende Mentoring

Da weiterhin Pufferüberlauf-Schwachstellen entdeckt und behoben werden, empfiehlt es sich, eine solide Richtlinie zum Patchen aller Anwendungen und Codebibliotheken mit höchster Priorität einzuführen. Die Kopplung Ihrer Aktualisierungsrichtlinie mit dieser Verfügbarmachung von Sicherheitslösungen, die Exploit-Schlüssel wiedererkennen können, kann Angreifern, die versuchen, Pufferüberläufe auszunutzen, verdongeln erheblichen Vorteil verschaffen.

[ad_2]
View Comments (0)

Leave a Reply

Your email address will not be published.

Scroll To Top