zВведение 1
Необходимые знания 2
Серия "Программирование боевого софта" 4
Связь с автором 4
ЧАСТЬ I. ИНСТРУМЕНТАРИЙ РАЗРАБОТЧИКА БОЕВОГО СОФТА 7
Глава 1. Основные инструменты 7
1.1. Утилита gdb 8
1.2. Утилита ifconfig 12
1.3. Утилита netstat 15
1.4. Утилита lsof 20
1.5. Утилита tcpdump 21
1.5.1. Опции командной строки 21
1.5.2. Формат выходной информации tcpdump 22
Глава 2. Дополнительные инструменты 24
2.1. Утилита time 24
2.2. Утилита gprof 25
2.3. Утилита ctags 25
2.4. Утилита strace 26
2.5. Утилита ltrace 26
2.6. Утилита mtrace 26
2.7. Утилиты make/gmake 27
2.8. Утилиты automake/autoconf 28
2.9. Утилита ldd 29
2.10. Утилита objdump 29
2.11. Утилиты hexdump и od 29
2.12. Утилита strings 29
2.13. Утилита readelf 29
2.14. Утилита size 30
2.15. Утилита nm 30
2.16. Утилита strip 30
2.17. Утилита file 30
2.18. Утилиты ipcs и ipcrm 31
2.19. Утилиты ar и ranlib 31
2.20. Утилита arp 32
ЧАСТЬ II. СЕТЕВОЙ БОЕВОЙ СОФТ 33
Глава 3. Введение в сетевое программирование 35
3.1. Стек протоколов TCP/IP 35
3.2. RFC — главный источник информации 37
3.3. Пакеты и инкапсуляция 38
3.4. Структуры заголовков сетевых пакетов 41
3.4.1. Ethernet-заголовок 43
3.4.2. IP-заголовок 44
3.4.3. ARP-заголовок 46
3.4.4. TCP-заголовок 47
3.4.5. UDP-заголовок 49
3.4.6. ICMP-заголовок 49
3.5. Сокеты 52
3.5.1. Дейтаграммные и потоковые сокеты (доступ к транспортному уровню) 52
3.5.2. Raw-сокеты (доступ к сетевому уровню) 52
3.5.3. Пакетные сокеты (доступ к канальному уровню) 54
3.6. Контрольная сумма в заголовках сетевых пакетов 56
3.7. Нестандартные библиотеки 59
Глава 4. Утилита ping 61
4.1. Общие принципы работы ping 61
4.2. Реализация утилиты ping 64
Глава 5. Утилита traceroute 75
5.1. Реализация traceroute с использованием дейтаграммного сокета 76
5.2. Реализация traceroute с использованием raw-сокета 85
Глава 6. Утилиты для реализации DoS-атак и подделка обратного адреса в пакетах (IP-spoofing) 87
6.1. DoS-атаки, направленные на истощение ресурсов сети 88
6.1.1. ICMP-flooding и Smurf 88
6.1.2. UDP-storm и Fraggle 96
6.2. DoS-атаки, направленные на истощение ресурсов узла 102
6.2.1. SYN-flooding и Land 102
6.3. DoS-атаки, вызывающие аварию или сбой в работе узла из-за ошибок в его программном обеспечении 103
6.3.1. Out of Band (00В) 104
6.3.2. Teardrop 104
6.3.3. Ping of Death 105
6.4. Распределенные DoS-атаки (DDoS) 107
Глава 7. Порт-сканер (port-scanner) 109
7.1. TCP-сканирование подключением (TCP connect scan) 110
7.2. SYN-, FIN-, X-mas-, Null- и ACK-сканирование 112
7.3. UDP-сканирование (UDP scan) 119
7.4. Многопоточный порт-сканер 123
7.5. Порт-сканер на неблокируемых сокетах 127
7.6. Активное исследование стека TCP/IP (stack fingerprinting) 134
Глава 8. CGI-сканер (CGI-scanner) 136
8.1. Принцип работы и реализация CGI-сканера 137
8.2. Некоторые рекомендации для улучшения возможностей CGI-сканера 144
8.2.1. Обход систем IDS 144
8.2.2. Работа с SOCKS прокси-серверами 145
Глава 9. Снифферы (sniffers) 149
9.1. Пассивные снифферы 149
9.1.1. Пассивный сниффер с использованием пакетного фильтра BSD (BPF) 158
9.1.1.1. Язык псевдоассемблера BPF 159
9.1.1.2. Пример программной реализации пакетного фильтра 163
9.1.2. Сниффер с использованием библиотеки libpcap 168
9.1.2.1. Идентификация сетевого интерфейса 169
9.1.2.2. Открытие сетевого интерфейса и создание сессии перехвата 171
9.1.2.3. Создание фильтра 172
9.1.2.4. Захват и обработка пакетов 174
9.1.2.5. Закрытие сессии перехвата 175
9.2. Активные снифферы 176
9.2.1. ARP-spoofer без использования библиотеки libnet 179
9.2.2. ARP-spoofer с использованием библиотеки libnet 184
9.2.2.1. Инициализация сеанса libnet 185
9.2.2.2. Формирование пакета 186
9.2.2.3. Отправка пакета 188
9.2.2.4. Закрытие сессии 188
Глава 10. Переборщики паролей (bruteforcers) 190
10.1. Локальный перебор 191
10.1.1. Перебор по словарю 191
10.1.2. Последовательный перебор 194
10.2. Удаленный перебор 195
10.2.1. Базовая HTTP-аутентификация 196
10.2.2. Переборщик паролей с поддержкой SSL 202
10.2.3. Переборщик паролей с поддержкой SSH 203
Глава 11. Трояны и бекдоры (trojans and backdoors) 206
11.1. Локальные бекдоры 206
11.2. Удаленные бекдоры 208
11.2.1. "Bind Shell" бекдор 208
11.2.2. "Connect Back" бекдор 210
11.2.3. Wakeup-бекдор 212
ЧАСТЬ III. ЭКСПЛОИТЫ 219
Глава 12. Общие сведения 221
12.1. Термины и определения 221
12.2. Структура памяти процесса 224
12.3. Понятие буфера и его переполнение 229
12.4. Бит SUID 230
12.5. Синтаксис AT&T 230
12.6. StackGuard, FormatGuard, Heap protection 231
Глава 13. Локальные эксплоиты (local exploits) 232
13.1. Переполнение буфера в стеке 232
13.1.1. Кадры стека 232
13.1.2. Пример уязвимой программы 234
13.1.3. Создание шеллкода 235
13.1.4. Построение эксплоита 247
13.1.4.1. Передача шеллкода через уязвимый буфер 247
13.1.4.2. Передача шеллкода через переменную окружения 252
13.1.4.3. Передача шеллкода через кучу 254
13.1.4.4. Эксплоит со встроенным переборщиком смещений 256
13.2. Переполнение буфера в .bss (BSS Overflow) 259
13.3. Уязвимость форматной строки (Format String Vulnerability) 262
13.3.1. Устройство форматной строки 263
13.3.2. Уязвимость форматной строки 269
13.3.3. Спецификатор формата %n и запись по произвольному адресу 271
13.3.4. Метод смещенной записи 277
13.3.5. Метод с использованием модификатора h 279
13.3.6. Автоматическое создание форматной строки 281
13.3.7. Секция .dtors 286
13.3.8. Глобальная таблица смещений GOT 288
13.3.9. Эксплоит форматной строки 289
13.4. Переполнение буфера в куче (Heap Overflow) 291
13.4.1. Стандартные функции для работы с кучей и пример уязвимости 292
13.4.2. Алгоритм распределения кучи Дуга Ли 294
13.4.3. Построение эксплоита 298
Глава 14. Удаленные эксплоиты 304
14.1. Пример уязвимой службы 304
14.2. DoS-эксплоит 307
14.3. Построение удаленного эксплоита 308
14.4. Удаленные шеллкоды 314
14.4.1. Port-Binding шеллкод 314
14.4.2. Reverse Connection шеллкод 323
14.4.3. Find шеллкод 324
14.4.4. Socket Reusing шеллкод 325
ЧАСТЬ IV. САМОРАЗМНОЖАЮЩИЙСЯ БОЕВОЙ СОФТ 327
Глава 15. Формат ELF-файлов 329
15.1. Организация исполняемого ELF-файла 329
15.2. Основные структуры ELF-файла 331
15.3. Исследование внутреннего устройства ELF-файла с помощью утилиты readelf 333
Глава 16. Вирусы 340
Глава 17. Черви 346
ЧАСТЬ V. ЛОКАЛЬНЫЙ БОЕВОЙ СОФТ 351
Глава 18. Введение в программирование модулей ядра 351
18.1. Модули в ядрах версии 2.4.x 351
18.2. Модули в ядрах версии 2.6.x 353
18.2.1. Нахождение адреса sys_call_table: первый способ 354
18.2.2. Нахождение адреса sys_call_table: второй способ 356
Глава 19. Лог-клинер (log-cleaner) 360
19.1. Устройство бинарных лог-файлов 361
19.2. Реализация лог-клинера (первый вариант) 365
19.3. Реализация лог-клинера (второй вариант) 369
Глава 20. Регистратор нажатия клавиш (keylogger) 371
Глава 21. Руткит (rootkit) 378
21.1. Скрытие модуля (Hide Itself) 380
21.2. Скрытие файлов (File Hider) 383
21.3. Скрытие каталогов (Directory Hider) и процессов (Process Hider) 386
21.4. Скрытие работающего сниффера (Sniffer Hider) 390
21.5. Скрытие информации от утилиты netstat (Hiding from netstat) 392
Приложение. Описание компакт-диска 395
Предметный указатель 397
VIII Оглавление VII Оглавление