Einführung in den Pufferüberlauf

Pufferüberlauf wird auch als Pufferüberlauf bezeichnet. Dies ist ein Zustand des Computers, in dem eine Anwendung versucht, mehr Daten im Pufferspeicher als im Speicher zu speichern. Dies führt dazu, dass Daten in einem angrenzenden Speicher abgelegt werden, wodurch die vorhandenen Daten möglicherweise überschrieben werden und möglicherweise Daten verloren gehen oder das System abstürzt. Es ist ein häufiger Programmierfehler, den die meisten Entwickler unwissentlich begehen. Dies wird am häufigsten von Hackern ausgenutzt, um auf unerwünschte Daten zuzugreifen.

Was ist Pufferspeicher?

Hervorragende Frage. Ein Pufferspeicher oder Puffer ist einfach ein sequentieller Teil des RAM, der zur zeitweiligen Speicherung von Daten vorgesehen ist, während diese von einem Ort zu einem anderen übertragen werden - der Ort ist normalerweise ein Eingabe- oder Ausgabegerät. Dies geschieht, um die unterschiedlichen Geschwindigkeiten der Geräte auszugleichen.

Wenn Sie beispielsweise einige Dokumente zum Drucken bereitstellen, ist Ihr neuester i7-Prozessor schnell genug, um den Druckbefehl in Nanosekunden auszuführen, während der arme alte Drucker nicht mit diesem schnellen Prozessor ausgestattet ist. Die Dokumente werden also im Pufferspeicher abgelegt und mit einer vom Drucker akzeptierten Geschwindigkeit an den Drucker weitergeleitet. Dies gibt den RAM Ihrer CPU für andere Aufgaben frei.

Pufferüberlauf-Angriff

Nachdem nun eine Sicherheitslücke bei den Computern entdeckt wurde, müssen Hacker diese ausnutzen und versuchen, verschiedene Systeme durch Pufferüberlaufangriffe anzugreifen. Nun stellt sich die Frage, wie ein Hacker einen solchen Angriff durchführt und welche Konsequenzen dies hat.

Bei einem Pufferüberlauf-Angriff enthalten die zusätzlichen Daten Anweisungen, die schädliche Aktivitäten auslösen sollen, z. B. die Beschädigung von Dateien, das Ändern von Daten, das Senden privater Informationen über das Internet usw. Ein Angreifer würde einfach jedes Programm ausnutzen, das auf einen bestimmten Benutzer wartet Überschüssige Daten in den Puffer eingeben und einspeisen.

Pufferüberlaufangriffe können in erster Linie in zwei Typen eingeteilt werden

  • Stapelbasiert : Wenn der Angriff auf die stapelbasierte Speicherzuweisung erfolgt. Dies ist einfacher auszunutzen und daher anfälliger für Angriffe.
  • Heap-basiert: Wenn sich der Angriff auf die Heap-basierte Speicherzuweisung bezieht. Dies ist nicht so einfach auszunutzen und daher weitaus seltener.

Die Sprachen, die für Pufferüberlaufangriffe am anfälligsten sind, sind C, C ++, Fortran und Assembly, da sie stapelbasierte Speicherzuweisungstechniken verwenden.

Die Heilung

Sobald Daten beschädigt sind, gibt es einfach keine Möglichkeit, die ursprünglichen Daten wiederherzustellen. Darüber hinaus bestimmt die Intensität des Angriffs maßgeblich die Heilung. Wenn der Angriff dürftig ist und nur einen Teil des Speichers einer isolierten Maschine betrifft, kann ein einfaches Systemformat Abhilfe schaffen. Wenn der Angriff weit verbreitet ist und die Daten über mehrere Computer hinweg kompromittiert hat, hilft das Formatieren des gesamten Netzwerks nur, wenn das Programm, das den schädlichen Code einschleust, behoben ist.

Vorbeugung ist besser als Heilung

Als Entwickler liegt es in unserer Verantwortung, in unserem Code nach Pufferüberläufen zu suchen. Wenn Pufferüberläufe im Code selbst behandelt werden, wird die Sicherheit des Systems nicht durch Pufferüberlaufangriffe beeinträchtigt.

Im Folgenden finden Sie einige einfache Vorsichtsmaßnahmen, mit denen Sie einen Pufferüberlauf verhindern können.

  • Die Ausnahmebehandlung muss genutzt werden, um Pufferüberläufe zu erkennen und die Codeausführung in diesem Fall zu verhindern.
  • Weisen Sie eine ausreichende Größe zum Puffern zu, damit nicht beabsichtigte große Datenmengen ordnungsgemäß verarbeitet werden.
  • Vermeiden Sie die Verwendung von Bibliotheksfunktionen oder Methoden von Drittanbietern, die nicht auf Pufferüberläufe überprüft wurden. Häufige Beispiele für solche zu vermeidenden Funktionen sind gets (), scanf (), strcpy (). Diese sind hauptsächlich in C / C ++ verfügbar.
  • Codetests sollten solche Sicherheitsanfälligkeiten berücksichtigen und den Code rigoros testen und Fehler beheben, die zu einem Überlauf führen können.
  • Moderne Programmiersprachen, Betriebssysteme und Code-Compiler haben sich weiterentwickelt, um die Befehlsausführung im Falle eines Pufferüberlaufs anzuhalten. Dies ist die zuverlässigste Methode zur automatischen Erkennung von Pufferüberläufen.

Versuch es selber…

Sie haben so viel über Pufferüberlauf und Pufferangriffe verstanden, warum sollten Sie nicht versuchen, etwas Bösartiges selbst zu codieren?

Haftungsausschluss - Das folgende Programm dient nur zu Illustrationszwecken und sollte nicht verwendet werden, um Schäden jeglicher Art zu verursachen. Jegliche Ähnlichkeit mit böswilligem Code ist nur zufällig. Darüber hinaus sind die Betriebssysteme heutzutage intelligent genug, um Pufferangriffe zu verhindern.

Unten sehen Sie das C-Programm, das einen möglichen Pufferüberlauf verursachen kann. Warum die Wahl der Sprache C? Dies liegt daran, dass die fortgeschritteneren Programmiersprachen entwickelt wurden, um Pufferüberläufe nur während der Kompilierungszeit zu behandeln. Heutzutage haben die Compiler von C jedoch auch bestimmte Überprüfungen vorgenommen, um einen Pufferüberlauf zu vermeiden. Es wird also nur eine Fehlermeldung angezeigt, die angibt, dass ein Pufferüberlauf festgestellt wurde.

#include
#include
#include
int main(int argc, char *argv())
(
char mybuffer(8);
// copy the user input to mybuffer, without any bound checking
printf("Storing user input to mybuffer…\n");
strcpy(mybuffer, argv(1));
printf("mybuffer content= %s\n", mybuffer);
return 0;
)

Was ist passiert, als 123456789 als Befehlszeilenargument an das Programm übergeben wurde? Das Programm hat einen Fehler generiert, der ausgelöst wird, wenn der Compiler einen Pufferüberlauf feststellt. Die Compiler und Betriebssysteme haben heutzutage eine zusätzliche Schutzschicht. Diese Ebene ist nichts anderes als Variablen, die als Kanaren bezeichnet werden und zum Zeitpunkt der Kompilierung auf bestimmte Werte initialisiert werden. Diese Variablen werden dann in benachbarten Speichereinheiten des Puffers gespeichert. Wenn also der Puffer überläuft, fließen die zusätzlichen Daten in den angrenzenden Speicher und beschädigen den Wert der Kanarischen Inseln. Sobald ein beschädigter Kanarienvogel entdeckt wird, bricht das System die Ausführung ab.

Ein weiteres Beispiel in C ++:

#include
using namespace std;
int main()
(
char buf(8);
cin>>buf;
return 0;
)

Eingabe - 123456789

Ausgabe -

Fazit - Pufferüberlauf

Jetzt sind Sie sich sicher, dass Sie die Bedeutung der Pufferbehandlung in Ihrem Programm verstanden haben. Verwenden Sie diese Übung, um beim Schreiben und Testen des Codes nach Puffergrenzen zu suchen. Auf diese Weise können Sie sicheren Code schreiben.

Empfohlene Artikel

Dies war ein Leitfaden für Was ist ein Pufferüberlauf? Hier haben wir die Definition, Prävention, Erinnerung, Angriff in Pufferüberlauf diskutiert. Sie können auch unsere anderen Artikelvorschläge durchgehen, um mehr zu erfahren -

  1. Was ist JavaScript?
  2. Was ist Django?
  3. Was ist SQL Developer?
  4. Was ist Azure?