Was macht Analyse der Malware-Persistenz mit Autoruns?
Übersicht
Sysinternals Autoruns extrahiert Daten aus Hunderten von Auto-Start-Extensibility-Punkten (ASEPs) unter Windows und scannt über 18 Kategorien, darunter Run/RunOnce-Schlüssel, Dienste, geplante Aufgaben, Treiber, Winlogon-Einträge, LSA-Anbieter, Drucküberwachungen, WMI-Abonnements und AppInit-DLLs. Die digitale Signaturüberprüfung filtert Microsoft-signierte Einträge. Die Vergleichsfunktion identifiziert neu hinzugefügte Persistenzmechanismen mittels Baseline-Differenzierung. Die VirusTotal-Integration überprüft den Ruf von Hashes. Die Offline-Analyse mit dem -z-Flag ermöglicht die Untersuchung von forensischen Datenträgerimages.
Verwendungszweck
- Bei der Untersuchung von Sicherheitsvorfällen, die eine Analyse der Malware-Persistenz mit Autoruns erfordern
- Beim Erstellen von Erkennungsregeln oder Bedrohungsjagdabfragen für diesen Bereich
- Wenn SOC-Analysten strukturierte Verfahren für diese Analyseart benötigen
- Bei der Validierung der Sicherheitsüberwachungsabdeckung für verwandte Angriffstechniken
Voraussetzungen
- Sysinternals Autoruns (GUI) und Autorunsc (CLI)
- Administratorrechte auf dem Zielsystem
- Python 3.9+ für automatisierte Analysen
- VirusTotal-API-Schlüssel für Reputationsprüfungen
- Saubere Basislinien-Exportdatei für Vergleiche
Arbeitsablauf
Schritt 1: Automatisierte Persistenzüberprüfung
#!/usr/bin/env python3
"""Automatisierte Autoruns-basierte Persistenzanalyse."""
import subprocess
import csv
import json
import sys
def scan_and_analyze(autorunsc_path="autorunsc64.exe", csv_path="scan.csv"):
cmd = [autorunsc_path, "-a", "*", "-c", "-h", "-s", "-nobanner", "*"]
result = subprocess.run(cmd, capture_output=True, text=True, timeout=600)
with open(csv_path, 'w') as f:
f.write(result.stdout)
return parse_and_flag(csv_path)
def parse_and_flag(csv_path):
suspicious = []
with open(csv_path, 'r', errors='replace') as f:
for row in csv.DictReader(f):
reasons = []
signer = row.get("Signer", "")
if not signer or signer == "(Not verified)":
reasons.append("Nicht signierte Binärdatei")
if not row.get("Description") and not row.get("Company"):
reasons.append("Fehlende Metadaten")
path = row.get("Image Path", "").lower()
for sp in ["\temp\\", "\appdata\local\temp", "\users\public\\"]:
if sp in path:
reasons.append(f"Verdächtiger Pfad")
launch = row.get("Launch String", "").lower()
for kw in ["powershell", "cmd /c", "wscript", "mshta", "regsvr32"]:
if kw in launch:
reasons.append(f"LOLBin: {kw}")
if reasons:
row["reasons"] = reasons
suspicious.append(row)
return suspicious
if __name__ == "__main__":
if len(sys.argv) > 1:
results = parse_and_flag(sys.argv[1])
print(f"[!] {len(results)} verdächtige Einträge")
for r in results:
print(f" {r.get('Entry','')} - {r.get('Image Path','')}")
for reason in r.get('reasons', []):
print(f" - {reason}")
Validierungskriterien
- Alle ASEP-Kategorien wurden gescannt und katalogisiert
- Nicht signierte Einträge wurden zur Untersuchung markiert
- Verdächtige Pfade und LOLBin-Startzeichenfolgen wurden hervorgehoben
- Basislinienvergleich identifiziert neue Persistenzmechanismen