Поиск программных ошибок в алгоритмах обработки сложноструктурированных данных | Прикладная дискретная математика. Приложение. 2009. № 1.

Поиск программных ошибок в алгоритмах обработки сложноструктурированных данных

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

Software errors search in complex data processing algorithms.pdf При разработке программных комплексов часто решается задача по интеграциив них программных модулей, для которых отсутствуют исходные коды и сопроводительнаятехническая документация. Для обеспечения надежности функционированиякомплекса в целом может потребоваться выполнить анализ бинарного кода используемыхмодулей.В данном случае под анализом бинарного кода подразумевается проверка корректностиработы программного обеспечения (ПО) и отсутствия программных ошибок.Существуют различные классификации ошибок, встречающихся в ПО [1, 2]. Далеесчитаем, что программная ошибка - это ошибка реализации ПО, допущенная разработчикамина этапе кодирования. Проявлением программной ошибки является аварийноезавершение процесса, связанного с соответствующим ПО.Сократим анализ бинарного кода. Исследоваться будут только те программные модули(или их части), которые отвечают за обработку входных данных. Этому есть объяснение.Разрабатываемая и используемая методика тестирования бинарного кода [3]хорошо себя зарекомендовала для тестирования ПО, которое обрабатывает сложноструктурированныевходные данные. Именно при создании программного кода, обрабатывающегосложно-структурированные данные, со многими внутренними связями(явными и неявными), на качестве кода сказывается человеческий фактор.Применяют несколько основных подходов, которым отдается предпочтение при решениизадачи тестирования бинарного кода [4, 5]:- обратная инженерия (reverse engineering) - применяется с целью получения ПОна языке ассемблера или на языке высокого уровня;- анализ двоичного кода - предполагает наличие анализирующего приложения, котороечитает собранное ПО и просматривает его с применением некоторых эвристическихправил;- тестирование нагрузкой, или стрессовое тестирование - используется набор файловсценариев, которые посылают ПО разнообразные входные данные различногоразмера и структуры.В последнее время получил распространение один из видов стрессового тестирования- фазинг (fuzzing) [1]. Его преимущество - возможность быстрого получениярезультатов.Тестирование алгоритмов обработки сложно-структурированных данных, основанноена стрессовом тестировании, можно представить в виде последовательности тестов.Каждый тест выполняется за четыре шага.Шаг 1. С помощью процедур формирования входных данных подготавливаютсявходные данные, которые будут переданы исследуемому процессу.Ш!аг 2. Запускается исследуемый процесс и ему передаются сформированные напервом шаге входные данные.Ш!аг 3. Регистрируется состояние исследуемого процесса. Если исследуемый процессна переданных ему входных данных завершает работу аварийно, то собраннаяинформация о работе процесса поможет разобраться в причинах ошибки.Шаг 4. На последнем шаге теста, в случае аварийного завершения исследуемогопроцесса, восстанавливается корректность его последующих запусков для независимоговыполнения очередного теста.Применение стрессового тестирования позволяет обнаружить программные ошибкиза короткое время.Первоначально входные данные для тестирования формировались в статичном режиме,на основе различных эвристических правил и без восстановления алгоритмовработы исследуемого ПО.Для повышения эффективности тестирования было решено сочетать стрессовоетестирование и динамический анализ на основе трассировки исследуемого процесса.Трассировка помогает сгенерировать входные данные.При этом возникают две взаимосвязанные задачи. Первая - сопоставление входныхданных и результатов трассировки, для чего строится граф потока данных.Вторая задача - анализ собранной трассы, при этом можно выделить различныеподзадачи: обнаружение функций, «схлопывание» циклов, минимизация объемов хранимыхданных (поскольку объемы трассы измеряются гигабайтами) и другие. Длярешения данной задачи предполагается использовать возможности среды Ida P ro . Интеграциясо средой Ida Pro позволит минимизировать объем трассы и решить рядподзадач с помощью штатных средств дизассемблера.Таким образом, выявление программных ошибок в ПО без исходных текстов путемдополнительного тестирования механизмов обработки входных данных позволяетповысить надежность разрабатываемых программных комплексов.

Ключевые слова

Авторы

ФИООрганизацияДополнительноE-mail
Макаров Алексей НиколаевичГНТЦ „Наука", г. Москванаучный сотрудникbyalex@mail.ru
Всего: 1

Ссылки

Козиол Д., Личфилд Д., Эйтэл Д., и др. Искусство взлома и защиты системы. СПб.: Питер, 2006. 416 с.
Ховард М., Лебланк Д. Защищенный код. 2-е изд. М.: Издательско-торговый дом «Русская редакция», 2005. 704 с.
Макаров А. Н. Метод автоматизированного поиска программных ошибок / / Безопасность информационных технологий. Вып. 2. М.: МИФИ, 2008. С. 101-104.
Хогланд Г., Мак-Гроу Г. Взлом программного обеспечения: анализ и использование кода. М.: Издательский дом «Вильямс», 2005. 400 с.
Eilam E. Reversing: Secrets of Reverse Engineering. Wiley Publishing, 2005. 589 p.
 Поиск программных ошибок в алгоритмах обработки сложноструктурированных данных | Прикладная дискретная математика. Приложение. 2009. № 1.

Поиск программных ошибок в алгоритмах обработки сложноструктурированных данных | Прикладная дискретная математика. Приложение. 2009. № 1.