it-swarm.com.de

Bedeutet eine Sicherheitsanfälligkeit bezüglich Pufferüberlauf immer eine Sicherheitsanfälligkeit bezüglich Codeausführung?

Da Pufferüberläufe immer einen bösen Hacker außerhalb des Puffers schreiben lassen und den Rückgabezeiger auf einen Shellcode überschreiben, den der böse Hacker platzieren kann, bedeutet dies, dass eine erfolgreiche Ausnutzung eines Stapelpufferüberlaufs immer die Möglichkeit bedeutet, eine Shell aufzurufen, wenn dies richtig gemacht wird ? Zumindest theoretisch, wenn Sie davon ausgehen, dass DEP und ASLR nicht vorhanden sind.

45
Sree

Nein, ein Pufferüberlauf kann:

  • Seien Sie gegen einen Puffer auf dem Haufen, nicht gegen den Stapel. Dies kann immer noch zur Codeausführung führen, ist jedoch viel komplizierter auszunutzen.
  • Die Größe ist begrenzt, sodass Rückgabezeiger nicht überschrieben werden können. (z. B. nur 1 Byte über den Puffer hinaus schreiben können)
  • Beschränken Sie sich darauf, in welche Bytes geschrieben werden kann, und verhindern Sie, dass geeignete Zeiger geschrieben werden.
  • Überschreiben Sie Stack-Cookies, die erkannt werden, bevor die Absenderadresse verwendet wird. Wenn das Cookie nicht durchgesickert ist, würde der Exploit den Prozess die meiste Zeit zum Absturz bringen, anstatt zur Codeausführung zu führen.
  • Seien Sie auf einem Stapel, der nach oben wächst, und können Sie daher keine Rücksprungadressen überschreiben. Ein Exploit kann möglicherweise noch andere lokale Variablen überschreiben, oder der Puffer wird möglicherweise an eine andere Funktion übergeben, führt jedoch nicht so zuverlässig zur Codeausführung wie Abwärtsstapel.

Einige davon führen möglicherweise noch zur Codeausführung, andere Instanzen können jedoch möglicherweise nicht ausgenutzt werden.

Sobald Sie jedoch herausgefunden haben, wo ein Pufferüberlauf auftritt, ist es normalerweise viel einfacher, ihn zu beheben, als zu beweisen, dass er nicht ausgenutzt werden kann.

70
Douglas Leeder

Douglas gibt eine richtige Antwort. Nicht alle Pufferüberläufe führen zur Codeausführung. Ich hatte jedoch das Gefühl, dass eine sehr wichtige Warnung fehlte.

Selbst wenn ein Pufferüberlauf keine willkürliche Codeausführung zulässt, bedeutet dies nicht, dass er sicher ist.

Mit einem Schreibpufferüberlauf können Sie in Daten schreiben, die Sie nicht sollten. Diese Daten als Funktionsadresse sind nur ein Sonderfall. Angenommen, ich habe eine Benutzerstruktur mit Feldern für Name und Berechtigung. Es ist leicht vorstellbar, wie das Setzen meines Namens auf "JosiahhasaverylongnameAdmin" eine schwerwiegende Sicherheitsanfälligkeit ohne willkürliche Codeausführung ausnutzen könnte.

Wenn Sie sich an ein anderes Beispiel aus der realen Welt erinnern, ist dies ein Pufferüberlauf. Es ist eher ein Leseüberlauf als ein Schreibüberlauf. Keine Chance auf eine Code-Ausführung, aber dennoch eine verheerende Verletzung der Vertraulichkeit.

46
Josiah

Die einfache Antwort lautet: Nein, nicht alle Pufferüberläufe führen garantiert zur Codeausführung. Der Überlauf kann zu klein sein, um benötigte Zeiger/Werte zu überschreiben, der überlaufende Teil kann nicht gesteuert werden, um Dinge zu überschreiben, oder möglicherweise zu groß, um Stapel-Cookies/Kanarienvögel usw. zu töten.

0
akshayknows