Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Глава 1. Обзор существующих методов поиска уязвимостей . . . 10
1.1 Основные термины анализа помеченных данных . . . . . . . . . . 10
1.1.1 Основные термины задачи IFDS . . . . . . . . . . . . . . . 13
1.2 Общая классификация методов анализа . . . . . . . . . . . . . . . 17
1.2.1 Методы, основанные на тестировании . . . . . . . . . . . . 18
1.2.2 Методы на основе статического и динамического
символьного выполнения . . . . . . . . . . . . . . . . . . . 20
1.3 Анализ помеченных данных . . . . . . . . . . . . . . . . . . . . . 23
1.3.1 Анализ помеченных данных в форме IFDS задачи . . . . . 25
1.3.2 Инструменты анализа помеченных данных . . . . . . . . . 27
1.4 Выводы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Глава 2. Методы повышения точности статического анализа
помеченных данных . . . . . . . . . . . . . . . . . . . . . . . 32
2.1 Проблема отсутствия чувствительности к путям . . . . . . . . . . 36
2.1.1 Двухэтапный анализ со статическим символьным
выполнением . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.1.2 Двухэтапный анализ с обходом расширенного суперграфа 41
2.2 Санитизация помеченных данных . . . . . . . . . . . . . . . . . . 44
2.3 Известные причины ложных срабатываний . . . . . . . . . . . . . 47
Глава 3. Методы повышения полноты статического анализа
помеченных данных . . . . . . . . . . . . . . . . . . . . . . . 50
3.1 Анализ косвенных вызовов . . . . . . . . . . . . . . . . . . . . . . 51
3.2 Спецификации для внешних функций . . . . . . . . . . . . . . . . 56
3.2.1 Формат спецификаций для описания истоков, стоков и
пропагаторов . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.2.2 Эвристический поиск новых истоков . . . . . . . . . . . . 63
Глава 4. Методы повышения масштабируемости статического
анализа помеченных данных . . . . . . . . . . . . . . . . . 68
3
Стр.
4.1 Направленное распространение глобальных переменных . . . . . 70
4.2 Практические изменения в использовании IFDS решателя . . . . 77
Глава 5. Особенности реализации и тестирование инструмента
Irbis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.1 Общая схема работы . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.2 Реализованные детекторы . . . . . . . . . . . . . . . . . . . . . . . 83
5.2.1 Теги предупреждений . . . . . . . . . . . . . . . . . . . . . 86
5.3 Особенности реализации . . . . . . . . . . . . . . . . . . . . . . . . 87
5.3.1 Анализ псевдонимов . . . . . . . . . . . . . . . . . . . . . . 89
5.4 Оценка результатов работы . . . . . . . . . . . . . . . . . . . . . . 92
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97


