RUSSIAN

Sockets, Shellcode, Porting, and Coding: Reverse Engineering Exploits and Tool Coding for Security Professionals

Book information

Publisher
Syngress
Year
2005
Language
russian
Format
PDF
Filesize
3 MB (3564999 bytes)
Edition
Illustrated
Pages
696\784
Time added
2020-09-13 20:25:23

Description

The book is logically divided into 5 main categories with each category representing a major skill set required by most security professionals: 1. Coding - The ability to program and script is quickly becoming a mainstream requirement for just about everyone in the security industry. This section covers the basics in coding complemented with a slue of programming tips and tricks in C/C++, Java, Perl and NASL. 2. Sockets - The technology that allows programs and scripts to communicate over a network is sockets. Even though the theory remains the same - communication over TCP and UDP, sockets are implemented differently in nearly ever language. 3. Shellcode - Shellcode, commonly defined as bytecode converted from Assembly, is utilized to execute commands on remote systems via direct memory access. 4. Porting - Due to the differences between operating platforms and language implementations on those platforms, it is a common practice to modify an original body of code to work on a different platforms. This technique is known as porting and is incredible useful in the real world environments since it allows you to not 'recreate the wheel' 5. Coding Tools - The culmination of the previous four sections, coding tools brings all of the techniques that you have learned to the forefront. With the background technologies and techniques you will now be able to code quick utilities that will not only make you more productive, they will arm you with an extremely valuable skill that will remain with you as long as you make the proper time and effort dedications. Благодарности Об авторе Об основном соавторе Прочие соавторы, редакторы и авторы кода Об авторе предисловия Предисловие Наступит ли «судный день»? Глава 1. Написание безопасных программ Введение C/C++ Характеристики языка Язык С Язык C++ Безопасность Пример «Здравствуй, мир!» Типы данных Классы (только C++) Пример: ряды Фурье Язык Java Характеристики языка Объектно-ориентированные возможности Платформенная независимость Многопоточность Безопасность Дополнительные возможности Пример «Здравствуй, мир!» Типы данных Поток управления Методы Классы Получение заголовков HTTP Язык C# Основания для перехода на C# Характеристики языка Объектно-ориентированные возможности Прочие возможности Безопасность Пример «Здравствуй, мир!» на языке C# Типы данных Поток управления Методы Классы Потоки в языке C# Пример: разбор IP-адреса, заданного в командной строке Язык Perl Типы данных Операторы Пример Perl-сценария Анализ Специальные переменные Сопоставление с образцом и подстановка Модификаторы регулярных выражений Канонические инструменты, написанные на Perl Я умею писать на Perl! Каноническая атака на Web-сервер Анализ Утилита модификации файла протокола Результат выполнения Анализ Язык Python Пакет InlineEgg Анализ Анализ Резюме Обзор изложенного материала Ссылки на сайты Часто задаваемые вопросы Глава 2. Язык сценариев NASL Введение История Назначение NASL Простота и удобство Модульность и эффективность Безопасность Ограничения NASL Синтаксис языка NASL Комментарии Пример правильного комментария Примеры неправильных комментариев Переменные Целые числа Строки Массивы NULL Булевские величины Операторы Операторы вне категории Операторы сравнения Арифметические операторы Операторы работы со строками Логические операторы Побитовые операторы Операторы составного присваивания в стиле C Управляющие конструкции Инструкции if Циклы for Циклы foreach Циклы while Циклы repeat-until Инструкция break Пользовательские функции Встроенные функции Инструкция return Написание сценариев на языке NASL Написание сценариев для личного пользования Сетевые функции Функции, связанные с протоколом HTTP Функции манипулирования пакетами Функции манипулирования строками Криптографические функции Интерпретатор команд NASL Пример Программирование в среде Nessus Описательные функции Функции, относящиеся к базе знаний Функции извещения о результатах работы Пример Пример: канонический сценарий на языке NASL Перенос на язык NASL и наоборот Логический анализ Логическая структура программы Псевдокод Перенос на NASL Перенос на NASL с C/C++ Перенос с языка NASL Резюме Обзор изложенного материала Ссылки на сайты Часто задаваемые вопросы Глава 3. BSD-сокеты Введение Введение в программирование BSD-сокетов Клиенты и серверы для протокола TCP Компиляция Пример выполнения Анализ Компиляция Пример выполнения Анализ Анализ Клиенты и серверы для протокола UDP Компиляция Пример исполнения Анализ Компиляция Пример исполнения Анализ Компиляция Пример исполнения Анализ Компиляция Пример исполнения Анализ Опции сокетов Анализ Сканирование сети с помощью UDP-сокетов Компиляция Пример исполнения Анализ Сканирование сети с помощью TCP-сокетов Компиляция Пример исполнения Анализ Многопоточность и параллелизм Резюме Обзор изложенного материала Ссылки на сайты Часто задаваемые вопросы Глава 4. Сокеты на платформе Windows (Winsock) Введение Обзор Winsock Winsock 2.0 Компоновка с использованием Visual Studio 6.0 Задание компоновки в исходном коде Анализ Пример: скачивание Web-страницы с помощью WinSock Анализ Программирование клиентских приложений Анализ Программирование серверных приложений Анализ Написание эксплойтов и программ для проверки наличия уязвимостей Анализ Анализ Резюме Обзор изложенного материала Ссылки на сайты Часто задаваемые вопросы Глава 5. Сокеты в языке Java Введение Обзор протоколов TCP/IP TCP-клиенты Компиляция Пример выполнения Анализ Разрешение IP-адресов и доменных имен Пример выполнения Анализ Пример выполнения Анализ Ввод/вывод текста: класс LineNumberReader Компиляция Пример выполнения Анализ TCP-серверы Компиляция Пример выполнения Анализ Использование Web-браузера для соединения с сервером TCPServer1 Работа с несколькими соединениями Компиляция Пример выполнения Анализ Программа WormCatcher Компиляция Пример выполнения Анализ Клиенты и серверы для протокола UDP Компиляция Пример выполнения Анализ Резюме Обзор изложенного материала Часто задаваемые вопросы Глава 6. Написание переносимых программ Введение Рекомендации по переносу программ между платформами UNIX и Microsoft Windows Директивы препроцессора Использование директив #ifdef Определение операционной системы Пример исполнения Анализ Порядок байтов Пример исполнения Анализ Создание и завершение процессов Системный вызов exec Пример исполнения Анализ Пример исполнения Анализ Пример исполнения Анализ Системный вызов fork Системный вызов exit Многопоточность Создание потока Пример исполнения Анализ Пример исполнения Анализ Синхронизация потоков Пример исполнения Анализ Пример исполнения Анализ Сигналы Анализ Анализ Работа с файлами Анализ Анализ Работа с каталогами Анализ Анализ Анализ Библиотеки Динамическая загрузка библиотек Анализ Анализ Программирование демонов и Win32-сервисов Пример исполнения Анализ Анализ Управление памятью Анализ Обработка аргументов, заданных в командной строке Анализ Анализ Пример исполнения Анализ Целочисленные типы данных Анализ Резюме Обзор изложенного материала Часто задаваемые вопросы Глава 7. Написание переносимых сетевых программ Введение BSD-сокеты и Winsock Требования спецификации Winsock Анализ Подлежащие переносу компоненты Возвращаемые значения Анализ Анализ Анализ Расширенная информация об ошибках Анализ API Расширения, определенные в Winsock 2.0 Функции read() и write() Функция socket() Анализ Функция connect() Анализ Функция bind() Анализ Функция listen() Анализ Функция accept() Анализ Функция select() Анализ Функции send() и sendto() Анализ Функции recv() и recvfrom() Анализ Функции close() и closesocket() Анализ Функция setsockopt() Анализ Функции ioctl() и ioctlsocket() Анализ Простые сокеты Обзор API Заголовочные файлы Заголовок IPv4 Заголовок ICMP Заголовок UDP Заголовок TCP Определение локального IP-адреса Запрос у пользователя Перечисление интерфейсов Пример исполнения Анализ Библиотеки pcap и WinPcap Пример исполнения Анализ Резюме Обзор изложенного материала Часто задаваемые вопросы Глава 8. Написание shell-кода I Введение Что такое shell-код? Инструменты Язык ассемблера Анализ Анализ Анализ Ассемблер в Windows и UNIX Проблема адресации Применение команд call и jmp Анализ Анализ Заталкивание аргументов в стек Проблема нулевого байта Реализация системных вызовов Номера системных вызовов Аргументы системных вызовов Анализ Анализ Анализ Значение, возвращаемое системным вызовом Внедрение shell-кода в удаленную программу Shell-код для привязки к порту Анализ Shell-код для использования существующего дескриптора сокета Анализ Внедрение shell-кода в локальную программу Shell-код, выполняющий execve Shell-код, выполняющий setuid Shell-код, выполняющий chroot Написание shell-кода для Windows Резюме Обзор изложенного материала Ссылки на сайты Списки рассылки Часто задаваемые вопросы Глава 9. Написание shell-кода II Введение Примеры shell-кодов Системный вызов write Анализ Анализ Системный вызов execve Анализ Анализ Анализ Анализ Анализ Анализ Shell-код для привязки к порту Анализ Системный вызов socket Анализ Системный вызов bind Анализ Системный вызов listen Анализ Системный вызов accept Анализ Системный вызов dup2 Анализ Системный вызов execve Анализ Анализ Shell-код для обратного соединения Анализ Shell-код для повторного использования сокета Анализ Повторное использование файловых дескрипторов Анализ Анализ Анализ Анализ Анализ Анализ Анализ Кодирование shell-кода Анализ Анализ Анализ Повторное использование переменных программы Программы с открытыми исходными текстами Анализ Программы с недоступными исходными текстами Анализ Анализ Shell-код, работающий в разных ОС Анализ Как разобраться в работе готового shell-кода? Анализ Резюме Обзор изложенного материала Ссылка на сайты Списки рассылки Часто задаваемые вопросы Глава 10. Написание эксплойтов I Введение Обнаружение уязвимостей Эксплойты для атаки на локальные и удаленные программы Анализ Атаки на форматную строку Форматные строки Анализ Анализ Исправление ошибки из-за некорректного использования форматной строки Пример: уязвимость xlockmore вследствие задания пользователем форматной строки (CVE-2000-0763) Детали уязвимости Детали эксплойта Анализ Уязвимости TCP/IP Гонки Гонки, связанные с файлами Гонки, связанные с сигналами Пример: ошибка в программе man при контроле входных данных Детали уязвимости Резюме Обзор изложенного материала Ссылки на сайты Часто задаваемые вопросы Глава 11. Написание эксплойтов II Введение Программирование сокетов и привязки к порту в эксплойтах Программирование клиентских сокетов Анализ Анализ Программирование серверных сокетов Анализ Эксплойты для переполнения стека Организация памяти Переполнение стека Поиск поддающихся эксплуатации переполнений стека в программах с открытыми исходными текстами Пример: переполнение XLOCALEDIR в X11R6 4.2 Описание уязвимости Эксплойт Вывод Поиск переполнений стека в программах с недоступными исходными текстами Эксплойты для затирания кучи Реализация Дуга Леа Анализ Пример: уязвимость, связанная с переполнением буфера из-за неправильно сформированного клиентского ключа в OpenSSL SSLv2, CAN-2002-0656 Описание уязвимости Описание эксплойта Трудности Усовершенствование эксплойта Вывод Код эксплойта для переполнения буфера из-за неправильно сформированного клиентского ключа в OpenSSL SSLv2 Реализация malloc в ОС System V Анализ Анализ Эксплойты для ошибок при работе с целыми числами Переполнение целого числа Анализ Анализ Обход проверки размера Анализ Анализ Другие ошибки, связанные с целыми числами Пример: уязвимость OpenSSH из-за переполнения целого в процедуре оклика/отзыва CVE-2002-0639 Детали уязвимости Детали эксплойта Пример: уязвимость в UW POP2, связанная с переполнением буфера, CVE-1999-0920 Детали уязвимости Резюме Обзор изложенного материала Ссылки на сайты Часто задаваемые вопросы Глава 12. Написание эксплойтов III Введение Использование каркаса Metasploit Framework Разработка эксплойтов с помощью каркаса Metasploit Определение вектора атаки Нахождение смещения Выбор вектора управления Вычисление адреса возврата Использование адреса возврата Определение недопустимых символов Определение ограничений на размер Дорожка из NOP-команд Выбор полезной нагрузки и кодировщика Интегрирование эксплойта в каркас Внутреннее устройство каркаса Анализ существующего модуля эксплойта Переопределение методов Резюме Обзор изложенного материала Ссылки на сайты Часто задаваемые вопросы Глава 13. Написание компонентов для задач, связанных с безопасностью Введение Модель COM COM-объекты COM-интерфейсы Интерфейс IUnknown Соглашение о вызове Среда исполнения COM Реализация COM-объекта Регистрация COM-объекта Ключ HKEY_CLASSES_ROOT\CLSID Ключ HKEY_CLASSES_ROOT\CLSID\ {xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx} Ключ InprocServer32 Ключ LocalServer32 Реализация внутрипроцессного сервера Функция DllGetClassObject Функция DllCanUnloadNow Функция DllRegisterServer Функция DllUnregisterServer Библиотека ATL Шаблоны в языке C++ Технология реализации клиента с помощью ATL Интеллектуальные указатели Поддержка типов данных Тип данных BSTR Тип данных VARIANT Технология реализации сервера с помощью ATL Композиция классов Язык определения интерфейсов Регистрация класса Реализация внутрипроцессного COM-сервера Глобальная переменная _AtlModule Функции, экспортируемые из DLL Точка входа в модуль Реализация внепроцессного COM-сервера Глобальная переменная _AtlModule Точка входа в модуль Атрибуты ATL Атрибут module Атрибут interface Атрибут coclass Компиляция COM-сервера Добавление COM-расширений в программу RPCDUMP Анализ Поток управления Анализ Процедуры интеграции с приложением Анализ Определение интерфейсов COM-объектов Интерфейс IRpcEnum Интерфейс IEndPointCollection Интерфейс IEndPoint Классы компонентов Анализ Анализ Анализ Интеграция с приложением: файл COMSupport.h Анализ Интеграция с приложением: файл RPCDump.c Анализ Резюме Обзор изложенного материала Ссылки на сайты Часто задаваемые вопросы Глава 14. Создание инструмента для проверки уязвимости Web-приложения Введение Проектирование Формат сигнатуры атаки Сигнатуры Углубленный анализ Сокеты и отправка сигнатуры Анализ Разбор базы данных Анализ Анализ Заголовочные файлы Компиляция Выполнение Справка о программе Результаты работы Резюме Обзор изложенного материала Ссылки на сайты Часто задаваемые вопросы Приложение А. Глоссарий Приложение В. Полезные программы для обеспечения безопасности Проверка исходных текстов Инструменты для генерирования shell-кода Отладчики Компиляторы Эмуляторы аппаратуры Библиотеки Анализ уязвимостей Анализаторы сетевого трафика Генераторы пакетов Сканеры Приложение С. Архивы эксплойтов Архивы эксплойтов в Интернете Приложение D. Краткий справочник по системным вызовам exit (int ) open (file, flags, mode) close (дескриптор файла) read (дескритор файла, указатель на буфер, число байтов) write (дескритор файла, указатель на буфер, число байтов) execve (файл, файл + аргументы, переменные окружения) socketcall (номер функции, аргументы) socket (адресное семейство, тип, протокол) bind (дескриптор сокета, структура sockaddr, размер второго аргумента) listen (дескриптор сокета, максимальный размер очереди соединений) accept (дескриптор сокета, структура sockaddr, размер второго аргумента) Приложение Е. Справочник по преобразованию данных Предметный указатель

Similar books