PowerHuntShares : Analysez facilement les partages réseau de votre domaine Active Directory
Sommaire
I. Présentation
Dans cet article, nous allons découvrir et apprendre à utiliser un outil d'énumération et d'inventaire des partages de fichiers réseau au sein d'un domaine Active Directory.
La problématique des partages réseau au sein des systèmes d'information d'entreprise est complexe à adresser. Souvent très nombreux et répartis sur des dizaines ou des centaines de systèmes, les permissions d'accès qu'ils possèdent et la légitimité de leur présence sont souvent difficiles à établir. Par exemple, les équipes informatiques ont souvent du mal à répondre aux questions suivantes :
- Combien de partages de fichier sont accessibles via le réseau dans votre système d'information ?
- Est-il légitime et nécessaire que le groupe "Utilisateurs authentifiés" possède les droits de lecture et d'écriture sur tel partage ?
- Tel partage est-il encore utilisé par les équipes métiers ?
Ces différents exemples sont autant de vecteurs d'attaques potentiels lors d'une cyberattaque.
En tant que pentester, j'effectue systématiquement une analyse des partages réseau lors de la réalisation de tests d'intrusions internes (opération qui consiste à adopter la démarche d'un attaquant). Cette analyse me permet dans 99% des cas de trouver des éléments intéressants : partages accessibles sans authentification; avec des permissions trop ouvertes; documents sensibles ou contenant des mots de passe accessibles à tous les utilisateurs authentifiés, etc.
L'outil PowerHuntShares a été créé afin d'aider les équipes informatiques à répondre à cette problématique. L'objectif de cet outil est de permettre de réaliser un inventaire et une analyse des partages de fichiers et de leur permission au sein d'un domaine Active Directory. Il permet notamment d'identifier les privilèges excessifs ainsi que les partages "à risque", et génère un rapport au format web simple à parcourir et à utiliser :
Cet outil a été créé par Scott Sutherland, qui travaille pour la société NetSPI.
II. Risques et définition d'un privilège excessif
A. Comment définir un privilège excessif ?
Catégoriser de manière sûre et certaine qu'un privilège est "excessif", c'est-à-dire qu'il accorde plus de droits que nécessaire, n'est pas une tâche facile.
Il faut commencer par distinguer les droits SMB des droits NTFS. Les droits SMB s'appliquent au partage réseau et permettent à l'utilisateur d'y accéder, de lire et/ou modifier son contenu (sous-dossiers et fichiers). Les droits NTFS, quant à eux, s'appliquent au contenu d'un partage (chaque dossier, sous-dossier et fichier) et peuvent ainsi restreindre encore plus les permissions.
Pour mieux comprendre la différence entre permissions NTFS et permissions des partages, je vous invite à consulter notre article à ce sujet :
Ainsi, un utilisateur peut avoir les droits de lecture/écriture sur un partage, mais être bloqué sur tous les dossiers de ce partage en raison des droits NTFS. Cependant, il existe des cas assez classiques de permissions trop ouvertes positionnées sur des partages et celles-ci découlent souvent des faits suivants :
- Le groupe "Tout le monde" (ou "Everyone") est une référence directe qui s'applique aussi bien aux utilisateurs non authentifiés qu'aux utilisateurs authentifiés. En général, seule une session nulle est nécessaire pour accéder à ces ressources.
- Le groupe "BUILTIN\Users" contient tous les utilisateurs authentifiés du domaine.
- Le groupe "Utilisateurs authentifiés" contient tous les utilisateurs du domaine sur les systèmes intégrés au domaine. C'est pourquoi les utilisateurs du domaine peuvent accéder à un partage lorsque les autorisations de partage ont été attribuées à "BUILTIN\Users".
Sur ces trois premiers principes, on peut déjà définir qu'une permission d'accès accordée à l'un de ces groupes est de fait excessive, puisqu'elle s'applique à un groupe de personnes qui n'ont a priori rien en commun. Mis à part quelques répertoires précis qui concerneraient tous les corps de métier et salariés (procédures de secours, menu de la cantine, etc.), il est en réalité peu probable que cela soit nécessaire sur des répertoires et des fichiers métiers.
Pour aller plus loin et être au plus proche de votre contexte, il est nécessaire de bien connaître les groupes, le fonctionnement organisationnel et la hiérarchie de votre entreprise. Ce qui n'est bien sûr pas à la portée de cet article.
B. Privilèges excessifs sur les partages : quels risques ?
Le risque de positionner plus de droits que nécessaire sur un partage réseau ou un dossier est dans un premier temps la fuite de données. Plus un nombre important de comptes utilisateur a accès à répertoire partagé, plus il y a de chance qu’un d’entre eux soit compromis et que ces droits finissent par profiter à un attaquant. Ceci peut mener à une exfiltration de données sensibles ou une élévation de privilège (découverte de mots de passe).
Le cas du ransomware ou cryptolocker est bien sûr à citer : certains ransomwares ne chiffrent pas seulement les fichiers locaux des systèmes compromis et des répertoires partagés montés. Ils peuvent aussi partir à la recherche de tous les répertoires partagés du système d’information pour en chiffrer le contenu. Si tous vos répertoires partagés sont accessibles par l’utilisateur du poste compromis, le ransomware profitera de ces privilèges trop ouverts pour tout chiffrer.
On peut aussi évoquer le risque de fuite “interne” en citant le cas du stagiaire de l’équipe qui décide de partir avec tous les outils et documents internes de l’entreprise.
Également, il faut savoir que l’accès en écriture à un dossier peut être une source d’attaque. Il permet à l’attaquant d’y déposer des fichiers malveillants dans l’espoir qu’ils seront exécutés, voire de piéger des documents existants.
Aussi, le simple accès en écriture à un dossier permet de voler des identifiants, et cela à partir du moment où un utilisateur ouvre un dossier, sans même consulter le moindre fichier. Ces attaques passent par des fichiers qui sont interprétés par "explorer.exe" (le navigateur de fichiers de Windows) lors de la consultation d’un dossier (affichage d’un raccourci, d’une icône, etc.).
Vous trouverez un exemple d’une telle exploitation dans notre article sur ce sujet :
Le sujet principal ici est donc la surface d’attaque, sa maîtrise et sa réduction. En maîtrisant plus finement les droits des partages, vous pourrez réduire leur surface d’attaque.
Découvrez ce qu’est la surface d’attaque dans notre article dédié :
Enfin, la cartographie, l'énumération et la recherche de documents sensibles dans les partages réseau possèdent son propre TTP dans le framework du MITRE ATT&CK :
Le script PowerHuntShares que nous allons utiliser permet de réaliser une analyse automatisée des partages réseau des hôtes d'un domaine et de leur permission, puis de produire un rapport sous la forme d'une page web. Cela vous permet d'avoir une analyse plutôt exhaustive, sans effort et avec une visualisation des résultats assez parlante.
PowerHunShares peut utiliser votre session actuelle si vous êtes connecté sur un système intégré au domaine ou un compte utilisateur qui lui est spécifié (cas hors domaine ou test depuis un utilisateur spécifique). Voici ses principales fonctions :
- Authentification à l'aide de votre session ou d'un compte spécifié.
- Découverte automatique des systèmes intégrés au domaine auprès de l'Active Directory ou utilisation d'une liste d'hôtes à scanner si on lui spécifie.
- Énumération des partages et collecte des ACL (permissions d'accès) de chaque partage.
- Analyse et synthèse des données collectées.
- Production d'un rapport HTML et CSV.
À présent, voyons tout cela de plus près.
B. Préparation de l'analyse et prérequis
Nous allons maintenant apprendre à utiliser le script PowerShell PowerHuntShares pour réaliser une analyse des partages réseau de notre domaine et de leurs permissions.
Vous pourrez récupérer le script PowerShell sur le lien suivant :
L'analyse peut être réalisée depuis un système intégré du domaine tout comme non intégré au domaine. Il faudra simplement adapter les options en conséquence. Également, vous devez choisir avec attention le compte utilisateur que vous utiliserez pour exécuter l'analyse :
- Si vous souhaitez avoir une vue exhaustive de tous les répertoires partagés disponibles sur votre domaine, privilégiez un utilisateur avec des permissions élevées sur le domaine pour qu'il ne manque rien.
- Si vous souhaitez voir concrètement ce qu'un utilisateur ou population d'utilisateur possède comme droit et accès, vous devez utiliser un compte utilisateur membre de cette population. Vous obtiendrez alors la vue réelle de ce à quoi il peut avoir accès.
Dans tous les cas et pour une utilisation "classique", vous n'avez pas besoin de droits d'administration, que ce soit au niveau du système local ou au niveau du domaine.
Une fois que le script est déposé sur votre système, il faut commencer par positionner la politique d'exécution PowerShell à "bypass" pour permettre l'exécution de script (au niveau de la session en cours), puis importer le script pour que ces fonctions puissent être utilisées :
# Définir la politique d’exécution à bypass
Set-ExecutionPolicy -Scope Process Bypass
# Importer le module
Import-Module .\PowerHuntShares.psm1
Vous êtes maintenant prêt à utiliser PowerHuntShares !
C. Exécuter un scan depuis un poste du domaine
Il est grand temps de lancer notre premier scan. Le cas d'utilisation le plus simple est bien sûr de l'exécuter depuis un poste intégré au domaine avec une session ouverte par un utilisateur valide sur le domaine.
Si le module PowerHuntShares est bien chargé dans votre session PowerShell, il suffit de lancer la commande suivante :
# Analyse PowerHuntShares depuis un poste et une session du domaine
mkdir C:\Temp\test
Invoke-HuntSMBShares -Threads 100 -OutputDirectory c:\temp\test
Ici, pas besoin de spécifier le nom du domaine ou l’adresse IP du contrôleur de domaine, le poste étant déjà intégré au domaine Active Directory, les informations réseau et de session seront utilisées. Si vous souhaitez analyser uniquement certains hôtes, il faut simplement créer une liste avec un hôte (nom ou adresse IP) dans un fichier texte, puis le spécifier après l’option "-HostList" :
# Analyse PowerHuntShares avec la session courante et une liste d’hôte
Invoke-HuntSMBShares -Threads 100 -OutputDirectory c:\temp\test -HostList c:\temp\hosts.txt
Durant l’exécution de PowerHuntShares, vous verrez l’avancement de son scan dans le terminal :
Ces informations nous renseignent sur les analyses en cours, le nombre de systèmes et de partages découverts, etc. Cette sortie peut être utile lors de l’analyse de systèmes d’information comprenant un grand nombre d’hôtes, car une telle analyse peut alors prendre plusieurs heures. La partie "SHARE ANALYSIS" concerne l’agrégation, l’analyse et la synthèse des données collectées. On commence ici à avoir des premières informations sur les découvertes réalisées.
À la fin de son exécution, vous aurez dans ce même terminal une petite synthèse :
Vous trouverez ici les principales données concernant les données collectées et analysées, avec notamment le nombre de partages ayant des permissions en lecture, en écriture, identifiés comme sensibles ("C$", "inetpub", "wwwroot", etc.), avec des permissions excessives, etc.
Il ne s’agit là que d’une synthèse, les informations concrètes et exploitables se trouvent dans le rapport HTML dans le dossier que vous avez spécifié au lancement (option "-OutputDirectory"). Nous verrons son contenu à la prochaine section.
- Changer d'utilisateur
Comme nous l'avons vu plus haut dans cet article, il est tout à fait possible de réaliser une analyse des partages "depuis le point de vue" d'un autre utilisateur. Cela permet de mieux se représenter ce à quoi il a accès. Pour cela, il est nécessaire de spécifier le compte utilisateur après l'option "-Credentials" :
# Analyse depuis un poste intégré au domaine avec un autre compte
Invoke-HuntSMBShares -Threads 100 -OutputDirectory c:\temp\test -Credentials domain\user
Dès lors, les identifiants de l’utilisateur vous seront demandés suite à l’exécution de la commande :
D. Exécuter un scan depuis un poste hors domaine
Nous allons à présent voir comment utiliser PowerHuntShares depuis un poste non intégré au domaine. Pour ce faire, nous allons utiliser les options "-DomainController" pour spécifier l'adresse IP ou le nom complet du contrôleur de domaine et "-Credentials" pour spécifier le compte utilisateur à utiliser :
# Analyse depuis un poste non intégré au domaine
Invoke-HuntSMBShares -Threads 100 -RunSpaceTimeOut 10 -OutputDirectory out\ -Credential it-connect.tech\LUANN_WARD -DomainController 192.168.56.102
C'est aussi simple que ça ! Vous aurez de nouveau à saisir le mot de passe de l'utilisateur et pourrez utiliser les différentes options vues dans la section précédent.
Nous allons à présent nous attarder sur le plus intéressant, le rapport HTML et CSV produit par PowerHuntShares qui synthétise les données collectées. Vous le trouverez dans le dossier que vous avez spécifié au lancement (option "-OutputDirectory") :
C'est via le menu à gauche que vous pourrez naviguer au sein des différentes sections du rapport :
Au sein de la section "Reports", l'onglet "Dashboard" vous offrira une vue d'ensemble de l'analyse, avec les éléments principaux comme le pourcentage de partages en accès lecture seul, en accès écriture, la timeline de création des partages identifiés, etc.
L'onglet "Computer Summary" contient la liste des ordinateurs découverts et scannés, la liste de ceux exposant des partages réseau, ceux exposant des partages réseau en accès lecture seul, etc.
L'onglet "Share Summary" est sûrement l'un des plus intéressants :
C'est ici que vous pourrez concrètement voir les permissions excessives relevées par PowerHuntShares. Tout en gardant en tête l'utilisateur avec lequel l'analyse a été menée :
- Discovered : contient tous les partages identifiés.
- Non-default : contient tous les partages qui n'ont pas un nom commun et habituel sur un système Windows (comme "IPC$")
- Potentially Excessive : liste tous les partages qui possèdent des ACL sur les groupes "génériques" comme "Authenticated Users" ou "Everyone", et plus globalement ayant des permissions potentiellement trop généreuses.
- Read access : tous les partages possédant une ACL autorisant la lecture.
- Write access : tous les partages possédant une ACL autorisant l'écriture.
- High risk : tous les partages qui possèdent des noms classiques de partages sensibles (comme "wwwroot"," C", etc.)
Il faudra ensuite déterminer en fonction de vos règles de sécurité et besoins métiers si ces accès sont légitimes ou non, puis les supprimer. Voici un exemple de privilèges excessifs découverts sur un partage :
On voit ici que le groupe "Authenticated Users", c'est-à-dire tous les utilisateurs authentifiés du domaine, ont accès en lecture/écriture au partage "Partage_Direction", ce qui semble anormal.
En fonction de la taille de votre domaine et des pratiques de sécurité des équipes informatiques, vous pourrez avoir plus ou moins de résultats dans l'analyse automatisée. Il faudra quoi qu'il en soit vérifier manuellement le détail de ces résultats et déterminer leur légitimité et importance.
Les onglets du menu "Data Insights" permettent d'avoir des statistiques comme les noms de partage les plus utilisés, les principaux propriétaires des partages, la répartition des partages et ACL par sous-réseau. Là encore, il s'agit d'avoir une vue d'ensemble de l'analyse, qui peut être intéressante en fonction de votre contexte.
Enfin, vous trouverez sur chaque tableau proposé la possibilité de télécharger les détails de la sélection au format HTML ou au format CSV, ce dernier format étant très pratique pour le scripting ou l'analyse automatisée :
Le rapport web est clairement le bienvenu et constitue des forces de l'outil. Il permet d'avoir une vue différente, orientée sur les faiblesses concernant les permissions des partages réseau. Je vous encourage à passer du temps sur celui-ci afin de bien comprendre chaque section, mais aussi chaque résultat, le travail pouvant être assez conséquent sur des systèmes d'information d'entreprises de moyenne et grande taille.
V. Conclusion
PowerHuntShares est un outil puissant pour l'analyse et l'inventaire des partages réseau au sein d'un domaine Active Directory. En automatisant la collecte des permissions et en générant des rapports détaillés, il vous permettra de mieux cartographier et sécuriser vos partages réseau. L'utilisation de cet outil, combinée à une bonne connaissance des groupes et des permissions dans votre organisation, peut grandement réduire les risques de sécurité liés aux partages réseau.
L'une des phases importantes à ne pas oublier est l'analyse manuelle des résultats et la vérification de la légitimité des permissions détectées comme excessives. Une fois l'outil maîtrisé, il vous restera plus qu'à exécuter un scan et faire une analyse des résultats régulièrement.
Pour aller plus loin sur ce sujet de la sécurité des partages réseau, je vous invite à découvrir l'outil Snaffler. Il permet de rechercher des données sensibles, comme des mots de passe ou des données métiers, dans les partages réseau des systèmes de votre domaine :
Super outil en effet que j’utilise depuis 1 an dans mes audits…
Mais il faut corriger le script car il ne gère pas correctement le format des dates (FR pour mon cas)
https://github.com/NetSPI/PowerHuntShares/issues/3
Le fichier « PowerHuntShares-main\PowerHuntShares.psm1 » est détecté comme malicieux par ESET Protect / Endpoint Security (Nom de la détection virale « PowerShell/RiskWare.PowerSploit.BL »)… même en copiant le contenu dans un nouveau fichier sur mon poste, l’anti-virus supprime le fichier.
Quelqu’un a-t-il pu le passer à Virus Total ?
Bonjour,
exactement le même problème donc en environnement de production ce sera forcément plus compliqué.
Je pense qu’il faut restauré une sauvegarde en machine virtuel sans carte réseau, désactivé toute les protection et lancé le script.
J’ai pas le temps de le faire aujourd’hui mais j’imagine que c’est ce que j’aurais tenté.
Hello,
Le script ne contient pas de malware, mais comme beaucoup d’outils de ce type, il peut sembler suspect. Un attaquant pourrait tout à fait l’utiliser…. Tout autant qu’un sysadmin. A ma connaissance, c’est un outil fiable et avec une bonne réputation, mais c’est bien d’être méfiant 🙂
Bonjour,
Le script utilise plusieurs url (34) dont l’url en ligne 12554 : https://github.com/PowerShellEmpire/PowerTools/blob/master/PowerView/powerview.ps1, c’est pas tiptop pour un audit, qu’en pensez vous ? existe t’il un outil un peu moins intrusif ?