Common API used in Malware
Група з безпеки Try Hard
Загальне
Мережа
Raw Sockets | WinAPI Sockets |
---|---|
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() |
Анти-аналіз/ВМ
Назва функції | Інструкції збірки |
---|---|
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), щоб користувацькі процеси могли викликати ці функції.
Rootkit може змінювати ці вказівники на адреси, якими він керує
IRP (I/O Request Packets) передають шматки даних від одного компонента до іншого. Майже все в ядрі використовує IRP, і кожен об'єкт пристрою має свою власну таблицю функцій, яку можна перехопити: DKOM (Direct Kernel Object Manipulation)
IAT (Import Address Table) корисна для вирішення залежностей. Можливо перехопити цю таблицю, щоб перехопити код, який буде викликаний.
EAT (Export Address Table) Перехоплення. Ці перехоплення можна виконати з userland. Мета - перехопити експортовані функції DLL.
Inline Hooks: Цей тип важко досягти. Це включає модифікацію коду функцій самого себе. Можливо, вставивши стрибок на початку цього.
Група з безпеки Try Hard
Last updated