Le protocole qui relie tout - énumération, mouvement latéral, capture de hashes, relay attacks. SMB est au cœur de la majorité des attaques Windows en réseau. Maîtriser ses versions, ses permissions et ses vecteurs d'attaque est indispensable.
INTERMÉDIAIREOFFENSIF + DÉFENSIF4 – 5h
6.1
SMB - Histoire, Fonctionnement & Ports
SMB (Server Message Block) est né en 1983 chez IBM, conçu par Barry Feigenbaum pour le système DOS d'IBM PC Network. À l'origine, il tournait sur NetBIOS - un protocole réseau des années 80 au-dessus de TCP/IP. Microsoft l'adopte et le renomme CIFS dans les années 90, en y ajoutant des fonctionnalités mais aussi des vulnérabilités structurelles qui persistent jusqu'aujourd'hui.
40 ans de dette technique
SMBv1 a été décrit par l'équipe de sécurité Microsoft comme "the ancient mariner of protocols". Conçu pour des réseaux locaux lents des années 80, il nécessite des centaines d'échanges réseau pour une simple opération de lecture - et transporte quatre décennies de décisions de design dangereuses. Son éradication complète prend encore du temps : certains équipements industriels et NAS anciens ne supportent que SMBv1.
Client (Windows/Linux) Serveur Windows
│ │
│ ── Negotiate Protocol ───────────► │ Sélection de la version SMB
│ ◄─ Negotiate Response ──────────── │
│ │
│ ── Session Setup ────────────────► │ Authentification NTLM ou Kerberos
│ ◄─ Session Setup Response ──────── │
│ │
│ ── Tree Connect ─────────────────► │ Connexion au partage \\SERVEUR\PART
│ ◄─ Tree Connect Response ───────── │
│ │
│ ── Create / Read / Write ────────► │ Opérations sur les fichiers
│ ◄─ Responses ───────────────────── │
│ │
│ ── Tree Disconnect / Logoff ─────► │ Déconnexion
Ports utilisés
Port
Protocole
Usage
Statut
445/TCP
SMB Direct (over TCP)
SMB depuis Windows 2000 - standard moderne
Actif par défaut
139/TCP
NetBIOS Session Service
SMB via NetBIOS - héritage Windows 9x/NT
Legacy
137/UDP
NetBIOS Name Service
Résolution de noms NetBIOS
Legacy
138/UDP
NetBIOS Datagram
Datagrammes NetBIOS
Legacy
Vérifier l'état du service SMB et la connectivitéPOWERSHELL
# Services SMBGet-Service LanmanServer # Serveur SMB (partage de ressources)Get-Service LanmanWorkstation # Client SMB (connexion aux partages distants)# Connexions SMB actives
netstat -ano | findstr ":445"
netstat -ano | findstr ":139"# Test de connectivité SMB vers une cibleTest-NetConnection-ComputerName 192.168.56.10 -Port 445
UNC Paths - Syntaxe d'accès aux partages
Format UNC (Universal Naming Convention)SYNTAXE
\\SERVEUR\PARTAGE\Dossier\Fichier.txt
│ │ │
│ │ └── Chemin dans le partage (optionnel)
│ └── Nom du partage
└── Nom ou IP du serveur
Exemples :
\\192.168.56.10\C$ ← Partage admin C$ (disque entier, admin only)
\\DC01\SYSVOL ← SYSVOL sur contrôleur de domaine
\\FILESERVER\Données ← Partage personnalisé
\\127.0.0.1\IPC$ ← Inter-Process Communication (null sessions)
6.2
Versions SMB - Évolution & Implications Sécurité
Version
OS d'introduction
Sécurité
Statut actuel
SMBv1 / CIFS
Windows NT 4.0 / DOS 1983
Critique - EternalBlue, Relay trivial
Désactivé par défaut (Win10 1709+)
SMBv2.0
Windows Vista / Server 2008
Redesign complet - HMAC-SHA256
Supporté
SMBv2.1
Windows 7 / Server 2008 R2
+ Request leasing
Supporté
SMBv3.0
Windows 8 / Server 2012
Chiffrement AES-CCM, Multichannel
Supporté
SMBv3.1.1
Windows 10 / Server 2016
Pre-auth SHA-512, AES-128 GCM
Défaut moderne - recommandé
SMBv1 - Pourquoi il est catastrophique
Vulnérabilités structurelles
Zéro défense par design
Aucun chiffrement - trafic entier en clair. Signature optionnelle - Man-in-the-Middle trivial. Null Sessions - accès anonyme aux informations système. EternalBlue (MS17-010) - vulnérabilité kernel exploitée par WannaCry et NotPetya en 2017, à partir de NSA leaks.
Désactivation
Priorité absolue en production
Désactivé par défaut depuis Windows 10 version 1709. Pour les systèmes plus anciens ou les serveurs, la désactivation est manuelle et doit être vérifiée. Certains NAS et équipements industriels legacy ne supportent que SMBv1 - les isoler sur un VLAN dédié.
Vérifier, désactiver SMBv1 + activer le chiffrement et la signaturePOWERSHELL
# ── Vérifier l'état des versions SMB ────────────────────────────────Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol, EnableSMB2Protocol
# ── Désactiver SMBv1 (deux méthodes complémentaires) ────────────────Set-SmbServerConfiguration-EnableSMB1Protocol$false-ForceDisable-WindowsOptionalFeature-Online-FeatureName"SMB1Protocol"-NoRestart# Vérifier via DISMGet-WindowsOptionalFeature-Online-FeatureName"SMB1Protocol"# ── Activer le chiffrement SMBv3 ────────────────────────────────────Set-SmbServerConfiguration-EncryptData$true-Force# Tous les partagesSet-SmbShare-Name"Sensible"-EncryptData$true# Partage spécifique# ── Activer la signature SMB (protège contre le relay) ──────────────Set-SmbServerConfiguration-RequireSecuritySignature$true-ForceSet-SmbClientConfiguration-RequireSecuritySignature$true-Force# ── Voir la version négociée pour les connexions actives ────────────Get-SmbConnection | Select-Object ServerName, ShareName, Dialect, Encrypted, Signed
# ── CRÉER ───────────────────────────────────────────────────────────New-SmbShare-Name"Public" `
-Path"C:\Partages\Public" `
-FullAccess"Everyone" `
-Description"Partage public de test"New-SmbShare-Name"Donnees" `
-Path"C:\Partages\Donnees" `
-ReadAccess"BUILTIN\Users" `
-ChangeAccess"DOMAINE\Comptabilite" `
-FullAccess"BUILTIN\Administrators"# ── LISTER ──────────────────────────────────────────────────────────Get-SmbShare | Select-Object Name, Path, Description, ScopeName
# Partages administratifs intégrés - toujours présents :# C$, D$... → Partages admin des lecteurs (Admins uniquement)# ADMIN$ → C:\Windows (accès distant admin)# IPC$ → Inter-Process Communication (null sessions)# SYSVOL → (si DC) Politiques de groupe# NETLOGON → (si DC) Scripts de connexion# ── VOIR LES PERMISSIONS D'UN PARTAGE ───────────────────────────────Get-SmbShareAccess-Name"Public"# ── MODIFIER LES PERMISSIONS ────────────────────────────────────────Revoke-SmbShareAccess-Name"Public"-AccountName"Everyone"-ForceGrant-SmbShareAccess-Name"Public" `
-AccountName"Utilisateurs authentifiés" `
-AccessRight Read -Force# ── MODIFIER UN PARTAGE ─────────────────────────────────────────────Set-SmbShare-Name"Donnees" `
-Description"Accès restreint" `
-EncryptData$true `
-FolderEnumerationMode AccessBased # Cache les fichiers inaccessibles# ── SUPPRIMER ───────────────────────────────────────────────────────Remove-SmbShare-Name"Public"-Force
Partages administratifs cachés - le suffixe $
Un partage dont le nom se termine par $ est caché - il n'apparaît pas dans l'énumération net view standard ni dans l'Explorateur Windows. Il reste cependant accessible si on connaît son nom exact, et visible par tous les outils système.
Partages cachés - création, invisibilité et détectionCMD + POWERSHELL
# Créer un partage caché personnaliséNew-SmbShare-Name"BackupSecret$" `
-Path"C:\Backup" `
-FullAccess"BUILTIN\Administrators"# N'apparaît PAS dans :
net view \\localhost # Invisible pour les utilisateurs ordinaires# Accessible directement si on connaît le nom :
net use Z: \\localhost\BackupSecret$
# Toujours VISIBLE par les outils admin :Get-SmbShare# PowerShell le voit
net share # cmd.exe le voit aussi
6.4
Permissions SMB vs Permissions NTFS - La Règle Fondamentale
Quand un utilisateur accède à un partage SMB, deux contrôles d'accès sont appliqués en série. Comprendre leur interaction est essentiel - la majorité des erreurs de configuration vient d'une incompréhension de cette relation.
Évaluation des accès SMB - deux couches en série
Utilisateur → Connexion SMB au port 445
└── Couche 1 : Permissions du PARTAGE (définies sur le partage lui-même)
└── Si autorisé → continue vers Couche 2
└── Couche 2 : ACL NTFS (définies sur les fichiers/dossiers)
Accès FINAL = MIN(Permission SMB, Permission NTFS) - toujours le plus restrictif
Tableau des intersections
Permission SMB
Permission NTFS
Accès effectif
Full Control
Full Control
Full Control
Full Control
Read
Read - NTFS gagne
Read
Full Control
Read - SMB gagne
No Access
Full Control
No Access - SMB bloque tout
Full Control
No Access
No Access - NTFS bloque tout
Bonne pratique reconnue dans l'industrie
Mettre le partage SMB en Full Control - Everyone (ou Authenticated Users), et gérer les droits fins uniquement via les ACLs NTFS. Le SMB devient un simple portail d'entrée et NTFS fait le vrai travail de contrôle. Résultat : une seule couche à maintenir, moins d'erreurs, audit plus simple.
Implémentation de la bonne pratique SMB + NTFSPOWERSHELL
# Partage SMB ouvert - le portail d'entréeNew-SmbShare-Name"Projet"-Path"C:\Projets\Alpha"-FullAccess"Everyone"# Gestion fine via ACLs NTFS uniquement
icacls "C:\Projets\Alpha" /grant "Alice:(OI)(CI)M"
icacls "C:\Projets\Alpha" /grant "Bob:(OI)(CI)R"
icacls "C:\Projets\Alpha" /remove "Everyone"# Résultat : Alice a Modify, Bob a Read - aucune confusion entre les deux couches
Erreur classique - Double Full Control Everyone
Un admin accorde Full Control sur le partage SMB ETFull Control sur les ACLs NTFS à Everyone. Le dossier est alors accessible sans restriction à n'importe qui sur le réseau. Détectable avec NetExec en quelques secondes depuis n'importe quelle machine du réseau, authentifiée ou non.
6.5
Sessions et Fichiers Ouverts
Surveiller et fermer les sessions SMB activesPOWERSHELL
Surveiller C$, ADMIN$, IPC$ depuis IPs inattendues
5141
Déconnexion d'un partage
Corrélation avec 5140
5142
Partage créé
Monitoring admin - partages non autorisés
5143
Partage modifié
Changement de permissions inattendu
5144
Partage supprimé
Effacement de traces
5145
Accès à un objet via partage réseau
Accès fichier distant - très verbeux
6.6
Énumération des Partages - Boîte à Outils
Depuis Windows
net.exe, PowerShell, WMI - énumération locale et distanteCMD + POWERSHELL
rem ── NET.EXE (natif) ────────────────────────────────────────────────
net share rem Partages locaux
net view \\192.168.56.10 rem Partages d'une machine distante
net view \\192.168.56.10 /all rem Inclut les partages cachés ($)
net use Z: \\192.168.56.10\Donnees /user:alice P@ssw0rd
net use Z: /delete
# ── PowerShell (local) ──────────────────────────────────────────────Get-SmbShareGet-SmbShare | Where-Object {$_.Name -notmatch'\$$'} # Exclure les cachés# ── PowerShell (distant avec credentials) ───────────────────────────$cred = Get-CredentialGet-SmbShare-CimSession (New-CimSession-ComputerName 192.168.56.10 -Credential$cred)
# ── WMI ─────────────────────────────────────────────────────────────Get-WmiObject Win32_Share | Select-Object Name, Path, Type, Description
Depuis Kali Linux
smbclient - connexion interactive et transfertsBASH
# Lister les partages (anonyme)
smbclient -N-L //192.168.56.10
# Lister avec credentials
smbclient -U"alice%P@ssw0rd"-L //192.168.56.10
# Se connecter à un partage - shell interactif
smbclient //192.168.56.10/Donnees -U"alice%P@ssw0rd"# Commandes dans le shell smbclient :# smb: \> ls ← Lister# smb: \> get secret.txt ← Télécharger# smb: \> put payload.exe ← Uploader# smb: \> recurse ON ← Mode récursif# smb: \> mget * ← Tout télécharger
# Fingerprint SMB d'un hôte (version, signing, hostname)
netexec smb 192.168.56.10
# Lister les partages avec credentials
netexec smb 192.168.56.10 -u alice -p P@ssw0rd --shares# Tester les null sessions (sans authentification)
netexec smb 192.168.56.10 -u''-p''--shares
netexec smb 192.168.56.10 -u'nonexistant'-p''--shares# Scan d'un réseau entier
netexec smb 192.168.56.0/24 --shares# OUTPUT typique :# SMB 192.168.56.10 445 WIN10LAB [*] Windows 10.0 Build 19041# SMB 192.168.56.10 445 WIN10LAB [+] WORKGROUP\alice:P@ssw0rd# SMB 192.168.56.10 445 WIN10LAB Share Permissions Remark# SMB 192.168.56.10 445 WIN10LAB ADMIN$ Remote Admin# SMB 192.168.56.10 445 WIN10LAB C$ Default share# SMB 192.168.56.10 445 WIN10LAB IPC$ READ Remote IPC# SMB 192.168.56.10 445 WIN10LAB Public READ,WRITE ← ecriture ouverte# Exécuter une commande via SMB (style PsExec)
netexec smb 192.168.56.10 -u alice -p P@ssw0rd -x"whoami"
netexec smb 192.168.56.10 -u alice -p P@ssw0rd -X"Get-LocalUser"# PowerShell# Pass-the-Hash (hash NT - pas besoin du mot de passe en clair)
netexec smb 192.168.56.10 -u alice -H"aad3b435b51404eeaad3b435b51404ee:<HASH_NT>"
Null Sessions - L'accès anonyme
Une Null Session est une connexion au partage IPC$ sans aucun credentials. Elle permettait historiquement d'énumérer les utilisateurs, groupes, politiques de mot de passe et partages d'un Windows NT/2000 sans aucune authentification.
Null sessions - test depuis Kali et blocage depuis WindowsBASH + POWERSHELL
# Depuis Kali - rpcclient null session
rpcclient -N-U"" 192.168.56.10
# rpcclient $> enumdomusers ← Lister les utilisateurs AD# rpcclient $> enumdomgroups ← Lister les groupes# rpcclient $> querydominfo ← Infos du domaine# Avec netexec
netexec smb 192.168.56.10 -u''-p''--users# ── Blocage depuis Windows ───────────────────────────────────────────Set-ItemProperty-Path"HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" `
-Name"RestrictAnonymous"-Value 2 # 2 = Pas d'accès anonymeSet-ItemProperty-Path"HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" `
-Name"RestrictAnonymousSAM"-Value 1
6.7
Mapping de Lecteurs Réseau
Monter, lister, lire/écrire et démonter des partages réseauPOWERSHELL
# ── MAPPING PERSISTANT ──────────────────────────────────────────────# Via New-PSDrive (session PowerShell uniquement)New-PSDrive-Name"Z"-PSProvider FileSystem `
-Root"\\192.168.56.10\Donnees" `
-Credential (Get-Credential) -Persist# Via net use (persistant au reboot)
net use Z: \\192.168.56.10\Donnees /user:DOMAINE\alice P@ssw0rd /persistent:yes
# ── VOIR LES LECTEURS MAPPÉS ────────────────────────────────────────Get-PSDrive-PSProvider FileSystem | Where-Object {$_.Root -like"\\*"}
net use
Get-WmiObject Win32_MappedLogicalDisk | Select-Object Name, ProviderName, Access
# ── DÉMONTER ────────────────────────────────────────────────────────
net use Z: /delete
Remove-PSDrive-Name"Z"# ── ACCÈS DIRECT VIA UNC (sans monter de lecteur) ───────────────────Get-ChildItem"\\192.168.56.10\Donnees"Copy-Item"C:\local.txt""\\192.168.56.10\Donnees\remote.txt"Get-Content"\\192.168.56.10\Donnees\config.ini"
6.8
Risques & Vecteurs d'Attaque SMB
Inventaire des risques principaux
Risque
Condition
Impact
Détection rapide
Partages ouverts
Full Control Everyone sur SMB et NTFS
Lecture/écriture/suppression sans auth
netexec smb <IP> -u '' -p '' --shares
C$ / ADMIN$ actifs
Compte admin local avec même mot de passe
Disque entier accessible, SAM/SYSTEM extractibles
netexec smb <IP> -u admin -p pass --shares
SMB Signing absent
RequireSecuritySignature = false
NTLM Relay Attack (chapitre 7)
netexec smb <CIDR> --gen-relay-list
SMBv1 actif
EnableSMB1Protocol = true
EternalBlue, relay trivial, null sessions
Get-SmbServerConfiguration
Credentials dans SYSVOL
Scripts de login avec mots de passe en clair
Mots de passe récupérables par tout utilisateur du domaine
netexec smb <DC> -M spider_plus
Vérifier le SMB Signing - côté offensif et défensifBASH + POWERSHELL
# ── Depuis Kali - identifier les cibles sans SMB signing ────────────
netexec smb 192.168.56.0/24 --gen-relay-list /tmp/no_signing.txt
# → Génère la liste des machines sans signing = cibles de relay attack (ch. 7)
cat /tmp/no_signing.txt
# ── Depuis Windows - vérifier et activer le signing ─────────────────Get-SmbServerConfiguration | Select-Object RequireSecuritySignature, EnableSecuritySignature
Get-SmbClientConfiguration | Select-Object RequireSecuritySignature
Set-SmbServerConfiguration-RequireSecuritySignature$true-ForceSet-SmbClientConfiguration-RequireSecuritySignature$true-Force
netexec smb <CIDR> --shares = cartographie instantanée des partages d'un réseau entier. --gen-relay-list = identifier les cibles sans SMB signing pour relay attack (chapitre 7). C$ accessible = disque entier lisible - SAM, SYSTEM, NTDS.dit extractibles (chapitres 8 et 12). Pass-the-Hash natif dans netexec avec -H - pas besoin du mot de passe en clair, seulement le hash NT.
Défensif - Priorités de durcissement
1. Désactiver SMBv1 - priorité absolue, aucune excuse en 2024. 2. Activer SMB Signing - bloque les relay attacks. 3. Chiffrement SMBv3 - protège contre le sniffing réseau. 4. Event ID 5140 = surveiller les accès à C$, ADMIN$, IPC$ depuis des IPs inattendues. Scanner régulièrement en interne avec netexec pour détecter les partages ouverts avant les attaquants.
TP 1
Partage EVERYONE FullAccess & Connexion depuis Kali
TP 06-ACréer un partage vulnérable, s'y connecter depuis Kali, détecter les accès, sécuriserINTERMÉDIAIRE
Prérequis
VM Windows (admin) + VM Kali sur le même réseau. Remplacer <IP_WINDOWS> par l'IP réelle de la VM Windows.
Objectifs
Créer un partage volontairement ouvert (Everyone Full Access)
S'y connecter depuis Kali avec smbclient - lire et déposer un fichier
Observer les sessions actives et les Event ID 5140
Sécuriser le partage et confirmer le blocage
Créer LabShare - Full Access EveryonePOWERSHELL
# Créer le dossier et les fichiers de testNew-Item-ItemType Directory -Path"C:\LabSMB"-Force | Out-NullSet-Content"C:\LabSMB\readme.txt"-Value"Partage de test - Chapitre 6 SMB"Set-Content"C:\LabSMB\confidentiel.txt"-Value"DONNEES SENSIBLES"# Créer le partage ouvert (Full Access Everyone)New-SmbShare-Name"LabShare" `
-Path"C:\LabSMB" `
-FullAccess"Everyone" `
-Description"Partage de lab - volontairement ouvert"# ConfirmerGet-SmbShareAccess-Name"LabShare"Write-Host"Partage cree : \\$env:COMPUTERNAME\LabShare"-ForegroundColor Yellow
$ip = Get-NetIPAddress-AddressFamily IPv4 |
Where-Object {$_.IPAddress -ne'127.0.0.1'} |
Select-Object-First 1 -ExpandProperty IPAddress
Write-Host"IP Windows : $ip"-ForegroundColor Cyan
smbclient et netexec - accès anonyme au partage ouvertBASH
WINDOWS_IP="192.168.56.10" # Adapter à votre IP# Test de connectivité
nmap -p 445 $WINDOWS_IP --open# Lister les partages (anonyme)
smbclient -N-L //$WINDOWS_IP
# Connexion anonyme au partage ouvert
smbclient -N //$WINDOWS_IP/LabShare
# smb: \> ls# smb: \> get confidentiel.txt /tmp/confidentiel.txt# smb: \> put /etc/hostname hosted_file.txt# smb: \> exit# Netexec - énumération rapide
netexec smb $WINDOWS_IP --shares-u''-p''
netexec smb $WINDOWS_IP --shares-u'nonexist'-p''# Impacket null session
impacket-smbclient ''@$WINDOWS_IP
Sessions actives, Event 5140, révocation et nettoyagePOWERSHELL
# Sessions SMB actives pendant l'attaqueGet-SmbSession | Select-Object ClientComputerName, ClientUserName, NumOpens, Dialect
# Event ID 5140 - accès au partageGet-WinEvent-FilterHashtable@{
LogName = 'Security'
Id = 5140
StartTime = (Get-Date).AddMinutes(-15)
}-EA SilentlyContinue | ForEach-Object {
$xml = [xml]$_.ToXml()
$data = $xml.Event.EventData.Data
[PSCustomObject]@{
Heure = $_.TimeCreated
IP = ($data | Where-Object {$_.Name -eq'IpAddress'}).'#text'
Compte = ($data | Where-Object {$_.Name -eq'SubjectUserName'}).'#text'
Partage = ($data | Where-Object {$_.Name -eq'ShareName'}).'#text'}
} | Format-Table-AutoSize# Sécuriser - révoquer Everyone, autoriser seulement les utilisateurs authentifiésRevoke-SmbShareAccess-Name"LabShare"-AccountName"Everyone"-ForceGrant-SmbShareAccess-Name"LabShare" `
-AccountName"Utilisateurs authentifiés"-AccessRight Read -ForceGet-SmbShareAccess-Name"LabShare"# Nettoyage completRemove-SmbShare-Name"LabShare"-ForceRemove-Item"C:\LabSMB"-Recurse-ForceWrite-Host"Nettoyage termine"-ForegroundColor Green
TP 2
Énumération avec NetExec & Détection des Partages Ouverts
TP 06-BScanner les partages d'une cible, détecter les accès non authentifiés, générer un rapportAVANCÉ
Objectifs
Fingerprinter la cible SMB - version, signing, hostname
Tester null sessions et credentials valides avec NetExec
Générer la liste des machines sans SMB signing
Analyser les Event ID 4625 et 5140 côté Windows
Générer un rapport de recommandations automatisé
Fingerprint, null sessions, enumeration avec NetExecBASH
TARGET="192.168.56.10"
# Étape 1 : Fingerprint SMB (version, signing, hostname)
netexec smb $TARGET
# Étape 2 : Test null session
echo "=== NULL SESSION ==="
netexec smb $TARGET -u''-p''--shares# Étape 3 : Avec credentials valides
echo "=== AVEC CREDENTIALS ==="
netexec smb $TARGET -u'restricteduser'-p'Restricted@2024!'--shares# Étape 4 : Spider - lire le contenu des partages accessibles
netexec smb $TARGET -u'restricteduser'-p'Restricted@2024!' \
-M spider_plus --shares# Étape 5 : Utilisateurs locaux via SMB
netexec smb $TARGET -u'restricteduser'-p'Restricted@2024!' \
--local-auth--users# Étape 6 : Générer liste des machines sans SMB signing
netexec smb $TARGET --gen-relay-list /tmp/no_signing.txt
cat /tmp/no_signing.txt
# Si l'IP apparaît → SMB signing absent → vulnérable au relay (Chapitre 7)
Analyser Event 4625 (logons échoués) et 5140 (accès partages)POWERSHELL
SMB né en 1983 - SMBv1 cumule EternalBlue (WannaCry 2017), relay trivial, null sessions. SMBv3.1.1 avec chiffrement AES-256 est la seule version acceptable en production. La règle : désactiver SMBv1, forcer SMBv3, activer le signing.
Permissions
SMB + NTFS - toujours le plus restrictif
Deux couches évaluées en série. Bonne pratique : Full Control Everyone sur le partage SMB + ACLs fines sur NTFS. IPC$ en null session = énumération sans credentials possible si RestrictAnonymous n'est pas à 2.
Pour l'Offensif
NetExec - cartographie réseau instantanée
netexec smb <CIDR> --shares pour les partages ouverts. --gen-relay-list pour identifier les cibles sans signing. C$ accessible = disque entier disponible. Pass-the-Hash avec -H sans mot de passe. SYSVOL = scripts avec mots de passe en clair.
Pour le Défensif
Durcissement en 4 étapes
1. Désactiver SMBv1. 2. Forcer SMB Signing. 3. Activer le chiffrement SMBv3. 4. Surveiller Event 5140 sur C$, ADMIN$, IPC$ depuis des IPs inattendues. Scanner son propre réseau avec netexec régulièrement.
Expliquer l'architecture SMB - négociation, authentification, Tree Connect
Identifier les ports 445/TCP, 139/TCP et leurs usages
Distinguer SMBv1, SMBv2 et SMBv3 par leurs capacités de sécurité
Créer, modifier et supprimer des partages avec New-SmbShare et Set-SmbShare
Appliquer la règle SMB + NTFS et expliquer l'intersection des permissions
Détecter les partages ouverts avec netexec smb --shares
Tester une null session avec smbclient -N et rpcclient
Générer une liste de cibles sans SMB signing avec --gen-relay-list
Bloquer les null sessions via RestrictAnonymous = 2 dans le registre
Analyser les Event ID 5140 et 4625 pour détecter les accès SMB suspects
Le Chapitre 7 - Vecteurs d'Attaque SCF & LNK est la suite directe : maintenant que tu maîtrises SMB, tu vas comprendre comment un attaquant exploite un simple partage pour capturer des hashes NTLM sans aucun accès authentifié - juste en déposant un fichier .lnk ou .scf malveillant et en attendant qu'un utilisateur ouvre le dossier.