Cobalt Strike und Beaconing erkennen: Beacon, Named Pipes und Spawnto

Kurzfassung: Cobalt Strike ist das meistgenutzte kommerzielle C2-Framework, legitim für Red Teams und gestohlen auch bei Ransomware-Gruppen. Sein Implantat Beacon meldet sich in regelmäßigen Abständen beim Server (Beaconing), kommuniziert zwischen Hosts über benannte Pipes und schleust seinen Code per Injection in eine Prozess-Hülle ein. Erkennung aus Verteidigersicht: das Beaconing im Netz und in Sysmon Event 3, die Standard-Pipes in Sysmon Event 17, die leere Prozess-Hülle in Sysmon Event 1 und die Injection in Sysmon Event 8. Drei sigma-cli-validierte Sigma-Regeln, die Netzwerkseite, Test und Tuning. Serie "Angriff erkennen".

Cobalt Strike erkennen ist deshalb so lohnend, weil ein Treffer fast immer einen aktiven, menschlichen Angreifer im Netz bedeutet, nicht nur eine automatische Schadsoftware. Das Framework ist darauf ausgelegt, sich unauffällig zu verhalten: Beacon tarnt seinen Verkehr als normales HTTPS oder DNS, schläft zwischen den Kontakten und lässt sich über Malleable-C2-Profile fast beliebig umkonfigurieren. Genau diese Flexibilität hat aber Grenzen, und es bleiben verräterische Muster: die Regelmäßigkeit der Rückrufe, die Standardwerte unangepasster Profile und das typische Verhalten auf dem Endpunkt. Dieser Beitrag aus der Serie "Angriff erkennen" nimmt die Technik aus Verteidigersicht auseinander, mit drei Sigma-Regeln, der Netzwerkseite und dem Test.

Einordnung in ATT&CK: Beaconing fällt unter Command and Control, vor allem T1071 (Application Layer Protocol) und T1573 (Encrypted Channel). Cobalt Strike selbst ist als Software S0154 gelistet. Die Beacon-eigene Injection in eine Prozess-Hülle streift zusätzlich die Taktik Stealth.

Was der Angreifer tut

Nach dem ersten Zugriff lädt der Angreifer das Beacon-Implantat und betreibt von da an seine gesamte Operation darüber: Befehle absetzen, Werkzeuge nachladen, sich ausbreiten, Daten abziehen. Vier Verhaltensweisen sind für die Erkennung entscheidend. Bewusst auf der Ebene des Prinzips, nicht als Anleitung:

  • Beaconing. Beacon meldet sich nicht dauerhaft, sondern in Intervallen beim Server, holt Befehle ab und schläft wieder. Dieses Intervall (Sleep) lässt sich mit einer Streuung (Jitter) versehen, damit es nicht exakt gleichmäßig wirkt. Trotzdem bleibt der Verkehr über die Zeit auffällig regelmäßig, anders als das unregelmäßige Surfen eines Menschen.
  • Benannte Pipes. Für die SMB-Variante und für die Kommunikation zwischen mehreren Beacons nutzt Cobalt Strike benannte Pipes. Unangepasste Profile verwenden charakteristische Standardnamen, an denen sich die Präsenz gut erkennen lässt.
  • Spawnto und Injection. Beacon führt viele Aktionen nicht im eigenen Prozess aus, sondern startet eine unauffällige Hülle, standardmäßig ein rundll32.exe ohne Parameter, und injiziert seinen Code hinein. Das verschleiert den Ursprung und ist zugleich eine verräterische Spur.
  • Malleable-C2-Profile. Über Profile lässt sich fast jeder Indikator anpassen: Pfade, Header, User-Agent, Pipe-Namen, der spawnto-Prozess. Was angepasst ist, fällt als Standard weg; was der Angreifer vergisst oder bewusst lässt, bleibt erkennbar.

Für die Erkennung heißt das: Verlasse dich nicht auf einen einzelnen Indikator, sondern kombiniere die Netzwerkseite (Regelmäßigkeit der Rückrufe) mit der Endpunktseite (Pipes, Hülle, Injection). Wer nur die Standardwerte sucht, findet das angepasste Profil nicht; wer nur auf die Periodizität schaut, übersieht die leisen Varianten.

Welche Logquellen die Technik zeigt

  • Netzwerkverbindungen. Sysmon Event 3 zeigt jede ausgehende Verbindung samt auslösendem Prozess. Rundll32 oder regsvr32, die ins Internet telefonieren, sind hier sofort verdächtig. Sysmon Event 22 zeigt DNS-Abfragen, wenn Beacon über DNS kommuniziert.
  • Benannte Pipes. Sysmon Event 17 und 18 protokollieren erstellte und verbundene Pipes mit Namen und Prozess.
  • Prozess und Injection. Sysmon Event 1 zeigt die gestartete Hülle samt Kommandozeile, Sysmon Event 8 das Einschleusen von Code in einen anderen Prozess (CreateRemoteThread).
  • Dienste und Netz-Telemetrie. Remote-Ausführung über Beacon hinterlässt oft eine Dienstinstallation in Event 7045. Die eigentliche Beaconing-Analyse lebt von Proxy-, Firewall- und Zeek-Logs mit Volumen, Zeitmustern und Zertifikaten.

Das Muster im Log

Das stärkste Signal ist die Regelmäßigkeit. Ein Prozess, der alle 60 Sekunden mit geringer Streuung dieselbe externe Adresse kontaktiert, Stunde um Stunde, ist das klassische Beaconing. Reine Sigma-Regeln auf einzelne Events bilden diese Periodizität nur grob über die Häufigkeit ab; die saubere Analyse der Zeitabstände gehört in eine Netzwerkanalyse wie Zeek oder ein Werkzeug wie RITA, ergänzt um Fingerabdrücke der TLS-Verbindung (JA3 und JARM) und die bekannten Standard-Zertifikate von Cobalt Strike. Auf dem Endpunkt kommen die hochwertigen Einzelspuren dazu: die charakteristischen Pipe-Namen, das rundll32 ohne Argumente und das Einschleusen in eine frisch gestartete Hülle. Am überzeugendsten ist die Kombination: ein verdächtiger Prozess, der sowohl eine Standard-Pipe öffnet als auch regelmäßig nach draußen telefoniert.

Drei Sigma-Regeln

Die Regeln sind mit sigma-cli geprüft. Die erste und zweite sind hochwertige Endpunkt-Signaturen, die dritte nähert das Beaconing über die Häufigkeit an und ist der Einstieg, bevor eine echte Periodizitätsanalyse steht.

1. Standard-Named-Pipes (S0154). Diese Regel greift auf die Pipe-Namensmuster unangepasster Cobalt-Strike-Profile. Sie ist sehr fehlalarmarm, erkennt aber nur Standardprofile; angepasste Namen entgehen ihr bewusst.

Sigma
title: Cobalt-Strike-typische Named Pipes
id: d200db96-1d28-44eb-ab81-8c1993a862fa
status: experimental
description: Erkennt Named Pipes mit Namensmustern aus den Standard-Profilen von
  Cobalt Strike. Beacon nutzt benannte Pipes fuer die SMB-Variante und fuer die
  Kommunikation zwischen Beacons. Angepasste Malleable-C2-Profile aendern diese
  Namen, die Standardwerte sind aber weit verbreitet.
references:
  - https://attack.mitre.org/techniques/T1071/
author: blue-team.net
tags:
  - attack.command-and-control
  - attack.t1071
logsource:
  product: windows
  category: pipe_created
  definition: 'Sysmon Event 17 und 18 (Pipe Created, Pipe Connected)'
detection:
  selection:
    PipeName|contains:
      - '\msagent_'
      - '\postex_'
      - '\postex_ssh_'
      - '\status_'
      - '\MSSE-'
  condition: selection
falsepositives:
  - Sehr selten; einzelne Treffer im Kontext von Prozess und Host pruefen
level: high

2. Prozess-Hülle ohne Argumente (Spawnto). rundll32.exe und regsvr32.exe werden legitim fast immer mit Parametern aufgerufen. Ein Start ganz ohne Argumente ist das Standard-Spawnto-Verhalten von Beacon und ein starkes Signal.

Sigma
title: rundll32 oder regsvr32 ohne Argumente (Cobalt-Strike-Spawnto)
id: 4364ce1e-d555-4557-b20c-d33c8a41f123
status: experimental
description: Erkennt den Start von rundll32.exe oder regsvr32.exe ganz ohne
  Argumente. Cobalt Strike startet standardmaessig einen solchen Prozess als
  Huelle (spawnto) und schleust den Beacon-Code per Injection ein. Legitim werden
  diese Programme praktisch immer mit Parametern aufgerufen.
references:
  - https://attack.mitre.org/techniques/T1055/
author: blue-team.net
tags:
  - attack.command-and-control
  - attack.t1071
logsource:
  category: process_creation
  product: windows
detection:
  selection:
    Image|endswith:
      - '\rundll32.exe'
      - '\regsvr32.exe'
    CommandLine|endswith:
      - '\rundll32.exe'
      - 'rundll32.exe"'
      - '\regsvr32.exe'
      - 'regsvr32.exe"'
  condition: selection
falsepositives:
  - Seltene Startskripte, die diese Programme ohne Parameter aufrufen
level: high

3. Beaconing über die Häufigkeit (T1071). Eine Korrelation: Sie zählt die ausgehenden Verbindungen typischer Spawnto-Prozesse zu einer externen Adresse in einem Fenster und schlägt ab einer Schwelle an. Das ersetzt keine echte Jitter-Analyse, fängt aber kurze Sleep-Intervalle und ist ein guter Ausgangspunkt. Schwelle und Prozessliste passt du an deine Umgebung an.

Sigma
title: Haeufige Verbindung eines verdaechtigen Prozesses zu einer externen IP (Basisregel)
id: 53deaccd-9503-4ae9-be79-4b364206e23d
name: cs_beacon_conn
status: experimental
logsource:
  product: windows
  category: network_connection
  definition: 'Sysmon Event 3 (Network Connection)'
detection:
  selection:
    Initiated: 'true'
    Image|endswith:
      - '\rundll32.exe'
      - '\regsvr32.exe'
      - '\dllhost.exe'
      - '\mshta.exe'
  filter_private:
    DestinationIp|cidr:
      - '10.0.0.0/8'
      - '172.16.0.0/12'
      - '192.168.0.0/16'
      - '127.0.0.0/8'
      - '169.254.0.0/16'
  condition: selection and not filter_private
---
title: Beaconing eines verdaechtigen Prozesses zu einer externen IP
id: 97fa50fd-ee8d-4372-a850-e3b6d77b647e
status: experimental
description: Naehert Beaconing ueber die Haeufigkeit an. Ein typischer Spawnto- oder
  Injection-Prozess wie rundll32 baut in kurzer Zeit auffaellig viele Verbindungen
  zu derselben externen Adresse auf. Echte Periodizitaetsanalyse (gleichmaessige
  Abstaende mit geringer Streuung) gehoert in eine Netzwerkanalyse wie Zeek oder
  RITA; diese Regel ist der Einstieg auf der Endpunktseite. Schwelle an die eigene
  Umgebung anpassen.
references:
  - https://attack.mitre.org/techniques/T1071/
author: blue-team.net
tags:
  - attack.command-and-control
  - attack.t1071
correlation:
  type: event_count
  rules:
    - cs_beacon_conn
  group-by:
    - Image
    - DestinationIp
  timespan: 1h
  condition:
    gt: 60
falsepositives:
  - Legitime Prozesse mit haeufigen Verbindungen; betroffene Prozess-Ziel-Paare ausnehmen
level: medium

Der Test

Alle drei Regeln lassen sich im Lab prüfen, ausschließlich auf isolierten Systemen und mit einem legal beschafften oder nachgebauten Testaufbau:

  • Für Regel 1 das Öffnen einer Named Pipe mit einem der Standardnamen auf einem Testsystem mit aktivem Sysmon. Event 17 muss den Pipe-Namen zeigen und die Regel auslösen.
  • Für Regel 2 ein Start von rundll32.exe ganz ohne Argumente. Event 1 muss die leere Kommandozeile zeigen und die Regel greifen.
  • Für Regel 3 ein kleines Skript, das aus einem der genannten Prozesse heraus in kurzer Folge dieselbe externe Test-Adresse kontaktiert. Die Korrelation muss nach dem Überschreiten der Schwelle anschlagen. Danach die Schwelle an die lauteste legitime Quelle anpassen.
  • Für die Netzwerkseite eignet sich ein Beaconing-Simulator oder die passenden Tests aus Atomic Red Team, ausgewertet in Zeek oder RITA.

Fehlalarme und Tuning

  • Autorisierte Red Teams. Cobalt Strike ist ein legitimes Werkzeug. Halte Einsatzfenster und Infrastruktur deiner eigenen oder beauftragten Red Teams fest, damit Treffer zugeordnet werden, statt die Regeln zu entschärfen.
  • Pipe-Regel. Die Standardnamen überschneiden sich kaum mit legitimer Software. Einzelne Treffer trotzdem im Kontext von Prozess und Host prüfen, bevor eskaliert wird.
  • Spawnto-Regel. Sehr selten rufen Startskripte rundll32 oder regsvr32 ohne Parameter auf. Solche bekannten Fälle als Ausnahme aufnehmen und den Rest scharf halten.
  • Beaconing-Korrelation. Das ist die lauteste der drei Regeln. Beschränke sie auf die genannten Spawnto-Prozesse, schließe bekannte, häufig verbindende Prozess-Ziel-Paare aus und setze die Schwelle knapp über deinen Normalzustand. Besser noch: ergänze sie um eine echte Periodizitätsanalyse im Netz.

Fazit

Cobalt Strike ist auf Tarnung ausgelegt, aber nicht unsichtbar. Wer die Netzwerkseite (regelmäßige Rückrufe, TLS-Fingerabdrücke) mit der Endpunktseite (Standard-Pipes, leere Hülle, Injection) kombiniert, holt den Beacon zuverlässig aus der Deckung, und ein Treffer bedeutet fast immer einen aktiven Angreifer, der sofortige Reaktion verdient. Die drei Regeln hier sind der Einstieg auf dem Endpunkt, die echte Beaconing-Analyse im Netz die Ergänzung. Damit schließt die erste Welle der Serie "Angriff erkennen": von der Aufklärung mit BloodHound über Credential Dumping, NTLM-Relay und AD-CS-Missbrauch bis zu Datenabfluss und Ransomware. Weitere Taktiken und Techniken findest du im Lexikon nach Taktik.

NH

$ whoami

Norbert Hofmann

Cyber Defense Analyst im Security Operations Center eines Managed Security Service Providers. Red und Blue Teaming, Malware-Analyse, Incident Response und Security-Awareness-Trainings. Finalist bei „Deutschlands bester Hacker“ 2022, mehrere CVE-Einträge für WordPress-Plugins.