Code : MO-AD-007 | Version : 1.3 | Date : 26 juin 2026 | Auteur : Cédric LEGRAND
MAJ v1.2 (15/04/2026) : ajout de la section 4.6 « Audit du compte
krbtgt» avec seuils 90/180 jours (cible Microsoft/ANSSI), capture PowerShell de référence et nouvelle ligne « Comptes critiques » dans la grille de vérification. Renvoi explicite vers MO-AD-002 pour la procédure de rotation.
MAJ v1.1 (14/04/2026) : ajout de l'étape de traitement des comptes détectés compromis (forcer changement MDP / désactiver), avertissement sur l'interaction PasswordNeverExpires/ChangePasswordAtLogon, et note historique de l'audit du 14/04 (5 comptes « toto » et 2 comptes compromis traités). La rotation des MDP critiques est documentée dans le MO-AD-008.
Procédure d'audit périodique (mensuelle) des comptes et groupes Active Directory du domaine BTS SIO. Détecte les dérives de sécurité : comptes inactifs, fantômes, groupes privilégiés, attributs de sécurité, adminCount orphelins.
| Élément | Détail |
|---|---|
| Domaine | Active Directory (bts.sio) |
| Outil | PowerShell (module ActiveDirectory) via WinRM |
| DC cible | DC1 (10.0.112.2) |
| Fréquence | Mensuelle ou avant intervention critique |
| Durée | 20-30 minutes |
Attention : Ne pas ajouter le compte WinRM au groupe Protected Users (bloque NTLM).
Étape 1 -- Domain Admins + AccountNotDelegated
Get-ADGroupMember "Admins du domaine" | ForEach-Object {
$u = Get-ADUser $_.SamAccountName -Properties AccountNotDelegated, Enabled, LastLogonDate
[PSCustomObject]@{
Compte = $_.SamAccountName; Actif = $u.Enabled
NonDelegable = $u.AccountNotDelegated; DernierLogin = $u.LastLogonDate
}
} | Format-Table -AutoSize
Résultat 13/04/2026 : 4 DA (fghoua, pribeiro, mmartinez, clegrand), tous NonDelegable=True.
Correction : Set-ADUser <compte> -AccountNotDelegated $true
Étape 2 -- Schema Admins et Enterprise Admins = vides
Get-ADGroupMember (Get-ADGroup -Filter {SID -like "*-518"}) # Schema
Get-ADGroupMember (Get-ADGroup -Filter {SID -like "*-519"}) # Enterprise
Résultat 13/04/2026 : les deux groupes sont vides (après nettoyage).
$cutoff = (Get-Date).AddDays(-90)
Get-ADComputer -Filter {LastLogonDate -lt $cutoff -and Enabled -eq $true} `
-Properties LastLogonDate, OperatingSystem |
Select Name, LastLogonDate, OperatingSystem | Sort LastLogonDate
Correction : Set-ADComputer -Identity "<nom>" -Enabled $false -Description "Desactive <date>"
Résultat 13/04/2026 : 7 machines désactivées, 3 en surveillance, 71 actives.
# Desactives
Get-ADUser -Filter {Enabled -eq $false} -Properties LastLogonDate, Description |
Select SamAccountName, Name, LastLogonDate, Description
# Jamais connectes (actifs)
Get-ADUser -Filter {LastLogonDate -notlike "*" -and Enabled -eq $true} -Properties whenCreated |
Select SamAccountName, whenCreated
Résultat 13/04/2026 : 7 désactivés (dont krbtgt, Invite = normal), 4 jamais connectés (étudiants récents).
Get-ADGroup -Filter {adminCount -eq 1} -Properties adminCount | Select Name
Get-ADUser -Filter {adminCount -eq 1} -Properties adminCount | Select SamAccountName
Les groupes système (Administrateurs, DA, Opérateurs...) ont légitimement adminCount=1. Un groupe fonctionnel (ex. GGProfs) avec adminCount=1 est orphelin.
Correction : Set-ADGroup -Identity "GGProfs" -Clear adminCount
Get-GPO -All | Select DisplayName, GpoStatus | Sort DisplayName
GPOs de sécurité attendues : SEC - Disable LLMNR, SEC - Audit Avance, SEC - Event Log Size, Securite - Audit PowerShell.
Résultat 13/04/2026 : 18 GPOs, 4 GPO de sécurité actives.
Le compte krbtgt signe l'ensemble des tickets Kerberos émis par les KDCs du domaine. Une clé non rotatée depuis longtemps expose au risque Golden Ticket : un attaquant qui parvient à extraire le hash krbtgt peut forger des tickets arbitraires tant que la clé n'a pas été changée deux fois.
$k = Get-ADUser krbtgt -Properties PasswordLastSet, Created
$days = ((Get-Date) - $k.PasswordLastSet).Days
[PSCustomObject]@{
Compte = $k.SamAccountName
"Date derniere rotation" = $k.PasswordLastSet
"Jours depuis rotation" = $days
} | Format-Table -AutoSize
if ($days -gt 90) { Write-Warning "krbtgt non rote depuis $days jours" }
if ($days -gt 180) { Write-Error "ALERTE : krbtgt non rote depuis $days jours" }
Seuils retenus : avertissement à 90 jours, alerte à 180 jours (cible Microsoft / ANSSI). L'objectif est d'anticiper la rotation avant l'expiration de la fenêtre de sécurité, pas d'attendre le jour anniversaire.
Action corrective : si le seuil d'avertissement est franchi, planifier la rotation via MO-AD-002 — Rotation du compte krbtgt (double rotation espacée de 12 à 48 heures).

NonDelegable=True| Problème | Solution |
|---|---|
| WinRM 401 après Protected Users | Kerberos : kinit Administrateur@BTS.SIO puis wmiexec.py -k. |
| Get-ADGroupMember échoue (nom français) | Utiliser le SID : Get-ADGroup -Filter {SID -like "*-518"}. |
| Machine désactivée bloque un poste | Réactiver : Set-ADComputer -Identity "<nom>" -Enabled $true. |
| adminCount revient à 1 | Le compte est encore dans un groupe protégé. Vérifier MemberOf. |