Return-to-libc-Angriff - Return-to-libc attack

Ein "Return-to-libc"-Angriff ist ein Angriff auf die Computersicherheit , der normalerweise mit einem Pufferüberlauf beginnt, bei dem eine Subroutinen- Rückkehradresse auf einer Aufrufliste durch eine Adresse einer Subroutine ersetzt wird, die bereits im ausführbaren Speicher des Prozesses vorhanden ist , und die No-Execute-Bit- Funktion (falls vorhanden) und befreien den Angreifer von der Notwendigkeit , seinen eigenen Code einzuschleusen . Das erste Beispiel für diesen Angriff in freier Wildbahn wurde 1997 von Alexander Peslyak auf die Bugtraq- Mailingliste gestellt.

Auf POSIX- kompatiblen Betriebssystemen wird üblicherweise die C-Standardbibliothek (" libc") verwendet, um eine Standard- Laufzeitumgebung für Programme bereitzustellen , die in der Programmiersprache C geschrieben sind . Obwohl der Angreifer den Code überall zurückgeben könnte, libcist er das wahrscheinlichste Ziel, da er fast immer mit dem Programm verbunden ist und nützliche Aufrufe für einen Angreifer bereitstellt (wie die systemFunktion zum Ausführen von Shell-Befehlen).

Schutz vor Return-to-libc-Angriffen

Ein nicht ausführbarer Stack kann eine gewisse Ausnutzung des Pufferüberlaufs verhindern, jedoch kann er einen Return-to-Libc-Angriff nicht verhindern, da bei dem Return-to-libc-Angriff nur vorhandener ausführbarer Code verwendet wird. Andererseits können diese Angriffe nur bereits vorhandene Funktionen aufrufen. Der Stack-Smashing-Schutz kann eine Ausnutzung verhindern oder behindern, da er die Beschädigung des Stapels erkennen und möglicherweise das kompromittierte Segment ausspülen kann.

" ASCII-Panzerung " ist eine Technik, die verwendet werden kann, um diese Art von Angriff zu verhindern. Beim ASCII-Armoring enthalten alle Adressen von Systembibliotheken (zB libc) ein NULL-Byte ( 0x00). Dies geschieht normalerweise, indem sie in den ersten 0x01010101Bytes des Speichers platziert werden (einige Seiten mehr als 16 MB, die als "ASCII-Armor-Region" bezeichnet werden), da jede Adresse bis zu diesem Wert (aber nicht einschließlich) mindestens ein NULL-Byte enthält. Dies macht es unmöglich, Code, der diese Adressen enthält, mithilfe von String-Manipulationsfunktionen wie strcpy(). Diese Technik funktioniert jedoch nicht, wenn der Angreifer eine Möglichkeit hat, NULL-Bytes in den Stack zu überlaufen. Wenn das Programm zu groß ist, um in die ersten 16 MB zu passen  , ist der Schutz möglicherweise unvollständig. Diese Technik ähnelt einem anderen Angriff, der als Return-to-plt bekannt ist , bei dem der Angreifer, anstatt zur libc zurückzukehren, die Funktionen der Procedure Linkage Table (PLT) verwendet, die in den positionsunabhängigen Code geladen sind (zB system@plt, execve@plt, sprintf@plt, strcpy@plt).

Die Adressraum- Layout-Randomisierung (ASLR) macht diesen Angriffstyp auf 64-Bit-Rechnern äußerst unwahrscheinlich, da die Speicherorte der Funktionen zufällig sind. Für 32-Bit-Systeme bietet ASLR jedoch wenig Vorteile, da nur 16 Bit für die Randomisierung zur Verfügung stehen und diese innerhalb von Minuten durch Brute-Force besiegt werden können .

Siehe auch

Verweise

Externe Links