Algemene API's wat in Malware gebruik word
Reading time: 6 minutes
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Generies
Netwerk
Rauwe Sockets | WinAPI Sockets |
---|---|
socket() | WSAStratup() |
bind() | bind() |
listen() | listen() |
accept() | accept() |
connect() | connect() |
read()/recv() | recv() |
write() | send() |
shutdown() | WSACleanup() |
Volharding
Registrasie | Lêer | Diens |
---|---|---|
RegCreateKeyEx() | GetTempPath() | OpenSCManager |
RegOpenKeyEx() | CopyFile() | CreateService() |
RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
RegDeleteKeyEx() | WriteFile() | |
RegGetValue() | ReadFile() |
Enkripsie
Naam |
---|
WinCrypt |
CryptAcquireContext() |
CryptGenKey() |
CryptDeriveKey() |
CryptDecrypt() |
CryptReleaseContext() |
Anti-Analise/VM
Funksie Naam | Assembly Instruksies |
---|---|
IsDebuggerPresent() | CPUID() |
GetSystemInfo() | IN() |
GlobalMemoryStatusEx() | |
GetVersion() | |
CreateToolhelp32Snapshot [Kontroleer of 'n proses loop] | |
CreateFileW/A [Kontroleer of 'n lêer bestaan] |
Stealth
Naam | |
---|---|
VirtualAlloc | Toewys geheue (packers) |
VirtualProtect | Verander geheue toestemming (packer gee uitvoerings toestemming aan 'n afdeling) |
ReadProcessMemory | Inspuiting in eksterne prosesse |
WriteProcessMemoryA/W | Inspuiting in eksterne prosesse |
NtWriteVirtualMemory | |
CreateRemoteThread | DLL/Proses inspuiting... |
NtUnmapViewOfSection | |
QueueUserAPC | |
CreateProcessInternalA/W |
Uitvoering
Funksie Naam |
---|
CreateProcessA/W |
ShellExecute |
WinExec |
ResumeThread |
NtResumeThread |
Divers
- GetAsyncKeyState() -- Sleutel logging
- SetWindowsHookEx -- Sleutel logging
- GetForeGroundWindow -- Kry die naam van die lopende venster (of die webwerf van 'n blaaier)
- LoadLibrary() -- Importeer biblioteek
- GetProcAddress() -- Importeer biblioteek
- CreateToolhelp32Snapshot() -- Lys lopende prosesse
- GetDC() -- Skermskoot
- BitBlt() -- Skermskoot
- InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Toegang tot die Internet
- FindResource(), LoadResource(), LockResource() -- Toegang tot hulpbronne van die uitvoerbare
Malware Tegnieke
DLL Inspuiting
Voer 'n arbitrêre DLL binne 'n ander proses uit
- Vind die proses om die kwaadwillige DLL in te spuit: CreateToolhelp32Snapshot, Process32First, Process32Next
- Maak die proses oop: GetModuleHandle, GetProcAddress, OpenProcess
- Skryf die pad na die DLL binne die proses: VirtualAllocEx, WriteProcessMemory
- Skep 'n draad in die proses wat die kwaadwillige DLL sal laai: CreateRemoteThread, LoadLibrary
Ander funksies om te gebruik: NTCreateThreadEx, RtlCreateUserThread
Reflektiewe DLL Inspuiting
Laai 'n kwaadwillige DLL sonder om normale Windows API-oproepe te doen.
Die DLL word binne 'n proses gemap, dit sal die invoeradresse oplos, die herlokasies regmaak en die DllMain-funksie aanroep.
Draad Hijacking
Vind 'n draad van 'n proses en laat dit 'n kwaadwillige DLL laai
- Vind 'n teiken draad: CreateToolhelp32Snapshot, Thread32First, Thread32Next
- Maak die draad oop: OpenThread
- Suspend die draad: SuspendThread
- Skryf die pad na die kwaadwillige DLL binne die slagoffer proses: VirtualAllocEx, WriteProcessMemory
- Herbegin die draad wat die biblioteek laai: ResumeThread
PE Inspuiting
Portabele Uitvoering Inspuiting: Die uitvoerbare sal in die geheue van die slagoffer proses geskryf word en daarvandaan uitgevoer word.
Proses Hollowing (ook bekend as RunPE)
Process Hollowing
is een van die gunsteling verdediging-ontwyking / uitvoering truuks wat deur Windows malware gebruik word. Die idee is om 'n legitieme proses in die gesuspendeerde toestand te begin, die oorspronklike beeld uit geheue te verwyder (hol) en 'n arbitrêre PE in sy plek te kopieer. Wanneer die primêre draad uiteindelik herbegin word, voer die kwaadwillige toegangspunt uit onder die dekmantel van 'n vertroude binêre (dikwels deur Microsoft onderteken).
Tipiese werksvloei:
- Begin 'n goedaardige gasheer (bv.
RegAsm.exe
,rundll32.exe
,msbuild.exe
) gesuspendeer sodat geen instruksies nog loop nie.
STARTUPINFOA si = { sizeof(si) };
PROCESS_INFORMATION pi;
CreateProcessA("C:\\Windows\\Microsoft.NET\\Framework32\\v4.0.30319\\RegAsm.exe",
NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
- Lees die kwaadwillige payload in geheue en ontleed sy PE kopstukke om
SizeOfImage
, afdelings en die nuweEntryPoint
te verkry. - NtUnmapViewOfSection / ZwUnmapViewOfSection – ontkoppel die oorspronklike beeldbasis van die gesuspendeerde proses.
- VirtualAllocEx – reserveer RWX geheue van
SizeOfImage
binne die afgeleë proses. - WriteProcessMemory – kopieer die
Headers
eerste, dan oor afdelings iterasie en kopieer hul ruwe data. - SetThreadContext – patch die waarde van
EAX/RAX
(RCX
op x64) ofRip
in die konteksstruktuur sodatEIP
na die payload seEntryPoint
wys. - ResumeThread – die draad gaan voort, en voer die aanvaller-geleverde kode uit.
Minimale bewys-van-konsep (x86) skelet:
void RunPE(LPCSTR host, LPVOID payload, DWORD payloadSize){
// 1. create suspended process
STARTUPINFOA si = {sizeof(si)}; PROCESS_INFORMATION pi;
CreateProcessA(host, NULL,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,&si,&pi);
// 2. read remote PEB to get ImageBaseAddress
CONTEXT ctx; ctx.ContextFlags = CONTEXT_FULL;
GetThreadContext(pi.hThread,&ctx);
PVOID baseAddr;
ReadProcessMemory(pi.hProcess,(PVOID)(ctx.Ebx+8),&baseAddr,4,NULL);
// 3. unmap original image & allocate new region at same base
NtUnmapViewOfSection(pi.hProcess,baseAddr);
PVOID newBase = VirtualAllocEx(pi.hProcess,baseAddr,pHdr->OptionalHeader.SizeOfImage,
MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE);
// 4-5. copy headers & sections …
// 6. write new image base into PEB and set Eip
WriteProcessMemory(pi.hProcess,(PVOID)(ctx.Ebx+8),&baseAddr,4,NULL);
ctx.Eax = (DWORD)(newBase) + pHdr->OptionalHeader.AddressOfEntryPoint;
SetThreadContext(pi.hThread,&ctx);
// 7. run!
ResumeThread(pi.hThread);
}
Praktiese notas waargeneem in die DarkCloud Stealer veldtog:
- Die loader het
RegAsm.exe
(deel van die .NET Framework) as gasheer gekies – 'n ondertekende binêre wat onwaarskynlik aandag sal trek. - Die gedekripteerde VB6 stealer (
holographies.exe
) word nie op skyf gelaat nie; dit bestaan slegs binne die uitgeholde proses, wat statiese opsporing moeiliker maak. - Sensitiewe strings (regexes, paaie, Telegram akrediteer) is RC4-geënkripteer per string en word slegs tydens uitvoering gedekripteer, wat geheue skandering verder kompliseer.
Opsporingsidees:
- Alarmeer op
CREATE_SUSPENDED
prosesse wat nooit GUI/konsole vensters skep voordat 'n geheuegebied as RWX (selde vir goedaardige kode) toegeken word nie. - Soek vir 'n oproepvolgorde
NtUnmapViewOfSection ➜ VirtualAllocEx ➜ WriteProcessMemory
oor verskillende prosesse.
Hooking
- Die SSDT (System Service Descriptor Table) verwys na kernfunksies (ntoskrnl.exe) of GUI stuurprogram (win32k.sys) sodat gebruikersprosesse hierdie funksies kan aanroep.
- 'n Rootkit kan hierdie wysers na adresse wat hy beheer, verander.
- IRP (I/O Request Packets) stuur stukke data van een komponent na 'n ander. Byna alles in die kern gebruik IRP's en elke toestelobjek het sy eie funksietabel wat gehook kan word: DKOM (Direct Kernel Object Manipulation)
- Die IAT (Import Address Table) is nuttig om afhanklikhede op te los. Dit is moontlik om hierdie tabel te hook om die kode wat aangeroep sal word, te kap.
- EAT (Export Address Table) Hooks. Hierdie hooks kan vanaf userland gedoen word. Die doel is om geexporteerde funksies deur DLL's te hook.
- Inline Hooks: Hierdie tipe is moeilik om te bereik. Dit behels die aanpassing van die kode van die funksies self. Miskien deur 'n sprongetjie aan die begin hiervan te plaas.
References
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.