Теоретическое обоснование схождения дизассемблированных последовательностей байт

УПРАВЛЕНИЕ, ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА И ИНФОРМАТИКА

УДК 004.431.4+004.421.2

ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ СХОЖДЕНИЯ ДИЗАССЕМБЛИРОВАННЫХ ПОСЛЕДОВАТЕЛЬНОСТЕЙ БАЙТ

© 2012 г. ДА. Эдель

Федеральное государственное научное учреждение

«Научно -исследовательский институт "Специализированные вычислительные устройства защиты и автоматика"», г. Ростов-на-Дону

Federal State Scientific Establishment «Scientific Research Institute " Specialized Security Computing Devices and Automation"», Rostov-on-Don

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

Ключевые слова: дизассемблирование программ; двоичный код; язык машинных команд; задача разделения неопределенных участков программ на код и данные.

The paper analyzes the effect of imposing disassembled instructions and the fact on the align of sequences of bytes disassembled. The lemma and the theorem of the probability on align of the two sequences of bytes disassembled described. Also presented two corollaries, remarks and conclusions on the applicability of the effect of align in practice.

Keywords: disassembly programs; binary code; the language of machine instructions; gap completion problem.

Одной из актуальных угроз для информационной безопасности инфраструктуры коммерческих и государственных организаций является угроза внедрения вредоносных компонент в устанавливаемое программное обеспечение. В целях предотвращения реализации угроз такого типа [1] проводится проверка программного обеспечения на отсутствие вредоносных вложений в нем и соответствующая сертификация. Тем самым снижается риск вторжения злоумышленником через установку стороннего программного обеспечения. В процессе проверки и сертификации является актуальным вопрос верификации кода программы статическим анализом без наличия доступа к оригинальным исходным текстам такой программы [2]. Данный процесс осуществляется с помощью специализированных средств - дизассемблеров [3, 4], задача которых заключается в создании отображений инструкций машинного языка на язык ассемблера [5].

При анализе исполнимых последовательностей, полученных при дизассемблировании машинного кода, в работе [6] был описан эффект наложения инструкций, который является серьезной проблемой для полной автоматизации процесса дизассемблирования любой программы и автоматической верификации ее кода. Так, согласно спецификации процессоров архитектуры Intel IA-32 [5] один и тот же участок исполнимого кода программы можно интерпретировать и как код, и как данные, а также один и тот же байт может являться частью различных команд процессо-

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

Последовательности дизассемблированных инструкций

«

о и

s я

а с

о я

F

s о

П1 П2 П3

14 add esp, 14

53 push ebx

83

EC 0C sub esp, c sub esp,c or al,8b

8B mov ebx, 14 mov ebx, 14

5C pop esp

24 14 and al, 14

8B 53 04 mov edx, 4 mov edx, 4 \ \ mov edx,4

Выравнивание всех последовательностей

Рис. 1. Эффект наложения инструкций

Одна и та же последовательность байт может формировать различные дизассемблированные после-

довательности исполнимых инструкций в зависимости от позиции начала дизассемблирования. В приведенном рисунке первые три последовательности (П1-П3) сформированы с шагом отступа позиции начала дизассемблирования в один байт. Причем видно, что первые две дизассемблированных последовательности со второй инструкции «sub esp, с» одинаковы (сошлись). А третья дизассемблированная последовательность (П3) сошлась на четвертой инструкции «mov edx, 4» с двумя другими последовательностями (П1 и П2). Позицию схождения всех последовательностей назовем их выравниванием. На рис. 1 такой позицией является байт "0x8B".

Указанный факт является основной проблемой в задаче разделения неопределенных участков программ (НУП) на код и данные [7]. Такая задача имеет место в дизассемблерах при восстановлении исходного кода программы на языке программирования ассемблер для участков программы, на которые не было ссылок в трассах графа потока управления и графа потока данных. Пример такой ситуации приведен на рис. 2.

Программа

:8 01 69 77 80 38 52 ЕЕ 6F 01 32 80 1С 20 07 С8 04 72ЯО 1С 20 07 С8 83 ЗЕ Заголовок

Функция J

Функция

Данные

Функция —1

АО 07 1С 59 FF Ей^ 27 97 D8 2А ОЕ 55 ED С6 91 AD 4DÄ С5 71 96 83 06 BD С6 48 Е6 3F 5^9 СЕ 99 В7 7F 7С DE F0 52 BE 4С А5 ВЗ 25 07 С8 01 72

ЛлниШ430 Манные

Рис. 2. Задача разделения НУП на код и данные

Анализируя эффект наложения инструкций, N. Rosenblum [6] доказал теорему, позволяющую вычислить ожидаемое количество инструкций, после дизассемблирования которых сойдутся трассы двух дизассемблированных последовательностей, основываясь на начальном их расхождении в байтах.

Теорема 1. Если дизассемблированная последовательность B начинается на 0<d<K байт позже последовательности A, то ожидаемое число дизассемблиро-ванных инструкций в А, до того как А и В выровняют-

K -1

ся, равно ^ Nj , где N=(Ndj) - матрица размера ин-

j=1

струкций.

По теореме, для машинных инструкций процессора CISC архитектуры [8], согласно спецификации Intel IA-32 [5], дизассемблированные последовательности, смещенные одна от другой на 1 байт, выровняются в среднем через 2.2 инструкции; последовательности, смещенные на 3 байта, выровняются через 2.7 инструкций.

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

Следуя [6], будем моделировать процесс параллельного дизассемблирования последовательности байт, начиная с двух разных позиций, находящихся на определенном расстоянии, при помощи марковского процесса, считая состоянием текущее расстояние между концами последних инструкций в двух дизас-семблированных цепочках. Переходы между состояниями соответствуют дизассемблированию следующей инструкции в более короткой (в байтах) цепочке.

Введем R = ^0,0,Q1,0,...,Qk,0)Т - вектор вероятности схождения двух дизассемблированных последовательностей за один шаг (переход в состояние с нулевым расстоянием между концами последних инструкций в двух дизассемблированных цепочках), где Q=(Qij) - матрица вероятности перехода из состояния с расстоянием между началами цепочек, равным i, в состояние с расстоянием ] (для k возможных состояний).

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

^ = Qn-1R.

Доказательство. Обратимся к введенной выше модели на основе марковского процесса. Искомый вектор вероятностей перехода за п шагов в состояние с нулевым относительным сдвигом последних дизас-семблированных инструкций двух цепочек может быть вычислен на основе матрицы вероятностей перехода в каждое из возможных состояний за п - 1 шагов и вектора перехода в состояние с нулевым сдвигом из каждого возможного состояния. Как известно [9], первая матрица вычисляется как Qn~l. Таким образом, лемма является следствием известных свойств марковских процессов.

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

Теорема 2. Вероятность схождения двух дизас-семблерных последовательностей не более чем за п шагов выражается по формуле

Рп = ,

где V = (У0,У1,.,Ук:)Т - вектор вероятностей начального относительного смещения стартовых позиций двух дизассемблируемых последовательностей.

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

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

или Рп = .

На основе приведенной теоремы можно сформулировать два следствия.

Следствие 1. Квантиль уровня а для количества шагов схождения двух последовательностей вычисляется как минимальное п, для которого Рп >а .

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

частью инструкций до быстрого их схождения за 0(Л/).

Следствие 2. При достаточно большой длине ди-зассемблируемой последовательности вероятность выравнивания всех цепочек дизассемблирования, начатых в пределах длины первой инструкции, близка к 1.

Это следствие основано на том, что из формулы (1) очевидно, что при увеличении п будет увеличиваться вероятность выравнивания каждой пары дизас-семблируемых последовательностей.

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

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

*— Дизассемблируемая последовательность байт —

FF 00 FF add bh, bh add bh, bh add bh, bh 00 FF 00 FF

inc [eax] inc [eax] inc [eax]  IFF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00

Последовательность инструкций 1 (для ОхЯГООД

Последовательность инструкций 2 (для ОхООР^

Рис. 3. Стационарное состояние Поступила в редакцию

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

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

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

Литература

1. Критически важные объекты и кибертерроризм. Ч. 2 : Аспекты программной реализации средств противодействия / О.О. Андреев [и др.]. М., 2008. 607 с.

2. Иванов И.Ю. О проблемах защиты интеллектуальной собственности в программных системах // Проблеми програмування. 2006. № 2-3. С. 580 - 584.

3. Касперски К., Рокко Е. Искусство дизассемблирования. СПб., 2008. 896 с.

4. Касперски К. Техника отладки программ без исходных текстов. СПб., 2005. 832 с.

5. IA-32 Assembly Language Reference Manual. : Sun Microsystems, Inc., 2000. 161 p.

6. Rosenblum N. Machine Learning-Assisted Binary Code Analysis // Computers & Education: Elsevier Science. 2008. P. 1 - 16.

7. Гайсарян С.С., Иванников В.П., Аветисян А.И. Анализ и трансформация программ // www.ict.edu.ru/ft/005642/ 62319e1-st06.pdf

8. Сергеев С.Л. Архитектуры компьютерных систем. СПб., 2010. 240 с.

9. Вентцель Е.С., Овчаров Л.А. Теория случайных процессов и ее инженерные приложения. М., 2011. 448 с.

10. Эдель Д.А., Коваль А.А. Вероятностный анализ метода обнаружения вредоносного кода в файлах на основе сигнатур // Обозрение прикладной и промышленной математики : 7-я Междунар. Петрозаводская конф. «Вероятностные методы в дискретной математике». Петрозаводск, 2008. Т. 16, вып. 1. Редакция: «ОПиПМ». М., 2009. С. 100.

4 апреля 2012 г.

Эдель Дмитрий Александрович - научный сотрудник, научно-исследовательский институт «Специальные вычислительные устройства защиты и автоматика». Тел. (928)339-08-10. E-mail: edel.science@gmail.com

Edel Dmitry Alexandrovich - Research Associate, Federal State Scientific Establishment Scientific Research Institute «Specialized Security Computing Devices and Automation». Ph. (928)339-08-10. E-mail: edel.science@gmail.com