Durcissement du contrôleur de domaine: Dump du NTDS.
Une fois que des pirates sont en possession des droits administrateur du domaine et ont accès aux contrôleurs de domaine, ils essayent en général de dumper le contenu de la base NTDS (voir chapitre Dumping All The Hashes–ntdsgrab.rb). Ceci afin de cracker les mots de passe de tous les utilisateurs du domaine, c’est ce qui s’est d’ailleurs passé lors de la récente cyberattaque contre le New York Times. Nous allons voir dans ce post comment rendre cette tâche plus difficile à un attaquant en modifiant certains paramètres de sécurité sur nos contrôleurs de domaine.
Un script Ruby (ntdsgrab.rb réalisé par R3dy) permet d’extraire avec BackTrack le fichier NTDS.dit et la ruche SYSTEM d’un DC nécessaires pour obtenir tous les hash de mots de passe du domaine: Pour cela copier le fichier sous /pentest/exploits/framework/modules/auxiliary/admin/smb, nous le nommons grab.rb:
Ne vous reste plus qu’à charger le module et à paramétrer les bonnes options:
msf > use auxiliary/admin/smb/grab msf auxiliary(grab) > set RHOSTS 192.168.206.134 RHOST => 192.168.206.134 msf auxiliary(grab) > set SMBUser Administrator SMBUser => Administrator msf auxiliary(grab) > set SMBDomain LDAP389 SMBDomain => LDAP389 msf auxiliary(grab) > set SMBPass MyPassword SMBPass => MyPassword msf auxiliary(grab) > show options Module options (auxiliary/admin/smb/grab): Name Current Setting Required Description ---- --------------- -------- ----------- LOGDIR /tmp/NTDS_Grab yes This is a directory on your local attacking system used to store the ntds.dit and SYSTEM hive RHOSTS 192.168.206.134 yes The target address range or CIDR identifier RPORT 445 yes Set the SMB service port SMBDomain LDAP389 no The Windows domain to use for authentication SMBPass MyPassword no The password for the specified username SMBSHARE C$ yes The name of a writeable share on the server SMBUser Administrator no The username to authenticate as THREADS 1 yes The number of concurrent threads VSCPATH no The path to the target Volume Shadow Copy WINPATH WINDOWS yes The name of the Windows directory (examples: WINDOWS, WINNT) msf auxiliary(grab) > run |
Et exécuter le module:
Le module utilise l’outil vssadmin.exe afin de créer une shadow copy de la partition contenant le NTDS. Cet outil repose sur le service VSS, qui permet de sauvegarder vos DCs.
Nous allons donc via GPO modifier la sécurité du service VSS:
- Pour les DCs que nous ne sauvegardons pas: Oui vous n’êtes pas obligé de sauvegarder tous vos DCs, MS recommande un minimum de deux DCs par domaine (1 avec rôle FSMO, 1 sans). En cas de désastre ces derniers sont réinstallés complètement via dcpromo ou via Installation from Media pour gagner du temps. Vous pouvez désactiver le service VSS, empêcher tout compte de démarrer le service et de modifier sa sécurité, enfin activer l’audit d’accès au service. La GPO est filtré via le groupe de sécurité LDAP389-DC-NOBACKUP auxquels appartiennent les DCs non sauvegardés:
- Pour les DCs que nous sauvegardons: Nous allons laisser le service VSS en démarrage manuel, empêcher tout compte de démarrer le service et permettre seulement au compte SYSTEM de modifier sa sécurité. La tâche de sauvegarde réalisée via une tâche planifiée sera détaillée plus tard. La GPO est filtrée via le groupe LDAP389-DC-BACKUP auxquels appartiennent seulement les DCs sauvegardés:
Une fois cette configuration appliquée le module ntdsgrab.rb ne fonctionne plus:
On peut par ailleurs retrouver dans le journal d’application l’erreur lancement de VSSadmin.exe (Source VSS, ID 7001), comme l’audit sur ce service est activé via GPO on voit dans le journal de sécurité que le compte administrateur du domaine ne peut lancer le service VSS (Audit failure, ID 4656). Enfin il est facile d’identifier la machine attaquant le DC en regardant les événements de sécurité juste avant l’échec d’accès au service:
Pour que nôtre sauvegarde légitime fonctionne nous créons une tâche planifiée tournant sous le compte SYSTEM et lançant le batch backup.cmd. Nous allons utiliser wbadmin.exe pour faire la sauvegarde sur un autre disque (partition E:), mais avant cela le compte SYSTEM se donnera les droits de lancer le service VSS grâce à la commande sc sdset. Une fois la sauvegarde effectuée le service VSS est stoppé et les permissions poussées via GPO appliquées de nouveau.
Le contenu du batch backup.cmd est le suivant:
sc sdset vss D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWLOCRSDRC;;;BA)(A;;CCLCSWLOCRRC;;;IU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD) wbadmin.exe start backup -backupTarget:E: -allCritical -systemState -quiet net stop vss sc sdset vss D:(A;;CCDCLCSWLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWLOCRSDRC;;;BA)(A;;CCLCSWLOCRRC;;;IU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD) |
Ci dessous on voit que les backup qui sont bien réalisés, voici aussi la tâche planifiée:
Bien entendu, comme ennoncé en début de post si le pirate est administrateur du domaine, rien ne l’empêche de se loguer sur le DC, d’obtenir les privilèges SYSTEM, changer les permissions sur le service en ligne de commande et utiliser vssadmin pour extraire le NTDS. Mais l’atténuation décrite ci dessus l’aura au moins frêné et aura surêment permis de le détecter (via une alerte sur les erreurs VSS dans le journal d’application).
Enfin, quand cela est possible utiliser des RODCs sur vos sites distants et configurer la stratégie de réplication de mots de passe pour que la base NTDS ne stocke les mots de passe utilisateurs et machine du site. Si le RODC est compromis, vous pouvez reseter les mots de passe des utilisateurs qui ont leur mot de passe stocké dans le NTDS du RODC.
This post is also available in: Anglais
2 Comments
Other Links to this Post
RSS feed for comments on this post. TrackBack URI
By r0llb4ck, February 11, 2013 @ 3:31 pm
TODO : hooker le journal d’applications pour que les alertes VSS ne remontent pas aux paresseux admins
By ldap389, February 11, 2013 @ 7:21 pm
Bravo… On reconnait bien la touche Regre$$ion $oftware 😉