RUS  ENG
Полная версия
ЖУРНАЛЫ // Труды института системного программирования РАН // Архив

Труды ИСП РАН, 2017, том 29, выпуск 6, страницы 151–162 (Mi tisp278)

Эта публикация цитируется в 2 статьях

Построение предикатов безопасности для некоторых типов программных дефектов

А. Н. Федотовa, В. В. Каушанa, С. С. Гайсарянabcd, Ш. Ф. Курмангалеевa

a Институт системного программирования им. В.П. Иванникова РАН
b МГУ имени М.В. Ломоносова
c Национальный исследовательский университет «Высшая школа экономики»
d Московский физико-технический институт

Аннотация: В статье рассматриваются подходы и способы выполнения кода с использованием уязвимостей в программах. В частности, рассмотрены способы выполнения кода для переполнения буфера на стеке и в динамической памяти, для уязвимости использования памяти после освобождения и для уязвимости форматной строки. Описываются методы и подходы, позволяющие автоматически получать наборы входных данных, которые приводят к выполнению произвольного кода. В основе этих подходов лежит использование символьной интерпретации. Динамическое символьное выполнение предоставляет набор входных данных, который направляет программу по пути активации уязвимости. Предикат безопасности представляет собой дополнительные символьные уравнения и неравенства, описывающие требуемое состояние программы, наступающее при обработке пакета данных, например, передача управления на требуемый адрес. Объединив предикаты пути и безопасности, а затем решив полученную систему уравнений, можно получить набор входных данных, приводящий программу к выполнению кода. В работе представлены предикаты безопасности для перезаписи указателя, перезаписи указателя на функцию и уязвимости форматной строки, которая приводит к переполнению буфера на стеке. Описанные предикаты безопасности использовались в методе оценки критичности программных дефектов. Проверка работоспособности предикатов безопасности оценивалась на наборе тестов, который использовался в конкурсе Darpa Cyber Grand Challenge. Тестирование предиката безопасности для уязвимости форматной строки, приводящей к переполнению буфера, проводилось на программе Ollydbg, содержащей эту уязвимость. Для некоторых примеров удалось получить входные данные, приводящие к выполнению кода, что подтверждает работоспособность предикатов безопасности.

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

DOI: 10.15514/ISPRAS-2017-29(6)-8



Реферативные базы данных:


© МИАН, 2024