научная статья по теме ДИНАМИЧЕСКИЙ АНАЛИЗ ПРИЛОЖЕНИЙ Общие и комплексные проблемы естественных и точных наук

Текст научной статьи на тему «ДИНАМИЧЕСКИЙ АНАЛИЗ ПРИЛОЖЕНИЙ»

Математическое и программное обеспечение вычислительных машин, комплексов и компьютерных сетей

Олехов В.Л., соискатель Макаров-Землянский Н.В., доктор технических наук, професор (Московский государственный университет им. М.В. Ломоносова)

ДИНАМИЧЕСКИЙ АНАЛИЗ ПРИЛОЖЕНИЙ

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

Ключевые слова: исследование ПО, динамический анализ.

DYNAMIC ANALYSIS OF APPLICATIONS

In this article we examine the methods of dynamic analysis of application. The most useful places for probes and control points are proposed.

Keywords: application analysis, dynamic analysis.

Задача анализа программного обеспечения (ПО) появляется в различных областях, например:

• сертификационные исследования программного обеспечения;

• тестирование, нагрузочные испытания ПО;

• реверс-инжиниринг ПО.

В статье рассматривается методы динамического анализа ПО, применяемые при сертификационных испытаниях. Применяемые в отечественной практике анализа ПО методики основаны, в том числе на методиках ФСТЭК [1,2]. Эти методики предписывают построение возможных маршрутов выполнения исследуемого ПО и их сверку с фактическими маршрутами. Процесс построения возможных маршрутов выполняется при помощи анализа исходных текстов исследуемого ПО без их непосредственного запуска и является частью статического анализа, в противоположность динамическому анализу, во время которого производится непосредственный запуск исследуемого ПО. При динамическом анализе можно выявить дополнительную информацию, которую невозможно получить при использовании статического анализа.

В разработанном в НИВЦ МГУ программно-аппаратном комплексе «Тест» [1,2,3] применяются следующие инструменты динамического анализа: зонды и контрольные точки.

Зонды

Зонды (probes) - специальным образом подготовленные и внедрённые в исходный текст программы фрагменты.

В комплексе "Тест" используются следующие виды зондов:

• инициализация системы зондов;

• прохождение зонда № I;

• сохранение накопленной информации о прохождении зондов.

Инициализация системы зондов заключается в первичном выделении памяти под массив

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

Прохождение i-го зонда - увеличение соответствующего счётчика на единицу. Вставка для записи прохождения, например, 200-го зонда для языков С/С++ выглядит следующим образом:

ZondData[200]++,

где ZondData - идентификатор массива с информацией о данных зонда, 200 - номер зонда.

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

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

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

Представляют интерес следующие точки установки зондов:

• первый оператор в каждой функции;

• первый оператор в составных операторах;

• перед оператором return;

• в ветви условного оператора;

• в тело оператора цикла.

Контрольные точки

Контрольная точка (control point) (КТ) - это внедрённая в исполняемый код исследуемого ПО инструкция с кодом операции 204 (0xCC). Этот код соответствует инструкции int 3 (для платформы x86). Прерывание с номером «три» является специальным прерыванием; это прерывание используется отладчиками (debugger) при реализации механизма точек остановки (breakpoints). При исполнении инструкции 0xCC (int 3) выполняется обычная процедура программного прерывания:

1. устанавливается флаг IF;

2. текущий исполняемый адрес (IP) помещается в стек;

3. осуществляется переход на обработчик прерывания №3.

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

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

Следует отметить трудности, возникающие при исследовании многопоточных приложений, когда одновременное срабатывание нескольких КТ делает затруднительной их идентификацию. Установка и поддержка КТ в исполняемый код исследуемого ПО на платформе Windows осуществляется при помощи DebugAPI[4,5,6], на платформе Linux - при помощи ptrace[7].

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

• начало функции;

• возврат из функции (ret);

• перед вызовом функции (call);

• операторы ветвления (jz, je, etc).

Также важным моментом является способ определения адресов установки КТ. Адреса можно получить по данным статического анализа и из других источников, в частности:

• дизассемблирование исследуемого ПО;

• использование MAP-файлов;

• Debug Symbols.

Важно отметить, что по сравнению с зондами, замедление исполнения ПО при использовании КТ имеет более выраженный характер. Это обусловлено тем, что для обработки срабатывания одного зонда требуется несколько инструкций (увеличение счётчика в массиве), в то время как обработка контрольной точки — от 100 до 1000 и более инструкций, которые необходимы для идентификации КТ по адресу срабатывания. Кроме того, вставка зонда не разрушает конвейер команд, что не сказывается на производительности.

Следует обратить внимание на другие недостатки применения метода КТ. К таковым относятся: модификация исполняемого кода исследуемого ПО и работа в кольце защиты приложения. Также, со стороны исследуемого приложения могут применяться методы активного противодействия такого рода исследованиям, например, контроль целостности загруженного исполняемого кода. Если в исследуемом ПО применяются методы шифрования исполняемого кода (например, обфускация или упаковка исполняемого файла), то установка КТ становится неэффективной, и, может быть, даже невозможной.

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

ЛИТЕРАТУРА

1. Макаров-Землянский Н.В., Олехов В.Л. Разработка анализаторов и внутреннего представления для комплекса ТЕСТ. // «Методы и технические средства обеспечения безопасности информации». Труды XIV Общероссийской научно-технической конференции. СПб.: Изд. Политехнического университета, 2005.

2. Олехов В.Л., Щепилов О.А. Методы протоколирования, тестирования и динамической отладки приложений // «Методы и технические средства обеспечения безопасности информации». Труды XVI Общероссийской научно-технической конференции. СПб.: Изд. Политехнического университета, 2007.

3. Макаров-Землянский Н.В., Олехов В.Л. Динамический анализ приложений с помощью контрольных точек. // Тезисы докладов конференции «Ломоносов -2010». М.: Изд. МГУ, 2010.

4. Matt Pietrek. An In-Depth Look into the Win32 Portable Executable File Format // msdn, Febriary, 2002. http://msdn.microsoft.com/en-us/magazine/cc301805.aspx

5. Matt Pietrek. Peering Inside the PE: A Tour of the Win32 Portable Executable. Debugging and Error Handling Technical Articles// msdn. March. 1994. http://msdn.microsoft.com/en-us/magazine/ms809762.aspx

6. Джон Роббинс. Отладка Windows-приложений. M.: ДМК Пресс, 2001.

7. Pradeep Padala. Playing with ptrace, Part I,Part II // Linux journal, November, 2002. http://www.linuxjournal.com/article/6100 http://www.linuxjournal.com/article/6210

Для дальнейшего прочтения статьи необходимо приобрести полный текст. Статьи высылаются в формате PDF на указанную при оплате почту. Время доставки составляет менее 10 минут. Стоимость одной статьи — 150 рублей.

Показать целиком