Common API used in Malware
Try Hard Security Group
Generico
Networking
Raw Sockets | WinAPI Sockets |
---|---|
socket() | WSAStratup() |
bind() | bind() |
listen() | listen() |
accept() | accept() |
connect() | connect() |
read()/recv() | recv() |
write() | send() |
shutdown() | WSACleanup() |
Persistenza
Registro | File | Servizio |
---|---|---|
RegCreateKeyEx() | GetTempPath() | OpenSCManager |
RegOpenKeyEx() | CopyFile() | CreateService() |
RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
RegDeleteKeyEx() | WriteFile() | |
RegGetValue() | ReadFile() |
Crittografia
Nome |
---|
WinCrypt |
CryptAcquireContext() |
CryptGenKey() |
CryptDeriveKey() |
CryptDecrypt() |
CryptReleaseContext() |
Anti-Analisi/VM
Nome Funzione | Istruzioni Assembly |
---|---|
IsDebuggerPresent() | CPUID() |
GetSystemInfo() | IN() |
GlobalMemoryStatusEx() | |
GetVersion() | |
CreateToolhelp32Snapshot [Controlla se un processo è in esecuzione] | |
CreateFileW/A [Controlla se un file esiste] |
Stealth
Nome | |
---|---|
VirtualAlloc | Allocare memoria (packers) |
VirtualProtect | Cambiare le autorizzazioni di memoria (packer che dà autorizzazione di esecuzione a una sezione) |
ReadProcessMemory | Iniezione in processi esterni |
WriteProcessMemoryA/W | Iniezione in processi esterni |
NtWriteVirtualMemory | |
CreateRemoteThread | Iniezione DLL/Processo... |
NtUnmapViewOfSection | |
QueueUserAPC | |
CreateProcessInternalA/W |
Esecuzione
Nome Funzione |
---|
CreateProcessA/W |
ShellExecute |
WinExec |
ResumeThread |
NtResumeThread |
Varie
GetAsyncKeyState() -- Key logging
SetWindowsHookEx -- Key logging
GetForeGroundWindow -- Ottieni il nome della finestra in esecuzione (o il sito web da un browser)
LoadLibrary() -- Importa libreria
GetProcAddress() -- Importa libreria
CreateToolhelp32Snapshot() -- Elenca i processi in esecuzione
GetDC() -- Schermata
BitBlt() -- Schermata
InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Accesso a Internet
FindResource(), LoadResource(), LockResource() -- Accesso alle risorse dell'eseguibile
Tecniche Malware
Iniezione DLL
Esegue una DLL arbitraria all'interno di un altro processo
Trova il processo in cui iniettare la DLL dannosa: CreateToolhelp32Snapshot, Process32First, Process32Next
Apre il processo: GetModuleHandle, GetProcAddress, OpenProcess
Scrive il percorso della DLL all'interno del processo: VirtualAllocEx, WriteProcessMemory
Crea un thread nel processo che caricherà la DLL dannosa: CreateRemoteThread, LoadLibrary
Altre funzioni da utilizzare: NTCreateThreadEx, RtlCreateUserThread
Iniezione DLL Riflessiva
Carica una DLL dannosa senza chiamare le normali chiamate API di Windows. La DLL è mappata all'interno di un processo, risolverà gli indirizzi di importazione, correggerà le rilocazioni e chiamerà la funzione DllMain.
Dirottamento Thread
Trova un thread da un processo e fai sì che carichi una DLL dannosa
Trova un thread target: CreateToolhelp32Snapshot, Thread32First, Thread32Next
Apre il thread: OpenThread
Sospendi il thread: SuspendThread
Scrivi il percorso della DLL dannosa all'interno del processo vittima: VirtualAllocEx, WriteProcessMemory
Riprendi il thread caricando la libreria: ResumeThread
Iniezione PE
Iniezione di Esecuzione Portatile: L'eseguibile sarà scritto nella memoria del processo vittima e verrà eseguito da lì.
Process Hollowing
Il malware rimuoverà il codice legittimo dalla memoria del processo e caricherà un binario dannoso
Crea un nuovo processo: CreateProcess
Rimuovi la memoria: ZwUnmapViewOfSection, NtUnmapViewOfSection
Scrivi il binario dannoso nella memoria del processo: VirtualAllocEc, WriteProcessMemory
Imposta il punto di ingresso ed esegui: SetThreadContext, ResumeThread
Hooking
Il SSDT (System Service Descriptor Table) punta alle funzioni del kernel (ntoskrnl.exe) o al driver GUI (win32k.sys) in modo che i processi utente possano chiamare queste funzioni.
Un rootkit potrebbe modificare questi puntatori a indirizzi che controlla
IRP (I/O Request Packets) trasmettono pezzi di dati da un componente all'altro. Quasi tutto nel kernel utilizza gli IRP e ogni oggetto dispositivo ha la propria tabella delle funzioni che possono essere agganciate: DKOM (Direct Kernel Object Manipulation)
L'IAT (Import Address Table) è utile per risolvere le dipendenze. È possibile agganciare questa tabella per dirottare il codice che verrà chiamato.
EAT (Export Address Table) Hooks. Questi hooks possono essere fatti da userland. L'obiettivo è agganciare le funzioni esportate dalle DLL.
Inline Hooks: Questo tipo è difficile da raggiungere. Coinvolge la modifica del codice delle funzioni stesse. Forse inserendo un salto all'inizio di questo.
Try Hard Security Group
Last updated