ESET обнаружила две 0-day уязвимости в Adobe Reader и Microsoft Windows

    В конце марта 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 доступны по следующим ссылкам:

    APSB18-09
    CVE-2018-8120

    Уязвимостям подвержены следующие продукты:

    • 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
    • +12
    • 5,4k
    • 8
    ESET NOD32 149,94
    Компания
    Поделиться публикацией
    Комментарии 8
    • –1
      Если специалисты ESET нашли вредонос, юзающий уязвимости, то это не они их нашли, а автор вредоноса.
      • 0
        Согласен с вами. Специалисты ESET нашли pdf файл который использует уязвимости. Значит уязвимости нашел автор этого pdf файла )
        • 0
          Нет, это значит, что автор pdf-файла знает об уязвимостях. Но не факт, что он их нашел, а не, например, купил.
      • +1
        а js в pdf для чего-то вменяемого вообще используется? Просто мне ни разу не попадались еще такие экземпляры…
        • 0

          Для печати через пдф. Браузеры не позволяют вызвать печать у пдф плагина из скрипта, это обходят генерацией на сервере специального пдфа с внедрённым внутрь скриптом для вызова диалога печати.

          • 0
            В случаях когда например цену надо ввести ручками очень удобно, когда туже цену прописью пишет js.
          • +1
            Запустил Adobe Reader, зашел в настройки и отключил JavaScript — этого достаточно?
            • 0
              Интересно, а другие PDF-читалки (например Foxit Reader) атакуются / проверяются на уязвимости?

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое