Приветствую — меня зовут Лиам, и я зарабатываю на жизнь защитой данных. По моему опыту, лучший способ защитить систему — это знать ее изнутри и снаружи.

Я думаю о зрелости реакции на вредоносное ПО следующим образом:

уровень 1 == Сетевая блокировка машины и переустановка образа

Уровень 2 == Возьмите образец вредоносного ПО и запустите его в песочнице.

Уровень 3 == Анализ и дизассемблирование вредоносного ПО на ассемблере

Уровень 4 == Используйте отладчик в сочетании с дизассемблированным двоичным файлом, чтобы точно понять, что делает образец.

В настоящее время я бы поставил себе 2,5, то есть я все еще учусь. Чтобы продолжать учиться, я регулярно пытаюсь копировать образцы вредоносного ПО из общедоступных песочниц и выясняю все, что могу. Сегодняшняя выборка взята с any.run, но вы также можете найти образцы на malware-traffic-analysis.net. Существует множество руководств по созданию безопасной среды анализа (например, этот), но для начала вам понадобится незащищенная база (иначе ваши образцы могут быть съедены AV).

Для сегодняшнего анализа я сосредоточусь на использовании двух бесплатных инструментов:

Ghidra требует, чтобы вы скачали openjdk, поэтому, если вы никогда раньше не использовали Ghidra, найдите время и обязательно прочтите руководство по установке. PStudio даже не нужно устанавливать для запуска, просто загрузите, и вы готовы к работе.

Я взял сегодняшний пример с https://app.any.run/tasks/263615c7-12c7-4692-aa35-c1f7a8ddfae9/. Я нахожу программы-вымогатели интересными, потому что это кошмарный сценарий для затронутых компаний, и есть финансовый стимул, чтобы убедиться, он не обнаружен.

  1. Первое, что я сделал, — закинул образец в PEStudio и просмотрел итоговую информацию. Из этого я смог определить, что образец соответствует подписи для Visual Studio C++.

2. На вкладке дополнительной информации заголовка у меня есть некоторая основная информация, такая как адрес точки входа, которая может пригодиться при просмотре в дизассемблере.

3. Следующее, что я сделал, это просмотр разделов программ. Типичный раздел состоит из .data, .rdata, .rsrc, .reloc и .text. Обычные программы содержат большую часть инструкций в формате .text (странно, но, эй, не я устанавливаю правила). Если для вас это в новинку, загляните на opensecuritytraining.info. Они могут помочь. PEstudio также позволяет вам щелкнуть правой кнопкой мыши по разделу и создать его дамп, чтобы вы могли просмотреть его с помощью другого инструмента (например, notepad++ или IDA).

4. Затем последовал просмотр импорта приложений (какие библиотеки DLL загружены и какие функции в этих библиотеках используются). Это может быть очень полезно, пытаясь понять, что делает программа. PStudio помечает некоторые функции как занесенные в черный список, потому что они часто используются только вредоносными программами. Поиск в Google функций, о которых вы не знаете, дает довольно прямолинейные объяснения от Microsoft.

5. Вкладка «Ресурсы» включает все файлы, упакованные с исполняемым файлом. Обычно это включает в себя такие вещи, как значок приложения, но иногда он также включает другую информацию. В приведенном ниже примере есть два дополнительных ресурса MAZIUHONIRELI и VAVNOR.

Есть также отображение строк, которое может быть полезным, но, на мой взгляд, Ghidra лучше подходит для этого.

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

  1. Перво-наперво, я импортирую образец из меню файла.

2. Отметив, что сигнатура компилятора совпадает с PEStudio, я открываю образец в браузере кода (один из инструментов в Ghidra), принимаю значения по умолчанию и разрешаю Ghidra выполнять автоматический анализ файла. Важно отметить, что Ghidra попытается создать представление образца, который вы исследуете, на основе C, но это только интерпретация образца Ghidra, она может быть и часто неверна. Но! Для тех, кто учится и немного знает C++ (таких как я), это отличный способ изучить ассемблер.

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

3. Мы также можем отсортировать функции в дереве символов и найти запись. Обнаружение __security_init_cookie — хороший показатель того, что вы находитесь в правильном месте.

4. Отсюда мне нравится рассматривать приложение с точки зрения графа функций. График функций показывает, как вызовы функций взаимодействуют друг с другом, однако, если приложение использует метод эксплойта, это может быть неверным. Но это хорошее начало

5. Отсюда я могу наводить курсор на любую из функций, щелкать и менять фокус, а также наводить курсор на вызовы. Что замечательно, так это то, что переориентация на любую функцию также фокусирует представления списка и декомпиляции. Я также могу перемещаться по дереву символов, дважды щелкнув определенную функцию, которая также переориентирует представления списка и декомпиляции.

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

7. Еще одна чрезвычайно полезная область — отображение всех строк читаемого текста. Ghidra отображает эти строки идентично ссылкам на функции, поэтому, если вы найдете интересную строку, можно определить, где она вызывается. Мы получаем доступ к строкам из меню поиска

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

В конце концов я нахожу искомую логику — что скрывает это приложение.

Переходя к представлению декомпиляции, становится ясно, что этот образец использует несколько методов для прерывания процесса отладки.

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

Чтобы узнать больше, ознакомьтесь с этими замечательными ресурсами:

(1) Искусство распаковки — https://www.blackhat.com/presentations/bh-usa-07/Yason/Whitepaper/bh-usa-07-yason-WP.pdf

(2) Реверс-инжиниринг для начинающих — https://beginners.re/RE4B-EN.pdf