Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2015_лекции / Лекция №5_2015

.pdf
Скачиваний:
58
Добавлен:
22.03.2016
Размер:
3.84 Mб
Скачать

Вставка DLL c помощью глобальных ловушек

Общая схема загрузки вредоносной DLL с помощью ловушек

HHOOK SetWindowsHookEx(int idHook, HOOKPROC lpMalFunction, HINSTANCE hMaliciousDLL, DWORD dwRemoteThreadId)

Name

Type

Description

 

 

Число, представляющее тип ловушки -

 

 

например WH_KEYBOARD или

idHook

Integer

H_KEYBOARD_LL

lpMalFunction

HOOKPROC

Адрес в памяти функции ловушки

 

 

Дескриптор dll в которой находится функция.

 

 

Если это локальная ловушка, то этот

hMod

HINSTANCE

параметр 0.

 

 

'id потока', который Ваша программа будет

dwRemoteThre

 

контролировать. Если это глобальная

adId

DWORD

ловушка, то параметр должен быть 0.

Константа

Описание

 

Фильтр процедуры окна. Функция-фильтр ловушки вызывается, когда процедуре окна

 

посылается сообщение. Windows вызывает этот хук при каждом вызове функции

WH_CALLWNDPROC

SendMessage.

 

Функция-фильтр, контролирующая сообщения после их обработки процедурой окна

WH_CALLWNDPROCRET

приемника.

 

В литературе встречаются следующие названия для этого типа фильтров: "тренировочный"

 

или "обучающий". Данная ловушка вызывается перед обработкой большинства сообщений

WH_CBT

окон, мыши и клавиатуры.

 

Функция-фильтр, предназначенная для отладки. Функция-фильтр ловушки вызывается

 

перед любой другой ловушкой Windows. Удобный инструмент для отладки и контроля

WH_DEBUG

ловушек.

 

Функция-фильтр обработки сообщений. Функция-фильтр ловушки вызывается всегда, когда

WH_GETMESSAGE

из очереди приложения считывается любое сообщение.

 

Функция-фильтр, обрабатывающая сообщения оборудования. Функция-фильтр ловушки

WH_HARDWARE

вызывается, когда из очереди приложения считывается сообщение оборудования.

 

Функция-фильтр вызывается, когда из очереди системы считывается любое сообщение.

WH_JOURNALPLAYBACK

Используется для вставки в очередь системных событий.

 

Функция-фильтр вызывается, когда из очереди системы запрашивается какое-либо

WH_JOURNALRECORD

событие. Используется для регистрации системных событий.

 

Функция-фильтр "обработки" клавиатуры. Наверное, наиболее часто используемый тип

 

ловушки. Функция-фильтр ловушки вызывается, когда из очереди приложения считывается

WH_KEYBOARD

сообщения wm_KeyDown или wm_KeyUp.

WH_KEYBOARD_LL

Низкоуровневый фильтр клавиатуры.

 

Функция-фильтр, обрабатывающая сообщения мыши. Функция-фильтр ловушки

WH_MOUSE

вызывается, когда из очереди приложения считывается сообщение мыши.

WH_MOUSE_LL

Низкоуровневый фильтр мыши.

 

Функция-фильтр специального сообщения. Функция-фильтр ловушки вызывается, когда

 

сообщение должно быть обработано диалоговым окном приложения, меню или окном

WH_MSGFILTER

приложения.

 

Фильтр приложения оболочки. Функция-фильтр ловушки вызывается, когда создаются и

 

разрушаются окна верхнего уровня или когда приложению-оболочке требуется стать

WH_SHELL

активным.

Общая схема загрузки вредоносной DLL с помощью ловушек

LRESULT CallNextHookEx() – вызов следующий в списке обработчик ловушки

BOOL UnhookWindowsHookEx(HHOOK hhk)-

отключает обработчик ловушки

Общая схема загрузки вредоносной DLL с помощью ловушек

Выбор атакуемого процесса в зависимости от задачи ВРПО:

Если у нас кейлоггер, то внедрение может осуществляться во все процессы.

=> сказывается на эффективности работы системы

Если цель загрузить dll => атакуется только один определенный процесс (=> в коде будет присутствовать процедура выбора «жертвы»)

Обычно выбираются редко используемые события для сокрытия своего присутствия (например,

WH_CBT)

Вставка кода с помощью асинхронного вызова процедур

Asynchronous Procedure Call — асинхронный вызов процедуры — документированный механизм в Windows, позволяющий выполнить код в контексте потока, «нарушая» естественный ход выполнения потока.

У каждого потока своя очередь APC –процедур

APC бывают двух видов: режима ядра и пользовательского режима.

APC режима ядра прерывает поток и выполняет процедуру без вмешательства или согласия потока

APC-процедуры пользовательского режима выполняются, когда поток находится в состоянии тревожного ожидания(когда были вызваны такие функции как WaitForSingleObjectEx, WaitForMultipleObjectsEx, Sleep).

Вставка кода с помощью асинхронного вызова процедур

Вставка APC-процедуры

DWORD WINAPI QueueUserAPC(

_In_ PAPCFUNC pfnAPC, указатель на функцию APC

_In_ HANDLE hThread, хендл потока,

которому устанавливается APC _In_ ULONG_PTR dwData данные

);

Часто атакуется svchost.exe, т.к его потоки часто находятся в состоянии тревожного ожидания.

Указатель на функцию = адрес LoadLibrary

Данные = путь к внедряемой библиотеке

Вставка вредоносного кода в адресное пространство процесса

В отличии от вставки dll вставляется непосредственно код в адресное пространство процесса =>

Используется для вставки шелл-кода

Чаще всего используются функции VirtualAllocEx, WriteProcessMemory (обычно дважды для записи данных (1) и кода удаленной нити (2)) и

CreateRemoteThread

При анализе ВРПО необходимо создать дамп памяти всех буферов, которые создаются до вызова функции

WriteProcessMemory

Замена процесса вредоносным процессом

Перезаписывается память запущенного процесса вредоносным =>

Вредоносный процесс маскируется под легитимный (например, svchost.exe) без риска нарушить работоспособность процесса

Основная идея подхода – создание процесса в приостановленном состоянии.

Замена процесса вредоносным процессом

Создать процесс в приостановленном состоянии

Высвободить память, занимаемую легитимным процессом (ZwUnmapViewOfSection)

Выделить память под вредоносный код и записать его (VirtualAllocEx, WriteProcessMemory) В

Восстановить контекст приостановленного процесса, предварительно перезаписав точку входа

(SetThreadContext)

Перезапустить процесс для запуска вредоносного кода ResumeThread)

Соседние файлы в папке 2015_лекции