Common API used in Malware

Reading time: 3 minutes

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie 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
VirtualAllocAlokacja pamięci (pakery)
VirtualProtectZmiana uprawnień pamięci (pakery nadające uprawnienia do wykonania sekcji)
ReadProcessMemoryWstrzykiwanie do zewnętrznych procesów
WriteProcessMemoryA/WWstrzykiwanie do zewnętrznych procesów
NtWriteVirtualMemory
CreateRemoteThreadWstrzykiwanie 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() -- Importowanie biblioteki
  • GetProcAddress() -- Importowanie 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 dowolną DLL w innym procesie

  1. Zlokalizuj proces, do którego wstrzykniesz złośliwą 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śliwą DLL: CreateRemoteThread, LoadLibrary

Inne funkcje do użycia: NTCreateThreadEx, RtlCreateUserThread

Reflective DLL Injection

Załaduj złośliwą DLL bez wywoływania normalnych wywołań API systemu Windows.
DLL jest mapowana 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śliwą 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śliwej DLL wewnątrz procesu ofiary: VirtualAllocEx, WriteProcessMemory
  5. Wznów wątek ładujący bibliotekę: ResumeThread

PE Injection

Wstrzykiwanie Portable Execution: Wykonywalny plik 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 eksportowanych funkcji 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.

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks