JIT-sprutning
JIT-sprayning är en klass av datorsäkerhetsexploatering som kringgår skyddet av randomisering av adressutrymmeslayout (ASLR) och dataexekveringsförebyggande (DEP) genom att utnyttja beteendet för just-in-time-kompilering . Det har använts för att utnyttja PDF - formatet och Adobe Flash .
En just-in-time kompilator (JIT) producerar per definition kod som dess data. Eftersom syftet är att producera körbar data är en JIT-kompilator en av få typer av program som inte kan köras i en miljö utan körbar data. På grund av detta är JIT-kompilatorer normalt undantagna från att förhindra dataexekvering. En JIT-sprayattack gör heap-sprayning med den genererade koden.
För att producera exploateringskod från JIT används en idé från Dion Blazakis. Inmatningsprogrammet, vanligtvis JavaScript eller ActionScript , innehåller vanligtvis många konstanta värden som felaktigt kan köras som kod. Till exempel XOR -operationen användas:
var a = ( 0x11223344 ^ 0x44332211 ^ 0x44332211 ^ ...);
JIT kommer sedan att omvandla bytekod till inbyggd x86-kod som:
0: b8 44 33 22 11mov xor eax xor 123 a 3 1 2 3 : 3 44 ,
$ 0x11223344 , %eax
mov eax , 0x11223344
5: 35 11 22 33 44 xor$ 0x44332211 % eax
xor $0x44332211 , %eax
xor eax , 0x44332211
Angriparen använder sedan en lämplig bugg för att omdirigera kodexekveringen till den nygenererade koden. Till exempel kan ett buffertspill eller användning efter fri bugg tillåta attacken att ändra en funktionspekare eller returadress.
Detta får CPU:n att exekvera instruktioner på ett sätt som var oavsiktligt av JIT-författarna. Angriparen är vanligtvis inte ens begränsad till de förväntade instruktionsgränserna; det är möjligt att hoppa in i mitten av en avsedd instruktion för att få CPU:n att tolka det som något annat. Precis som med icke-JIT ROP -attacker kan detta vara tillräckligt med operationer för att på ett användbart sätt ta kontroll över datorn. Om du fortsätter med exemplet ovan och hoppar till den andra byten av "mov"-instruktionen resulterar det i en "inc"-instruktion:
1: 44inc %esp
inc esp
2: 33 22xor ( %edx ), %esp
xor esp , DWORD PTR [ edx ]
d43 2 20TR d43 2 2 adc DW 1 4 :
11 35 11 22 33 44adc %esi , 0x4433220TR
2 0TR : 35 11 22 33 44xor $0x44332211 , %eax
xor eax , 0x44332211
Datorhårdvara som gör det möjligt att hoppa in i mitten av en instruktion inkluderar x86 , x86-64 och ARM . Även om det är särskilt effektivt på denna typ av hårdvara, fungerar JIT-sprutning även på andra system.
För att skydda mot JIT-sprayning kan JIT-koden inaktiveras eller göras mindre förutsägbar för angriparen.