JIT-Sprühen - JIT spraying
JIT-Sprühen ist eine Klasse von Computersicherheits-Exploits , die den Schutz der Adressraum-Layout-Randomisierung (ASLR) und der Verhinderung der Datenausführung (DEP) umgehen, indem das Verhalten der Just-in-Time-Kompilierung ausgenutzt wird . Es wurde verwendet, um das PDF- Format und Adobe Flash zu nutzen .
Ein Just-in-Time-Compiler (JIT) erzeugt per Definition Code als Daten. Da der Zweck darin besteht, ausführbare Daten zu erzeugen, ist ein JIT-Compiler eine der wenigen Arten von Programmen, die in einer Umgebung ohne ausführbare Daten nicht ausgeführt werden können. Aus diesem Grund sind JIT-Compiler normalerweise von der Verhinderung der Datenausführung ausgenommen. Ein JIT- Sprühangriff besprüht den generierten Code mit Haufen .
Um Exploit-Code aus JIT zu erstellen, wird eine Idee von Dion Blazakis verwendet. Das Eingabeprogramm, normalerweise JavaScript oder ActionScript , enthält normalerweise zahlreiche konstante Werte, die fälschlicherweise als Code ausgeführt werden können. Zum Beispiel könnte die XOR- Operation verwendet werden:
var a = (0x11223344^0x44332211^0x44332211^ ...);
JIT wandelt dann Bytecode in nativen x86-Code um, wie:
0: b8 44 33 22 11mov $0x11223344,%eax
mov eax,0x11223344
5: 35 11 22 33 44xor $0x44332211,%eax
xor eax,0x44332211
a: 35 11 22 33 44xor $0x44332211,%eax
xor eax,0x44332211
Der Angreifer verwendet dann einen geeigneten Fehler, um die Codeausführung in den neu generierten Code umzuleiten. Beispielsweise könnte ein Pufferüberlauf oder die Verwendung nach einem freien Fehler dem Angriff ermöglichen, einen Funktionszeiger oder eine Rücksprungadresse zu ändern .
Dies führt dazu, dass die CPU Anweisungen auf eine Weise ausführt, die von den JIT-Autoren nicht beabsichtigt war. Der Angreifer ist normalerweise nicht einmal auf die erwarteten Anweisungsgrenzen beschränkt. Es ist möglich, in die Mitte eines beabsichtigten Befehls zu springen, damit die CPU ihn als etwas anderes interpretiert. Wie bei Nicht-JIT- ROP- Angriffen kann dies ausreichen, um die Kontrolle über den Computer zu übernehmen. Wenn Sie das obige Beispiel fortsetzen und zum zweiten Byte des Befehls "mov" springen, erhalten Sie einen Befehl "inc":
1: 44inc %esp
inc esp
2: 33 22xor (%edx),%esp
xor esp,DWORD PTR [edx]
4: 11 35 11 22 33 44adc %esi,0x44332211
adc DWORD PTR ds:0x44332211,esi
a: 35 11 22 33 44xor $0x44332211,%eax
xor eax,0x44332211
Computerhardware, mit der Sie in die Mitte eines Befehls springen können, umfasst x86 , x86-64 und ARM . Obwohl das JIT-Sprühen auf dieser Art von Hardware besonders effektiv ist, funktioniert es auch auf anderen Systemen.
Zum Schutz vor JIT-Sprühen kann der JIT-Code deaktiviert oder für den Angreifer weniger vorhersehbar gemacht werden.
Verweise
Dieser Artikel zur Computersicherheit ist ein Stub . Sie können Wikipedia helfen, indem Sie es erweitern . |