logo

Qu’est-ce qu’une attaque DCShadow et comment s’en protéger

DCShadow est une attaque avancée de type kill chain qui permet à un attaquant disposant d’identifiants à privilèges compromis d’enregistrer un contrôleur de domaine (DC) Active Directory malveillant. Il peut ensuite apporter toutes les modifications qu’il souhaite via la réplication, notamment des modifications lui accordant des droits élevés et lui permettant d’établir la persistance. Concrètement, DCShadow est une commande du module lsadump d’un outil de piratage open-source appelé Mimikatz. Introduite début 2018, cette commande utilise des instructions spécifiques dans le protocole Microsoft Directory Replication Service Remote (MS-DRSR).

Sélection de contenu connexe :

Les attaques DCShadow sont difficiles à éviter. De la même manière que DCSync, une attaque DCShadow n’exploite pas une vulnérabilité qui peut être corrigée, mais plutôt des fonctions valides et nécessaires du processus de réplication Active Directory qui ne peut pas être désactivé ou éteint. Ces attaques sont également difficiles à détecter, car les requêtes de l’attaquant sont enregistrées, traitées et validées comme une réplication de domaine légitime.

Aperçu d’une attaque DCShadow

Voici, en résumé, les différentes étapes d’une attaque DCShadow :

  1. Un attaquant obtient des autorisations d’administrateur de domaine ou d’entreprise en compromettant, par exemple, un compte de service géré par un groupe mal sécurisé.
  2. DCShadow lui permet d’enregistrer l’objet informatique (une station de travail) comme un contrôleur de domaine en modifiant le schéma de configuration de l’AD et la valeur SPN du poste de travail. Résultat : l’AD pense maintenant que ce poste de travail est un contrôleur de domaine autorisé à répliquer des changements.
  3. L’attaquant soumet des modifications à répliquer, comme des modifications apportées aux mots de passe, aux détails du compte ou aux membres du groupe de sécurité. Une fois la réplication lancée, les changements sont publiés puis validés par les autres contrôleurs de domaine.
  4. L’attaquant utilise DCShadow pour supprimer le contrôleur de domaine malveillant de la base de données AD et masquer ainsi son activité.

Un exemple simple : répliquer une modification mineure grâce à DCShadow

Partons du principe que vous êtes un attaquant et que vous avez enregistré un contrôleur de domaine malveillant en utilisant DCShadow. Voici les étapes que vous pourriez suivre pour répliquer un changement mineur sur tous les contrôleurs de domaine du domaine.

Étape 1. Changer de compte et passer au compte SYSTEM

La modification à répliquer doit être créée à partir d’un processus exécuté depuis le compte SYSTEM plutôt qu’un compte d’utilisateur du domaine : seuls les changements apportés par un contrôleur de domaine enregistré peuvent être répliqués. Si vous ne changez pas de compte, l’erreur suivante s’affichera :

ERROR kuhl_m_lsadump_dcshadow_force_sync_partition ; IDL_DRSReplicaAdd DC=JEFFLAB,DC=local 0x80090322 (2148074274)

Pour exécuter un processus en tant qu’utilisateur SYSTEM dans Mimikatz, vous pouvez utiliser PSExec :

PsExec.exe –i –s cmd.exe

Pour confirmer que vous utilisez bien un compte SYSTEM, exécutez la commande whoami.

Utilisez ensuite la commande token::elevate pour vous assurer que tous les threads du processus seront exécutés dans un contexte SYSTEM.

Étape 2. Apporter une modification

Vous êtes maintenant en mesure d’apporter la modification de votre choix. Pour les besoins de cet exemple, changeons la description du compte Administrateur :

lsadump::dcshadow /object:CN=Administrator,CN=Users,DC=JEFFLAB,DC=local /attribute:description /value:”DCShadow was here!”

Étape 3. Déclencher la réplication

Pour lancer la réplication, ouvrez une nouvelle fenêtre et exécutez la commande suivante à partir du compte d’administrateur de domaine compromis (pas en tant qu’utilisateur SYSTEM) :

lsadump::dcshadow /push

La fenêtre initiale affichera les événements générés :

Étape 4. Confirmer la modification

Ouvrez la boîte de dialogue des propriétés du contrôleur de domaine et vérifiez le champ Description :

Attaque réelle : utilisation de DCShadow pour établir la persistance

Examinons maintenant comment un adversaire utiliserait DCShadow pour une attaque réelle. Pour exécuter DCShadow, il faut déjà avoir obtenu des droits d’administrateur de domaine ou d’entreprise : dans ce cas, pourquoi un attaquant utiliserait-il la technique DCShadow ?

L’une des principales raisons tient au fait qu’il ne souhaite peut-être pas utiliser un compte d’administrateur de domaine pour exfiltrer des données, car ce type de compte est souvent étroitement surveillé et peut déclencher une alerte plus facilement. L’obtention de droits d’administrateur dans d’autres forêts peut être une autre explication.

Mais l’un des motifs les plus fréquents est le maintien de la persistance des droits d’administration : même si un attaquant n’a plus accès au compte Administrateur qu’il a compromis, il reste néanmoins implanté dans le domaine. Découvrons une manière dont nous pourrions atteindre la persistance grâce à la technique DCShadow.

Les étapes de base sont les suivantes :

  1. Contrôler l’objet AdminSDHolder qui fournit des autorisations de modèle pour les comptes et les groupes protégés du domaine.
  2. Ajouter un nouveau compte à l’objet AdminSDHolder avec des autorisations de contrôle total.
  3. Répliquer la modification à l’aide de DCShadow.

Étape 1. Vérification de l’objet AdminSDHolder.

Pour analyser l’objet AdminSDHolder, nous utiliserons une commande de base

PowerShell : $AdminSDHolder = [adsi]'LDAP://CN=AdminSDHolder,CN=System,DC=JEFFLAB,DC=local'
$SDDL = $AdminSDHolder.ObjectSecurity.Sddl

Nous pouvons utiliser la commande ConvertFrom-SDDLString pour convertir les résultats dans un format plus lisible :

Étape 2. Ajout d’un compte au conteneur AdminSDHolder

Pour établir la persistance, il nous faut ajouter un compte à l’objet AdminSDHolder en utilisant son SID. Pour cela, nous avons besoin du nom unique de l’objet. La commande suivante enregistrera ensuite son SID dans la variable $UserSid :

$UserToAdd = [adsi]'LDAP://CN=Bob Loblaw,OU=Business,OU=Users,OU=JEFFLAB,DC=JEFFLAB,DC=local'

$UserSid  = New-Object System.Security.Principal.SecurityIdentifier($UserToAdd.objectSid[0], 0)

Nous pouvons maintenant utiliser cette variable pour ajouter le compte à l’objet AdminSDHolder et lui octroyer des autorisations de contrôle total. Pour cette opération, nous utiliserons la commande PowerShell suivante :

$NewSDDL = $SDDL + "(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;" + $UserSid.Value + ")"

Si l’on jette un coup d’œil à l’objet AdminSDHolder, on s’aperçoit que l’utilisateur a été ajouté dans la dernière entrée :

Étape 3. Répliquer la modification à l’aide de DCShadow

Maintenant que nous disposons de nouvelles autorisations sous la forme d’une valeur d’attribut, il est facile de les appliquer avec DCShadow. Nous pouvons exécuter la commande suivante en tant qu’utilisateur SYSTEM pour apporter la modification souhaitée :

mimikatz.exe "lsadump::dcshadow /object:CN=AdminSDHolder,CN=System,DC=JEFFLAB,DC=local /attribute:ntsecuritydescriptor /value:[output from the previous command]”

Vous pouvez voir dans la capture d’écran que la modification est prête à être répliquée :

Nous exécutons ensuite la commande lsadump::dcshadow/push pour lancer la réplication. Dans la fenêtre Paramètres de sécurité avancés, on observe que l’objet AdminSDHolder a été mis à jour et que notre utilisateur a été ajouté. Cette modification sera bientôt répliquée dans chaque groupe protégé du domaine.

Prévention des attaques DCShadow

DCShadow peut être utilisé de bien d’autres manières pour établir la persistance ou nuire à la sécurité de l’Active Directory. Éviter ces attaques représente un défi, car elles exploitent des fonctionnalités natives de l’Active Directory, et non des lacunes qui peuvent être corrigées par une mise à jour.

Un attaquant doit obtenir des droits d’administrateur de domaine ou d’entreprise pour effectuer une attaque DCShadow : c’est ici que réside le principal axe de défense. C’est pour cette raison que la stratégie la plus efficace pour bloquer cette attaque reste encore d’éviter que n’importe quel utilisateur puisse appartenir de manière non autorisée à ces puissants groupes de sécurité.

Détecter les attaques DCShadow

Pour les attaquants, l’un des avantages clés de l’utilisation de DCShadow, c’est la possibilité d’apporter des modifications qui ne sont pas enregistrées dans le journal des événements : puisque les changements sont effectués par réplication, ils sont considérés comme légitimes. Le journal des événements vous permet néanmoins de repérer les signes qu’une attaque est en cours. Voici les événements clés à surveiller.

 

Modifications de la valeur SPN de l’ordinateur

Pour qu’une attaque DCShadow fonctionne, il faut ajouter deux valeurs SPN (nom principal de service) spécifiques au poste de travail qui se fera passer pour un contrôleur de domaine (l’ordinateur à partir duquel un attaquant exécute DCShadow). Il peut s’agir de n’importe quel poste joint à un domaine.

Les deux valeurs SPN sont les suivantes :

  • Serveur de catalogue global, dont le format est : GC/<DNS hostname>/<DNS forest name>.
  • Service de réplication d’annuaire (DRS), dont le format est : <DRS interface GUID>/<DSA GUID>/<DNS domain name>, où <DRS interface GUID> correspond toujours à E3514235–4B06–11D1-AB04–00C04FC2DCD2.

 

Il est possible de détecter les signes d’une attaque DCShadow en vérifiant si ces valeurs SPN ont été ajoutées à un poste qui n’est pas un contrôleur de domaine, et ensuite supprimées. (Remarque : dans notre test, DCShadow ne supprime que la valeur SPN Serveur de catalogue global, et ne touche pas à la valeur DRS.)

Vous pouvez surveiller ces changements en contrôlant l’ID d’événement 4742. Cet événement affiche l’utilisateur à l’origine de la modification et vous permet donc de savoir quel compte d’administrateur de domaine est utilisé pour effectuer l’attaque.

Création et suppression d’un contrôleur de domaine

Autre étape d’une attaque DCShadow : créer un contrôleur de domaine dans le conteneur Sites de la configuration de l’espace de noms. Pour cela, il faut créer un serveur et les paramètres NTDS associés. Ci-dessous, vous pouvez voir ces objets qui correspondent à notre contrôleur de domaine légitime :

DCShadow ajoute un contrôleur de domaine et ses paramètres et, une fois la modification répliquée, supprime aussitôt toutes les entrées pour effacer ses traces. Ce qui laisse une séquence d’événements insolite : l’ajout et la suppression quasi immédiate d’un nouveau contrôleur de domaine.

L’ajout peut être suivi grâce à l’ID d’événement 5137, qui inclut le nom du DC malveillant, son GUID et sa classe d’objet, ainsi que le compte à l’origine de la création :

L’ID d’événement 5141 montre les mêmes informations, mais pour la suppression du DC :

Réplication d’événements inhabituelle

Le suivi de l’activité de réplication permet également de détecter une attaque DCShadow. Toutefois, les événements de réplication déclenchés lors de l’attaque peuvent être difficiles à différencier des événements authentiques.

L’ID d’événement 4929 donne néanmoins un indice précieux puisqu’il indique que le contexte de nommage source a été supprimé et signale le contrôleur de domaine malveillant à l’origine de cette suppression. Si cet événement s’affiche pour un ordinateur non reconnu comme un contrôleur de domaine approuvé, c’est une alerte qui doit vous faire réagir.

Échec de la réplication

Par ailleurs, les événements 4935 et 4936 signalent un échec de réplication que vous pouvez souvent attribuer à DCShadow.

Comment Netwrix peut vous aider

Netwrix Threat Manager offre une solution optimale pour détecter et répondre aux attaques DCShadow :

Détection

Netwrix Threat Manager offre la détection intégrée des menaces DCShadow. Netwrix Threat Manager surveille en temps réel tous les événements de réplication et de modification de domaine, à la recherche de comportements indiquant des attaques DCShadow. L’outil surveille notamment l’ajout et la suppression de contrôleurs de domaine et contrôle l’activité de réplication.

Voici un exemple dans lequel Netwrix Threat Manager a détecté l’ajout d’un nouveau contrôleur de domaine :

L’ajout d’un DC est déjà suspect en soi, mais le rapport souligne également que l’ordinateur fonctionne sous le système d’exploitation Windows 10, qui ne prend pas en charge le rôle de contrôleur de domaine. En développant les détails de l’événement, nous pouvons voir les changements spécifiques qui ont été faits dans le cadre de l’attaque DCShadow :

Réponse

Bien que la détection rapide des attaques DCShadow soit essentielle, elle n’est pas suffisante, surtout si l’on considère qu’un adversaire a compromis un compte hautement privilégié. La simple désactivation de ce compte peut ne pas être suffisante : en effet, lorsque vous vous rendez compte qu’une attaque DCShadow est en cours, l’adversaire dispose déjà probablement d’une foule d’autres ressources et options de réseau à utiliser.

Netwrix Threat Manager fournit une multitude d’options de réponse automatisée qui vous donne les moyens de facilement construire un scénario efficace pour chaque menace ou vulnérabilité anticipée. Dans le cadre d’une attaque DCShadow, la réponse standard devrait inclure les étapes suivantes :

  1. Avertir les personnes compétentes de l’organisation qu’une attaque a eu lieu et leur fournir les informations dont elles ont besoin pour réagir efficacement. Netwrix Threat Manager fournit tous les détails essentiels sur l’attaque, notamment l’auteur, la source et la cible. En outre, la solution facilite la communication rapide grâce à une intégration facile à Slack, Microsoft Teams, ServiceNow et d’autres systèmes à l’aide de PowerShell ou de webhook.

  • Empêcher le compte ou le poste de travail en cause d’exécuter d’autres activités de réplication, d’authentification ou toute autre action :

FAQ

Qu’est-ce que DCShadow ?

DCShadow est une commande de l’outil Mimikatz qui permet à un adversaire d’enregistrer un contrôleur de domaine malveillant et de répliquer les modifications malveillantes sur l’ensemble du domaine.

Comment fonctionne une attaque DCShadow ?

Un attaquant enregistre son ordinateur comme contrôleur de domaine en modifiant le schéma de configuration de l’AD et la valeur SPN du poste de travail. Il peut ensuite répliquer des modifications, notamment certaines lui permettant d’établir une persistance sur le domaine.

Comment détecter les attaques DCShadow ?

La meilleure façon de détecter les attaques DCShadow est d’utiliser une solution automatisée surveillant en permanence l’ajout suspect de contrôleurs de domaine et l’activité de réplication, afin de détecter toute anomalie.

Quelle est la meilleure réponse à une attaque DCShadow ?

Lorsqu’une attaque DCShadow est détectée, chaque minute compte. Il est donc préférable de disposer d’un flux de travail automatisé qui signale immédiatement l’événement à l’équipe de sécurité et empêche le compte d’utilisateur à l’origine de l’attaque d’apporter toute autre modification sur le domaine.