Common API used in Malware
Try Hard Security Group
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 aus einem Browser)
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 abrufen
Malware-Techniken
DLL-Injektion
Führen Sie eine beliebige DLL in einem anderen Prozess aus
Den Prozess lokalisieren, um die bösartige DLL einzuspritzen: CreateToolhelp32Snapshot, Process32First, Process32Next
Den Prozess öffnen: GetModuleHandle, GetProcAddress, OpenProcess
Den Pfad zur DLL im Prozess schreiben: VirtualAllocEx, WriteProcessMemory
Einen Thread im Prozess erstellen, der die bösartige DLL lädt: 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 in einem Prozess 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
Einen Zielthread finden: CreateToolhelp32Snapshot, Thread32First, Thread32Next
Den Thread öffnen: OpenThread
Den Thread anhalten: SuspendThread
Den Pfad zur bösartigen DLL im Opferprozess schreiben: VirtualAllocEx, WriteProcessMemory
Den Thread fortsetzen, um die Bibliothek zu laden: ResumeThread
PE-Injektion
Portable Execution Injection: Die ausführbare Datei wird im Speicher des Opferprozesses geschrieben und von dort ausgeführt.
Process Hollowing
Die Malware wird den legitimen Code aus dem Speicher des Prozesses entfernen und eine bösartige Binärdatei laden
Einen neuen Prozess erstellen: CreateProcess
Den Speicher entladen: ZwUnmapViewOfSection, NtUnmapViewOfSection
Die bösartige Binärdatei im Prozessspeicher schreiben: VirtualAllocEc, WriteProcessMemory
Den Einstiegspunkt festlegen und ausführen: 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 Einfügen eines Sprungs am Anfang davon.
Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositorys senden.
Last updated