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

8.3 KiB

Häufig verwendete APIs in Malware

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Try Hard Security Group

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


Generisch

Netzwerk

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

Persistenz

Registry Datei Dienst
RegCreateKeyEx() GetTempPath() OpenSCManager
RegOpenKeyEx() CopyFile() CreateService()
RegSetValueEx() CreateFile() StartServiceCtrlDispatcher()
RegDeleteKeyEx() WriteFile()
RegGetValue() ReadFile()

Verschlüsselung

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

Anti-Analyse/VM

Funktionsname Assemblerbefehle
IsDebuggerPresent() CPUID()
GetSystemInfo() IN()
GlobalMemoryStatusEx()
GetVersion()
CreateToolhelp32Snapshot [Überprüfen, ob ein Prozess läuft]
CreateFileW/A [Überprüfen, ob eine Datei existiert]

Tarnung

Name
VirtualAlloc Speicher zuweisen (Packer)
VirtualProtect Ändern der Speicherberechtigung (Packer, der einer Sektion Ausführungsberechtigung gibt)
ReadProcessMemory Injektion in externe Prozesse
WriteProcessMemoryA/W Injektion in externe Prozesse
NtWriteVirtualMemory
CreateRemoteThread DLL-/Prozessinjektion...
NtUnmapViewOfSection
QueueUserAPC
CreateProcessInternalA/W

Ausführung

Funktionsname
CreateProcessA/W
ShellExecute
WinExec
ResumeThread
NtResumeThread

Sonstiges

  • GetAsyncKeyState() -- Tastenprotokollierung
  • SetWindowsHookEx -- Tastenprotokollierung
  • GetForeGroundWindow -- Name des aktiven Fensters abrufen (oder die Website eines Browsers)
  • LoadLibrary() -- Bibliothek importieren
  • GetProcAddress() -- Bibliothek importieren
  • CreateToolhelp32Snapshot() -- Liste der laufenden Prozesse
  • GetDC() -- Bildschirmfoto
  • BitBlt() -- Bildschirmfoto
  • InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Zugriff auf das Internet
  • FindResource(), LoadResource(), LockResource() -- Ressourcen der ausführbaren Datei zugreifen

Malware-Techniken

DLL-Injektion

Führen Sie eine beliebige DLL in einem anderen Prozess aus

  1. Lokalisieren Sie den Prozess, um die bösartige DLL einzuspritzen: CreateToolhelp32Snapshot, Process32First, Process32Next
  2. Öffnen Sie den Prozess: GetModuleHandle, GetProcAddress, OpenProcess
  3. Schreiben Sie den Pfad zur DLL in den Prozess: VirtualAllocEx, WriteProcessMemory
  4. Erstellen Sie einen Thread im Prozess, der die bösartige DLL laden wird: CreateRemoteThread, LoadLibrary

Andere zu verwendende Funktionen: NTCreateThreadEx, RtlCreateUserThread

Reflektierende DLL-Injektion

Laden Sie eine bösartige DLL, ohne normale Windows-API-Aufrufe zu tätigen.
Die DLL wird innerhalb eines Prozesses abgebildet, sie wird die Importadressen auflösen, die Relokationen beheben und die DllMain-Funktion aufrufen.

Thread-Hijacking

Finden Sie einen Thread eines Prozesses und lassen Sie ihn eine bösartige DLL laden

  1. Finden Sie einen Zielthread: CreateToolhelp32Snapshot, Thread32First, Thread32Next
  2. Öffnen Sie den Thread: OpenThread
  3. Unterbrechen Sie den Thread: SuspendThread
  4. Schreiben Sie den Pfad zur bösartigen DLL in den Opferprozess: VirtualAllocEx, WriteProcessMemory
  5. Setzen Sie den Thread fort, der die Bibliothek lädt: ResumeThread

PE-Injektion

Portable Execution Injection: Die ausführbare Datei wird im Speicher des Opferprozesses geschrieben und von dort aus ausgeführt.

Prozess-Hollowing

Die Malware wird den legitimen Code aus dem Speicher des Prozesses entfernen und eine bösartige Binärdatei laden

  1. Erstellen Sie einen neuen Prozess: CreateProcess
  2. Entfernen Sie den Speicher: ZwUnmapViewOfSection, NtUnmapViewOfSection
  3. Schreiben Sie die bösartige Binärdatei in den Prozessspeicher: VirtualAllocEc, WriteProcessMemory
  4. Setzen Sie den Einstiegspunkt und führen Sie aus: SetThreadContext, ResumeThread

Hooking

  • Die SSDT (System Service Descriptor Table) zeigt auf Kernel-Funktionen (ntoskrnl.exe) oder GUI-Treiber (win32k.sys), damit Benutzerprozesse diese Funktionen aufrufen können.
  • Ein Rootkit kann diese Zeiger auf Adressen ändern, die er kontrolliert.
  • IRP (I/O Request Packets) übertragen Datenstücke von einem Komponenten zum anderen. Fast alles im Kernel verwendet IRPs und jedes Geräteobjekt hat seine eigene Funktionstabelle, die gehookt werden kann: DKOM (Direct Kernel Object Manipulation)
  • Die IAT (Import Address Table) ist nützlich zur Auflösung von Abhängigkeiten. Es ist möglich, diese Tabelle zu hooken, um den Code zu kapern, der aufgerufen wird.
  • EAT (Export Address Table) Hooks. Diese Hooks können aus dem Userland heraus gemacht werden. Das Ziel ist es, von DLLs exportierte Funktionen zu hooken.
  • Inline Hooks: Dieser Typ ist schwer zu erreichen. Dies beinhaltet die Modifizierung des Codes der Funktionen selbst, möglicherweise durch das Setzen eines Sprungs am Anfang davon.
  • Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories senden.