SOC Prime Bias: Critique

15 May 2026 13:51 UTC

FrostyNeighbor : Nouveaux Méfaits et Menaces Numériques

Author Photo
SOC Prime Team linkedin icon Suivre
FrostyNeighbor : Nouveaux Méfaits et Menaces Numériques
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

ESET rapporte que le groupe APT FrostyNeighbor, également suivi sous le nom de Ghostwriter, a repris ses attaques contre les organisations gouvernementales ukrainiennes en utilisant des PDF de spear-phishing qui transmettent un téléchargeur basé sur JavaScript connu sous le nom de PicassoLoader, lequel déploie finalement un beacon Cobalt Strike. La campagne repose sur une validation géographique, une persistance par tâche planifiée et plusieurs techniques de dépôt de fichiers pour réduire la visibilité et échapper à la détection. Son infrastructure est positionnée derrière Cloudflare et utilise plusieurs needbinding.icu domaines.

Enquête

Les chercheurs ont reconstitué la chaîne d’attaque complète, en commençant par l’appât PDF malveillant, en passant par le dropper JavaScript et le téléchargeur PicassoLoader, et se terminant par la livraison de la charge Cobalt Strike. Ils ont extrait des indicateurs incluant des noms de fichiers, des modifications de registre et des URL de commande et de contrôle, puis les ont reliés à des techniques connues de FrostyNeighbor. Le rapport met également en lumière l’exploitation de CVE-2023-38831 dans WinRAR et CVE-2024-42009 dans Roundcube.

Atténuation

Les organisations doivent bloquer les types de pièces jointes suspects, appliquer des contrôles stricts sur l’exécution de macros et de scripts, surveiller les tâches planifiées créées par des binaires inconnus et restreindre le trafic HTTPS sortant vers des domaines malveillants connus. Les vulnérabilités référencées doivent être corrigées rapidement et des restrictions de moindre privilège doivent être appliquées à l'utilisation de rundll32.exe .

Réponse

Si des indicateurs liés sont détectés, isolez immédiatement le système affecté, collectez des artefacts de forensic et recherchez à la fois le beacon Cobalt Strike et les composants PicassoLoader. Réinitialisez les informations d’identification exposées et examinez les tâches planifiées et les entrées de clé Run pour des signes de persistance.

"graph TB %% Class definitions classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef file fill:#c2f0c2 classDef tool fill:#cccccc classDef malware fill:#ff9999 %% Nodes – Actions attack_initial_access["<b>Action</b> – <b>T1566.001 Phishing: Spearphishing Attachment</b><br/>Malicious PDF email with link to a RAR archive."] class attack_initial_access action action_user_execution["<b>Action</b> – <b>T1204.002 User Execution</b><br/>Victim opens the PDF which runs a JavaScript dropper."] class action_user_execution action %% Nodes – Files file_malicious_pdf["<b>File</b> – <b>Name</b>: malicious.pdf<br/>Contains JavaScript dropper."] class file_malicious_pdf file file_rar["<b>File</b> – <b>Name</b>: payload.rar<br/>Delivered via link in the PDF."] class file_rar file file_scheduled_xml["<b>File</b> – <b>Name</b>: scheduled_task.xml<br/>XML used to register a scheduled task."] class file_scheduled_xml file file_reg["<b>File</b> – <b>Name</b>: persistence.reg<br/>Registry file that creates a Run key.""" class file_reg file file_lnk["<b>File</b> – <b>Name</b>: launcher.lnk<br/>Shortcut placed in Startup folder.""" class file_lnk file %% Nodes – Malware / Tools malware_javascript_dropper["<b>Malware</b> – <b>Name</b>: JavaScript Dropper<br/>Executes base64u2011encoded scripts and embeds secondu2011stage payloads."] class malware_javascript_dropper malware tool_picasso_loader["<b>Tool</b> – <b>Name</b>: PicassoLoader<br/>Collects system info, process list and victim identity data."] class tool_picasso_loader tool malware_cobalt_strike["<b>Malware</b> – <b>Name</b>: Cobalt Strike Beacon<br/>Provides remote control capabilities.""" class malware_cobalt_strike malware %% Nodes – Techniques technique_obfuscation["<b>Technique</b> – <b>T1027 Obfuscated Files or Information</b><br/>Payloads are base64u2011encoded to avoid detection."] class technique_obfuscation technique technique_embedded_payload["<b>Technique</b> – <b>T1027.009 Embedded Payloads</b><br/>Downloader and beacon are hidden inside the JavaScript."] class technique_embedded_payload technique technique_gather_identity["<b>Technique</b> – <b>T1589 Gather Victim Identity Information</b><br/>Collects username, computer name, OS version and boot time."] class technique_gather_identity technique technique_system_info["<b>Technique</b> – <b>T1082 System Information Discovery</b><br/>Harvests detailed system specifications."] class technique_system_info technique technique_process_discovery["<b>Technique</b> – <b>T1057 Process Discovery</b><br/>Enumerates running processes on the host."] class technique_process_discovery technique technique_c2_https["<b>Technique</b> – <b>T1071.001 Application Layer Protocol: Web Protocols</b><br/>Communicates with C2 over HTTPS POST.""" class technique_c2_https technique technique_scheduled_task["<b>Technique</b> – <b>T1053.005 Scheduled Task/Job</b><br/>Creates a scheduledu2011task XML for persistence.""" class technique_scheduled_task technique technique_run_key["<b>Technique</b> – <b>T1060 Registry Run Keys / Startup Folder</b><br/>Adds a Run key pointing to a malicious LNK.""" class technique_run_key technique technique_exfiltration["<b>Technique</b> – <b>T1041 Exfiltration Over C2 Channel</b><br/>Sends collected data over the same HTTPS channel.""" class technique_exfiltration technique %% Connections – Attack Flow attack_initial_access –>|delivers| file_malicious_pdf file_malicious_pdf –>|opened_by| action_user_execution action_user_execution –>|executes| malware_javascript_dropper malware_javascript_dropper –>|uses| technique_obfuscation malware_javascript_dropper –>|contains| technique_embedded_payload technique_embedded_payload –>|drops| tool_picasso_loader tool_picasso_loader –>|gathers| technique_system_info tool_picasso_loader –>|gathers| technique_process_discovery tool_picasso_loader –>|collects| technique_gather_identity tool_picasso_loader –>|contacts| technique_c2_https technique_c2_https –>|delivers| malware_cobalt_strike malware_cobalt_strike –>|establishes| technique_scheduled_task technique_scheduled_task –>|creates| file_scheduled_xml malware_cobalt_strike –>|establishes| technique_run_key technique_run_key –>|creates| file_reg file_reg –>|adds| file_lnk technique_c2_https –>|exfiltrates via| technique_exfiltration "

Flux d’Attaque

Exécution de la Simulation

Prérequis : Le contrôle préalable de Télémétrie & Base doit avoir réussi.

Raisonnement : Cette section détaille l’exécution précise de la technique adverse (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTPs identifiés et visent à générer la télémétrie exacte attendue par la logique de détection.

  • Narratif d’Attaque & Commandes :

    L’adversaire a obtenu une tête de pont sur l’hôte victime et souhaite déployer un beacon Cobalt Strike tout en restant sous le radar. Ils :

    1. Copient l'utilisation de rundll32.exe vers un emplacement non-standard (C:ProgramDataTemprundll32.exe) pour éviter les alertes de liste blanche simples.
    2. Déposez la DLL malveillante (ViberPC.dll) dans %ProgramData%. Cette DLL contient la charge Cobalt Strike amorcée.
    3. Exécutez le l'utilisation de rundll32.exe copié avec une ligne de commande qui charge la DLL malveillante (%ProgramData%ViberPC.dll).
    4. Déposez deux fichiers JavaScript (53_7.03.2026_R.js and Update.js) qui contiennent JScript qui contacte le serveur C2 et finalise l’installation du beacon.
    5. Exécutez les fichiers JavaScript en utilisant cscript.exe, provoquant la création de processus dont l'Image se termine par .js et dont la ligne de commande contient les noms de fichiers exacts.

    Ces étapes génèrent les événements de création de processus Sysmon exacts correspondants à sélection1, sélection2et sélection3 dans la règle Sigma.

  • Script de Test de Régression :

    # Simulation de Déploiement de Cobalt Strike par FrostyNeighbor
    # -------------------------------------------------
    # 1. Préparer les chemins
    $tempDir = "$env:ProgramDataTemp"
    $rundllCopy = Join-Path $tempDir "rundll32.exe"
    $malDll    = "$env:ProgramDataViberPC.dll"
    $js1       = "$env:ProgramData53_7.03.2026_R.js"
    $js2       = "$env:ProgramDataUpdate.js"
    
    # 2. S'assurer que le répertoire temporaire existe
    New-Item -Path $tempDir -ItemType Directory -Force | Out-Null
    
    # 3. Copier rundll32.exe vers un emplacement non-standard
    Copy-Item -Path "$env:SystemRootSystem32rundll32.exe" -Destination $rundllCopy -Force
    
    # 4. Créer une DLL malveillante fictive (dans une attaque réelle, ce serait la charge utile)
    $dummyDll = [IO.File]::ReadAllBytes("$env:SystemRootSystem32driversetchosts") # binaire fictif
    [IO.File]::WriteAllBytes($malDll, $dummyDll)
    
    # 5. Exécuter la copie de rundll32 avec la DLL malveillante
    Start-Process -FilePath $rundllCopy -ArgumentList "`"$malDll`"" -WindowStyle Hidden
    
    # 6. Déposer les charges utiles JavaScript
    $jsContent = @"
    // Simple JScript qui contacte un point de terminaison C2 (simulé)
    var xhr = new ActiveXObject("MSXML2.XMLHTTP");
    xhr.open("GET", "http://127.0.0.1:8080/beacon", false);
    xhr.send();
    "@
    
    Set-Content -Path $js1 -Value $jsContent -Encoding ASCII
    Set-Content -Path $js2 -Value $jsContent -Encoding ASCII
    
    # 7. Exécuter les fichiers JavaScript via cscript (cela crée des processus avec image .js)
    Start-Process -FilePath "cscript.exe" -ArgumentList "//NoLogo `"$js1`"" -WindowStyle Hidden
    Start-Process -FilePath "cscript.exe" -ArgumentList "//NoLogo `"$js2`"" -WindowStyle Hidden
    
    # 8. Pause pour permettre l'ingestion par le SIEM
    Start-Sleep -Seconds 15
  • Commandes de Nettoyage :

    # Nettoyer après simulation
    $paths = @(
        "$env:ProgramDataViberPC.dll",
        "$env:ProgramData53_7.03.2026_R.js",
        "$env:ProgramDataUpdate.js",
        "$env:ProgramDataTemprundll32.exe"
    )
    foreach ($p in $paths) {
        if (Test-Path $p) { Remove-Item -Path $p -Force }
    }
    # Optionnellement, arrêtez tous les processus cscript restants démarrés par le test
    Get-Process -Name cscript -ErrorAction SilentlyContinue | Stop-Process -Force