PowerShell : usages offensifs et opportunités défensives [1/3]
tl;dr — Dans le cadre de son activité de suivi et d’analyse des différents modes opératoires adverses, OWN observe des tendances claires quant aux outils et langages utilisés. PowerShell s’est — et ce depuis quelques années déjà — affirmé comme étant un des langages privilégiés par les attaquants. Ces derniers l’utilisent tôt ou tard dans leur chaîne d’exécution d’attaque, comme outil principal ou 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.
PowerShell est un langage et un interpréteur de scripting extrêmement puissant au sein du système d’exploitation Windows. Il se compose d’une interface en ligne de commande, d’un langage de script basé sur la programmation orientée objet et d’un kit de développement. Il est aujourd’hui installé sur TOUS les postes Windows. Surtout, par défaut, il laisse très peu de traces sur le poste qui l’héberge.
Se fondre dans la masse
La tendance a été identifiée depuis 2014 par FireEye. Par exemple, le cluster d’activité désigné APT28 s’appuie depuis quelques temps déjà sur des snippets de code public (modules Metasploit, PowerShell Empire, extraits et POC glanés sur GitHub…). APT28 a pu ainsi assurer plus de longévité à ses actions, s’assurant un délai plus confortable avant la détection, puis l’attribution technique. En effet, les commandes sont génériques et ne permettent pas, à elles seules, de différencier des groupes ou d’isoler des modes opératoires.
EmpireMonkey/CobaltGoblin a également choisi d’initier ses attaques avec les techniques triviales les plus répandues, assorties de l’utilisation du framework PowerShell Empire et de CobaltStrike dans leur configuration par défaut. Objectifs devinés : éviter de se faire remarquer par l’utilisation de code écrit sur-mesure, trop caractéristique et susceptible de laisser une empreinte distinctive ; “ se fondre dans la masse “ en utilisant des outils qui ne détonnent pas avec l’environnement ciblé.
A ce titre, PowerShell est le langage parfait. Outil légitime d’administration système par excellence, souvent sur liste blanche et rarement ciblé par du “ hardening “, régulièrement échangé par mail dans le cadre professionnel, il est présent par défaut sur toutes les machines Windows. Que ça soit par soucis de discrétion, recherche d’intégration et de compatibilité ou fainéantise, l’usage de PowerShell fait presque l’unanimité chez différents attaquants, qu’ils soient peu ou très sophistiqués.
Fileless execution et living off the land
PowerShell est utilisé au quotidien pour une pléthore de tâches légitimes d’administration système : automatisation de tâches, manipulation de fichiers, répertoires et registres, administration d’Active Directory, administration de machines à distance, téléchargement et exécution de données.
PowerShell offre une intégration parfaite au cœur du système d’exploitation Windows, et un accès aux assets clés permettant à un attaquant de se rendre persistant (API Win32, registres, tâches programmées, processus, services, etc.), sans requérir à un binaire supplémentaire. Les fonctions de Win32 permettent notamment de manipuler des processus, communiquer entre programmes, d’exploiter les réseaux informatiques, de manipuler des fichiers, des imprimantes, des serveurs et des ports de communication.
Tout ceci est accessible grâce à PowerShell, sans nécessité d’installer de binaire supplémentaire sur le disque. Les scripts sont chargés directement dans un buffer en mémoire et les binaires téléchargés via PowerShell sont assemblés et exécutés directement en mémoire, sans toucher le disque dur.
Surtout, sans configuration spécifique du poste, les fichiers téléchargés ainsi que l’historique des commandes ne sont pas écrits sur le disque.
Pour toutes ces raisons, PowerShell est un outil de choix pour l’exécution de multiples techniques, tout au long du cycle de vie d’une attaque informatique.
Dans une seconde puis une troisième partie, nous verrons comment PowerShell est utilisé à chaque étape d’une attaque, et quelles sont les opportunités défensives qui en découlent.