Campagne de phishing ClickFix déguisée en installateur de Claude
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Une campagne de phishing a utilisé la technique ClickFix pour distribuer un package MSIX malveillant déguisé en installateur de Claude AI. L’exécution initiale reposait sur mshta lancé via l’utilitaire Exécuter de Windows avec une URL spécialement conçue. La charge utile téléchargée contenait un fichier HTA qui construisait un stage PowerShell obscurci, contournait AMSI, récupérait du contenu PowerShell supplémentaire et exécutait une routine d’injection de processus en utilisant du shellcode chiffré. L’activité a été observée dans les environnements clients en Europe et aux États-Unis et a été détectée via la couverture de Rapid7 InsightIDR.
Enquête
Les analystes de Rapid7 ont identifié mshta l’exécution liée à la clé de registre RunMRU et ont capturé l’URL download-version.1-5-8.com/claude.msixbundle. L’analyse a montré que l’archive MSIX incluait un fichier HTA qui décodait des chaînes obscurcies, assemblait une commande PowerShell, écrasait le contexte AMSI et injectait finalement du shellcode à travers des appels API natifs de Windows. Les chercheurs ont également découvert que plusieurs stages PowerShell de suivi ont été téléchargées depuis des URL générées dynamiquement dérivées d’un hachage construit à partir du nom de l’ordinateur et du nom d’utilisateur de la victime.
Atténuation
Les défenseurs devraient surveiller la clé de registre RunMRU à la recherche d’entrées suspectes mshta et bloquer mshta l’exécution lorsqu’elle provient de sources non fiables. Les organisations devraient également restreindre les téléchargements de packages MSIX à partir de domaines inconnus et appliquer une liste blanche des applications pour l’exécution de PowerShell. Les protections AMSI devraient rester activées, et la journalisation PowerShell doit être configurée pour capturer les activités de commande encodée ou obscurcie pour enquête.
Réponse
Lorsque cette activité est détectée, les équipes de sécurité devraient isoler le point d’extrémité affecté, préserver les artefacts de ligne de commande et mener une analyse judiciaire des stages PowerShell téléchargés et de tout processus injecté. Les identifiants utilisés sur le système impacté devraient être réinitialisés et l’historique du navigateur examiné pour retracer l’appât initial. La logique de détection devrait également être mise à jour pour inclure les domaines observés, les hachages et les modèles d’exécution associés.
graph TB classDef action fill:#99ccff step_phishing[« <b>Action</b> – T1566.002 Phishing : lien de spearphishing<br/><b>Description</b>: La victime clique sur un lien malveillant qui lance mshta. »] class step_phishing action step_mshta[« <b>Action</b> – T1218.005 Mshta<br/><b>Description</b>: Exécution de mshta avec une URL vers un payload .msixbundle. »] class step_mshta action step_hta_deobfuscation[« <b>Action</b> – T1027.010, T1027.013, T1140 Déobfuscation/décodage<br/><b>Description</b>: HTA exécute VBS qui déobfusque le code malveillant. »] class step_hta_deobfuscation action step_ps_encoded[« <b>Action</b> – T1059.001 PowerShell<br/><b>Description</b>: Génère une commande PowerShell encodée. »] class step_ps_encoded action step_stage1[« <b>Action</b> – T1059.001 PowerShell (Phase 1)<br/><b>Description</b>: Calcule MD5 de COMPUTERNAME+USERNAME et télécharge Phase 2. »] class step_stage1 action step_stage2[« <b>Action</b> – T1562.001 Contournement des défenses (AMSI bypass)<br/><b>Description</b>: Écrase le contexte AMSI et télécharge Phase 3. »] class step_stage2 action step_stage3[« <b>Action</b> – T1059.001 PowerShell (Phase 3)<br/><b>Description</b>: Décode un tableau d’octets et crée un ScriptBlock. »] class step_stage3 action step_process_injection[« <b>Action</b> – T1055 Injection de processus<br/><b>Description</b>: Injection de code dans un processus cible via .NET et API natives. »] class step_process_injection action step_persistence[« <b>Action</b> – T1547.014 Clés Run / dossier Startup (RunMRU)<br/><b>Description</b>: Création d’une entrée RunMRU pour la persistance. »] class step_persistence action step_phishing –>|mène à| step_mshta step_mshta –>|exécute| step_hta_deobfuscation step_hta_deobfuscation –>|utilise| step_ps_encoded step_ps_encoded –>|génère| step_stage1 step_stage1 –>|télécharge| step_stage2 step_stage2 –>|télécharge| step_stage3 step_stage3 –>|crée| step_process_injection step_mshta –>|établit| step_persistence
Flux du Attaque
Détections
Entrée RunMRU suspecte avec sémantiques LOLBin (via registry_event)
Voir
Chaînes PowerShell suspectes (via powershell)
Voir
Appeler des méthodes .NET suspectes depuis PowerShell (via powershell)
Voir
IOCs (HashSha256) pour détecter : campagne de phishing ClickFix se faisant passer pour un installateur de Claude
Voir
Détecter le script PowerShell obscurci et l’injection de processus via .NET [Windows PowerShell]
Voir
Exécution de simulation
Prérequis : Le contrôle télémetrie et base doit avoir réussi.
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 la télémetrie exacte attendue par la logique de détection.
-
Narratif de l’attaque et Commandes :
- Objectif : Exécuter une charge utile PowerShell malveillante qui est à la fois encodée en base-64 et intégrée avec des appels d’assemblage .NET pour effectuer une injection de processus, imitant une attaque de type ‘vivre de la terre’.
- Étapes :
- Créer un petit assemblage .NET (C#) qui appelle
OpenProcessandWriteProcessMemory(simulé via PowerShell)[System.Runtime.InteropServices.Marshal]). - Encoder le script PowerShell contenant
Invoke-Expression,FromBase64String, et une référence àSystem.Management.Automation.AmsiUtils(utilisé pour contourner AMSI). - Ajouter un marqueur fictif
0x41414141pour émuler le « padding » souvent vu dans l’obscurcissement. - Lancer le script en utilisant
powershell.exeavec la ligne de commande complète visible (pour que la règle de détection puisse voir les chaînes).
- Créer un petit assemblage .NET (C#) qui appelle
-
Script de test de régression :
# ==============================================================n# Exécution de PowerShell malveillant simulée pour déclencher la règle Sigman# ==============================================================n# 1. Construire une charge utile .NET simple (en ligne, à des fins de démonstration)n$cs = @'nusing System;nusing System.Runtime.InteropServices;npublic class Injector {n [DllImport("kernel32.dll", SetLastError = true)]n public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);n [DllImport("kernel32.dll", SetLastError = true)]n public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, int nSize, out IntPtr lpNumberOfBytesWritten);n}n'@nAdd-Type -TypeDefinition $cs -Language CSharpnn# 2. Élaborer le snippet PowerShell malveillantn$malicious = @'n$b64 = "aW1wb3J0IHN5c3RlbS5JTy5TY3JpcHQgJ1Rlc3QnLCBJVkU="n$decoded = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($b64))nInvoke-Expression $decodedn$dummy = 0x41414141n'@nn# 3. Encoder le snippet (Base64, UTF-16LE comme PowerShell s'y attend)n$bytes = [System.Text.Encoding]::Unicode.GetBytes($malicious)n$encoded = [Convert]::ToBase64String($bytes)nn# 4. Lancer PowerShell avec la commande encodéen$cmd = "powershell.exe -NoProfile -WindowStyle Hidden -EncodedCommand $encoded"nWrite-Host "Lancement de PowerShell malveillant..."nStart-Process -FilePath "powershell.exe" -ArgumentList "-NoProfile -EncodedCommand $encoded" -WindowStyle Hiddennn# Note: La ligne de commande ci-dessus contiendra les chaînes :n# Invoke-Expression, FromBase64String, System.Management.Automation.AmsiUtils, 0x41414141n# qui satisfont à la condition de détection Sigma. -
Commandes de nettoyage :
# Terminer tout processus PowerShell lancé par le testnGet-Process -Name powershell | Where-Object {$_.StartInfo.Arguments -match "EncodedCommand"} | Stop-Process -Forcenn# Supprimer tout module ou variable temporaire (s'ils ont été persistés)nRemove-Variable -Name b64, decoded, dummy -ErrorAction SilentlyContinue
Fin du Rapport