Professional Documents
Culture Documents
Directory
1 Introduction
Active Directory est une solution déployée par un grand nombre d’en-
treprises pour la gestion et l’administration de leurs ressources informa-
tiques comprenant un grand nombre de systèmes Windows. Du fait de son
rôle central au sein du système d’information (SI), la compromission du
domaine conduit généralement à un accès complet à toutes les ressources de
l’entreprise. Une analyse des différentes possibilités de compromission d’une
architecture AD est donc obligatoire, aussi bien dans un contexte d’audit
en vue de durcissement, que lors d’une activité de réponse à incident.
Les analyses de sécurité effectuées aujourd’hui sont souvent centrées
autour de deux axes : l’hygiène des comptes du domaine (en particulier
des groupes d’administration), et l’audit des permissions sur les objets
de l’annuaire Active Directory [6]. Si ces analyses sont assurément indis-
pensables, la complexité des différents services offerts par Active Directory
32 Chemins de contrôle en environnement Active Directory
Concernant leur définition, tous les objets sont des instances d’un ou
plusieurs types d’objet spécifiés par leur attribut objectClass. Chaque
classe d’objet :
– est construite à partir d’une hiérarchie d’une ou plusieurs classes
mères ;
– hérite de ces classes mères un ensemble d’attributs ;
– définit d’autres attributs qui lui sont propres, facultatifs ou obliga-
toires.
36 Chemins de contrôle en environnement Active Directory
Par exemple, une machine du domaine est représentée par une in-
stance de la classe Computer, dont le chemin d’héritage est Computer
← User ← Organizational-Person ← Person ← Top. Elle définit elle-
même l’attribut Operating-System, mais hérite par exemple des attributs
Unicode-Pwd de la classe User et NT-Security-Descriptor de la classe
Top. Au sens Active Directory, une machine du domaine est donc un type
particulier d’utilisateur. Il faudra donc considérer cet héritage lors de notre
analyse.
Toutes les classes et attributs sont eux-mêmes des objets de l’annu-
aire, présents dans la partition schéma, du type Attribute-Schema et
Class-Schema. L’annuaire et les objets qu’il contient sont ainsi extensi-
bles arbitrairement par des applications tierces, puisqu’il est possible de
rajouter de nouvelles classes d’objets et de nouveaux attributs simplement
en créant de nouvelles entrées dans le schéma.
Les stratégies de groupes (ou GPO - Group Policy Objects) sont des
objets permettant de garder un parc de machines et un environnement
utilisateur homogènes, via la définition et l’application d’un ensemble
de paramètres de configuration pour les systèmes Windows. Ces objets
sont liés à des conteneurs dans l’annuaire et permettent de définir des
paramètres de configuration pour les objets contenus, d’exécuter des scripts,
de déployer des logiciels, etc.
Une GPO, représentée par un GUID, est composée de deux parties :
– un objet de GPO appelé GPC - Group Policy Container, de
classe Group-Policy-Container, enregistré dans l’annuaire (DN :
CN={<GUID>},CN=Policies,CN=System,DC=<domaine>) regroupant
les métadonnées de la GPO, et dont le DN est lié aux conteneurs
auxquels la GPO doit s’appliquer ;
– un dossier de GPO, enregistré dans le partage
réseau Sysvol, distribué entre les DC (chemin réseau :
\\<domaine>\SYSVOL\<domaine>\Policies\{<GUID>}) regroupant
une hiérarchie de fichiers qui contiennent les paramètres, scripts ou
exécutables à appliquer.
L’analyse des GPO devra donc prendre en compte les deux parties :
objets de l’annuaire et fichiers du Sysvol [4].
Enfin, une GPO sépare les paramètres destinés aux machines et aux
utilisateurs, à la fois dans l’annuaire, où l’on retrouve deux sous-conteneurs
Machine et User pour chaque objet de GPO, et dans le Sysvol, où l’on
L. Bouillot, E. Gras 37
retrouve deux dossiers du même nom pour chaque répertoire racine con-
tenant les fichiers de GPO. Les attributs GPC-Machine-Extension-Names
et GPC-User-Extension-Names permettent de savoir si une GPO s’adresse
aux machines, aux utilisateurs, ou aux deux.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Generic Other Standard Specific
Figure 3. Format des masques d’accès utilisés par les ACE : droits
génériques, standards et spécifiques. Les droits marqués comme « Other » sont
ACCESS_SYSTEM_SECURITY, MAXIMUM_ALLOWED ou réservés pour usage futur.
« STANDARD » ACE :
Header
Access Mask Trustee
Type Flags Size
« OBJECT » ACE :
Header Inherited
Access Mask Object Type Trustee
Type Flags Size Object Type
Ace Type : 0 x5 - A C C E S S _ A L L O W E D _ O B J E C T _ A C E _ T Y P E
Ace Size : 56 bytes
Ace Flags : 0 x2
CONTAINER_INHERIT_ACE
Object Ace Mask : 0 x000f01ff
DELETE
READ_CONTROL
WRITE_DAC
WRITE_OWNER
ACTRL_DS_CREATE_CHILD
ACTRL_DS_DELETE_CHILD
ACTRL_DS_LIST
ACTRL_DS_SELF
A CT R L_ D S _ R E A D _ P R O P
ACTRL_DS_WRITE_PROP
ACTRL_DS_DELETE_TREE
ACTRL_DS_LIST_OBJECT
ACTRL_DS_CONTROL_ACCESS
Object Ace Flags : 0 x1
ACE_OBJECT_TYPE_PRESENT
Object Ace Type : m s E x c h D y n a m i c D i s t r i b u t i o n L i s t - 018849 b0 - a981 -11 d2
- a9ff -00 c04f8eedd8
Object Ace Sid : CN = Exchange Trusted Subsystem , OU = Microsoft
Exchange Security Groups , DC = domain [S
-1 -5 -21 -1234567890 -1234567890 -1234567890 -1234]
3.1 Définition
Sont décrits dans cet article plusieurs types de relations de contrôle, sur
un ensemble d’objets manipulés par Active Directory : objets de l’annuaire,
stratégies de groupes, groupes et comptes locaux, journaux des machines
locales, etc. Cette partie présente ces relations, leur provenance (descripteur
de sécurité, attribut de classe particulier, etc.), ainsi que les moyens de
les relever. Le formalisme utilisé pour les modéliser et les représenter sera
présenté en partie 4.
44 Chemins de contrôle en environnement Active Directory
Obj2
Obj3
Figure 5. Contrôle d’un utilisateur sur plusieurs objets via son appartenance à un
groupe.
Obj1
Obj2
Container2
Obj3
Figure 6. Propagation (en gras/rouge) du contrôle d’un objet aux enfants de con-
teneurs, via l’héritage des droits.
12. \\<domaine>\SYSVOL\<domaine>\Scripts.
50 Chemins de contrôle en environnement Active Directory
{ GUID }\
User \
Applications \
Documents and Settings \
Microsoft \
IEAK \
Remote Install \
Scripts \
Logon \
Logoff \
Machine \
Adm \
Applications \
Microsoft \
Windows NT \
Secedit \
Scripts \
Startup \
Il est donc nécessaire de définir quels sont les fichiers ou dossiers qui
pourront, s’ils sont modifiables, conférer le contrôle de la GPO, et donc
des utilisateurs ou machines auxquels elle s’applique 13 . Cela ne peut pas
être réalisé de manière exhaustive, puisque des éléments tiers peuvent
définir des moteurs d’application de paramètres de GPO (CSE - Client
Side Extensions) pouvant s’appuyer sur n’importe quels éléments. On peut
néanmoins commencer par les éléments génériques suivants :
– le répertoire racine de la GPO (nommé d’après son GUID), puisqu’il
contient toute la GPO ;
– les deux sous-répertoires User et Machine, puisqu’ils contiennent tous
les paramètres destinés respectivement aux utilisateurs et machines
auxquels s’applique la GPO ;
– le fichier Registry.pol, situé dans les sous-dossiers User et Machine,
car il permet de modifier toute la base de registre ;
– le sous-répertoire Applications et les fichiers *.aas qu’il contient,
situé dans les sous-dossiers User et Machine, puisqu’il s’agit du
répertoire contenant les applications à installer (au format AAS,
embarquant des fichiers exécutables) ;
– le sous-répertoire Scripts, situé dans les sous-dossiers User et
Machine, ainsi que ses sous-éléments : les répertoires Logon et Logoff
13. Le contrôle total de la GPO n’est pas nécessaire pour contrôler les utilisateurs et
machines auxquels elle s’applique. Certains fichiers seuls sont suffisants.
L. Bouillot, E. Gras 51
15. ACE représentées dans l’annuaire notamment par des objets de type
ms-DS-Claim-Type. Elles sont supportées par Active Directory à partir du niveau
fonctionnel Windows Server 2012 [15].
54 Chemins de contrôle en environnement Active Directory
( A ;; RPLCLORC ;;; AU )
Ace Type : 0 x0 - A C C E S S _ A L L O W E D _ A C E _ T Y P E
Ace Mask : 0 x00020094
READ_CONTROL
ACTRL_DS_LIST
A C T R L _ D S _ R E A D _ P R OP
ACTRL_DS_LIST_OBJECT
Ace Sid : AUTORITE NT \ Authenticated Users [S -1 -5 -11]
4 Chemins et visualisation
4.1 Modélisation
L’ensemble des objets est représenté par des nœuds dans un graphe
orienté. Une relation de contrôle d’un objet maître vers un objet esclave
est représentée par un arc allant du maître vers l’esclave. Ainsi, dire qu’un
objet A contrôle un objet B à travers une relation r est équivalent au
graphe 8.
r
A B
A B1 C
B2
On peut parcourir le graphe dans deux sens, depuis l’objet maître vers
l’esclave, ou bien le contraire. Ainsi, il est possible de définir l’ensemble
des objets contrôlant un objet B comme l’ensemble des objets Ai pour
lesquels il existe un chemin de contrôle entre Ai et B. On peut aussi
L. Bouillot, E. Gras 57
B1 B2 B3
A1 B A3
A2
Il peut bien entendu exister plusieurs arcs de même sens entre deux
nœuds du graphe. Par exemple, un objet A ayant plusieurs ACE de contrôle
sur un objet B est représenté sur la figure 12.
Chacun des différents arcs ri représente une relation de contrôle dif-
férente. Dans la représentation choisie (décrite dans le paragraphe suivant),
chaque arc possède un type décrivant la nature de cette relation.
En utilisant cette modélisation, la résolution de chemins de contrôle
revient mathématiquement à résoudre des problèmes de connectivité dans
un graphe orienté. On peut par exemple rechercher :
58 Chemins de contrôle en environnement Active Directory
r1
r2
A B
r3
4.2.1 Présentation
La modélisation choisie pour représenter les relations de contrôle est celle
d’un graphe ; l’utilisation d’un moteur de base de données orientée graphe
est donc la solution naturelle pour stocker et exploiter les données. Il existe
de nombreux moteurs différents. On peut citer par exemple FlockDB [5]
(utilisé par Twitter), OrientDB [27] ou Neo4j [26]. C’est cette dernière
solution qui a été choisie pour stocker et exploiter les relations de contrôle
en environnement Active Directory. Neo4j offre des fonctionnalités qui
permettent de mettre en œuvre la modélisation décrite dans le paragraphe
précédent :
– un graphe (l’objet exploité par le moteur de base de données) est
composé de nœuds, de relations et de propriétés ;
– un nœud possède un nombre arbitraires de propriétés, permettant
de caractériser l’objet représenté (nom, type) ;
– une relation permet de modéliser un lien entre deux nœuds, et
possède une direction et un nombre arbitraire de propriétés (nom,
caractéristique de la relation).
Neo4j possède des performances satisfaisantes et permettant de traiter
la grande quantité de données extraites de l’environnement Active Directory.
De plus, il existe de nombreux moyens de s’interfacer avec le moteur :
– une console où on peut entrer des requêtes directement ;
L. Bouillot, E. Gras 59
4.2.3 Requêtes
Le langage utilisé pour formuler des requêtes sur une base Neo4j est
le langage Cypher [25]. Il présente quelques similarités avec SQL. Une
requête simple permettant de retourner l’ensemble des nœuds contrôlant
le nœud numéro 42 s’exprime de la façon suivante 19 :
START adm = node (42) MATCH voisin - - > adm RETURN voisin ;
Il est aussi possible de retourner les chemins entre deux nœuds, c’est-à-
dire l’ensemble des nœuds et des relations traversés par le chemin. Dans
l’exemple suivant, on retourne l’ensemble des chemins de longueur inférieure
ou égale à 3 permettant de contrôler le nœud numéro 42 :
START adm = node (42) MATCH path = voisin -[*0..3] - > adm RETURN path ;
18. Par exemple, un des domaines de production étudié comprenait plusieurs millions
de relations et plusieurs dizaines de milliers de nœuds.
19. Le numéro d’un nœud est son identifiant unique. La correspondance entre cet id
et le nom de l’objet associé s’obtient par recherche dans un index de la base de données
par exemple.
60 Chemins de contrôle en environnement Active Directory
4.3 Visualisation
5 Scénarios d’analyse
contexte. Par exemple s’ils ont accès à d’importants documents, auquel cas
ils peuvent faire l’objet d’attaques ciblées. Mais également pour appliquer
une logique différente de celle des cas précédents : au lieu d’étudier les
chemins de contrôle menant jusqu’aux cibles sélectionnées, il est possible
de partir d’une cible précise pour étudier tous les chemins qui en sont issus,
afin d’identifier le niveau de privilège maximal atteignable. On pourra
ainsi étudier :
– les utilisateurs « VIP » ;
– les cibles suspectes, ou connues comme compromises ;
– les groupes rassemblant un grand nombre de membres connus comme
ne devant pas maîtriser d’objets particuliers (Domain Users ou
Domain Computers par exemple).
5.3 Scénarios
Cette section présente des exemples de graphes de chemins de contrôle
générés à l’aide de notre outillage. Ils sont tirés de domaines vierges,
de domaines de test peuplés artificiellement ou de domaines réels. Les
données permettant leur génération ne contiennent pas forcement toutes
les relations de contrôle présentées dans cet article. Ainsi ces graphes
peuvent être complétés et ne servent ici qu’à illustrer les possibilités de
notre méthode d’analyse.
Pour des raisons de lisibilité des graphes, il n’est pas possible d’indiquer
en légende le nom de chaque nœud et le type de chaque relation. Nous
ferons donc apparaître ces éléments sur des sous-parties plus détaillées de
ces graphes après la vue générale lorsque cela s’avère nécessaire.
La légende des graphes est donnée par la figure 13 ci-dessous.
plet, car une limite de 1000 nœuds enfants pour chaque parent a été
volontairement imposée) ;
– la différence de contrôle direct sur les objets de l’annuaire entre les
administrateurs du domaine, les administrateurs de l’entreprise et les
administrateurs du schéma, représentée par les trois amas de nœuds
visibles :
– l’amas central « non circulaire » rassemble les objets situés dans la
partition de domaine, qui sont contrôlés directement par Domain
Admins situé en son centre,
– l’amas situé en dessous rassemble les objets de la partition de
configuration, qui eux sont contrôlés directement par Enterprise
Admins également présent en son centre,
– l’amas de gauche rassemble quant à lui les objets de la partition de
schéma. Ils sont controlés entre autres par Schema Admins, mais
ce groupe ne se trouve pas directement en son centre, c’est le
conteneur Schema qui s’y trouve. Cela nous indique qu’à l’inverse
des deux premiers groupes d’administrateurs, les objets du schéma
ne sont pas directement sous le contrôle des administrateurs du
schéma mais via l’héritage de permissions positionnées à la racine
de la partition.
Les administrateurs de domaine ne sont donc pas directement maîtres
des objets de configuration et de schéma, mais peuvent le devenir
par exemple via les relations de contrôle suivantes :
MATCH m -[ rel ] - > n
WHERE m . name =~ " cn = domain admins ,.* "
AND n . name =~ " cn =( enterprise | schema ) admins ,.* "
RETURN type ( rel ) AS relation , n . name AS target ;
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
| relation | target |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
| ad_owner | cn = enterprise admins ,... |
| stand_right_write_dac | cn = enterprise admins ,... |
| s t a n d _ r i g h t _ w r i t e _ o w n e r | cn = enterprise admins ,... |
| ext_right_all | cn = enterprise admins ,... |
| write_ prop_a ll | cn = enterprise admins ,... |
| ad_owner | cn = schema admins ,... |
| stand_right_write_dac | cn = schema admins ,... |
| s t a n d _ r i g h t _ w r i t e _ o w n e r | cn = schema admins ,... |
| ext_right_all | cn = schema admins ,... |
| write_ prop_a ll | cn = schema admins ,... |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
Figure 18. Plus courts chemins de contrôle partant du groupe des opérateurs de
compte (Windows Server 2003 à gauche et 2008R2 à droite) (de longueur limite 2).
Account Operators
Domain Admins
Domain Controllers
Enterprise Admins
krbtgt
Print Operators
Replicator
Schema Admins
Server Operators
– pour le niveau 2008R2, ces relations ont été révisées et ce sont main-
tenant Domain/Enterprise Admins, Administrators et SYSTEM qui
70 Chemins de contrôle en environnement Active Directory
21. Les nouvelles relations identifiées sont des relations de propriétaires ou des ACE
conférant le contrôle total à des entités déjà privilégiées (principalement administrateurs,
administrateurs du domaine et de l’entreprise, opérateurs de compte et SYSTEM).
L. Bouillot, E. Gras 71
Figure 19. Graphe centré sur le groupe d’administrateurs d’un domaine compromis.
Figure 20. À gauche : utilisateur possédant des droits de modification des fichiers
d’une GPO liée à une OU.
Figure 21. À droite : membre possédant une ACE de contrôle total sur tous les objets
protégés par l’AdminSdHolder.
Figure 22. À gauche : contrôle d’un utilisateur sur un second, possédant lui aussi des
privilèges sur une OU.
Figure 23. À droite : utilisateur étant administrateur local d’une machine utilisée
par un administrateur du domaine.
Figure 24. Utilisateur contrôlant un groupe via l’écriture de ses propriétés, présent
au sein des membres du groupe.
1. le groupe de départ est maître d’une GPO (bien qu’il n’en soit pas
propriétaire, il possède notamment les droits en écriture sur toutes les
L. Bouillot, E. Gras 75
Figure 27. Les serveurs Exchange sont maîtres des administrateurs du domaine via
leur appartenance au groupe Exchange Trusted Subsystem.
Figure 29. À droite, un utilisateur supprimé toujours propriétaire d’un autre utilisa-
teur pouvant maîtriser les administrateurs du domaine.
6 Conclusion
Figure 30. Exemple d’un chemin de longueur 5 chaînant : permissions sur une GPO
(objet et fichiers de GPO), application de cette GPO, appartenance à un conteneur,
appartenance à un groupe et permissions sur l’objet final, le groupe des administrateurs
du domaine.
7 Remerciements
Références
1. Aurélien Bordes. Secrets d’authentification épisode ii - kerberos contre-attaque.
https://www.sstic.org/2014/presentation/secrets_dauthentification_
pisode_ii__kerberos_contre-attaque/.
2. Peter Clark. Security accounts manager - privilege rights. http://www.
beginningtoseethelight.org/ntsecurity/index.htm#4C28668B1B8177C0.
3. D3.js. Data-driven documents. http://d3js.org/.
4. Luc Delsalle. Étude du moteur d’application des stratégies de groupe active
directory à des fins d’audit de sécurité. MISC n˚73.
5. FlockDB. A distributed, fault-tolerant graph database. https://github.com/
twitter/flockdb.
6. Pierre Capillon Géraud de Drouas. Audit des permissions en environnement ac-
tive directory. https://www.sstic.org/2012/presentation/audit_ace_active_
directory/.
7. IETF. Lightweight directory access protocol (v3) - 4.1.12. controls. https://tools.
ietf.org/html/rfc2251#section-4.1.12.
8. Microsoft. Active directory technical specification - 3.1.1.4.4 extended access checks.
http://msdn.microsoft.com/en-us/library/cc223383.aspx.
9. Microsoft. Active directory technical specification - 5.1.3.3.1 null vs. empty dacls.
http://msdn.microsoft.com/en-us/library/cc223515.aspx.
10. Microsoft. Ads_rights_enum enumeration. http://msdn.microsoft.com/en-us/
library/aa772285.aspx.
11. Microsoft. Attribute primarygroupid. http://msdn.microsoft.com/en-us/
library/cc220723.aspx.
12. Microsoft. Best practices for securing active directory. http://www.microsoft.
com/en-us/download/details.aspx?id=38785.
L. Bouillot, E. Gras 79
13. Microsoft. Directory replication service (drs) remote protocol - 4.1.10.3.12 issecre-
tattribute. http://msdn.microsoft.com/en-us/library/dd207719.aspx.
14. Microsoft. Dsamain. http://technet.microsoft.com/en-us/library/cc772168.
aspx.
15. Microsoft. An introduction to claims. http://msdn.microsoft.com/en-us/
library/ff359101.aspx.
16. Microsoft. Ldap_server_sd_flags_oid. http://msdn.microsoft.com/en-us/
library/cc223323.aspx.
17. Microsoft. Mandatory integrity control. http://msdn.microsoft.com/en-us/
library/windows/desktop/bb648648.aspx.
18. Microsoft. Robocopy. http://technet.microsoft.com/en-us/library/cc733145.
aspx.
19. Microsoft. Security descriptor definition language. http://msdn.microsoft.com/
en-us/library/windows/desktop/aa379567.aspx.
20. Microsoft. Top class. http://msdn.microsoft.com/en-us/library/ms683975.
aspx.
21. Microsoft. Well-known security identifiers in windows operating systems. http:
//support.microsoft.com/kb/243330.
22. Microsoft. What are domains and forests ? http://technet.microsoft.com/
en-us/library/cc759073.aspx.
23. Microsoft. Windows integrity mechanism design. http://msdn.microsoft.com/
en-us/library/bb625963.aspx.
24. Neo4j. Batch insertion api. http://docs.neo4j.org/chunked/stable/
batchinsert.html.
25. Neo4j. Cypher query language. http://www.neo4j.org/learn/cypher.
26. Neo4j. A highly scalable, robust (fully acid) native graph database. http://www.
neo4j.org/.
27. OrientDB. A document graph nosql dbms. http://www.orientechnologies.com/
orientdb/.