Цель этого семинара — вручную найти эксплойты и шелл-коды в обфусцированном JS-коде, представленном в файле PDF. Для эффективной защиты нам необходимо знать, какой уязвимостью пытается воспользоваться злоумышленник, и как вредоносное ПО вызовет домой.

Читатели PDF являются популярными целями, поскольку им необходимо поддерживать большое количество объектов (графика, шрифты, ActionScript и т. д.). Это подразумевает огромную кодовую базу основных функций и сторонних библиотек, что приводит к появлению ошибок программирования, создающих уязвимости.

JavaScript, поддерживаемый каждым читателем, можно использовать для запутывания кода бесконечным числом способов. Наш первый образец — простой, содержащий старые известные уязвимости. Хэш Sample1 — ff42379bcf89646613c334f0d6089578f9f230cc, вы можете загрузить образец из вашего любимого репозитория вредоносных программ.

АНАЛИЗ

Анализ начинается с определения местоположения запутанного кода во внутренних объектах PDF. Мы будем использовать Peepdf в интерактивном режиме -iигнорируя ошибки -f и отлавливая некорректные объекты -l:

peepdf -fil sample1.pdf

Peepdf обнаружил несколько подозрительных объектов, через которые мы пройдемся.

Просмотр подозрительных объектов вручную приводит нас между связанными подозрительными объектами к object 7, содержащим запутанный код.

Как мы можем экспортировать запутанный код в новый файл, используя внутреннюю функцию js_beautifull peepdf.

Мы уже можем деобфусцировать несколько имен функций, так как использовалась только замена символов:

Строка 2: jeroqurul == ‘fromCharCode’

Строка 3: sedu == eval

Самый простой способ — позволить консоли JS сделать для нас замену символов:

Поиск функции eval имеет решающее значение для определения того, какой код будет выполняться. Мы можем показать этот код, просто заменив eval функцией print.

line 16: sedu(x) => print(x)

Мы заменили eval на print и выполнили файл stage0.js в интерпретаторе javascript V8, получив новый код. Новый код сохраняется в файл stage1.js.

Давайте подробнее рассмотрим код, который мы раскрыли, в нем всего 90 строк. Первая интересная функция — util_print() на lines 10–31:

Эта функция содержит шелл-код для загрузки следующего этапа с внешнего адреса, код динамического распыления для заполнения пространства памяти и использования уязвимости переполнения буфера unit.printf() .

Следующая функция включает в себя похожий Shellcode и Heap spray, но разные эксплойты, нацеленные на разные уязвимости.

И снова, на этот раз эксплойт нацелен на уязвимость getIcon.

Последняя функция объясняет, почему существует множество уязвимостей.

Как мы видим, разные эксплойты срабатывают в зависимости от версии Adobe Acrobat Reader.

После успешной эксплуатации создается соединение Shell для загрузки остатка вредоносного кода. Давайте сначала посмотрим, как отделить файл, чтобы проанализировать его с помощью peepdf.

Был выявлен не более запутанный код и весь функционал вредоносного образца. Мы закончили.

Сводка наблюдений

PDF содержит эксплойты, нацеленные на 3 различные известные уязвимости, которые активируются в зависимости от установленной версии Adobe Acrobat Reader в следующем порядке:

КОНЕЦ