Chapitre 01

Utilisateurs, Groupes
& Identités

Le SID est la fondation de toute décision d'accès sur Windows. Ce chapitre couvre l'anatomie des identifiants de sécurité, les comptes et groupes intégrés, leurs implications offensives et défensives, et comment auditer ces éléments via PowerShell et les Event IDs.

DÉBUTANT → INTERMÉDIAIRE OFFENSIF + DÉFENSIF 3 – 4h
1.1

Le SID - Structure & Rôle

Un Security Identifier (SID) est l'identifiant unique qu'utilise Windows pour représenter toute entité de sécurité : utilisateur, groupe, processus, ordinateur. Contrairement au nom d'affichage (qui peut changer librement), le SID est immuable une fois créé - c'est lui qui fait foi dans toutes les décisions d'accès du système.

Analogie : Le SID est au système Windows ce que le numéro de sécurité sociale est à un citoyen. Peu importe si vous changez de nom ou de prénom, votre numéro reste identique à vie. Quand Windows décide si un processus peut lire un fichier, il compare des SIDs - jamais des noms.
Anatomie d'un SID - décomposition visuelle
Exemple : SID du compte Administrateur local
S
Préfixe
1
Révision
5
Authority
21
Sub-Auth
1234567890-0987654321-1122334455
Domain ID (3×32-bit)
500
RID
Préfixe "S"
Toujours "S"
Marque le début de tout SID Windows
Révision
Toujours 1
Version du format - n'a jamais changé depuis NT
Identifier Authority
5 = NT_AUTHORITY
0=NULL · 1=World · 2=Local · 5=NT (le plus courant)
Sub-Authority 21
NON_UNIQUE
Indique qu'un Domain ID unique suit - propre à chaque machine/domaine
Domain ID
3 valeurs 32-bit
Identifiant unique de la machine ou du domaine AD - généré à l'installation
RID (Relative ID)
500 = Admin
Identifie l'objet DANS ce domaine - 500/501 réservés, ≥1000 pour les comptes créés
Well-Known SIDs - identiques sur toutes les machines Windows

Ces SIDs sont fixes et universels - ils ne dépendent pas du domaine ni de la machine. Un attaquant ou un analyste peut les utiliser directement dans les ACLs ou les requêtes d'audit sans connaître le domaine cible.

SIDNomUsage & risque sécurité
S-1-0-0NobodyAucune identité - rarement utile
S-1-1-0EveryoneTout utilisateur y compris anonymes - Risque ACL
S-1-2-0LocalUtilisateurs connectés localement (console)
S-1-5-18LocalSystemCompte système le plus puissant - Cible finale
S-1-5-19LocalServiceService avec droits réduits, anonyme sur réseau
S-1-5-20NetworkServiceService avec authentification réseau machine
S-1-5-32-544AdministratorsGroupe admins locaux - Compromission totale
S-1-5-32-545UsersGroupe utilisateurs standard
S-1-5-32-546GuestsGroupe invités - Énumération SMB si activé
S-1-5-32-551Backup OperatorsLecture tous fichiers + dump SAM - Escalade quasi-garantie
S-1-5-21-…-500Administrateur localRID 500 = admin built-in, même renommé - Priorité d'attaque
S-1-5-21-…-501Invité localRID 501 - désactivé par défaut
S-1-5-21-…-1000+Comptes créés manuellementRID ≥ 1000 pour tous les comptes normaux
Offensif

Lors d'une énumération, obtenir un SID se terminant par -500 confirme que c'est l'Administrateur built-in même s'il a été renommé en "john" ou "maintenance". impacket-secretsdump cible ce compte en priorité car il n'est pas soumis au verrouillage par défaut sur le réseau local.

Défensif

Des événements contenant S-1-5-18 indiquent une action du système lui-même - c'est normal. En revanche, un S-1-5-21-…-500 utilisé activement en dehors d'une maintenance planifiée est un signal d'alerte. Croiser avec l'Event ID 4624 (connexion réussie) pour identifier l'origine.

Commandes essentielles
Inspecter et manipuler les SIDsPOWERSHELL
# Voir son propre SID whoami /user # Voir les SIDs de tous ses groupes (avec les attributs Enabled/Disabled) whoami /groups # Convertir un SID en nom lisible $sid = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-32-544") $sid.Translate([System.Security.Principal.NTAccount]) # Retourne : BUILTIN\Administrators # Convertir un nom en SID $account = New-Object System.Security.Principal.NTAccount("Administrators") $account.Translate([System.Security.Principal.SecurityIdentifier]) # Lister tous les comptes locaux avec leurs SIDs Get-WmiObject Win32_UserAccount | Select-Object Name, SID, Disabled
1.2

Comptes Utilisateurs Intégrés

Windows crée automatiquement plusieurs comptes à l'installation. Chacun a un rôle précis, un SID fixe, et des implications sécurité distinctes. Connaître leur état par défaut est fondamental pour l'audit et l'offensif.

Focus - Administrateur (RID 500)
Point critique

Le compte Administrateur ne peut pas être supprimé - seulement désactivé. Même renommé en "jean-pierre" ou "maintenance", son SID se termine toujours par -500, ce qui le trahit lors d'une énumération. Il est désactivé par défaut sur Windows 10/11 (sauf Server, où il est activé).

Bonne pratique : le désactiver, créer un compte admin avec un nom non évident et un RID ≥ 1000, et surveiller toute tentative d'activation du compte -500.

Inspecter les comptes intégrésPOWERSHELL
# État du compte Administrator Get-LocalUser -Name "Administrator" # État du compte Guest Get-LocalUser -Name "Guest" | Select-Object Name, Enabled, SID # Voir TOUS les comptes locaux (actifs + inactifs) Get-LocalUser | Select-Object Name, Enabled, SID, Description | Format-Table -AutoSize
Offensif

impacket-secretsdump cible le compte RID 500 en priorité car il n'est pas soumis au verrouillage par défaut en LAN. Même si le compte est désactivé localement, ses credentials stockés dans la SAM peuvent être extraits si on obtient un accès SYSTEM - et utilisés pour du Pass-the-Hash via le réseau.

1.3

Comptes Système

Ces comptes sont fondamentalement différents des comptes utilisateurs classiques : ils n'ont pas de mot de passe, pas de profil de connexion interactive, et ne peuvent pas être utilisés pour ouvrir une session normalement. Ils servent de contexte d'exécution aux services Windows.

Comprendre le modèle

Quand un service Windows démarre, il doit s'exécuter sous une identité pour avoir accès aux ressources. Le choix de cette identité détermine ce que le service peut faire : lire des fichiers, accéder au réseau, lire la mémoire d'autres processus. Choisir le mauvais compte (trop de droits) = surface d'attaque agrandie.

Comparatif des trois comptes système
Compte
Niveau de privilège
Accès réseau
Usage typique
LocalSystem
S-1-5-18
Maximum - équivaut SYSTEM
Peut lire/modifier tout le système, accéder à la mémoire kernel
S'authentifie comme le compte machine (DOMAIN\HOSTNAME$)
Services critiques OS : Winlogon, Print Spooler, RPC
LocalService
S-1-5-19
Faible - droits réduits
Accès limité aux ressources locales non sensibles
Accès réseau anonyme - aucune authentification
Services non critiques : DHCP Client, DNS Client
NetworkService
S-1-5-20
Faible - droits réduits
Similaire à LocalService mais avec accès réseau
S'authentifie comme le compte machine (comme LocalSystem)
Services réseau : WCF, IIS Worker Process
Services sous LocalSystem - énumérationPOWERSHELL
# Lister les services tournant sous SYSTEM (LocalSystem) Get-CimInstance Win32_Service | Where-Object {$_.StartName -eq "LocalSystem"} | Select-Object Name, StartName, State | Format-Table # Un service sous LocalSystem compromis = accès SYSTEM garanti # Vérifier les services avec des permissions faibles (Chapitre 11) Get-CimInstance Win32_Service | Where-Object {$_.StartName -eq "LocalSystem" -and $_.State -eq "Running"} | Select-Object Name, PathName | Format-Table -AutoSize
Offensif

Un processus sous LocalSystem peut accéder à tout le système : lire la mémoire des autres processus (y compris LSASS), modifier le registre système, installer des drivers. C'est pourquoi l'escalade vers SYSTEM est l'objectif final d'une compromission locale - et pourquoi SeImpersonatePrivilege (Chapitre 10) est si précieux : il permet de passer de NetworkService à SYSTEM.

Piège - contexte partagé LocalService

Point critique souvent mal compris : si deux services tournent sous LocalService, la compromission de l'un permet d'attaquer l'autre directement car ils partagent le même contexte de sécurité. Windows Vista a partiellement mitigé cela avec des SIDs de service uniques par service - mais ce vecteur reste exploitable dans certaines configurations.

1.4

Groupes Locaux & Implications Sécurité

Les groupes définissent les droits et permissions attribués collectivement à tous leurs membres. L'appartenance à certains groupes constitue une voie d'escalade de privilèges directe - même sans être dans le groupe Administrators.

Groupes à fort impact sécurité - cliquer pour détailler
Critique Administrators S-1-5-32-544

Contrôle total du système. Tout compte dans ce groupe = compromission totale - accès aux ACLs, installation de services, accès LSASS.

  • Peut modifier n'importe quelle ACL NTFS, même sur des fichiers système
  • Peut installer des services et des drivers non signés (si Secure Boot désactivé)
  • Peut lire et dumper la mémoire de lsass.exe directement
  • Peut activer/modifier les politiques d'audit et effacer les logs
  • Accès complet au registre HKLM et à toutes ses branches
Très dangereux Backup Operators S-1-5-32-551

Groupe extrêmement sous-estimé - souvent oublié dans les audits. Il donne des capacités équivalentes à un admin pour les opérations fichiers et les dumps de secrets.

  • Peuvent lire et écrire tous les fichiers quelle que soit l'ACL NTFS (via SeBackupPrivilege + SeRestorePrivilege)
  • Peuvent copier SAM, SYSTEM, NTDS.dit via reg save ou ntdsutil
  • Peuvent se connecter et éteindre le système
  • Peuvent remplacer des fichiers système sur un Domain Controller
  • Sont considérés comme des "Service Administrators" dans AD
Offensif - Exploitation directe

Un compte membre de Backup Operators peut exécuter :
reg save HKLM\SAM C:\temp\sam.hiv
reg save HKLM\SYSTEM C:\temp\system.hiv
Puis extraire les hashes avec impacket-secretsdump - escalade vers SYSTEM garantie.

Accès distant Remote Management Users S-1-5-32-580

Autorisent l'accès WinRM/WSMan sans être admin. Utilisés pour les sessions PowerShell distantes et les configurations JEA (Chapitre 3).

  • Permet Enter-PSSession et Invoke-Command à distance sans droits admin
  • Accès au CIM/WMI distant via PowerShell
  • Impliqué dans les configurations JEA (Just Enough Administration) - Chapitre 3
  • Peut être utilisé comme vecteur de mouvement latéral si des scripts exécutent des commandes sensibles
Accès interactif Remote Desktop Users S-1-5-32-555

Autorisent la connexion RDP. Ne donnent pas de droits admin mais permettent l'accès interactif distant - suffisant pour exécuter du code et pivoter.

  • Connexion RDP (port 3389) sans être administrateur
  • Session bureau à distance complète - peut lancer des processus, accéder aux fichiers de l'utilisateur
  • Avec un credential dumped, permet la persistence via RDP
Pivoting réseau Network Configuration Operators S-1-5-32-556

Peuvent modifier les paramètres réseau : IP, DNS, routes. Potentiellement exploitable pour du DNS poisoning local ou du pivoting réseau.

  • Modification des interfaces réseau (adresses IP, masques)
  • Modification des serveurs DNS - vecteur de détournement de trafic
  • Ajout/suppression de routes réseau statiques
Énumération silencieuse Performance Log Users / Monitor Users S-1-5-32-559 / 558

Peuvent lire des compteurs de performance sans droits admin. Utilisables pour de l'énumération silencieuse de l'activité système.

  • Accès aux compteurs Performance Monitor (CPU, mémoire, processus actifs)
  • Peut révéler des informations sur les processus, services et activité réseau
  • Rarement audité - discrète source d'informations de reconnaissance
Commandes de gestion des groupes
Groupes locaux - gestion complètePOWERSHELL
# Lister tous les groupes locaux avec leurs SIDs Get-LocalGroup | Select-Object Name, SID, Description # Lister les membres d'un groupe - avec leurs SIDs complets Get-LocalGroupMember -Group "Administrators" Get-LocalGroupMember -Group "Backup Operators" # Ajouter un utilisateur à un groupe Add-LocalGroupMember -Group "Administrators" -Member "restricteduser" # Méthode classique avec net.exe net localgroup Administrators net localgroup "Backup Operators" restricteduser /add # Vérification des membres de Backup Operators (audit SOC) Get-LocalGroupMember -Group "Backup Operators" | Select-Object Name, SID, PrincipalSource
1.5

Gestion via net.exe & PowerShell

Deux approches coexistent sous Windows pour gérer utilisateurs et groupes. net.exe est omniprésent et disponible sur toutes les versions, mais PowerShell offre plus de contrôle, une meilleure intégration avec le pipeline, et des sorties structurées. Connaître les deux est indispensable - en forensics, vous retrouverez les deux dans les logs.

Comparatif net.exe vs PowerShell
net.exe - Traditionnel
PowerShell - Moderne
net user alice P@ss /add
New-LocalUser -Name "alice" -Password (...)
net user alice /active:no
Disable-LocalUser -Name "alice"
net localgroup Admins alice /add
Add-LocalGroupMember -Group "Admins" -Member "alice"
net user
Get-LocalUser
net localgroup
Get-LocalGroup
net user alice
Get-LocalUser -Name "alice"
Créer un utilisateur complet - exemple commenté pas à pas
Création utilisateur - workflow completPOWERSHELL
# Étape 1 : Créer le mot de passe de manière sécurisée (jamais en clair dans le code) $password = ConvertTo-SecureString "P@ssw0rd!2024" -AsPlainText -Force # Étape 2 : Créer l'utilisateur avec tous ses attributs New-LocalUser -Name "restricteduser" ` -Password $password ` -FullName "Restricted User" ` -Description "Compte de test sécurité" ` -PasswordNeverExpires $true # Étape 3 : Vérifier la création + SID attribué (RID doit être ≥ 1000) Get-LocalUser -Name "restricteduser" | Select-Object Name, SID, Enabled # Étape 4 : Ajouter au groupe souhaité Add-LocalGroupMember -Group "Users" -Member "restricteduser"
Référence complète des cmdlets LocalUser & LocalGroup
*-LocalUser
Gestion des utilisateurs
PS
Get-LocalUser # Lister New-LocalUser # Créer Set-LocalUser # Modifier Remove-LocalUser # Supprimer Enable-LocalUser # Activer Disable-LocalUser # Désactiver
*-LocalGroup
Gestion des groupes
PS
Get-LocalGroup # Lister New-LocalGroup # Créer Add-LocalGroupMember # Ajouter Get-LocalGroupMember # Lister membres Remove-LocalGroupMember # Retirer
1.6

Désactivation de Windows Defender & Détection

Lab isolé uniquement

Ces techniques sont présentées exclusivement dans le cadre d'un environnement de lab isolé (réseau Host-Only, VM dédiée). Ne jamais appliquer sur un système de production. L'objectif est de comprendre les mécanismes pour mieux les détecter en SOC.

En lab offensif, Defender bloque la majorité des outils (Mimikatz, certains scripts Impacket, Responder...). Connaître les méthodes de désactivation est aussi indispensable pour la détection défensive de ces techniques dans un SIEM.

Méthode 1 - PowerShell (temporaire)
Désactivation via Set-MpPreferencePOWERSHELL
# Désactiver la protection en temps réel (le plus courant) Set-MpPreference -DisableRealtimeMonitoring $true # Vérifier l'état Get-MpPreference | Select-Object DisableRealtimeMonitoring # Ajouter une exclusion de dossier (moins bruyant qu'une désactivation totale) Add-MpPreference -ExclusionPath "C:\Tools" # Désactivation complète (nécessite Tamper Protection désactivé dans UI) Set-MpPreference -DisableIOAVProtection $true ` -DisableBehaviorMonitoring $true ` -DisableBlockAtFirstSeen $true ` -SubmitSamplesConsent 2 ` -MAPSReporting 0
Méthode 2 - Via GPO locale (persistant)
Chemin GPO locale - gpedit.msc
Ouvrir gpedit.msc (Group Policy Object Editor)
Computer Configuration
Administrative Templates
Windows Components
Microsoft Defender Antivirus
"Turn off Microsoft Defender Antivirus" → Enabled
Persiste au reboot - survit aux mises à jour Windows
Méthode 3 - Via le Registre
Désactivation via clé de registrePOWERSHELL
# Désactiver via la clé de politique Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender" ` -Name "DisableAntiSpyware" -Value 1 -Type DWord # Appliquer immédiatement sans redémarrage gpupdate /force # Pour vérifier l'état de Defender depuis le registre Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows Defender" -Name DisableAntiSpyware
Défensif - Détection

La désactivation de Defender génère des events spécifiques dans le log Microsoft-Windows-Windows Defender/Operational :

5001 - Real-time Protection désactivée
5004 - Configuration de Real-time Protection modifiée
5010 - Scan d'un fichier désactivé
5012 - Exécution du moteur désactivée

Un SIEM doit alerter immédiatement sur l'Event ID 5001. Il précède souvent l'exécution d'outils offensifs de quelques secondes à quelques minutes.

TP 1

Créer restricteduser et vérifier ses SIDs

TP 01-A Création d'utilisateurs, gestion de groupes, inspection des SIDs DÉBUTANT
Objectifs
  1. Créer un compte restricteduser avec des attributs complets
  2. Créer un groupe personnalisé RestrictedCmdlets
  3. Ajouter l'utilisateur aux groupes RestrictedCmdlets et Administrators
  4. Inspecter les SIDs générés et vérifier que le RID est ≥ 1000
  5. Comprendre la différence entre les SIDs locaux et les Well-Known SIDs
PowerShell Admin - VM WindowsPOWERSHELL
# Créer le mot de passe de façon sécurisée $pwd = ConvertTo-SecureString "Restricted@2024!" -AsPlainText -Force # Créer le compte utilisateur New-LocalUser -Name "restricteduser" ` -Password $pwd ` -Description "Compte de test - lab sécurité" ` -PasswordNeverExpires $true # Créer le groupe RestrictedCmdlets New-LocalGroup -Name "RestrictedCmdlets" ` -Description "Groupe JEA pour lab"
Groupes + Inspection des SIDsPOWERSHELL
# Ajouter aux deux groupes Add-LocalGroupMember -Group "RestrictedCmdlets" -Member "restricteduser" Add-LocalGroupMember -Group "Administrators" -Member "restricteduser" # ── VÉRIFICATION DES SIDs ────────────────────────────── # SID de l'utilisateur $user = Get-LocalUser -Name "restricteduser" Write-Host "SID utilisateur : $($user.SID)" # Attendu : se termine par -1001 ou -1002 (RID ≥ 1000) # SIDs de tous ses groupes $username = "restricteduser" $groups = Get-LocalGroup | Where-Object { (Get-LocalGroupMember -Group $_.Name -ErrorAction SilentlyContinue).Name ` -contains "$env:COMPUTERNAME\$username" } $groups | ForEach-Object { Write-Host "Groupe : $($_.Name) | SID : $($_.SID)" } # Attendu : Administrators = S-1-5-32-544 (Well-Known) # RestrictedCmdlets = S-1-5-21-...-XXXX (local)
Vérification via net.exeCMD
net user restricteduser net localgroup Administrators net localgroup RestrictedCmdlets
Résultats attendus

RID de restricteduser ≥ 1000 (ex: -1001). SID de Administrators = S-1-5-32-544. SID de RestrictedCmdlets = S-1-5-21-[domaine]-XXXX (local à cette machine).

TP 2

Audit des comptes actifs & Détection d'un backdoor

TP 01-B Identifier un compte suspect simulant un backdoor via PowerShell et Event IDs INTERMÉDIAIRE
Objectifs
  1. Simuler la création d'un compte backdoor (comme le ferait un attaquant)
  2. Écrire un script d'audit PowerShell pour détecter les anomalies
  3. Utiliser les Event IDs 4720 et 4732 pour retracer les actions
  4. Nettoyer l'environnement après l'exercice

Un attaquant ayant obtenu des droits admin crée souvent un compte discret avec un nom ressemblant à un compte système pour persister.

Simulation - PowerShell AdminPOWERSHELL
# Créer un compte caché simulant un backdoor # Notez : nom générique (svc_update), description vide, mdp ne expire pas $pwd = ConvertTo-SecureString "B@ckd00r!" -AsPlainText -Force New-LocalUser -Name "svc_update" ` -Password $pwd ` -Description "" ` -PasswordNeverExpires $true # L'attaquant l'ajoute au groupe Administrators Add-LocalGroupMember -Group "Administrators" -Member "svc_update" # Ces deux actions génèrent respectivement : # Event ID 4720 (création de compte) # Event ID 4732 (ajout à un groupe local)
Audit complet - anomalies et alertesPOWERSHELL
# ── PARTIE 1 : Vue d'ensemble des comptes actifs ────────────────── Write-Host "`n=== COMPTES LOCAUX ACTIFS ===" -ForegroundColor Cyan Get-LocalUser | Where-Object {$_.Enabled -eq $true} | ForEach-Object { $user = $_ # Vérifier si membre d'Administrators $isAdmin = $false try { $members = Get-LocalGroupMember -Group "Administrators" -ErrorAction Stop $isAdmin = $members.Name -contains "$env:COMPUTERNAME\$($user.Name)" } catch {} [PSCustomObject]@{ Nom = $user.Name SID = $user.SID Admin = $isAdmin MdpNoExpire = $user.PasswordNeverExpires DerniereConnexion = if ($user.LastLogon) { $user.LastLogon } else { "Jamais" } Description = $user.Description } } | Format-Table -AutoSize # ── PARTIE 2 : Alertes sur les anomalies ────────────────────────── Write-Host "`n=== ALERTES SÉCURITÉ ===" -ForegroundColor Red Get-LocalGroupMember -Group "Administrators" | ForEach-Object { $memberName = $_.Name.Split("\")[-1] $user = Get-LocalUser -Name $memberName -ErrorAction SilentlyContinue if ($user -and $user.Description -eq "") { Write-Host "[!] Admin sans description : $($_.Name) - SID: $($_.SID)" -ForegroundColor Yellow } if ($user -and $user.PasswordNeverExpires) { Write-Host "[!] MDP ne expire jamais : $($_.Name)" -ForegroundColor Yellow } }
Event IDs clés pour l'audit des comptes
Event IDLogDescription
4720SecurityCréation d'un compte utilisateur
4722SecurityActivation d'un compte désactivé
4723SecurityChangement de mot de passe (par l'utilisateur)
4728SecurityAjout à un groupe de sécurité global
4732SecurityAjout à un groupe de sécurité local
4738SecurityModification d'un compte utilisateur
Requêtes Event ID 4720 et 4732POWERSHELL
$startTime = (Get-Date).AddHours(-24) # Event 4720 - Créations de comptes (dernières 24h) Get-WinEvent -FilterHashtable @{ LogName = 'Security' Id = 4720 StartTime = $startTime } -ErrorAction SilentlyContinue | ForEach-Object { $xml = [xml]$_.ToXml() [PSCustomObject]@{ Heure = $_.TimeCreated NouveauCompte = ($xml.Event.EventData.Data | Where-Object {$_.Name -eq 'TargetUserName'}).'#text' CreePar = ($xml.Event.EventData.Data | Where-Object {$_.Name -eq 'SubjectUserName'}).'#text' } } | Format-Table -AutoSize # Event 4732 - Ajouts au groupe Administrators (dernières 24h) Get-WinEvent -FilterHashtable @{ LogName = 'Security' Id = 4732 StartTime = $startTime } -ErrorAction SilentlyContinue | Select-Object TimeCreated, Message | Format-List
Supprimer les comptes de testPOWERSHELL
# Supprimer les comptes créés durant les exercices Remove-LocalUser -Name "svc_update" Remove-LocalUser -Name "restricteduser" Remove-LocalGroup -Name "RestrictedCmdlets" # Vérifier que le nettoyage est complet Get-LocalUser | Select-Object Name, Enabled, SID
Bonne pratique

Toujours nettoyer les comptes de test après les exercices. Restaurer ensuite le snapshot VM pour repartir sur une base propre avant le prochain chapitre.

Résumé - Points clés à retenir

Pour l'Offensif
Vecteurs prioritaires

RID -500 identifie l'admin built-in même renommé. Backup Operators = escalade quasi-garantie vers dump SAM/NTDS. LocalSystem (S-1-5-18) = objectif final d'une compromission locale.

Pour le Défensif
Signaux d'alerte SOC

Event ID 4720 (création compte) + 4732 (ajout groupe) = surveiller en continu. Admin sans description + MDP non expirant + connexion récente inexpliquée = backdoor potentiel. Event ID 5001 = Defender désactivé.

  • Expliquer la structure d'un SID et identifier le RID depuis une chaîne SID
  • Citer les Well-Known SIDs critiques de mémoire (S-1-5-18, S-1-5-32-544, -500, -501)
  • Différencier les comptes intégrés (Administrator, Guest) des comptes système (SYSTEM, LocalService)
  • Identifier les groupes à risque - en particulier Backup Operators et Remote Management Users
  • Utiliser Get-LocalUser, Get-LocalGroup, Get-LocalGroupMember pour l'audit
  • Créer un utilisateur complet et l'ajouter à des groupes avec PowerShell
  • Écrire un script de détection d'anomalies dans les comptes administrateurs
  • Interroger les Event IDs 4720 et 4732 pour détecter des créations de comptes suspectes
  • Connaître les trois méthodes de désactivation de Defender et l'Event ID 5001 associé