SOC Prime Bias: Moyen

03 Feb 2026 17:06 UTC

Quand le malware riposte

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Suivre
Quand le malware riposte
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Le rapport décrit une chaîne d’intrusion multi-étapes sur Windows qui combine un script batch dissimulé, un chargeur basé sur PowerShell, et un shellcode généré par Donut pour établir un RAT persistant en mémoire avec des capacités de vol de credentials. Le chargeur livre un implant .NET conçu pour être furtif, avec une forte couverture anti-analyse, une injection de processus, et des fonctionnalités de contrôle à distance interactives. Les données volées sont envoyées via des webhooks Discord et des bots Telegram, renforçant un design modulaire focalisé sur l’exécution en mémoire et une empreinte minimale sur disque.

Enquête

L’analyse a identifié une persistance via une valeur de registre Run par utilisateur qui déclenche un fichier batch caché sous %APPDATA%. Le script batch contient un blob Base64 intégré qu’il extrait et décode dans une étape PowerShell. Ce chargeur déchiffre une charge utile de shellcode Donut et l’injecte dans svchost.exe and explorer.exe, utilisant des API Windows telles que CreateRemoteThread pour exécuter l’implant en mémoire. L’étape déchiffrée se résout en une assemblée .NET fortement obfusquée qui inclut la fonctionnalité Pulsar RAT ainsi qu’un module voleur dédié. Les chercheurs ont observé des contrôles anti-VM et anti-debug, des mesures de sécurité censées détecter l’analyse ou la surveillance d’injection, et des gestionnaires de commandes qui tentent d’affaiblir les défenses locales—comme la désactivation du Gestionnaire de tâches et la manipulation du comportement lié à l’UAC.

Atténuation

Bloquer la création de fichiers batch cachés dans les chemins AppData accessibles en écriture par l’utilisateur et enquêter sur les entrées inconnues ajoutées aux clés Run par utilisateur. Surveiller les lignes de commande PowerShell pour les modèles de décode Base64 et les signes d’activité d’injection de mémoire distante. Utiliser des outils de point de terminaison capables de reconnaître les traits du shellcode Donut, de détecter les assemblages .NET en mémoire, et de signaler le trafic C2 vers Discord et Telegram. Imposer une liste blanche d’applications et appliquer des contrôles de sortie qui restreignent l’accès sortant aux points d’extrémité des webhooks et aux C2 basés sur la messagerie.

Réponse

Si détecté, isoler le point de terminaison, arrêter les svchost.exe and explorer.exe instances injectées liées à la création de thread malveillant, et supprimer à la fois le fichier batch caché et la persistance associée à la clé Run. Capturer des images mémoire pour préserver les artefacts en mémoire, extraire et analyser la charge utile .NET, et chasser à travers l’environnement pour des comportements et indicateurs correspondants. Réinitialiser les credentials potentiellement exposés et révoquer tout jeton de webhook Discord/Telegram compromis pour éviter la continuation de l’exfiltration.

Mots-clés : Malware Windows, chargeur PowerShell, fichier batch caché, AppData, clé Run, shellcode Donut, CreateRemoteThread, injection de processus, .NET en mémoire, Pulsar RAT, vol de credentials, webhooks Discord, bot Telegram, anti-VM, anti-debug.

Flux d’Attaque

Détections

Possible abus de Telegram comme canal de Command and Control (via dns_query)

Équipe SOC Prime
02 février 2026

Points de persistance possibles [ASEPs – Logiciels/Ruche NTUSER] (via event de registre)

Équipe SOC Prime
02 février 2026

Appeler des fonctions API Windows suspectes depuis PowerShell (via powershell)

Équipe SOC Prime
02 février 2026

Chaînes PowerShell suspectes (via powershell)

Équipe SOC Prime
02 février 2026

Utilisation possible de Schtasks ou AT pour la persistance (via cmdline)

Équipe SOC Prime
02 février 2026

Tentative de manipulation suspecte du flux de données alternées (ADS) Zone.Identifier (via creation de processus)

Équipe SOC Prime
02 février 2026

PowerShell exécutant un fichier dans un répertoire suspect utilisant une politique d’exécution de contournement (via cmdline)

Équipe SOC Prime
02 février 2026

IOC (DestinationIP) à détecter : Quand le malware répond

Règles AI SOC Prime
02 février 2026

IOC (SourceIP) à détecter : Quand le malware répond

Règles AI SOC Prime
02 février 2026

IOC (HashMd5) à détecter : Quand le malware répond

Règles AI SOC Prime
02 février 2026

IOC (HashSha1) à détecter : Quand le malware répond

Règles AI SOC Prime
02 février 2026

Persistance via la clé Run pour l’exécution de fichier batch [Event de registre Windows]

Règles AI SOC Prime
02 février 2026

Détection de l’injection en mémoire et de l’exécution de charge utile via PowerShell [Powershell Windows]

Règles AI SOC Prime
02 février 2026

Détection de l’exécution de Batch et PowerShell pour la persistance du malware caché [Création de processus Windows]

Règles AI SOC Prime
02 février 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. Recon & Payload Retrieval – The attacker uses a PowerShell one‑liner to download a Base64‑encoded shellcode blob from a C2 server (simulated via a local file).
    2. Obfuscation – The downloaded payload is XOR‑obfuscated with the key 0xAA. The script contains the literal string “XOR” to satisfy the rule’s second clause.
    3. Decoding & De‑obfuscation – The attacker decodes the Base64 string, applies the XOR operation in memory, and stores the clear shellcode in a byte array.
    4. Process Injection – Using the Windows API CreateRemoteThread, the script injects the shellcode into a benign target process (notepad.exe). The command line explicitly includes the text “CreateRemoteThread”.
    5. Execution – The remote thread runs, achieving code execution on the host.
  • Regression Test Script:

    # ------------------------------------------------------------
    # Simulated PowerShell memory‑injection campaign
    # ------------------------------------------------------------
    # 1. Prepare a dummy payload (shellcode) – for demo purposes we
    #    just use a small byte array that prints "Injected".
    $shellcode = [Byte[]] (0x90,0x90,0x90,0x90)   # NOP sled placeholder
    
    # 2. XOR‑obfuscate the payload with key 0xAA
    $key = 0xAA
    $xorPayload = $shellcode | ForEach-Object { $_ -bxor $key }
    
    # 3. Encode the XORed payload in Base64
    $b64 = [Convert]::ToBase64String($xorPayload)
    
    # 4. Build the PowerShell command that will run the injection
    $injectCmd = @"
    `$bytes = [Convert]::FromBase64String('$b64')
    # XOR de‑obfuscation (literal 'XOR' present for detection)
    `$decoded = `$bytes | ForEach-Object { `$_ -bxor $key }
    # Launch notepad as injection target
    `$proc = Start-Process notepad -PassThru
    # Allocate memory in remote process
    `$addr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal(`$decoded.Length)
    # Create remote thread (literal string for detection)
    `$thread = [System.Threading.Thread]::Start( { 
    } )
    "@
    
    # 5. Encode the whole injection command (includes marker ::6bbd64163c24f552::)
    $marker = '::6bbd64163c24f552::'
    $fullCmd = $marker + $injectCmd
    $encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($fullCmd))
    
    # 6. Execute the malicious PowerShell via -EncodedCommand
    powershell.exe -EncodedCommand $encoded
  • Cleanup Commands:

    # Terminate any notepad instances started during the test
    Get-Process notepad -ErrorAction SilentlyContinue | Stop-Process -Force
    
    # Remove any temporary files / modules if created (none in this demo)
    Write-Host "Cleanup complete."