Home Grown Red Team : Du poste de travail au contrôleur de domaine avec Havoc C2 et Microsoft EDR

Content de te revoir! Dans cette entrée de blog, nous affronterons à nouveau Defender For Endpoint EDR de Microsoft pour voir si nous pouvons passer d'un contexte à faible intégrité à l'administrateur de domaine et obtenir l'exécution de code à distance sur un contrôleur de domaine !
Au cours des deux derniers mois, j'ai plongé dans différentes techniques pour voir ce que nous pouvons faire avec des outils open source contre l'un des EDR les plus populaires.
Dans ce blog, je vais passer en revue certains concepts courants pour accéder à un contrôleur de domaine, mais avec différentes techniques que j'ai trouvées.
Ceux-ci inclus:
- Contournement UAC avec un binaire personnalisé UACME
- Mouvement latéral avec CrackMapExec et SharpWMI.exe
- Passage de session à Covenant
- DCSync avec Pacte
Ravages C2
J'ai déjà expliqué comment faire fonctionner Havoc. Si vous ne le connaissez pas, vous pouvez consulter mon article Obtenir le système sur Windows 11 avec Havoc C2 .

Avec mon C2 en place, je vais générer du shellcode et l'exécuter via mon propre outil de shellcode, Harriet.

Maintenant que j'ai un binaire FUD, je peux le transférer sur le premier poste de travail de mon environnement AD.

Comme dans mes messages précédents, nous avons ici un environnement AD extrêmement petit. Pour des raisons de temps et d'espace de blog, nous allons commencer avec un DA connu dans un contexte moyen.
Je transfère mon implant sur Win11-Blue.blueteam.local et récupère notre balise initiale.


Vérifions l'EDR et voyons si l'exécution initiale a réussi.

Tout le monde se tait! D'accord! Nous pouvons passer à autre chose. Faire une simple commande "whoami" nous montre que Danny est dans le groupe DA.

L'exécution de SharpUp nous indique que nous pouvons effectuer un contournement UAC pour obtenir des privilèges d'administrateur.

Binaire UACME personnalisé
Dans un article précédent, j'ai utilisé la méthode ComputerDefaults pour obtenir l'administrateur, mais cela est actuellement détecté par Defender For Endpoint. Nous voulons obtenir DA sans alerte, nous allons donc faire quelque chose de scandaleux : déposer quelque chose sur le disque !
Sur ma machine de développement Windows 11, je clone le projet UACME.

git clone https://github.com/hfiref0x/UACME.git
Nous chargeons le fichier sln et nous avons notre projet chargé.

Une fois compilé, le binaire UACME est nommé Akagi, nous allons donc commencer à personnaliser les fichiers trouvés dans cette section de l'explorateur de solutions.

En développant le projet, nous voyons plusieurs sections pour les fichiers d'en-tête, les ressources, etc.
Nous pouvons commencer notre processus en effectuant une recherche et un remplacement rapides des chaînes courantes trouvées dans le projet.

Certaines des autres chaînes que nous pouvons remplacer sont ci-dessous :
Akagi
UACME
UAC
CHARGE UTILE
Si nous essayons de construire la solution maintenant, cela échoue.

Il ne trouve pas le fichier d'icône car nous n'avons pas changé son nom. Nous devons donc changer son nom dans le dossier Akagi.

Une fois que nous avons changé le nom de l'icône, elle se construit avec succès.

Maintenant, si nous regardons les détails du binaire construit, nous voyons qu'il y a des propriétés révélatrices.

Nous faisons une recherche rapide pour APT 92 dans notre projet, nous trouvons le fichier Resources.rc avec ces descriptions.

En parcourant les fichiers source, nous voyons le dossier des méthodes.

Chacun de ces fichiers de méthode représente différents contournements UAC à utiliser dans le binaire compilé. Si nous parcourons chacune de ces méthodes, nous voyons divers commentaires avec les noms des méthodes. Pour dépasser Defender et d'autres moteurs AV, nous devons supprimer ces commentaires de chaque fichier de méthode.

Supprimer tous les commentaires des fichiers de méthodes peut prendre beaucoup de temps, mais nous ne devrions avoir à le faire qu'une seule fois avant d'avoir un binaire qui n'est pas intercepté par AV.
Et après avoir supprimé tous les commentaires du fichier et recompilé, nous obtenons notre binaire. En l'exécutant sur AntiScan.me, nous constatons que nous avons contourné plusieurs fournisseurs AV.

En le scannant contre Windows Defender, nous voyons qu'il n'est pas détecté.

Obtenir l'administration
De retour sur Havoc, nous avons juste besoin de télécharger le binaire sur notre cible.

Vérifions avec l'EDR de Microsoft pour voir si nous nous sommes déjà fait prendre.

Ça n'en a pas l'air. Continuons !
Avec notre binaire UACME sur la cible, nous devons l'exécuter avec notre méthode. Les commandes Powershell et shell pourraient nous faire attraper, alors utilisons WMI. Heureusement, SharpWMI nous permet d'exécuter les commandes en mémoire.
Mais d'abord, nous avons besoin d'une méthode pour Windows 11.

59 semble bon. Appelons notre méthode avec SharpWMI.
dotnet inline-execute /home/user/Desktop/SharpWMI.exe action=exec computername=WIN11-BLUE.blueteam.local command=”C:\Users\danny\Downloads\Acaji.exe 59 C:\Users\danny\Downloads \Inj3c13.exe"
Et nous récupérons notre balise d'administration !

En revenant sur notre EDR, nous n'avons aucune détection.

Super! Alors maintenant que nous avons déterminé que nous pouvons obtenir l'exécution de code sans déclencher l'EDR, nous pouvons utiliser cette même méthode pour nous déplacer à travers le domaine vers le DC.
REMARQUE : Bien sûr, vous ne feriez pas cela dans une application du monde réel. Nous avons un DA donc nous pourrions juste DCsync, mais nous voulons voir si nous pouvons nous déplacer sans modifier l'EDR.
Mouvement latéral
Donc, sur WIN11-BLUE, nous avions la possibilité de télécharger notre binaire, mais comment le faire lorsque nous n'avons pas de balise sur le DC ?
Dans un article précédent, j'ai prouvé que nous pouvions le faire avec Powershell et une tâche planifiée. Dans cet article, nous utiliserons une méthode différente. Nous allons télécharger notre binaire sur la cible à l'aide de CrackMapExec, puis l'appeler avec SharpWMI.
Préparation pour notre attaque
Donc, pour ce POC, nous allons prétendre une fois de plus qu'il existe un document top secret sur le DC que nous devons exfiltrer. La première chose que nous devons faire est d'obtenir un mot de passe ou un hachage pour notre utilisateur Danny.
Puisque nous sommes administrateur, nous pouvons utiliser plusieurs méthodes pour obtenir des hachages, mais le plus simple pour moi est de passer la session à Covenant et d'utiliser leur commande DCsync.
Donc, sur Covenant, nous configurons notre fichier shellcode et le téléchargeons sur notre système local.

Pour plus de simplicité, je vais changer le nom du fichier en grunt.bin, puis je vais le faire passer par Harriet. Cela le chiffrera afin que nous puissions passer l'EDR.

Maintenant que nous avons un binaire, nous pouvons utiliser Donut pour le transformer en shellcode.

Et la dernière partie consiste à l'injecter dans le processus de notre exécutable Havoc.

Avec le shellcode injecté avec succès, nous passons à Covenant et nous avons un nouveau grognement qui s'enregistre.

Jetons un coup d'œil à l'EDR.

Rien à voir ici! On peut avancer !
De retour sur Covenant, nous pouvons utiliser la commande DCsync et obtenir le hachage de Danny. Et après quelques secondes, Danny et le domaine ont été possédés.

D'accord, cool. Nous avons donc démontré que nous pouvons obtenir le hachage d'un DA. Mais qu'en faites-vous une fois que vous l'avez ? Rappelez-vous, le but de notre exercice n'était pas d'obtenir le contrôle de domaine, c'est d'obtenir le document secret sur le DC.
Passer au contrôleur de domaine
Nous avons un exécutable FUD que nous devons télécharger sur le DC. Pour cela, nous allons utiliser CrackMapExec. Voici donc notre commande.
crackmapexec smb 192.168.1.9 -u danny -H 83c4be1a3fd33a182dafc8bd3bf53d00 -d blueteam.local — mettre-fichier /home/kali/Desktop/Inj3c13.exe \\WINDOWS\\TEMP\\25N0v3.exe
Nous utilisons le module SMB et nous avons l'adresse IP du contrôleur de domaine. Ensuite, nous utilisons le nom d'utilisateur de danny et entrons dans son hachage NTLM. Nous avons le domaine, puis utilisons la commande "- put-file" avec le chemin d'accès à notre exécutable FUD, puis le répertoire dans lequel nous voulons déposer le fichier sur le DC.
Essayons.

Et juste comme ça, notre exécutable est sur le DC ! Maintenant, nous devons l'appeler. Nous pouvons utiliser SharpWMI.exe pour le faire en mémoire comme nous l'avons fait avec WIN11-BLUE.
Et maintenant nous avons une balise en haute intégrité sur le DC !

Trouvons le butin !
Après une petite énumération, on le retrouve dans le dossier Documents de Danny.

Téléchargeons-le.

Avant de jeter un coup d'œil, vérifions avec l'EDR.

A quoi sert cette chose ?
Et voici le butin !

D'accord! Donc, en conclusion de cet article, parlons un peu de ce que nous avons fait et comment nous l'avons fait.
Nous avons commencé avec une balise à faible intégrité et avons augmenté nos privilèges en créant un binaire UACME personnalisé qui a dépassé Windows Defender et Windows Defender pour Endpoint.
Nous avons ensuite appelé le binaire UACME avec SharpWMI.exe en mémoire pour une approche plus furtive de Powershell ou des commandes shell.
Une fois nos privs maximisés, nous avons passé une session à Covenant pour utiliser la commande DCsync afin d'obtenir le hachage NTLM du DA. Nous avons ensuite utilisé CrackMapExec pour télécharger une balise sur le DC et l'avons appelée à l'aide de SharpWMI.exe.
Alors, comment cet environnement a-t-il été truqué pour notre succès ? WMI n'est pas activé par défaut pour les contrôleurs de domaine, les serveurs Windows ou les postes de travail Windows 11.
Cependant, dans un environnement d'entreprise moderne, WMI sera activé sur la plupart de ces machines pour faciliter le dépannage des administrateurs système. Nous avons également commencé notre voyage sur le compte d'un DA, mais c'était juste pour rendre les choses un peu plus pratiques pour la rédaction.
Il est également important de comprendre que nous n'avions aucun autre AV installé sur les systèmes. Si vous vous en souvenez, BitDefender considérait notre binaire UACME comme malveillant. Soyez donc prudent lorsque vous l'utilisez sur un vrai pentest.
Si vous avez apprécié cet article et que vous voulez voir tout ce que je fais d'autre, suivez-moi ici ou sur Twitter @assume_breach