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

8.9 KiB

Common API used in Malware

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Try Hard Security Group

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


Generic

Networking

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

Persistence

Registry File Service
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 Name Assembly Instructions
IsDebuggerPresent() CPUID()
GetSystemInfo() IN()
GlobalMemoryStatusEx()
GetVersion()
CreateToolhelp32Snapshot [Check if a process is running]
CreateFileW/A [Check if a file exist]

Stealth

Name
VirtualAlloc Alokacja pamięci (pakery)
VirtualProtect Zmiana uprawnień pamięci (pakery nadające uprawnienia do wykonania sekcji)
ReadProcessMemory Wstrzykiwanie do zewnętrznych procesów
WriteProcessMemoryA/W Wstrzykiwanie do zewnętrznych procesów
NtWriteVirtualMemory
CreateRemoteThread Wstrzykiwanie DLL/procesu...
NtUnmapViewOfSection
QueueUserAPC
CreateProcessInternalA/W

Execution

Function Name
CreateProcessA/W
ShellExecute
WinExec
ResumeThread
NtResumeThread

Miscellaneous

  • GetAsyncKeyState() -- Rejestrowanie klawiszy
  • SetWindowsHookEx -- Rejestrowanie klawiszy
  • GetForeGroundWindow -- Uzyskanie nazwy działającego okna (lub strony internetowej z przeglądarki)
  • LoadLibrary() -- Import biblioteki
  • GetProcAddress() -- Import biblioteki
  • CreateToolhelp32Snapshot() -- Lista działających procesów
  • GetDC() -- Zrzut ekranu
  • BitBlt() -- Zrzut ekranu
  • InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Dostęp do Internetu
  • FindResource(), LoadResource(), LockResource() -- Dostęp do zasobów wykonywalnych

Malware Techniques

DLL Injection

Wykonaj dowolny DLL w innym procesie

  1. Zlokalizuj proces, do którego wstrzykniesz złośliwy DLL: CreateToolhelp32Snapshot, Process32First, Process32Next
  2. Otwórz proces: GetModuleHandle, GetProcAddress, OpenProcess
  3. Zapisz ścieżkę do DLL wewnątrz procesu: VirtualAllocEx, WriteProcessMemory
  4. Utwórz wątek w procesie, który załaduje złośliwy DLL: CreateRemoteThread, LoadLibrary

Inne funkcje do użycia: NTCreateThreadEx, RtlCreateUserThread

Reflective DLL Injection

Załaduj złośliwy DLL bez wywoływania normalnych wywołań API Windows.
DLL jest mapowany wewnątrz procesu, rozwiązuje adresy importu, naprawia relokacje i wywołuje funkcję DllMain.

Thread Hijacking

Znajdź wątek z procesu i spraw, aby załadował złośliwy DLL

  1. Znajdź docelowy wątek: CreateToolhelp32Snapshot, Thread32First, Thread32Next
  2. Otwórz wątek: OpenThread
  3. Wstrzymaj wątek: SuspendThread
  4. Zapisz ścieżkę do złośliwego DLL wewnątrz procesu ofiary: VirtualAllocEx, WriteProcessMemory
  5. Wznów wątek ładujący bibliotekę: ResumeThread

PE Injection

Wstrzykiwanie Portable Execution: Wykonywalny kod zostanie zapisany w pamięci procesu ofiary i będzie wykonywany stamtąd.

Process Hollowing

Złośliwe oprogramowanie usunie legalny kod z pamięci procesu i załaduje złośliwy plik binarny

  1. Utwórz nowy proces: CreateProcess
  2. Usuń mapę pamięci: ZwUnmapViewOfSection, NtUnmapViewOfSection
  3. Zapisz złośliwy plik binarny w pamięci procesu: VirtualAllocEc, WriteProcessMemory
  4. Ustaw punkt wejścia i wykonaj: SetThreadContext, ResumeThread

Hooking

  • SSDT (System Service Descriptor Table) wskazuje na funkcje jądra (ntoskrnl.exe) lub sterownik GUI (win32k.sys), aby procesy użytkownika mogły wywoływać te funkcje.
  • Rootkit może modyfikować te wskaźniki do adresów, które kontroluje
  • IRP (I/O Request Packets) przesyłają fragmenty danych z jednego komponentu do drugiego. Prawie wszystko w jądrze używa IRP, a każdy obiekt urządzenia ma swoją własną tabelę funkcji, która może być podłączona: DKOM (Direct Kernel Object Manipulation)
  • IAT (Import Address Table) jest przydatna do rozwiązywania zależności. Możliwe jest podłączenie tej tabeli, aby przejąć kod, który będzie wywoływany.
  • EAT (Export Address Table) Hooki. Te hooki mogą być realizowane z userland. Celem jest podłączenie funkcji eksportowanych przez DLL.
  • Inline Hooks: Ten typ jest trudny do osiągnięcia. To wiąże się z modyfikowaniem kodu samych funkcji. Może poprzez umieszczenie skoku na początku tego.

Try Hard Security Group

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

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}