- •Внимание!
- •Об авторах
- •О техническом редакторе
- •О соавторах
- •Предисловие
- •Благодарности
- •Отдельное спасибо
- •Введение
- •Необходимая квалификация
- •Изучение на примерах
- •Структура книги
- •Глава 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 |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
Глава 12. Скрытый запуск вредоносного ПО 291 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
В конце атакуемому процессу передается сообщение WH_CBT, чтобы тот загрузил библиотеку hook.dll. Это позволит hook.dll работать в адресном пространстве notepad.exe.
После внедрения hook.dll может выполнить от имени процесса notepad.exe весь вредоносный код, хранящийся внутри DllMain. Поскольку функция MalwareProc вызывает лишь процедуру CallNextHookEx, она не должна влиять на входящие сообщения, но, чтобы это гарантировать, вредоносные программы часто вызывают вслед за ней LoadLibrary и UnhookWindowsHookEx.
Detours
Detours — это библиотека, разработанная подразделением Microsoft Research
в1999 году. Изначально ее целью было упростить управление и расширение возможностей ОС и приложений. Она позволяет разработчикам легко вносить изменения в программы.
Библиотека Detours пользуется популярностью среди авторов вредоносного ПО, которые с ее помощью импортируют модификации таблиц, подключают динамические библиотеки к существующим программным файлам и добавляют перехватчики
вактивные процессы.
Чаще всего злоумышленники используют Detours для добавления новых DLL к двоичным файлам, хранящимся на диске. Вредонос модифицирует структуру PE-заголовка и создает раздел под названием .detour, которая обычно помещается между таблицей экспорта и какими-либо отладочными символами. Она содержит исходный PE-заголовок с новой таблицей адресов импорта. После внесения изменений с использованием утилиты setdll, которая поставляется вместе с Detours, заголовок начинает ссылаться на эту таблицу.
На рис. 12.4 показано окно программы PEview с открытым процессом notepad.exe, который был заражен с помощью библиотеки Detours. Обратите внимание, что новая таблица импорта в разделе .detour содержит запись evil.dll . Благодаря этому evil.dll будет загружаться вместе с Блокнотом. Блокнот будет работать как обычно, и большинство пользователей даже не заметит выполнения вредоносной библиотеки.
Рис. 12.4. Демонстрация внедрения evil.dll с помощью Detours в окне PEview
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w |
|
|
to |
|
|
292 Часть 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 |
|
|
|
|
Как известно, вместо официальной версии Detours от компании Microsoft авторы вредоносного ПО используют альтернативные и нестандартные методы добавления раздела .detour. Но это не должно помешать вам проанализировать зараженный код.
Внедрение асинхронных процедур
Ранее в этой главе мы показали, что если создать поток с помощью вызова Cre ateRemoteThread, то из внешнего процесса можно вызвать нужные вам функции. Однако создание потока требует дополнительных ресурсов — гораздо эффективнее было бы вызывать функцию из существующего потока. В Windows эта возможность предоставляется с помощью асинхронного вызова процедур (asynchronous procedure call, APC).
APC может заставить поток выполнить какой-то другой код, прежде чем начинать работу в штатном режиме. У каждого потока есть своя очередь асинхронных про цедур, которые выполняются, когда тот находится в ожидающем состоянии, например при вызове таких функций, как WaitForSingleObjectEx, WaitForMultipleObjectsEx
или Sleep. Эти функции, в сущности, дают потоку возможность выполнить накопи вшиеся APC.
Если приложение помещает APC в очередь в то время, когда поток еще находится в ожидающем состоянии, то после запуска выполнение потока начнется с асинхронного вызова процедур. Поток последовательно вызывает все APC-функции в очереди. Когда очередь заканчивается, он продолжает работать в штатном режиме. Авторы вредоносного ПО используют APC для упреждения потоков, находящихся в ожидающем состоянии, чтобы добиться немедленного выполнения собственного кода.
APC бывают двух видов:
процедуры, сгенерированные для системы или драйвера, работают в режиме ядра;
процедуры, сгенерированные для прикладной программы, работают в режиме пользователя.
Вредоносное ПО генерирует процедуры в обоих режимах, используя внедрение APC. Рассмотрим каждый из этих методов.
Внедрение APC из пользовательского пространства
Находясь в пользовательском пространстве, поток может поместить в очередь функцию, которая будет вызвана из внешнего потока. Для этого предусмотрена операция QueueUserAPC. Поскольку для выполнения пользовательских APC поток должен быть ожидающим, злоумышленников интересуют программы, которые с большой долей вероятности входят в это состояние. К счастью для аналитиков безопасности, вызов WaitForSingleObjectEx является самым популярным в Windows API и ожидающих потоков обычно довольно много.
Рассмотрим аргументы функции QueueUserAPC: pfnAPC, hThread и dwData. Вызов QueueUserAPC просит поток с дескриптором hThread запустить процедуру pfnAPC с па-
|
|
|
|
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 |
|
|
|||
Глава 12. Скрытый запуск вредоносного ПО 293 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
раметром dwData. В листинге 12.5 показано, как вредоносное ПО может использовать QueueUserAPC для принудительной загрузки DLL в контексте другого процесса, хотя перед этим для атаки уже был выбран подходящий поток.
ПРИМЕЧАНИЕ
Чтобы распознать код, атакующий отдельные потоки, ищите API-вызовы на-
подобие CreateToolhelp32Snapshot, Process32First и Process32Next, с помощью которых вредонос находит нужный процесс. Вслед за ними часто следуют вызовы Thread32First и Thread32Next, которые находятся внутри цикла иищут в процессе поток для атаки. Как вариант, для поиска процесса вредонос может использовать вызов Nt/ZwQuerySystemInformation с информационным классом SYSTEM_PROCESS_INFORMATION.
Листинг 12.5. Внедрение APC из пользовательского приложения
00401DA9 |
push |
[esp+4+dwThreadId] |
; dwThreadId |
00401DAD |
push |
0 |
; bInheritHandle |
00401DAF |
push |
10h |
; dwDesiredAccess |
00401DB1 |
call |
ds:OpenThread |
|
00401DB7 |
mov |
esi, eax |
|
00401DB9 |
test |
esi, esi |
|
00401DBB |
jz |
short loc_401DCE |
|
00401DBD |
push |
[esp+4+dwData] |
; dwData = dbnet.dll |
00401DC1 |
push |
esi |
; hThread |
00401DC2 |
push |
ds:LoadLibraryA |
; pfnAPC |
00401DC8 |
call |
ds:QueueUserAPC |
|
Получив идентификатор нужного потока, вредонос открывает с его помощью соответствующий дескриптор . В данном примере вредонос хочет заставить поток загрузить DLL во внешний процесс, поэтому мы можем наблюдать вызов QueueUserAPC, аргумент pfnAPC которого равен LoadLibraryA . Параметр, который будет передан функции LoadLibraryA, содержится в аргументе dwData (здесь ему предварительно присваивается имя библиотеки dbnet.dll). Когда внешний поток войдет в ожидающее состояние, он вызовет LoadLibraryA, заставляя атакуемый процесс загрузить dbnet.dll (при условии, что процедура находится в очереди).
В этом примере вредоносная программа атакует процесс svchost.exe. Это распространенный вариант, поскольку потоки этого процесса часто находятся в ожидающем состоянии. Вредонос может внедрить APC во все потоки svchost.exe, чтобы зараженный код выполнился как можно быстрее.
Внедрение APC из пространства ядра
Вредоносным драйверам и руткитам часто нужно выполнить код в пользовательском пространстве, но никакого простого приема для этого не существует. Один из методов, которые они используют, заключается во внедрении APC в режиме ядра, что позволяет перенести выполнение их кода в пространство пользователя. Вредоносный драйвер может сгенерировать асинхронную процедуру и выделить поток для ее
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w |
|
|
to |
|
|
294 Часть 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 |
|
|
|
|
выполнения в пользовательском режиме (чаще всего это делается внутри svchost.exe). Процедуры этого типа часто содержат код командной оболочки.
Для эксплуатации APC драйверы устройств используют две основные функции: KeInitializeApc и KeInsertQueueApc. Пример того, как эти функции применяются в рутките, показан в листинге 12.6.
Листинг 12.6. Внедрение пользовательских APC из пространства ядра
000119BD |
push |
ebx |
|
000119BE |
push |
1 |
|
000119C0 |
push |
[ebp+arg_4] |
|
000119C3 |
push |
ebx |
|
000119C4 |
push |
offset sub_11964 |
|
000119C9 |
push |
2 |
|
000119CB |
push |
[ebp+arg_0] |
|
000119CE |
push |
esi |
|
000119CF |
call |
ds:KeInitializeApc |
|
000119D5 |
cmp |
edi, ebx |
|
000119D7 |
jz |
short loc_119EA |
|
000119D9 |
push |
ebx |
|
000119DA |
push |
[ebp+arg_C] |
|
000119DD |
push |
[ebp+arg_8] |
|
000119E0 |
push |
esi |
|
000119E1 |
call |
edi |
;KeInsertQueueApc |
Асинхронную процедуру нужно сначала инициализировать с помощью вызова KeInitializeApc. Если шестой аргумент, NormalRoutine , не равен нулю, а седьмой аргумент, ApcMode , равен 1, это означает, что процедура работает в пользовательском режиме. Таким образом, исследовав эти два параметра, вы можете определить, использует ли руткит внедрение APC для запуска кода в пространстве пользователя.
KeInitializeAPC инициализирует структуру KAPC, которая должна быть передана функции KeInsertQueueApc, чтобы объект APC был помещен в очередь атакуемого потока. В листинге 12.6 структура KAPC будет содержаться в регистре ESI.
Врезультате успешного выполнения KeInsertQueueApc асинхронная процедура попадет в очередь и будет готова к запуску.
Вданном примере вредонос ведет атаку на процесс svchost.exe, но, чтобы в этом убедиться, нам необходимо исследовать предпоследний аргумент, который помещается в стек для вызова KeInitializeApc. Он содержит поток, который будет внедрен.
Вданном случае это arg_0 . Следовательно, нам нужно вернуться назад по коду и посмотреть, какое значение присваивается этому аргументу: это позволит нам понять, что атака направлена на потоки процесса svchost.exe.
Итоги главы
В этой главе мы изучили распространенные методы скрытого запуска вредоносного ПО — от простых до продвинутых. Многие из них требуют модификации оперативной памяти в системе, как в случае с внедрением DLL, подменой процессов и уста-
|
|
|
|
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 |
|
|
|||
Глава 12. Скрытый запуск вредоносного ПО 295 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
новкой перехватчиков. Другие методики подразумевают изменение двоичных файлов на диске, как мы видели на примере добавления раздела .detour в PE-заголовок. И хотя эти приемы сильно разнятся, цель у них одна и та же.
Аналитик безопасности должен уметь распознавать разные способы запуска: это позволяет находить вредоносный код в работающей системе. Но определение
иисследование методик запуска являются лишь частью общего анализа, поскольку в конечном счете все загрузчики делают одно и то же: запускают вредоносное ПО.
Вследующих двух главах рассказывается, как вредоносы кодируют свои данные
ивзаимодействуют по сети.
Лабораторные работы
Лабораторная работа 12.1
Проанализируйте зараженные файлы Lab12-01.exe и Lab12-01.dll. Убедитесь, что во время анализа они находятся в одном и том же каталоге.
Вопросы
1.Что произойдет, если запустить вредоносный исполняемый файл?
2.В какой процесс выполняется внедрение?
3.Как заставить вредоносную программу прекратить открывать всплыва ющие окна?
4.Как этот вредонос работает?
Лабораторная работа 12.2
Проанализируйте зараженный файл Lab12-02.exe.
Вопросы
1.Каково назначение этой программы?
2.Как загрузчик скрывает выполнение?
3.Где хранится вредоносный код?
4.Как защищен вредоносный код?
5.Как защищены строки?
Лабораторная работа 12.3
Проанализируйте вредонос, извлеченный в лабораторной работе 12.2, или воспользуйтесь файлом Lab12-03.exe.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w |
|
|
to |
|
|
296 Часть IV • Возможности вредоносного ПО |
||||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
Вопросы
1.Каково назначение этого вредоносного кода?
2.Как вредоносный код себя внедряет?
3.Какие файлы эта программа оставляет после себя на диске?
Лабораторная работа 12.4
Проанализируйте зараженный файл Lab12-04.exe.
Вопросы
|
|
|
|
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 |
|
|
|
|
1.Что делает код по адресу 0x401000?
2.В какой процесс внедряется код?
3.Какая библиотека загружается с помощью функции LoadLibraryA?
4.Что передается вызову CreateRemoteThread в качестве четвертого аргумента?
5.Какой вредоносный код внедряется основным исполняемым файлом?
6.Каково назначение этого и внедряемого вредоносного кода?