Common API used in Malware

Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

Try Hard Security Group


Generico

Networking

Raw SocketsWinAPI Sockets

socket()

WSAStratup()

bind()

bind()

listen()

listen()

accept()

accept()

connect()

connect()

read()/recv()

recv()

write()

send()

shutdown()

WSACleanup()

Persistenza

RegistroFileServizio

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 FunzioneIstruzioni 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

  1. Trova il processo in cui iniettare la DLL dannosa: CreateToolhelp32Snapshot, Process32First, Process32Next

  2. Apre il processo: GetModuleHandle, GetProcAddress, OpenProcess

  3. Scrive il percorso della DLL all'interno del processo: VirtualAllocEx, WriteProcessMemory

  4. 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

  1. Trova un thread target: CreateToolhelp32Snapshot, Thread32First, Thread32Next

  2. Apre il thread: OpenThread

  3. Sospendi il thread: SuspendThread

  4. Scrivi il percorso della DLL dannosa all'interno del processo vittima: VirtualAllocEx, WriteProcessMemory

  5. 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

  1. Crea un nuovo processo: CreateProcess

  2. Rimuovi la memoria: ZwUnmapViewOfSection, NtUnmapViewOfSection

  3. Scrivi il binario dannoso nella memoria del processo: VirtualAllocEc, WriteProcessMemory

  4. 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

Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

Last updated