Google раскрыла метод, позволяющий вредоносным сайтам использовать Edge
Команда Google Project Zero опубликовала подробности о методе обхода важного механизма в браузере Edge, защищающего от эксплоитов.
Речь идет о технологии Arbitrary Code Guard (ACG), реализованной в Windows 10 Creators Update для защиты от web-атак, предполагающих загрузку вредоносного кода в память. ACG позволяет отображать в память только код с соответствующей подписью. Тем не менее, JIT-компиляторы в современных браузерах создают проблемы для ACG. JIT-компиляторы трансформируют JavaScript в «родной» код, который может быть не подписан и запускаться в процессе контента. Для того чтобы JIT-компиляторы могли работать при включенной функции ACG, Microsoft выделила JIT-компиляцию в Edge в отдельный процесс, запускаемый в собственной изолированной песочнице.
Процесс JIT отвечает за компиляцию JavaScript в «родной» код и его отображение в запрашиваемый процесс контента, поясняет Microsoft. Таким образом, сам по себе процесс контента не может отображать в память или модифицировать свои собственные страницы JIT-кода. Однако команда Google Project Zero обнаружила уязвимость в том, как исполняемые данные записываются в процесс контента во время JIT-компиляции.
Представленный исследователями метод позволяет скомпрометированному процессу контента спрогнозировать, какой адрес JIT-процесс вызовет VirtualAllocEx() следующим, распределить участок памяти для записи по тому же адресу, который собирается использовать JIT-сервер, и записать туда полезную нагрузку для скорейшего выполнения.
Исследователи уведомили Microsoft о проблеме в середине ноября прошлого года, и по истечении 90 дней, отведенных на ее исправление, опубликовали подробности об атаке. Производитель намеревался исправить уязвимость к февралю, однако она оказалась намного сложнее, чем предполагалось ранее. Предположительный выход патча назначен на март 2018 года.
JIT-компиляция (Just-in-time compilation, компиляция «на лету») или динамическая компиляция - технология увеличения производительности программных систем, использующий байт-код, путем компиляции байт-кода в машинный код или в другой формат непосредственно во время работы программы.