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

7.9 KiB

Powszechne API używane w złośliwym oprogramowaniu

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Try Hard Security Group

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


Ogólne

Sieciowe

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

Trwałość

Rejestr Plik Usługa
RegCreateKeyEx() GetTempPath() OpenSCManager
RegOpenKeyEx() CopyFile() CreateService()
RegSetValueEx() CreateFile() StartServiceCtrlDispatcher()
RegDeleteKeyEx() WriteFile()
RegGetValue() ReadFile()

Szyfrowanie

Nazwa
WinCrypt
CryptAcquireContext()
CryptGenKey()
CryptDeriveKey()
CryptDecrypt()
CryptReleaseContext()

Anty-Analiza/VM

Nazwa Funkcji Instrukcje Assembly
IsDebuggerPresent() CPUID()
GetSystemInfo() IN()
GlobalMemoryStatusEx()
GetVersion()
CreateToolhelp32Snapshot [Sprawdź, czy proces jest uruchomiony]
CreateFileW/A [Sprawdź, czy plik istnieje]

Ukrywanie

Nazwa
VirtualAlloc Alokuje pamięć (pakowacze)
VirtualProtect Zmienia uprawnienia pamięci (pakowacz nadaje uprawnienia do wykonania sekcji)
ReadProcessMemory Wstrzyknięcie do zewnętrznych procesów
WriteProcessMemoryA/W Wstrzyknięcie do zewnętrznych procesów
NtWriteVirtualMemory
CreateRemoteThread Wstrzyknięcie DLL/procesu...
NtUnmapViewOfSection
QueueUserAPC
CreateProcessInternalA/W

Wykonanie

Nazwa Funkcji
CreateProcessA/W
ShellExecute
WinExec
ResumeThread
NtResumeThread

Różne

  • GetAsyncKeyState() -- Rejestracja klawiszy
  • SetWindowsHookEx -- Rejestracja klawiszy
  • GetForeGroundWindow -- Pobierz nazwę uruchomionego okna (lub witrynę z przeglądarki)
  • LoadLibrary() -- Importuj bibliotekę
  • GetProcAddress() -- Importuj bibliotekę
  • CreateToolhelp32Snapshot() -- Lista uruchomionych 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

Techniki Malware

Wstrzykiwanie DLL

Wykonaj dowolną DLL w innym procesie

  1. Zlokalizuj proces do wstrzyknięcia złośliwej 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

Wstrzykiwanie Refleksyjne DLL

Załaduj złośliwą DLL bez wywoływania normalnych wywołań API systemu Windows.
DLL jest mapowana wewnątrz procesu, rozwiąże adresy importu, naprawi relokacje i wywoła funkcję DllMain.

Przechwytywanie Wątków

Znajdź wątek w procesie 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 ładowania biblioteki: ResumeThread

Wstrzykiwanie PE

Wstrzyknięcie Wykonywalne: Wykonywalny plik zostanie zapisany w pamięci procesu ofiary i zostanie wykonany stamtąd.

Wstrzykiwanie Procesów

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

  1. Utwórz nowy proces: CreateProcess
  2. Odmapuj pamięć: 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), dzięki czemu procesy użytkownika mogą wywoływać te funkcje.
  • Rootkit może zmodyfikować te wskaźniki na adresy, 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 własną tabelę funkcji, którą można przechwycić: DKOM (Bezpośrednie Modyfikacje Obiektów Jądra)
  • IAT (Import Address Table) jest przydatna do rozwiązywania zależności. Można przechwycić tę tabelę, aby przejąć kod, który zostanie wywołany.
  • EAT (Export Address Table) Hooks. Te haki można wykonać z userland. Celem jest przechwycenie funkcji eksportowanych przez biblioteki DLL.
  • Inline Hooks: Ten typ jest trudny do osiągnięcia. Polega to na modyfikowaniu kodu funkcji. Być może poprzez umieszczenie skoku na początku tego.
  • Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do HackTricks i HackTricks Cloud na githubie.