Introduction
PSexec fait partie de la fameuse SysInternals Tools/PsTools Suite de Microsoft, créée par Mark Russinovich, qui n’est autre que le CTO actuel de la firme américaine.
PSexec vous permet d’exécuter des commandes/Processus sur des machines distantes, et ce sans avoir besoin d’installer de features/outils supplémentaires.
Il s’agit d’un outil très puissant d’Administration (à distance) et troubleshooting des plateformes Windows (Client & Server).
Télécharger la Suite SysInternals Tools
Télécharger l’outil PSexec.exe
Note : le guide d’utilisation de PSexec est détaillé depuis la même page de Download.
Tip : comme vous pouvez le constater, les tools de la Sysinternals peuvent être téléchargés séparément.
Bloquer l’exécution de PSexec ?!! Pourquoi ? Pour quelles raisons ?
Contrairement à la plupart des Softwares/Tools de Microsoft, le fonctionnement de PsExec.exe n’est pas un secret, il est assez simple. PsExec autorise les redirections des Input & Output d’un exécutable démarré à distance via l’utilisation de SMB et du partage (caché) $ADMIN sur le système distant. Avec ce partage, PsExec utilise l’API Windows Service Control Manager (WSCM) pour démarrer le service PsExecsvc sur le système distant, qui crée un canal nommé avec lequel PsExec communique. Ce canal nommé est ce qui permet la redirection des entrées / sorties vers le système qui a lancé PsExec.
PsExec peut être utilisé pour collecter des informations depuis des machines distantes (IPConfig, Net use, …) ou administrer un serveur Windows (Changer le password d’un compte Admin Loca, Patch management à partir d’un script…) ou encore lancer une instance Regedit.exe en tant que System Account pour pouvoir écrire/modifier certaines clés de Registre et bien plus encore !
La puissance de cet outil fait justement « peur » à certains RSSI/DSI, par conséquent, PsExec fait généralement partie des tools à Blacklister sur tout le parc Windows Client/Server.
A l’aide de PsExec, un Hacker ayant réussi à récupérer des crédentials depuis une machine vulnérable sur le réseau, peut les utiliser pour établir une connexion distante et tenter des collecter plus d’infos sensibles voire envisager une escalation de privilège.
Quelques Real-world scénarios
- Exéuction d’un programme malveillant à distance (eg : Backdoor)
- Exécuter un programme/file à distance via l’utilisation d’un UserName et le Hash de son password !
Exécution des outils /programmes en tant que Compte « System » : compte ayant le plus haut niveau de privilège sur les OS Windows
Vous aurez compris, l’utilisation de PsExec au sein d’un réseau Windows peut s’avérer dangereuse car permettrait à un Hacker ou toute personne malveillante d’accéder et récupérer à des informations sensibles (AD, comptes Admin…)
HowTo : Bloquer l’exécution du PSexec
Il existe différentes méthodes pour bloquer l’exécution de PsExec.exe :
- Désactivation du partage (par défaut) ADMIN$
- Déploiement d’une clé de registre (psexec.exe > Dubugger = svchost.exe)
Bloquer PsExec via la désactivation du Partage Windows ADMIN$
Pourquoi désactiver le partage ADMIN$ ?
Lorsque PsExec est utilisé pour exécuter une tâche/commande sur un système distant, il crée un nouvel exécutable/service appelé « psexesvc.exe ». Cet exe est copié dans le dossier Windows de la machine distante via le partage par défaut ADMIN$ (d’où la nécessité d’être un administrateur pour que psexec fonctionne à distance), désactiver ce partage bloque donc le fonctionnement de PsExec
Pour désactiver le partage ADMIN$, rien de plus simple, il faut lancer la console « Dossiers partagés » en exécutant l’outil « FsMgmt.msc » depuis le Menu Exécuter ou Démarré > Partages > ADMIN$ > Click-droit > Arrêter le Partage.
Bloquer PsExec via la clé de Registre
Pour bloquer l’exécution du PSexec via la clé de Registre, suivez les instructions suivantes :
- Créer une clé de Registre nommée « psexec.exe » au niveau de : HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
-
Créer ensuite une sous-clé au niveau de « psexec.exe », avec les informations suivantes :
- Type : REG_SZ (Data String)
- Nom clé : Debugger
- Valeur : svchost.exe
- Type : REG_SZ (Data String)
Aucun reboot de la machine n’est requis :).
Testons maintenant l’exécution du PSexec. Dans l’exemple suivant, je reprend l’exemple précédent pour lancer un CMD.exe en tant que « System », comme montré ci-dessous, aucun résultat n’est retourné.
PSexec est bloqué au lancement, vous n’aurez aucune info ni message d’erreur :
Bloquer PsExec via GPO (GPP)
Si vous devez généraliser le déploiement de la clé Registre créée précédemment, le meilleur moyen de le faire, est de configurer une GPP (Group Policy Preference), voir paramètres suivants ;
Télécharger la clé de Registre
Vous pouvez télécharger la clé de Registre depuis l’URL suivante et l’importer directement sur les machines (Client et/ou Serveur) sur lesquelles vous souhaitez bloquer l’exécution de PSexec
https://gallery.technet.microsoft.com/Block-PsExec-Execution-4a86c023
Pensez à implémenter AppLocker
Le meilleur moyen de bloquer l’exécution des PsTools (PsExec, PsShutdown…) est d’implémenter des règles (Blacklisting) AppLocker à base de Hash, c’est le moyen le plus fiable en terme de software blacklisting dans les environnements Windows.
Note : un eBook sur AppLocker 2012 R2 et 2016 est disponible sur BecomeITExpert.com. Si le sujet vous intéresse, cliquez sur une des images ci-dessous pour en savoir plus.