TP Attaques bruyantes ou scan réseau
Responsables : Jp Gelas, Thomas Begin
Ce premier sujet de TP propose une introduction à Nmap
, un outil de
scanning relativement efficace pour un administrateur mais néanmoins beaucoup
trop "bavard" pour être utilisé sans connaissances préalable par un pentesteur.
Qu'est ce que Nmap ?
Extrait du site web officiel https://nmap.org/
Nmap ("Network Mapper") is a free and open source (license) utility for network discovery and security auditing. Many systems and network administrators also find it useful for tasks such as network inventory, managing service upgrade schedules, and monitoring host or service uptime.
Nmap est souvent utilisé pour déterminer les hôtes actifs dans un réseau, les ports ouverts sur ces hôtes, les services fonctionnant sur ces ports ouverts et l'identification de la version de ces services sur ces ports.
Comment fonctionne Nmap ?
Nmap fonctionne en envoyant de nombreux paquets vers la cible, puis la cible répond d'une manière spécifique. Par exemple, Nmap peut envoyer un paquet à la cible, explicitement sur le port 80 (qui est généralement un service HTTP). La cible répond alors de manière spécifique, ce qui correspond à un état (open, closed, filtered). Si le port est ouvert, Nmap identifie en fonction de la réponse quel type de service HTTP est en cours d'exécution (Apache, Nginx, IIS, etc.). Ensuite, une autre vérification est utilisée pour identifier la version, et ainsi de suite.
Nmap a un enregistrement des services qui correspond à un type de réponse à ce type de requête, ce qui conduit éventuellement à ce que Nmap détermine correctement quel est le service et sa version. Cela n'est cependant pas infaillible, car Nmap confond parfois un service fonctionnant sur ce port (si vous ne faites pas une vérification beaucoup plus fastidieuse en utilisant les bonnes options) parce que ce port est couramment utilisé pour un service spécifique. Notez que les scans de Nmap sont mieux exécutés avec les privilèges d'un administrateur ou de root car Nmap envoie des paquets bruts (raw) et il est nécessaire d'être un utilisateur privilégié pour envoyer ces paquets bruts.
Usage de Nmap
nmap [scan type] [options] [target specification]
Types de scan Nmap courants
Nmap propose différents types de scan en fonction de vos besoins. Les plus courants sont le scan SYN (-sS), le scan TCP connect (-sT) et le scan UDP (-sU). Notez que le scan SYN et le scan TCP utilisent le three-way handshake :
- Le scan SYN (-sS) identifie un port qui doit être ouvert en envoyant un "SYN" à la cible. Si elle reçoit un SYN-ACK ou un SYN, elle marque ce port comme étant ouvert. S'il reçoit un "RST", il marque le port comme étant filtré (filtered), c'est à dire inaccessible à cause d'un pare-feu par exemple.
- Le scan TCP (-sT) identifie un port comme étant ouvert en attendant la fin du three-way handshake.
- Le scan UDP (-sU) est utile pour identifier les ports UDP ouverts sur une cible. Il envoie des paquets UDP spécifiques à des ports UDP connus.
Les options courantes
Nmap propose des centaines d'options. Voici les plus utilisées. Pour plus d'informations n'hésitez pas à consulter la documentation.
- Sauvegarde : Sauvegarder vos scan dans un fichier utilisez l'option -oN
- Verbosity : Pour rendre Nmap plus bavard à l'écran -v, -vv, -vvv
- Timing : Vous pouvez utiliser des timing template en utilisant l'un des flags -T0,-T1,-T2,-T3,-T4,-T5 qui correspondent respectivement à paranoïaque, sournois, poli, normal, agressif et fou (paranoid, sneaky, polite, normal, aggressive, and insane). Ces templates déterminent le degré d'agressivité de votre analyse et sont utiles en fonction du débit et des ressources du réseau sur lequel vous vous trouvez. Les scans -T0 et -T1 sont utiles pour éviter les IDS (Intrusion Detection System), mais peuvent être trop lents. T3 ou normal est le comportement par défaut de Nmap lorsqu'aucun de ces flags n'est mentionné.
Spécification de la cible
Vous pouvez spécifier le ou les port(s) en utilisant l'option -p
# Specifying a single port(port 21):
nmap -p21 10.10.10.10
# Specifying a port range(port 21 to 1000):
nmap -p21-1000 10.10.10.10
# Specifying a port range but exclude port 22:
nmap -p21-1000 -exclude-ports 22 10.10.10.10
Nmap accepte des nom d'hôtes, des adresses IP ou un range d'adresses.
# Scanning a specific hostname:
nmap target.domain.com
# Scanning a specific IP address:
nmap 10.10.10.10
# Scanning a network range:
nmap 10.10.10.1-254 or nmap 10.10.10.0/24
# Scanning a network range but exclude few IP addresses:
nmap 10.10.10.0/24 --exclude 10.10.10.167
Remarque : Nmap scanne 1000 ports TCP les plus courants et les plus utilisés si vous ne spécifiez pas de port spécifique.
A vous de jouer ?
Travail à rendre sous forme de document PDF à déposer sur TOMUSS.
scanme.nmap.org
Assurez-vous que vous pouvez être root/admin/sudoer de votre machine (VM,
TPR ou personnelle). Installez l'outil nmap
sur votre machine
sudo apt update && apt install nmap
.
Scannez (sans abuser) la machine scanme.nmap.org
en douceur (scan SYN) sur
les ports 22, 80 et 443. Il est probable que vous deviez ajouter l'option
-Pn
.
- Donnez la commande que vous avez saisie.
- Quels sont les services associés à chacun de ces 3 ports ?
- Lesquels sont disponibles ?
- A quoi sert l'option
-Pn
? - Que signifie l'état filtered
- En utilisant une option différente de scan déterminez la version du serveur SSH. Donnez la commande complète utilisée.
metasploitable2
Pour la partie suivante du sujet, vous allez déployer dans une VM un container Docker proposant un ensemble de services obsolètes et/ou mal configurés.
Si ce n'est déjà fait, instancier une VM Ubuntu "Docker ready". Sur cette VM
récupérez l'image Docker tleemcjr/metasploitable2:latest
. Enfin démarrez le
container avec la commande suivante.
docker run -d --name metasploitable2 -it -p 21:21 -p 6200:6200 -p 80:80 -p 2222:22 -p 5900:5900 -p 139:139 -p 445:445 tleemcjr/metasploitable2:latest sh -c "/bin/services.sh && bash"
- A partir d'un shell de la VM déterminez (sans utiliser
nmap
) quels sont les ports en écoute. Quelle commande avez vous utilisé ? - En vous connectant au container (
docker exec -ti metasploitable2 bash
) quels sont les ports en écoute ? - Pourquoi le port 2222 n'est il pas visible dans le container ?
- Déconnectez vous du container (
exit
), puis à partir du shell de votre VM utilisez la commandenmap
pour déterminer la liste des ports disponibles sur votre VM. Utilisez une des options qui permet de stocker le résultat du scan dans un fichier. Donnez la commande utilisée. - Déterminez les versions précise des services disponibles respectivement sur les ports 22 et 2222. Donnez la commande utilisée.
- Déterminez, avec nmap et l'option adéquate, quel systéme d'exploitation
est utiliser par votre VM et comparez avec la sortie de la commande
uname -a
. Quel constat faites-vous ? - Quel option devez vous utiliser pour exclure un port du scan ?
- N'ignorez pas UDP. Il se peut qu'un service malveillant (backdoor) tourne sur l'hôte que vous êtes en train d'auditer. Quel est l'option à utiliser ?
- Enfin observez avec Wireshark le trafic généré par Nmap et jouez avec les differents timing templates (T0 et T5) pour vous convaincre du manque de discrétion flagrant de Nmap. Combien (un ordre de grandeur) de paquets sont transmis ?
Remarque : Attention ! Tout acte de scan de réseau non-autorisé est
assimilé à une attaque et donc réprehensible selon la loi française. Limitez
vous à faire des scan des machines dans la salle du TP, ou de chez vous
sur la machine distante scanme.nmap.org
mise en ligne specifiquement par
les developpeurs de l’outil à des fins pédagogiques.