Благодарности | XI |
Об авторах | XII |
|
Глава 1 Разработка эксплойтов и средств обеспечения безопасности | 1 |
Введение | 1 |
Безопасность программного обеспечения | 2 |
В программах Microsoft тоже есть ошибки! | 3 |
Увеличение числа используемых уязвимостей | 5 |
Эксплойты и переполнения буфера | 6 |
Сайт Мадонны взломан! | 7 |
Определения | 8 |
Аппаратное обеспечение | 8 |
Программное обеспечение | 8 |
Безопасность | 13 |
Заключение | 14 |
Ссылки и рассылки | 15 |
Вопросы и ответы | 15 |
|
Глава 2 Язык ассемблера и шелл-код | 17 |
Введение | 17 |
Основы ассемблера архитектуры IA32 | 18 |
Регистры | 18 |
Данные | 20 |
Инструкции | 21 |
Представление о шелл-коде | 24 |
Определение адреса | 25 |
Использование нулевого байта | 26 |
Системные вызовы | 27 |
Удалённые шелл-коды | 29 |
Локальные шелл-коды | 32 |
Использование шелл-кодов | 37 |
Системный вызов write | 39 |
Системный вызов execve | 43 |
Привязывающий шелл-код | 48 |
Обратный шелл-код | 57 |
Использование существующих сокетов | 59 |
Использование существующих файловых дескрипторов | 61 |
Шифрование шелл-кода | 66 |
Использование переменных атакуемой программы | 69 |
Заключение | 72 |
Ссылки и рассылки | 74 |
Вопросы и ответы | 74 |
|
Глава 3 Использование уязвимостей: стек | 77 |
Введение | 77 |
Основы архитектуры Intel IA32 | 78 |
Распределение памяти процесса | 78 |
Структура стека | 81 |
Стековый кадр | 82 |
Использование переполнения стека | 93 |
Программа с переполнением буфера | 94 |
Общее представление об эксплойте | 95 |
Внедрение данных в буфер | 96 |
Изменение адреса возврата | 96 |
Разработка шелл-кода | 99 |
Разработка эксплойта | 99 |
Использование интерпретатора Perl | 102 |
Однобайтовое переполнение | 102 |
Функции, способные привести к переполнению буфера | 107 |
Функции gets и fgets | 107 |
Функции strcpy и strncpy, strcat и strncat | 107 |
Функции (v)sprintf и (v)snprintf | 108 |
Функции sscanf, vscanf и fscanf | 109 |
Другие функции | 109 |
Обнаружение возможных переполнений стека | 110 |
Лексический анализ | 111 |
Семантические анализаторы | 113 |
Защита приложений | 114 |
Анализ: однобайтовое переполнение в демоне протокола FTP под OpenBSD 2.8 | 114 |
Анализ: переполнение буфера в файле htpasswd.c сервера Apache | 115 |
Заключение | 116 |
Ссылки и рассылки | 117 |
Вопросы и ответы | 118 |
|
Глава 4 Использование уязвимостей: куча | 119 |
Введение | 119 |
Простое переполнение кучи | 119 |
Использование кучи: функции malloc, calloc, realloc | 120 |
Простое переполнение кучи и переполнение в сегменте bcc | 121 |
Подмена указателей на функции в C++ | 123 |
Функция malloc в Linux | 125 |
Организация кучи | 126 |
Алгоритм функции free | 129 |
Подставные участки | 130 |
Пример уязвимой программы | 132 |
Использование уязвимостей с помощью макроса frontlink | 134 |
Одно- и пятибайтовое переполнения | 135 |
Функция malloc в System V | 135 |
Структура дерева | 136 |
Освобождение памяти | 138 |
Создание подставного участка | 141 |
Защита приложений | 143 |
Заключение | 145 |
Ссылки и рассылки | 145 |
Вопросы и ответы | 146 |
|
Глава 5 Использование уязвимостей: форматные строки | 147 |
Введение | 147 |
Что такое форматная строка? | 148 |
Функции с переменным количеством аргументов | 148 |
Форматированный вывод | 150 |
Применение форматных строк | 152 |
Функция printf | 152 |
Типы спецификаторов | 152 |
Неправильное использование форматных строк | 153 |
Анализ: уязвимость WU-FTPD | 155 |
Отказ в обслуживании | 155 |
Чтение памяти | 155 |
Запись в память | 157 |
Использование ошибок форматных строк | 161 |
Поиск ошибок форматной строки | 161 |
Использование специальных структур в памяти | 163 |
Специфика использования уязвимостей в различных системах | 168 |
Защита приложений | 169 |
Заключение | 170 |
Ссылки и рассылки | 171 |
Вопросы и ответы | 171 |
|
Глава 6 Разработка эксплойтов: часть I | 173 |
Введение | 173 |
Удалённые и локальные эксплойты | 174 |
Уязвимости форматной строки | 175 |
Анализ: уязвимость форматной строки в утилите xlock (CVE-2000-0763) | 175 |
Уязвимости TCP/IP | 177 |
Анализ: атака отказа в обслуживании land.c (CVE-1999-0016) | 179 |
Ситуации конкуренции | 181 |
Конкуренция за файл | 181 |
Конкуренция за сигнал | 182 |
Анализ: ошибка проверки входных данных в утилите man | 183 |
Заключение | 185 |
Ссылки и рассылки | 185 |
Вопросы и ответы | 185 |
|
Глава 7 Разработка эксплойтов: часть II | 187 |
Введение | 187 |
Сокеты и привязывание к порту | 188 |
Программирование на стороне клиента | 188 |
Программирование на стороне сервера | 189 |
Переполнения буфера | 190 |
Анализ: уязвимость XLOCALEDIR в библиотеках XI1R6 | 190 |
Анализ: уязвимость SSL_SESSION в библиотеке OpenSSL (CAN-2002-0656) | 193 |
Целочисленные ошибки | 200 |
Переполнение | 200 |
Обход проверки | 202 |
Другие целочисленные ошибки | 203 |
Анализ: целочисленное переполнение при аутентификации | |
в OpenSSH (CVE-2002-0639) | 203 |
Анализ: переполнение буфера в сервере РОР2 Вашингтонского | |
университета (CVE-1999-0920) | 206 |
Заключение | 212 |
Ссылки и рассылки | 213 |
Вопросы и ответы | 213 |
|
Глава 8 Программирование для Ethereal | 215 |
Введение | 215 |
Библиотека libpcap | 215 |
Открытие сетевого интерфейса | 216 |
Захват пакетов | 216 |
Сохранение пакетов в файле | 219 |
Библиотека wiretap | 219 |
Разбор формата файла пакетов | 220 |
Добавление модуля | 229 |
Добавление диссектора | 238 |
Программирование диссектора | 240 |
Расширенные возможности | 247 |
Добавление перехватчика | 251 |
Программирование перехватчика | 253 |
Создание перехватчика для графического интерфейса | 260 |
Заключение | 265 |
Ссылки и рассылки | 266 |
Вопросы и ответы | 266 |
|
Глава 9 Программирование для Nessus | 267 |
Введение | 267 |
Цели языка NASL | 267 |
Простота и удобство | 268 |
Модульность и эффективность | 268 |
Безопасность | 268 |
Ограничения | 269 |
Синтаксис сценариев | 269 |
Комментарии | 269 |
Переменные | 269 |
Операторы | 271 |
Управляющие структуры | 274 |
Разработка сценариев | 277 |
Разработка собственных сценариев | 278 |
Программирование в среде Nessus | 280 |
Перенос сценариев на язык NASL и с него | 285 |
Анализ логики программы | 285 |
Примеры сценариев | 292 |
Анализ: уязвимость переполнения буфера при обработке расширения .htr |
сервером Microsoft IIS (СVE-2002-0071) | 292 |
Анализ: доступ к произвольным файлам из-за уязвимости в Microsoft IIS |
и Site Server | 296 |
Анализ: подбор паролей Microsoft SQL Server простым перебором | 297 |
Анализ: уязвимость переполнения буфера в библиотеке perlIIS.dll | 303 |
Анализ: уязвимость межсайтового скриптинга в Microsoft FrontPage Extensions | 306 |
Заключение | 309 |
Ссылки и рассылки | 310 |
Вопросы и ответы | 311 |
|
Глава 10 Использование Metasploit Framework: часть I | 312 |
Введение | 312 |
Интерфейс msfweb | 313 |
Интерфейс msfconsole | 322 |
Запуск интерфейса | 323 |
Команды общего назначения | 323 |
Среда окружения MSF | 324 |
Запуск эксплойтов | 328 |
Интерфейс msfcli | 333 |
Обновление Metasploit Framework | 338 |
Заключение | 339 |
Ссылки и рассылки | 339 |
Вопросы и ответы | 340 |
|
Глава 11 Использование Metasploit Framework: часть II | 341 |
Введение | 341 |
Разработка эксплойтов | 341 |
Определение вектора атаки | 342 |
Определение смещения | 342 |
Выбор вектора управления | 347 |
Определение адреса возврата | 350 |
Использование адреса возврата | 354 |
Определение допустимых символов | 356 |
Определение допустимого размера | 356 |
Использование инструкций мусора | 358 |
Выбор шелл-кода и шифратора | 359 |
Встраивание эксплойтов | 368 |
Устройство интегрированной среды | 369 |
Анализ существующего модуля эксплойта | 370 |
Переопределение методов | 374 |
Заключение | 375 |
Вопросы и ответы | 375 |
|
Глава 12 Использование Metasploit Framework: часть III | 377 |
Введение | 377 |
Расширенные возможности MSF | 377 |
Шелл-коды InlineEgg | 377 |
Технология Impurity: внедрение файла в формате ELF | 380 |
Цепочки прокси-серверов | 380 |
Шелл-коды UploadExec для Win32 | 381 |
Шелл-коды внедрения библиотек DLL для Win32 | 381 |
Шелл-коды PassiveX | 384 |
Meterpreter | 385 |
Разработка расширений Meterpreter | 388 |
Расширение Sys | 389 |
Расширение SAM | 397 |
Заключение | 417 |
Ссылки и рассылки | 418 |
Вопросы и ответы | 418 |