NOP Folie - NOP slide

In der Computersicherheit ist eine NOP-Folie , ein NOP-Schlitten oder eine NOP-Rampe eine Folge von NOP -Befehlen (No-Operation), mit denen der Befehlsausführungsfluss der CPU an sein endgültiges gewünschtes Ziel "geschoben" werden soll, wenn das Programm irgendwo auf eine Speicheradresse verzweigt die Rutsche.

Die Technik wird häufig in Software- Exploits verwendet , bei denen die Programmausführung gesteuert wird, wenn ein Verzweigungsbefehlsziel nicht genau bekannt ist. Andere bemerkenswerte Anwendungen umfassen defensive Programmierstrategien wie EMV-fähige Programmierung .

Während eine NOP-Folie funktioniert, wenn sie aus einer Liste kanonischer NOP-Anweisungen besteht, ist das Vorhandensein eines solchen Codes verdächtig und leicht automatisch zu erkennen. Aus diesem Grund bestehen praktische NOP-Folien häufig aus nicht-kanonischen NOP-Anweisungen (z. B. Verschieben eines Registers in sich selbst oder Hinzufügen von Null) oder aus Anweisungen, die den Programmstatus nur unwesentlich beeinflussen, was ihre Identifizierung erheblich erschwert.

Ein NOP-Schlitten ist die älteste und bekannteste Technik zum Ausnutzen von Stapelpufferüberläufen . Es löst das Problem, die genaue Adresse des Puffers zu finden, indem die Größe des Zielbereichs effektiv erhöht wird. Zu diesem Zweck werden viel größere Abschnitte des Stapels mit der No-Op- Maschinenanweisung beschädigt . Am Ende der vom Angreifer bereitgestellten Daten platziert der Angreifer nach den No-Op-Anweisungen eine Anweisung, um einen relativen Sprung an die Spitze des Puffers durchzuführen, in dem sich der Shellcode befindet. Diese Sammlung von No-Ops wird als "NOP-Schlitten" bezeichnet, da die Ausführung, wenn die Rücksprungadresse mit einer Adresse innerhalb des No-Op-Bereichs des Puffers überschrieben wird, die No-Ops "herunterrutscht", bis dies der Fall ist durch den Sprung am Ende zum eigentlichen Schadcode umgeleitet. Bei dieser Technik muss der Angreifer erraten, wo sich der NOP-Schlitten auf dem Stapel befindet, anstatt des vergleichsweise kleinen Shellcodes.

Aufgrund der Popularität dieser Technik werden viele Anbieter von Intrusion Prevention-Systemen nach diesem Muster von No-Op-Maschinenanweisungen suchen, um den verwendeten Shellcode zu erkennen. Es ist wichtig zu beachten, dass ein NOP-Schlitten nicht unbedingt nur herkömmliche No-Op-Maschinenanweisungen enthält. Anstelle des hardwareunterstützten No-Op kann jeder Befehl verwendet werden, der den Maschinenzustand nicht bis zu einem Punkt beschädigt, an dem der Shellcode nicht mehr ausgeführt wird. Infolgedessen ist es für Exploit-Autoren üblich geworden, den No-Op-Schlitten mit zufällig ausgewählten Anweisungen zusammenzustellen, die keinen wirklichen Einfluss auf die Ausführung des Shellcodes haben.

Diese Methode verbessert zwar die Erfolgsaussichten eines Angriffs erheblich, ist jedoch nicht unproblematisch. Exploits, die diese Technik verwenden, müssen immer noch auf ein gewisses Maß an Glück angewiesen sein, dass sie Offsets auf dem Stapel erraten, die sich innerhalb der NOP-Schlittenregion befinden. Eine falsche Vermutung führt normalerweise zum Absturz des Zielprogramms und kann den Systemadministrator auf die Aktivitäten des Angreifers aufmerksam machen. Ein weiteres Problem besteht darin, dass der NOP-Schlitten viel mehr Speicher benötigt, um einen NOP-Schlitten groß genug zu halten, um von Nutzen zu sein. Dies kann ein Problem sein, wenn die zugewiesene Größe des betroffenen Puffers zu klein ist und die aktuelle Tiefe des Stapels gering ist (dh vom Ende des aktuellen Stapelrahmens bis zum Beginn des Stapels nicht viel Platz vorhanden ist). Trotz seiner Probleme ist der NOP-Schlitten oft die einzige Methode, die für eine bestimmte Plattform, Umgebung oder Situation funktioniert, und als solche ist er immer noch eine wichtige Technik.

Die Entropie eines NOP-Objektträgers hängt von den Einschränkungen ab, die ihm auferlegt werden. Wenn festgestellt werden kann, dass bestimmte Register nicht verwendet werden (dh sie werden vor ihrer nächsten Verwendung auf einen bekannten Wert gesetzt), können Anweisungen, die sie willkürlich manipulieren, in der NOP-Folie verwendet werden. Wenn die Ausrichtung sowohl der NOP-Folie als auch des Befehlszeigers deterministisch ist, können Mehrbyte-Befehle in einer NOP-Folie ohne Berücksichtigung der Ergebnisse einer nicht ausgerichteten Ausführung verwendet werden. Wenn die Eingabe, die den Angriffsvektor bereitstellt, in den die NOP-Folie und die Nutzlast eingeführt werden sollen, gefiltert wird (z. B. nur druckbare Zeichen akzeptieren), ist das Feld möglicher Anweisungen für die Aufnahme begrenzt. Während Anweisungen, die Teil einer Architekturerweiterung sind (z. B. SSE ), häufig für den Programmstatus irrelevant sind, können sie nicht in einer NOP-Folie verwendet werden, die auf einen Computer abzielt, auf dem die Erweiterung nicht unterstützt wird.

Erkennung

Es gibt viele Techniken, um das Vorhandensein von NOP-Folien im Speicher zu erkennen. Beispielsweise stellten griechische Forscher im Jahr 2005 fest, dass sie leicht erkannt werden können, indem geprüft wird, ob ein Speicherbild eine lange Folge von Bytes enthält, sodass jeder Startversatz innerhalb der Folge gültig ist und die Ausführung an dieselbe Stelle führt.

Siehe auch

Verweise

Externe Links