Распыление JIT - это класс уязвимостей компьютерной безопасности, который обходит защиту рандомизации адресного пространства (ASLR) и предотвращения выполнения данных (DEP), используя поведение своевременной компиляции . [1] Он использовался для использования формата PDF [2] и Adobe Flash . [3]
Точно в момент компилятор (JIT) , по определению , производит код в качестве своих данных. Поскольку целью является создание исполняемых данных, JIT-компилятор является одним из немногих типов программ, которые не могут быть запущены в среде без исполняемых данных. Из-за этого JIT-компиляторы обычно не защищены от выполнения данных. JIT-распылительная атака выполняет распыление кучи сгенерированным кодом.
Для создания кода эксплойта из JIT используется идея Диона Блазакиса [4] . Программа ввода, обычно JavaScript или ActionScript , обычно содержит множество постоянных значений, которые могут быть ошибочно выполнены в виде кода. Например, можно использовать операцию XOR : [5]
var a = ( 0x11223344 ^ 0x44332211 ^ 0x44332211 ^ ...);
Затем JIT преобразует байт-код в собственный код x86, например:
0: b8 44 33 22 11 5:35 11 22 33 44 a: 35 11 22 33 44mov $0x11223344,%eax
mov eax,0x11223344
xor $0x44332211,%eax
xor eax,0x44332211
xor $0x44332211,%eax
xor eax,0x44332211
Затем злоумышленник использует подходящую ошибку, чтобы перенаправить выполнение кода во вновь созданный код. Например, переполнение буфера или ошибка использования после освобождения может позволить атаке изменить указатель функции или адрес возврата.
Это заставляет ЦП выполнять инструкции непредусмотренным авторами JIT способом. Атакующий обычно даже не ограничивается ожидаемыми границами инструкций; можно перейти к середине предполагаемой инструкции, чтобы ЦП интерпретировал ее как что-то еще. Как и в случае с атаками без JIT ROP , этой операции может быть достаточно, чтобы с пользой взять под контроль компьютер. Продолжая приведенный выше пример, переход ко второму байту инструкции "mov" приводит к инструкции "inc":
1:44 2:33 22 4:11 35 11 22 33 44 а: 35 11 22 33 44inc %esp
inc esp
xor (%edx),%esp
xor esp,DWORD PTR [edx]
adc %esi,0x44332211
adc DWORD PTR ds:0x44332211,esi
xor $0x44332211,%eax
xor eax,0x44332211
Компьютерное оборудование, позволяющее перейти к середине инструкции, включает x86 , x86-64 и ARM . Хотя JIT-распыление особенно эффективно для этого типа оборудования, оно также работает и на других системах.
Для защиты от JIT-распыления код JIT можно отключить или сделать менее предсказуемым для злоумышленника. [4]
Рекомендации
- ↑ Юрген Шмидт (20 января 2011 г.). «Возвращение опрыскивателя - JIT Spraying: Exploits to beat DEP and ASLR» . Н . Проверено 22 января 2011 года .
- ^ Хайфэй Ли (10 февраля 2010 г.). «JIT-распыление в PDF» . Блог Fortinet. Архивировано из оригинального 18 апреля 2010 года . Проверено 22 января 2011 года .
- ^ Ларри Зельцер (4 февраля 2010 г.). «Новый« JIT Spray »проникает в лучшие средства защиты Windows» . PCmag.com . Проверено 22 января 2011 года .
- ^ а б Дион Блазакис. «Использование интерпретатора. Вывод указателя и JIT-распыление» (PDF) . Black Hat & Defcon 2010.; «Слайды» (PDF) .
- ^ Написание JIT-Spray Shellcode для удовольствия и прибыли , Алексей Синцов,