oprysk JIT
Rozpylanie JIT to klasa exploitów bezpieczeństwa komputerowego , która omija ochronę randomizacji układu przestrzeni adresowej (ASLR) i zapobieganie wykonywaniu danych (DEP), wykorzystując zachowanie kompilacji just-in-time . Został wykorzystany do wykorzystania PDF i Adobe Flash .
Kompilator just-in-time (JIT) z definicji tworzy kod jako swoje dane. Ponieważ celem jest tworzenie danych wykonywalnych, kompilator JIT jest jednym z niewielu typów programów, których nie można uruchomić w środowisku bez danych wykonywalnych. Z tego powodu kompilatory JIT są zwykle wyłączone z zapobiegania wykonywaniu danych. Atak natryskowy JIT powoduje rozpylanie sterty z wygenerowanym kodem.
Do stworzenia kodu exploita z JIT wykorzystywany jest pomysł Diona Blazakisa. Program wejściowy, zazwyczaj JavaScript lub ActionScript , zwykle zawiera wiele stałych wartości, które mogą zostać błędnie wykonane jako kod. Na przykład można użyć operacji XOR :
var a = ( 0x11223344 ^ 0x44332211 ^ 0x44332211 ^ ...);
Następnie JIT przekształci kod bajtowy w natywny kod x86, taki jak:
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
Następnie atakujący wykorzystuje odpowiedni błąd, aby przekierować wykonanie kodu do nowo wygenerowanego kodu. Na przykład przepełnienie bufora lub użycie po zwolnieniu błędu może umożliwić atakowi zmodyfikowanie wskaźnika funkcji lub adresu zwrotnego.
Powoduje to, że procesor wykonuje instrukcje w sposób niezamierzony przez autorów JIT. Atakujący zwykle nie jest nawet ograniczony do oczekiwanych granic instrukcji; możliwe jest wskoczenie w środek zamierzonej instrukcji, aby procesor zinterpretował ją jako coś innego. Podobnie jak w przypadku ataków innych niż JIT ROP , może to wystarczyć do skutecznego przejęcia kontroli nad komputerem. Kontynuując powyższy przykład, skok do drugiego bajtu instrukcji „mov” skutkuje instrukcją „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
Sprzęt komputerowy, który umożliwia przeskakiwanie do środka instrukcji, obejmuje x86 , x86-64 i ARM . Chociaż jest to szczególnie skuteczne w przypadku tego typu sprzętu, natryskiwanie JIT działa również na innych systemach.
Aby zabezpieczyć się przed rozpylaniem JIT, kod JIT można wyłączyć lub uczynić mniej przewidywalnym dla atakującego.