Common API used in Malware

Reading time: 4 minutes

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks

Generic

Networking

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

Persistence

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

Encryption

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

Anti-Analysis/VM

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

Stealth

Name
VirtualAllocAlloc memory (packers)
VirtualProtectChange memory permission (packer giving execution permission to a section)
ReadProcessMemoryInjection into external processes
WriteProcessMemoryA/WInjection into external processes
NtWriteVirtualMemory
CreateRemoteThreadDLL/Process injection...
NtUnmapViewOfSection
QueueUserAPC
CreateProcessInternalA/W

Execution

Function Name
CreateProcessA/W
ShellExecute
WinExec
ResumeThread
NtResumeThread

Miscellaneous

  • GetAsyncKeyState() -- Key logging
  • SetWindowsHookEx -- Key logging
  • GetForeGroundWindow -- Get running window name (or the website from a browser)
  • LoadLibrary() -- Import library
  • GetProcAddress() -- Import library
  • CreateToolhelp32Snapshot() -- List running processes
  • GetDC() -- Screenshot
  • BitBlt() -- Screenshot
  • InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Access the Internet
  • FindResource(), LoadResource(), LockResource() -- Access resources of the executable

Malware Techniques

DLL Injection

Eseguire un DLL arbitrario all'interno di un altro processo

  1. Individuare il processo in cui iniettare il DLL malevolo: CreateToolhelp32Snapshot, Process32First, Process32Next
  2. Aprire il processo: GetModuleHandle, GetProcAddress, OpenProcess
  3. Scrivere il percorso del DLL all'interno del processo: VirtualAllocEx, WriteProcessMemory
  4. Creare un thread nel processo che caricherà il DLL malevolo: CreateRemoteThread, LoadLibrary

Altre funzioni da utilizzare: NTCreateThreadEx, RtlCreateUserThread

Reflective DLL Injection

Caricare un DLL malevolo senza chiamare le normali API di Windows.
Il DLL è mappato all'interno di un processo, risolverà gli indirizzi di importazione, sistemerà le rilocazioni e chiamerà la funzione DllMain.

Thread Hijacking

Trovare un thread da un processo e farlo caricare un DLL malevolo

  1. Trovare un thread target: CreateToolhelp32Snapshot, Thread32First, Thread32Next
  2. Aprire il thread: OpenThread
  3. Sospendere il thread: SuspendThread
  4. Scrivere il percorso del DLL malevolo all'interno del processo vittima: VirtualAllocEx, WriteProcessMemory
  5. Riprendere il thread caricando la libreria: ResumeThread

PE Injection

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 malevolo

  1. Creare un nuovo processo: CreateProcess
  2. Rimuovere la mappatura della memoria: ZwUnmapViewOfSection, NtUnmapViewOfSection
  3. Scrivere il binario malevolo nella memoria del processo: VirtualAllocEc, WriteProcessMemory
  4. Impostare il punto di ingresso ed eseguire: SetThreadContext, ResumeThread

Hooking

  • Il SSDT (System Service Descriptor Table) punta a funzioni del kernel (ntoskrnl.exe) o driver GUI (win32k.sys) in modo che i processi utente possano chiamare queste funzioni.
  • Un rootkit può 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 IRP e ogni oggetto dispositivo ha la propria tabella di funzioni che può essere hookata: DKOM (Direct Kernel Object Manipulation)
  • La IAT (Import Address Table) è utile per risolvere le dipendenze. È possibile hookare questa tabella per dirottare il codice che verrà chiamato.
  • EAT (Export Address Table) Hooks. Questi hook possono essere effettuati da userland. L'obiettivo è hookare le funzioni esportate dai DLL.
  • Inline Hooks: Questo tipo è difficile da realizzare. Questo comporta la modifica del codice delle funzioni stesse. Forse mettendo un salto all'inizio di queste.

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks