Научная статья на тему 'Поиск программных ошибок в алгоритмах обработки сложноструктурированных данных'

Поиск программных ошибок в алгоритмах обработки сложноструктурированных данных Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
192
61
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Макаров Алексей Николаевич

The method of software analysis in the absence of the source code is discussed in the paper. The method of stress testing with the automatic tracing of software is applied for the analysis. In this case test data can be formed statistically or dynamically on the basis of tracing results.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Software errors search in complex data processing algorithms

The method of software analysis in the absence of the source code is discussed in the paper. The method of stress testing with the automatic tracing of software is applied for the analysis. In this case test data can be formed statistically or dynamically on the basis of tracing results.

Текст научной работы на тему «Поиск программных ошибок в алгоритмах обработки сложноструктурированных данных»

УДК 004.94

ПОИСК ПРОГРАММНЫХ ОШИБОК В АЛГОРИТМАХ ОБРАБОТКИ СЛОЖНО-СТРУКТУРИРОВАННЫХ ДАННЫХ

А. Н. Макаров

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

В данном случае под анализом бинарного кода подразумевается проверка корректности работы программного обеспечения (ПО) и отсутствия программных ошибок. Существуют различные классификации ошибок, встречающихся в ПО [1, 2]. Далее считаем, что программная ошибка — это ошибка реализации ПО, допущенная разработчиками на этапе кодирования. Проявлением программной ошибки является аварийное завершение процесса, связанного с соответствующим ПО.

Сократим анализ бинарного кода. Исследоваться будут только те программные модули (или их части), которые отвечают за обработку входных данных. Этому есть объяснение. Разрабатываемая и используемая методика тестирования бинарного кода [3] хорошо себя зарекомендовала для тестирования ПО, которое обрабатывает сложноструктурированные входные данные. Именно при создании программного кода, обрабатывающего сложно-структурированные данные, со многими внутренними связями (явными и неявными), на качестве кода сказывается человеческий фактор.

Применяют несколько основных подходов, которым отдается предпочтение при решении задачи тестирования бинарного кода [4, 5]:

— обратная инженерия (reverse engineering) — применяется с целью получения ПО на языке ассемблера или на языке высокого уровня;

— анализ двоичного кода — предполагает наличие анализирующего приложения, которое читает собранное ПО и просматривает его с применением некоторых эвристических правил;

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

В последнее время получил распространение один из видов стрессового тестирования — фазинг (fuzzing) [1]. Его преимущество — возможность быстрого получения результатов.

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

Шаг 1. С помощью процедур формирования входных данных подготавливаются входные данные, которые будут переданы исследуемому процессу.

Ш!аг 2. Запускается исследуемый процесс и ему передаются сформированные на первом шаге входные данные.

Ш!аг 3. Регистрируется состояние исследуемого процесса. Если исследуемый процесс на переданных ему входных данных завершает работу аварийно, то собранная информация о работе процесса поможет разобраться в причинах ошибки.

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

Применение стрессового тестирования позволяет обнаружить программные отттиб-ки за короткое время.

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

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

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

Вторая задача — анализ собранной трассы, при этом можно выделить различные подзадачи: обнаружение функций, «схлопывание» циклов, минимизация объемов хранимых данных (поскольку объемы трассы измеряются гигабайтами) и другие. Для решения данной задачи предполагается использовать возможности среды Ida Pro. Интеграция со средой Ida Pro позволит минимизировать объем трассы и решить ряд подзадач с помощью штатных средств дизассемблера.

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

ЛИТЕРАТУРА

1. Козиол Д., Личфилд Д., Эйтэл Д., и др. Искусство взлома и защиты системы. СПб.: Питер, 2006. 416 с.

2. Ховард М., Лебланк Д. Защищенный код. 2-е изд. М.: Издательско-торговый дом «Русская редакция», 2005. 704 с.

3. Макаров А. Н. Метод автоматизированного поиска программных ошибок // Безопасность информационных технологий. Вып. 2. М.: МИФИ, 2008. С. 101-104.

4. Хогланд Г., Мак-Гроу Г. Взлом программного обеспечения: анализ и использование кода. М.: Издательский дом «Вильямс», 2005. 400 с.

5. Eilam E. Reversing: Secrets of Reverse Engineering. Wiley Publishing, 2005. 589 p.

УДК 004.738

МАРШРУТИЗИРУЕМЫЙ СЕРВИС ПЕРЕДАЧИ ДАННЫХ

В. И. Никонов

Настоящая работа продолжает исследование [1], посвященное разработке алгоритмов разделения данных в распределенных сетях. Этот метод выступает в качестве альтернативы снижению вычислительных затрат при использовании шифрования.

Одним из видов активных сетевых атак является класс атак, основанных на сниф-финге [2]. Приведем пример, в котором злоумышленник, обладая знаниями, что некоторая организация регулярно передает данные из A в G, может довольно точно определить маршрут от A до G в момент времени А t и осуществить перехват на каком-нибудь из участков следования трафика (см. рис. 1,а).

i Надоели баннеры? Вы всегда можете отключить рекламу.