Gestion des Identités (Entra ID)

Décoder PowerShell Base64 dans Defender for Endpoint — Akuity SOC

5 min de lecture Akuity SOC · Delphisoft Deutschland

Décodez les commandes PowerShell Base64 UTF-16LE directement dans Advanced Hunting (KQL). Stoppez les fuites CyberChef et isolez l'hôte en un clic.

Copier une ligne de commande PowerShell obfusquée depuis Defender for Endpoint pour la coller dans CyberChef ou un décodeur en ligne gratuit constitue un vecteur critique de fuite de données. Cette pratique courante expose directement des jetons de session Microsoft Entra ID, des clés d'API et des scripts internes à des tiers non maîtrisés, tout en gaspillant entre 12 et 15 minutes précieuses par alerte. Pendant que l'analyste manipule du texte, l'attaquant finalise son mouvement latéral en mémoire vive.

Anatomie de l'évasion : UTF-16LE et exécution volatile en RAM

L'utilisation du commutateur -EncodedCommand (ou ses déclinaisons courtes -e, -enc) sous la technique MITRE T1059.001 n'est pas un chiffrement cryptographique, mais un simple mécanisme d'évasion. PowerShell exige nativement un flux d'octets encodé en UTF-16LE (Unicode Little Endian). Chaque caractère ASCII y est suivi d'un octet nul (0x00). Cette spécificité rend la chaîne invisible aux règles de détection statiques basées sur des expressions régulières ASCII standard au niveau de la ligne de commande brute.

Une fois décodé par l'interpréteur, le payload s'exécute directement dans la mémoire du processus sans jamais toucher le disque sous forme de fichier script (.ps1). L'adversaire invoque des primitives telles que [System.Reflection.Assembly]::Load() ou télécharge un binaire réflexif contournant AMSI. La télémétrie native de Defender for Endpoint enregistre bien cette exécution dans la table DeviceProcessEvents au sein du champ ProcessCommandLine, mais elle laisse la charge du décodage à l'analyste.

L'angle mort opérationnel dans Defender for Endpoint

Dans la console Microsoft Defender XDR par défaut, la fiche d'incident n'offre aucun décodage inline du buffer Base64. Ce manque impose une rupture de contexte continue : l'analyste ouvre une invite de commande locale ou une page web externe, manipule les chaînes de caractères et tente d'isoler l'URL de commande et contrôle (C2). Ce processus artisanal fait grimper le temps moyen de remédiation (MTTR) de 14 minutes en moyenne par ticket. Multiplié par 15 investigations quotidiennes, ce frottement cognitif entraîne une fatigue d'alerte sévère propice aux faux négatifs.

Détection chirurgicale : décodage UTF-16LE dans Advanced Hunting (KQL)

Il est possible de neutraliser ce risque en confiant le décodage et la normalisation directement au moteur de requête KQL, éliminant tout recours à un outil tiers :

DeviceProcessEvents
| where Timestamp > ago(24h)
| where FileName in~ ("powershell.exe", "pwsh.exe")
| where ProcessCommandLine matches regex @"(?i)-(?:e|enc|encodedcommand)\s+[A-Za-z0-9+/=]{20,}"
| extend RawB64 = extract(@"(?i)-(?:e|enc|encodedcommand)\s+['\"]?([A-Za-z0-9+/=]{20,})['\"]?", 1, ProcessCommandLine)
| where isnotempty(RawB64)
| extend DecodedPayload = replace_string(base64_decode_tostring(RawB64), "\0", "")
| where DecodedPayload has_any ("DownloadString", "Invoke-Expression", "IEX", "WebClient", "Assembly.Load", "BitConverter")
// Filtrage opérationnel des outils d'administration et agents légitimes
| where not(InitiatingProcessFileName in~ ("CcmExec.exe", "SenseCncProxy.exe"))
| where not(InitiatingProcessFolderPath has @"\Microsoft\IntuneManagementExtension\")
| project Timestamp, DeviceName, AccountName, DecodedPayload, InitiatingProcessFileName, ProcessCommandLine
| top 100 by Timestamp desc

Cette requête extrait la charge Base64, applique base64_decode_tostring() et purge chirurgicalement les octets nuls \0 propres à l'UTF-16LE. Le payload PowerShell apparaît instantanément en clair. Les faux positifs issus de Microsoft Intune et de Configuration Manager sont filtrés en amont pour isoler exclusivement les tentatives d'exécution interactive ou hostile.

Confinement en 1 clic avec l'orchestration SOAR Akuity SOC

Akuity SOC supprime définitivement la rupture de contexte. Dès l'ingestion de la télémétrie brute, l'assistant IA in-app désobfusque le buffer Base64 UTF-16LE en moins de 2 secondes au sein du Ticket Panel unifié, sans aucune fuite de données vers l'extérieur. Si la charge contient des primitives offensives confirmées, l'analyste déclenche la Server Action SOAR isolateDevice() en 1 clic.

L'hôte compromis est immédiatement consigné sur le réseau en moins d'une seconde pour stopper l'expansion latérale en mémoire vive, tout en maintenant actif le canal forensique Live Response de Defender for Endpoint. L'action exige impérativement une validation par défi MFA AAL2 et consigne une preuve immuable dans le journal d'audit certifié NIS 2 et SOC 2 Type II.

Automatisez votre réponse aux incidents Microsoft 365

Éliminez les manipulations manuelles et divisez votre MTTR par 10 dès aujourd'hui. Akuity SOC s'intègre nativement à votre tenant en moins de 10 minutes, sans aucun agent à déployer.

Démarrer l'essai gratuit de 14 jours (sans CB)

FAQ technique

Pourquoi base64_decode_tostring() affiche-t-il des caractères espacés dans KQL ?

PowerShell encode les commandes Base64 en UTF-16LE. Chaque caractère ASCII est représenté par deux octets, le second étant l'octet nul (0x00). La fonction KQL interprète le buffer en UTF-8 standard ; les octets nuls apparaissent alors sous forme d'espaces invisibles ou de caractères non imprimables. L'application de replace_string(..., "\0", "") supprime ces octets nuls et reconstitue la chaîne de caractères lisible.

L'isolation de l'hôte via Akuity SOC coupe-t-elle l'accès aux analystes SOC ?

Non. La Server Action isolateDevice() s'appuie sur les API natives de Defender for Endpoint. Elle interrompt l'ensemble du trafic réseau IP entrant et sortant de la machine, à l'exception stricte des communications chiffrées avec le cloud Microsoft Defender et de la session Live Response, permettant de poursuivre l'investigation forensique en direct.

Page Solution Associée

Gestion des Identités à Risque (Entra ID)

Bloquez les compromissions instantanément avec l'orchestration SOAR sans agent d'Akuity SOC.

Découvrir la solution complète