Введение
Глава 1. Обзор средств защиты от удаленной эксплуатации уязвимостей 9
1.1. Системы, внедряемые во время компиляции 9
1.2. Системы, внедряемые на этапе компоновки программы 10
1.3. Рандомизация расположения адресного пространства (ASLR) 11
1.4. Иные проекты 15
1.5. Технологии защиты от эксплуатации ошибок в Windows 16
1.5.1. Защита стека 17
1.5.2. Защита кучи 18
1.5.3. Безопасность SEH 23
1.5.4. Рандомизация РЕВ 26
1.5.5. Определение относительного виртуального адреса API функции 27
1.5.6. Переписывание критичных указателей 28
1.5.7. Запуск шелкода в РЕВ 29
1.5.8. Безопасность указателей 30
1.5.9. NX память и аппаратный DEP 30
1.6. Выводы 32
Глава 2. Теоретическое обоснование возможности диверсификации ПО 36
2.1. Формальное определение нефункционального преобразования 36
2.1.1. Базовые определения 36
2.1.2. Эквивалентность программ 39
2.1.3. Нефункциональные преобразования 42
2.1.4. Свойства НФП 45
2.2. Оценки НФП 50
2.2.1. Мощность НФП 51
2.2.2. Устойчивость преобразования 56
2.2.3 Цена преобразования 58
2.2.4 Главная мера 59
2.3. Реализация нефункциональных преобразований на процессорах х86 61
2.3.1. Замена регистров (уровень 1) 61
2.3.2. Перестановка множеств инструкций местами (уровень 2) 62
2.3.3. Процедурный подход (уровень 3) 66
2.3.4. Изменение прототипа функций (уровень 4) 69
2.3.5. Выделение случайных подфункций (уровень 5) 70
2.4. Выводы 72
Глава 3. Разработка метода диверсификации программного обеспечения 74
3.1. Общая архитектура генератора кода 75
3.2. Язык FuzzAsm 76
3.3. Используемость переменных 83
3.4. Определение каркаса функции 84
3.5. Внедрение «мусорного» кода 87
3.6. Генерация ко да 90
3.7. Сборка кода 91
3.8. Выводы 92
Глава 4. Разработка алгоритмов декомпиляции и рекомпиляции исполнимого кода 94
4.1. Декомпиляция 94
4.1.1. Этапы декомпиляции 96
4.1.2. Анализ структуры РЕ 97
4.1.3. Предварительный анализ кода 101
4.1.4. Дизассемблирование 102
4.1.5. Построение связного списка блоков 106
4.2. Рекомпиляция 108
4.2.1. Пересчет относительных виртуальных и физических адресов 109
4.2.2. Пересчет таблицы элементов релокации
4.2.3. Перелинковкауказателей
4.2.4. Ассемблирование результатов в файл
4.3. Выводы 113
Глава 5. Экспериментальное исследование алгоритмов диверсифицирующих преобразований 115
5.1. Измерение характеристик программ, оценка НФП 115
5.2. Выводы 118
Заключение 120
Список использованных источников 122
Приложения 130


