Узнайте, чем может обернуться взлом вашей системы, прочитав эту, первую в своем роде, книгу о руткитах. Руткитом является любой комплект инструментов хакера, включая декомпиляторы, дизассемблеры, программы эмуляции ошибок, отладчики ядра и т. д. Эта книга описывает руткиты для Windows, хотя большинство концепций также подходят для других операционных систем, таких как LINUX. Основное внимание уделено руткитам режима ядра, так как они наиболее сложны в обнаружении. Описаны общие подходы, которые применяются всеми руткитами. В каждой главе авторы представляют основную технику, объясняют ее цели и показывают, как она реализована, на примерах кода.
Содержание
Отзывы о книге
Благодарности
Об авторах
Предисловие
К истокам
Для кого эта книга
Необходимые оговорки
Информационный охват
От издателя перевода
Глава 1. Не оставлять следов
Понять мотивы атакующего
Важность скрытности
Когда скрытность не важна
Что такое руткит?
Зачем нужны руткиты?
Удаленное управление
Подслушивание программ
Легитимное применение руткитов
Давно ли существуют руткиты?
Как работают руткиты?
Заплаты
Пасхальные яйца
Изменения для создания программ-шпионов
Изменение исходного кода
Законность изменения программного обеспечения
Чем руткиты не являются?
Руткит — это не эксплойт
Руткит — это не вирус
Руткиты и эксплойты
Почему эксплойты до сих пор представляют проблему
Активные технологии руткитов
HIPS
NIDS
Обход IDS- и IPS-программ
Обход инструментов анализа
Заключение
Глава 2. Изменение ядра
Важные функции ядра
Структура руткита
Внедрение кода в ядро
Сборка драйвера устройства для Windows
Комплект разработчика драйверов
Окружения сборки
Файлы
Исполнение утилиты build
Подпрограмма выгрузки
Загрузка и выгрузка драйвера
Протоколирование отладочных инструкций
Создание руткита — соединение режимов пользователя и ядра
Пакеты запросов ввода-вывода
Создание описателя файла
Добавление символической ссылки
Загрузка руткита
Простой способ загрузки драйвера
Правильный способ загрузки драйвера
Распаковка sys-файла из ресурса
Запуск после перезагрузки системы
Заключение
Глава 3. Связь с аппаратурой
Нулевое кольцо
Таблицы, таблицы и еще раз таблицы
Страницы памяти
Детали проверки доступа к памяти
Разделение на страницы и преобразование адресов
Поиск в таблицах страниц
Запись каталога страниц
Запись таблицы страниц
Доступ только на чтение к некоторым важным таблицам
Множество процессов, множество каталогов страниц
Процессы и программные потоки
Таблицы дескрипторов памяти
Глобальная таблица дескрипторов
Локальная таблица дескрипторов
Сегменты кода
Шлюзы вызова
Таблица дескрипторов прерываний
Другие типы шлюзов
Таблица диспетчеризации системных служб
Управляющие регистры
Регистр CR0
Другие управляющие регистры
Регистр EFlags
Многопроцессорные системы
Заключение
Глава 4. Древнее искусство захвата
Захват в режиме пользователя
Захват таблицы импорта
Захват функции путем непосредственной модификации ее кода
Внедрение DLL в адресное пространство процесса
Захват в режиме ядра
Захват таблицы дескрипторов системных служб
Захват таблицы дескрипторов прерываний
Захват главной таблицы IRP-функций в объекте драйвера устройства
Смешанный подход к захвату
Внедрение в адресное пространство процесса
Размещение функции захвата в памяти
Заключение
Глава 5. Модификация кода во время исполнения
Внедрение кода обхода
Изменения хода исполнения программы с помощью руткита MigBot
Предварительная проверка версии функции
Исполнение удаленных инструкций
Использование неперемещаемого пула памяти
Модификация адресов во время исполнения программы
Шаблоны переходов
Пример захвата таблицы прерываний
Разновидности метода
Заключение
Глава 6. Многоуровневая система драйверов
Анализатор клавиатуры
IRP-пакеты и положение драйвера в стеке
Руткит KLOG — шаг за шагом
Фильтрующие драйверы файлов
Заключение
Глава 7. Непосредственное манипулирование объектами ядра
Достоинства и недостатки DKOM
Определение версии операционной системы
Определение версии ОС в режиме пользователя
Определение версии ОС в режиме ядра
Получение версии ОС из реестра
Обмен данными между драйвером и прикладным процессом
Скрываемся при помощи DKOM
Скрытие процессов
Скрытие драйверов устройств
Вопросы синхронизации
Модификация маркера доступа — добавление привилегий и групп
Модификация маркера процесса
Как обхитрить Windows Event Viewer
Заключение
Глава 8. Манипулирование аппаратурой
Почему все-таки аппаратура?
Модификация микропрограмм
Доступ к устройству
Адресация устройств
Доступ к устройству отличается от доступа к памяти
Проблемы синхронизации
Шина ввода-вывода
Доступ к BIOS
Доступ к PCI- и PCMCIA-устройствам
Пример доступа к контроллеру клавиатуры
Контроллер клавиатуры 8259
Переключение индикаторов клавиатуры
Жесткая перезагрузка
Монитор нажатий клавиш
Обновление микрокода
Заключение
Глава 9. Потайные каналы
Удаленные команды, удаленное управление и эксфильтрация данных
Замаскированные протоколы стека TCP/IP
Учитывайте существующие эталоны трафика
Не отправляйте данные “открытым текстом”
Время — ваш союзник
Маскировка под DNS-запросы
Стеганография в ASCII-строках
Использование других каналов стека TCP/IP
Поддержка руткита режима ядра с использованием интерфейса TDI
Построение адресной структуры
Создание локального адресного объекта
Создание конечной точки интерфейса TDI с контекстом
Привязка конечной точки к локальному адресу
Соединение с удаленным сервером (процедура “рукопожатия”)
Отправка данных удаленному серверу
Низкоуровневое манипулирование сетью
Реализация первичных сокетов в Windows XP
Привязка к интерфейсу
Анализ пакетов с использованием первичных сокетов
Массовый анализ пакетов с использованием первичных сокетов
Отправка пакетов с использованием первичных сокетов
Подделка адреса источника
Возвращающиеся пакеты
Поддержка руткита режима ядра с использованием интерфейса NDIS
Книга посвящена вопросам и методам дизассемблирования, знание которых позволит эффективно защитить свои программы и создать более оптимизированные программные коды. Объяснены способы идентификации конструкций языков высокого уровня таких, как C/C++ и Pascal, показаны различные подходы к реконструкции алгоритмов.
В последнее время стали учащаться случаи жалоб пользователей Сети Интернет на то, что в их адрес приходит все больше и больше непрошеной корреспонденции рекламного характера. Такие письма называются в Сети спамом.