Windows : identifier l’ordinateur et l’utilisateur ayant accédé à un dossier partagé (audit 4663/5140)

Besoin d’identifier précisément quel poste et quel utilisateur ont ouvert, lu ou modifié un dossier partagé Windows ? Voici une méthode éprouvée, avec des scripts et des filtres prêts à l’emploi pour obtenir l’IP du client, le nom du poste et l’utilisateur dans les journaux de sécurité.

Sommaire

Vue d’ensemble de la question

Dans un environnement Windows (poste isolé, serveur membre ou contrôleur de domaine), l’objectif est de consigner qui (compte utilisateur) et d’où (poste client) accède à un dossier partagé via SMB. La solution fiable repose sur :

  • l’activation des stratégies d’audit (Accès aux objets, File Share),
  • la pose d’une SACL (Audit) sur le dossier visé,
  • l’analyse des événements clés 4663 et 5140 (et, si besoin, 4624 et 5145),
  • une corrélation simple pour remonter au nom d’utilisateur, à l’adresse IP et, souvent, au nom NetBIOS/Workstation du poste.

Réponse & Solution

ÉtapeActionOù / CommentRésultat attendu
1. Activer l’audit “Accès aux objets”Stratégie de sécurité locale ou GPO : Configuration ordinateur › Paramètres Windows › Paramètres de sécurité › Stratégies locales › Stratégie d’audit › Audit de l’accès aux objetsCocher Succès et ÉchecsLe système enregistre toute tentative d’accès aux fichiers/dossiers
2. (Recommandé) Activer l’audit “Partage de fichiers”Configuration ordinateur › Paramètres Windows › Paramètres de sécurité › Stratégies avancées d’audit › Partage de fichiers › Audit File ShareSuccès/ÉchecsGénère l’ID 5140 (Objet partagé réseau accédé), plus simple à filtrer
3. Définir l’audit sur le dossierOnglet Sécurité › Avancé › Audit › Ajouter → principal : Everyone (ou groupe cible) → cocher Read/Write/…Audit ciblé uniquement sur ce dossierRéduit le volume de journaux
4. Vérifier dans l’Observateur d’événementsEvent ViewerJournaux Windows › SécuritéID 4663 → tentative d’accès fichier
ID 5140 → ouverture depuis le partage
Le détail contient :
Account Name (utilisateur)
Source Address / Client Address (IP du poste)
Computer/Workstation Name (souvent présent)
5. Identifier le posteL’ID 5140 inclut Network Information › Source/Client Address (IP). L’ID 4624 (connexion), sur le fichier ou le DC, contient Workstation Name.Faites correspondre l’IP ou le nom d’hôte via DNS (nslookup) ou arp -a, ou interrogez l’AD (attribut dNSHostName).Ordinateur source identifié
6. Automatiser l’analyse (optionnel)PowerShell : Get-WinEvent -FilterHashtable @{LogName='Security'; Id=@(4663,5140); StartTime=(Get-Date).AddDays(-1)}Export-CsvRapport quotidien ou alerte SIEM : historique clair des accès par utilisateur + poste

Pas à pas détaillé

Activer l’audit “Accès aux objets” (GPO ou local)

  1. Via GPMC (domaine) : créez ou éditez une GPO liée à l’OU des serveurs de fichiers → Configuration ordinateurParamètres WindowsParamètres de sécuritéStratégies localesStratégie d’auditAudit de l’accès aux objets = Succès et Échecs.
  2. Via stratégie avancée (de préférence) : Configuration ordinateurParamètres WindowsParamètres de sécuritéStratégies avancées d’auditObject Access → activez File System, File Share (et si besoin Detailed File Share) en Succès/Échecs.
  3. Poste isolé : lancez secpol.msc et configurez la stratégie locale équivalente.

Astuce : la “Stratégie d’audit” classique est globale et moins granulaire. La “Stratégie avancée d’audit” permet d’affiner par sous-catégorie et est recommandée.

Poser une SACL (Audit) sur le dossier ciblé

Pour éviter un déluge d’événements, appliquez l’audit uniquement sur le(s) dossier(s) critique(s). Utilisez l’onglet Sécurité > Avancé > Audit et ajoutez :

  • Principal : Everyone, Authenticated Users ou un groupe AD métier (selon besoin).
  • Type : Succès et/ou Échecs.
  • Accès : cochez précisément ce que vous voulez tracer : Read Data/List Folder, Write Data/Create Files, Append Data, Delete, etc.
  • Appliquer à : Ce dossier, sous-dossiers et fichiers si vous souhaitez hériter.

Pourquoi c’est important ? Sans SACL, Windows ne sait pas que ce dossier doit être audité, même si la stratégie globale est active.

Activer “File Share” et (optionnel) “Detailed File Share”

  • File Share (ID 5140) : journalise l’accès au partage (Share Name, Share Local Path, Client Address). Idéal pour identifier le poste source.
  • Detailed File Share (ID 5145) : journalise des détails très fins (ciblage par fichier, masques d’accès). Très verbeux, à activer seulement si nécessaire pour une enquête.

Validation dans l’Observateur d’événements

Sur le serveur de fichiers : Event ViewerJournaux WindowsSécurité.

  • 4663 – An attempt was made to access an object : montre l’objet (fichier/dossier), l’accès demandé (Read/Write/Delete…), l’utilisateur et souvent le processus.
  • 5140 – A network share object was accessed : indique le Share Name, le Share Path et la Client/Source Address (IP du poste). C’est l’événement le plus rapide à exploiter pour relier utilisateur et poste.
  • 4624 – An account was successfully logged on : utile pour récupérer Workstation Name et le Logon Type (Type 3 = réseau/SMB, Type 10 = RDP).
  • 5145 – Detailed File Share (si activé) : permet d’aller au niveau fichier, au prix d’un volume conséquent.

Extraire l’utilisateur, l’IP et le poste : méthodes concrètes

ObjectifÉvénement(s)Champs utilesRemarques
Utilisateur4663, 5140Account Name / SubjectUserNameDans 4663, c’est le compte qui a demandé l’accès NTFS. Dans 5140, c’est le compte SMB.
Adresse IP du poste5140Network/Client/Source AddressAffiché lorsqu’il s’agit d’un accès via réseau (SMB). Pour un accès local, ce champ peut être vide ou -.
Nom du poste4624 (sur le serveur ou DC)Workstation NameCoupler 4624 (Type 3) avec 5140 permet de lier IP ↔ Workstation.
Chemin exact ciblé4663, 5145Object Name / Relative Target Name4663 remonte l’objet NTFS; 5145 est très détaillé sur la partie partage (si activé).

Scripts PowerShell prêts à l’emploi

Configurer l’audit (local) avec auditpol.exe

# 1) Activer les sous-catégories d'audit objet et partage de fichiers
auditpol /set /subcategory:"File System" /success:enable /failure:enable
auditpol /set /subcategory:"File Share"  /success:enable /failure:enable
# Optionnel (verbeux) :
# auditpol /set /subcategory:"Detailed File Share" /success:enable /failure:enable

# 2) Vérifier

auditpol /get /category:"Object Access" 

Poser une SACL (Audit) sur un dossier avec PowerShell .NET

$Path = "D:\Partages\Finance"
$Identity = New-Object System.Security.Principal.NTAccount("Domain","Authenticated Users")
$Rights = [System.Security.AccessControl.FileSystemRights]::Read, `
          [System.Security.AccessControl.FileSystemRights]::Write, `
          [System.Security.AccessControl.FileSystemRights]::CreateFiles, `
          [System.Security.AccessControl.FileSystemRights]::Delete
$Inheritance = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit, `
               [System.Security.AccessControl.InheritanceFlags]::ObjectInherit
$Propagation = [System.Security.AccessControl.PropagationFlags]::None
$AuditFlags = [System.Security.AccessControl.AuditFlags]::Success -bor `
             [System.Security.AccessControl.AuditFlags]::Failure

$acl = Get-Acl -Path $Path
$rule = New-Object System.Security.AccessControl.FileSystemAuditRule($Identity, $Rights, $Inheritance, $Propagation, $AuditFlags)
$acl.SetAuditRule($rule)
Set-Acl -Path $Path -AclObject $acl 

Variante : utilisez "Everyone" ou un groupe AD spécifique selon votre contexte.

Collecte rapide des accès (5140 et 4663 sur 24h)

$Start = (Get-Date).AddDays(-1)
$events = Get-WinEvent -FilterHashtable @{ LogName='Security'; Id=@(5140,4663); StartTime=$Start }

$parsed = $events | ForEach-Object {
$xml = [xml]$*.ToXml()
$id  = $*.Id
$time = $*.TimeCreated
$user = ($xml.Event.EventData.Data | Where-Object { $*.Name -match 'SubjectUserName|AccountName' } | Select-Object -First 1).'#text'
$ip   = ($xml.Event.EventData.Data | Where-Object { $*.Name -match 'ClientAddress|SourceAddress' } | Select-Object -First 1).'#text'
$obj  = ($xml.Event.EventData.Data | Where-Object { $*.Name -match 'ObjectName|ShareName|RelativeTargetName' } | Select-Object -First 1).'#text'
[pscustomobject]@{
TimeCreated = $time
EventId     = $id
User        = $user
ClientIP    = $ip
Object      = $obj
}
}

$parsed | Sort-Object TimeCreated | Export-Csv -NoTypeInformation -Encoding UTF8 "C:\Temp\Acces_Dossiers_24h.csv"
Write-Host "Rapport : C:\Temp\Acces_Dossiers_24h.csv" 

Rapport quotidien (planification)

$script = "C:\Scripts\Rapport-Acces-Partages.ps1"
schtasks /create /TN "Rapport Acces Partages" /TR "powershell.exe -ExecutionPolicy Bypass -File `"$script`"" /SC DAILY /ST 07:30 /RL HIGHEST

Filtres et vues personnalisées (Event Viewer)

Vue “Accès au partage X” (ID 5140 filtré sur un partage)

Dans Event Viewer > Security, créez une Vue personnalisée et choisissez XML pour coller un filtre ciblé :

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
      *[System[(EventID=5140) and TimeCreated[timediff(@SystemTime) <= 86400000]]]
      and
      *[EventData[Data[@Name='ShareName'] and (contains(Data,'\\ServeurFichiers\Finance'))]]
    </Select>
  </Query>
</QueryList>

Vue “Accès au dossier sensible” (ID 4663 filtré sur un chemin NTFS)

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
      *[System[(EventID=4663) and TimeCreated[timediff(@SystemTime) <= 86400000]]]
      and
      *[EventData[Data[@Name='ObjectName'] and (starts-with(Data,'D:\Partages\Finance'))]]
    </Select>
  </Query>
</QueryList>

Ces vues réduisent drastiquement le bruit et mettent en avant les accès pertinents.

Corrélation rapide des événements

  • 5140 seul suffit souvent : on y trouve l’utilisateur, le partage et le Client/Source Address (IP). Faites ensuite un nslookup <IP> pour récupérer le nom du poste.
  • 4624 (Type 3) sur le serveur : renseigne Workstation Name et l’IP, utile si 5140 ne montre que partiellement l’origine.
  • HandleID (4663) : commun aux événements 4656/4663 d’une même opération; pratique pour reconstruire la séquence d’accès.

Cas particuliers et subtilités

Sessions RDS, services et comptes gérés

En environnement RDS, l’événement 4663 peut lister le serveur RDS comme “poste”. Combinez avec l’ID 4624 Type 10 (RDP) sur le serveur RDS pour remonter au poste d’origine. Pour des accès initiés par des services (comptes de service, MSA/gMSA), l’utilisateur sera le compte du service : identifiez ensuite le Client Address via 5140 pour retrouver la machine.

DFS Namespace, clusters et réplicas

Si les utilisateurs passent par un chemin DFS, les événements sont journalisés sur le serveur cible qui héberge la copie réellement accédée. Assurez-vous d’y déployer la GPO d’audit et la SACL. En cluster (Scale-Out File Server), chaque nœud journalise ses accès.

NAT, VPN, IPv6

  • Si la Client Address correspond à une IP NAT (par ex. une tête de VPN), il faudra compléter avec les journaux du concentrateur VPN pour l’IP privée réelle.
  • En IPv6, l’adresse peut apparaître au format compressé : prévoyez la résolution DNS inverse adaptée (PTR IPv6).

Accès local vs réseau

Un accès local (console du serveur) ne produira pas d’IP client dans 5140. Utilisez alors 4663 pour l’objet et 4624 Type 2 (logon interactif) pour l’utilisateur local.

Performance et volume de logs

  • Précisez les droits audités (évitez “Full Control”) et ciblez les groupes réellement concernés.
  • Excluez les comptes techniques “bruyants” (antivirus, backup) en posant l’audit sur des groupes métiers plutôt que Everyone.
  • Surveillez le CPU et l’I/O lors d’un pic (déploiement “Detailed File Share”).

Taille des journaux & rétention

Augmentez la taille du journal Sécurité pour éviter l’écrasement d’événements en période d’activité intense.

# Exemple : 256 Mo pour le journal "Security"
wevtutil sl Security /ms:268435456
# Politique de rétention : "Remplacer les événements au besoin" ou "Ne jamais écraser le journal"

Bonnes pratiques : mettez en place Windows Event Forwarding (WEC/WEF) ou un SIEM (Sentinel, Splunk, etc.) pour centraliser, indexer et conserver sur la durée (exigences internes / conformité).

Modèle de rapport

Un CSV minimal mais exploitable peut contenir :

TimeCreated;EventId;User;ClientIP;Workstation;Object;Action
2025-09-30 09:41:12;5140;jdupont;10.20.33.45;LAPTOP-1542;\\SRV-FIC\Finance;ShareOpen
2025-09-30 09:41:15;4663;jdupont;10.20.33.45;LAPTOP-1542;D:\Partages\Finance\Budget.xlsx;ReadData
2025-09-30 09:43:02;4663;jdupont;10.20.33.45;LAPTOP-1542;D:\Partages\Finance\Budget.xlsx;WriteData

Dépannage (check‑list)

  • Je ne vois aucun 4663 : la Stratégie d’audit est‑elle active et une SACL posée sur le dossier ?
  • Je ne vois pas d’IP client : cherchez les 5140 (File Share) et les 4624 Type 3 sur le serveur de fichiers.
  • Trop d’événements : resserrez la SACL sur les groupes et les droits nécessaires; n’activez “Detailed File Share” que pour une enquête.
  • Nom du poste manquant : utilisez 4624 (Workstation Name) et la résolution DNS inverse de l’IP collectée en 5140.
  • DFS/cluster : vérifiez que la GPO et la SACL sont appliquées sur tous les nœuds/serveurs cibles.

FAQ

Peut‑on tracer l’application qui a ouvert le fichier ?
Souvent oui via 4663, grâce au Process Name lorsque l’information est disponible. Sur un accès SMB pur, la corrélation peut être moins évidente.

Comment différencier lecture et modification ?
Regardez la valeur “Accesses” dans 4663 (ex. ReadData, WriteData, AppendData, Delete). Combinez plusieurs 4663 partageant le même Handle ID pour reconstituer l’opération.

Et si l’utilisateur utilise son propre PC non joint au domaine ?
Vous aurez quand même l’IP et, via 4624/5140, le compte (dommaine ou local) utilisé pour s’authentifier sur le partage.

La corbeille/Office crée des événements “fantômes”
Les applications (Office, AV, indexation) ouvrent brièvement les fichiers. Filtrez les processus connus ou les accès ReadAttributes si vous voulez des événements plus “métiers”.

Bonnes pratiques de mise en œuvre

  • Principe de moindre bruit : auditez ce qui est utile (dossiers sensibles, opérations critiques) plutôt que tout le serveur.
  • Segmentez : différenciez les dossiers sensibles (lecture/écriture/suppression auditées) des dossiers “ouverts” (lecture seule).
  • Qualité des noms : imposez une résolution DNS fiable (A/PTR) pour traduire IP ↔ noms de postes.
  • Centralisez : intégrez à un SIEM/WEF; créez des alertes (ex. 4663 Delete sur Finance).
  • Documentez : conserver une “fiche d’audit” par partage (chemin NTFS, SACL, GPO associée, taille de log, contacts).

Exemple de procédure complète (du zéro au rapport)

  1. Configurer les sous‑catégories avec auditpol (File System, File Share).
  2. Augmenter le journal Sécurité à 256 Mo minimum (wevtutil sl Security /ms:268435456).
  3. Poser la SACL sur D:\Partages\Finance (groupe Authenticated Users, Succès/Échecs, Read/Write/Delete, héritage).
  4. Créer une Vue personnalisée (4663 sur D:\Partages\Finance, 5140 sur \\SRV-FIC\Finance).
  5. Contrôler : ouvrir/modifier/supprimer un fichier test → vérifier que 4663/5140 sont bien générés.
  6. Automatiser la collecte via le script PowerShell d’extraction et planifier un export quotidien (Export-Csv).
  7. Option SIEM : créer une règle d’alerte (suppression, écriture hors horaires, accès depuis IP anormale).

Récapitulatif visuel des IDs utiles

IDNomUtilité pour la traçabilitéNote
5140Network share object accessedDonne ShareName, Share Path, Client/Source Address, utilisateurFiltre simple pour lier utilisateur ↔ IP
4663An attempt was made to access an objectDonne l’objet NTFS, l’accès (Read/Write/Delete) et l’utilisateurTrès fréquent : limiter la SACL
4624Account successfully logged onDonne Workstation Name, Logon Type (3 = SMB, 10 = RDP)Complément pour retrouver le poste
5145Detailed File ShareDétails très fins sur l’accès partagéÀ activer seulement pour l’investigation
4656/4658Handle requested/closedCohésion avec 4663 via Handle IDUtile pour réassembler une opération

Informations complémentaires utiles

  • Quota de journaux : augmentez la taille du journal Sécurité (au moins 256 Mo) pour éviter l’écrasement d’événements.
  • Filtrer par Handle ID : dans un 4663, le champ Handle ID est commun aux événements 4656/4663 d’une même opération; cela aide à reconstituer la séquence d’accès.
  • Corrélation rapide : dans beaucoup de cas, l’ID 5140 seul suffit : il mentionne le chemin UNC, l’utilisateur et l’IP du client.
  • Scénarios RDS ou services : pour un accès initié par un service ou une session Remote Desktop, le Workstation Name peut être le serveur RDS; combinez alors 4624 type 10 (RDP) pour retrouver le poste d’origine.
  • Alerte en temps réel : utilisez l’Assistant de tâches de l’Observateur d’événements ou une solution SIEM pour déclencher un courriel ou une action PowerShell dès qu’un ID 5140/4663 critique est journalisé.

Conclusion

En activant l’audit aux bons niveaux (stratégie, partage, dossier) puis en filtrant les événements clés 4663 et/ou 5140, vous disposez, pour chaque accès, du nom d’utilisateur, de l’adresse IP et très souvent du nom NetBIOS/Workstation du poste ayant accédé au dossier partagé. L’ensemble s’automatise aisément avec PowerShell et s’intègre parfaitement à un SIEM ou à Windows Event Forwarding pour une traçabilité pérenne.

Sommaire