Windows

Les formats de hash Windows

NTLM, Net-NTLM, LM … Sous Windows il existe plusieurs formats de hash qui sont plus ou moins intéressants du point de vue d’un attaquant. Dans cet article nous verrons quels sont ces formats de hash, comment ils sont créés et ce qu’on peut en faire au cours d’un pentest.

I/ Les hash LM

Les hash LM sont les anciens formats de hash utilisés dans un environnement Windows. Aujourd’hui il est clairement déconseillé d’utiliser ce format de hash car il est trop vulnérable et peut facilement être cassé.

Les hash LM ont une taille fixe de 14 octets. Peu importe que votre mot de passe fasse 10, 8, 2 ou 11 caractères puisqu’il sera paddé afin d’atteindre la taille de 14 octets.

Voici les étapes nécessaires pour générer un hash LM :

  1. On convertit tous les caractères en majuscule
  2. On ajoute des octets de padding afin que le mot de passe fasse bien 14 caractères
  3. On coupe le mot de passe en deux strings de 7 caractères chacune
  4. A partir de ces deux strings on crée deux clés DES
  5. On chiffre la chaîne de caractère « KGS!@#$% » avec les deux clés
  6. On concatène les résultats afin d’obtenir le hash LM

Pourquoi est ce qu’on utilise plus ces hashs aujourd’hui ? Eh bien pour plusieurs raisons. La première c’est que le mot de passe est automatiquement convertit en majuscule ce qui divise par deux le temps de crackage (vu que les caractères minuscules ne sont pas pris en compte).

Ensuite l’algorithme de chiffrement utilisé est l’algorithme DES qui n’est plus suffisamment robuste à l’heure actuelle.

Enfin, il n’y a pas de notions de sel lors de la phase de chiffrement ce qui implique que les hash LM sont vulnérables aux rainbow tables.

Pour craquer un hash LM on pourra utiliser ces commandes :

john --format=lm hash.txt
hashcat -m 3000 -a 3 hash.txt

II/ Les hash NTLM

Les hash NTLM sont les hash nouvelle génération de Windows. C’est avec ces hash là que nous allons pouvoir Pass the Hash.

Les hash NTLM sont générés via l’algorithme de chiffrement MD4 :

MD4(UTF-16-LE(password))

En python on pourra d’ailleurs générer un hash NTLM en trois lignes de cette manière :

import hashlib,binascii
hash = hashlib.new('md4', "mon_mot_de_passe".encode('utf-16le')).digest()
print binascii.hexlify(hash)

Même si l’algorithme est plus robuste, les hash NTLM restent toujours trop peu sécurisés puisqu’il n’y a toujours pas de notions de sel : les hash NTLM sont eux aussi vulnérables aux rainbow tables.

On pourra cracker des hash NTLM via ces commandes :

john --format=nt hash.txt
hashcat -m 1000 -a 3 hash.txt

III/ Les hash Net-NTLM v1/v2

Ces hash là, même s’il y a NTLM dans leurs nom, ne peuvent pas être utiliser dans une attaque de type Pass the Hash. En revanche ce sont ces hash qui sont utilisés afin d’authentifier des utilisateurs sur un réseau Active Directory et que l’on peut relayer via une attaque de type NTLM relay.

Pour les casser on pourra utiliser ces commandes pour les hash Net-NTLMv1:

john --format=netntlm hash.txt
hashcat -m 5500 -a 3 hash.txt

et ces commandes pour les hash Net-NTLMv2 :

john --format=netntlmv2 hash.txt
hashcat -m 5600 -a 3 hash.txt

 

Administration système

Administration système

Introduction à l'Active Directory

A la base de tout réseau d’entreprise se trouve un domaine Active Directory. Dans cet article j’essayerai d’expliquer assez rapidement ce que c’est et surtout ce qu’on y trouve.

I/ Introduction à l’Active Directory

Selon Wikipédia (oui parce que je n’ai pas trouvé de meilleur définition que la leur….) :

Active Directory (AD) est la mise en œuvre par Microsoft des services d’annuaire LDAP pour les systèmes d’exploitation Windows.

Active Directory c’est surtout un ensemble de fonctionnalités (authentification, partage de ressources, installation de mises à jour, ou encore déploiement de règles de sécurité) qui permettent de simplifier la gestion des ressources sur un réseau pour les administrateurs.

Lors de la création d’un domaine Active Directory, le serveur sur lequel on l’a créé devient ce que l’on appelle un Domain Controller (DC). Ce DC est la pièce maîtresse de l’Active Directory. S’il est compromis ou n’est plus joignable alors le domaine est inutilisable.

Suivant la version de Windows Server utilisée par le Domain Controller on va pouvoir déterminer le niveau fonctionnel du domaine. En fait c’est simple, si le DC fonctionne sous Windows Server 2012 alors le niveau fonctionnel du domaine Active Directory est Windows Server 2012. Ce niveau fonctionnel, on peut l’upgrader (passer sous Windows Server 2016 par exemple) mais pas le downgrader (passer sous Windows Server < 2012). En revanche les versions Server 2012/2016 sont compatibles avec Windows Server 2008/R2 et autres (par exemple).

Active Directory est une suite de cinq rôles différents :

Le plus important de tous, c’est Active Directory Domain Services (plus communément appelé AD DS ou tout simplement AD). Ce rôle va nous permettre de gérer nos ressources (utilisateurs, ordinateurs, groupes etc…). Pour cela on va disposer d’une suite d’outils d’administrations dont le plus important est « Utilisateurs et ordinateurs Active Directory ». Voici un aperçu :

azVad1.png

Grâce à cet outil on va pouvoir lister la totalité des utilisateurs/groupes et des ordinateurs/serveurs du domaine Active Directory. Par exemple ici on peut voir les attributs de l’utilisateur Administrateurs :

vH0ad2.png

Si c’est vide, c’est tout simplement parce que -par pure flemme- je n’ai pas complété les informations du compte. Dans mon cas ce n’est pas trop trop grave vu qu’il n’y a que trois comptes sur mon laboratoire Active Directory mais ça peut devenir très vite embêtant sur un vrai domaine ! Donc n’oubliez pas de compléter les informations quand vous créez des comptes  !

Toutes les informations que l’on peut voir via cet outil sont stockées dans une base de données appelée NTDS.dit. Ce fichier est trouvable dans le répertoire C:\Windows\NTDS\ du DC :

ns6ad4.png

NTDS.dit c’est un peu le saint Graal de tous les pentesters, le trophée final qui montre que le domaine a été totalement compromis. En effet pour pouvoir dumper cette base de données il faut avoir les droits Administrateur du domaine et avoir compromis le DC (ce qui implique que vous avez déjà bien explosé le domaine !) :

2.png

Quand on joint un ordinateur à un domaine, on indique juste à cet ordinateur que désormais l’autorité d’authentification est le domain controller et non plus le processus lsass. Par conséquent quand vous allez vous connecter à un ordinateur connecté à un domaine, vos identifiants seront « envoyées » au domain controller et lui, et lui seul, validera, ou non, l’authentification.

Enfin bref, il y a pleeeeeeeeeeeeeeeeins de trucs à voir sur le fonctionnement d’un domaine Active Directory donc on y reviendra plus tard dans d’autres article. Pour le moment on va juste jeter un coup d’œil aux notions de forêt, d’arbre et de domaine.

II/ Forêt, arbre et domaine

On parle de « domaine Active Directory » lorsque plusieurs ressources (utilisateurs, imprimantes, ordinateurs, services) partagent les informations d’un même annuaire et utilisent une méthode d’authentification commune. Par convention on représente un domaine par un triangle. Ci-dessous nous avons donc le domaine whiteflag.fr :

huXad5.png

Suivant la taille des entreprises il peut arriver qu’un seul domaine soit trop contraignant à gérer. Imaginez une très grande entreprise qui emploie plusieurs milliers de personnes dans le monde. Il serait très compliqué de gérer toutes ces ressources sur un seul domaine. A la place, on va pouvoir découper ce domaine en plusieurs sous domaines que l’on appelle plus communément des domaines enfants

Par exemple, on pourra créer trois domaines enfant : un pour l ‘Europe, un pour l’Asie et un pour l’Amérique :

ek5ad6.png

En faisant ça, on vient de créer un arbre ! Un arbre, c’est tout simplement un domaine lié à plusieurs domaines enfants. Notez que les domaines enfants et le domaine principale ont tous la même racine DNS : whiteflag.fr.

De la même manière, si on lie deux arbres différents entre eux, on va créer ce qu’on appelle une forêt ! Par exemple, si en plus des domaines enfants, l’entreprise décide d’acheter une autre entreprise qui dispose elle même d’un domaine (disons blackflag.fr) et qu’elle désire lier les deux domaines alors on aura ceci :

D9yad7.png

Alors pourquoi ferait-on ce genre de raccord ? Eh bien tout simplement parce que dans une forêt, tous les domaines/arbres se font confiance les uns les autres. C’est ce qu’on appelle le « two way transitive trusts« .

Par conséquent un utilisateur du domaine whiteflag.fr pourrait très bien se connecter à un serveur du domaine blackflag.fr. De plus, tous les domaines d’une forêt partage un même catalogue global. Ce catalogue contient tous les objets de la forêt (donc dans notre cas de nos deux domaines) mais ne contient pas tous les attributs de tous nos objets. L’idée du catalogue global c’est d’avoir une idée globale des objets présents dans la forêt sans pour autant avoir une base de données gigantesque.

En revanche, les domaines/arbres présents dans une même forêt sont indépendants et n’ont pas la même racine DNS.

Administration système

Mise en place d'un environnement Active Directory

Dans cet article nous allons voir comment monter la base d’un réseau d’entreprise. La base, c’est : un Active Directory, un DNS et un DHCP. Sans ces trois éléments, nous ne pourrons pas nous servir de notre réseau (ah et des clients aussi… Sinon ça sert à rien).

Pour les besoins de cet article je vais utiliser deux VM’s : une VM Windows 2012 pour le serveur DNS/DHCP/AD et une VM Windows 7 SP1 pour le client. Let’s go !

I/ Mise en place d’un Active Directory / DNS

Avant d’aller plus loin on va renommer le serveur. Pour cela allez dans les paramètres de l’ordinateur :

dc1.png

Pour ma part je l’ai renommé en « DC » car c’est ce à quoi il va servir sur le long terme. Dans un même temps on va aussi attribuer une IP statique à notre DC. Pour cela il faut aller dans le « Panneau de configuration » puis « Réseau et Internet » et enfin « Connexions réseau ». Faites un clic droit sur votre connexion puis cliquez sur « Propriétés ». Ensuite, cliquez sur « Protocole Internet version 4(TCP/IPv4) et complétez la nouvelle fenêtre avec les informations adéquates :