Web-Service-C2 erkennen: GitHub, Pastebin und Chat-APIs als C2-Kanal

Kurzfassung: Warum eigene Server betreiben, wenn GitHub, Pastebin, Discord und Telegram schon da sind? Beim Web-Service-C2 läuft die Steuerung über legitime Webdienste: Befehle liegen als Dead Drop auf einem Paste- oder Code-Hoster, oder ein Chat-Webhook dient als bidirektionaler Kanal. Der Verkehr geht per TLS an eine vertrauenswürdige Domäne und fällt kaum auf. Die Erkennung setzt am Prozess an, der den Dienst aufruft: ein Skript oder eine unbekannte Datei statt eines Browsers. Drei sigma-cli-validierte Sigma-Regeln für die DNS-Abfrage, den Chat-Webhook und den Dead-Drop-Abruf. Serie "Angriff erkennen".

Nach dem RMM-Missbrauch und dem Ingress Tool Transfer folgt der dritte C2-Weg, der ganz ohne eigene Infrastruktur auskommt. Statt einen Server zu mieten, den ein Verteidiger sperren könnte, nutzt der Angreifer Dienste, die in fast jeder Firma erlaubt sind: ein Repository, einen Paste-Dienst, einen Chat. Für Firewall und Proxy sieht das aus wie der Abruf einer bekannten Plattform. Diese Tarnung macht die Erkennung zu einer Frage des Kontexts: nicht welcher Dienst, sondern welcher Prozess ihn anspricht. Der Beitrag nimmt die Erkennung in den Blick und bleibt auf der Verteidigerseite.

Einordnung in ATT&CK: Web Service (T1102) mit drei Unterpunkten: Dead Drop Resolver (T1102.001), Bidirectional Communication (T1102.002) und One-Way Communication (T1102.003). MITRE führt die Technik in der Taktik Command and Control (TA0011). In dieser Serie steht sie in der Spalte Command and Control.

Was der Angreifer tut

Der Missbrauch legitimer Webdienste läuft auf der Ebene des Prinzips, nicht als Anleitung, in wenigen Varianten ab:

  • Dead Drop. Der nächste Befehl oder die Konfiguration liegt verschleiert auf einem Paste- oder Code-Hoster. Der infizierte Rechner holt sie dort ab - der eigentliche C2-Server bleibt verborgen.
  • Bidirektionaler Kanal. Ein Chat-Webhook oder eine Bot-API (Discord, Slack, Telegram) nimmt Ergebnisse entgegen und liefert neue Befehle zurück - voller C2 über einen Dienst, den viele Firmen erlauben.
  • Einbahn-Meldung. Reicht ein einfacher Rückkanal, meldet der Rechner nur Status oder gestohlene Daten an den Dienst, ohne Befehle zu empfangen.
  • Tarnung durch Vertrauen. Der Verkehr läuft per TLS zu einer bekannten, großen Domäne. Eine IP-Sperre greift nicht, und viele Kontrollen stufen den Dienst als harmlos ein.

Für die Erkennung ist entscheidend: Der Dienst selbst ist legitim, aber der Zugriff erfolgt aus dem falschen Prozess. Ein Skript-Interpreter oder eine unbekannte Datei, die einen Paste-Dienst oder einen Webhook anspricht, ist das verräterische Muster.

Welche Logquellen die Technik zeigt

  • Prozess-Telemetrie. Event 4688 und Sysmon Event 1 zeigen die Kommandozeile - eine Webhook-URL oder ein Paste-Link steht dort im Klartext. Die wichtigste Quelle für die gezielten Regeln.
  • Namensauflösung und Netz. Der DNS-Query (Sysmon Event 22) und die Verbindung (Sysmon Event 3) zeigen, welcher Prozess welchen Dienst anspricht; Grundlagen unter Sysmon einrichten.
  • Proxy und TLS. Der Proxy protokolliert Zielhost, URL-Pfad und Datenmenge. Der Pfad trennt den Abruf einer Roh-Datei oder eines Webhooks vom normalen Seitenaufruf.
  • Muster über die Zeit. Regelmäßige, gleichförmige Verbindungen zu demselben Dienst deuten auf Beaconing.

Das Muster im Log

Das klarste Signal ist der Prozess, nicht der Dienst: Ein Browser, der github.com oder discord.com aufruft, ist Alltag; eine PowerShell, ein wscript oder eine unbekannte EXE, die dasselbe tut, ist es nicht. Das zweite Signal ist die vollständige Webhook-URL in einer Kommandozeile - der Pfad discord.com/api/webhooks oder api.telegram.org/bot hat im Normalbetrieb kaum einen Grund, dort aufzutauchen. Das dritte ist der Abruf einer Roh-Datei von einem Paste- oder Code-Hoster durch einen Interpreter: der typische Dead Drop. Wie immer trennt der Blick auf Prozess, URL-Pfad und Ziel den Alltag vom Angriff.

Drei Sigma-Regeln

Die Regeln sind mit sigma-cli geprüft und decken die drei Spielarten ab: die DNS-Abfrage aus dem falschen Prozess, den Chat-Webhook und den Dead-Drop-Abruf. Die Browser-Ausnahme in der ersten Regel hält den Alltag draußen.

1. Nicht-Browser ruft einen Web-Dienst auf (T1102). Eine DNS-Abfrage zu einem oft missbrauchten Dienst, die nicht von einem Browser kommt. Die Regel steht auf level: medium.

Sigma
title: Nicht-Browser-Prozess ruft einen Web-Dienst als C2 auf
id: 4ce6fb7f-1d8c-4793-9727-f0aadd239369
status: experimental
description: |
  Erkennt DNS-Abfragen zu Web-Diensten, die haeufig als C2 missbraucht werden (Code- und
  Paste-Hoster, Chat-APIs), wenn die Abfrage nicht von einem Browser kommt. Angreifer legen
  Befehle und Nutzlast auf legitimen Diensten ab (Dead Drop) oder steuern bidirektional ueber sie,
  weil der Verkehr vertrauenswuerdig wirkt. Ein Skript oder eine unbekannte EXE, die solche Dienste
  aufloest, ist das verdaechtige Muster.
references:
  - https://attack.mitre.org/techniques/T1102/
author: blue-team.net
tags:
  - attack.command-and-control
  - attack.t1102
logsource:
  product: windows
  category: dns_query
detection:
  sel_host:
    QueryName|contains:
      - 'raw.githubusercontent.com'
      - 'gist.githubusercontent.com'
      - 'pastebin.com'
      - 'paste.ee'
      - 'transfer.sh'
      - '0x0.st'
      - 'api.telegram.org'
      - 'discord.com'
      - 'discordapp.com'
  filter_browser:
    Image|endswith:
      - '\msedge.exe'
      - '\chrome.exe'
      - '\firefox.exe'
      - '\iexplore.exe'
      - '\brave.exe'
      - '\opera.exe'
      - '\Discord.exe'
  condition: sel_host and not filter_browser
falsepositives:
  - Entwickler-Werkzeuge und Paketmanager, die GitHub-Inhalte laden - nach Host und Konto als Baseline ausnehmen
  - Der Discord- oder Telegram-Desktop-Client, falls nicht ueber die Browser-Ausnahme erfasst
level: medium

2. C2 über einen Chat-Webhook (T1102.002). Eine Discord-, Slack- oder Telegram-Webhook-URL in einer Kommandozeile - ein starkes Signal. Die Regel steht auf level: high.

Sigma
title: C2 oder Exfiltration ueber einen Chat-Webhook
id: 4f73dda2-3153-4d83-a2be-ef36604ee806
status: experimental
description: |
  Erkennt den Aufruf eines Discord-, Slack- oder Telegram-Webhooks in einer Kommandozeile. Solche
  Webhooks und Bot-APIs dienen Angreifern als bidirektionaler C2-Kanal und als Weg, Daten
  abzuziehen - der Verkehr geht an einen grossen, vertrauenswuerdigen Dienst und faellt kaum auf.
  Die vollstaendige Webhook-URL in einer Kommandozeile ist ein starkes Signal.
references:
  - https://attack.mitre.org/techniques/T1102/002/
author: blue-team.net
tags:
  - attack.command-and-control
  - attack.t1102
  - attack.t1102.002
logsource:
  product: windows
  category: process_creation
detection:
  sel_hook:
    CommandLine|contains:
      - 'discord.com/api/webhooks'
      - 'discordapp.com/api/webhooks'
      - 'hooks.slack.com/services'
      - 'api.telegram.org/bot'
  condition: sel_hook
falsepositives:
  - Legitime Benachrichtigungs-Skripte, die bewusst einen Chat-Webhook nutzen - bekannte Skripte und Konten als Baseline ausnehmen
level: high

3. Dead-Drop-Abruf durch ein Skript (T1102.001). Ein Interpreter, der eine Roh-Datei von einem Paste- oder Code-Hoster lädt. Ebenfalls level: high.

Sigma
title: Skript laedt von einem Code- oder Paste-Dienst (Dead Drop)
id: 2a3f08c5-ec37-42df-a5f4-e0d896f76ca7
status: experimental
description: |
  Erkennt einen Skript-Interpreter, der Inhalte von einem Code- oder Paste-Hoster
  (raw.githubusercontent, gist, pastebin, paste.ee und Co.) abruft. Das ist das Muster des Dead
  Drop Resolver: Der naechste Befehl oder die Konfiguration liegt auf einem legitimen Dienst, und
  das Skript holt sie von dort. Der Interpreter in Verbindung mit einem solchen Host ist
  verdaechtig.
references:
  - https://attack.mitre.org/techniques/T1102/001/
author: blue-team.net
tags:
  - attack.command-and-control
  - attack.t1102
  - attack.t1102.001
logsource:
  product: windows
  category: process_creation
detection:
  sel_img:
    Image|endswith:
      - '\powershell.exe'
      - '\pwsh.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\mshta.exe'
      - '\cmd.exe'
  sel_host:
    CommandLine|contains:
      - 'raw.githubusercontent.com'
      - 'gist.githubusercontent.com'
      - 'pastebin.com/raw'
      - 'paste.ee/r/'
      - 'hastebin'
      - '0x0.st'
      - 'transfer.sh'
  condition: sel_img and sel_host
falsepositives:
  - Entwickler- und Build-Skripte, die bewusst Rohinhalte von GitHub laden - bekannte Skripte, Quellen und Konten als Baseline ausnehmen
level: high

Hinweis zur Abdeckung: Die beiden Prozess-Regeln übersetzt sigma-cli sauber nach Splunk, Elastic und Microsoft KQL. Die DNS-Regel läuft in Splunk und Elastic; für KQL fehlt das Feld-Mapping, hier decken das DNS-Betriebsprotokoll oder die Proxy-Logs den Fall ab.

Härtung: der Angriff, der ins Leere läuft

  • Ausgehenden Verkehr über einen Proxy führen. Zielhost, URL-Pfad und Datenmenge protokollieren und nicht benötigte Dienste (Paste-Hoster, Chat-APIs) für normale Endpunkte sperren. Das trifft den Kanal direkt.
  • Skript-Interpreter einschränken. PowerShell härten (Script Block Logging, Constrained Language Mode) und wscript, cscript und mshta dort blockieren, wo normale Nutzer sie nicht brauchen.
  • Chat-Webhooks kontrollieren. Wenn Discord, Slack oder Telegram nicht benötigt werden, die Webhook- und Bot-Endpunkte am Proxy sperren; sonst auf die bekannten, freigegebenen Automatisierungen begrenzen.
  • Prozessherkunft im Blick behalten. Verbindungen zu diesen Diensten nach dem aufrufenden Prozess bewerten - nur der Browser und bekannte Clients gehören dorthin.

Der Test

Die Erkennung lässt sich im Lab gefahrlos prüfen, auf isolierten Systemen mit aktivem Sysmon:

  • Für Regel 1 mit PowerShell eine Roh-Datei von raw.githubusercontent.com abrufen. Der DNS-Query muss mit powershell.exe als Prozess erscheinen und die Browser-Ausnahme darf nicht greifen.
  • Für Regel 2 testweise eine Nachricht an einen selbst angelegten Discord- oder Telegram-Webhook senden. Die Kommandozeile mit der Webhook-URL muss in Event 4688 auftauchen.
  • Für Regel 3 mit wscript oder PowerShell eine Datei von pastebin.com/raw laden und den Eintrag in der Prozess-Telemetrie prüfen.
  • Breiter wird der Test mit den Fällen zu T1102 aus Atomic Red Team.

Fehlalarme und Tuning

  • Entwickler und Build-Systeme. Auf Entwickler-Hosts und Buildservern sind GitHub-Abrufe Alltag. Diese Systeme und Konten gesondert behandeln und als Baseline ausnehmen.
  • Freigegebene Automatisierung. Manche Teams nutzen Chat-Webhooks für Benachrichtigungen. Die bekannten Webhook-URLs und ihre Skripte ausnehmen - der Rest bleibt interessant.
  • Desktop-Clients. Der Discord- oder Telegram-Client löst dieselben Domänen auf. In Regel 1 die Client-Prozesse ergänzend ausnehmen, wenn sie erlaubt sind.
  • Prozess schlägt Ziel. Nicht der Dienst entscheidet, sondern der aufrufende Prozess. Wer auf Interpreter und unbekannte Dateien filtert, trennt Angriff und Alltag zuverlässig.

Fazit

Web-Service-C2 ist der C2-Weg ohne eigene Infrastruktur: GitHub, Pastebin, Discord und Telegram liefern den Kanal, und eine IP-Sperre greift nicht. Deshalb entscheidet der Kontext - nicht welcher Dienst angesprochen wird, sondern welcher Prozess es tut. Die verlässlichen Signale sind die DNS-Abfrage aus einem Nicht-Browser, die Webhook-URL in der Kommandozeile und der Dead-Drop-Abruf durch einen Interpreter. Die wirksamste Härtung führt den Verkehr über einen Proxy, sperrt nicht benötigte Dienste und hält die Skript-Interpreter kurz. Verwandt sind der Ingress Tool Transfer, das Living off the Land und - in die Gegenrichtung - der Datenabfluss. Alle Techniken dieser Taktik sammelt das Lexikon nach Taktik unter Command and Control.

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.