Оглавление
Введение
Предисловие
Благодарности
Об авторах
Часть . Основы
Глава 1. Методологии выявления уязвимости
Метод белого ящика
Просмотр исходного кода
Инструменты и автоматизация
За и против
Метод черного ящика
Тестирование вручную
Автоматическое тестирование, или фаззинг
За и против
Метод серого ящика
Бинарная проверка
Автоматическая бинарная проверка
За и против
Резюме
Глава 2. Что такое фаззинг?
Определение фаззинга
История фаззинга
Фазы фаззинга
Ограничения и исключения при фаззинге
Ошибки контроля доступа
Ошибки в логике устройства
Тайные ходы
Повреждение памяти
Многоступенчатые уязвимости
Резюме
Глава 3. Методы и типы фаззинга
Методы фаззинга
Заранее подготовленные ситуации для тестирования
Случайные данные
Мутационное тестирование протокола вручную
Мутационное тестирование, или тестирование методом грубой силы
Автоматическое порождающее тестирование протокола
Типы фаззеров
Локальные фаззеры
Фаззеры удаленного доступа
Фаззеры оперативной памяти
Интегрированные среды фаззеров
Резюме
Глава 4. Представление и анализ данных
Что такое протоколы?
Поля протоколов
Протоколы передачи простого текста
Двоичные протоколы
Сетевые протоколы
Форматы файлов
Общие элементы протоколов
Пары "имя-значение"
Идентификаторы блоков
Размеры блоков
Контрольные суммы
Резюме
Глава 5. Требования к эффективному фаззингу
Воспроизводимость и документация
Возможность неоднократного использования
Состояние и глубина процесса
Отслеживание, покрытие кода и система показателей
Определение ошибок
Ресурсные ограничения
Резюме
Часть II. Цели и автоматизация
Глава 6. Автоматизация и формирование данных
Важность автоматизации
Полезные инструменты и библиотеки
Ethereal/Wireshark
libdasm и libdisasm
Libnet/LibnetNT
LibPCAP
Metro Packet Library
PTrace
Расширения Python
Выбор языка программирования
Генерирование данных и эвристика фаззинга
Целочисленные значения
Повторения строк
Разграничители полей
Форматирующие строки
Перевод символов
Обход каталога
Ввод команд
Резюме
Глава 7. Фаззинг переменной среды и аргумента
Введение в локальный фаззинг
Аргументы командной строки
Переменные среды
Принципы локального фаззинга
Поиск объектов
Разрешения файлов в UNIX
Методы локального фаззинга
Подсчет переменных среды
Метод дебаггера GNU (GDB)
Автоматизация фаззинга переменной среды
Подгрузка библиотеки
Обнаружение проблем
Резюме
Глава 8. Фаззинг переменной среды и аргумента: автоматизация
Свойства локального фаззера iFUZZ
Разработка
Подход к разработке
Язык
Практический анализ
Эффективность и возможность улучшения
Резюме
Глава 9. Фаззинг веб-приложений и серверов
Что такое фаззинг веб-приложений?
Объекты
Методы
Настройка
Входящие данные
Уязвимости
Обнаружение
Резюме
Глава 10. Фаззинг веб-приложений и серверов: автоматизация
Фаззеры веб-приложений
Свойства
Запросы
Переменные фаззинга
Ответы
Необходимая основная информация
Определение запросов
Обнаружение
Разработка
Подход
Выбор языка
Устройство
Случаи для изучения
Обход каталогов
Переполнение
Инъекция SQL
XSS-скриптинг
Преимущества и способы улучшения
Резюме
Глава 11. Фаззинг формата файла
Объекты
Методы
Грубая сила, или фаззинг методом мутации
Разумная грубая сила, или генерирующий фаззинг
Входящие параметры
Уязвимости
Отказ от обслуживания
Проблемы с обработкой целочисленных значений
Простые переполнения стека и хипа
Логические ошибки
Форматирующие строки
Состояния гонки
Обнаружение
Резюме
Глава 12. Фаззинг формата файла: автоматизация под UNIX
notSPIKEfile и SPIKEfile
Чего не хватает?
Подход к разработке
Механизм обнаружения исключительных ситуаций
Отчет об исключительной ситуации (обнаружение исключительных ситуаций)
Корневой механизм фаззинга
Значимые фрагменты кода
Наиболее интересные сигналы в UNIX
Менее интересные сигналы в UNIX
Процессы-зомби
Замечания по использованию
Adobe Acrobat
RealNetworks RealPlayer
Контрольный пример: уязвимость форматирующей строки RealPix программы RealPlayer
Язык
Резюме
Глава 13. Фаззинг формата файла: автоматизация под Windows
Уязвимости форматов файлов Windows
Возможности
Создание файла
Выполнение приложения
Обнаружение исключительных ситуаций
Сохраненные аудиты
Необходимая сопутствующая информация
Определение целевых объектов
Разработка
Подход
Выбор языка
Устройство
Контрольный пример
Эффективность и возможности для прогресса
Резюме
Глава 14. Фаззинг сетевого протокола
Что такое фаззинг сетевого протокола?
Объекты
Уровень 2: оболочка канального уровня
Уровень 3: сетевая оболочка
Уровень 4: транспортная оболочка
Уровень 5: сессионная оболочка
Уровень 6: презентационная оболочка
Уровень 7: оболочка приложений
Методы
Метод грубой силы, или Мутационный фаззинг
Разумная грубая сила, или Порождающий фаззинг
Модифицированный клиентский мутационный фаззинг
Обнаружение ошибок
Ручной (с помощью дебаггера)
Автоматический (с помощью агента)
Другие источники
Резюме
Глава 15. Фаззинг сетевого протокола: автоматизация под UNIX
Фаззинг с помощью SPIKE
Выбор объекта
Анализ протокола
SPIKE 101
Фаззинговый механизм
Особый строковый фаззер TCP
Моделирование блокового протокола
Дополнительные возможности SPIKE
Фаззеры конкретных протоколов
Фаззинговые скрипты конкретных протоколов
Особые скриптовые фаззеры
Создание фаззингового скрипта SPIKE NMAP
Резюме
Глава 16. Фаззинг сетевых протоколов: автоматизация под Windows
Свойства
Структура пакета
Сбор данных
Анализ данных
Переменные фаззинга
Отправка данных
Необходимая вводная информация
Обнаружение
Драйвер протокола
Разработка
Выбор языка
Библиотека перехвата пакетов
Устройство
Контрольный пример
Преимущества и потенциал
Резюме
Глава 17. Фаззинг веб-броузеров
Что такое фаззинг веб-броузера?
Объекты
Методы
Подходы
Входящие сигналы
Уязвимости
Обнаружение
Резюме
Глава 18. Фаззинг веб-броузера: автоматизация
О компонентной объектной модели
История в деталях
Объекты и интерфейсы
ActiveX
Разработка фаззера
Подсчет загружаемых элементов управления ActiveX
Свойства, методы, параметры и типы
Фаззинг и мониторинг
Резюме
Глава 19. Фаззинг оперативной памяти
Фаззинг оперативной памяти: что и почему?
Необходимая базовая информация
Так все-таки что такое фаззинг оперативной памяти?
Объекты
Методы: ввод цикла изменений
Методы: моментальное возобновление изменений
Скорость тестирования и глубина процессов
Обнаружение ошибок
Резюме
Глава 20. Фаззинг оперативной памяти: автоматизация
Необходимый набор свойств
Выбор языка
Программный интерфейс отладчика Windows
Собрать все воедино
Каким образом мы реализуем необходимость перехвата объектного процесса в определенных точках?
Каким образом мы будем обрабатывать и восстанавливать моментальные снимки?
Каким образом мы будем выбирать точки для перехвата?
Каким образом мы будем размещать и видоизменять область памяти объекта?
PyDbg, ваш новый лучший друг
Надуманный пример
Резюме
Часть III. Расширенные технологии фаззинга
Глава 21. Интегрированные среды фаззинга
Что такое интегрированная среда фаззинга?
Существующие интегрированные среды
Antiparser
Dfuz
SPIKE
Peach
Фаззер общего назначения
Autodafe?
Учебный пример пользовательского фаззера: Shockwave Flash
Моделирование файлов SWF
Генерация достоверных данных
Среда фаззинга
Методологии тестирования
Sulley: интегрированная среда фаззинга
Структура каталога Sulley
Представление данных
Сессия
Постпрограмма
Полный критический анализ
Резюме
Глава 22. Автоматический анализ протокола
В чем же дело?
Эвристические методы
Прокси-фаззинг
Улучшенный прокси-фаззинг
Дизассемблирующая эвристика
Биоинформатика
Генетические алгоритмы
Резюме
Глава 23. Фаззинговый трекинг
Что же именно мы отслеживаем?
Бинарная визуализация и базовые блоки
CFG
Иллюстрация к CFG
Архитектура фаззингового трекера
Профилирование
Слежение
Перекрестная ссылочность
Анализ инструментов охвата кода
Обзор PStalker Layout
Исходные данные
Исследование данных
Захват данных
Ограничения
Хранение данных
Учебный пример
Стратегия
Тактика
Достижения и будущие улучшения
Будущие улучшения
Резюме
Глава 24. Интеллектуальное обнаружение ошибок
Простейшее обнаружение ошибок
Чего мы хотим?
Замечание о выборе значений
Автоматизированный отладочный мониторинг
Базовый отладочный монитор
Продвинутый отладочный монитор
Исключения: первое и последнее предупреждения
Динамический бинарный инструментарий
Резюме
Часть IV. Забегая вперед
Глава 25. Извлеченные уроки
Жизненный цикл разработки ПО
Анализ
Планирование
Построение
Тестирование
Отладка
Применение фаззинга в SDLC
Разработчики
Контролеры качества
Исследователи безопасности
Резюме
Глава 26. Забегая вперед
Коммерческие инструменты
beSTORM от Beyond Security
BPS-1000 от BreakingPoint Systems
Codenomicon
GLEG ProtoVer Professional
Mu Security Mu-4000
Security Innovation Holodeck
Гибридные подходы к обнаружению уязвимостей
Совмещенные платформы для тестирования
Резюме
Алфавитный указатель