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 :
icacls
permet 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
Link to heading
La syntaxe la plus simple :
icacls C:\Lab
Exemple :
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
bob
et surtout leurs niveaux d’accès.
02 // Comprendre les lettres
Link to heading
Les permissions les plus courantes sont :
F → Full access
M → Modify
RX → Read & Execute
R → Read
W → Write
D → Delete
Par exemple :
LAB\alice:(M)
signifie que alice dispose de droits de modification.
Alors que :
LAB\bob:(RX)
indique principalement :
Read
+
Execute
03 // Le fameux (I)``
Link to heading
Dans une sortie icacls, on rencontre souvent :
(I)
Par exemple :
LAB\alice:(I)(M)
I signifie :
Inherited
La permission est donc héritée d’un dossier parent.
On peut visualiser :
C:\Lab
│
└── Projects
│
└── script.ps1
Une permission définie sur :
C:\Lab
peut être héritée par :
C:\Lab\Projects
puis par :
script.ps1
L’héritage est donc un élément essentiel de l’analyse des permissions Windows.
04 // Analyser un fichier
Link to heading
Pour examiner un fichier précis :
icacls C:\Lab\config.txt
Exemple :
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 → Read
Cette information devient particulièrement importante lorsque le fichier contient :
configuration
scripts
credentials
backups
logs
secrets
05 // Pourquoi c'est intéressant en Red Team ?
Link to heading
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 impact
L’objectif d’un pentest est donc de rechercher les permissions excessives, puis d’évaluer leur impact réel.
06 // Vérifier récursivement
Link to heading
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.zip
et examiner les ACL de chaque élément.
Pour un audit, c’est particulièrement pratique.
07 // Rechercher les permissions problématiques
Link to heading
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\APP
avec :
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 IMPACT
08 // Vérifier un répertoire sensible
Link to heading
Dans un laboratoire :
icacls "C:\Program Files"
Puis :
icacls "C:\Program Files\NomApplication"
On peut comparer les permissions :
Parent
↓
Application
↓
Executable
↓
Configuration
Cette approche permet de repérer les différences d’ACL entre les différents niveaux.
09 // Modifier une permission
Link to heading
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 :
Modify
sur le répertoire.
Pour un laboratoire, cela permet de comprendre concrètement comment évoluent les ACL.
10 // Retirer une permission
Link to heading
Pour retirer une entrée :
icacls C:\Lab /remove LAB\alice
Il 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 → Read
11 // Héritage des permissions
Link to heading
L’héritage est un concept fondamental.
Pour désactiver l’héritage :
icacls C:\Lab /inheritance:d
Pour le réactiver :
icacls C:\Lab /inheritance:e
Il faut cependant être prudent avec les modifications d’ACL.
Une mauvaise manipulation peut provoquer :
accès refusé
application cassée
service inaccessible
héritage incorrect
Dans un environnement réel, les ACL doivent donc être modifiées avec précaution.
12 // Sauvegarder les ACL
Link to heading
Dans un audit, il peut être utile de sauvegarder les permissions avant modification :
icacls C:\Lab /save C:\Temp\lab-acl.txt /T
Cela permet de conserver une représentation des ACL.
On peut ensuite restaurer les permissions avec :
icacls C:\ /restore C:\Temp\lab-acl.txt
La restauration doit évidemment être réalisée avec prudence et sur le bon périmètre.
13 // Le lien avec net share
Link to heading
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
ACCESS
Exemple :
Share Permissions
+
NTFS Permissions
↓
Effective Access
C’est pourquoi voir :
\\SERVER\Backup
ne 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
Link to heading
Créer un environnement :
mkdir C:\Lab
echo GREY-X > C:\Lab\test.txt
Afficher les permissions :
icacls C:\Lab
Puis :
icacls C:\Lab\test.txt
Créer un utilisateur de laboratoire :
net user labuser "LabPassword123!" /add
Accorder un accès en lecture :
icacls C:\Lab /grant labuser:(R)
Vérifier :
icacls C:\Lab
Puis modifier :
icacls C:\Lab /grant:r labuser:(M)
Observer la différence.
Enfin, nettoyer le laboratoire :
icacls C:\Lab /remove labuser
net user labuser /delete
L’objectif est de voir concrètement la différence entre :
Read
Modify
Full Control
15 // Une ACL n'est pas une vulnérabilité
Link to heading
C’est une distinction importante en pentest.
Trouver :
Users:(M)
ne signifie pas automatiquement :
RCE
ou :
Privilege Escalation
Il 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
Link to heading
Pour le défenseur, icacls permet d’auditer rapidement les permissions :
icacls C:\Important
Puis récursivement :
icacls C:\Important /T
Il faut notamment rechercher :
Everyone
Users
Authenticated Users
avec des permissions trop larges sur :
applications
scripts
services
configurations
sauvegardes
répertoires système
La règle générale reste :
Least Privilege
+
Controlled Inheritance
+
Regular ACL Review
17 // Commandes essentielles
Link to heading
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
Link to heading
Avec les trois commandes :
net share
on découvre ce que Windows partage.
net use
on observe les connexions aux ressources réseau.
icacls
on 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.