Автор: Хогланд Г., Мак-Гроу Г.
2005.
Эта книга рассказывает о том, как взламывать программный код. Самым подробным образом, чем это было сделано когда-либо ранее, высококвалифицированные авторы расскажут о технологии проведения атак и взлома программного кола. Книга насыщена примерами кода из реальных программ атаки и исправлений, вносимых хакерами в популярные приложения. Читателям наглядно демонстрируется, как выявлять неизвестные уязвимые места в программном обеспечении и как можно их использовать для взлома компьютеров. Книга предназначена для профессионалов в области программного обеспечения и может использоваться как пособие для создания более безопасного кода.
Содержание
Предисловие. 14
Введение. 16
О чем эта книга. 16
Как пользоваться этой книгой. 18
Не слишком ли опасна эта информация? 18
Благодарности. 20
Благодарности Грега. 20
Благодарности Гари. 20
Глава 1. Программное обеспечение - источник всех проблем. 23
Краткая история программного обеспечения. 24
Ошибки в программах есть всегда. 31
Три основные проблемы. 34
Что такое безопасность программного обеспечения? 43
Резюме. 44
Глава 2. Шаблоны атак. 47
Классификация терминов. 48
Оценка открытости системы. 51
Ознакомление с технологией взлома. 57
Схемы атак, или планы злоумышленника. 63
Пример атаки: взломанный компилятор C++ от компании Microsoft. 65
Обозначения шаблонов атак. 75
Резюме. 76
Глава 3. Восстановление исходного кода и структуры программы. 77
Внутри программы. 78
Средства для восстановления исходного кода. 82
Методы для восстановления исходного кода. 83
Методы исследования. 88
Создание дополнительных модулей для IDA. 94
Декомпиляция и дизассемблирование программного обеспечения. 103
Декомпиляция на практике: восстановление исходного кода helpctr.exe. 104
Автоматизированный глобальный аудит для выявления уязвимых мест. 110
Создание собственных средств взлома. 117
Создание базового средства для охвата кода. 131
Резюме. 135
Глава 4. Взлом серверных приложений. 137
Доверие к входным данным. 138
Расширение привилегий. 140
Доверие на уровне привилегий процесса. 141
Кому нужны права администратора? 141
Привилегированные процессы, которые выполняют чтение данных из непроверенных источников. 142
Процессы, использующие привилегированные компоненты. 143
Поиск точек входа. 143
Поиск файлов для входных данных. 144
Трассировка входных данных. 145
Использование GDB и IDA-Pro по отношению к двоичному файлу SOLARIS/Sparc-программы. 145
Подключение к запущенному процессу. 146
Использование программы Truss для моделирования исследуемого процесса на платформе Solaris. 148
Использование доверительных отношений, созданных при настройке среды исполнения. 149
Поиск непосредственно исполняемых файлов. 150
Сведения о текущем рабочем каталоге. 150
Что делать, если Web-сервер не выполняет CGI-программы? 151
А как насчет неисполняемых файлов? 152
Использование правил политики. 153
Конкретные методы атак на серверные приложения. 154
Внедрение команд для командного интерпретатора. 154
Использование хакером каналов, портов и прав доступа. 166
Использование свойств файловой системы. 168
Использование переменных среды. 172
Использование внешних переменных. 173
Использование недостатков при аутентификации сеанса. 175
Подбор идентификаторов сеанса. 176
Альтернативные варианты аутентификации. 179
Вызов ошибки для проверки надежности кода обработки ошибки. 180
Резюме. 180
Глава 5. Взлом клиентских программ. 181
Клиентские программы в качестве цели атаки. 181
Сервер управляет клиентом. 182
Ловушка для хакера. 183
Служебные сигналы. 184
Старая (но актуальная) история. 184
Основные способы использования служебных символов. 186
Управление принтерами. 187
Управляющий код для систем Linux. 188
Проблема возврата. 189
Использование переносимых сценариев. 190
Использование атаки с возвратом для доверенных сайтов. 191
Клиентские сценарии и вредоносный код. 195
Поиск уязвимых локальных вызовов. 196
Web-браузеры и технология ActiveX. 200
Внесение данных в сообщения электронной почты. 202
Атаки с помощью вредоносного содержимого. 204
Контратака: переполнение буфера на стороне клиента. 206
Резюме. 207
Глава 6. Подготовка вредоносных данных. 209
Дилемма защитника. 211
Фильтры. 212
Взаимодействующие системы. 212
Обнаружение вторжений. 213
Различные типы систем обнаружения взлома. 213
Внесение обновлений для систем обнаружения вторжений. 215
Эффект альтернативного кодирования для систем IDS. 215
Исследование по частям. 217
Вернемся к Windows-программе APISPY. 218
Поиск ключевых мест в коде. 219
Трассировка. 219
Обратная трассировка из уязвимого места. 220
Тупиковые пути. 222
Трассировка во время выполнения программы. 223
Быстрые остановы. 225
Отслеживание данных в буфере. 226
"Ход конем". 227
Точки останова для страниц памяти. 227
Поиск по шаблону. 228
Восстановление кода анализатора. 228
Преобразование символов. 229
Байтовые операции. 229
Операции для работы с указателями. 230
Символы завершения строки NULL. 231
Восстановление исходного кода сервера I-Planet 6.0. 232
Ошибки при классификации. 236
Создание эквивалентных запросов. 237
Исследование на уровне функций API. 237
Посторонние символы. 238
Эквивалентные метасимволы. 240
Управляющие метасимволы. 240
Преобразование символов. 242
Скомбинированные атаки. 244
Искажение данных в файлах журналов. 245
Резюме. 245
Глава 7. Переполнение буфера. 247
Переполнение буфера. 247
Переполнение буфера в стеке для забавы и с пользой. 249
Искажение данных в памяти. 249
Вектор вторжения. 250
Где заканчивается вектор вторжения и начинается полезная нагрузка? 252
Выбор нужного адреса. 252
"Верхние" и "нижние" адреса памяти. 252
Прямой и обратный порядок байтов. 253
Использование регистров. 254
Использование существующего кода или блоков данных в памяти. 255
Переполнение буфера и встроенные системы. 255
Встроенные системы, используемые в военной и коммерческой сферах. 256
Переполнения буфера в системах управления базами данных. 258
Хранимые процедуры. 258
Программы с интерфейсом командной строки. 259
Клиентские программы базы данных. 259
Переполнение буфера и Java. 259
Совместное использование Java и C/C++. 260
Хранимые процедуры и библиотеки DLL. 261
Переполнения буфера в результате обработки содержимого файлов. 261
Атаки на переполнение буфера с помощью механизмов фильтрации и аудита транзакций. 264
Переполнение буфера с помощью переменных среды. 264
Проблема множественных операций. 266
Поиск возможностей для осуществления переполнения буфера. 266
Сокрытие ошибки при обработке исключений. 267
Использование дизассемблера. 267
Переполнение буфера в стеке. 268
Буферы фиксированного размера. 268
Функции, для которых не требуется наличие завершающего символа NULL. 270
Проблема завершающего символа NULL. 271
Перезапись фреймов обработчика исключений. 274
Арифметические ошибки при управлении памятью. 275
Отрицательные числа как большие положительные числа. 275
Несоответствие между знаковыми и беззнаковыми значениями. 277
Значения со знаком и управление памятью. 280
Уязвимые места, связанные со строкой форматирования. 283
Вывод данных из любой области памяти. 284
Спецификатор формата %п. 285
Спецификатор формата %00и. 286
Выявление проблемы в коде. 287
Переполнение буфера в куче. 288
Функция malloc и куча. 290
Переполнения буфера и программы на C++. 291
Таблицы vtable. 291
Вредоносные данные. 292
Сведения о размещении в памяти. 293
Размер полезной нагрузки. 294
Использование жестко закодированных вызовов функций. 294
Использование динамических таблиц переходов. 295
Определение раздела данных. 296
Защита с помощью XOR. 296
Использование контрольных сумм. 297
Полезная нагрузка для архитектуры RISC. 298
Отложенная передача управления. 298
Полезная нагрузка для архитектуры MIPS. 298
MIPS-команды. 298
Определение положения в памяти. 299
Как избежать нулевых байтов в машинном коде MIPS. 300
Системные вызовы на платформе MIPS. 301
Структура полезной нагрузки для платформы SPARC. 301
Окно регистров для платформы SPARC. 301
Использование стека на платформе SPARC. 303
Поиск вызовов функций на платформе SPARC. 305
Структура полезной нагрузки на платформе PA-RISC. 305
Использование стека на компьютерах PA-RISC. 306
Переполнение буфера на платформе HP/UX PA-RISC. 308
Операции ветвления на платформе PA-RISC. 308
"Трамплины" между областями памяти. 309
Информация о положении в памяти. 310
Саморасшифровывающаяся полезная нагрузка для платформы HP/UX. 312
Структура полезной нагрузки для платформы AIX/PowerPC. 313
Определение положения в памяти. 314
Защита для кода командного интерпретатора PowerPC. 314
Удаление символов NULL. 315
Полезная нагрузка для нескольких платформ. 316
Кроссплатформенные команды пор. 317
Код пролога и эпилога для защиты функций. 318
Устранение защиты с помощью сигнальных значений. 318
Успешная атака на неисполняемые стеки. 321
Резюме. 322
Глава 8. Наборы средств для взлома. 325
Вредоносные программы. 326
Что такое набор средств для взлома. 326
Что такое набор средств для взлома на уровне ядра. 326
Набор средств для взлома на уровне ядра и область надежного кода. 327
Простой набор средств для взлома на уровне ядра Windows XP. 327
Создание набора средств для взлома. 327
Контролируемая среда разработки. 328
Исходные файлы набора средств для взлома. 328
Инструменты разработки. 328
Драйверы с доступом на уровне ядра. 328
Основная структура драйвера. 329
Когда программы используют драйвер. 330
Возможность выгрузки драйвера. 330
Регистрация драйвера. 332
Использование функции SystemLoadAndCalllmage. 333
Перехват вызовов. 335
Сокрытие процесса. 336
Перехват системного вызова. 336
Схема перехвата вызова. 337
Удаление записи о процессе. 337
Альтернативное внедрение процесса. 340
Перенаправление данных с помощью "троянских" программ. 340
Перенаправление и недостатки Tripwire. 340
Драйвер для перенаправления. 341
Сокрытие файлов и каталогов. 344
Исправление двоичного кода. 346
"Замочная скважина" в программе. 347
Установка заплат в ядро Windows NT для блокировки всей системы защиты.
Аппаратный вирус.
Операции чтения и записи для энергонезависимой памяти. 358
Операции чтения и записи для памяти, встроенной в важнейшие устройства
Вирус CIH. 364
Память EEPROM и синхронизация. 366
Память EEPROM на сетевых адаптерах Ethernet. 367
Последовательная или параллельная память EEPROM. 369
Как сгорают аппаратные средства. 370
Производители. 370
Обнаружение устройств с помощью спецификации CFI. 371
Определение устройств с помощью режима ID или JEDEC ID. 372
Низкоуровневый доступ к диску. 373
Операции чтения/записи для главной загрузочной записи (MBR). 373
Искажение данных в образах компакт-дисков. 374
Добавление к драйверу возможности доступа по сети. 374
Использование библиотеки NDIS. 374
Перевод интерфейса в неразборчивый режим. 376
Обнаружение нужного сетевого адаптера. 377
Использовние тегов boron для обеспечения безопасности хакера. 380
Добавление интерактивного командного интерпретататора. 380
Прерывания. 381
Архитектура запросов на прерывание. 381
Перехват прерываний. 383
Загадка программируемого контроллера прерываний. 383
Регистрация нажатий клавиш. 384
Программа регистрации нажатий клавиш в Linux-системе. 385
Программа регистрации нажатий клавиш для Windows NT/2000/XP. 385
Контроллер клавиатуры. 386
Усовершенствованные возможности наборов средств для взлома. 386
Использование набора средств для взлома в качестве отладчика. 386
Отключение защиты системных файлов Windows. 387
Непосредственная запись данных в физическую память. 387
Переполнение буфера в ядре. 387
"Заражение" образа ядра. 388
Перенаправление исполнения. 388
Обнаружение наборов средств для взлома. 388
Резюме.
Взаимодействие по сети.
Рост масштаба сетей и глобальное подключение компьютеров к Internet привело к одновременному увеличению количества возможных атак, причем методы организации этих атак максимально упростились. Даже небольшие ошибки в программах стали очень быстро распространяться по всей сети и выводить из строя огромное количество компьютеров. Например, множество таких фактов приводится в списке рассылки СОМР.RISKS и в книге Computer-Related Risks (автор Нойманн, 1995).
Поскольку доступ по сети не требует непосредственного присутствия человека, то запуск автоматических атак осуществляется довольно просто. Автоматически запускаемые атаки изменили сам характер угроз в информационном мире. Рассмотрим первые формы хакинга. В 1975 году желающие выполнять бесплатные телефонные звонки могли воспользоваться устройством под названием Blue Box. Такие устройства продавались в студенческих городках, но еще нужно было найти продавца. Кроме того, эти устройства тоже стоили денег.
Таким образом, только ограниченный круг людей владел устройствами Blue Box и, поэтому угроза распространялась крайне медленно. Сравним это с нашим временем. Если обнаруживается уязвимое место, которое позволяет злоумышленникам получить доступ, например, к платным телепрограммам, то информация немедленно опубликовывается в Internet и за несколько часов миллионы людей могут загрузить себе программу атаки.
Бесплатно скачать электронную книгу в удобном формате, смотреть и читать:
Скачать книгу Взлом программного обеспечения, анализ и использование кода - Хогланд Г., Мак-Гроу Г. - fileskachat.com, быстрое и бесплатное скачивание.
Скачать pdf
Ниже можно купить эту книгу по лучшей цене со скидкой с доставкой по всей России.Купить эту книгу
Скачать книгу - Взлом программного обеспечения - Анализ и использование кода - Хогланд Г., Мак-Гроу Г. - depositfiles
Скачать книгу - Взлом программного обеспечения - Анализ и использование кода - Хогланд Г., Мак-Гроу Г. - letitbit
Дата публикации:
Хештеги: #книга по информатике :: #взлом программного обеспечения :: #Хогланд :: #Мак-Гроу
Смотрите также учебники, книги и учебные материалы:
Следующие учебники и книги:
- Секреты сканирования на ПК - Леонтьев Б.К.
- Информатика, учебник, Каймин
- Хакеры, взломщики и другие информационные убийцы - Борис Леонтьев
- Microsoft Word для студента - Рудикова Л.В.
Предыдущие статьи:
- Сети - Поиск неисправностей, поддержка и восстановление - Бигелоу С.
- Создаем школьный сайт в Интернете, элективный курс, учебное пособие, Монахов М.Ю., Воронин А.А.
- Базовый курс - Windows и Интернет - Методическое пособие
- Персональный компьютер для школьников: учебный курс - Кривич Е.Я.