Common API used in Malware

Support 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

VirtualAlloc

Alloc memory (packers)

VirtualProtect

Change memory permission (packer giving execution permission to a section)

ReadProcessMemory

Injection into external processes

WriteProcessMemoryA/W

Injection into external processes

NtWriteVirtualMemory

CreateRemoteThread

DLL/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 chiamate API di Windows. Il DLL è mappato all'interno di un processo, risolverà gli indirizzi di importazione, correggerà 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

  • La 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 a un 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 questo.

Support HackTricks

Last updated