Неизвестные хакеры случайно оповестили специалистов о существовании двух уязвимостей нулевого дня в продуктах Adobe и Microsoft (Adobe Reader и Microsoft Windows), загрузив вредоносный файл PDF в публичный сканер малвари. На уязвимости обратили внимание эксперты компании ESET, которые и сообщили производителям о происходящем.
Необычный PDF-файл (образцы 1 и 2), загруженный в публичный сервис для сканирования вредоносных программ, привлек внимание специалистов в конце марта 2018. Изучив образец, эксперты установили, что в нем используются сразу две 0-day бреши: уязвимость удаленного выполнения кода в Adobe Reader и уязвимость повышения привилегий в Microsoft Windows.
Сочетание двух этих уязвимостей позволяло злоумышленникам выполнять произвольный код на компьютере жертвы с максимальными привилегиями и минимальным необходимым участием пользователя.
В своем отчете специалисты отмечают, что файлы PDF нередко используют для распространения вредоносного ПО. Чтобы выполнить вредоносный код на компьютере жертвы, атакующие ищут и используют уязвимости в программах для просмотра PDF, в частности, в Adobe Reader. При этом в Adobe Reader внедрена песочница Protected Mode, которая изрядно усложняет задачу злоумышленников. В итоге, чтобы обойти защиту, атакующие стараются обнаружить и использовать уязвимости в самой операционной системе.
В данном случае злоумышленники нашли уязвимости и написали эксплоиты как для Adobe Reader, так и для операционной системы. Аналитики отмечают, что это сравнительно редкий случай, иллюстрирующий высокую квалификацию авторов. Подобные сочетания инструментов чаще используют АРТ-группы, например, в кампании Sednit в прошлом году.
Чтобы «двойная уязвимость» сработала, пользователю было достаточно открыть вредоносный PDF-файл на компьютере с уязвимой версией Adobe Reader и Windows.
В основе ранее неизвестной уязвимости в Windows лежит функция NtUserSetImeInfoEx компонента ядра Windows win32k. В частности, SetImeInfoEx, подпрограмма NtUserSetImeInfoEx, не проверяет указатель данных, позволяя разыменовать нулевой (NULL) указатель.
Как видно на иллюстрации, функция SetImeInfoEx ожидает указатель на инициализированный объект WINDOWSTATION в качестве первого аргумента. SpklList может быть равен нулю, если атакующий создает новый объект WS и присваивает его текущему процессу в пользовательском режиме. Таким образом, маппинг нулевой страницы и установка указателя на смещение (offset) 0x2C позволяет злоумышленникам использовать уязвимость для записи на произвольный адрес в пространстве ядра. Стоит отметить, что, начиная с Windows 8, пользовательский процесс не может преобразовать данные нулевой страницы.
Поскольку у атакующих есть произвольный пишущий примитив, они могут использовать различные техники. Но в данном случае злоумышленники выбрали технику, описанную Ivanlef0u, а также Mateusz «j00ru» Jurczyk и Gynvael Coldwin. Они устанавливают шлюз вызова в Ring 0, перезаписав глобальную таблицу дескрипторов (GDT). Для этого злоумышленники получают адрес исходной GDT, используя инструкции по сборке SGDT, создают собственную таблицу и затем перезаписывают оригинал с использованием упомянутой уязвимости.
Затем эксплойт использует команду CALL FAR для вызова уровня привилегий.
Когда код выполняется в режиме ядра, эксплойт заменяет токен текущего процесса системным токеном.
Что касается бага в Adobe Reader, во вредоносный PDF-файл был встроен JavaScript-код, управляющий процессом эксплуатации. Код выполнялся после открытия файла.
В начале процесса эксплуатации JavaScript-код манипулирует объектом Button1. Объект содержит специально созданное изображение JPEG2000, которое запускает двойную уязвимость.
JavaScript использует технику heap-spraying, чтобы нарушить внутренние структуры данных. После этих манипуляций атакующие достигают главной цели – доступ к памяти с правами на чтение и запись.
Используя два примитива, атакующие находит адрес памяти плагина EScript.api, являющийся движком Adobe JavaScript. Используя ROP гаджеты из этого модуля, вредоносный JavaScript устанавливает ROP цепочку, которая приведет к выполнению нативного шеллкода.
В качестве последнего шага, шеллкод инициализирует PE файл, встроенный в PDF, и передает ему выполнение.
Стоит сказать, что образец PDF, обнаруженный специалистами ESET, не содержал финальной полезной нагрузки. Вероятно, экспертам удалось обнаружить образец на ранних этапах разработки и принять меры, связавшись с Microsoft Security Response Center, командами Windows Defender ATP и Adobe Product Security Incident Response Team для закрытия уязвимостей.
Патчи и рекомендации Adobe и Microsoft доступны по следующим ссылкам:
Уязвимостям подвержены следующие продукты:
- Acrobat DC (2018.011.20038 и более ранние версии);
- Acrobat Reader DC (2018.011.20038 и более ранние версии);
- Acrobat 2017 (011.30079 и более ранние версии);
- Acrobat Reader DC 2017 (2017.011.30079 и более ранние версии);
- Acrobat DC (Classic 2015) (2015.006.30417 и более ранние версии);
- Acrobat Reader DC (Classic 2015) (2015.006.30417 и более ранние версии);
- Windows 7 for 32-bit Systems Service Pack 1;
- Windows 7 for x64-based Systems Service Pack 1;
- Windows Server 2008 for 32-bit Systems Service Pack 2;
- Windows Server 2008 for Itanium-Based Systems Service Pack 2;
- Windows Server 2008 for x64-based Systems Service Pack 2;
- Windows Server 2008 R2 for Itanium-Based Systems Service Pack 1;
- Windows Server 2008 R2 for x64-based Systems Service Pack 1.