В конце марта 2018 года специалисты ESET обнаружили необычный вредоносный PDF-файл. При ближайшем рассмотрении выяснилось, что в образце используются две ранее неизвестные уязвимости: уязвимость удаленного выполнения кода (RCE) в Adobe Reader и уязвимость повышения привилегий (LPE) в Microsoft Windows.
Комбинация двух 0-day довольно опасна, поскольку открывает атакующим возможность выполнять произвольный код в целевой системе с максимальными привилегиями и минимальным участием пользователя. АРТ-группы нередко используют подобные сочетания инструментов – например, в кампании Sednit в прошлом году.
Обнаружив вредоносный 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
Далее – техническое описание вредоносного образца и уязвимостей.
Введение
Файлы PDF нередко используются для доставки вредоносного ПО на целевой компьютер. Для выполнения вредоносного кода атакующим приходится искать и использовать уязвимости в ПО для просмотра PDF. Одна из наиболее популярных подобных программ – Adobe Reader.
В Adobe Reader внедрена технология изолированного выполнения, более известная как песочница – Protected Mode. Ее детальное описание опубликовано в блоге Adobe (часть 1, часть 2, часть 3, часть 4). Песочница усложняет реализацию атаки: даже если вредоносный код выполнен, злоумышленнику придется обойти защиту песочницы, чтобы скомпрометировать компьютер с запущенным Adobe Reader. Как правило, для обхода песочницы используются уязвимости в самой операционной системе.
Редкий случай, когда злоумышленникам удалось найти уязвимости и написать эксплойты и для Adobe Reader, и для операционной системы.
CVE-2018-4990 – RCE-уязвимость в Adobe Reader
Во вредоносный PDF встроен JavaScript-код, управляющий процессом эксплуатации. Код выполняется после открытия PDF-файла.
В начале процесса эксплуатации JavaScript-код манипулирует объектом Button1
. Объект содержит специально созданное изображение JPEG2000, которое запускает двойную уязвимость.
Рисунок 1. JavaScript, манипулирующий объектом Button.
JavaScript использует технику heap-spraying, чтобы нарушить внутренние структуры данных. После этих манипуляций атакующие достигают главной цели – доступ к памяти с правами на чтение и запись.
Рисунок 2. JavaScript-код, используемый для чтения и записи памяти.
Используя два примитива, атакующие находит адрес памяти плагина EScript.api
, являющийся движком Adobe JavaScript. Используя ROP гаджеты из этого модуля, вредоносный JavaScript устанавливает ROP цепочку, которая приведет к выполнению нативного шеллкода.
Рисунок 3. Вредоносный JavaScript, устанавливающий ROP цепочку.
В качестве последнего шага, шеллкод инициализирует PE файл, встроенный в PDF, и передает ему выполнение.
CVE-2018-8120 – повышение привилегий в Microsoft Windows
После эксплуатации уязвимости Adobe Reader злоумышленнику необходимо избавиться от песочницы. Это и есть задача второго эксплойта.
В основе этой ранее неизвестной уязвимости – функция NtUserSetImeInfoEx
компонента ядра Windows win32k
. В частности, SetImeInfoEx
, подпрограмма NtUserSetImeInfoEx
, не проверяет указатель данных, позволяя разыменовать нулевой (NULL) указатель.
Рисунок 4. Дизассемблированная функция SetImeInfoEx.
Как видно на рисунке 4, функция SetImeInfoEx
ожидает указатель на инициализированный объект WINDOWSTATION в качестве первого аргумента. SpklList
может быть равен нулю, если атакующий создает новый объект WS и присваивает его текущему процессу в пользовательском режиме. Таким образом, маппинг нулевой страницы и установка указателя на смещение (offset) 0x2C позволяет злоумышленникам использовать уязвимость для записи на произвольный адрес в пространстве ядра. Стоит отметить, что, начиная с Windows 8, пользовательский процесс не может преобразовать данные нулевой страницы.
Поскольку у атакующих есть произвольный пишущий примитив, они могут использовать различные техники. Но в нашем случае злоумышленники выбирают технику, описанную Ivanlef0u, а также Mateusz «j00ru» Jurczyk и Gynvael Coldwin. Они устанавливают шлюз вызова в Ring 0, перезаписав глобальную таблицу дескрипторов (GDT). Для этого злоумышленники получают адрес исходной GDT, используя инструкции по сборке SGDT, создают собственную таблицу и затем перезаписывают оригинал с использованием упомянутой уязвимости.
Затем эксплойт использует команду CALL FAR
для вызова уровня привилегий.
Рисунок 5. Дизассемблированная команда CALL FAR.
Когда код выполняется в режиме ядра, эксплойт заменяет токен текущего процесса системным токеном.
Выводы
Специалисты ESET обнаружили вредоносный PDF, когда тот был загружен в публичный репозиторий вредоносных образцов. Семпл не содержит финальной полезной нагрузки, что может указывать на то, что он был обнаружен на ранних этапах разработки. Несмотря на это, авторы продемонстрировали высокую квалификацию в области поиска уязвимостей и написания эксплойтов.
Индикаторы компрометации (IoC)
Детектирование продуктами ESET:
JS/Exploit.Pdfka.QNV trojan
Win32/Exploit.CVE-2018-8120.A trojan
SHA-1:
C82CFEAD292EECA601D3CF82C8C5340CB579D1C6
0D3F335CCCA4575593054446F5F219EBA6CD93FE
Автор: esetnod32