Permissions NTFS, partages SMB et ACLs : le modèle d'autorisation Windows
Le modèle de sécurité des objets sous Windows repose sur les Descripteurs de Sécurité (Security Descriptors) attachés à chaque objet sécurisable. Un descripteur contient :
- Le Propriétaire (Owner SID) : l’entité qui possède le contrôle légal de l’objet et peut toujours en modifier la DACL.
- Le Groupe Principal (Group SID) : utilisé pour la compatibilité POSIX.
- La DACL (Discretionary Access Control List) : liste ordonnée d’entrées de contrôle d’accès (ACE) définissant qui a le droit (Allow) ou l’interdiction (Deny) d’effectuer quelles opérations.
- La SACL (System Access Control List) : liste d’ACEs définissant les règles d’audit (génération des événements forensiques de succès ou d’échec d’accès).
Pourquoi c’est important en DFIR
Section intitulée « Pourquoi c’est important en DFIR »L’audit des permissions NTFS et des partages SMB permet de résoudre les questions centrales d’une investigation :
- Reconstituer le périmètre d’exfiltration : déterminer avec certitude si un compte d’utilisateur compromis avait la capacité de lire des répertoires confidentiels.
- Expliquer le déploiement d’un ransomware : si un ransomware chiffre un partage distant, analyser les ACLs permet de prouver quel compte a été utilisé pour déposer les fichiers chiffrés et écraser les originaux.
- Identifier la persistance par altération de DACL : les attaquants modifient fréquemment les DACLs d’objets sensibles (ex: clé de registre
Run, binaire d’un service système, ou objet Active DirectoryAdminSDHolder) en ajoutant une ACEGenericAllpour s’octroyer un accès permanent.
Comment ça fonctionne
Section intitulée « Comment ça fonctionne »1. Structure et évaluation d’une DACL
Section intitulée « 1. Structure et évaluation d’une DACL »Le Moniteur de Référence de Sécurité (SRM) applique un algorithme strict d’évaluation des ACEs de haut en bas :
[Requête : Lecture + Écriture] │ ▼┌────────────────────────────────────────────────────────┐│ 1. ACE Explicite : DENY Écriture (Groupe Stagiaires) │ ──► Refus Immédiat de l'Écriture !├────────────────────────────────────────────────────────┤│ 2. ACE Explicite : ALLOW Lecture (jdoe) │ ──► Droit de Lecture Accordé !├────────────────────────────────────────────────────────┤│ 3. ACE Héritée : ALLOW Écriture (Users) │ ──► Ignoré car Deny explicite rencontré└────────────────────────────────────────────────────────┘Ordre canonique des ACEs :
- ACEs explicites de refus (Explicit Deny)
- ACEs explicites d’autorisation (Explicit Allow)
- ACEs héritées de refus (Inherited Deny)
- ACEs héritées d’autorisation (Inherited Allow)
Dès qu’une ACE Deny correspondante est rencontrée, l’opération demandée est immédiatement rejetée. Dès que tous les bits de l’accès demandé ont été validés par des ACEs Allow, l’évaluation s’arrête avec succès. Si la fin de la DACL est atteinte sans que tous les droits demandés soient accordés, l’accès est rejeté par défaut.
2. Partages SMB vs permissions NTFS
Section intitulée « 2. Partages SMB vs permissions NTFS »Réseau (SMB) ──► [Permissions de Partage] ──► [Permissions NTFS] ──► Fichier sur disque| Scénario Partage | Scénario NTFS | Résultat Effectif Réseau | Résultat Effectif Local (Console) |
|---|---|---|---|
Everyone : Read | Everyone : Full Control | Lecture seule | Contrôle total |
Everyone : Full Control | Everyone : Read | Lecture seule | Lecture seule |
Domain Users : Change | Domain Users : Modify | Modification (écriture) | Modification (écriture) |
Everyone : Full Control | jdoe : Deny Write | Refus d’écriture pour jdoe | Refus d’écriture pour jdoe |
Ce qui est possible
Section intitulée « Ce qui est possible »- Être propriétaire sans avoir le droit de lire : si la DACL retire tous les droits au propriétaire, celui-ci ne peut pas lire le fichier immédiatement. Cependant, en tant que propriétaire, il détient le droit fondamental
WRITE_DAC: il peut réécrire la DACL pour se redonner les droits d’accès. - Bypass des ACLs via
SeBackupPrivilege: les logiciels de sauvegarde (et les attaquants qui en détiennent le privilège) ouvrent les fichiers avec le drapeauFILE_FLAG_BACKUP_SEMANTICS, ce qui force le noyau à ignorer la DACL. - Créer des partages cachés : ajouter le symbole
$à la fin du nom de partage (ex:CONFIDENTIAL$) masque le partage lors de l’énumération réseau NetBIOS/SMB ordinaire, mais ne restreint en rien ses droits d’accès.
Ce qui n’est pas possible
Section intitulée « Ce qui n’est pas possible »- Outrepasser un deny explicite via une appartenance de groupe : si
jdoeest dansDomain Admins(Allow), mais qu’une ACE explicite stipulejdoe : Deny, l’interdiction prime toujours. - Écrire à travers le réseau si le partage est en lecture seule : même le compte
Domain Adminsne peut pas modifier un fichier via un partage SMB restreint àRead.
Confusions fréquentes
Section intitulée « Confusions fréquentes »Artefacts / traces
Section intitulée « Artefacts / traces »Pour prouver l’accès effectif à un partage ou à un fichier sensible :
EventID: 5140 # Un objet de partage réseau a été accédéShareName: \\*\FinanceIpAddress: 192.168.1.105SubjectUserName: jdoe
EventID: 5145 # Un objet de partage réseau a été vérifié (Audit détaillé)ShareName: \\*\FinanceRelativeTargetName: Facturation\salaires_2026.xlsxAccessMask: 0x120089 # ReadData, ReadEA, ReadAttributes, ReadControlAccessList: %%4416 (ReadData)SubjectUserName: jdoeSubjectUserSid: S-1-5-21-111111111-222222222-333333333-1105Méthodes d’investigation
Section intitulée « Méthodes d’investigation »- Inspecter la DACL d’un fichier suspect avec
icacls:Fenêtre de terminal icacls "C:\Partage\secret.docx"# Exemple de sortie :# CORP\jdoe:(I)(F) <- F = Full Control, (I) = Hérité# CORP\Stagiaires:(N) <- N = None (Deny) - Calculer les permissions effectives avec PowerShell :
Fenêtre de terminal (Get-Acl -Path "C:\Partage\secret.docx").Access |Select-Object IdentityReference, AccessControlType, FileSystemRights, IsInherited - Lister les partages SMB et leurs permissions :
Fenêtre de terminal Get-SmbShareGet-SmbShareAccess -Name "Finance"
Points clés à retenir
Section intitulée « Points clés à retenir »- L’accès réseau est toujours borné par le filtre le plus strict entre partage SMB et NTFS.
- L’ordre canonique place les refus explicites (Explicit Deny) au sommet de l’évaluation.
- Le propriétaire d’un objet (Owner) peut TOUJOURS réécrire la DACL via
WRITE_DAC. - L’event ID 5145 consigne le fichier spécifique et l’
AccessMaskréel demandé.