Common API used in Malware
Загальні
Мережа
Сирі сокети | WinAPI сокети |
---|---|
socket() | WSAStratup() |
bind() | bind() |
listen() | listen() |
accept() | accept() |
connect() | connect() |
read()/recv() | recv() |
write() | send() |
shutdown() | WSACleanup() |
Постійність
Реєстр | Файл | Служба |
---|---|---|
RegCreateKeyEx() | GetTempPath() | OpenSCManager |
RegOpenKeyEx() | CopyFile() | CreateService() |
RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
RegDeleteKeyEx() | WriteFile() | |
RegGetValue() | ReadFile() |
Шифрування
Назва |
---|
WinCrypt |
CryptAcquireContext() |
CryptGenKey() |
CryptDeriveKey() |
CryptDecrypt() |
CryptReleaseContext() |
Анти-аналіз/VM
Назва функції | Інструкції асемблера |
---|---|
IsDebuggerPresent() | CPUID() |
GetSystemInfo() | IN() |
GlobalMemoryStatusEx() | |
GetVersion() | |
CreateToolhelp32Snapshot [Перевірте, чи працює процес] | |
CreateFileW/A [Перевірте, чи існує файл] |
Непомітність
Назва | |
---|---|
VirtualAlloc | Виділення пам'яті (пакери) |
VirtualProtect | Зміна дозволів пам'яті (пакер надає дозвіл на виконання секції) |
ReadProcessMemory | Ін'єкція в зовнішні процеси |
WriteProcessMemoryA/W | Ін'єкція в зовнішні процеси |
NtWriteVirtualMemory | |
CreateRemoteThread | Ін'єкція DLL/процесу... |
NtUnmapViewOfSection | |
QueueUserAPC | |
CreateProcessInternalA/W |
Виконання
Назва функції |
---|
CreateProcessA/W |
ShellExecute |
WinExec |
ResumeThread |
NtResumeThread |
Різне
GetAsyncKeyState() -- Логування клавіш
SetWindowsHookEx -- Логування клавіш
GetForeGroundWindow -- Отримати назву активного вікна (або вебсайту з браузера)
LoadLibrary() -- Імпорт бібліотеки
GetProcAddress() -- Імпорт бібліотеки
CreateToolhelp32Snapshot() -- Список запущених процесів
GetDC() -- Скриншот
BitBlt() -- Скриншот
InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Доступ до Інтернету
FindResource(), LoadResource(), LockResource() -- Доступ до ресурсів виконуваного файлу
Техніки шкідливого ПЗ
Ін'єкція DLL
Виконати довільну DLL всередині іншого процесу
Знайти процес для ін'єкції шкідливої DLL: CreateToolhelp32Snapshot, Process32First, Process32Next
Відкрити процес: GetModuleHandle, GetProcAddress, OpenProcess
Записати шлях до DLL всередині процесу: VirtualAllocEx, WriteProcessMemory
Створити потік у процесі, який завантажить шкідливу DLL: CreateRemoteThread, LoadLibrary
Інші функції для використання: NTCreateThreadEx, RtlCreateUserThread
Рефлексивна ін'єкція DLL
Завантажити шкідливу DLL без виклику звичайних API Windows. DLL відображається всередині процесу, вона вирішить адреси імпорту, виправить переміщення та викличе функцію DllMain.
Захоплення потоку
Знайти потік з процесу та змусити його завантажити шкідливу DLL
Знайти цільовий потік: CreateToolhelp32Snapshot, Thread32First, Thread32Next
Відкрити потік: OpenThread
Призупинити потік: SuspendThread
Записати шлях до шкідливої DLL всередині процесу жертви: VirtualAllocEx, WriteProcessMemory
Відновити потік, що завантажує бібліотеку: ResumeThread
Ін'єкція PE
Ін'єкція Portable Execution: Виконуваний файл буде записаний у пам'яті процесу жертви та буде виконаний звідти.
Порожнє процесу
Шкідливе ПЗ видалить легітимний код з пам'яті процесу та завантажить шкідливий бінарний файл
Створити новий процес: CreateProcess
Зняти відображення пам'яті: ZwUnmapViewOfSection, NtUnmapViewOfSection
Записати шкідливий бінарний файл у пам'ять процесу: VirtualAllocEc, WriteProcessMemory
Встановити точку входу та виконати: SetThreadContext, ResumeThread
Хукінг
SSDT (System Service Descriptor Table) вказує на функції ядра (ntoskrnl.exe) або драйвера GUI (win32k.sys), щоб користувацькі процеси могли викликати ці функції.
Руткіт може змінити ці вказівники на адреси, які він контролює.
IRP (I/O Request Packets) передають частини даних з одного компонента в інший. Практично все в ядрі використовує IRP, і кожен об'єкт пристрою має свою власну таблицю функцій, яку можна підключити: DKOM (Direct Kernel Object Manipulation).
IAT (Import Address Table) корисна для вирішення залежностей. Можливо підключити цю таблицю, щоб перехопити код, який буде викликано.
EAT (Export Address Table) Хуки. Ці хуки можуть бути зроблені з userland. Мета - підключити експортовані функції DLL.
Inline Hooks: Цей тип важко досягти. Це передбачає модифікацію коду самих функцій. Можливо, шляхом вставлення стрибка на початку цього.
Last updated