hacktricks/reversing/common-api-used-in-malware.md

9.1 KiB

API Comuni utilizzate nel 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

{% embed url="https://discord.gg/tryhardsecurity" %}


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

  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

{% embed url="https://discord.gg/tryhardsecurity" %}

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

Altri modi per supportare HackTricks: