SOC Prime Bias: Critique

30 Jan 2026 19:58

Les attaques APT ciblent le gouvernement indien avec SHEETCREEP, FIREPOWER et MAILCREEP | Partie 2

Author Photo
Ruslan Mikhalov Chef de la Recherche sur les Menaces chez SOC Prime linkedin icon Suivre
Les attaques APT ciblent le gouvernement indien avec SHEETCREEP, FIREPOWER et MAILCREEP | Partie 2
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Le rapport couvre l’opération Sheet Attack, qui a déployé trois portes dérobées sur mesure—SHEETCREEP, FIREPOWER, et MAILCREEP—pour compromettre des organisations gouvernementales indiennes. Les implants ont utilisé des plateformes cloud légitimes pour le commandement et le contrôle, y compris Google Sheets, Firebase Realtime Database, et l’API Microsoft Graph, permettant à l’activité de se fondre dans le trafic SaaS normal. L’analyse note aussi des artefacts conformes à l’utilisation par les développeurs d’une IA générative pour assister la production de code. La campagne est évaluée comme probablement liée à un sous-groupe basé au Pakistan de l’APT36.

Enquête

ThreatLabz a mené des analyses dynamiques et statiques des portes dérobées, documentant les méthodes de persistance, les flux de travail C2, et le comportement d’exfiltration de données. L’équipe a aussi cartographié l’infrastructure de soutien, observé le filtrage basé sur la géographie et les User-Agent, et capturé des indicateurs au niveau du code suggérant une génération de source assistée par l’IA.

Atténuation

Implémentez des détections en couches pour les chaînes de livraison PDF/LNK suspectes, et surveillez les tâches planifiées qui lancent l’exécution de PowerShell ou VBS. Appliquez des contrôles stricts de sortie et une surveillance des anomalies pour les services cloud couramment abusés comme C2, y compris Google Sheets, Firebase, et Microsoft Graph. Utilisez le blocage basé sur le hachage pour les charges utiles connues et bloquez les domaines et adresses IP malveillants identifiés.

Réponse

Lorsqu’elle est détectée, isolez le point de terminaison, terminez l’activité cachée cmd.exe et PowerShell, supprimez les tâches planifiées associées, et supprimez les binaires de porte dérobée. Préservez et examinez les journaux C2 basés sur Google Sheets et les artefacts Firebase, puis recherchez dans l’environnement des hôtes supplémentaires présentant les mêmes indicateurs.

graph TB %% Class definitions classDef action fill:#99ccff classDef process fill:#ffdd99 classDef file fill:#ffcccc classDef data fill:#e6e6ff classDef protocol fill:#d9ead3 classDef technique fill:#ffd966 %% Nodes – Initial Access action_phishing[« <b>Action</b> – <b>T1204.001 Exécution par l’utilisateur : Lien malveillant</b><br/>La victime clique sur un lien malveillant dans un PDF »] class action_phishing action file_phishing_pdf[« <b>Fichier</b> – <b>Nom</b> : PDF de phishing<br/><b>Technique</b> : T1204.001 »] class file_phishing_pdf file file_malicious_lnk[« <b>Fichier</b> – <b>Nom</b> : LNK malveillant<br/><b>Technique</b> : T1204.002 Exécution par l’utilisateur : Fichier malveillant »] class file_malicious_lnk file process_powershell[« <b>Processus</b> – <b>Nom</b> : PowerShell<br/><b>Technique</b> : T1059.001 Interpréteur de commandes et scripts »] class process_powershell process file_dotnet_assembly[« <b>Fichier</b> – <b>Nom</b> : Assembly .NET déguisée en PNG<br/><b>Techniques</b> : T1620 Chargement de code réflexif, T1036.008 Déguisement du type de fichier »] class file_dotnet_assembly file process_hidden_cmd[« <b>Processus</b> – <b>Nom</b> : cmd.exe caché<br/><b>Technique</b> : T1059.003 Shell de commandes »] class process_hidden_cmd process %% Nodes – Persistence action_persistence[« <b>Action</b> – Mise en place de la persistance »] class action_persistence action task_scheduled[« <b>Technique</b> – T1053 Tâche planifiée »] class task_scheduled technique script_gservices[« <b>Fichier</b> – <b>Nom</b> : GServices.vbs<br/><b>Objectif</b> : Exécution répétée »] class script_gservices file %% Nodes – Command and Control action_c2[« <b>Action</b> – Commandement et contrôle »] class action_c2 action data_google_sheets[« <b>Stockage de données</b> – Google Sheets<br/><b>Technique</b> : T1102.002 Service Web : Feuille de calcul »] class data_google_sheets data protocol_https[« <b>Protocole</b> – HTTPS<br/><b>Technique</b> : T1071.001 Protocoles Web »] class protocol_https protocol technique_dead_drop[« <b>Technique</b> – T1102.001 Dead Drop Resolver »] class technique_dead_drop technique backup_firebase[« <b>Stockage de données</b> – URL Firebase<br/><b>Secours</b> : Canal C2 »] class backup_firebase data backup_gcs[« <b>Stockage de données</b> – Google Cloud Storage<br/><b>Secours</b> : Canal C2 »] class backup_gcs data encryption_tripledes[« <b>Technique</b> – T1027 Fichier ou information chiffré/obfusqué (TripleDES) »] class encryption_tripledes technique encryption_channel[« <b>Technique</b> – T1573 Canal chiffré »] class encryption_channel technique %% Nodes – Discovery action_discovery[« <b>Action</b> – Découverte »] class action_discovery action command_whoami[« <b>Commande</b> – whoami<br/><b>Technique</b> : T1033 Découverte de l’utilisateur système »] class command_whoami technique command_enum_domains[« <b>Commande</b> – Énumérer les comptes de domaine<br/><b>Technique</b> : T1087.002 Compte de domaine »] class command_enum_domains technique %% Nodes – Execution of Commands action_execution[« <b>Action</b> – Exécuter les commandes reçues »] class action_execution action %% Nodes – Cloud Account Creation cloud_account_creation[« <b>Action</b> – Créer un compte Google Cloud<br/><b>Technique</b> : T1136.003 Compte Cloud »] class cloud_account_creation action %% Nodes – Defense Evasion action_defense_evasion[« <b>Action</b> – Évasion des défenses »] class action_defense_evasion action technique_hidden_fs[« <b>Technique</b> – T1564.005 Fichiers et répertoires cachés »] class technique_hidden_fs technique %% Connections – Flow action_phishing –>|fournit| file_phishing_pdf file_phishing_pdf –>|contient un lien vers| file_malicious_lnk file_malicious_lnk –>|exécute| process_powershell process_powershell –>|charge par réflexion| file_dotnet_assembly file_dotnet_assembly –>|démarre| process_hidden_cmd process_hidden_cmd –>|permet| action_persistence action_persistence –>|crée| task_scheduled action_persistence –>|exécute| script_gservices action_persistence –>|communique avec| action_c2 action_c2 –>|utilise| data_google_sheets data_google_sheets –>|via| protocol_https action_c2 –>|emploie| technique_dead_drop action_c2 –>|secours vers| backup_firebase action_c2 –>|secours vers| backup_gcs action_c2 –>|chiffre le trafic via| encryption_tripledes action_c2 –>|établit| encryption_channel action_c2 –>|déclenche| action_discovery action_discovery –>|exécute| command_whoami action_discovery –>|exécute| command_enum_domains action_c2 –>|reçoit des commandes pour| action_execution action_execution –>|exécute via PowerShell| process_powershell action_execution –>|exécute via cmd caché| process_hidden_cmd action_c2 –>|nécessite| cloud_account_creation cloud_account_creation –>|fournit l’infrastructure pour| data_google_sheets cloud_account_creation –>|fournit l’infrastructure pour| backup_firebase cloud_account_creation –>|fournit l’infrastructure pour| backup_gcs action_execution –>|utilise| action_defense_evasion action_defense_evasion –>|applique| technique_hidden_fs

Flux d’Attaque

Détections

Téléchargement ou Téléversement via Powershell (via ligne de commande)

Équipe SOC Prime
29 Jan 2026

Domaine de l’API Microsoft Graph Résolu par Un Processus Inhabituel (via requête DNS)

Équipe SOC Prime
29 Jan 2026

Fichiers Suspects dans le Profil Utilisateur Public (via événement de fichier)

Équipe SOC Prime
29 Jan 2026

Tentative d’Exécution Suspecte de GNU Wget (via ligne de commande)

Équipe SOC Prime
29 Jan 2026

Appel de Méthodes .NET Suspectes depuis Powershell (via powershell)

Équipe SOC Prime
29 Jan 2026

Exécution Suspecte depuis le Profil Utilisateur Public (via création de processus)

Équipe SOC Prime
29 Jan 2026

Possible Infiltration / Exfiltration de Données / C2 via Services / Outils de Tierce Partie (via dns)

Équipe SOC Prime
29 Jan 2026

Fichiers Extraits Suspects d’une Archive (via événement de fichier)

Équipe SOC Prime
29 Jan 2026

IOC (SourceIP) pour détecter : Attaques APT Visant le Gouvernement Indien Utilisant SHEETCREEP, FIREPOWER, et MAILCREEP | Partie 2

Règles d’IA SOC Prime
29 Jan 2026

IOC (HashMd5) pour détecter : Attaques APT Visant le Gouvernement Indien Utilisant SHEETCREEP, FIREPOWER, et MAILCREEP | Partie 2

Règles d’IA SOC Prime
29 Jan 2026

IOC (DestinationIP) pour détecter : Attaques APT Visant le Gouvernement Indien Utilisant SHEETCREEP, FIREPOWER, et MAILCREEP | Partie 2

Règles d’IA SOC Prime
29 Jan 2026

IOC (HashSha1) pour détecter : Attaques APT Visant le Gouvernement Indien Utilisant SHEETCREEP, FIREPOWER, et MAILCREEP | Partie 2

Règles d’IA SOC Prime
29 Jan 2026

IOC (HashSha256) pour détecter : Attaques APT Visant le Gouvernement Indien Utilisant SHEETCREEP, FIREPOWER, et MAILCREEP | Partie 2

Règles d’IA SOC Prime
29 Jan 2026

Détection des Commandes PowerShell pour le Déploiement des Portes Dérobées SHEETCREEP et FIREPOWER [Windows Powershell]

Règles d’IA SOC Prime
29 Jan 2026

Détection de la Communication C2 des Portes Dérobées SHEETCREEP et FIREPOWER [Connexion Réseau Windows]

Règles d’IA SOC Prime
29 Jan 2026

Simulation Execution

Prerequisite: The Telemetry & Baseline Pre‑flight Check must have passed.

Rationale: This section details the precise execution of the adversary technique (TTP) designed to trigger the detection rule. The commands and narrative MUST directly reflect the TTPs identified and aim to generate the exact telemetry expected by the detection logic. Abstract or unrelated examples will lead to misdiagnosis.

  • Attack Narrative & Commands:

    1. Stage the malicious PNG:
      • The attacker creates a PNG file (details.png) that actually contains a compiled .NET assembly byte stream, but with its bytes reversed to evade static analysis.
    2. Launch PowerShell in hidden mode to load the assembly:
      • The attacker runs PowerShell with -WindowStyle Hidden -Command and a one‑liner that reads the reversed bytes, restores the correct order, loads the assembly via [System.Reflection.Assembly]::Load(), and invokes a known entry point (Task10.Program::MB()).
    3. Alternative LNK‑based fire‑power deployment:
      • A crafted .lnk shortcut executes powershell.exe with --headless -e (encoded script) to fetch and run a remote PowerShell backdoor.

    These steps exactly match the strings the Sigma rule is looking for, ensuring the alert fires.

  • Regression Test Script:

    # -------------------------------------------------
    # SHEETCREEP payload simulation – reproduces the exact command line
    # -------------------------------------------------
    
    # 1. Create a dummy .NET assembly (simple C# hello world) and compile it
    $source = @"
    using System;
    public class Task10 {
        public static void MB() {
            Console.WriteLine("Payload executed");
        }
    }
    "@
    $tempDir = "$env:TEMPsheetcreep"
    New-Item -ItemType Directory -Force -Path $tempDir | Out-Null
    $csFile = Join-Path $tempDir "Task10.cs"
    $dllFile = Join-Path $tempDir "Task10.dll"
    $source | Set-Content -Path $csFile -Encoding UTF8
    
    # Compile using csc (assumes .NET Framework SDK installed)
    $cscPath = "$env:WINDIRMicrosoft.NETFramework64v4.0.30319csc.exe"
    & $cscPath /target:library /out:$dllFile $csFile
    
    # 2. Read the DLL bytes, reverse them, and write to a .png file
    $bytes = [IO.File]::ReadAllBytes($dllFile)
    $revBytes = $bytes[($bytes.Length-1)..0]
    $pngPath = Join-Path $tempDir "details.png"
    [IO.File]::WriteAllBytes($pngPath, $revBytes)
    
    # 3. Execute the exact malicious PowerShell command line (this will fire the rule)
    $maliciousCmd = '-WindowStyle Hidden -Command "$b=[IO.File]::ReadAllBytes(''details.png'');' +
                    '([System.Reflection.Assembly]::Load([byte[]]($b[($b.Length-1)..0])).GetType("Task10.Program")::MB())"'
    
    Start-Process -FilePath "$env:SystemRootSystem32WindowsPowerShellv1.0powershell.exe" `
                  -ArgumentList $maliciousCmd `
                  -WindowStyle Hidden `
                  -NoNewWindow
    
    # Cleanup (optional, run after verification)
    # Remove-Item -Recurse -Force $tempDir
  • Cleanup Commands:

    # Remove temporary files and directories created for the test
    $tempDir = "$env:TEMPsheetcreep"
    if (Test-Path $tempDir) {
        Remove-Item -Recurse -Force $tempDir
    }