Algemene API’s wat in Malware gebruik word

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

Generies

Netwerk

Raw SocketsWinAPI Sockets
socket()WSAStratup()
bind()bind()
listen()listen()
accept()accept()
connect()connect()
read()/recv()recv()
write()send()
shutdown()WSACleanup()

TLS pinning and chunked transport

Baie loaders verpak hul TCP-stroom in SslStream en pin die bediener se leaf sertifikaat teen ’n ingebedde kopie (certificate pinning). Bot inligting/take word gekompresseer (bv. GZip). Wanneer antwoorde ’n drempel oorskry (~1 MB), word data in klein stukkies gefragmenteer (bv. 16 KB segmente) om grootte-gebaseerde heuristieke te omseil en geheuepieke tydens deserialisering te verminder.

Persistensie

RegistryFileService
RegCreateKeyEx()GetTempPath()OpenSCManager
RegOpenKeyEx()CopyFile()CreateService()
RegSetValueEx()CreateFile()StartServiceCtrlDispatcher()
RegDeleteKeyEx()WriteFile()
RegGetValue()ReadFile()

Enkripsie

Name
WinCrypt
CryptAcquireContext()
CryptGenKey()
CryptDeriveKey()
CryptDecrypt()
CryptReleaseContext()

Anti-analise/VM

Function NameAssembly Instructions
IsDebuggerPresent()CPUID()
GetSystemInfo()IN()
GlobalMemoryStatusEx()
GetVersion()
CreateToolhelp32Snapshot [Check if a process is running]
CreateFileW/A [Check if a file exist]

Locale/keyboard-gebaseerde uitvoeringswag

Baie stealers/loaders maak onklaar by sekere locales om navorsers te ontduik en aan dreig-aktor beperkings te voldoen. Tipiese kontroles:

  • GetKeyboardLayout om geïnstalleerde layouts te enumereer (per-thread/user)
  • GetLocaleInfoA/W om land/streek-kodes op te los
  • GetSystemDefaultLangID / GetUserDefaultLangID

As enigeen ooreenstem met ’n geblokkeerde lys (gewoonlik CIS-lande), sluit die loader dadelik voordat netwerk IOCs of injeksie plaasvind.

Verdediging/jag

  • Merk prosesse wat veelvuldige locale/sleutelbord-API’s vroeg in uitvoering bevraagteken en dan klaarmaak sonder waarneembare aktiwiteit.
  • Korreleer met anti-VM kontroles (BIOS-stringe, PnP-toestelle, skyfmodel, dienste) hergebruik uit open-source projekte (bv. VMDetector) om gated uitvoering vas te vang.

Emulator API fingerprinting & slaap-ontduiking

Malware vingerdruk dikwels sandbox emulators deur na Defender se virtualised exports te soek (gesien in die Malware Protection Emulator). As enige van hierdie simbole teenwoordig is (case-insensitive skandering van die proses), word uitvoering vertraag vir 10–30 minute en weer nagegaan om ontledingstyd te verspil.

Voorbeelde van API-name wat as kanaries gebruik word:

  • MpVmp32Entry, MpVmp32FastEnter, MpCallPreEntryPointCode, MpCallPostEntryPointCode, MpFinalize, MpReportEvent*, MpSwitchToNextThread*
  • VFS_* familie: VFS_Open, VFS_Read, VFS_MapViewOfFile, VFS_UnmapViewOfFile, VFS_FindFirstFile/FindNextFile, VFS_CopyFile, VFS_DeleteFile, VFS_MoveFile
  • ThrdMgr_*: ThrdMgr_GetCurrentThreadHandle, ThrdMgr_SaveTEB, ThrdMgr_SwitchThreads

Typical delay primitive (user-land):

cmd /c timeout /t %RANDOM_IN_[600,1800]% > nul

Argument-toegangsbeheer

  • Operateurs vereis soms dat ’n onskynend onskadelike CLI-skakelaar teenwoordig is voordat die payload uitgevoer word (bv. /i:--type=renderer om Chromium-child-processes na te boots). As die skakelaar afwesig is, sluit die laaier onmiddellik, wat naïewe sandbox-uitvoering belemmer.

Stealth

Naam
VirtualAllocAllokeer geheue (packers)
VirtualProtectVerander geheue-toestemming (packer wat ’n afdeling uitvoeringspermit gee)
ReadProcessMemoryInspuiting in eksterne prosesse
WriteProcessMemoryA/WInspuiting in eksterne prosesse
NtWriteVirtualMemory
CreateRemoteThreadDLL/Process injection…
NtUnmapViewOfSection
QueueUserAPC
CreateProcessInternalA/W

Uitvoering

Function Name
CreateProcessA/W
ShellExecute
WinExec
ResumeThread
NtResumeThread

Divers

  • GetAsyncKeyState() – Key logging
  • SetWindowsHookEx – Key logging
  • GetForeGroundWindow – Kry die naam van die lopende venster (of die webwerf vanaf ’n browser)
  • LoadLibrary() – Laai biblioteek
  • GetProcAddress() – Laai 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 lêer

Malware-tegnieke

DLL Injection

Execute an arbitrary DLL inside another process

  1. Vind die proses om die kwaadwillige DLL in te spuit: CreateToolhelp32Snapshot, Process32First, Process32Next
  2. Open die proses: GetModuleHandle, GetProcAddress, OpenProcess
  3. Skryf die pad na die DLL in die proses: VirtualAllocEx, WriteProcessMemory
  4. Skep ’n thread in die proses wat die kwaadwillige DLL sal laai: CreateRemoteThread, LoadLibrary

Other functions to use: NTCreateThreadEx, RtlCreateUserThread

Reflective DLL Injection

Load a malicious DLL without calling normal Windows API calls.
Die DLL word binne ’n proses gemap, dit sal die importadresse oplos, die relocations regmaak en die DllMain-funksie aanroep.

Thread Hijacking

Find a thread from a process and make it load a malicious DLL

  1. Vind ’n teikendraad: CreateToolhelp32Snapshot, Thread32First, Thread32Next
  2. Open die draad: OpenThread
  3. Skort die draad op: SuspendThread
  4. Skryf die pad na die kwaadwillige DLL in die slagofferproses: VirtualAllocEx, WriteProcessMemory
  5. Hervat die draad wat die biblioteek laai: ResumeThread

PE Injection

Portable Execution Injection: Die uitvoerbare lêer sal in die geheue van die slagofferproses geskryf word en daarvandaan uitgevoer word.

Process Hollowing (a.k.a RunPE)

Process Hollowing is one of the favourite defence-evasion / execution tricks used by Windows malware. Die idee is om ’n legitieme proses in die suspended toestand te loods, sy oorspronklike image uit die geheue te verwyder (hollow) en ’n arbitrary PE in sy plek te kopieer. Wanneer die primêre draad uiteindelik hervat word, voer die kwaadwillige entry-point uit onder die verskyning van ’n vertroude binêre (dikwels deur Microsoft geteken).

Tipiese werkvloeisel:

  1. Skep ’n onskadelike gasheer (bv. RegAsm.exe, rundll32.exe, msbuild.exe) suspended 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);
  1. Lees die kwaadwillige payload in geheue en parse die PE-headers om SizeOfImage, sections en die nuwe EntryPoint te verkry.
  2. NtUnmapViewOfSection / ZwUnmapViewOfSection – ontkoppel die oorspronklike image-basis van die geskortte proses.
  3. VirtualAllocEx – reserveer RWX-geheue van SizeOfImage binne die remote proses.
  4. WriteProcessMemory – kopieer eers die Headers, daarna loop oor die sections en kopieer hul raw data.
  5. SetThreadContext – patch die waarde van EAX/RAX (RCX on x64) of Rip in die kontekststruktuur sodat EIP na die payload se EntryPoint wys.
  6. ResumeThread – die draad gaan voort en voer die deur die aanvaller voorsiene kode uit.

Minimale proof-of-concept (x86) raamwerk:

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 opmerkings waargeneem in die DarkCloud Stealer veldtog:

  • Die loader het RegAsm.exe (deel van die .NET Framework) as gasheer gekies – ’n gesigneerde binary wat onwaarskynlik aandag sal trek.
  • Die gedekodeerde VB6 stealer (holographies.exe) word nie op skyf afgegooi nie; dit bestaan net binne die hollowed proses, wat statiese opsporing moeiliker maak.
  • Sensitiewe stringe (regexes, paths, Telegram credentials) is RC4-encrypted per-string en word slegs tydens runtime gedekodeer, wat geheueskandering verder bemoeilik.

Opsporingsidees:

  • Waarsku vir CREATE_SUSPENDED prosesse wat nooit GUI/console-vensters skep voordat ’n geheuegebied as RWX toegeken word nie (skaars vir bénigne kode).
  • Soek na ’n aanroepvolgorde NtUnmapViewOfSection ➜ VirtualAllocEx ➜ WriteProcessMemory oor verskillende prosesse.
  • Ongereelde gebruik van vertroude developer utilities as hollowing hosts, veral MSBuild.exe, RegAsm.exe, rundll32.exe, geparent deur kortlewende loaders.
  • Jaag vir msbuild.exe wat van user-writable paths gespawn is of sonder ooreenstemmende .sln/.proj konteks en dan uitgaande verbindings maak (ATT&CK T1127.001 + T1055.012).

Common host processes and path resolution

  • MSBuild.exe word gereeld gekies as ’n hollowing host om by developer tooling in te meng. Loaders soek dikwels argitektuur-geskikte plekke:
  • C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
  • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe
  • C:\Windows\System32\MSBuild.exe
  • C:\Windows\SysWOW64\MSBuild.exe
  • Kies die host wat ooreenstem met die huidige payload/OS-argitektuur voordat CreateProcess(..., CREATE_SUSPENDED, ...) aangeroep word.

Hooking

  • Die SSDT (System Service Descriptor Table) wys na kernel-funksies (ntoskrnl.exe) of GUI-driver (win32k.sys) sodat gebruikersprosesse hierdie funksies kan aanroep.
  • ’n rootkit kan hierdie wysigers verander na adresse wat dit beheer.
  • IRP (I/O Request Packets) dra datastukke van een komponent na ’n ander oor. Byna alles in die kernel gebruik IRPs en elke device object het sy eie functietabel wat ge-hook 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 ge-exporteerde funksies deur DLLs te hook.
  • Inline Hooks: Hierdie tipe is moeilik om te bereik. Dit behels die wysiging van die funksies se eie kode. Byvoorbeeld deur ’n jump aan die begin daarvan te plaas.

Verwysings

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