GREY-X // WINDOWS LAB
icacls — WINDOWS FILESYSTEM PERMISSIONS
Sous Windows, avoir accès à un fichier ne signifie pas forcément pouvoir le modifier.
L’accès dépend notamment des permissions NTFS appliquées aux fichiers et aux répertoires.
La commande native :
icaclspermet d’afficher et de modifier ces permissions.
En cybersécurité, elle est particulièrement intéressante pour répondre à une question fondamentale :
QUI PEUT FAIRE QUOI ?01 // Afficher les permissions
#
La syntaxe la plus simple :
icacls C:\LabExemple :
C:\Lab
NT AUTHORITY\SYSTEM:(I)(F)
BUILTIN\Administrators:(I)(F)
LAB\alice:(I)(M)
LAB\bob:(I)(RX)On peut alors identifier :
SYSTEM
Administrators
alice
bobet surtout leurs niveaux d’accès.
02 // Comprendre les lettres
#
Les permissions les plus courantes sont :
F → Full access
M → Modify
RX → Read & Execute
R → Read
W → Write
D → DeletePar exemple :
LAB\alice:(M)signifie que alice dispose de droits de modification.
Alors que :
LAB\bob:(RX)indique principalement :
Read
+
Execute03 // Le fameux (I)``
#
Dans une sortie icacls, on rencontre souvent :
(I)Par exemple :
LAB\alice:(I)(M)I signifie :
InheritedLa permission est donc héritée d’un dossier parent.
On peut visualiser :
C:\Lab
│
└── Projects
│
└── script.ps1Une permission définie sur :
C:\Labpeut être héritée par :
C:\Lab\Projectspuis par :
script.ps1L’héritage est donc un élément essentiel de l’analyse des permissions Windows.
04 // Analyser un fichier
#
Pour examiner un fichier précis :
icacls C:\Lab\config.txtExemple :
C:\Lab\config.txt
NT AUTHORITY\SYSTEM:(F)
BUILTIN\Administrators:(F)
LAB\alice:(M)
LAB\bob:(R)On peut alors construire une matrice simple :
SYSTEM → Full
Administrators → Full
alice → Modify
bob → ReadCette information devient particulièrement importante lorsque le fichier contient :
configuration
scripts
credentials
backups
logs
secrets05 // Pourquoi c'est intéressant en Red Team ?
#
Imaginons :
C:\Program Files\APP\avec :
LAB\user:(M)Un utilisateur standard disposant de droits de modification sur un emplacement sensible peut représenter un problème de sécurité.
Pourquoi ?
Parce qu’une application ou un service peut utiliser des fichiers présents dans ce répertoire.
La chaîne de risque peut alors ressembler à :
Weak ACL
↓
User can modify file
↓
Application consumes file
↓
Security impactL’objectif d’un pentest est donc de rechercher les permissions excessives, puis d’évaluer leur impact réel.
06 // Vérifier récursivement
#
Pour analyser un répertoire et son contenu :
icacls C:\Lab /T/T signifie que l’analyse est effectuée récursivement.
On peut ainsi parcourir :
C:\Lab
├── config
│ ├── app.ini
│ └── database.ini
├── scripts
│ ├── backup.ps1
│ └── deploy.ps1
└── backup
└── server.zipet examiner les ACL de chaque élément.
Pour un audit, c’est particulièrement pratique.
07 // Rechercher les permissions problématiques
#
L’objectif n’est pas seulement de lire la sortie.
Il faut rechercher des situations comme :
Users:(M)
Everyone:(F)
Authenticated Users:(M)sur des emplacements sensibles.
Par exemple :
C:\Program Files\APPavec :
Users:(M)mérite une analyse.
Mais attention :
Une permission dangereuse en apparence ne constitue pas automatiquement une vulnérabilité exploitable.
Il faut comprendre :
QUI
↓
A QUEL DROIT
↓
SUR QUEL OBJET
↓
UTILISÉ PAR QUOI
↓
AVEC QUEL IMPACT08 // Vérifier un répertoire sensible
#
Dans un laboratoire :
icacls "C:\Program Files"Puis :
icacls "C:\Program Files\NomApplication"On peut comparer les permissions :
Parent
↓
Application
↓
Executable
↓
ConfigurationCette approche permet de repérer les différences d’ACL entre les différents niveaux.
09 // Modifier une permission
#
icacls ne sert pas uniquement à lire les ACL.
Il permet également de les modifier.
Par exemple :
icacls C:\Lab /grant LAB\alice:(M)Cette commande accorde à alice le droit :
Modifysur le répertoire.
Pour un laboratoire, cela permet de comprendre concrètement comment évoluent les ACL.
10 // Retirer une permission
#
Pour retirer une entrée :
icacls C:\Lab /remove LAB\aliceIl est également possible d’utiliser :
icacls C:\Lab /grant:r LAB\alice:(R)Le :r permet de remplacer les autorisations explicites existantes pour cet utilisateur par celles spécifiées.
Exemple :
Avant
LAB\alice → Modify
Après
LAB\alice → Read11 // Héritage des permissions
#
L’héritage est un concept fondamental.
Pour désactiver l’héritage :
icacls C:\Lab /inheritance:dPour le réactiver :
icacls C:\Lab /inheritance:eIl faut cependant être prudent avec les modifications d’ACL.
Une mauvaise manipulation peut provoquer :
accès refusé
application cassée
service inaccessible
héritage incorrectDans un environnement réel, les ACL doivent donc être modifiées avec précaution.
12 // Sauvegarder les ACL
#
Dans un audit, il peut être utile de sauvegarder les permissions avant modification :
icacls C:\Lab /save C:\Temp\lab-acl.txt /TCela permet de conserver une représentation des ACL.
On peut ensuite restaurer les permissions avec :
icacls C:\ /restore C:\Temp\lab-acl.txtLa restauration doit évidemment être réalisée avec prudence et sur le bon périmètre.
13 // Le lien avec net share
#
C’est ici que icacls, net share et net use deviennent particulièrement intéressants ensemble.
On peut avoir :
WINDOWS SERVER
│
┌───────┴───────┐
▼ ▼
net share NTFS ACL
│ │
▼ ▼
SMB SHARE icacls
│ │
└───────┬───────┘
▼
EFFECTIVE
ACCESSExemple :
Share Permissions
+
NTFS Permissions
↓
Effective AccessC’est pourquoi voir :
\\SERVER\Backupne suffit pas.
Il faut également comprendre :
Qui peut accéder ?
Qui peut lire ?
Qui peut écrire ?
Qui peut modifier ?
Qui peut supprimer ?14 // Mini-lab GREY-X
#
Créer un environnement :
mkdir C:\Lab
echo GREY-X > C:\Lab\test.txtAfficher les permissions :
icacls C:\LabPuis :
icacls C:\Lab\test.txtCréer un utilisateur de laboratoire :
net user labuser "LabPassword123!" /addAccorder un accès en lecture :
icacls C:\Lab /grant labuser:(R)Vérifier :
icacls C:\LabPuis modifier :
icacls C:\Lab /grant:r labuser:(M)Observer la différence.
Enfin, nettoyer le laboratoire :
icacls C:\Lab /remove labuser
net user labuser /deleteL’objectif est de voir concrètement la différence entre :
Read
Modify
Full Control15 // Une ACL n'est pas une vulnérabilité
#
C’est une distinction importante en pentest.
Trouver :
Users:(M)ne signifie pas automatiquement :
RCEou :
Privilege EscalationIl faut analyser le contexte.
Par exemple :
User can modify file
↓
Quel fichier ?
↓
Qui l'utilise ?
↓
Quel processus le charge ?
↓
Avec quels privilèges ?
↓
Quel impact ?C’est cette analyse qui permet de transformer une mauvaise configuration en véritable finding de sécurité lorsqu’un impact démontrable existe.
16 // Côté Blue Team
#
Pour le défenseur, icacls permet d’auditer rapidement les permissions :
icacls C:\ImportantPuis récursivement :
icacls C:\Important /TIl faut notamment rechercher :
Everyone
Users
Authenticated Usersavec des permissions trop larges sur :
applications
scripts
services
configurations
sauvegardes
répertoires systèmeLa règle générale reste :
Least Privilege
+
Controlled Inheritance
+
Regular ACL Review17 // Commandes essentielles
#
icacls C:\Lab→ afficher les ACL.
icacls C:\Lab /T→ analyser récursivement.
icacls C:\Lab /grant user:(R)→ accorder la lecture.
icacls C:\Lab /grant user:(M)→ accorder la modification.
icacls C:\Lab /remove user→ supprimer une entrée.
icacls C:\Lab /inheritance:d→ désactiver l’héritage.
icacls C:\Lab /inheritance:e→ activer l’héritage.
icacls C:\Lab /save C:\Temp\acl.txt /T→ sauvegarder les ACL.
18 // La chaîne complète
#
Avec les trois commandes :
net shareon découvre ce que Windows partage.
net useon observe les connexions aux ressources réseau.
icaclson analyse les permissions NTFS.
On obtient alors :
WINDOWS
│
┌───────┼────────┐
▼ ▼ ▼
net share net use icacls
│ │ │
▼ ▼ ▼
SHARES SESSIONS ACLs
│ │ │
└───────┼────────┘
▼
ACCESS CONTROL
│
▼
SECURITY REVIEW
net sharemontre l’exposition.
net usemontre les connexions.
icaclsmontre les permissions.
Et c’est précisément la combinaison des trois qui permet de mieux comprendre la surface d’accès d’un environnement Windows.
GREY-X — Enumerate. Inspect. Understand. Secure.