Common API used in Malware
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 | Allokeer 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
Die malware sal die wettige kode uit die geheue van die proses onttrek en 'n kwaadwillige binêre laai
Skep 'n nuwe proses: CreateProcess
Ontkoppel die geheue: ZwUnmapViewOfSection, NtUnmapViewOfSection
Skryf die kwaadwillige binêre in die proses geheue: VirtualAllocEc, WriteProcessMemory
Stel die ingangspunt in en voer uit: SetThreadContext, ResumeThread
Hooking
Die SSDT (System Service Descriptor Table) wys na kernfunksies (ntoskrnl.exe) of GUI bestuurder (win32k.sys) sodat gebruikersprosesse hierdie funksies kan aanroep.
'n Rootkit kan hierdie punte 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 toestel objek 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 verandering van die kode van die funksies self. Miskien deur 'n sprongetjie aan die begin hiervan te plaas.
Last updated