JIT-распыление
JIT-распыление — это класс эксплойтов компьютерной безопасности , который обходит защиту рандомизации структуры адресного пространства и предотвращение выполнения данных , используя поведение своевременной компиляции . [1] Он использовался для использования PDF. формата [2] и Adobe Flash . [3]
JIT- компилятор по определению создает код в качестве данных. Поскольку целью является создание исполняемых данных, JIT-компилятор является одним из немногих типов программ, которые нельзя запускать в среде без исполняемых данных. По этой причине JIT-компиляторы обычно освобождаются от предотвращения выполнения данных. Атака JIT Spray распыляет сгенерированный код.
Создать код эксплойта из JIT, идея от Диона Блазакиса. [4] используется. Программа ввода, обычно JavaScript или ActionScript , обычно содержит множество константных значений, которые могут быть ошибочно выполнены как код. Например, XOR : можно использовать операцию [5]
var a = (0x11223344^0x44332211^0x44332211^ ...);
Затем JIT преобразует байт-код в собственный код x86, например:
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
Затем злоумышленник использует подходящую ошибку, чтобы перенаправить выполнение кода в вновь сгенерированный код. Например, переполнение буфера или использование ошибки после освобождения может позволить атаке изменить указатель функции или адрес возврата.
Это заставляет ЦП выполнять инструкции способом, не предусмотренным авторами JIT. Злоумышленник обычно даже не ограничен ожидаемыми границами инструкций; можно перейти в середину заданной инструкции, чтобы ЦП интерпретировал ее как что-то другое. Как и в случае с атаками без JIT ROP , этой операции может быть достаточно, чтобы с пользой получить контроль над компьютером. Продолжая приведенный выше пример, переход ко второму байту инструкции «mov» приводит к созданию инструкции «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
x86 и x86-64 позволяют переходить в середину инструкции, но не архитектуры фиксированной длины, такие как ARM .
Чтобы защититься от JIT-распыления, JIT-код можно отключить или сделать менее предсказуемым для злоумышленника. [4]
Ссылки
[ редактировать ]- ^ Юрген Шмидт (20 января 2011 г.). «Возвращение опрыскивателя — распыление JIT: способы победить DEP и ASLR» . Х. Проверено 22 января 2011 г.
- ^ Хайфэй Ли (10 февраля 2010 г.). «JIT-распыление в PDF» . Блог Фортинет. Архивировано из оригинала 18 апреля 2010 года . Проверено 22 января 2011 г.
- ^ Ларри Зельцер (4 февраля 2010 г.). «Новый спрей JIT проникает в лучшую защиту Windows» . PCMag . Проверено 22 января 2011 г.
- ^ Jump up to: а б Дион Блазакис. «Эксплуатация интерпретатора. Вывод указателя и JIT-распыление» (PDF) . Черная шляпа и Defcon 2010 .; «Слайды» (PDF) .
- ^ Алексей Синцов (5 марта 2010 г.). «Написание шелл-кода JIT-Spray для удовольствия и прибыли» . Безопасность пакетного шторма . Проверено 30 января 2012 г.