Lab Durcissement Active Directory : AS-REP Roasting, Kerberoasting, privilèges et RDP
Plateforme : SecDojo (lab 182) Domaine :
secdojo.localPoints : 105 Résultat : ✅ 4 erreurs de configuration identifiées et corrigées, 4 flags récupérés
1. Objectif et contexte
Ce laboratoire consiste à identifier puis corriger quatre erreurs de configuration volontaires dans un domaine Active Directory. Chaque correction validée est confirmée par le remplissage du champ Description de l’objet concerné, qui contient le flag à soumettre.
Accès : RDP sur le contrôleur de domaine avec le compte sys_admin (membre de Domain Admins). Toutes les commandes ont été exécutées dans PowerShell, sur le contrôleur de domaine.
xfreerdp /v:<IP_DC> /u:sys_admin /p:'<mot_de_passe>' /cert:ignore /dynamic-resolution
Synthèse des erreurs de configuration
| Compte / objet | Erreur de configuration | Correction | Questions |
|---|---|---|---|
svc_backup |
Pré-authentification Kerberos désactivée (DONT_REQ_PREAUTH) |
Réactivation de la pré-authentification | Q1 à Q5 |
svc_monitoring |
SPN inutile HTTP/monitoringserver.secdojo.local |
Suppression du SPN | Q6 à Q11 |
RH |
Membre de Domain Admins |
Retrait du groupe | Q12 à Q15 |
svc_sql |
Droit RDP sur le contrôleur de domaine | Retrait du droit et du groupe | Q16 à Q21 |
2. Préalable : élévation des privilèges (UAC)
Première tentative de correction depuis une console PowerShell normale : la commande a échoué.
try { Set-ADAccountControl -Identity svc_backup -DoesNotRequirePreAuth $false -ErrorAction Stop } catch { $_.Exception.Message }
Insufficient access rights to perform the operation
Diagnostic avec whoami /groups (extrait) : le niveau d’intégrité est Medium et les groupes Domain Admins et BUILTIN\Administrators sont marqués « Group used for deny only ». Le jeton est filtré par l’UAC.
whoami /groups
BUILTIN\Administrators Alias S-1-5-32-544 Group used for deny only
SECDOJO\Domain Admins Group S-1-5-21-...-512 Group used for deny only
Mandatory Label\Medium Mandatory Level Label S-1-16-8192
Vérification des ACL de l’objet : Administrators et Domain Admins disposent bien des droits d’écriture. Le problème vient donc uniquement de la session non élevée.
(Get-Acl "AD:$((Get-ADUser svc_backup).DistinguishedName)").Access | Where-Object { $_.IdentityReference -match "sys_admin|Domain Admins|Administrators" } | Select IdentityReference, AccessControlType, ActiveDirectoryRights
IdentityReference AccessControlType ActiveDirectoryRights
BUILTIN\Administrators Allow ... WriteProperty, ExtendedRight, Delete, GenericRead, WriteDacl, WriteOwner
SECDOJO\Domain Admins Allow ... WriteProperty, ExtendedRight, GenericRead, WriteDacl, WriteOwner
💡 Solution : ouvrir PowerShell avec « Exécuter en tant qu’administrateur ». Toutes les corrections suivantes ont été faites dans cette console élevée (invite :
PS C:\Windows\system32>).
3. Partie 1 : AS-REP Roasting (Q1 à Q5)
Q1 — Nom de l’attaque
Demander un TGT pour un compte sans connaître ses identifiants correspond à l’AS-REP Roasting.
Réponse : C.
Q2 — Compte vulnérable
Get-ADUser -Filter 'DoesNotRequirePreAuth -eq $true' -Properties DoesNotRequirePreAuth | Select SamAccountName
SamAccountName
--------------
svc_backup
Réponse Q2 : svc_backup
Q3 et Q4
| # | Réponse |
|---|---|
| Q3 | C — documentation obsolète ou croyances erronées sur la compatibilité logicielle, ce qui expose à l’AS-REP Roasting |
| Q4 | DONT_REQ_PREAUTH, indicateur de l’attribut userAccountControl (valeur 0x400000 soit 4194304) |
Q5 — Correction et flag
État avant correction (dans la console non élevée) :
SamAccountName DoesNotRequirePreAuth Description
-------------- --------------------- -----------
svc_backup True {}
Correction dans la console élevée :
Import-Module ActiveDirectory
Set-ADAccountControl -Identity svc_backup -DoesNotRequirePreAuth $false
Get-ADUser svc_backup -Properties DoesNotRequirePreAuth, Description | Select SamAccountName, DoesNotRequirePreAuth, Description
SamAccountName DoesNotRequirePreAuth Description
-------------- --------------------- -----------
svc_backup False
La description se remplit après un court délai (script de validation du lab) :
Get-ADUser svc_backup -Properties Description | Select SamAccountName, Description
SamAccountName Description
-------------- -----------
svc_backup 8e5f9c2d4a0b46d0a93b70b61cbe9f2a
Flag Q5 : 8e5f9c2d4a0b46d0a93b70b61cbe9f2a
4. Partie 2 : Kerberoasting (Q6 à Q11)
Q6 — Nom de l’attaque
Obtenir le TGS d’un service : Kerberoasting.
Réponse : B.
Q7 — Comptes vulnérables
Get-ADUser -Filter 'ServicePrincipalName -like "*"' -Properties ServicePrincipalName | Select SamAccountName, ServicePrincipalName
SamAccountName ServicePrincipalName
-------------- --------------------
svc_monitoring {HTTP/monitoringserver.secdojo.local}
krbtgt {kadmin/changepw}
svc_sql {MSSQLSvc/sqlserver01.secdojo.local}
krbtgt est un compte système dont le SPN est interne à Kerberos, il est écarté. Le champ attendait plusieurs comptes séparés par des virgules (format « user1, user2… »).
Réponse Q7 (acceptée) : svc_monitoring, svc_sql
⚠️ Retour d’expérience : la saisie d’un seul compte (
svc_monitoringpuissvc_sql) était refusée. Il faut lire le format d’exemple du champ de réponse avant de soumettre.
Q8, Q9 et Q10
| # | Réponse |
|---|---|
| Q8 | B — un agent de supervision se connecte en sortie et n’héberge pas de service authentifié par Kerberos, donc un SPN n’a pas de raison d’être |
| Q9 | servicePrincipalName : HTTP/monitoringserver.secdojo.local |
| Q10 | D — supprimer le SPN défini sur le compte |
Q11 — Correction et flag
Set-ADUser svc_monitoring -ServicePrincipalNames @{Remove="HTTP/monitoringserver.secdojo.local"}
Get-ADUser svc_monitoring -Properties ServicePrincipalName, Description | Select SamAccountName, ServicePrincipalName, Description
SamAccountName ServicePrincipalName Description
-------------- -------------------- -----------
svc_monitoring {} 3d9b71a6e24547d2a0f1c06e0b6c91df
Flag Q11 : 3d9b71a6e24547d2a0f1c06e0b6c91df
ℹ️ Le SPN de
svc_sql(MSSQLSvc/sqlserver01.secdojo.local) est légitime et n’a pas été supprimé. Le risque de Kerberoasting sur ce compte se traite par un mot de passe long et aléatoire (ou un compte de service géré, gMSA).
5. Partie 3 : groupe trop privilégié (Q12 à Q15)
Q12
Réponse : Domain Admins (Admins du domaine), le groupe de domaine le plus privilégié.
Q13 — Utilisateur qui n’a rien à faire dans le groupe
Get-ADGroupMember "Domain Admins" | Select SamAccountName
SamAccountName
--------------
Administrator
sys_admin
RH
Réponse Q13 : RH. Administrator et sys_admin sont légitimes ; sys_admin est le compte de travail du lab et ne doit pas être retiré.
Q14
Réponse : A — les droits d’administrateur de domaine sont trop puissants pour être attribués sur la seule base de la confiance ou de l’influence ; le principe du moindre privilège s’applique.
Q15 — Correction et flag
Remove-ADGroupMember -Identity "Domain Admins" -Members RH -Confirm:$false
Get-ADGroupMember "Domain Admins" | Select SamAccountName
Get-ADUser RH -Properties Description | Select SamAccountName, Description
SamAccountName Description
-------------- -----------
RH 7c2a1f89b5e04332a9d38b2a16d812e1
Flag Q15 : 7c2a1f89b5e04332a9d38b2a16d812e1
⚠️ La sortie de la vérification de l’appartenance au groupe après retrait n’a pas été capturée. Bonne pratique : la conserver comme preuve.
6. Partie 4 : accès RDP au contrôleur de domaine (Q16 à Q21)
Q16
Réponse : Remote Desktop Users (Utilisateurs du Bureau à distance).
Q17
Réponse : B, SeRemoteInteractiveLogonRight.
Q18 — Utilisateur pouvant se connecter en RDP
Get-ADGroupMember "Remote Desktop Users" | Select SamAccountName
SamAccountName
--------------
svc_sql
Réponse Q18 : svc_sql
Q19 et Q20
| # | Réponse |
|---|---|
| Q19 | B — les comptes de service sont souvent vulnérables à Kerberos et ont des mots de passe faibles ou statiques ; un accès RDP au contrôleur de domaine aggrave fortement le risque de compromission du domaine |
| Q20 | A, Kerberoasting — svc_sql possède un SPN : n’importe quel utilisateur du domaine peut demander son TGS et casser le mot de passe hors ligne |
Q21 — Correction et flag
Le droit est aussi attribué directement dans la stratégie locale, ce que confirme l’export de la politique de sécurité :
secedit /export /cfg C:\Windows\Temp\sec.cfg
Select-String -Path C:\Windows\Temp\sec.cfg -Pattern "SeRemoteInteractiveLogonRight"
The task has completed successfully.
See log %windir%\security\logs\scesrv.log for detail info.
C:\Windows\Temp\sec.cfg:122:SeRemoteInteractiveLogonRight = svc_sql,*S-1-5-32-544
Le droit est donné à svc_sql et au groupe Administrators (S-1-5-32-544). Ce dernier doit être conservé pour ne pas perdre l’accès RDP de sys_admin. Correction appliquée : retrait de svc_sql du droit et du groupe.
(Get-Content C:\Windows\Temp\sec.cfg) -replace 'SeRemoteInteractiveLogonRight = svc_sql,\*S-1-5-32-544','SeRemoteInteractiveLogonRight = *S-1-5-32-544' | Set-Content C:\Windows\Temp\sec.cfg
secedit /configure /db C:\Windows\Security\Local.sdb /cfg C:\Windows\Temp\sec.cfg /areas USER_RIGHTS
gpupdate /force
Remove-ADGroupMember -Identity "Remote Desktop Users" -Members svc_sql -Confirm:$false
Lecture du flag :
Get-ADUser svc_sql -Properties Description | Select SamAccountName, Description
SamAccountName Description
-------------- -----------
svc_sql e3b0c44298fc1c149afbf4c8996fb924
Flag Q21 : e3b0c44298fc1c149afbf4c8996fb924
⚠️ Les sorties de
secedit /configureetgpupdatene sont pas reproduites ici car elles n’ont pas été capturées pendant le lab.
7. Récapitulatif des réponses
| Question | Réponse |
|---|---|
| Q1 | C, AS-REP Roasting |
| Q2 | svc_backup |
| Q3 | C |
| Q4 | DONT_REQ_PREAUTH |
| Q5 | 8e5f9c2d4a0b46d0a93b70b61cbe9f2a |
| Q6 | B, Kerberoasting |
| Q7 | svc_monitoring, svc_sql |
| Q8 | B |
| Q9 | servicePrincipalName : HTTP/monitoringserver.secdojo.local |
| Q10 | D, supprimer le SPN |
| Q11 | 3d9b71a6e24547d2a0f1c06e0b6c91df |
| Q12 | Domain Admins |
| Q13 | RH |
| Q14 | A |
| Q15 | 7c2a1f89b5e04332a9d38b2a16d812e1 |
| Q16 | Remote Desktop Users |
| Q17 | B, SeRemoteInteractiveLogonRight |
| Q18 | svc_sql |
| Q19 | B |
| Q20 | A, Kerberoasting |
| Q21 | e3b0c44298fc1c149afbf4c8996fb924 |
8. Points à retenir
- AS-REP Roasting : tout compte avec
DONT_REQ_PREAUTHpermet d’obtenir un hash cassable hors ligne sans identifiants. Ce paramètre doit rester désactivé (pré-authentification obligatoire). - Kerberoasting : un compte avec un SPN expose un TGS chiffré avec son mot de passe. Supprimer les SPN inutiles, utiliser des mots de passe longs et aléatoires ou des gMSA.
- Moindre privilège : aucun compte métier (
RH) ne doit appartenir àDomain Admins. Auditer régulièrement l’appartenance aux groupes privilégiés. - RDP sur les contrôleurs de domaine : à limiter aux administrateurs. Un compte de service ne doit jamais y avoir accès. Vérifier aussi le droit
SeRemoteInteractiveLogonRightdans les GPO, pas seulement les groupes. - Outil de travail : sous UAC, l’erreur « Insufficient access rights » peut venir d’une console non élevée. Vérifier le niveau d’intégrité avec
whoami /groups.
Références
- Attribut
userAccountControl— flagDONT_REQ_PREAUTH(0x400000) - Droit utilisateur Windows
SeRemoteInteractiveLogonRight - Technique MITRE ATT&CK T1558.004 — AS-REP Roasting
- Technique MITRE ATT&CK T1558.003 — Kerberoasting