Odonia Cyber a conduit un audit de configuration et de durcissement de l'environnement Active Directory de Northwind Logistics
entre le 20 juin 2026 et le 28 juin 2026. L'analyse couvre le domaine corp.northwind-logistics.lan,
ses politiques de groupe (GPO), la gestion des comptes privileges, les delegations Kerberos et les chemins d'attaque lateraux.
L'audit a ete conduit en mode boite grise depuis un compte utilisateur standard fourni par le client (c.bernard).
L'audit a ete realise en mode boite grise (compte utilisateur standard c.bernard fourni par le client) depuis un poste integre au domaine.
Aucune exploitation active n'a ete conduite : l'analyse se limite a la collecte passive de configuration et a l'identification de chemins d'attaque potentiels.
Exception : le dechiffrement du cpassword GPP (MS14-025) a ete realise hors ligne via openssl - aucune modification du système.
| Outil | Version | Perimetre d'analyse | Type |
|---|---|---|---|
| PingCastle | 3.2.0.1 | Scoring global, politiques de sécurité AD, legacy protocols, objets obsoletes | Scoring |
| SharpHound / BloodHound | Dump complet | Graphe d'attaque, chemins vers Domain Admin, ACL, delegations, SPN | Chemins |
| Impacket | GetUserSPNs · GetNPUsers | Verification surface AS-REP Roasting · Kerberoasting · extraction hash TGS | Kerberos |
| CrackMapExec | Version recente | Enumeration SMB, signature SMB, SMBv1, sessions actives | SMB |
| openssl (hors ligne) | AES-256-CBC | Dechiffrement cpassword GPP (MS14-025) - traitement hors ligne uniquement | GPP |
| PowerView / ADSIEdit | En memoire | Enumeration manuelle ACL, delegation, membres groupes, MachineAccountQuota | Enumeration |
| Date | Phase | Activite |
|---|---|---|
2026-06-18 | Initialisation | Reception des acces, configuration de l'environnement d'audit, kick-off technique avec le DSI |
2026-06-20 | Collecte | Execution SharpHound (dump complet), PingCastle HealthCheck XML, enumeration SMB via CrackMapExec, collecte SYSVOL |
2026-06-21 | Analyse | Analyse BloodHound (graphes, chemins DA), identification chemins escalade, dechiffrement GPP hors ligne, requetes Kerberoasting |
2026-06-25 | Redaction | Redaction du rapport narratif, qualification des 21 constats, elaboration du plan d'action en 20 actions |
2026-06-28 | Restitution | Presentation des resultats au DSI et a la direction, remise du rapport final et des livrables |
helpdesk (SID S-1-5-21-...-1109) detient sur l'objet racine du domaine les ACE GetChanges ET GetChangesAll positionnes explicitement (IsInherited: false). Cette combinaison est strictement equivalente au privilege DCSync : extraction a distance de tous les hash NTLM du domaine, y compris le compte racine krbtgt. Le compte est mutualise (non nominatif), son mot de passe n'expire jamais.
corp_domains.json Aces[] : RightName=GetChanges · RightName=GetChangesAll · IsInherited=false · PrincipalSID=S-1-5-21-...-1109
helpdesk possede l'ACE GenericAll (contrôle total) directement sur le groupe Domain Admins. Cette permission permet a quiconque detenant le compte helpdesk d'ajouter n'importe quel compte au groupe Domain Admins sans etre lui-meme Domain Admin.
corp_groups.json · Domain Admins Aces[] : PrincipalSID=S-1-5-21-...-1109 · RightName=GenericAll · IsInherited=false
svc_sql est membre direct du groupe Domain Admins (admincount=true). Il porte deux SPN MSSQLSvc, le rendant Kerberoastable par tout utilisateur authentifie. Son mot de passe n'a pas ete change depuis le 1er juin 2021 (5 ans), n'expire jamais, sans PSO. Un attaquant demande le TGS, le cracke hors ligne et obtient les credentials d'un Domain Admin.
raw_enum.txt l.20 : $krb5tgs$23$*svc_sql@CORP$... · corp_users.json l.143-161 : hasspn=true · admincount=true · pwdneverexpires=true · pwdlastset=2021-06-01
Remove-ADGroupMember -Identity "Domain Admins" -Members "svc_sql" -Confirm:$false puis changement de mot de passe (25 caracteres minimum aleatoires). Envisager migration vers gMSA.
IT Admins est membre direct du groupe Domain Admins. L'unique membre de IT Admins est c.bernard. Par heritage transitif, c.bernard est Domain Admin effectif. Son attribut admincount=0 : ce privilege n'est pas visible dans les outils classiques de gestion AD. Ce compte a ete fourni comme "compte utilisateur standard" pour cet audit. Il etait en realite Domain Admin depuis l'origine. Aucune exploitation requise.
corp_groups.json : Domain Admins Members inclut SID ...-1120 (IT Admins) · IT Admins Members inclut SID ...-1110 (c.bernard) · corp_users.json l.275-298 : c.bernard admincount=0
Remove-ADGroupMember -Identity "Domain Admins" -Members "IT Admins" -Confirm:$false puis reevaluation des droits reels necessaires pour c.bernard.
Groups.xml dans SYSVOL (accessible par tout utilisateur authentifie) contient le champ cpassword du compte Administrateur local. Chiffre avec la cle AES-256-CBC publiee publiquement par Microsoft en 2014. Mot de passe dechiffre par Odonia Cyber durant l'audit : Local*P4ssword!. Ce mot de passe est identique sur les 5 machines (haslaps=false sur tout le parc).
sysvol_groups.xml l.4-7 : cpassword=j1Uyj3Vx8TY9LtLZil2uAuZkFQA/4latT76ZwgdHdhw · corp_computers.json : haslaps=false x5
unconstraineddelegation=true. Un attaquant qui compromet SRV-APP01 (facilite par son OS EOL Windows Server 2012 R2 et son SMBv1 actif) peut coercer l'authentification de DC01 (PetitPotam/PrinterBug), capturer le TGT de DC01$ en memoire et effectuer un DCSync complet.
corp_computers.json l.46 : "unconstraineddelegation": true · raw_enum.txt l.34-35 : findDelegation SRV-APP01$ Unconstrained (non-DC)
Set-ADComputer -Identity "SRV-APP01" -TrustedForDelegation $false. Si delegation fonctionnellement necessaire, configurer la delegation contrainte avec les services specifiques requis.
DONT_REQUIRE_PREAUTH est active sur le compte j.martin (compte legacy appli RH). N'importe qui, meme sans credential de domaine, peut demander un message AS-REP chiffre avec le hash du mot de passe de j.martin, puis le dechiffer hors ligne sans limite de tentatives.
raw_enum.txt l.27-28 : GetNPUsers retourne $krb5asrep$23$j.martin@CORP:... · corp_users.json l.83 : dontreqpreauth=true
Set-ADAccountControl -Identity "j.martin" -DoesNotRequirePreAuth $false. Verifier si ce flag est encore necessaire pour l'application RH.
krbtgt (cle maitresse du système d'authentification Kerberos) n'a pas eu son mot de passe change depuis le 11 mars 2019 (7,3 ans). Tout Golden Ticket forge depuis cette date reste valide aujourd'hui. C'est un amplificateur : si ODN-AD-001 ou ODN-AD-003 ont deja ete exploites avant cet audit, la compromission peut etre silencieusement active.
New-KrbtgtKeys.ps1. Lancer deux fois a 10 heures d'intervalle minimum pour invalider tous les Golden Tickets existants. Planifier un renouvellement annuel.
raw_enum.txt l.50 : LockoutThreshold = 0
haslaps=false sur les 5 machines. Le mot de passe administrateur local est identique partout et est deja compromis (ODN-AD-005). Mouvement lateral immediat via Pass-the-Hash. T1550.002
L'analyse BloodHound a permis d'identifier 6 chemins distincts permettant a un utilisateur non-privilegie
d'atteindre les privileges Domain Admin en exploitant uniquement des mauvaises configurations (sans CVE necessaire).
Tous sont exploitables depuis le compte c.bernard fourni pour cet audit - qui est lui-meme Domain Admin effectif (ODN-AD-004).
impacket-secretsdump corp/helpdesk@DC01 -just-dc extrait tous les hash NTLM + krbtgt. Forge d'un Golden Ticket indefiniment valide.
svc_sql (SPN: MSSQLSvc/dc01.corp.northwind-logistics.lan:1433).
Crackage hors ligne du condensat RC4 avec Hashcat. Mot de passe date de juin 2021, sans expiration.
Duree estimee : quelques heures selon la robustesse du mot de passe.
| # | Point de depart | Technique | Etapes | Duree estimee | Criticite |
|---|---|---|---|---|---|
PATH-01 | helpdesk | DCSync (GetChanges + GetChangesAll) | 2 | Moins de 10 min | Critique |
PATH-02 | helpdesk | GenericAll sur Domain Admins | 1 | 5 minutes | Critique |
PATH-03 | Tout utilisateur | Kerberoasting svc_sql (DA direct) | 2 | Quelques heures | Critique |
PATH-04 | c.bernard | Imbrication IT Admins -> DA (aucune exploitation) | 0 | Immediat | Critique |
PATH-05 | Tout utilisateur | GPP cpassword + Pass-the-Hash + LSASS dump | 3 | Immediat (mdp connu) | Critique |
PATH-06 | SRV-APP01 compromis | Delegation non contrainte + coercition DC + DCSync | 3 | Variable | Eleve |
| Priorite | Ref | Action | Horizon | Effort | Impact |
|---|---|---|---|---|---|
| P1 | ODN-AD-001/002 | Revoquer droits DCSync et GenericAll du compte helpdesk | 48h | Faible | Critique |
| P1 | ODN-AD-003 | Retirer svc_sql du groupe Domain Admins · changer mdp | 48h | Faible | Critique |
| P1 | ODN-AD-005 | Supprimer Groups.xml SYSVOL · changer mdp admin local x5 | 48h | Faible | Critique |
| P1 | ODN-AD-006 | Désactiver delegation non contrainte sur SRV-APP01 | 48h | Faible | Critique |
| P1 | ODN-AD-009 | Activer le verrouillage de compte (5 tentatives · 30 min) | 48h | Faible | Eleve |
| P1 | ODN-AD-004 | Retirer le groupe IT Admins de Domain Admins | 48h | Faible | Critique |
| P1 | ODN-AD-013 | Isoler SRV-APP01 et WS-LOGIS12 dans VLAN restreint | 48h | Moyen | Eleve |
| P2 | ODN-AD-008 | Renouveler le mot de passe krbtgt deux fois | 30j | Faible | Eleve |
| P2 | ODN-AD-010 | Deployer LAPS sur les 5 machines | 30j | Moyen | Eleve |
| P2 | ODN-AD-011 | Désactiver SMBv1 · activer signature SMB (SRV-APP01 · WS-LOGIS12) | 30j | Faible | Eleve |
| P2 | ODN-AD-007 | Supprimer flag DONT_REQ_PREAUTH sur j.martin | 30j | Faible | Eleve |
| P2 | ODN-AD-014 | Activer signature LDAP obligatoire sur DC01 | 30j | Faible | Modere |
| P2 | ODN-AD-012 | Reduire MachineAccountQuota a 0 | 30j | Faible | Eleve |
| P2 | ODN-AD-016 | Renforcer politique mots de passe : 14 caracteres · expiration 365j | 30j | Faible | Modere |
| P3 | ODN-AD-018 | Revision governance Domain Admins (membres legitimes uniquement) | 90j | Moyen | Modere |
| P3 | ODN-AD-019 | Supprimer compte helpdesk · creer comptes nominatifs support | 90j | Moyen | Modere |
| P3 | ODN-AD-017 | Deployer PSO pour comptes de service (25 caracteres) | 90j | Moyen | Modere |
| P3 | ODN-AD-013 | Planifier migration OS : Windows 10/11 et Windows Server 2022 | 90j | Eleve | Eleve |
| P3 | ODN-AD-015 | Retirer Authenticated Users du groupe Pre-Windows 2000 | 90j | Faible | Modere |
| P3 | ODN-AD-022 | Collecte GPO complementaire et audit droits locaux Tier-0 | 90j | Moyen | Modere |
| Contrôle CIS | Statut | Constat Northwind |
|---|---|---|
| Seuil de verrouillage > 0 | Non conforme | LockoutThreshold = 0 · raw_enum l.50 |
| Longueur min. mot de passe >= 14 | Non conforme | MinPasswordLength = 7 · raw_enum l.48 |
| Expiration des mots de passe activee | Non conforme | MaxPasswordAge = 0 (illimite) · raw_enum l.51 |
| Complexite des mots de passe | Conforme | ComplexityEnabled = True · raw_enum l.49 |
| Rotation krbtgt <= 180 jours | Non conforme | Dernier changement 2019-03-11 (7,3 ans) |
| Pas de compte de service dans Domain Admins | Non conforme | svc_sql membre Domain Admins |
| Pas d'imbrication opaque dans Domain Admins | Non conforme | Groupe IT Admins membre DA |
| Comptes admin nominatifs uniquement | Non conforme | Compte helpdesk mutualise avec droits DA |
| Pas de delegation non contrainte hors DC | Non conforme | SRV-APP01 unconstraineddelegation=true |
| SMBv1 desactive | Partiel | Conforme sur DC01 · Non conforme SRV-APP01 et WS-LOGIS12 |
| Signature SMB imposee | Partiel | Conforme sur DC01 · Non conforme SRV-APP01 et WS-LOGIS12 |
| Signature LDAP imposee sur DC | Non conforme | A-DCLdapSign identifie dans PingCastle |
| ms-DS-MachineAccountQuota = 0 | Non conforme | MAQ = 10 · domains.json l.22 |
| LAPS deploye | Non conforme | haslaps=false sur les 5 machines |
| Aucun cpassword dans SYSVOL | Non conforme | cpassword present et dechiffre : Local*P4ssword! |
| Pre-Windows 2000 : Authenticated Users absent | Non conforme | A-PreWin2000Anonymous identifie |
| Pas d'OS en fin de support | Non conforme | Windows 7 (WS-LOGIS12) + Windows Server 2012 R2 (SRV-APP01) |
| Pas de compte sans pre-auth Kerberos | Non conforme | j.martin dontreqpreauth=true |
| Pas de relation de confiance non securisee | Conforme | Aucun trust · domains.json Trusts=[] |
| Pas de SidHistory abusif | Conforme | NumberSidHistory=0 |
| Droits acces locaux Tier-0 (URA) | Non evaluable | Aucune GPO collectee · ODN-AD-022 |
| Membres admin locaux maitrisés (Restricted Groups) | Non evaluable | Aucune GPO/OU collectee · ODN-AD-022 |
| Politique d'audit avancee deployee | Non evaluable | Aucune GPO collectee · ODN-AD-022 |
Synthese : 3 conformes · 2 partiels · 15 non conformes · 3 non evaluables (gap GPO)
| Event ID | Description | Priorite |
|---|---|---|
4768/4769 | Demandes TGT/TGS · détecter Kerberoasting (RC4 pour des comptes normalement AES) | Critique |
4625 | Echecs d'authentification · password spray et force brute | Eleve |
4672 | Privileges speciaux assignes · escalade de privileges | Eleve |
4728/4732/4756 | Ajout membre groupe sécurité · détecter ajout non-autorise dans Domain Admins | Critique |
4742 | Modification compte ordinateur · MachineAccountQuota abuse | Eleve |
5136 | Modification objet AD · modifications ACL, delegation | Eleve |
4776 | Validation credentials NTLM · détecter Pass-the-Hash | Eleve |
| Compte | Groupes privilegies | SPN | Dern. connexion | Pass. exp. | Risque |
|---|---|---|---|---|---|
svc_sql | Domain Admins | Oui | 2026-06-18 | Jamais | Critique |
helpdesk | DCSync ACE + GenericAll/DA | Non | 2026-06-18 | Jamais | Critique |
c.bernard | IT Admins -> Domain Admins (transitif) | Non | 2026-06-20 | Jamais (admincount=0 masque) | Critique |
svc_backup | Backup Operators | Oui | 2026-06-17 | Jamais | Eleve |
a.dubois | Domain Admins | Non | 2026-06-18 | Non conforme (illimitee) | Eleve |
administrator | Domain Admins | Non | 2026-06-18 | Jamais (built-in) | Modere |
| Compte | Type | SPN | Groupe | PwdLastSet | Vers DA |
|---|---|---|---|---|---|
svc_sql | Kerberoastable | MSSQLSvc/dc01.corp.northwind-logistics.lan:1433 | Domain Admins | 2021-06-01 | OUI (direct) |
svc_backup | Kerberoastable | AGPMServer/srv-file01.corp.northwind-logistics.lan | Backup Operators | 2022-01-15 | Indirect |
svc_web | Kerberoastable | HTTP/srv-app01.corp.northwind-logistics.lan | Domain Users | 2022-09-03 | Foothold SRV-APP01 |
j.martin | AS-REP Roastable | N/A | Domain Users | N/A (dontreqpreauth) | Acces initial sans credential |
// Tous les chemins vers Domain Admins depuis des utilisateurs standard
MATCH p=shortestPath((u:User {enabled:true})-[*1..]->(g:Group {name:"DOMAIN ADMINS@CORP.NORTHWIND-LOGISTICS.LAN"}))
WHERE NOT u.admincount=true
RETURN p
// Comptes Kerberoastables avec privileges eleves
MATCH (u:User {hasspn:true}) WHERE u.enabled=true
MATCH p=(u)-[:MemberOf*1..]->(g:Group)
WHERE g.highvalue=true
RETURN u.name, u.serviceprincipalnames, g.name
// Comptes avec GenericAll ou GetChanges sur des objets privilegies
MATCH p=(u:User)-[:GenericAll|GetChanges|GetChangesAll]->(t)
WHERE t.highvalue=true OR t.domain='CORP.NORTHWIND-LOGISTICS.LAN'
RETURN u.name, type(relationships(p)[0]), t.name
// AS-REP Roastable
MATCH (u:User {dontreqpreauth:true, enabled:true}) RETURN u.name
# Sur DC01, depuis une session PowerShell en tant qu'administrateur : # 1. Exporter toutes les GPO au format XML Get-GPOReport -All -ReportType XML -Path "C:\GPO_Export_$(Get-Date -Format yyyyMMdd).xml" # 2. Exporter les droits d'acces locaux secedit /export /cfg C:\secedit_export.cfg /areas USER_RIGHTS # 3. Relancer SharpHound avec la methode GPOLocalGroup .\SharpHound.exe -c All --CollectMethod GPOLocalGroup # Ces artefacts permettront d'evaluer : # - User Rights Assignment (Deny log on locally pour les comptes Tier-0) # - Restricted Groups (membres administrateurs locaux imposes par GPO) # - Politique d'audit avancee (couverture de journalisation)
| Sous-score | Valeur | Signification |
|---|---|---|
| GlobalScore (max des 4) | 80 / 100 | Posture tres degradee · porte par PrivilegiedGroupScore |
| PrivilegiedGroupScore | 80 / 100 | Gestion des comptes privilegies · sous-score le plus grave |
| AnomalyScore | 70 / 100 | Anomalies de configuration (SMBv1, LDAP, krbtgt, delegation) |
| StaleObjectsScore | 65 / 100 | Objets obsoletes (OS EOL, comptes sans expiration) |
| TrustScore | 0 / 100 | Aucune relation d'approbation · point positif |
Les signataires attestent avoir pris connaissance des constatations presentees dans ce rapport et s'engagent a traiter les vulnerabilites identifiees selon le plan d'action convenu.