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

Javascript (JS) является распространенным вектором атаки. Кроме того, он может быть сильно запутан, что делает его довольно «интересным» для анализа. Следовательно, в этой статье представлены более подробные сведения об анализе JS.

В общем, есть два подхода:

  • Подход 1 — анализ кода: просмотрите и поймите сценарий. Этот подход требует довольно много времени, но обычно помогает справиться со сложным и/или новым способом обфускации Javascript.
  • Подход 2 — анализ поведения. Сосредоточьтесь только на интересных функциях, которые обычно используются для запутывания Javascript. Этот подход может быть применим не ко всем случаям, однако он эффективен и быстр. Поэтому обычно стоит попробовать этот подход. Подробности этого метода описаны в тексте ниже.

Подход 2 — Анализ поведения был рассмотрен в предыдущей статье. Следовательно, мы вместе рассмотрим подход к анализу кода с некоторыми советами/хитростями, а затем применим их для анализа вредоносного образца.

Подход 1 — анализ кода

На данный момент предполагается, что вы извлекли вредоносный Javascript из PDF-файла (я расскажу об этом шаге в приведенном ниже примере анализа, более подробные сведения можно найти в кратком руководстве по mpeepdf). Ниже приведены несколько советов по анализу кода Javascript:

  • Улучшение кодов.Javascript часто запутывают, чтобы его было трудно читать, с ненужными пробелами, комментариями, беспорядочными отступами и т. д. Таким образом, украшение кодов облегчит получение логики кода. Для этой цели существует несколько инструментов, некоторые из них: (1) js-beautify (2) JSTool и (3) плагины JSTool в Visual Studio (VS) Code и notepad++. Ниже приведен пример сравнения необработанного кода JS с улучшенным кодом с помощью плагина JSTool в VS Code.

  • Удаление комментариев. Разработчики вредоносного ПО пытаются перегрузить аналитиков, добавляя многочисленные комментарии в код JS. Эти комментарии не являются частью кодов; следовательно, их можно безопасно игнорировать/удалять.

  • Замена строки. Создатели вредоносного ПО часто экспериментируют со строкой, чтобы запутать аналитиков. Как видно на рисунке ниже, fjrQoWmQCIhnajrICWondIeQ'.replace(/[QWIjn]/g,'') является запутанным выражением fromCharCode

  • Переименование переменных/функций. Создателям вредоносного ПО нравится крутить вокруг вас сумасшедшие имена переменных/функций, например jcoknrvrjwvktuyoedov. Следовательно, очень полезно переименовывать имена переменных/функций так, чтобы они отражали их функции, например jcoknrvrjwvktuyoedov → new_file.
  • Условие «Всегда верно/ложно»: также часто авторы вредоносных программ обманывают нас, используя условие «всегда истинно» или «всегда ложно». Например, этот блок кода 2e1›10e1?:123:«if» всегда возвращает «if», поскольку 2e1 меньше 10e1.
  • Выполнение кода JS: если есть фрагмент кода JS, который сильно запутан и требует много времени для анализа. Быстрый способ победить обфускацию — выполнить эти коды через интерпретаторы JS. В Примере есть три основных интерпретатора JS, а именно Spider Monkey (который используется Adobe), V8 (от Google) и node.js.
  • Отладка. Я часто использую VS Code для отладки кода JS. Однако я уверен, что есть и другие способы. На рис. 5 показан экран отладки, на котором вы можете отслеживать переменные, стек вызовов, наблюдать за переменными и добавлять точку останова в интересующую вас строку.

Образец анализа

На данный момент у нас должно быть достаточно теории для анализа вредоносного PDF-файла. Проанализируем найденный в VirusTotal образец с SHA256: 8860ee6c2772e66a5024a719f05d23bb597ad24832ff301c050dd37e4914e3

Рассмотрим образец с помощью инструмента mpeepdf. Судя по выходным данным инструмента, оценка вредоносности составляет 7,0/10. Кроме того, желтые линии объясняют, почему этот файл считается вредоносным.

В частности, объект 7 интересен тем, что представляет собой поток, содержащий закодированные коды JS. На рисунке ниже показаны коды JS, которые будут извлечены с помощью команды: stream 7 › obj7.js

Откройте obj7.js в VS Code и украсьте код. Для ясности я вырезал длинный массив десятичных чисел.
P/S: есть 2 ошибки, выделенные VS Code, поэтому я исправил их, что позволит мне запустить весь код или отладить, если это необходимо. .

  • jR=new Date(),var h=false → jR=new Date();var h=false
  • sK=function(){},c=”c”, →sK=function(){},c=”c”

При беглом просмотре кодов заметны вызовы некоторых функций, таких как replace(), substring(), CharCodeAt(). Также все имена переменных и функций запутаны. Следовательно, я продолжаю переименовывать их во что-то более значимое.

На рис. 8 представлены коды JS после обработки. Это довольно простой JS-код, который считывает каждое десятичное число в number_array и декодирует его в символ. Затем decoded_string помещается в функцию eval() для выполнения. На данный момент существует несколько способов получить decoded_string:

  • Перезапись метода: вы можете перезаписать метод eval() только для вывода его аргумента и выхода.
  • Замените eval() на print() в коде (для удобства я использовал этот метод)
  • Выполните отладку и установите точку останова в этой строке, чтобы проверить содержимое decoded_string.

Второй этап выглядит так, как показано ниже, и, по-видимому, является завершающим этапом, так как мы наблюдаем атаку переполнения буфера с использованием util.printf() — CVE-2008–2992, Collab.collectEmailInfo() — CVE-2007–5659. » и app.doc.Collab.getIcon()-CVE-2009–0927 для выполнения шелл-кода.

Хотя анализ шелл-кода не является целью этой статьи, некоторые простые шелл-коды предназначены только для получения следующей полезной нагрузки через URL-адреса. Следовательно, мы можем быстро просмотреть читаемые символы, чтобы получить некоторые IOC. Существует несколько способов преобразования шестнадцатеричного кода в строку в шеллкоде. В этой статье я использую функции mpeepdf, как показано ниже:

Как видно на рис. 11, из шеллкода извлечен URL, который, вероятно, является следующей полезной нагрузкой.