Il est temps de mettre la main à la pâte pour entrer dans le vif du sujet. Lorsque vous êtes dans un environnement Active Directory, il y a énormément d’informations à chercher et à noter pour pouvoir correctement mener une attaque. L’objectif de ce chapitre est d’identifier les serveurs et postes potentiellement vulnérables qui pourront par la suite être utilisés comme point d’entrée par un attaquant.
Pour cela, vous voici dans la peau d’un administrateur système de l’entreprise MedicEx. Nous utiliserons le cas de cette entreprise fictive régulièrement dans le cours. En tant qu'administrateur système, vous pouvez vous brancher sur le réseau sans restriction, et vous n’avez pas à vous soucier de potentielles détections (anti-virus, EDR, sondes réseau, etc.)
Identifiez les machines de l’environnement de travail
Afin d’identifier les machines vulnérables, il faut d’abord les découvrir sur le réseau. C’est le premier réflexe que j’ai lorsque je démarre un test d’intrusion dans une entreprise. Je vais chercher où se trouvent les machines. Bien sûr, le client sait où se trouvent la plupart de ses équipements, mais deux points restent intéressants :
il est important que vous sachiez les découvrir par vous-même, quelle que soit la taille du réseau ;
il arrive régulièrement que des serveurs soient allumés sans que le client le sache. Ce sont d’ailleurs très souvent ces machines qui présentent un intérêt pour l’attaque, puisqu'elles ne sont pas surveillées, ou le sont peu.
L’objectif est de les débusquer. Pour cela, la technique principale est le scan réseau. Découvrez la vidéo pour en savoir plus sur cette technique.
Il existe beaucoup de scans réseau, plus ou moins discrets et rapides, mais je vais vous présenter ceux que j’utilise le plus régulièrement en audit. Souvenez-vous que vous ne vous souciez pas des problèmes de détection. Je vais donc vous parler de techniques que je considère efficaces, en vous présentant deux outils.
Le premier outil permet de faire beaucoup de types de scans ; il s’appelle nmap. Il est open source, gratuit, et une très grande communauté le fait évoluer depuis de nombreuses années.
Scan ICMP
Le scan le plus simple à comprendre est le scan ICMP, ou Ping-Scan. L’outil envoie une requête ICMP (un PING) à toutes les adresses IP que vous souhaitez découvrir, et si la machine répond, c’est qu’elle est allumée. Pour l’utiliser avec nmap, le paramètre -sP
doit être fourni, puis les adresses à scanner.
nmap -sP 10.10.10.0/24
Scan TCP
Le scan le plus commun est le scan TCP. Je vais rappeler rapidement à quoi correspond TCP, mais vous pourrez trouver plus de détails dans ce chapitre du cours Maîtrisez vos applications et réseaux TCP/IP.
Lorsqu’un client veut accéder à un service proposé par un serveur, il peut utiliser le protocole TCP (Transmission Control Protocol). C’est un protocole qui permet au client de s’assurer que le serveur reçoit bien ses messages dans l’ordre, et de même pour le serveur vis-à-vis du client. Il est très utile lorsque les paquets doivent impérativement être reçus par le serveur. Imaginez un serveur proposant un service de vente sur internet, mais qui ne vérifie pas les informations de paiement.
Pour cela, le client indique au serveur qu’il veut communiquer avec lui sur un port spécifique, port correspondant au service demandé, en envoyant un message SYN (Synchronize). Si le serveur accepte la connexion sur ce port, il répondra avec un SYN/ACK (Synchronize Acknowledge). Le client validera cette réponse avec un simple ACK (Acknowledge).
Si le serveur refuse la connexion sur ce port, il répondra avec un RST/ACK (Reset Acknowledge).
Enfin, si le serveur est éteint, il n’y aura pas de réponse du tout.
Le principe du scan TCP est donc d’envoyer une demande de connexion TCP SYN aux différentes adresses IP sur différents ports. Si ces cibles répondent avec un SYN/ACK ou un RST/ACK, alors elles sont allumées. En cas d’absence de réponse, vous ne pouvez pas discuter avec cette adresse IP. Soit il n’y a pas de machine, soit elle est éteinte, soit il y a un filtre réseau qui bloque vos paquets.
Si la réponse est un SYN/ACK, vous savez également que le port que vous avez testé est ouvert, un service est accessible sur celui-ci. C’est très intéressant car vous pourrez tenter d'interagir avec ce service, et peut-être l’exploiter !
Ce type de scan est celui par défaut dans nmap. Ainsi, pour l’utiliser, il vous suffit de lancer la commande suivante :
nmap 10.10.10.0/24
Scan SYN
Un autre type de scan dont je veux vous parler est le scan SYN. Il permet d’aller plus vite que le scan TCP. Dans le scan TCP, dès qu’un port est ouvert, l’outil ferme correctement la connexion en répondant avec le dernier ACK. Eh bien le scan SYN ne le fait pas. Il ne fait qu’envoyer un SYN, analyse la réponse comme précédemment, et passe à l’IP suivante. Ça permet d’économiser un peu de temps, et donc de scanner plus vite !
Pour l’utiliser, vous devez passer le paramètre -sS
.
nmap -sS 10.10.10.0/24
Scan NetBIOS
Le dernier type de scan que j’utilise très souvent est le scan NetBIOS. Il est particulier car il est plus limité que les scans précédents, mais il est extrêmement rapide. Il repose sur le protocole NetBIOS, propre à Windows, qui permet de faire un lien entre adresse IP et nom de machine.
L’outil NBTscan, lui aussi gratuit et open source, permet d’effectuer ce type de scan. Je l’utilise quand je dois scanner des très grandes plages réseau, et c’est vraiment efficace.
Pour l’utiliser, rien de plus simple, vous n’avez qu’à lui fournir les adresses à scanner.
nbtscan 10.10.0.0/16
Comme le protocole utilisé est propre à Windows, NBTscan ne découvrira la plupart du temps que des machines Windows. Comme il est extrêmement rapide, cela permet de voir où se trouvent les machines dans un très grand réseau, pour ensuite faire des scans plus complets dans ces sous-réseaux découverts.
Une fois que vous avez identifié les machines présentes sur le réseau, une recherche de vulnérabilités peut vous permettre de prendre la main sur l’une d’entre elles.
Énumérez les vulnérabilités
Vous savez maintenant quelles machines sont accessibles sur le réseau. L’objectif est d’aller un peu plus loin, et de découvrir les services proposés par ces machines pour peut-être en exploiter, et prendre la main sur quelques hôtes.
La première étape cruciale est l’énumération de ports. Nous avons évoqué cette technique lors des scans TCP et SYN. Lorsque vous savez qu’une machine vous répond, vous pouvez effectuer un balayage de ports. Vous allez envoyer une requête TCP sur chaque port, et la réponse du serveur vous indiquera s’il y a un service en écoute sur ce port ou non. Avec l’outil nmap, voici comment balayer les ports 21, 22, 80 et 443 sur une adresse spécifique :
nmap -p 21,22,80,443 10.10.10.2
Généralement, à un port correspond un service. Cependant, il est tout à fait possible que ce ne soit pas le cas. Pour déterminer le service qui tourne derrière chaque port, l’option -sV
de nmap sera d’une grande aide. L’outil tentera même de déterminer la version du service ! Voici la commande avec un exemple de sortie de l’outil.
nmap -p 22 -sV 10.10.10.2
Starting Nmap 7.60 ( https://nmap.org )
Nmap scan report for 10.10.10.2
Host is up (0.58s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH for_Windows_8.1 (protocol 2.0)
L’outil nous apprend que la machine 10.10.10.2
est allumée, que le port TCP 22 est en écoute, et que le service est OpenSSH For Windows en version 8.1.
Vous pouvez consulter le site CVE Details pour déterminer si cette version de OpenSSH est vulnérable.
Ce n’est pas un peu fastidieux de chercher des vulnérabilités pour toutes les versions de tous les services ? Il n’y a pas de moyen plus automatisé de voir ce qui est vulnérable ?
C’est vrai, c’est assez fastidieux, et il existe des solutions qui automatisent ce processus. Mais bien comprendre la démarche vous permet de comprendre comment fonctionnent ces outils. Et si un jour vous avez des besoins précis sur une machine, vous n’avez pas besoin de lancer un outil qui va remuer ciel et terre pour récupérer la seule petite information que vous cherchiez.
Ces solutions automatisées sont les scanners de vulnérabilités. Ils embarquent souvent toutes les étapes dont nous avons parlé. Ils automatisent alors la découverte des hôtes sur le réseau, des services, des versions et des vulnérabilités associées. OpenVAS est un scanner de vulnérabilité gratuit et open source. Dans le monde professionnel, des outils comme Nessus ou Qualys peuvent être utilisés.
Avant de passer à l'exercice, vous comprenez qu’il est important de rester à jour sur les vulnérabilités d’Active Directory. Écoutons comment Lionel se tient à jour sur le sujet :
En résumé
Identifier les machines sur le réseau est indispensable pour cibler ses attaques. Pour cela, différents types de scans permettent de parvenir à vos fins, comme par exemple :
le scan ICMP, simple et efficace pour trouver des machines allumées ;
le scan TCP qui permet d’avoir en plus une information sur l’état d’un ou plusieurs services ;
le scan SYN, plus rapide que le scan TCP, mais qui requiert des droits privilégiés sur la machine de scan ;
le scan NetBIOS, extrêmement efficace mais pas exhaustif, à compléter avec l’un des trois autres scans présentés.
Découvrir les services proposés par les machines, leur version et leurs potentielles vulnérabilités permet de préparer un plan d’attaque solide.
Ce chapitre vous a permis de cartographier le réseau, les machines et leurs services. Une famille de services nous intéresse tout particulièrement : Active Directory. Il est enfin temps de plonger dans cet environnement, en commençant par bien identifier le domaine et ses potentiels points d’entrée.