Automatisierung der IOC-Anreicherung
Wann verwenden
Verwenden Sie diese Fertigkeit, wenn:
- Sie ein SOAR-Playbook erstellen, das SIEM-Warnungen automatisch mit Threat-Intelligence-Kontext anreichert, bevor sie an Analysten weitergeleitet werden.
- Sie eine Python-Pipeline für die Massenanreicherung von IOCs aus Phishing-E-Mail-Einsendungen erstellen.
- Sie die durchschnittliche Bearbeitungszeit für Analysten (MTTT) reduzieren, indem Sie Alarmkontext mit Daten aus VT, Shodan und MISP vorab füllen.
Verwenden Sie diese Fertigkeit nicht für vollautomatische Blockierungsentscheidungen ohne menschliche Überprüfung – die Anreicherungsautomatisierung sollte Entscheidungen informieren, nicht aber Blockaden für Maßnahmen mit hohen Auswirkungen autonom ausführen.
Voraussetzungen
- SOAR-Plattform (Cortex XSOAR, Splunk SOAR, Tines oder n8n) oder Python 3.9+-Umgebung
- API-Schlüssel: VirusTotal, AbuseIPDB, Shodan und mindestens ein TIP (MISP oder OpenCTI)
- SIEM-Integrationsendpunkt für den Alarmbezug
- Budget für Ratenbegrenzungen, dokumentiert pro API (VT: 4/Minute kostenlos, 500/Minute Enterprise)
Arbeitsablauf
Schritt 1: Entwurf der Anreicherungspipeline-Architektur
Definieren Sie den Anreicherungsfluss für jeden IOC-Typ:
SIEM-Alarm → IOCs extrahieren → Typ klassifizieren → An Anreicherungsfunktionen weiterleiten
IP-Adresse → AbuseIPDB + Shodan + VirusTotal IP + MISP
Domain → VirusTotal Domain + PassiveTotal + Shodan + MISP
URL → URLScan.io + VirusTotal URL + Google Safe Browsing
Datei-Hash → VirusTotal Files + MalwareBazaar + MISP
→ Ergebnisse aggregieren → Vertrauenswert berechnen → Alarm aktualisieren → Analyst benachrichtigen
Schritt 2: Implementierung von Python-Anreicherungsfunktionen
import requests
import time
from dataclasses import dataclass, field
from typing import Optional
RATE_LIMIT_DELAY = 0.25 # 4 Anfragen/Sekunde für VT kostenlosen Tarif
@dataclass
class EnrichmentResult:
ioc_value: str
ioc_type: str
vt_malicious: int = 0
vt_total: int = 0
abuse_confidence: int = 0
shodan_ports: list = field(default_factory=list)
misp_events: list = field(default_factory=list)
confidence_score: int = 0
def enrich_ip(ip: str, vt_key: str, abuse_key: str, shodan_key: str) -> EnrichmentResult:
result = EnrichmentResult(ip, "ip")
# VirusTotal IP lookup
vt_resp = requests.get(
f"https://www.virustotal.com/api/v3/ip_addresses/{ip}",
headers={"x-apikey": vt_key}
)
if vt_resp.status_code == 200:
stats = vt_resp.json()["data"]["attributes"]["last_analysis_stats"]
result.vt_malicious = stats.get("malicious", 0)
result.vt_total = sum(stats.values())
time.sleep(RATE_LIMIT_DELAY)
# AbuseIPDB
abuse_resp = requests.get(
"https://api.abuseipdb.com/api/v2/check",
headers={"Key": abuse_key, "Accept": "application/json"},
params={"ipAddress": ip, "maxAgeInDays": 90}
)
if abuse_resp.status_code == 200:
result.abuse_confidence = abuse_resp.json()["data"]["abuseConfidenceScore"]
# Berechnung des zusammengesetzten Vertrauenswerts
result.confidence_score = min(
(result.vt_malicious / max(result.vt_total, 1)) * 60 +
(result.abuse_confidence / 100) * 40, 100
)
return result
def enrich_hash(sha256: str, vt_key: str) -> EnrichmentResult:
result = EnrichmentResult(sha256, "sha256")
vt_resp = requests.get(
f"https://www.virustotal.com/api/v3/files/{sha256}",
headers={"x-apikey": vt_key}
)
if vt_resp.status_code == 200:
stats = vt_resp.json()["data"]["attributes"]["last_analysis_stats"]
result.vt_malicious = stats.get("malicious", 0)
result.vt_total = sum(stats.values())
result.confidence_score = int((result.vt_malicious / max(result.vt_total, 1)) * 100)
return result
Schritt 3: SOAR-Playbook erstellen (Cortex XSOAR)
Erstellen Sie in Cortex XSOAR ein Anreicherungs-Playbook:
- Auslöser: Alarm in SIEM erstellt (via Webhook oder Polling)
- IOCs extrahieren: Verwenden Sie die Aufgabe "Indikatoren extrahieren" mit Regex-Mustern für IP, Domain, URL, Hash
- Parallele Anreicherung: Verzweigen Sie gleichzeitig zu mehreren Anreicherungsaufgaben
- VT-Anreicherung: Rufen Sie die Befehle
!vt-file-scanoder!vt-ip-scanauf - AbuseIPDB-Prüfung: Rufen Sie den Befehl
!abuseipdb-check-ipauf - MISP-Suche: Rufen Sie
!misp-searchfür Querverweise auf - Score-Aggregation: Python-Transformationsaufgabe zur Berechnung des zusammengesetzten Scores
- Bedingte Weiterleitung: Wenn Score ≥70 → Hohe Prioritätswarteschlange; wenn 40–69 → Mittel; <40 → Automatisch schließen mit Hinweis
- Alarmanreicherung: Schreiben Sie Anreicherungsergebnisse in den Alarmkontext für die Analystenansicht
Schritt 4: Ratenbegrenzungen und Fehlerbehandlung
import time
from functools import wraps
def rate_limited(max_per_second):
min_interval = 1.0 / max_per_second
def decorator(func):
last_called = [0.0]
@wraps(func)
def wrapper(*args, **kwargs):
elapsed = time.time() - last_called[0]
wait = min_interval - elapsed
if wait > 0:
time.sleep(wait)
result = func(*args, **kwargs)
last_called[0] = time.time()
return result
return wrapper
return decorator
def retry_on_429(max_retries=3):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
for attempt in range(max_retries):
response = func(*args, **kwargs)
if response.status_code == 429:
retry_after = int(response.headers.get("Retry-After", 60))
time.sleep(retry_after)
else:
return response
return wrapper
return decorator
Schritt 5: Metriken und Optimierung
Verfolgen Sie die Pipeline-Leistung wöchentlich:
- Anreicherungslatenz: Ziel <30 Sekunden von Alarmauslösung bis zur angereicherten Ausgabe
- API-Erfolgsrate: Ziel >99% (Ratenbegrenzungs- oder Ausfallereignisse identifizieren)
- True-Positive-Rate: Verfolgen Sie Analysten-Übersteuerungen automatisierter Vertrauenswerte
- Kosten: Verfolgen Sie das API-Aufrufvolumen im Vergleich zum Budget (VT Enterprise: $X pro 1 Mio. Suchanfragen)
Schlüsselkonzepte
| Begriff | Definition |
|---|---|
| SOAR | Security Orchestration, Automation, and Response – Plattform zur Automatisierung von Sicherheitsworkflows und Integration verschiedener Tools |
| Anreicherungs-Playbook | Automatisierte Workflow-Sequenz, die rohen Sicherheitsereignissen kontextbezogene Intelligenz hinzufügt |
| Ratenbegrenzung | API-Anbieter-Beschränkungen der Anforderungshäufigkeit (z. B. VT kostenlos: 4 Anfragen/Minute); Pipelines müssen diese Grenzen einhalten |
| Zusammengesetzter Vertrauenswert | Einzelner Wert, der Signale aus mehreren Anreicherungsquellen mittels gewichteter Formel aggregiert |
| Fan-out-Muster | Parallele Ausführung mehrerer Anreicherungsabfragen, um die Gesamtanreicherungslatenz zu minimieren |
Tools und Systeme
- Cortex XSOAR (Palo Alto): Enterprise SOAR mit über 700 Marktplatzintegrationen, einschließlich VT, MISP, Shodan und AbuseIPDB
- Splunk SOAR (Phantom): SOAR-Plattform mit Python-basierten Playbooks; native Splunk-SIEM-Integration
- Tines: No-Code-SOAR-Plattform mit Webhook-gesteuerter Automatisierung; kostengünstig für kleinere Teams
- TheHive + Cortex: Open-Source-IR-/Anreicherungsplattform mit Observable-Anreicherung über Cortex-Analysatoren
Häufige Fallstricke
- Blockieren aufgrund von Anreicherungslatenz: Wenn die Anreicherung länger als 5 Minuten dauert, beginnen Analysten mit der Bearbeitung nicht angereicherter Alarme, was den Zweck zunichtemacht. Setzen Sie Zeitübergrenzen und liefern Sie Teilergebnisse.
- Kein Caching: Das 50-malige Abfragen desselben IOCs verursacht unnötige API-Kosten. Zwischenspeichern Sie Anreicherungsergebnisse standardmäßig für 24 Stunden.
- Stilles Ignorieren von API-Fehlern: Fehlgeschlagene Anreicherungsaufrufe sollten protokolliert werden und Fallback-Logik auslösen, nicht stillschweigend leere Ergebnisse liefern, die als saubere IOCs erscheinen.
- Automatisieren von Blockaden allein basierend auf Anreicherungswerten: Zusammengesetzte Werte enthalten Fehlalarme; erfordern Sie menschliche Bestätigung für Blockierungsentscheidungen gegen gemeinsam genutzte Infrastruktur.