Comment auditer la suppression d'enregistrements DNS dans une zone intégrée Active Directory

 

Suite à l'article "Fonctionnement des enregistrements dans des zones DNS intégrées Active Directory", voici une méthode pour mettre en place de l'audit et interpréter les résultats

 

Activation de l'audit sur les serveurs DNS (contrôleurs de domaine)

Pour que l’activation des audits soit opérationnelle, elle doit s’effectuer sur le contrôleur de domaine/serveur DNS et au niveau de la zone DNS.

Pour Windows 2003

- Se connecter sur un contrôleur de domaine.
- Cliquer sur Démarrer / Outils d'administration / Stratégie de sécurité du domaine
- Naviguer dans Stratégies locales, puis Stratégie d'audit
- Définir pour la stratégie Auditer l'accès au service d'annuaire en Réussite et Echec
- Refermer la console
- Rafraichir la stratégie via la commande gpupdate /force.

Pour Windows 2008 et versions ultérieures

- Ouvrir une invite de commande, avec les privilèges élevés, sur un contrôleur de domaine.
- Entrer les commandes suivantes :
Auditpol /set /category: “DS Access” /Success:Enable
Auditpol /set /category: “DS Access” /Failure:Enable

- Rafraichir la stratégie via la commande gpupdate /force.

 

Activer l'audit au niveau de la zone DNS

Identifier dans quel conteneur de l'Active Directory, la zone DNS est stockée

Les zones DNS, dans un Active Directory en mode fonctionnel 2000, sont obligatoirement stockées dans la partition du domaine.
Avec un niveau fonctionnel 2003 et ultérieur, il est possible de stocker les zones DNS dans des partitions 'applicatives' : ForestDNSZones et DomainDNSZones.
L'outil DNSCMD.exe permet d'identifier où se trouve la zone DNS.

La ligne de commande est : "DnsCmd <Serveur> /ZoneInfo <NomDeLaZone> " : dans l'exemple "DnsCmd contoso-dc1 /ZoneInfo contoso.com"

image23_thumb

 

Modifier ou vérifier les permissions pour la mise en place de l'audit dans l'AD

- Ouvrir la console ADSIEdit.msc et pointer sur un contrôleur de domaine qui a les droits d’écriture sur la partition Active Directory dans laquelle est stockée la zone DNS à auditer.
- Faire un clic droit sur ADSI Edit, et choisir "Connexion" (Connect to..)

o Dans le champ "Nom" (Name), entrer par exemple Domaine, DomainDNSZones ou ForestDNSZones.
o Dans le champ "Point de connexion" (Connection Point) entrer le Distinguished Name de la partition dans laquelle la zone DNS est hébergée (voir point précédent avec dnscmd.exe). Par exemple DC=DomainDNSZones,DC=contoso,DC=com
o Cliquer sur OK

image20_thumb

- Pour sélectionner la partition :

o Si la zone est stockée dans la partition du domaine par défaut:

Domain [(dc name).contoso.com]
  
DC=contoso,DC=com       CN=System
         CN=MicrosoftDNS

o Si la zone est stockée dans la partition applicative DomainDNSZones :

Domain(DNSZones) [(dc name).contoso.com]
  
DC=DomainDNSZones,DC=contoso,DC=com       CN=MicrosoftDNS

o Si la zone est stockée dans la partition applicative ForestDNSZones :

ForestDNSZones [(dc name).contoso.com]
  
DC=ForestDNSZones,DC=contoso,DC=com       CN=MicrosoftDNS

- Dans le conteneur CN=MicrosoftDNS vous allez trouver un sous-conteneur DC=<MaZoneDNS> (DC=contoso.com dans l'exemple)    

image26_thumb2
- Editer les propriétés du conteneur de la zone DNS.
- Dans l'onglet Sécurité, cliquer sur le bouton Paramètres avancés.
- Sélectionner l'onglet Audit et cliquer sur le bouton Ajouter.
- Entrer ensuite "Tout le monde" (Everyone) puis sur le bouton Vérifier les noms. Une fois le groupe vérifié, cliquer sur OK.

Note : il se peut qu'il y ait déjà des entrées existantes pour l'audit avec le groupe "Tout le monde" ("Everyone"), ainsi plutôt que de modifier les entrées existantes, choisir "ajouter" comme mentionné précédemment.

- Dans la fenêtre "Audit de l'entée pour <NomDeMaZone> ", dans l'onglet Objet, sélectionner les options Réussite et Echec pour les accès :

o Ecrire toutes les propriétés
o Supprimer
o Supprimer la sous-arborescence

image17_thumb1

- Cliquer sur Ok.

Note : la partition DNS étant répliquée avec l'Active Directory, la mise en place de l'audit n'est à faire qu'une fois par zone DNS. Les options d'audit seront répliquées sur tous les contrôleurs de domaine / serveurs DNS.

 

Attention : si la zone DNS change de scope de réplication après la mise en place de l'audit, il faut repositionner les propriétés d'audit car ces dernières sont réinitialisées par défaut.

 

Collecter les événements d'audit sur les contrôleurs de domaine/DNS

Identifier le contrôleur de domaine sur lequel la suppression de l'entrée DNS a été supprimée

 

Pour cela il faut faire une requête sur les contrôleurs de domaine : par exemple si l'entrée détruite est "testdel2" alors la commande sera "repadmin /showobjmeta <nom-d'un-DC> <DN de l'objet> ", soit par exemple "repadmin /showobjmeta contoso-dc1 DC=testdel2,DC=contoso.com,CN=MicrosoftDNS,DC=DomainDnsZones,DC=contoso,DC=com"

image41_thumb2
Dans cet exemple, il est possible de déterminer que l'enregistrement testdel2 a été supprimé sur le contrôleur de domaine CONTOSO-VDC2 le 22 avril 2013 à 17h42'16".

Dans l'affichage de la ligne dNSTombstone, il faut récupérer le nom du contrôleur de domaine qui a modifié cet attribut. C'est sur ce contrôleur de domaine que l'entrée d'audit pourra être récupérée, en fonction du jour et de l'heure affichée.

Analyse de l'événement d'audit correspondant à la suppression de l'entrée DNS

Par la suite, il faut se connecter sur le contrôleur de domaine correspondant à l'événement 4662 (Windows Server 2008 et ultérieurs) ou 566 (Windows Server 2003), à la date et l'heure de la suppression pour visualiser correctement les détails de l'audit :

Nom du journal :Security Source : Microsoft-Windows-Security-Auditing Date : 4/22/2013 5:42:16 AM ID de l’événement :4662 Catégorie de la tâche :Accès au service d’annuaire Niveau : Information Mots clés : Succès de l’audit Utilisateur : N/A Ordinateur : CONTOSO-DC2.contoso.com Description : Une opération a été effectuée sur un objet.

Sujet : ID de sécurité : CONTOSO\dhcpsrvaccount Nom du compte : dhcpsrvaccount Domaine du compte : CONTOSO ID d’ouverture de session : 0x8d5c26

Objet : Serveur de l’objet : DS Type d’objet : dnsNode Nom de l’objet : DC=testdel2,DC=contoso.com,CN=MicrosoftDNS,DC=DomainDnsZones,DC=contoso,DC=com ID du handle : 0x0

Opération : Type d’opération : Object Access Accès : Propriété d’écriture Masque d’accès : 0x20 Propriétés : Propriété d’écriture {771727b1-31b8-4cdf-ae62-4fe39fadf89e} {e0fa1e69-9b45-11d0-afdd-00c04fd930c9} {d5eb2eb7-be4e-463b-a214-634a44d7392e} {e0fa1e8c-9b45-11d0-afdd-00c04fd930c9}

 

En surligné, nous avons le détail de l'enregistrement DNS supprimé et le compte utilisé pour faire la suppression. Dans l'exemple c'est le compte CONTOSO\dhcpsrvaccount qui a supprimé l'enregistrement testdel2.

Comment utiliser LDP.exe pour rechercher les objets dnsNode dont l'attribut dNSTombstoned est à TRUE

- Démarrer LDP.exe (outil des Support Tools Windows Server 2003, présent par défaut en 2008 R2). Attention, sur Windows Server 2008 et versions suivantes, lancer l'outil avec élévation de privilèges
- Choisir "Connexion / Connecter" (Connection / Connect) et entrer le nom d'un contrôleur de domaine sur lequel se connecter.
- Choisir "Connexion / Lier" (Connection / Bind) et entrer un compte member du groupe Administrateurs de l'Entreprise ou Administrateurs du Domaine en fonction de l'emplacement où la zone DNS est stockée dans l'Active Directory.
- Choisir "Affichage / Arborescence" (View / Tree) et entrer le DistinguishedName de la zone DNS, par exemple : DC=DomainDNSZones,DC=contoso,DC=com si la zone DNS est contenue dans la partition applicative DomaineDNSZones
- Dans la partie gauche de l'outil, double cliquer sur la racine de l'arborescence jusqu'à afficher la zone DNS.
- Une fois la zone DNS sélectionnée, via un clic droit, choisir l'option "Rechercher" (Search):     
image29_thumb
Entrer comme filtre de recherche : (dNSTombstoned=TRUE) , puis penser à sélectionner l'option de scope "sous-arborescence" (Subtree) puis cliquer sur "Exécuter" (Run).

Voici un exemple de résultat :

***Searching... ldap_search_s(ld, "DC=contoso.com,CN=MicrosoftDNS,DC=DomainDnsZones,DC=contoso,DC=com", 2, "(dNSTombstoned=TRUE)", attrList, 0, &msg) Getting 2 entries: Dn: DC=testdel1,DC=contoso.com,CN=MicrosoftDNS,DC=DomainDnsZones,DC=contoso,DC=com canonicalName: DomainDnsZones.contoso.com/MicrosoftDNS/contoso.com/testdel1; name: testdel1; objectClass (2): top; dnsNode;

Dn: DC=testdel2,DC=contoso.com,CN=MicrosoftDNS,DC=DomainDnsZones,DC=contoso,DC=com canonicalName: DomainDnsZones.contoso.com/MicrosoftDNS/contoso.com/testdel2; name: testdel2; objectClass (2): top; dnsNode;

En gras nous avons les entrées DNS supprimées de la zone DNS

En sélectionnant dans la partie gauche de LDP un objet marqué comme supprimé, il est possible (via un double clic) d'afficher plus de détails :

Expanding base 'DC=testdel2,DC=contoso.com,CN=MicrosoftDNS,DC=DomainDnsZones,DC=contoso,DC=com'... Getting 1 entries: Dn: DC=testdel2,DC=contoso.com,CN=MicrosoftDNS,DC=DomainDnsZones,DC=contoso,DC=com dc: testdel2; distinguishedName: DC=testdel2,DC=contoso.com,CN=MicrosoftDNS,DC=DomainDnsZones,DC=contoso,DC=com; dnsRecord: wDataLength: 8 wType: 0; Version: 5 Rank: 0 wFlags: 0 dwSerial: 66 dwTtlSeconds: 0 dwTimeout: 0 dwStartRefreshHr: 0 Data: 33 4A 51 F7 6F 3F CE 01 3JQ÷o?Î. ------------------------------------; dNSTombstoned: TRUE; dSCorePropagationData (2): 4/22/2013 5:41:28 PM Paris, Madrid; 0x0 = ( ); instanceType: 0x4 = ( WRITE ); name: testdel2; objectCategory: CN=Dns-Node,CN=Schema,CN=Configuration,DC=contoso,DC=com; objectClass (2): top; dnsNode; objectGUID: bb7f731a-3282-4cc2-b515-a1217bf82829; showInAdvancedViewOnly: TRUE; uSNChanged: 21986; uSNCreated: 21973; whenChanged: 4/22/2013 5:42:31 PM Paris, Madrid; whenCreated: 4/22/2013 5:41:28 PM Paris, Madrid;

Ceci nous indique quand le contrôleur de domaine à pris en compte le changement pour cet objet, ce qui correspond au moment de la suppression. L'intérêt peut être de réduire la période de temps à analyser pour collecter les événements 4662 ou 566.

Note : lorsque l'objet dnsNode est avec un attribut dNSTombstoned=TRUE, la valeur de cet attribut peut passer à dNSTombstoned=FALSE si : - La machine (ou le service DHCP) envoie une mise à jour dynamique. - Une entrée statique est créée avec le même nom.

 

Un enregistrement DNS peut être supprimé via l'une de ces méthodes : 

Scavenging :

Opération de nettoyage automatique de la base de donnée DNS, par serveur DNS => regarder dans les propriétés d'un serveur DNS via la console dnsmgmt.msc, onglet Avancé, option Activer le nettoyage automatique des enregistrements obsolètes)
image44_thumb
Normalement pour le scavenging, il y a un événement dans le journal DNS, ID 2501 qui indique si le nettoyage a eu lieu, et qui donne des informations sur la quantité d'enregistrements nettoyés. Si l'événement 2501 correspond à l'audit 566/4662, alors cela signifie que l'enregistrement a été supprimé par le scavenging.

Dans ce cas seul l'attribut dNSTombstoned est marqué à TRUE

Suppression Manuelle via les fonctions de dnsapi.dll

Via la console DNS, en ligne de commande avec DNSCMD.exe, ou via une application/script.

Dans ce cas seul l'attribut dNSTombstoned est changé à TRUE.

Mise à jour dynamique

Lorsque une mise à jour dynamique avec un TTL=0 est effectuée. l'enregistrement DNS est supprimé.

  Frame: Number = 43, Captured Frame Length = 162, MediaType = ETHERNET + Ethernet: Etype = Internet IP (IPv4),DestinationAddress:[00-0C-29-2B-59-13],SourceAddress:[00-0C-29-19-2C-7D] + Ipv4: Src = 1.2.3.100, Dest = 172.16.100.1, Next Protocol = UDP, Packet ID = 384, Total IP Length = 148 + Udp: SrcPort = 55912, DstPort = DNS(53), Length = 128 - Dns: QueryId = 0x9413, Update, Query for contoso.com of type SOA on class Internet QueryIdentifier: 37907 (0x9413) + Flags: Query, Opcode - Update, Rcode - Success QuestionCount: 1 (0x1) AnswerCount: 1 (0x1) NameServerCount: 3 (0x3) AdditionalCount: 0 (0x0) + QRecord: contoso.com of type SOA on class Internet - ARecord: CONTOSO-CLIENT1.contoso.com of type CNAME on class None ResourceName: CONTOSO-CLIENT1.contoso.com ResourceType: CNAME, Canonical name for an alias, 5(0x5) ResourceClass: None, 254(0xfe) TimeToLive: 0 (0x0) ResourceDataLength: 0 (0x0) - AuthorityRecord: CONTOSO-CLIENT1.contoso.com of type AAAA on class Any ResourceName: CONTOSO-CLIENT1.contoso.com ResourceType: AAAA, IPv6 Address, 28(0x1c) ResourceClass: Any, 255(0xff) TimeToLive: 0 (0x0) ResourceDataLength: 0 (0x0) - AuthorityRecord: CONTOSO-CLIENT1.contoso.com of type Host Addr on class Any ResourceName: CONTOSO-CLIENT1.contoso.com ResourceType: A, IPv4 address, 1(0x1) ResourceClass: Any, 255(0xff) TimeToLive: 0 (0x0) ResourceDataLength: 0 (0x0) - AuthorityRecord: CONTOSO-CLIENT1.contoso.com of type AAAA on class Internet: 2002:102:364:0:0:0:102:364 ResourceName: CONTOSO-CLIENT1.contoso.com ResourceType: AAAA, IPv6 Address, 28(0x1c) ResourceClass: Internet, 1(0x1) TimeToLive: 1200 (0x4B0) ResourceDataLength: 16 (0x10) IPv6Address: 2002:102:364:0:0:0:102:364

Dans l'exemple d'une trace réseau ci-dessus nous avons la suppression de l'enregistrement IPv4 (A) par la machine elle-même lors de la mise à jour dynamique à jour de son entrée IPv6.

Du coup l'événement 4662 (566) indique que c'est le compte machine qui a supprimé son propre enregistrement :

Nom du journal :Security Source : Microsoft-Windows-Security-Auditing Date : 4/23/2013 7:32:01 PM ID de l’événement :4662 Catégorie de la tâche :Accès au service d’annuaire Niveau : Information Mots clés : Succès de l’audit Utilisateur : N/A Ordinateur : CONTOSO-DC1.contoso.com Description : Une opération a été effectuée sur un objet.

Sujet : ID de sécurité : CONTOSO\CONTOSO-CLIENT1$ Nom du compte : CONTOSO-CLIENT1$ Domaine du compte : CONTOSO ID d’ouverture de session : 0xb20651

Objet : Serveur de l’objet : DS Type d’objet : dnsNode Nom de l’objet : DC=CONTOSO-CLIENT1,DC=contoso.com,CN=MicrosoftDNS,DC=ForestDnsZones,DC=contoso,DC=com ID du handle : 0x0

Opération : Type d’opération : Object Access Accès : Propriété d’écriture Masque d’accès : 0x20 Propriétés : Propriété d’écriture {771727b1-31b8-4cdf-ae62-4fe39fadf89e} {e0fa1e69-9b45-11d0-afdd-00c04fd930c9} {d5eb2eb7-be4e-463b-a214-634a44d7392e} dnsNode

Informations supplémentaires : Paramètre 1: - Paramètre 2 :   

Dans ce cas seul l'attribut dNSTombstoned est marqué à TRUE.

Suppression manuelle de l'objet dnsNode

Par exemple via LDAP (initié en utilisant ADSIEDIT.msc ou LDP.exe).

Dans ce cas, l'attribut dNSTombstoned n'est pas modifié, mais l'attribut isDeleted est passé à TRUE et l'objet dnsNode est renommé et déplacé dans un conteneur caché "Deleted Objects" :

Expanding base 'DC=testdel6\0ADEL:62a75452-12bf-4eed-be59-98d569a1c983,CN=Deleted Objects,DC=DomainDnsZones,DC=contoso,DC=com'... Getting 1 entries: Dn: DC=testdel6\0ADEL:62a75452-12bf-4eed-be59-98d569a1c983,CN=Deleted Objects,DC=DomainDnsZones,DC=contoso,DC=com dc: testdel6 DEL:62a75452-12bf-4eed-be59-98d569a1c983; distinguishedName: DC=testdel6\0ADEL:62a75452-12bf-4eed-be59-98d569a1c983,CN=Deleted Objects,DC=DomainDnsZones,DC=contoso,DC=com; instanceType: 0x4 = ( WRITE ); isDeleted: TRUE; isRecycled: TRUE; lastKnownParent: DC=contoso.com,CN=MicrosoftDNS,DC=DomainDnsZones,DC=contoso,DC=com; name: testdel6 DEL:62a75452-12bf-4eed-be59-98d569a1c983; objectClass (2): top; dnsNode; objectGUID: 62a75452-12bf-4eed-be59-98d569a1c983; uSNChanged: 22687; uSNCreated: 22684; whenChanged: 4/23/2013 12:32:39 PM Paris, Madrid; whenCreated: 4/23/2013 12:32:27 PM Paris, Madrid;

Dans ce cas précis l'entrée 4662/566 sera légèrement différente ;

Nom du journal :Security Source : Microsoft-Windows-Security-Auditing Date : 4/23/2013 12:32:39 PM ID de l’événement :4662 Catégorie de la tâche :Accès au service d’annuaire Niveau : Information Mots clés : Succès de l’audit Utilisateur : N/A Ordinateur : CONTOSO-DC1.contoso.com Description : Une opération a été effectuée sur un objet.

Sujet : ID de sécurité : CONTOSO\BadAdmin Nom du compte : BadAdmin Domaine du compte : CONTOSO ID d’ouverture de session : 0x51a65

Objet : Serveur de l’objet : DS Type d’objet : dnsNode Nom de l’objet : DC=testdel6\0ADEL:62a75452-12bf-4eed-be59-98d569a1c983,CN=Deleted Objects,DC=DomainDnsZones,DC=contoso,DC=com ID du handle : 0x0

Opération : Type d’opération : Object Access     Accès : DELETE     Masque d’accès :        0x10000 Propriétés : DELETE {e0fa1e8c-9b45-11d0-afdd-00c04fd930c9}

Informations supplémentaires : Paramètre 1: - Paramètre 2 :       

 

Définir la taille du journal d'événement Sécurité

Les audits sont stockés dans le journal d'événement Sécurité qui peut être très verbeux. Il est donc conseiller d'augmenter la taille du journal Sécurité pour obtenir au moins 1 jour d'historique. A défaut, il faudrait exporter via un script de manière régulièrement les événements 566 ou 4662 afin de pouvoir effectuer les opérations d'investigation.

Pour rappel : sous Windows Server 2003, la somme de la taille des journaux d'événements (tous confondus) ne doit pas dépasser 300 Mo afin d'éviter que certains événements ne soient correctement inscrit, ou, engendrer la corruption des journaux d'événements.