Институт системного программирования им. В.П. Иванникова РАН


Среда анализа бинарного кода ТРАЛ. Детальное исследование бинарного кода любой сложности.

Область применения

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

  • исследование вредоносного кода, в том числе в ситуациях, когда этот код не существует в виде отдельного исполняемого модуля;
  • извлечение алгоритмов для повторного использования из программ и библиотек, исходный код которых утерян или не может быть заново скомпилирован из-за особенностей процесса сборки;
  • интеграция программных компонент с закрытыми интерфейсами;
  • отладка низкоуровневого кода, например, компонентов ОС и встраиваемого ПО.

Схема работы среды анализа бинарного кода ТРАЛ

В основе разработанного в Институте системного программирования РАН подхода к решению задач детального анализа бинарного кода лежит комбинация известных методов статического и динамического анализа. Подход реализован в среде анализа бинарного кода ТРАЛ и состоит из следующих шагов.

  1. Сбор динамических профилей работы исследуемого ПО, которое выполняется в виртуальной машине.
  2. Автоматическое повышение уровня представления профиля, собранного в ходе выполнения ПО: выделение обработчиков прерываний, разметка процессов и потоков выполнения, восстановление стеков вызовов, используемых библиотек, функций и значений параметров. Основным результатом этого этапа является последовательность связанных статических представлений, описывающих потоки данных и управления анализируемого кода.
  3. Исследование восстановленных потоков данных и управления в рамках решения прикладных задач анализа. Среда расчитана на встраивание в технологические цепочки, где выполняет функции поставщика высокоуровневых данных, изначально отсутвствующих на уровне машинного кода. Помимо того, доступен графический интерфейс, рассчитанный на интерактивную работу человека с целью изучения и коррекции восстановленных высокоуровневых данных.

Trawl

Рисунок 1. Схема с пакетной и интерактивной работой системы

Основные возможности среды ТРАЛ

1. Модульная архитектура среды ТРАЛ позволяет разрабатывать в виде отдельных компонентов различные виды анализа.

  • ИСП РАН имеет большой опыт разработки компонентов анализа по запросу заказчика.
  • Благодаря наличию универсального API имеется возможность разработки модулей на стороне заказчика.

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

  • Среда поддерживает наиболее распространённые процессорные архитектуры x86, x86-64, ARMv7.
  • По запросу заказчика ИСП РАН разрабатывает модули поддержки для требуемых процессорных архитектур.

3. Среда реализует полносистемный анализ, покрывающий всё ПО программно-аппаратной платформы, как приложения, так и системный код. Всё ПО анализуется в совокупности, с учётом явных и побочных связей между программами. Среда содержит специализированные модули поддержки гостевых ОС семейств Windows и Linux. В случаях, когда анализируемая система построена на базе другой ОС (известной или неизвестной) или низкоуровневый код работает вне ОС, среда ТРАЛ остаётся работоспособной.

  • При необходимости ИСП РАН может разработать модули поддержки требуемых гостевых ОС.

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

5. В среде реализован высокоточный анализ потоков данных, который основан на классических алгоритмах теории компиляторов. В нём учитываются особенности целевых процессорных архитектур, такие как механизм виртуальной памяти, аппаратное переключение контекста при обработке прерываний и исключений, прямой доступ устройств к памяти (DMA). На базе анализа потоков данных в среде ТРАЛ реализован динамический анализ помеченных данных, в том числе учитывающий зависимости по управлению.

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

7. Подавляющее большинство алгоритмов анализа, реализованных в среде ТРАЛ, распараллелены на общей памяти с практически линейными показателями масштабируемости. Благодаря этому на больших потоках входных данных среда анализа использует весь потенциал современных многоядерных рабочих станций.

8. Реализована двусторонняя интеграция с внешними инструментами анализа программного кода и сетевого трафика.

Примеры разработанных модулей

1. Автоматическое построение стеков вызовов для каждого потока выполнения в каждый момент времени, а также дерева вызовов.

2. Автоматическое вычисление параметров вызываемых функций:

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

3. Распознавание адресов загрузки и времени жизни исполняемых модулей и динамических библиотек:

  • для проведения анализа необходимы только сами бинарные модули, среда автоматически обнаружит их загрузку и выгрузку даже в случае, когда гостевая ОС неизвестна.

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

5. Модуль интерактивного построения диаграмм, описывающих фрагменты машинного кода, средствами UML-подобного языка моделирования. Реализованный подход основан на автоматическом выделении блоков кода, связанных по данным или управлению с входами и выходами алгоритма.

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

7. Графическое представление структуры переключения процессов, потоков выполнения и адресных пространств. Такое представление удобно для получения первоначального представления о составе работающего в анализируемой системе кода с точки зрения ОС.

8. Модуль деобфускации, позволяющий автоматически построить граф потока управления, запутанный преобразованием «диспетчер», в том числе когда для выполнения кода применяется виртуальная машина.

Статьи

  1. В.А. Падарян, М.А. Соловьев, А.И. Кононов. Моделирование операционной семантики машинных инструкций. // Программирование № 3, 2011. стр. 50–64.
  2. Alexander Getman, Vartan Padaryan, Mikhail Solovyev. Combined approach to solving problems in binary code analysis. // Proceedings of the 9th International Conference on Computer Science and Information Technologies (CSIT), 2013, pp. 295-297.
  3. V.A. Padaryan , A. I. Getman, M. A. Solovyev, M. G. Bakulin, A. I. Borzilov, V. V. Kaushan, I. N. Ledovskikh, Yu. V. Markin, S. S. Panasenko. Methods and software tools to support combined binary code analysis. // Programming and Computer Software. Sep-tember 2014, Volume 40, Issue 5, pp 276-287.
  4. V.A. Padaryan, I.N. Ledovskikh. On the Representation of Results of Binary Code Reverse Engineering. // Programming and Computer Software, 2018, Vol. 44, No. 3, pp. 200–206.
  5. Бугеря А.Б., Ким Е.С., Соловьев М.А. Распараллеливание реализаций сугубо после-довательных алгоритмов. Труды ИСП РАН, том 30, вып. 2, 2018 г., стр. 25-44.

Контакты

Пишите на trawl@ispras.ru