|
Использование идентификации потоков выполнения при решении задач полносистемного анализа бинарного кода
И. А. Васильевa, П. М. Довгалюкb, М. А. Климушенковаa a Институт системного программирования им. В.П. Иванникова РАН
b Новгородский государственный университет имени Ярослава Мудрого
Аннотация:
При полносистемном анализе бинарного кода зачастую применяется динамический бинарный анализ, при котором предоставляемый аналитику объем данных представлен потоком выполняемых инструкций и содержимым оперативной памяти и регистров. Для обработки таких данных требуется глубокое понимание особенностей исследуемой системы, при этом трудозатраты на выполнение анализа и требования к технической осведомленности пользователя становятся очень велики. Для упрощения процесса анализа необходимо привести входные данные к более дружелюбному для пользователя виду, т.е. предоставить высокоуровневую информацию об исследуемом программном обеспечении. Такой высокоуровневой информацией является информация о потоке выполнения программы. Для восстановления потока выполнения программы важно иметь представление о вызываемых ею процедурах. Получить такое представление можно с помощью стека вызова функций для конкретного потока. Построение стека вызовов без информации о выполняемых потоках невозможно, т.к. каждому потоку однозначно соответствует один стек и vice versa. Помимо этого, само наличие информации о потоках повышает уровень знаний о системе, позволяет более тонко профилировать объект исследования и проводить узконаправленный анализ, применяя принципы выборочного инструментирования. Виртуальная машина не предоставляет напрямую такой информации, и строить предположения о работе исследуемой системы приходится, основываясь на доступных низкоуровневых данных (поток выполняемых виртуальным процессором инструкций и оперативная память виртуальной машины). Таким образом, существует необходимость в разработке метода для автоматической идентификации потоков в исследуемой системе, опирающегося на имеющемся объеме данных. В данной работе рассматриваются существующие подходы к реализации получения высокоуровневой информации при полносистемном анализе и предлагается метод для восстановления данных о потоках в условиях полносистемной эмуляции с низкой степенью ОС-зависимости. Также приводятся примеры практического использования данного метода при реализации инструментов анализа, а именно: восстановление стека вызовов, обнаружение подозрительных операций возврата и обнаружение обращений к освобожденной памяти в стеке. Приведенное в статье тестирование показывает, что накладываемое описанными алгоритмами замедление позволяет проводить работу с исследуемой системой, а сравнение с эталонными данными подтверждает корректность получаемых алгоритмами результатов.
Ключевые слова:
полносистемный анализ, стек вызовов, обнаружение уязвимостей.
Образец цитирования:
И. А. Васильев, П. М. Довгалюк, М. А. Климушенкова, “Использование идентификации потоков выполнения при решении задач полносистемного анализа бинарного кода”, Труды ИСП РАН, 33:6 (2021), 51–66
Образцы ссылок на эту страницу:
https://www.mathnet.ru/rus/tisp645 https://www.mathnet.ru/rus/tisp/v33/i6/p51
|
Статистика просмотров: |
Страница аннотации: | 15 | PDF полного текста: | 13 |
|