Цель этого семинара — вручную найти эксплойты и шелл-коды в обфусцированном 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 в следующем порядке:
- если версия == 8.0 или 8.1 ‹ версия ‹ 8.1.3, запустить CVE-2008–2992 Adobe util.printf() Buffer Overflow.
URL в шеллкоде: hXXp://itkornoval[.]in/x/exe.php?src=marcos&id=&x=pdf1 - если версия ‹ 8 или версия ‹ 8.1.2, запустите CVE-2007–5659 Adobe Collab.collectEmailInfo() Buffer Overflow.
URL в шеллкоде: hXXp://itkornoval[.]in/x/exe. php?src=marcos&id=&x=pdf2 - если версия ‹ 9 или версия ‹ 9.1; запустите CVE-2009–0927 Adobe Collab.getIcon() Buffer Overflow.
URL в шеллкоде: hXXp://itkornoval[.]in/x/exe.php?src=marcos&id=&x=pdf3
КОНЕЦ