- •Внимание!
- •Об авторах
- •О техническом редакторе
- •О соавторах
- •Предисловие
- •Благодарности
- •Отдельное спасибо
- •Введение
- •Необходимая квалификация
- •Изучение на примерах
- •Структура книги
- •Глава 0. Анализ вредоносных программ для начинающих
- •Цель анализа вредоносных программ
- •Методики анализа вредоносного ПО
- •Общие правила анализа вредоносного ПО
- •Глава 1. Основные статические методики
- •Сканирование антивирусом: первый шаг
- •Хеширование: отпечатки пальцев злоумышленника
- •Поиск строк
- •Упакованное и обфусцированное вредоносное ПО
- •Формат переносимых исполняемых файлов
- •Компонуемые библиотеки и функции
- •Статический анализ на практике
- •Заголовки и разделы PE-файла
- •Итоги главы
- •Глава 2. Анализ вредоносных программ в виртуальных машинах
- •Структура виртуальной машины
- •Запуск виртуальной машины для анализа вредоносного ПО
- •Использование виртуальной машины для анализа безопасности
- •Риски при использовании VMware для анализа безопасности
- •Запись/воспроизведение работы компьютера
- •Итоги главы
- •Глава 3. Основы динамического анализа
- •Песочницы: решение на скорую руку
- •Запуск вредоносных программ
- •Мониторинг с помощью Process Monitor
- •Сравнение снимков реестра с помощью Regshot
- •Симуляция сети
- •Перехват пакетов с помощью Wireshark
- •Использование INetSim
- •Применение основных инструментов для динамического анализа
- •Итоги главы
- •Уровни абстракции
- •Архитектура x86
- •Итоги главы
- •Глава 5. IDA Pro
- •Загрузка исполняемого файла
- •Интерфейс IDA Pro
- •Использование перекрестных ссылок
- •Анализ функций
- •Схематическое представление
- •Повышение эффективности дизассемблирования
- •Плагины к IDA Pro
- •Итоги главы
- •Глава 6. Распознавание конструкций языка C в ассемблере
- •Переменные: локальные и глобальные
- •Дизассемблирование арифметических операций
- •Распознавание выражений if
- •Распознавание циклов
- •Соглашения, касающиеся вызова функций
- •Анализ выражений switch
- •Дизассемблирование массивов
- •Распознавание структур
- •Анализ обхода связного списка
- •Итоги главы
- •Глава 7. Анализ вредоносных программ для Windows
- •Windows API
- •Реестр Windows
- •API для работы с сетью
- •Отслеживание запущенной вредоносной программы
- •Сравнение режимов ядра и пользователя
- •Native API
- •Итоги главы
- •Глава 8. Отладка
- •Сравнение отладки на уровне исходного и дизассемблированного кода
- •Отладка на уровне ядра и пользователя
- •Использование отладчика
- •Исключения
- •Управление выполнением с помощью отладчика
- •Изменение хода выполнения программы на практике
- •Итоги главы
- •Глава 9. OllyDbg
- •Загрузка вредоносного ПО
- •Пользовательский интерфейс OllyDbg
- •Карта памяти
- •Просмотр потоков и стеков
- •Выполнение кода
- •Точки останова
- •Трассировка
- •Обработка исключений
- •Редактирование кода
- •Анализ кода командной оболочки
- •Вспомогательные возможности
- •Подключаемые модули
- •Отладка с использованием скриптов
- •Итоги главы
- •Драйверы и код ядра
- •Подготовка к отладке ядра
- •Использование WinDbg
- •Отладочные символы Microsoft
- •Отладка ядра на практике
- •Руткиты
- •Загрузка драйверов
- •Итоги главы
- •Глава 11. Поведение вредоносных программ
- •Программы для загрузки и запуска ПО
- •Бэкдоры
- •Похищение учетных данных
- •Механизм постоянного присутствия
- •Повышение привилегий
- •Заметая следы: руткиты, работающие в пользовательском режиме
- •Итоги главы
- •Глава 12. Скрытый запуск вредоносного ПО
- •Загрузчики
- •Внедрение в процесс
- •Подмена процесса
- •Внедрение перехватчиков
- •Detours
- •Внедрение асинхронных процедур
- •Итоги главы
- •Глава 13. Кодирование данных
- •Простые шифры
- •Распространенные криптографические алгоритмы
- •Нестандартное кодирование
- •Декодирование
- •Итоги главы
- •Глава 14. Сетевые сигнатуры, нацеленные на вредоносное ПО
- •Сетевые контрмеры
- •Безопасное расследование вредоносной деятельности в Интернете
- •Контрмеры, основанные на сетевом трафике
- •Углубленный анализ
- •Сочетание динамических и статических методик анализа
- •Понимание психологии злоумышленника
- •Итоги главы
- •Искажение алгоритмов дизассемблирования
- •Срыв анализа слоя стека
- •Итоги главы
- •Глава 16. Антиотладка
- •Обнаружение отладчика в Windows
- •Распознавание поведения отладчика
- •Искажение работы отладчика
- •Уязвимости отладчиков
- •Итоги главы
- •Глава 17. Методы противодействия виртуальным машинам
- •Признаки присутствия VMware
- •Уязвимые инструкции
- •Изменение настроек
- •Побег из виртуальной машины
- •Итоги главы
- •Глава 18. Упаковщики и распаковка
- •Анатомия упаковщика
- •Распознавание упакованных программ
- •Способы распаковки
- •Автоматизированная распаковка
- •Ручная распаковка
- •Советы и приемы для работы с распространенными упаковщиками
- •Анализ без полной распаковки
- •Итоги главы
- •Глава 19. Анализ кода командной оболочки
- •Загрузка кода командной оболочки для анализа
- •Позиционно-независимый код
- •Определение адреса выполнения
- •Поиск символов вручную
- •Окончательная версия программы Hello World
- •Кодировки кода командной оболочки
- •NOP-цепочки
- •Поиск кода командной оболочки
- •Итоги главы
- •Глава 20. Анализ кода на C++
- •Объектно-ориентированное программирование
- •Обычные и виртуальные функции
- •Создание и уничтожение объектов
- •Итоги главы
- •Какой смысл в 64-битном вредоносном ПО?
- •Особенности архитектуры x64
- •Признаки вредоносного кода на платформе x64
- •Итоги главы
- •Приложения
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
0 |
|||
|
|
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Анализ вредоносных программ для начинающих
Прежде чем мы перейдем к подробностям анализа вредоносного ПО, следует определиться с терминологией, рассмотреть распространенные типы зловредов и познакомиться с фундаментальными подходами к их анализу. Любую программу, причиняющую вред пользователю, компьютеру или сети (например, вирус, троян, червь, руткит, запугивающее и шпионское ПО), можно считать вредоносом. И хотя такие программы могут принимать множество разных форм, для их анализа используются одни и те же подходы. То, какой именно подход вы выберете, зависит от ваших целей.
Цель анализа вредоносных программ
Целью анализа вредоносного ПО обычно является получение информации, необходимой для ответа на сетевое вторжение. В большинстве случаев вашей задачей будет определить, что именно произошло, и найти все зараженные компьютеры и файлы. При анализе зловреда обычно нужно понять, на что способен конкретный двоичный файл, как его обнаружить в вашей сети и как оценить и минимизировать причиненный им ущерб.
Определившись с тем, какие файлы требуют анализа, вы должны будете сгенерировать сигнатуры (цифровые подписи) для поиска инфекции внутри сети. Из книги вы узнаете, что можно создавать как локальные сигнатуры, так и сетевые.
Локальные сигнатуры (или индикаторы) используются для обнаружения вредоносного кода на компьютере жертвы. Эти индикаторы часто указывают на файлы, созданные или модифицированные вредоносом, или на изменения, внесенные им в реестр. В отличие от антивирусных сигнатур, индикаторы фокусируются скорее на последствиях работы вредоносного ПО, нежели на его характеристиках как таковых. Это делает их более эффективными при поиске вредоносов, которые меняют свою форму или уже отсутствуют на диске на момент анализа.
Сетевые сигнатуры используются для обнаружения зловредного кода путем отслеживания сетевого трафика. Их можно создавать и без анализа вредоносного
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
Глава 0. Анализ вредоносных программ для начинающих
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w25 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
ПО, но в этом случае они обычно оказываются менее эффективными, дают меньшую частоту обнаружений и больше ложных срабатываний.
После получения сигнатуры остается понять, как именно работает вредонос. Именно этим обычно больше всего интересуется начальство, которое жаждет по дробных объяснений о серьезном вторжении. Углубленные методики, которые вы изучите в этой книге, позволят вам определять назначение и возможности вредоносного ПО.
Методики анализа вредоносного ПО
Чаще всего при анализе вредоноса в вашем распоряжении будет лишь его исполняемый файл, который нельзя прочитать просто так. Чтобы извлечь из него какую-то полезную информацию, вам придется воспользоваться различными инструментами
иловкими приемами, добывая сведения по крупице и затем формируя из них общую картину.
Существует два основных подхода к анализу вредоносного ПО: статический
идинамический. Статический анализ заключается в исследовании вредоноса без его запуска. При динамическом анализе вредонос должен быть запущен. Обе эти категории включают в себя как базовые, так и продвинутые методики.
Базовый статический анализ
Базовый статический анализ состоит в исследовании исполняемого файла без рассмотрения самих инструкций. С его помощью можно определить, является ли файл вредоносным, получить сведения о его функциональности и иногда извлечь информацию, которая позволит сгенерировать простые сетевые сигнатуры. Это прямолинейный статический анализ, который может быть выполнен довольно быстро, однако он имеет низкую эффективность в борьбе со сложным вредоносным ПО — при его проведении можно пропустить важные поведенческие признаки.
Базовый динамический анализ
Методики базового динамического анализа подразумевают запуск вредоноса и наблюдение за его поведением в системе. Это позволяет устранить заражение и/или сгенерировать эффективные сигнатуры. Но, чтобы обеспечить безопасное выполнение вредоносной программы, вы должны сперва подготовить среду, которая позволит вам изучать ее, не рискуя повредить систему или сеть. Как и в случае с базовым статическим анализом, данные методики доступны большинству людей и не требуют глубоких знаний программирования, однако они бессильны против некоторых зловредов.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w |
|
|
to |
|
|
26 Глава 0. Анализ вредоносных программ для начинающих |
||||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
Продвинутый статический анализ
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Продвинутый статический анализ заключается в разборе «внутренностей» зловреда методом обратного проектирования. Для этого мы загружаем исполняемый файл в дизассемблер и исследуем программные инструкции, чтобы понять, что он делает. Эти инструкции выполняются центральным процессором, поэтому таким образом мы можем узнать все детали поведения программы. Продвинутый статический анализ имеет более высокий порог вхождения по сравнению с базовым и требует специальных знаний о дизассемблировании, конструкциях программного кода и концепциях операционной системы Windows. Но не волнуйтесь — все это вы сможете изучить в данной книге.
Продвинутый динамический анализ
Для продвинутого динамического анализа используется отладчик, который позволяет исследовать внутреннее состояние запущенного вредоноса. Это еще один способ извлечь подробную информацию из исполняемого файла. Наиболее полезными эти методики оказываются в ситуациях, когда другие подходы не дали результата. В этой книге мы покажем, как полностью исследовать подозрительный файл, используя оба вида продвинутого анализа — динамический и статический.
Типы вредоносного ПО
Процесс анализа вредоносного ПО часто можно ускорить, если сделать обоснованное предположение о назначении вредоноса и затем его подтвердить. Естественно, точность ваших догадок будет зависеть от того, знаете ли вы, чем обычно занимаются вредоносные программы. Ниже приведены категории, к которым относится большинство вредоносов.
Бэкдор. Вредоносный код, который устанавливается на компьютер, чтобы открыть доступ злоумышленнику. Бэкдоры обычно позволяют подключиться к компьютеру с минимальной аутентификацией или вовсе без таковой и выполнить команды в локальной системе.
Ботнет. Открывает злоумышленнику доступ к системе, чем похож на бэкдор, однако все компьютеры, зараженные одним ботнетом, получают одни и те же инструкции от единого управляющего сервера.
Загрузчик. Зловред, единственной целью которого является загрузка другого вредоносного кода. Злоумышленники обычно устанавливают загрузчики при первом доступе к системе. Этот вредонос загрузит и установит дополнительные зараженные программы.
Похититель информации. Вредоносное ПО, которое собирает информацию на компьютере жертвы и, как правило, отправляет ее злоумышленнику. В качестве
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
Глава 0. Анализ вредоносных программ для начинающих
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w27 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
примера можно привести программы, захватывающие хеши паролей, перехватчики и кейлогеры. Эти вредоносы обычно используются для получения доступа к учетным записям интернет-приложений, таких как электронная почта или интернет-банкинг.
Программа запуска. Вредоносная программа, с помощью которой запускается другой зловредный код. Обычно в таких программах используются нетрадиционные методики запуска, позволяющие незаметно получить доступ к системе или повысить привилегии.
Руткит. Вредоносная программа, скрывающая существование другого кода. Руткиты обычно применяются в сочетании с другими вредоносами, такими как бэкдоры, что позволяет им открыть злоумышленнику доступ к системе и усложнить обнаружение кода.
Запугивающее ПО. Вредоносная программа, созданная для запугивания атакованного пользователя и склонения его к покупке чего-либо. Обычно имеет графический интерфейс, схожий с антивирусом или другим приложением, обеспечивающим безопасность. Она сообщает пользователю о наличии в его системе вредоносного кода и убеждает его в том, что единственным выходом из ситуации является покупка определенного «программного обеспечения», хотя на самом деле это лишь удалит саму запугивающую программу.
Программа для рассылки спама. Вредонос, который заражает компьютер пользователя и затем с его помощью рассылает спам. Этот тип программ генерирует доход для злоумышленников, позволяя им продавать услуги по рассылке спама.
Червь, вирус. Вредоносный код, который способен копировать себя и заражать другие компьютеры.
Вредоносное ПО часто охватывает несколько категорий. Например, программа может одновременно содержать кейлогер, собирать пароли и являться червем для рассылки спама. Поэтому не стоит зацикливаться на классификации вредоносов по их функциям.
Вредоносное ПО можно также разделять на основе того, является ли атака злоумышленника массовой или узконаправленной. Массовые вредоносы, такие как запугивающее ПО, подобны дробовику и созданы для заражения как можно большего числа компьютеров. Они имеют наибольшее распространение, но уступают в сложности другим вредоносам, поэтому их проще обнаружить и нейтрализовать, ведь системы безопасности рассчитаны именно на них.
Узконаправленное вредоносное ПО (например, единственный в своем роде бэкдор) адаптируется под конкретную организацию. Оно представляет большую угрозу для сетей, так как встречается редко, а значит, системы безопасности имеют меньше шансов справиться с ним. Без подробного анализа такого узконаправленного вредоноса устранить инфекцию и защитить сеть практически невозможно. Данный вид вредоносных программ обычно отличается повышенной сложностью и требует продвинутых навыков анализа (которые рассматриваются в этой книге).