JIT-распыление
Что такое JIT-распыление?
JIT-распылениеЭксплуатационная техника, использующая JIT-компиляторы для размещения выбранных атакующим исполняемых байтов внутри легально сгенерированных исполняемых страниц памяти.
JIT-распыление — техника эксплуатации повреждений памяти против сред выполнения с JIT-компиляцией: движков JavaScript (V8, SpiderMonkey, JSC), .NET CLR, JVM, ActionScript или eBPF. Атакующий пишет высокоуровневый код так, чтобы его JIT-вывод при чтении как сырых байтов декодировался в нужные нативные инструкции, в результате полезная нагрузка оказывается внутри RWX-страниц JIT'а. В сочетании с уязвимостью, перехватывающей поток управления, атакующий переходит к распылённым гаджетам, обходя защиту от выполнения данных, поскольку память легально помечена исполняемой. Современные меры включают constant blinding, случайные регионы кода, W^X-разделение, ASLR и CFI.
● Примеры
- 01
Распыление множества JavaScript-умножений, чьи константы кодируют shellcode.
- 02
Использование ActionScript JIT для размещения NOP sled и shellcode в JIT-области Flash Player.
● Частые вопросы
Что такое JIT-распыление?
Эксплуатационная техника, использующая JIT-компиляторы для размещения выбранных атакующим исполняемых байтов внутри легально сгенерированных исполняемых страниц памяти. Относится к категории Безопасность приложений в кибербезопасности.
Что означает JIT-распыление?
Эксплуатационная техника, использующая JIT-компиляторы для размещения выбранных атакующим исполняемых байтов внутри легально сгенерированных исполняемых страниц памяти.
Как работает JIT-распыление?
JIT-распыление — техника эксплуатации повреждений памяти против сред выполнения с JIT-компиляцией: движков JavaScript (V8, SpiderMonkey, JSC), .NET CLR, JVM, ActionScript или eBPF. Атакующий пишет высокоуровневый код так, чтобы его JIT-вывод при чтении как сырых байтов декодировался в нужные нативные инструкции, в результате полезная нагрузка оказывается внутри RWX-страниц JIT'а. В сочетании с уязвимостью, перехватывающей поток управления, атакующий переходит к распылённым гаджетам, обходя защиту от выполнения данных, поскольку память легально помечена исполняемой. Современные меры включают constant blinding, случайные регионы кода, W^X-разделение, ASLR и CFI.
Как защититься от JIT-распыление?
Защита от JIT-распыление обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия JIT-распыление?
Распространённые альтернативные названия: JIT Spray.
● Связанные термины
- appsec№ 1182
Уязвимость путаницы типов
Ошибка безопасности памяти, при которой код обращается к объекту через тип, несовместимый с реальной аллокацией, часто давая произвольное чтение, запись или выполнение.
- appsec№ 129
Песочница браузера
Слой изоляции уровня ОС, ограничивающий рендерер и вспомогательные процессы браузера, чтобы скомпрометированный веб-код не мог читать файловую систему или другие приложения.
- vulnerabilities№ 1193
Использование после освобождения
Ошибка безопасности памяти, при которой программа продолжает использовать память после её освобождения, часто позволяя атакующему управлять состоянием объектов и перехватывать выполнение.
- attacks№ 471
Heap Spraying
Эксплойт-примитив, заполняющий кучу множеством копий полезной нагрузки, чтобы повреждённый указатель с высокой вероятностью попал на данные атакующего.
- appsec№ 1075
Сайд-канал спекулятивного исполнения
Класс микроархитектурных уязвимостей: процессор утекает данные через кеши и предсказатели после спекулятивного исполнения инструкций по путям, которые не должны были выполняться.
- vulnerabilities№ 399
Эксплойт
Код, данные или метод, использующий уязвимость для вызова непредусмотренного поведения — выполнения кода, повышения привилегий или раскрытия информации.