PowerShell : usages offensifs et opportunités défensives [2/3]

tl;dr — Dans le cadre de son activité de suivi et d’analyse des différents groupes modes opératoires adverses, SEKOIA observe des tendances claires quant aux outils et langages utilisés. PowerShell est privilégié dans la chaîne d’exécution d’attaque, comme langage « support ». Cette persévérance de l’utilisation du langage de scripting dans les différents schémas d’attaques crée de nombreuses opportunités pour les défenseurs.

Barbara Louis-Sidney
Cyber Threat Intelligence par OWN
5 min readSep 25, 2019

--

Pour relire la partie 1.

2ème partie : une technique qui en cache bien d’autres

Lors de la capitalisation et de la cartographie des différents modes opératoires adverses, MITRE ATT&CK nous offre la possibilité de sélectionner PowerShell comme technique à part entière (MITRE ATT&CK n°T1086).

Mais PowerShell s’étend en réalité sur l’ensemble de la grille, offrant aux attaquants l’opportunité d’exécuter par son intermédiaire de nombreuses autres techniques. PowerShell est utilisable sur toutes étapes de la chaîne d’exécution d’une attaque informatique, particulièrement avant la réalisation des “actions sur objectif”.

Delivery

Le schéma de “delivery” suivant est désormais récurrent : un script PowerShell est invoqué par une macro VBA contenue dans un document Microsoft Office, un fichier .iqy, ou appelée via un fichier .lnk. Il peut également être lancé depuis plusieurs répertoires tels que les registres, ou divers fichiers. PowerShell est largement sollicité à l’étape de livraison de code malveillant (stages 1, 2 et suivants, modules complémentaires). Prenons l’exemple de la plus récente campagne “AgentTesla” : afin de diffuser le malware, les attaquants envoient des emails contenant une archive .rar. Cette archive contient un script PowerShell dont la fonction est de télécharger et d’exécuter AgentTesla. Emotet utilise également PowerShell afin de récupérer les payloads et télécharger des modules et ressources additionnels.

Mentions de l’usage de PowerShell (données issues du wiki MITRE ATT&CK)

PowerShell sert ainsi de “launcher”, de point de départ de l’étape d’exécution de code malveillant, mettant en musique le code malveillant de l’attaquant avec différents outils nativement installés tels que certutil.exe, wscript.exe, le mécanisme de protection UAC (User Account Control) ou BITSAdmin tool (Background Intelligent Transfer Service).

Defense evasion, execution et installation

PowerShell offre également la possibilité d’échapper aux défenses traditionnelles. Le langage sera par exemple utilisé pour obfusquer ou désobfusquer des chaînes de caractères (base-64, obfuscation à multiples niveaux ou “nested”). Certains groupes d’attaquants, comme FIN7, maîtrisent l’art de l’obfuscation, au point d’inspirer l’outil de Daniel Bohannon, Invoke-Obfuscation. Ce dernier outil a d’ailleurs par la suite été utilisé par le groupe OceanLotus dans une opération ciblant des entités au Vietnam.

L’exécution en mémoire, ou “sans fichier”, est une technique privilégiée pour échapper aux défenses. Deep Panda avait par exemple pour mode opératoire, en 2014, de télécharger et exécuter directement en mémoire un exécutable .NET nommé Wafer, qui téléchargeait puis exécutait à son tour un RAT .NET nommé MadHatter. Tout se faisait en mémoire, évitant de laisser des artefacts sur le poste de la victime.

Il est également possible d’exécuter des scripts PowerShell sans appeler ou manipuler powershell.exe : en appelant PowerShdll.dll ; en utilisant PowerLessShell (permet cela en s’appuyant sur MSBuild.exe) ; en utilisant l’outil UnmanagedPowerShell (autorise le chargement du framework .NET puis l’exécution en mémoire de PowerShell, en l’injectant au processus de notre choix) ; ou encore en faisant appel à des frameworks ou quadriciels permettant de produire et d’utiliser du code malveillant PowerShell sans utiliser ou savoir utiliser PowerShell (Empire, PowerSploit).

Enfin, il est possible d’utiliser PowerShell pour désactiver ou ajuster la configuration de l’hôte compromis. L’un des scripts utilisés par le groupe à l’origine d’Olympic Destroyer désactivait la journalisation de scripts PowerShell afin de ne laisser aucune trace.

Pour réaliser avec succès ces opérations, notamment à distance, les attaquants ont besoin de droits élevés, ce qui impose une élévation de privilèges. Des outils tels que PowerUp permettent à l’étape de post-exploitation d’identifier rapidement les opportunités d’élévation de privilèges en local disponibles sur une machine compromise. PowerUp peut être exécuté directement en mémoire, sans toucher le disque dur de la cible. Le script PowerShell Invoke-WScriptBypassUAC permet pour sa part d’effectuer un bypass UAC par l’intermédiaire de wscript.exe.

Une fois les droits administrateurs obtenus, l’usage de PowerShell comme langage de post-exploitation prend tout son sens. Pleinement intégré au système, il permet lors de l’étape de reconnaissance interne ou “discovery”, d’accéder à des données critiques sur le poste compromis, telles que les données de login utilisateur, les logs d’AppLocker, l’énumération des groupes de l’Active Directory et de leurs membres, etc. depuis Windows Event logs.

Exemples de techniques pouvant être exécutées, ou accompagnées par PowerShell.

L’implémentation par défaut de PowerShell dans Windows et Windows Server permet à un attaquant de se déplacer latéralement dans un réseau d’entreprise, d’un poste de travail compromis à un contrôleur de domaine, en pivotant depuis plusieurs systèmes différents au sein d’un réseau ou de plusieurs sous-réseaux. A titre d’exemple, le protocole et service Windows WinRM (Windows Remote Management) permettant à un utilisateur d’interagir avec un système distant peut être aisément appelé à l’aide de PowerShell afin d’exécuter une payload sur l’hôte distant. Cette technique a été employée par le groupe Emissary Panda en 2015. Bien d’autres techniques peuvent être mentionnées : Pass-the-hash, Invoke-WMI, Invoke-PsExec, PSRemoting…

Enfin, l’attaque doit a minima résister à un redémarrage de l’hôte. PowerShell peut aider : modifier le profil PowerShell de la victime à l’aide de WMI (Windows Management Instrumentation) peut assurer la persistance de la menace. Certains attaquants installeront leurs scripts PowerShell en tant que services Windows afin qu’ils soient exécutés en tâche de fond, au démarrage.

Actions sur objectifs

Les attaquants ont tendance à privilégier d’autres langages que PowerShell pour les autres étapes de la chaîne d’exécution de leurs attaques. Mais une telle palette de possibilités a poussé certains à s’appuyer plus sérieusement sur PowerShell, non plus uniquement comme langage support (“delivery”, “defense evasion”, etc.), mais comme langage de la charge utile finale permettant de mener à bien les « actions sur objectifs ». POWERSOURCE est une backdoor entièrement écrite en PowerShell. Le groupe d’activité FIN7 l’utilise pour télécharger un « second stage » : une backdoor PowerShell surnommée TEXTMATE. TEXTMATE fournit un reverse shell aux attaquants et utilise, comme POWERSOURCE, des requêtes DNS TXT pour communiquer avec son C2. TEXTMATE est également entièrement chargé et exécuté en mémoire. En juillet 2017, le groupe d’activité APT34 utilisait à son tour une backdoor PowerShell surnommé POWRUNNER.

Dans une troisième partie, nous verrons quelles sont les opportunités défensives qui découlent de cet usage caractéristique de PowerShell.

--

--

Barbara Louis-Sidney
Cyber Threat Intelligence par OWN

French Threat Intel & Purple teamer @sekoia_fr. Former law professional & intel analyst. Now learning technical analysis & tryin' to reach best of both worlds.