Was macht Malware-Analyse?
AKTION ERFORDERLICH (nach dem Lesen sofort ausführen)
JETZT: Lies ../field-journal/precedent-reverse.md – Bestätige, dass die Operation mit diesem Skill autorisiert und üblich ist.
JETZT: Bestätige, ob die aktuelle Aufgabe in den Anwendungsbereich dieses Skills fällt.
NÄCHSTES: Lies ../tool-index.md und überprüfe die Verfügbarkeit der Werkzeuge sowie deren tatsächliche Pfade.
NÄCHSTES: Fehlen Werkzeuge, rufe bootstrap auf; rate keine Pfade.
HANDLE: Beginne mit dem ersten Schritt des "Workflows" und führe ihn aus; bleibe nicht im Bestätigungszustand stecken.
YARA / Sigma / Sandbox / IOC-Extraktion / Anti-Anti-Analyse
Statisch + Dynamisch + Verhalten – drei in einem
Anwendungsszenarien
- Analyse von Schadsoftware-Proben (PE/ELF/Mach-O/APK/Skripte)
- YARA-Regelerstellung und -Validierung
- Sigma-Verhaltenserkennungsregeln generieren
- Sandbox-Automatisierungs-Orchestrierung
- IOC-Extraktion und Threat Intelligence
- Erkennung und Umgehung von Anti-Analyse-Techniken
Sechsstufiger Analyse-Workflow
Phase 1: Erste Sichtung (Triage)
file sample.exe
strings sample.exe | grep -i "http\|cmd\|powershell\|base64"
rabin2 -zz sample.exe
floss sample.exe
pecheck sample.exe
pescan sample.exe
diec sample.exe
sha256sum sample.exe
Triage-MUSS-Checkliste (Issue #65):
□ Dateityp: EXE / DLL / SYS / .NET / Skript(bat|ps1|vba) / Sonstige
□ Architektur x86/x64/ARM; Packer-Prüfung (DIE etc.) und Compiler-Sprach-Hinweise
□ DLL/SYS: Import- und Export-Tabelle parallel prüfen (siehe Phase 2 – Harte Tür)
□ .NET: Keine traditionelle IAT → über dnSpy/IL/Metadaten-Äquivalente Anker setzen (siehe Phase 2)
□ Skript/Makro/DLL – P0: siehe nonpe-format-cookbook U–AV (E-batch-deobf / E-ps-decode / E-vba-pcode / E-dll-*)
Phase 1b: Entpacken und IAT-Verarbeitung (bei Packer · Issue #65)
□ Kein Packer / .NET → springe zu Phase 2
□ Mit Packer: Entpacken versuchen (autorisierte isolierte Umgebung) → IAT-Reparatur versuchen
- x86: ImportREC (oder Äquivalent); x64: Scylla (oder Äquivalent). Kein 64-Bit-Draufhauen mit ImportREC
□ 【Eiserne Regel zur IAT-Reparatur】Priorität auf automatische/halbautomatische Reparatur; falls Tool Fehler meldet oder die reparierte Datei nicht läuft:
- Sofort den statischen IAT-Reparaturversuch abbrechen
- MUSS E-iat-repair-fail (Befehl, Tool, Phänomen) dokumentieren
- Zu Phase 3 Dynamisch übergehen: API-Breakpoints (z.B. bp CreateFile) / Hardware-Breakpoints / Memory-Suche nach Importen
- Das gilt nicht als Überspringen der Import-Tabelle: Der Pfad wurde versucht und mit Evidence dokumentiert
□ 【Patch 6】Absturz/BSOD nach Entpacken + IAT-Reparatur (Verdacht auf CRC/Größen-Selbstprüfung):
- Statisches Weiterbearbeiten der Datei aufgeben; E-self-check-crash oder in E-iat-repair-fail integrieren
- Zu Phase 3: Breakpoints auf CreateFile / GetFileSize / Hash-bezogene API setzen
□ Benutzeranweisungs-Durchführbarkeit (§0.5): Bei Packer möchte der Benutzer vorschnell "erst entpacken, dann Import-Tabelle ansehen" → Erkläre Blockade + bitte um Bestätigung; bei Zwang dokumentiere quality=unreadable/packed, verbiete dir, eine sinnvolle IAT vorzutäuschen
□ Benutzer verlangt Wiederholung der "IAT-Reparatur / Import-Tabellen-Prüfung": MUSS die genannten Schritte wiederholen (oder nach bestätigter Vorbedingungs-Absprache); Austausch gegen irrelevante Schritte ist verboten
Phase 2: Statische Analyse
Disassemblierung/Dekompilierung:
□ IDA Pro / Ghidra: Tiefe Dekompilierung
□ radare2: CLI-Schnellanalyse
□ x64dbg: Windows-GUI-Debugger
Schwerpunkt-Analysebereiche:
□ Entry Point → Initialisierungslogik
□ Import-Tabelle → API-Zweckableitung (CreateRemoteThread=Injection, CryptEncrypt=Ransomware)
**MUSS (Harte Tür)**: Führe rabin2 -i / IDA imports / pecheck-äquivalenten Befehl aus, klassifiziere die Import-Tabelle und schreibe sie als Evidence (E-imports), bevor Phase 3 betreten wird (es sei denn, E-iat-repair-fail wurde bereits dokumentiert und der dynamische Umweg gewählt, siehe Phase 1b)
Die Klassifizierung muss mindestens abdecken: Netzwerk / Datei / Verschlüsselung / Prozess-Injection / Registry / andere verdächtige APIs
Fehlgeschlagene Analyse oder leere Tabelle: MUSS dennoch den fehlgeschlagenen Output dokumentieren; kein stilles Überspringen
**DLL/SYS**: MUSS parallel die Export-Tabelle als Evidence dokumentieren (E-exports, `rabin2 -E` oder Äquivalent)
**.NET**: Keine traditionelle IAT – MUSS mit dnSpy/IL/Metadaten/Assembly-Referenzen und sensiblen API-Zusammenfassungen als äquivalente Anker arbeiten; schreibe in semantische Slots E-imports / E-triage-imports
**Saubere Import-Tabelle**: Nur Basis-DLLs, fast keine Geschäfts-APIs → MUSS dynamischen Ladeverdacht vermerken (LoadLibrary/GetProcAddress), SOLLTE zu Phase 3 wechseln, um APIs aus dem Speicher zu fangen; bei Hash-Resolver-Merkmalen → E-api-hash (Patch N)
**Breitzeichen (T)**: Strings finden keine IOCs → MUSS UTF-16 erneut versuchen (strings -el / IDA unicode)
**Signatur (F)**: Bei vorhandener Signatur dennoch MUSS SigCheck; gefälschte/widerrufene Signaturen senken die Bedrohungsstufe nicht
Benutzer verlangt "Wiederholung der Import-Tabellen-Prüfung": MUSS diesen Punkt wiederholen (bei Blockade zuerst Durchführbarkeits-Prüfung durchführen); Austausch gegen andere Schritte ist verboten
**Hochrisiko-API-Kombinationen (Patch 8)**: Bei sehr langer Tabelle priorisiere bösartige Kombinations-Cluster (z. B. FindWindow+WriteProcessMemory+CreateRemoteThread) und filtere reines System-Basis-API-Rauschen heraus
□ Resource-Section → Eingebettetes Payload (.rsrc Section)
□ String-Tabelle → URL/C2/Dateipfade/Base64-Blob
□ TLS-Callbacks → Ausführung vor Debugger-Start
Phase 3: Sandbox-Dynamische Analyse
Automatisierte Sandboxen:
□ Joe Sandbox / ANY.RUN / Triage: Kommerzielle Sandboxen
□ CAPE Sandbox: Open Source + YARA-Integration (empfohlen)
□ ASD Azul: Open-Source-Malware-Analyse-Plattform (2026 neu veröffentlicht)
□ Cuckoo Sandbox: Klassischer Open Source (wird zunehmend durch CAPE ersetzt)
Debugger-Start (Patch 7+10 · MUSS-Reihenfolge, User-Mode-Debugger):
□ ① TLS-Callback-Breakpoint → ② Entry-Point-Breakpoint → ③ Sensitive-API-Breakpoints → ④ ExitProcess/Ausstiegspfad-Sicherheits-Breakpoint
□ ExitProcess ausgelöst: Nicht sofort neustarten; sofort Memory-Dump erstellen, Pfad in Evidence dokumentieren (Patch 10)
Überwachungsschwerpunkte:
□ Prozesserstellung: CreateProcess / ShellExecute
□ Dateioperationen: WriteFile → Ransomware? DeleteFile → Wiper?
□ Registry: Run/RunOnce Persistenz
□ Netzwerk: HTTP/DNS → C2-Kommunikation
□ Speicher: VirtualAllocEx → Prozess-Injection
□ Dienste: CreateService → Persistenz
□ IAT-Reparatur fehlgeschlagen / Selbstprüfungs-Absturz-Proben: Sensitive APIs + CreateFile/GetFileSize-Breakpoints / Hardware-Execution-Breakpoints / Memory-Suche
Notfall-Verzweigung bei fehlendem Verhalten (MUSS):
□ Sandbox zeigt kein Verhalten, sofortiger Exit oder Endlos-Schlaf → Prüfe auf Anti-Debug/Anti-VM (CPUID, Timer, Umgebungsmerkmale)
□ Versuche Hardware-Breakpoint-Umgehung, Patch der Prüfpunkte oder Wechsel zu physischem Gerät/Umgebung mit höherer Wiedergabetreue
□ Schreibe "Kein Verhalten + Bedingungen" in die Evidence; verbiete es, stillschweigend als "Probe harmlos" zu deklarieren
Zeitbox (Patch 9 · SOLLTE Standard, überschreibbar):
□ Etwa 15 Minuten statisches Tiefen-Tauchen ohne kritischen Pfad → Erzwinge Übergang zu dieser Phase (dynamisch)
□ Etwa 200 Instruktionen dynamischer Einzelschritt ohne bösartige Hinweise → Erzwinge Rückkehr zu statischen Strings/Cross-Referenzen zur Neuverankerung
Anti-Debug/Obfuscation-Umgehung (Issue #65 A–T · siehe reverse-engineering/anti-analysis.md Rezepte):
□ P0: CPUID / RDTSC / PEB / NtQueryInformationProcess → Prüfpunkte dokumentieren, dann im Labor umgehen oder Umgebung wechseln (E-anti-debug-*)
□ P0: Saubere IAT → API-Hash-Dynamisches Auflösen (bp GetProcAddress, E-api-hash)
□ P0: Leere Strings → String-Entschlüsselungs-Routine + UTF-16-Breitzeichen (E-string-decrypt / E-wide-strings)
□ P0: Verdächtige Signatur → SigCheck; ungültig/widerrufen senkt die Bedrohungsstufe nicht (E-sig-forge)
□ P1: Prozessnamen-Scan / VEH / int3·DR / Overlapping-Sections / Overlay / .rsrc / Delay-Load
□ H/S-Flattening und undurchsichtige Prädikate → ollvm-deobfuscation.md (hier nicht in voller Länge kopieren)
□ Auch bei fehlgeschlagener Umgehung Evidence schreiben; Anti-Debug-Exit ≠ Probe harmlos
Nicht-PE / Skript / DLL-Lückenfüller (Issue #65 U–AV · siehe reverse-engineering/references/nonpe-format-cookbook.md):
□ bat/cmd: SET-Verkettung rückgängig machen (U) → E-batch-deobf; UTF-16 BOM (V); REM/GOTO-Überflutung (W)
□ PowerShell: Mehrschichtiges Base64/Gzip (X) – jede Schicht mit Evidence; IEX-Verkettung/Umkehrung (Z)
□ VBA: Stomping/P-Code (AA); Chr/Base64 (AB); Selbstmodifizierendes Makro (AC)
□ DLL: TLS+DllMain (AJ); Export-Anomalien/keine Exporte (AK/AL); Delay-Load siehe A–T R (AM); Side-Loading/Reflection (AO/AP)
□ JS/APK/Treiber: Route zu js-reverse / apk-reverse / kernel-driver-reverse + Cookbook; hier nicht in voller Länge kopieren
Phase 4: YARA-Regelerstellung
// Regelstruktur
rule MalwareFamily_Example {
meta:
description = "Erkennt die Malware-Familie Example"
author = "Analyst"
date = "2026-05"
severity = "hoch"
hash = "d41d8cd98f00b204e9800998ecf8427e"
mitre_id = "T1055" // Prozess-Injection
strings:
// String-Matching
$str1 = "C2_SERVER_URL" ascii wide
$str2 = "payload.dat" ascii
// Hex-Matching
$hex1 = { 8B 45 ?? 50 FF 15 [4] 85 C0 }
// Opcode-Sequenz: mov eax, [ebp-?]; push eax; call [import]; test eax, eax
// Regex-Matching
$re1 = /https?:\/\/[a-z0-9.-]+\/[a-z]{3,8}\.php/ ascii
condition:
// Kombinationsbedingungen
uint16(0) == 0x5A4D and // MZ-Header
filesize < 500KB and
(2 of ($str*) or $hex1)
}
Phase 5: Sigma-Regelgenerierung
title: Verdächtige Prozess-Injection via CreateRemoteThread
id: 5a3d2c1b-1234-5678-9abc-def012345678
status: experimental
description: Erkennt Prozess-Injection-Verhalten mittels CreateRemoteThread
author: Analyst
date: 2026/05/25
tags:
- attack.t1055
- attack.t1055.001
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith: '\powershell.exe'
CommandLine|contains:
- 'CreateRemoteThread'
- 'VirtualAllocEx'
- 'WriteProcessMemory'
condition: selection
falsepositives:
- Legitime Debugging-Tools
level: hoch
Phase 6: IOC-Extraktion und Intelligence
IOC-Typklassifikation:
□ Netzwerk-IOCs:
- IP: C2-Adresse (Zeitwert beachten)
- Domain: DGA-generierte Domain (rsnkfda.com, xpqmje.net)
- URL: Payload-Hosting-Adresse
- User-Agent: Benutzerdefinierter UA-String
□ Host-IOCs:
- Dateipfad: %APPDATA%\Microsoft\Crypto\RSA\*.dat
- Registry: HKCU\Software\Microsoft\Windows\CurrentVersion\Run\
- Mutex: Global\{GUID} Mutex-Name
- Dienstname: Als Systemdienst getarnt
□ Verhaltens-IOCs:
- MITRE ATT&CK Technik-ID (T1055, T1003, T1571...)
- Sigma-Regel → SIEM-Integration
- YARA-Regel → Endpunkt-Erkennung
□ Statische IOCs:
- Kompilierungszeitstempel (fälschbar)
- PDB-Pfad (enthält Entwicklerinformationen)
- Section-Namen-Anomalie (nicht-standard .text/.data)
- Import-Tabellen-Anomalie-Kombination (z.B. Ransomware CryptEncrypt + DeleteShadowCopies)
Anti-Analyse-Techniken-Spickzettel
| Technik | Erkennungsmethode | YARA-Merkmal |
|---|
| VM-Erkennung | WMI Win32_BIOS/VideoController/Processor | Win32_-String + bestimmter Herstellername |
| Sandbox-Erkennung | Festplatte < 60GB, RAM < 2GB, Single-Core-CPU | GlobalMemoryStatusEx-Aufrufmuster |
| Debugger-Erkennung | IsDebuggerPresent, CheckRemoteDebuggerPresent | PEB.BeingDebugged-Offset-Zugriff |
| Timing-Escaping | Sleep(300000) danach bösartiges Verhalten | NtDelayExecution mit langem Parameter |
| Geotargeting-Erkennung | Tastaturlayout/Zeitzone prüfen → CIS-Länder ausschließen | GetKeyboardLayoutList-Aufruf |
| Vaterprozess-Erkennung | explorer.exe vs cmd.exe | Prozessname-String-Vergleich |
| API-Direkter Syscall | EDR-Hook umgehen | syscall-Instruktion + SSN-Analyse |
Multi-Agent-Automatisierte Analyse (SentinelHive-Architektur)
┌─────────────────────────────────────────────────┐
│ Hive Director │
│ (Claude Opus Orchestrierung + Schiedsgericht) │
└──────┬──────┬──────┬──────┬──────┬───────┘
│ │ │ │ │
┌───┘ ┌───┘ ┌───┘ ┌───┘ ┌───┘
▼ ▼ ▼ ▼ ▼ ▼
Triage RE Behav Intel Detect Remed
Schnell Dekompilierung Verhalten Bedrohungs Erkennung Behebung
Sichtung Statisch Dynamisch Intel YARA/Sigma Plan
Toolkette
| Tool | Zweck | Bezug |
|---|
| Ghidra / IDA Pro | Tiefe Dekompilierung | ghidra-sre.org |
| CAPE Sandbox | Open-Source-Malware-Sandbox | GitHub: kevoreilly/CAPEv2 |
| ASD Azul | Großflächige automatisierte Analyse | GitHub: ASD |
| YARA | Pattern-Matching-Regel-Engine | pip install yara-python |
| Sigma | SIEM-Verhaltenserkennungsregeln | GitHub: SigmaHQ/sigma |
| FLOSS | Entschleierte String-Extraktion | pip install flare-floss |
| Detect It Easy | Packer/Compiler-Erkennung | GitHub: horsicq/Detect-It-Easy |
| pe-sieve | Prozess-Speicher-Scan | GitHub: hasherezade/pe-sieve |
| VirusTotal API | Multi-Engine-Scan | virustotal.com |
| MalwareBazaar | Malware-Proben-Bibliothek | bazaar.abuse.ch |
Referenzen
references/yara-sigma-rules.md — YARA + Sigma-Erstellungsmethodik
references/sandbox-orchestration.md — Sandbox-Orchestrierung und Automatisierung
references/anti-analysis-techniques.md — Erkennung von 94 Anti-Analyse-Techniken
../reverse-engineering/references/re-agent-workflow.md — IAT-Eiserne-Regel und sechsstufige Falltür (Issue #65)
../reverse-engineering/anti-analysis.md — Agenten-Antwort-Rezepte A–T (Anti-Debug/Obfuscation-Umgehung)
../reverse-engineering/references/nonpe-format-cookbook.md — Nicht-PE/Multi-Format-Cookbook U–AV (Skripte/Makros/JS/Treiber/DLL/Android)
../reverse-engineering/references/ollvm-deobfuscation.md — Flattening/undurchsichtige Prädikate (H/S)
Selbstcheck vor Aufgabenabschluss (MUSS vor Behauptung des Abschlusses bestanden sein)