SOC Prime Bias: Hoch

30 Jun 2026 06:21 UTC

Missbrauch von GitLab CI Runners als Command-and-Control-Framework

Author Photo
SOC Prime Team linkedin icon Folgen
Missbrauch von GitLab CI Runners als Command-and-Control-Framework
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

Der Artikel beschreibt ein Proof-of-Concept namens GitRunner C2, das legitime, digital signierte GitLab CI Runner-Binärdateien in ein Command-and-Control-Framework verwandelt. Durch die Installation der Runner als Windows-Dienste kann ein Angreifer beliebige PowerShell-Befehle ausführen und Daten durch die integrierte Infrastruktur von GitLab exfiltrieren. Da der Datenverkehr ausgehend über HTTPS nach gitlab.comläuft, kann die Aktivität sich in normale Entwicklerkommunikationen einfügen.

Untersuchung

Der Forscher demonstrierte die gesamte Angriffskette, beginnend mit der Registrierung über eine erhöhte PowerShell-Einzeiler und endend mit der interaktiven Befehlsausführung. Die Untersuchung stützte sich auf Sysmon- und PowerShell-Operational-Protokolle, um Prozessereignisse, Registrierungsänderungen und ausgeführte Befehle durch Script Block Logging zu protokollieren. Die Studie zeigte, dass das legitime Verhalten des Runners helfen kann, traditionelle EDR- und netzwerkbasierte Erkennungen zu umgehen.

Abmilderung

Verteidiger sollten auf neu installierte Windows-Dienste mit ungewöhnlichen Namen oder Dienste achten, die von nicht standardmäßigen Dateipfaden aus gestartet werden. Die Aktivierung von PowerShell Script Block Logging ist entscheidend für die Sichtbarkeit von Befehlen, die über den Runner ausgeführt werden. Organisationen sollten auch einschränken, wer Dienste installieren kann, und auf verdächtigen, ausgehenden HTTPS-Datenverkehr zu GitLab von Endpunkten überwachen, die nicht für Entwicklungsarbeiten verwendet werden.

Reaktion

Wenn diese Aktivität festgestellt wird, isolieren Sie den betroffenen Endpunkt sofort, um weitere Command-and-Control-Kommunikation zu stoppen. Widerrufen Sie alle GitLab-Personal-Access-Tokens und Runner-Registrierungs-Tokens, die mit der kompromittierten Umgebung verbunden sind. Ermittler sollten dann die PowerShell-Protokolle und Windows-Ereignisprotokolle überprüfen, um den Umfang der ausgeführten Befehle und jeglicher resultierenden Datenexfiltration zu bestimmen.

"Flussdiagramm TD Schritt_Eingang["T1105 – Ingress Tool Transfer: Download der legitimen gitlab-runner-windows-amd64.exe über PowerShell von S3"] Schritt_Bestand["T1543.003 – Systemprozess erstellen oder ändern: Windows-Dienst: Installieren des GitLab-Runners als nativen Windows-Dienst für Beständigkeit"] Regeln_für_Bestand("<b>Regelname</b>: Verdächtiger Dienst-Binärpfad (über System)<br/><b>Regel-ID</b>: 780e6396-d9f4-42b2-8d73-89918e2dab16") Schritt_Trust_Unterversion["T1553.002 – Vertrauensteuerungen unterwandern: Code-Signierung: Verwendung der digital signierten GitLab-Binärdatei zur Umgehung der Erkennung"] Schritt_Ausführung["T1059.003 – Befehl- und Skript-Interpreter: Windows-Befehlszeile: Ausführen von Befehlsnutzlasten über CI-Variablen mit Shell-Executor"] Schritt_C2["T1071 – Anwendungsprotokollschicht: Verwendung von HTTPS (Port 443) zur GitLab-Infrastruktur als C2-Relais"] Schritt_Exfiltration["T1567.001 – Exfiltration über Webdienst: Exfiltration in Code-Repository: Verschieben von Dateien über GitLab-Artifacts und generische Paketregistrierung"] Schritt_Eingang –>|führt zu| Schritt_Bestand Schritt_Bestand –>|ermöglicht| Schritt_Trust_Unterversion Schritt_Bestand -.->|erkannt durch| Regeln_für_Bestand Schritt_Trust_Unterversion –>|dann| Schritt_Ausführung Schritt_Ausführung –>|verwendet| Schritt_C2 Schritt_C2 –>|führt zu| Schritt_Exfiltration "

Angriffsfluss

Simulationsausführung

Voraussetzung: Der Telemetrie- & Baseline-Pre-Flight-Check muss bestanden werden.

Begründung: Dieser Abschnitt beschreibt die genaue Ausführung der gegnerischen Technik (TTP), die darauf abzielt, die Erkennungsregel auszulösen. Die Befehle und die Erzählung MÜSSEN die identifizierten TTPs direkt widerspiegeln und sollen die genau erwartete Telemetrie generieren, die durch die Erkennungslogik erwartet wird. Abstrakte oder nicht verwandte Beispiele führen zu Fehldiagnosen.

  • Angriffserzählung & Befehle: Ein Angreifer hat anfänglichen Zugriff gewonnen und beabsichtigt, einen beständigen Command-and-Control (C2)-Kanal zu etablieren. Statt bekannte Malware zu verwenden, laden sie die legitime gitlab-runner-windows-amd64.exe herunter, um sich in DevOps-Aktivitäten einzufügen. Sie verwenden PowerShell, um die Datei in ein temporäres Verzeichnis zu kopieren und registrieren sie dann als Windows-Dienst namens „gitlab-runner“. Diese Methode zielt darauf ab, die vertrauenswürdige Natur von CI/CD-Tools auszunutzen, um traditionelle Sicherheitsüberprüfungen zu umgehen.

  • Regressionstest-Skript:

    # Simulation der GitLab Runner-Installation zur Erkennungsvalidierung
    $ErrorActionPreference = "Stop"
    
    # 1. Pfade und Namen genau nach der Erkennungslogik definieren
    $TargetDir = "C:WindowsTemp"
    $BinaryName = "gitlab-runner-windows-amd64.exe"
    $BinaryPath = Join-Path $TargetDir $BinaryName
    $ServiceName = "gitlab-runner"
    
    Write-Host "[+] Starte Simulation: Installation von $BinaryName"
    
    # 2. Dateierstellung simulieren (Sysmon-Ereignis-ID 11)
    # Bei einem echten Angriff wäre dies ein Web-Download. Hier erstellen wir eine Dummy-Datei mit dem spezifischen Namen.
    New-Item -Path $BinaryPath -ItemType File -Force | Out-Null
    Write-Host "[+] Datei erstellt: $BinaryPath (Löst Ereignis-ID 11 aus)"
    
    # 3. Registrierung der Dienstinstallation simulieren (Sysmon-Ereignis-ID 13)
    # Erstellen des Dienstpfads in der Registrierung, um die ImagePath-Erkennung auszulösen.
    $RegPath = "HKLM:SYSTEMCurrentControlSetServices$ServiceName"
    New-Item -Path $RegPath -Force | Out-Null
    Set-ItemProperty -Path $RegPath -Name "ImagePath" -Value $BinaryPath
    Write-Host "[+] Registrierungsschlüssel und ImagePath erstellt: $RegPath (Löst Ereignis-ID 13 aus)"
    
    Write-Host "[+] Simulation abgeschlossen. Überprüfen Sie SIEM auf Alarme."
  • Bereinigungskommandos:

    # Bereinigung von Simulationsartefakten
    $TargetDir = "C:WindowsTemp"
    $BinaryName = "gitlab-runner-windows-amd64.exe"
    $BinaryPath = Join-Path $TargetDir $BinaryName
    $ServiceName = "gitlab-runner"
    
    Remove-Item -Path $BinaryPath -Force -ErrorAction SilentlyContinue
    Remove-Item -Path "HKLM:SYSTEMCurrentControlSetServices$ServiceName" -Recurse -Force -ErrorAction SilentlyContinue
    Write-Host "[+] Bereinigung abgeschlossen."