Книга учит концепциям, инструментам и методам распознавания вредоносных программ и общим элементам анализа вредоносного ПО. Для лучшего восприятия в примерах данной книги используются различные реальные образцы вредоносного ПО, зараженные образы памяти и визуальные диаграммы.
Издание предназначено для специалистов-практиков в области кибербезопасности, будет полезно студентам, аспирантам и инженерам соответствующих специальностей. Оно пригодится в работе сотрудникам служб информационной безопасности и инженерам-исследователям в области кибербезопасности.
Доп. информация: на сайте издательства Packt Publishing фамилия автора указана как Monnappa, но в книге по-английски она напечатана с одним "n".
Соавторы
Об авторе
О рецензентах
Предисловие
Для кого эта книга
Что рассматривается в этой книге
Чтобы получить максимальную отдачу от этой книги
Скачать цветные изображения
Используемые условные обозначения
Глава 1. Введение в анализ вредоносных программ
1.1 Что такое вредоносное ПО?
1.2 Что такое анализ вредоносных программ?
1.3 Почему анализ вредоносных программ?
1.4 Типы анализа вредоносных программ
1.5 Настройка тестовой среды
1.5.1 Требования к среде
1.5.2 Обзор архитектуры тестовой среды
1.5.3 Установка и настройка виртуальной машины Linux
1.5.4 Установка и настройка виртуальной машины Windows
1.6 Источники вредоносных программ
Резюме
Глава 2. Статический анализ
2.1 Определение типа файла
2.1.1 Определение типа файла с использованием ручного метода
2.1.2 Определение типа файла с использованием
инструментальных средств
2.1.3 Определение типа файла с помощью Python
2.2 Сличение информации с помощью цифровых отпечатков
2.2.1 Генерирование криптографической хеш-функции
с использованием инструментальных средств
2.2.2 Определение криптографической хеш-функции в Python
2.3 Многократное антивирусное сканирование
2.3.1 Сканирование подозрительного бинарного файла
с помощью VirusTotal
2.3.2 Запрос значений хеш-функций с помощью открытого API VirusTotal
2.4 Извлечение строк
2.4.1 Извлечение строк с использованием инструментальных средств
2.4.2 Расшифровка обфусцированных строк с использованием FLOSS
2.5 Определение обфускации файла
2.5.1 Упаковщики и крипторы
2.5.2 Обнаружение обфусцированного файла с помощью Exeinfo PE
2.6 Проверка информации о PE-заголовке
2.6.1 Проверка файловых зависимостей и импорт
2.6.2 Проверка экспорта
2.6.3 Изучение таблицы секций PE-файла
2.6.4 Изучение временной метки компиляции
2.6.5 Изучение ресурсов PE-файлов
2.7 Сравнение и классификация вредоносных программ
2.7.1 Классификация вредоносных программ
с использованием нечеткого хеширования
2.7.2 Классификация вредоносных программ
с использованием хеша импорта
2.7.3 Классификация вредоносных программ
с использованием хеша секций
2.7.4 Классификация вредоносных программ с использованием YARA
2.7.4.1 Установка YARA
2.7.4.2 Основы правил YARA
2.7.4.3 Запуск YARA
2.7.4.4 Применение YARA
Резюме
Глава 3. Динамический анализ
3.1 Обзор тестовой среды
3.2 Системный и сетевой мониторинг
3.3 Инструменты динамического анализа (мониторинга)
3.3.1 Проверка процесса с помощью Process Hacker
3.3.2 Определение взаимодействия системы с помощью Process Monitor
3.3.3 Регистрация действий системы с использованием Noriben
3.3.4 Захват сетевого трафика с помощью Wireshark
3.3.5 Симуляция служб с INetSim
3.4 Этапы динамического анализа
3.5 Собираем все вместе: анализируем исполняемый файл вредоносного ПО
3.5.1 Статический анализ образца
3.5.2 Динамический анализ образца
3.6 Анализ динамически подключаемой библиотеки (DLL)
3.6.1 Почему злоумышленники используют библиотеки DLL
3.6.2 Анализ DLL с помощью rundll32.exe
3.6.2.1 Как работает rundll32.exe
3.6.2.2 Запуск DLL с использованием rundll32.exe
Пример 1 – Анализ DLL без экспорта
Пример 2 – Анализ DLL, содержащей экспорт
Пример 3 – Анализ DLL, принимающей аргументы экспорта
3.6.3 Анализ DLL с помощью проверки процессов
Резюме
Глава 4. Язык ассемблера
и дизассемблирование для начинающих
4.1 Основы работы с компьютером
4.1.1 Память
4.1.1.1 Как данные хранятся в памяти
4.1.2 Центральный процессор
4.1.2.1 Машинный язык
4.1.3 Основы программы
4.1.3.1 Компиляция программы
4.1.3.2 Программа на диске
4.1.3.3 Программа в памяти
4.1.3.4 Дизассемблирование программы
(от машинного кода к коду ассемблера)
4.2 Регистры процессора
4.2.1 Регистры общего назначения
4.2.2 Указатель инструкций (EIP)
4.2.3 Регистр EFLAGS
4.3 Инструкции по передаче данных
4.3.1 Перемещение константы в регистр
4.3.2 Перемещение значений из регистра в регистр
4.3.3 Перемещение значений из памяти в регистры
4.3.4 Перемещение значений из регистров в память
4.3.5 Задача по дизассемблированию
4.3.6 Решение задачи
4.4 Арифметические операции
4.4.1 Задача по дизассемблированию
4.4.2 Решение задачи
4.5 Побитовые операции
4.6 Ветвление и условные операторы
4.6.1 Безусловные переходы
4.6.2 Условные переходы
4.6.3 Оператор if
4.6.4 Оператор If-Else
4.6.5 Оператор If-Elseif-Else
4.6.6 Задача по дизассемблированию
4.6.7 Решение задачи
4.7 Циклы
4.7.1 Задача по дизассемблированию
4.7.2 Решение задачи
4.8 Функции
4.8.1 Стек
4.8.2 Функция вызова
4.8.3 Возвращение из функции
4.8.4 Параметры функции и возвращаемые значения
4.9 Массивы и строки
4.9.1 Задача по дизассемблированию
4.9.2 Решение задачи
4.9.3 Строки
4.9.3.1 Строковые инструкции
4.9.3.2 Перемещение из памяти в память (movsx)
4.9.3.3 Инструкции повтора (rep)
4.9.3.4 Сохранение значения из регистра в память (Stosx)
4.9.3.5 Загрузка из памяти в регистр (lodsx)
4.9.3.6 Сканирование памяти (scasx)
4.9.3.7 Сравнение значений в памяти (Cmpsx)
4.10 Структуры
4.11 Архитектура x64
4.11.1 Анализ 32-битного исполняемого файла
на 64-разрядной операционной системе Windows
4.12 Дополнительная литература
Резюме
Глава 5. Дизассемблирование с использованием IDA
5.1 Инструментальные средства анализа кода
5.2 Статический анализ кода (дизассемблирование) с использованием IDA
5.2.1 Загрузка двоичного файла в IDA
5.2.2 Изучение окон IDA
5.2.2.1 Окно Дизассемблирование
5.2.2.2 Окно Функции
5.2.2.3 Окно Вывод
5.2.2.4 Окно шестнадцатеричного представления
5.2.2.5 Окно Структуры
5.2.2.6 Окно Импорт
5.2.2.7 Окно Экспорт
5.2.2.8 Окно Строки
5.2.2.9 Окно Сегменты
5.2.3 Улучшение дизассемблирования с помощью IDA
5.2.3.1 Переименование переменных и функций
5.2.3.2 Комментирование в IDA
5.2.3.3 База данных IDA
5.2.3.4 Форматирование операндов
5.2.3.5 Навигация по адресам
5.2.3.6 Перекрестные ссылки
5.2.3.7 Вывод списка всех перекрестных ссылок
5.2.3.8 Ближнее представление и графы
5.3 Дизассемблирование Windows API
5.3.1 Понимание Windows API
5.3.1.1 API-функции Юникод и ANSI
5.3.1.2 Расширенные API-функции
5.3.2 Сравнение 32-битного и 64-битного Windows API
5.4 Исправление двоичного кода с использованием IDA
5.4.1 Исправление байтов программы
5.4.2 Исправление инструкций
5.5 Сценарии и плагины IDA
5.5.1 Выполнение сценариев IDA
5.5.2 IDAPython
5.5.2.1 Проверка наличия API CreateFile
5.5.2.2 Перекрестные ссылки кода на CreateFile
с использованием IDAPython
5.5.3 Плагины IDA
Резюме
Глава 6. Отладка вредоносных двоичных файлов
6.1 Общие концепции отладки
6.1.1 Запуск и подключение к процессам
6.1.2 Контроль выполнения процесса
6.1.3 Прерывание программы с помощью точек останова
6.1.4 Трассировка выполнения программы
6.2 Отладка двоичного файла с использованием x64dbg
6.2.1 Запуск нового процесса в x64dbg
6.2.2 Присоединение к существующему процессу с использованием x64dbg
6.2.3 Интерфейс отладчика x64dbg
6.2.4 Контроль за выполнением процесса с использованием x64dbg
6.2.5 Установка точки останова в x64dbg
6.2.6 Отладка 32-битного вредоносного ПО
6.2.7 Отладка 64-битной вредоносной программы
6.2.8 Отладка вредоносной DLL-библиотеки с использованием x64dbg
6.2.8.1 Использование rundll32.exe для отладки
библиотеки DLL в x64dbg
6.2.8.2 Отладка DLL в определенном процессе
6.2.9 Трассировка выполнения в x64dbg
6.2.9.1 Трассировка инструкций
2.9.2 Трассировка функций
6.2.10 Исправления в x64dbg
6.3 Отладка двоичного файла с использованием IDA
6.3.1 Запуск нового процесса в IDA
6.3.2 Присоединение к существующему процессу с использованием IDA
6.3.3 Интерфейс отладчика IDA
6.3.4 Контроль выполнения процесса с использованием IDA
6.3.5 Установка точки останова в IDA
6.3.6 Отладка вредоносных исполняемых файлов
6.3.7 Отладка вредоносной библиотеки DLL с помощью IDA
6.3.7.1 Отладка DLL в определенном процессе
6.3.8 Трассировка выполнения с использованием IDA
6.3.9 Написание сценариев отладки с использованием IDAPython
6.3.9.1 Пример – определение файлов, доступных вредоносному ПО
6.4 Отладка приложения .NET
Резюме
Глава 7. Функциональные возможности
вредоносного ПО и его персистентность
7.1 Функциональные возможности вредоносного ПО
7.1.1 Загрузчик
7.1.2 Дроппер
7.1.2.1 Реверс-инжиниринг 64-битного дроппера
7.1.3 Кейлоггер
7.1.3.1 Кейлоггер, использующий GetAsyncKeyState()
7.1.3.2 Кейлоггер, использующий SetWindowsHookEx()
7.1.4 Репликация вредоносных программ через съемные носители
7.1.5 Управление и контроль, осуществляемые
вредоносными программами (С2)
7.1.5.1 Управление и контроль с использованием HTTP
7.1.5.2 Осуществление команды и контроля
в пользовательском режиме
7.1.6 Выполнение на основе PowerShell
7.1.6.1 Основы команд PowerShell
7.1.6.2 Сценарии PowerShell и политика выполнения
7.1.6.2 Анализ команд/скриптов PowerShell
7.1.6.3 Как злоумышленники используют PowerShell
7.2 Методы персистентности вредоносных программ
7.2.1 Запуск ключа реестра
7.2.2 Запланированные задачи
7.2.3 Папка запуска
7.2.4 Записи реестра Winlogon
7.2.5 Параметры выполнения файла изображения
7.2.6 Специальные возможности
7.2.7 AppInit_DLLs
7.2.8 Захват порядка поиска DLL
7.2.9 Захват COM-объекта
7.2.10 Служба
Резюме
Глава 8. Внедрение кода и перехват
8.1 Виртуальная память
8.1.1 Компоненты памяти процесса (пространство пользователя)
8.1.2 Содержимое памяти ядра (пространство ядра)
8.2 Пользовательский режим и режим ядра
8.2.1 Поток вызовов Windows API
8.3 Методы внедрения кода
8.3.1 Удаленное внедрение DLL
8.3.2 Внедрение DLL с использованием асинхронного вызова процедур
8.3.3 Внедрение DLL с использованием SetWindowsHookEx()
8.3.4 Внедрение DLL с использованием прокладок
8.3.4.1 Создание прокладки
8.3.4.2 Артефакты прокладки
8.3.4.3 Как злоумышленники используют прокладки
8.3.4.4 Анализ базы данных прокладки
8.3.5 Внедрение удаленного исполняемого файла или шелл-кода
8.3.6 Внедрение пустого процесса (опустошение процесса)
8.4 Методы перехвата
8.4.1 Перехват таблицы адресов импорта
8.4.2 Встраиваемый перехват (Inline Patching)
8.4.3 Исправления в памяти с помощью прокладки
8.5 Дополнительная литература
Резюме
Глава 9. Методы обфускации вредоносных программ
9.1 Простое кодирование
9.1.1 Шифр Цезаря
9.1.1.1 Как работает шифр Цезаря
8.1.1.2 Расшифровка шифра Цезаря в Python
9.1.2 Кодирование Base64
9.1.2.1 Перевод данных в Base64
9.1.2.2 Кодирование и декодирование Base64
9.1.2.3 Декодирование пользовательской версии Base64
9.1.2.4 Идентификация Base64
9.1.3 XOR-шифрование
9.1.3.1 Однобайтовый XOR
9.1.3.2 Поиск XOR-ключа с помощью полного перебора
9.1.3.3 Игнорирование XOR-шифрования нулевым байтом
9.1.3.4 Многобайтовое XOR-шифрование
8.1.3.5 Идентификация XOR-шифрования
9.2 Вредоносное шифрование
9.2.1 Идентификация криптографических подписей с помощью Signsrch
9.2.2 Обнаружение криптоконстант с помощью FindCrypt2
9.2.3 Обнаружение криптографических подписей
с использованием YARA
9.2.4 Расшифровка в Python
9.3 Пользовательское кодирование/шифрование
9.4 Распаковка вредоносных программ
9.4.1 Ручная распаковка
9.4.1.1 Идентификация исходной точки входа
9.4.1.2 Выгрузка памяти процесса с помощью Scylla
9.4.1.3 Исправление таблицы импорта
9.4.2 Автоматическая распаковка
Резюме
Глава 10. Охота на вредоносные программы
с использованием криминалистического анализа
дампов памяти
10.1 Этапы криминалистического анализа дампов памяти
10.2 Создание дампа памяти
10.2.1 Создание дампа памяти с использованием DumpIt
10.3 Обзор Volatility
10.3.1 Установка Volatility
10.3.1.1 Автономный исполняемый файл Volatility
10.3.1.2 Исходный пакет Volatility
10.3.2 Использование Volatility
10.4 Перечисление процессов
10.4.1 Обзор процесса
10.4.1.1 Изучение структуры _EPROCESS
10.4.1.2 Понимание ActiveProcessLinks
10.4.2. Вывод списка процессов с использованием psscan
10.4.2.1 Прямое манипулирование объектами ядра (DKOM)
10.4.2.2 Общие сведения о сканировании тегов пула
10.4.3 Определение связей между процессами
10.4.4 Вывод списка процессов с использованием psxview
10.5 Вывод списка дескрипторов процесса
10.6 Вывод списка DLL
10.6.1 Обнаружение скрытой библиотеки DLL с помощью ldrmodules
10.7 Сброс исполняемого файла и DLL
10.8 Вывод списка сетевых подключений и сокетов
10.9 Проверка реестра
10.10 Проверка служб
10.11 Извлечение истории команд
Резюме
Глава 11. Обнаружение сложных вредоносных
программ с использованием криминалистического
анализа дампов памяти
11.1 Обнаружение внедрения кода
11.1.1 Получение информации о дескрипторе виртуальных адресов
11.1.2 Обнаружение внедренного кода
с использованием дескриптора виртуальных адресов
11.1.3 Сброс области памяти процесса
11.1.4 Обнаружение внедренного кода с помощью malfind
11.2 Исследование внедрения пустого процесса
11.2.1 Этапы внедрения пустого процесса
11.2.2 Обнаружение внедрения пустого процесса
11.2.3 Варианты внедрения пустого процесса
11.3 Обнаружение перехвата API
11.4 Руткиты в режиме ядра
11.5 Вывод списка модулей ядра
11.5.1 Вывод списка модулей ядра с использованием driverscan
11.6 Обработка ввода/вывода
11.6.1 Роль драйвера устройства
11.6.2 Роль менеджера ввода/вывода
11.6.3 Связь с драйвером устройства
11.6.4 Запросы ввода/вывода для многоуровневых драйверов
11.7 Отображение деревьев устройств
11.8 Обнаружение перехвата пространства ядра
11.8.1 Обнаружение перехвата SSDT
11.8.2 Обнаружение перехвата IDT
11.8.3 Идентификация встроенных перехватов ядра
11.8.4 Обнаружение перехватов функций IRP
11.9 Обратные вызовы из ядра и таймеры
Резюме
Предметный указатель
Об авторе
О рецензентах
Предисловие
Для кого эта книга
Что рассматривается в этой книге
Чтобы получить максимальную отдачу от этой книги
Скачать цветные изображения
Используемые условные обозначения
Глава 1. Введение в анализ вредоносных программ
1.1 Что такое вредоносное ПО?
1.2 Что такое анализ вредоносных программ?
1.3 Почему анализ вредоносных программ?
1.4 Типы анализа вредоносных программ
1.5 Настройка тестовой среды
1.5.1 Требования к среде
1.5.2 Обзор архитектуры тестовой среды
1.5.3 Установка и настройка виртуальной машины Linux
1.5.4 Установка и настройка виртуальной машины Windows
1.6 Источники вредоносных программ
Резюме
Глава 2. Статический анализ
2.1 Определение типа файла
2.1.1 Определение типа файла с использованием ручного метода
2.1.2 Определение типа файла с использованием
инструментальных средств
2.1.3 Определение типа файла с помощью Python
2.2 Сличение информации с помощью цифровых отпечатков
2.2.1 Генерирование криптографической хеш-функции
с использованием инструментальных средств
2.2.2 Определение криптографической хеш-функции в Python
2.3 Многократное антивирусное сканирование
2.3.1 Сканирование подозрительного бинарного файла
с помощью VirusTotal
2.3.2 Запрос значений хеш-функций с помощью открытого API VirusTotal
2.4 Извлечение строк
2.4.1 Извлечение строк с использованием инструментальных средств
2.4.2 Расшифровка обфусцированных строк с использованием FLOSS
2.5 Определение обфускации файла
2.5.1 Упаковщики и крипторы
2.5.2 Обнаружение обфусцированного файла с помощью Exeinfo PE
2.6 Проверка информации о PE-заголовке
2.6.1 Проверка файловых зависимостей и импорт
2.6.2 Проверка экспорта
2.6.3 Изучение таблицы секций PE-файла
2.6.4 Изучение временной метки компиляции
2.6.5 Изучение ресурсов PE-файлов
2.7 Сравнение и классификация вредоносных программ
2.7.1 Классификация вредоносных программ
с использованием нечеткого хеширования
2.7.2 Классификация вредоносных программ
с использованием хеша импорта
2.7.3 Классификация вредоносных программ
с использованием хеша секций
2.7.4 Классификация вредоносных программ с использованием YARA
2.7.4.1 Установка YARA
2.7.4.2 Основы правил YARA
2.7.4.3 Запуск YARA
2.7.4.4 Применение YARA
Резюме
Глава 3. Динамический анализ
3.1 Обзор тестовой среды
3.2 Системный и сетевой мониторинг
3.3 Инструменты динамического анализа (мониторинга)
3.3.1 Проверка процесса с помощью Process Hacker
3.3.2 Определение взаимодействия системы с помощью Process Monitor
3.3.3 Регистрация действий системы с использованием Noriben
3.3.4 Захват сетевого трафика с помощью Wireshark
3.3.5 Симуляция служб с INetSim
3.4 Этапы динамического анализа
3.5 Собираем все вместе: анализируем исполняемый файл вредоносного ПО
3.5.1 Статический анализ образца
3.5.2 Динамический анализ образца
3.6 Анализ динамически подключаемой библиотеки (DLL)
3.6.1 Почему злоумышленники используют библиотеки DLL
3.6.2 Анализ DLL с помощью rundll32.exe
3.6.2.1 Как работает rundll32.exe
3.6.2.2 Запуск DLL с использованием rundll32.exe
Пример 1 – Анализ DLL без экспорта
Пример 2 – Анализ DLL, содержащей экспорт
Пример 3 – Анализ DLL, принимающей аргументы экспорта
3.6.3 Анализ DLL с помощью проверки процессов
Резюме
Глава 4. Язык ассемблера
и дизассемблирование для начинающих
4.1 Основы работы с компьютером
4.1.1 Память
4.1.1.1 Как данные хранятся в памяти
4.1.2 Центральный процессор
4.1.2.1 Машинный язык
4.1.3 Основы программы
4.1.3.1 Компиляция программы
4.1.3.2 Программа на диске
4.1.3.3 Программа в памяти
4.1.3.4 Дизассемблирование программы
(от машинного кода к коду ассемблера)
4.2 Регистры процессора
4.2.1 Регистры общего назначения
4.2.2 Указатель инструкций (EIP)
4.2.3 Регистр EFLAGS
4.3 Инструкции по передаче данных
4.3.1 Перемещение константы в регистр
4.3.2 Перемещение значений из регистра в регистр
4.3.3 Перемещение значений из памяти в регистры
4.3.4 Перемещение значений из регистров в память
4.3.5 Задача по дизассемблированию
4.3.6 Решение задачи
4.4 Арифметические операции
4.4.1 Задача по дизассемблированию
4.4.2 Решение задачи
4.5 Побитовые операции
4.6 Ветвление и условные операторы
4.6.1 Безусловные переходы
4.6.2 Условные переходы
4.6.3 Оператор if
4.6.4 Оператор If-Else
4.6.5 Оператор If-Elseif-Else
4.6.6 Задача по дизассемблированию
4.6.7 Решение задачи
4.7 Циклы
4.7.1 Задача по дизассемблированию
4.7.2 Решение задачи
4.8 Функции
4.8.1 Стек
4.8.2 Функция вызова
4.8.3 Возвращение из функции
4.8.4 Параметры функции и возвращаемые значения
4.9 Массивы и строки
4.9.1 Задача по дизассемблированию
4.9.2 Решение задачи
4.9.3 Строки
4.9.3.1 Строковые инструкции
4.9.3.2 Перемещение из памяти в память (movsx)
4.9.3.3 Инструкции повтора (rep)
4.9.3.4 Сохранение значения из регистра в память (Stosx)
4.9.3.5 Загрузка из памяти в регистр (lodsx)
4.9.3.6 Сканирование памяти (scasx)
4.9.3.7 Сравнение значений в памяти (Cmpsx)
4.10 Структуры
4.11 Архитектура x64
4.11.1 Анализ 32-битного исполняемого файла
на 64-разрядной операционной системе Windows
4.12 Дополнительная литература
Резюме
Глава 5. Дизассемблирование с использованием IDA
5.1 Инструментальные средства анализа кода
5.2 Статический анализ кода (дизассемблирование) с использованием IDA
5.2.1 Загрузка двоичного файла в IDA
5.2.2 Изучение окон IDA
5.2.2.1 Окно Дизассемблирование
5.2.2.2 Окно Функции
5.2.2.3 Окно Вывод
5.2.2.4 Окно шестнадцатеричного представления
5.2.2.5 Окно Структуры
5.2.2.6 Окно Импорт
5.2.2.7 Окно Экспорт
5.2.2.8 Окно Строки
5.2.2.9 Окно Сегменты
5.2.3 Улучшение дизассемблирования с помощью IDA
5.2.3.1 Переименование переменных и функций
5.2.3.2 Комментирование в IDA
5.2.3.3 База данных IDA
5.2.3.4 Форматирование операндов
5.2.3.5 Навигация по адресам
5.2.3.6 Перекрестные ссылки
5.2.3.7 Вывод списка всех перекрестных ссылок
5.2.3.8 Ближнее представление и графы
5.3 Дизассемблирование Windows API
5.3.1 Понимание Windows API
5.3.1.1 API-функции Юникод и ANSI
5.3.1.2 Расширенные API-функции
5.3.2 Сравнение 32-битного и 64-битного Windows API
5.4 Исправление двоичного кода с использованием IDA
5.4.1 Исправление байтов программы
5.4.2 Исправление инструкций
5.5 Сценарии и плагины IDA
5.5.1 Выполнение сценариев IDA
5.5.2 IDAPython
5.5.2.1 Проверка наличия API CreateFile
5.5.2.2 Перекрестные ссылки кода на CreateFile
с использованием IDAPython
5.5.3 Плагины IDA
Резюме
Глава 6. Отладка вредоносных двоичных файлов
6.1 Общие концепции отладки
6.1.1 Запуск и подключение к процессам
6.1.2 Контроль выполнения процесса
6.1.3 Прерывание программы с помощью точек останова
6.1.4 Трассировка выполнения программы
6.2 Отладка двоичного файла с использованием x64dbg
6.2.1 Запуск нового процесса в x64dbg
6.2.2 Присоединение к существующему процессу с использованием x64dbg
6.2.3 Интерфейс отладчика x64dbg
6.2.4 Контроль за выполнением процесса с использованием x64dbg
6.2.5 Установка точки останова в x64dbg
6.2.6 Отладка 32-битного вредоносного ПО
6.2.7 Отладка 64-битной вредоносной программы
6.2.8 Отладка вредоносной DLL-библиотеки с использованием x64dbg
6.2.8.1 Использование rundll32.exe для отладки
библиотеки DLL в x64dbg
6.2.8.2 Отладка DLL в определенном процессе
6.2.9 Трассировка выполнения в x64dbg
6.2.9.1 Трассировка инструкций
2.9.2 Трассировка функций
6.2.10 Исправления в x64dbg
6.3 Отладка двоичного файла с использованием IDA
6.3.1 Запуск нового процесса в IDA
6.3.2 Присоединение к существующему процессу с использованием IDA
6.3.3 Интерфейс отладчика IDA
6.3.4 Контроль выполнения процесса с использованием IDA
6.3.5 Установка точки останова в IDA
6.3.6 Отладка вредоносных исполняемых файлов
6.3.7 Отладка вредоносной библиотеки DLL с помощью IDA
6.3.7.1 Отладка DLL в определенном процессе
6.3.8 Трассировка выполнения с использованием IDA
6.3.9 Написание сценариев отладки с использованием IDAPython
6.3.9.1 Пример – определение файлов, доступных вредоносному ПО
6.4 Отладка приложения .NET
Резюме
Глава 7. Функциональные возможности
вредоносного ПО и его персистентность
7.1 Функциональные возможности вредоносного ПО
7.1.1 Загрузчик
7.1.2 Дроппер
7.1.2.1 Реверс-инжиниринг 64-битного дроппера
7.1.3 Кейлоггер
7.1.3.1 Кейлоггер, использующий GetAsyncKeyState()
7.1.3.2 Кейлоггер, использующий SetWindowsHookEx()
7.1.4 Репликация вредоносных программ через съемные носители
7.1.5 Управление и контроль, осуществляемые
вредоносными программами (С2)
7.1.5.1 Управление и контроль с использованием HTTP
7.1.5.2 Осуществление команды и контроля
в пользовательском режиме
7.1.6 Выполнение на основе PowerShell
7.1.6.1 Основы команд PowerShell
7.1.6.2 Сценарии PowerShell и политика выполнения
7.1.6.2 Анализ команд/скриптов PowerShell
7.1.6.3 Как злоумышленники используют PowerShell
7.2 Методы персистентности вредоносных программ
7.2.1 Запуск ключа реестра
7.2.2 Запланированные задачи
7.2.3 Папка запуска
7.2.4 Записи реестра Winlogon
7.2.5 Параметры выполнения файла изображения
7.2.6 Специальные возможности
7.2.7 AppInit_DLLs
7.2.8 Захват порядка поиска DLL
7.2.9 Захват COM-объекта
7.2.10 Служба
Резюме
Глава 8. Внедрение кода и перехват
8.1 Виртуальная память
8.1.1 Компоненты памяти процесса (пространство пользователя)
8.1.2 Содержимое памяти ядра (пространство ядра)
8.2 Пользовательский режим и режим ядра
8.2.1 Поток вызовов Windows API
8.3 Методы внедрения кода
8.3.1 Удаленное внедрение DLL
8.3.2 Внедрение DLL с использованием асинхронного вызова процедур
8.3.3 Внедрение DLL с использованием SetWindowsHookEx()
8.3.4 Внедрение DLL с использованием прокладок
8.3.4.1 Создание прокладки
8.3.4.2 Артефакты прокладки
8.3.4.3 Как злоумышленники используют прокладки
8.3.4.4 Анализ базы данных прокладки
8.3.5 Внедрение удаленного исполняемого файла или шелл-кода
8.3.6 Внедрение пустого процесса (опустошение процесса)
8.4 Методы перехвата
8.4.1 Перехват таблицы адресов импорта
8.4.2 Встраиваемый перехват (Inline Patching)
8.4.3 Исправления в памяти с помощью прокладки
8.5 Дополнительная литература
Резюме
Глава 9. Методы обфускации вредоносных программ
9.1 Простое кодирование
9.1.1 Шифр Цезаря
9.1.1.1 Как работает шифр Цезаря
8.1.1.2 Расшифровка шифра Цезаря в Python
9.1.2 Кодирование Base64
9.1.2.1 Перевод данных в Base64
9.1.2.2 Кодирование и декодирование Base64
9.1.2.3 Декодирование пользовательской версии Base64
9.1.2.4 Идентификация Base64
9.1.3 XOR-шифрование
9.1.3.1 Однобайтовый XOR
9.1.3.2 Поиск XOR-ключа с помощью полного перебора
9.1.3.3 Игнорирование XOR-шифрования нулевым байтом
9.1.3.4 Многобайтовое XOR-шифрование
8.1.3.5 Идентификация XOR-шифрования
9.2 Вредоносное шифрование
9.2.1 Идентификация криптографических подписей с помощью Signsrch
9.2.2 Обнаружение криптоконстант с помощью FindCrypt2
9.2.3 Обнаружение криптографических подписей
с использованием YARA
9.2.4 Расшифровка в Python
9.3 Пользовательское кодирование/шифрование
9.4 Распаковка вредоносных программ
9.4.1 Ручная распаковка
9.4.1.1 Идентификация исходной точки входа
9.4.1.2 Выгрузка памяти процесса с помощью Scylla
9.4.1.3 Исправление таблицы импорта
9.4.2 Автоматическая распаковка
Резюме
Глава 10. Охота на вредоносные программы
с использованием криминалистического анализа
дампов памяти
10.1 Этапы криминалистического анализа дампов памяти
10.2 Создание дампа памяти
10.2.1 Создание дампа памяти с использованием DumpIt
10.3 Обзор Volatility
10.3.1 Установка Volatility
10.3.1.1 Автономный исполняемый файл Volatility
10.3.1.2 Исходный пакет Volatility
10.3.2 Использование Volatility
10.4 Перечисление процессов
10.4.1 Обзор процесса
10.4.1.1 Изучение структуры _EPROCESS
10.4.1.2 Понимание ActiveProcessLinks
10.4.2. Вывод списка процессов с использованием psscan
10.4.2.1 Прямое манипулирование объектами ядра (DKOM)
10.4.2.2 Общие сведения о сканировании тегов пула
10.4.3 Определение связей между процессами
10.4.4 Вывод списка процессов с использованием psxview
10.5 Вывод списка дескрипторов процесса
10.6 Вывод списка DLL
10.6.1 Обнаружение скрытой библиотеки DLL с помощью ldrmodules
10.7 Сброс исполняемого файла и DLL
10.8 Вывод списка сетевых подключений и сокетов
10.9 Проверка реестра
10.10 Проверка служб
10.11 Извлечение истории команд
Резюме
Глава 11. Обнаружение сложных вредоносных
программ с использованием криминалистического
анализа дампов памяти
11.1 Обнаружение внедрения кода
11.1.1 Получение информации о дескрипторе виртуальных адресов
11.1.2 Обнаружение внедренного кода
с использованием дескриптора виртуальных адресов
11.1.3 Сброс области памяти процесса
11.1.4 Обнаружение внедренного кода с помощью malfind
11.2 Исследование внедрения пустого процесса
11.2.1 Этапы внедрения пустого процесса
11.2.2 Обнаружение внедрения пустого процесса
11.2.3 Варианты внедрения пустого процесса
11.3 Обнаружение перехвата API
11.4 Руткиты в режиме ядра
11.5 Вывод списка модулей ядра
11.5.1 Вывод списка модулей ядра с использованием driverscan
11.6 Обработка ввода/вывода
11.6.1 Роль драйвера устройства
11.6.2 Роль менеджера ввода/вывода
11.6.3 Связь с драйвером устройства
11.6.4 Запросы ввода/вывода для многоуровневых драйверов
11.7 Отображение деревьев устройств
11.8 Обнаружение перехвата пространства ядра
11.8.1 Обнаружение перехвата SSDT
11.8.2 Обнаружение перехвата IDT
11.8.3 Идентификация встроенных перехватов ядра
11.8.4 Обнаружение перехватов функций IRP
11.9 Обратные вызовы из ядра и таймеры
Резюме
Предметный указатель
Название: Анализ вредоносных программ
Год: 2019
Жанр: компьютерная
Издательство: М.: ДМК Пресс
Язык: Русский
Формат: pdf
Качество: eBook
Страниц: 452
Размер: 47 MB
Скачать Анализ вредоносных программ (2019)
Для просмотра скрытого текста необходимо зарегистрироваться или войти на сайт.