Communitygithub.com

Analyse von Command-and-Control-Kommunikation

Analysiert Malware-C2-Kommunikation über HTTP, HTTPS, DNS und benutzerdefinierte Protokolle.

Was ist Analyse von Command-and-Control-Kommunikation?

Diese Skill-Anleitung beschreibt den systematischen Prozess zur Analyse und Dekodierung von Command-and-Control (C2)-Kommunikation in Malware-Netzwerkverkehr. Sie ist speziell für Reverse-Engineer und Sicherheitsanalysten konzipiert, die verdächtigen Netzwerkverkehr aus Sandboxen, PCAP-Dateien oder Live-Umgebungen untersuchen möchten. Die Anleitung umfasst sechs detaillierte Schritte: Identifikation des C2-Kanals (HTTP, DNS, benutzerdefinierte Protokolle), Analyse des Beaconing-Verhaltens, Dekodierung der Protokollstruktur, Identifikation bekannter C2-Frameworks (Cobalt Strike, Metasploit, Sliver), Kartierung der C2-Infrastruktur und Erstellung von Netzwerkerkennungssignaturen für Suricata. Sie behandelt sowohl gängige als auch komplexe Szenarien, wie die Reverse-Engineering eines benutzerdefinierten binären Protokolls, und bietet Python-Code für die automatisierte Analyse. Ziel ist es, Analysten zu befähigen, C2-Kommunikation vollständig zu verstehen, Bedrohungsakteuren zuzuordnen und effektive Erkennungsregeln zu entwickeln. Die Anleitung ist plattformunabhängig und nutzt Tools wie Wireshark, Ghidra, Scapy und Shodan.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/mukul975/Anthropic-Cybersecurity-Skills/tree/main/skills/analyzing-command-and-control-communication

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht Analyse von Command-and-Control-Kommunikation?

Wann anwenden

  • Reverse-Engineering einer Malware-Stichprobe hat Netzwerkkommunikation enthüllt, die eine Protokollanalyse erfordert
  • Erstellung von Netzwerkerkennungssignaturen für ein bestimmtes C2-Framework (Cobalt Strike, Metasploit, Sliver)
  • Kartierung der C2-Infrastruktur einschließlich primärer Server, Fallback-Domänen und Dead Drops
  • Analyse von verschlüsseltem oder codiertem C2-Datenverkehr, um den Befehlssatz und das Datenformat zu verstehen
  • Zuordnung von Malware zu einem Bedrohungsakteur anhand von C2-Infrastrukturmustern und -Werkzeugen

Nicht verwenden für allgemeine Netzwerkanomalieerkennung; dies dient speziell dem Verständnis bekannter oder vermuteter C2-Protokolle aus der Malware-Analyse.

Voraussetzungen

  • PCAP-Aufnahme des Malware-Netzwerkverkehrs (aus Sandbox, Netzwerk-Tap oder vollständiger Paketerfassung)
  • Wireshark/tshark für die Analyse auf Paketebene
  • Reverse-Engineering-Tools (Ghidra, dnSpy) zum Verständnis des C2-Codes in der Malware-Binärdatei
  • Python 3.8+ mit scapy, dpkt und requests für Protokollanalyse und Wiedergabe
  • Bedrohungsintelligenz-Datenbanken für die C2-Infrastruktur-Korrelation (VirusTotal, Shodan, Censys)
  • JA3/JA3S-Fingerabdruckdatenbanken für die TLS-basierte C2-Identifikation

Arbeitsablauf

Schritt 1: Identifizieren Sie den C2-Kanal

Bestimmen Sie das für die C2-Kommunikation verwendete Protokoll und den Transport:

C2-Kommunikationskanäle:
━━━━━━━━━━━━━━━━━━━━━━━━━━━
HTTP/HTTPS:     Am häufigsten; verwendet Standard-Webverkehr, um sich anzupassen
                Indikatoren: Regelmäßige POST/GET-Anfragen, bestimmte URI-Muster, benutzerdefinierte Header

DNS:            Tunneln von Daten durch DNS-Abfragen und -Antworten
                Indikatoren: Hochvolumige TXT-Abfragen, lange Subdomain-Namen, hohe Entropie

Benutzerdefinierte TCP/UDP: Proprietäres Binärprotokoll auf nicht standardmäßigem Port
                Indikatoren: Nicht-HTTP-Verkehr auf hohen Ports, unbekanntes Protokoll

ICMP:           Daten, die in ICMP-Echo/Antwort-Nutzlasten codiert sind
                Indikatoren: ICMP-Pakete mit großen oder nicht standardmäßigen Nutzlasten

WebSocket:      Persistente bidirektionale Verbindung für Echtzeit-C2
                Indikatoren: WebSocket-Upgrade gefolgt von binären Frames

Cloud-Dienste:  Verwendung legitimer APIs (Telegram, Discord, Slack, GitHub)
                Indikatoren: API-Aufrufe an Cloud-Dienste von unerwarteten Prozessen

E-Mail:         SMTP/IMAP für C2-Befehle und Datenerxflition
                Indikatoren: Automatisierte E-Mail-Operationen von Nicht-E-Mail-Prozessen

Schritt 2: Beacon-Muster analysieren

Charakterisieren Sie das periodische Kommunikationsmuster:

from scapy.all import rdpcap, IP, TCP
from collections import defaultdict
import statistics
import json

packets = rdpcap("c2_traffic.pcap")

# TCP-SYN-Pakete nach Ziel gruppieren
connections = defaultdict(list)
for pkt in packets:
    if IP in pkt and TCP in pkt and (pkt[TCP].flags & 0x02):
        key = f"{pkt[IP].dst}:{pkt[TCP].dport}"
        connections[key].append(float(pkt.time))

# Jedes Ziel auf Beaconing analysieren
for dst, times in sorted(connections.items()):
    if len(times) < 3:
        continue

    intervals = [times[i+1] - times[i] for i in range(len(times)-1)]
    avg_interval = statistics.mean(intervals)
    stdev = statistics.stdev(intervals) if len(intervals) > 1 else 0
    jitter_pct = (stdev / avg_interval * 100) if avg_interval > 0 else 0
    duration = times[-1] - times[0]

    beacon_data = {
        "destination": dst,
        "connections": len(times),
        "duration_seconds": round(duration, 1),
        "avg_interval_seconds": round(avg_interval, 1),
        "stdev_seconds": round(stdev, 1),
        "jitter_percent": round(jitter_pct, 1),
        "is_beacon": 5 < avg_interval < 7200 and jitter_pct < 25,
    }

    if beacon_data["is_beacon"]:
        print(f"[!] BEACON ERKANNT: {dst}")
        print(f"    Intervall: {avg_interval:.0f}s +/- {stdev:.0f}s ({jitter_pct:.0f}% Jitter)")
        print(f"    Sitzungen: {len(times)} über {duration:.0f}s")

Schritt 3: C2-Protokollstruktur dekodieren

Die Nachrichtenstruktur aus dem erfassten Datenverkehr reverseengineeren:

# HTTP-basierte C2-Protokollanalyse
import dpkt
import base64

with open("c2_traffic.pcap", "rb") as f:
    pcap = dpkt.pcap.Reader(f)

for ts, buf in pcap:
    eth = dpkt.ethernet.Ethernet(buf)
    if not isinstance(eth.data, dpkt.ip.IP):
        continue
    ip = eth.data
    if not isinstance(ip.data, dpkt.tcp.TCP):
        continue
    tcp = ip.data

    if tcp.dport == 80 or tcp.dport == 443:
        if len(tcp.data) > 0:
            try:
                http = dpkt.http.Request(tcp.data)
                print(f"\n--- C2-ANFRAGE ---")
                print(f"Methode: {http.method}")
                print(f"URI: {http.uri}")
                print(f"Header: {dict(http.headers)}")
                if http.body:
                    print(f"Body ({len(http.body)} Bytes):")
                    # Versuche Base64-Dekodierung
                    try:
                        decoded = base64.b64decode(http.body)
                        print(f"  Dekodiert: {decoded[:200]}")
                    except:
                        print(f"  Roh: {http.body[:200]}")
            except:
                pass

Schritt 4: C2-Framework identifizieren

Beobachtete Muster mit bekannten C2-Frameworks abgleichen:

Bekannte C2-Framework-Signaturen:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Cobalt Strike:
  - Standard-URIs: /pixel, /submit.php, /___utm.gif, /ca, /dpixel
  - Malleable C2-Profile passen alle Verkehrsmerkmale an
  - JA3: variiert je nach Profil, Katalog unter ja3er.com
  - Wasserzeichen in Beacon-Konfiguration (einmalig pro Lizenz)
  - Konfigurationsextraktion: Verwende CobaltStrikeParser oder 1768.py

Metasploit/Meterpreter:
  - Standard-Staging-URI-Muster: zufällige 4-stellige Prüfsumme
  - Reverse-HTTP(S)-Handler-Muster
  - Meterpreter-TLV (Type-Length-Value)-Protokollstruktur

Sliver:
  - mTLS, HTTP, DNS, WireGuard-Transportoptionen
  - Protobuf-codierte Nachrichten
  - Einzigartige Implantat-ID in der Kommunikation

Covenant:
  - .NET-basiertes C2-Framework
  - HTTP mit anpassbaren Profilen
  - Aufgabenbasierte Befehlsausführung

PoshC2:
  - PowerShell/C#-basiert
  - HTTP mit verschlüsselten Nutzlasten
  - Cookie-basiertes Sitzungsmanagement
# Cobalt-Strike-Beacon-Konfiguration aus PCAP oder Probe extrahieren
python3 << 'PYEOF'
# Verwendung von CobaltStrikeParser (pip install cobalt-strike-parser)
from cobalt_strike_parser import BeaconConfig

try:
    config = BeaconConfig.from_file("suspect.exe")
    print("Cobalt-Strike-Beacon-Konfiguration:")
    for key, value in config.items():
        print(f"  {key}: {value}")
except Exception as e:
    print(f"Kein Cobalt-Strike-Beacon oder Analysefehler: {e}")
PYEOF

Schritt 5: C2-Infrastruktur kartieren

Dokumentieren Sie die vollständige C2-Infrastruktur und Failover-Mechanismen:

# Infrastrukturkartierung
import requests
import json

c2_indicators = {
    "primary_c2": "185.220.101.42",
    "domains": ["update.malicious.com", "backup.evil.net"],
    "ports": [443, 8443],
    "failover_dns": ["ns1.malicious-dns.com"],
}

# Mit Shodan anreichern
def shodan_lookup(ip, api_key):
    resp = requests.get(f"https://api.shodan.io/shodan/host/{ip}?key={api_key}")
    if resp.status_code == 200:
        data = resp.json()
        return {
            "ip": ip,
            "ports": data.get("ports", []),
            "os": data.get("os"),
            "org": data.get("org"),
            "asn": data.get("asn"),
            "country": data.get("country_code"),
            "hostnames": data.get("hostnames", []),
            "last_update": data.get("last_update"),
        }
    return None

# Mit passivem DNS anreichern
def pdns_lookup(domain):
    # Verwendung von VirusTotal passivem DNS
    resp = requests.get(
        f"https://www.virustotal.com/api/v3/domains/{domain}/resolutions",
        headers={"x-apikey": VT_API_KEY}
    )
    if resp.status_code == 200:
        data = resp.json()
        resolutions = []
        for r in data.get("data", []):
            resolutions.append({
                "ip": r["attributes"]["ip_address"],
                "date": r["attributes"]["date"],
            })
        return resolutions
    return []

Schritt 6: Netzwerkerkennungssignaturen erstellen

Erstellen Sie Erkennungsregeln basierend auf den analysierten C2-Merkmalen:

# Suricata-Regeln für das analysierte C2
cat << 'EOF' > c2_detection.rules
# HTTP-Beacon-Muster
alert http $HOME_NET any -> $EXTERNAL_NET any (
    msg:"MALWARE MalwareX C2 HTTP Beacon";
    flow:established,to_server;
    http.method; content:"POST";
    http.uri; content:"/gate.php"; startswith;
    http.header; content:"User-Agent: Mozilla/5.0 (compatible; MSIE 10.0)";
    threshold:type threshold, track by_src, count 5, seconds 600;
    sid:9000010; rev:1;
)

# JA3-Fingerabdruck-Übereinstimmung
alert tls $HOME_NET any -> $EXTERNAL_NET any (
    msg:"MALWARE MalwareX TLS JA3-Fingerabdruck";
    ja3.hash; content:"a0e9f5d64349fb13191bc781f81f42e1";
    sid:9000011; rev:1;
)

# DNS-Beacon-Erkennung (Subdomain mit hoher Entropie)
alert dns $HOME_NET any -> any any (
    msg:"MALWARE Vermutetes DNS-C2-Tunneling";
    dns.query; pcre:"/^[a-z0-9]{20,}\./";
    threshold:type threshold, track by_src, count 10, seconds 60;
    sid:9000012; rev:1;
)

# Zertifikatsbasierte Erkennung
alert tls $HOME_NET any -> $EXTERNAL_NET any (
    msg:"MALWARE MalwareX selbstsigniertes C2-Zertifikat";
    tls.cert_subject; content:"CN=update.malicious.com";
    sid:9000013; rev:1;
)
EOF

Schlüsselkonzepte

BegriffDefinition
BeaconingPeriodischer Check-in der Malware beim C2-Server in regelmäßigen Abständen, oft mit Jitter, um Mustererkennung zu vermeiden
JitterZufällige Abweichung des Beacon-Intervalls (z. B. 60 s +/- 15 %), um das Zeitmuster weniger vorhersagbar und schwerer erkennbar zu machen
Malleable C2Cobalt-Strike-Funktion, die es Betreibern ermöglicht, alle Aspekte des C2-Verkehrs (URIs, Header, Kodierung) anzupassen, um legitime Dienste zu imitieren
Dead DropZwischenablage (Paste-Site, Cloud-Speicher, soziale Medien), in der C2-Befehle für die Malware zum Abruf hinterlegt werden
Domain FrontingVerwendung einer vertrauenswürdigen CDN-Domäne im TLS-SNI bei gleichzeitiger Weiterleitung an ein anderes Backend, sodass C2-Verkehr zu einem legitimen Dienst zu gehen scheint
Fast FluxSchnell wechselnde DNS-Einträge für C2-Domänen, um sie auf viele IPs zu verteilen und Bekämpfungsbemühungen zu widerstehen
C2-FrameworkSoftware-Toolkit, das C2-Server, Implantat-Generator und Betreiberoberfläche bereitstellt (Cobalt Strike, Metasploit, Sliver, Covenant)

Werkzeuge & Systeme

  • Wireshark: Paketanalysator für detaillierte C2-Protokollanalyse auf Paketebene
  • RITA (Real Intelligence Threat Analytics): Open-Source-Tool zur Analyse von Zeek-Protokollen auf Beacon-Erkennung und DNS-Tunneling
  • CobaltStrikeParser: Tool zur Extraktion der Cobalt-Strike-Beacon-Konfiguration aus Proben und Speicherabbildern
  • JA3/JA3S: TLS-Fingerprinting-Methode zur Identifizierung von C2-Frameworks anhand ihrer TLS-Implementierungsmerkmale
  • Shodan/Censys: Internet-Scanning-Plattformen zur Kartierung der C2-Infrastruktur und Identifizierung verwandter Server

Häufige Szenarien

Szenario: Reverse-Engineering eines benutzerdefinierten C2-Protokolls

Kontext: Eine Malware-Probe kommuniziert mit ihrem C2-Server über ein unbekanntes Binärprotokoll auf TCP-Port 8443. Das Protokoll muss dekodiert werden, um den Befehlssatz zu verstehen und Erkennungssignaturen zu erstellen.

Vorgehensweise:

  1. PCAP nach TCP-Port-8443-Konversationen filtern und die TCP-Streams extrahieren
  2. Die ersten Austausche analysieren, um den Handshake/Authentifizierungsmechanismus zu identifizieren
  3. Die Nachrichtenstruktur kartieren (Längenpräfix, Typfeld, Nutzlastkodierung)
  4. Mit der Ghidra-Disassemblierung der Sende-/Empfangsfunktionen in der Malware abgleichen
  5. Den Befehlsverteiler identifizieren und die Funktion jedes Befehlscodes dokumentieren
  6. Einen Protokoll-Decoder in Python für die laufende Verkehrsanalyse erstellen
  7. Suricata-Regeln erstellen, die auf den Protokoll-Handshake oder statische Header-Bytes passen

Fallstricke:

  • Annahme, dass das Protokoll statisch ist; einige C2-Frameworks handeln während des Handshakes eine Verschlüsselung aus
  • Nicht genügend Verkehr erfassen, um alle Befehlstypen zu sehen (einige Befehle sind selten)
  • Übersehen von Fallback-C2-Kanälen (DNS, ICMP), die aktiviert werden, wenn der primäre Kanal ausfällt
  • Verwechseln von verschlüsselten Nutzlastdaten mit der Protokoll-Rahmenstruktur

Ausgabeformat

C2-KOMMUNIKATIONSANALYSEBERICHT
===================================
Probe:            malware.exe (SHA-256: e3b0c44...)
C2-Framework:     Cobalt Strike 4.9

BEACON-KONFIGURATION
C2-Server:        hxxps://185.220.101[.]42/updates
Beacon-Typ:       HTTPS (Reverse)
Schlaf:           60 Sekunden
Jitter:           15%
User-Agent:       Mozilla/5.0 (Windows NT 10.0; Win64; x64)
URI (GET):        /dpixel
URI (POST):       /submit.php
Wasserzeichen:    1234567890

PROTOKOLLANALYSE
Transport:        HTTPS (TLS 1.2)
JA3-Hash:         a0e9f5d64349fb13191bc781f81f42e1
Zertifikat:       CN=Microsoft Update (selbstsigniert)
Kodierung:        Base64 mit XOR-Schlüssel 0x69
Befehlsformat:    [4B Länge][4B Befehlskennung][Nutzlast]

BEFEHLSATZ
0x01 - Sleep          Beacon-Intervall ändern
0x02 - Shell          cmd.exe-Befehl ausführen
0x03 - Download       Datei von C2 übertragen
0x04 - Upload         Datei an C2 exfiltrieren
0x05 - Inject         Prozessinjektion
0x06 - Keylog         Keylogger starten
0x07 - Screenshot     Bildschirm aufnehmen

INFRASTRUKTUR
Primär:          185.220.101[.]42 (AS12345, Hosting Co, NL)
Failover:         91.215.85[.]17 (AS67890, VPS-Anbieter, RU)
DNS:              update.malicious[.]com -> 185.220.101[.]42
Registrar:        NameCheap
Registrierung:    2025-09-01

ERKENNUNGSSIGNATUREN
SID 9000010:      HTTP-Beacon-Muster
SID 9000011:      JA3-TLS-Fingerabdruck
SID 9000013:      C2-Zertifikatsübereinstimmung

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

abusing-dpapi-for-credential-access

Extract and decrypt Windows DPAPI-protected secrets (Credential Manager, browser logins/cookies, Wi-Fi credentials, KeePass keys) online or offline using SharpDPAPI, SharpChrome, Mimikatz, or Impacket

abusing-shadow-credentials-for-privesc

Take over Active Directory accounts by writing attacker-controlled public keys to msDS-KeyCredentialLink (Shadow Credentials) with pyWhisker, Whisker, or Certipy, then authenticate via PKINIT to recover the target

achieving-cmmc-level-2-compliance

>-

acquiring-disk-image-with-dd-and-dcfldd

Create forensically sound bit-for-bit disk images with dd or dcfldd on a Linux forensic workstation, preserving evidence integrity through hash verification (MD5/SHA) during acquisition. Use when imaging a suspect drive, USB device, or memory card for investigation, preserving volatile disk evidence during incident response, or producing a verified copy for legal or law-enforcement proceedings before any destructive analysis.

analyzing-active-directory-acl-abuse

Detect dangerous ACL misconfigurations in Active Directory using ldap3

analyzing-android-malware-with-apktool

Perform static analysis of Android APK malware using apktool for resource decompilation, jadx for Java source recovery, and androguard for manifest inspection, dangerous permission-combination detection, and identification of obfuscated code, dynamic code loading, and reflection-based API calls. Use to statically triage a suspicious APK without executing it or to build mobile malware detection rules.

analyzing-api-gateway-access-logs

Parses API Gateway access logs (AWS API Gateway, Kong, Nginx) to detect

analyzing-apt-group-with-mitre-navigator

Query ATT&CK data with attackcti, mitreattack-python, and stix2, then build MITRE ATT&CK Navigator layers and multi-layer heatmap overlays mapping one or more APT groups

analyzing-azure-activity-logs-for-threats

Queries Azure Monitor activity logs and sign-in logs via azure-monitor-query

analyzing-bootkit-and-rootkit-samples

Analyzes bootkit and advanced rootkit malware infecting the Master

analyzing-browser-forensics-with-hindsight

Parse Chromium-based browser databases with Hindsight to extract and correlate browsing history, downloads, cookies, cached content, autofill data, saved passwords, and extensions from Chrome, Edge, Brave, Opera, and Vivaldi into a unified timeline (XLSX, JSON, or SQLite output). Use during incident response, insider-threat investigations, or criminal cases when you need to reconstruct a user

analyzing-campaign-attribution-evidence

Systematically evaluate cyber-campaign evidence to attribute an operation to a threat actor, using the Diamond Model and Analysis of Competing Hypotheses (ACH) to weigh infrastructure overlaps, TTP consistency, malware code similarity, and timing/language artifacts into confidence-weighted attribution assessments. Use when an incident investigation needs a defensible attribution confidence level.

analyzing-certificate-transparency-for-phishing

Monitor Certificate Transparency logs using crt.sh and Certstream to

analyzing-cloud-storage-access-patterns

Detect abnormal access in AWS S3, GCS, and Azure Blob Storage by analyzing CloudTrail Data Events, GCS audit logs, and Azure Storage Analytics for after-hours bulk downloads, new-IP access, and API-call spikes (e.g. GetObject) via statistical baselines and time-series anomaly detection. Use when investigating suspected cloud data exfiltration or building related detection rules.

analyzing-cobalt-strike-beacon-configuration

Extract and analyze Cobalt Strike beacon configuration from PE files

analyzing-cobaltstrike-malleable-c2-profiles

Parse and analyze Cobalt Strike Malleable C2 profiles with dissect.cobaltstrike (profiles and beacon-payload configs) and pyMalleableC2 (AST parsing) to extract HTTP/DNS transforms, URIs, headers, sleep/jitter, and injection behavior, then generate network detection signatures. Use when reverse-engineering a captured malleable profile or building detections against Cobalt Strike Beacon traffic.

analyzing-cyber-kill-chain

Analyzes intrusion activity against the Lockheed Martin Cyber Kill Chain

analyzing-disk-image-with-autopsy

Perform comprehensive forensic analysis of raw (dd), E01, or AFF disk images with Autopsy and The Sleuth Kit, recovering deleted files, examining metadata and embedded artifacts, keyword searching, and building investigation timelines with visual reports. Use for structured analysis of a forensic disk image or when stakeholders need visual reports from evidence.

analyzing-dns-logs-for-exfiltration

Analyzes DNS query logs to detect data exfiltration via DNS tunneling,

analyzing-docker-container-forensics

Investigate compromised Docker containers by analyzing images, layers,

Verwandte Skills