Attaques/Enumeration-Scanning/Prise-empreintes
Prise d'empreinte (fingerprint, fingerprinting)
Définition
La prise d'empreinte consiste à obtenir des informations (type, version, ...) sur un service ou un système d'exploitation. Les outils qui sont présentés ci-dessous permettent de récolter ces informations.
Il existe deux types d'OS fingerprinting :
- Passif : ce type d'OS fingerprinting consiste à analyser les trames sur le réseau. Elle permet de déterminer le système d'exploitation installé sur un système se connectant au serveur. P0f utilise ce type de technique.
- Actif : ce type de technique consiste à envoyer des paquets pour analyser les retours. Nmap utilise cette technique pour déterminer le système d'exploitation installé sur une cible. Metasploit permet également de déterminer un OS, par le module auxiliary/scanner/smb/version.
Une analyse comparative entre Nmap et p0f présente et analyse de manière appronfondie les résultats de fingerprinting obtenus par ces deux outils.
Thank you for your comprehension.
Spécificités réseau des systèmes d'exploitation
L'analyse des valeurs dans les trrames réseau permet de déterminer un système d'exploitation en fonction de valeurs de référence (voir Tableau qui suit).
Analyse d'un ping
Les signatures de ping entre Windows et Linux sont différentes.
Sous Windows
# tcpdump -v -X -r test.cap 'proto ICMP' reading from file test.cap, link-type EN10MB (Ethernet) 22:06:08.423939 IP (tos 0x0, ttl 128, id 67, offset 0, flags [none], proto: ICMP (1), length: 60) 192.168.182.134 > 192.168.182.133: ICMP echo request, id 512, seq 256, length 40 0x0000: 4500 003c 0043 0000 8001 4c21 c0a8 b686 E..<.C....L!.... 0x0010: c0a8 b685 0800 4a5c 0200 0100 6162 6364 ......J\....abcd 0x0020: 6566 6768 696a 6b6c 6d6e 6f70 7172 7374 efghijklmnopqrst 0x0030: 7576 7761 6263 6465 6667 6869 uvwabcdefghi
Sous Linux
# tcpdump -v -X -r test.cap 'proto ICMP' reading from file test.cap, link-type EN10MB (Ethernet) 22:38:22.794409 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto: ICMP (1 ), length: 84) 192.168.182.132 > 192.168.182.133: ICMP echo request, id 33034, s eq 1, length 64 0x0000: 4500 0054 0000 4000 4001 4c4e c0a8 b684 E..T..@[email protected].... 0x0010: c0a8 b685 0800 d1e8 810a 0001 69a2 8348 ............i..H 0x0020: cc1d 0100 0809 0a0b 0c0d 0e0f 1011 1213 ................ 0x0030: 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 .............!"# 0x0040: 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 $%&'()*+,-./0123 0x0050: 3435 45
IPID
Linux incrémente par défaut le numéro de séquence de 1 à chaque session, mais celui-ci est généré aléatoirement à chaque début de connexion. Ceci est illustré par les captures (effectuées avec tcpdump) qui suivent.
La capture qui suit trace une tentative de connexion sur le port 23 (telnet), à partir d'un poste Windows (192.168.182.1). Nous pouvons remarquer la tentative de connexion (flag S pour SYN), la réponse du serveur (flag R pour RST afin d'indiquer que le port est fermé), mais surtout l'incrémentation régulière (8989 et 8990) des IPID sur deux tentatives de suite.
# tcpdump -v -r cap-windows.cap 'port 23' reading from file test.cap, link-type EN10MB (Ethernet) 14:06:57.859713 IP (tos 0x0, ttl 64, id 8989, offset 0, flags [DF], proto: TCP(6), length: 52) 192.168.182.1.4024 > 192.168.182.133.telnet: S, cksum 0x178b (correct), 2921114566:2921 114566(0) win 65535 <mss 1460,nop,wscale 3,nop,nop,sackOK> 14:06:57.860485 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto: TCP (6), length: 4 0) 192.168.182.133.telnet > 192.168.182.1.4024: R, cksum 0x5845 (correct), 0:0(0) ack 29211 14567 win 0 14:06:58.347952 IP (tos 0x0, ttl 64, id 8990, offset 0, flags [DF], proto: TCP(6), length: 52) 192.168.182.1.4024 > 192.168.182.133.telnet: S, cksum 0x178b (correct), 2921114566:2921 114566(0) win 65535 <mss 1460,nop,wscale 3,nop,nop,sackOK> 14:06:58.348095 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto: TCP (6), length: 4 0) 192.168.182.133.telnet > 192.168.182.1.4024: R, cksum 0x5845 (correct), 0:0(0) ack 1 win 0
Cette même manipulation, effectuée à partir d'un client Linux (192.168.182.133) montre le comportement différent concernant les IPIDs (39782 et 12799 respectivement sur les deux tentatives de connexion).
# tcpdump -v -r cap-linux.cap 'port 23' reading from file test.cap, link-type EN10MB (Ethernet) 14:22:55.106316 IP (tos 0x10, ttl 64, id 39782, offset 0, flags [DF], proto: TC P (6), length: 60) 192.168.182.132.37172 > 192.168.182.133.telnet: S, cksum 0x61 9d (correct), 2894700068:2894700068(0) win 5840 <mss 1460,sackOK,timestamp 1346 0,nop,wscale 3> 14:22:55.106441 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto: TCP (6 ), length: 40) 192.168.182.133.telnet > 192.168.182.132.37172: R, cksum 0xe57a ( correct), 0:0(0) ack 2894700069 win 0 14:22:56.330148 IP (tos 0x10, ttl 64, id 12799, offset 0, flags [DF], proto: TC P (6), length: 60) 192.168.182.132.37173 > 192.168.182.133.telnet: S, cksum 0xc7 4b (correct), 2889955219:2889955219(0) win 5840 <mss 1460,sackOK,timestamp 1644 0,nop,wscale 3> 14:22:56.331009 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto: TCP (6 ), length: 40) 192.168.182.133.telnet > 192.168.182.132.37173: R, cksum 0x4c53 ( correct), 0:0(0) ack 2889955220 win 0
TTL (Time To Live)
Thank you for your comprehension.
-->Expliquer le décompte TTL
La valeur du TTL par défaut peut révéler des indications quant au système d'exploitation. Sous Linux, la valeur par défaut est stockée dans un fichier :
# cat /proc/sys/net/ipv4/ip_default_ttl 64
Sous Windows, cette valeur est stockée dans la base de registre, à l'adresse suivante :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DefaultTTL.
La valeur est stockée en hexadécimal. Sous Windows XP, celle-ci est fixée par défaut à 0x00000040 soit, en décimal, 64.
La capture suivante montre la valeur par défaut du TTL à 128 depuis un poste Windows 2000 :
# tcpdump -v -r test.cap 'port 23' reading from file test.cap, link-type EN10MB (Ethernet) 18:30:12.843831 IP (tos 0x0, ttl 128, id 126, offset 0, flags [DF], proto: TCP (6), length: 48) 192.168.182.134.1033 > 192.168.182.133.telnet: S, cksum 0x9693 (correct), 611161505:6111 61505(0) win 16384 <mss 1460,nop,nop,sackOK>
Cette même manipulation, effectuée depuis un poste Windows XP fait apparaître une valeur de TTL à 64 :
# tcpdump -v -r test.cap 'port 23' reading from file test.cap, link-type EN10MB (Ethernet) 18:38:57.877071 IP (tos 0x0, ttl 64, id 6202, offset 0, flags [DF], proto: TCP(6), length: 52) 192.168.182.1.1912 > 192.168.182.133.telnet: S, cksum 0xf0c6 (correct), 3858932452:3858932452( 0) win 65535 <mss 1460,nop,wscale 3,nop,nop,sackOK>
Window Size (taille de la fenêtre)
La taille de la fenêtre peut fournir des renseignements sur le système d'exploitation. Cette valeur indique la taille des données qui peuvent être envoyées sans attendre d'acquittement (accusé de réception).
La taille de la fenêtre est à 16384 depuis un poste Linux 2.6 :
18:30:12.843831 IP (tos 0x0, ttl 128, id 126, offset 0, flags [DF], proto: TCP (6), length: 48) 192.168.182.134.1033 > 192.168.182.133.telnet: S, cksum 0x9693 (correct), 611161505:611161505(0) win 16384 <mss 1460,nop,nop,sackOK>
Sous Windows XP, la taille est fixée à 65535.
18:38:57.877071 IP (tos 0x0, ttl 64, id 6202, offset 0, flags [DF], proto: TCP(6), length: 52) 19 2.168.182.1.1912 > 192.168.182.133.telnet: S, cksum 0xf0c6 (correct), 3858932452:3858932452(0) wi n 65535 <mss 1460,nop,wscale 3,nop,nop,sackOK>
MSS (Maximum Segment Size)
Ceci correspond à la taille maximale du segment TCP, calculé comme suit :
MSS = MTU – IPHL – TCPHL
où MTU représente le Maximum Transfer Unit (unité de transfert maximale), et IPHL et TCPHL représentent respectivement les longueurs d'en-têtes IP et TCP.
MSS = 1500 – 20 – 20 soit 1460 (longueur standard d'une trame Ethernet).
DF (Drapeau Don't Fragment)
L'indicateur DF, lorsqu'il vaut 1 (vrai), signifie l'interdiction de fragmenter les paquets. Cette valeur est initialisée différemment selon le système d'exploitation.
TOS (Type de Service)
Thank you for your comprehension.
Cette valeur est elle aussi fixée par défaut par le système d'exploitation. Néanmoins, elle n'est pas prise en compte dans les signatures de p0f qui la considère comme non représentative
L'option SackOK (Select Acknowledge) est utilisée pour limiter les conséquences de perte de données dans la fenêtre TCP
Nop option
Tableau des valeurs de références
Thank you for your comprehension.
Source : http://www.honeynet.org/papers/finger/traces.txt
Outils
telnet
- Plus sur telnet
- Syntaxe : telnet <host> <port>
- Exemple :
# telnet 127.0.0.1 22 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. SSH-2.0-OpenSSH_5.1p1 Debian-5
netcat
- Plus sur netcat
- Syntaxe : nc <option> <host> <port>
- Exemple :
# nc -v -n 127.0.0.1 22 (UNKNOWN) [127.0.0.1] 22 (ssh) open SSH-2.0-OpenSSH_5.1p1 Debian-5
scanline (Windows exclusivement)
- Plus sur scanline
- Syntaxe : sl <options> <host>
- Exemple :
C:\>sl -v -b 127.0.0.1
Xprobe2
- Plus sur Xprobe2
- Syntaxe : xprobe2 <options> <host>
- Exemple :
# xprobe2 127.0.0.1
AMAP
- Plus sur amap
- Syntaxe : amap <option> <host>
- Exemple :
# amap -B 127.0.0.1 22 amap v5.2 (www.thc.org/thc-amap) started at 2009-11-01 22:57:25 - BANNER mode Banner on 127.0.0.1:22/tcp : SSH-2.0-OpenSSH_5.1p1 Debian-5\r\n amap v5.2 finished at 2009-11-01 22:57:25
banner.c
- Plus sur banner.c
- Syntaxe : ./banner <ip_start> <ip_end> <port_start> <port_end>
- Exemple :
# ./banner 192.168.100.1 192.168.100.20 22 22 Banner v1.0 beta By - Cyber_Bob Press ENTER to Continue... Started! -------------------------------------- Reading info for host #1... <!> Port: 22 Banner: SSH-2.0-OpenSSH_4.3p2 Debian-9etch3 Checking for possible insecure daemons... None of the daemons checked for were found! -------------------------------------- Reading info for host #2... <!> Port: 22 Banner: Checking for possible insecure daemons... None of the daemons checked for were found! ... ...
p0f
- Plus sur p0f
- Syntaxe :
- Exemple :
nmap
- Plus sur nmap
- Syntaxe :
- Exemple :
Thc-rut
- Plus sur Thc-rut
- Syntaxe :
- Exemple :
Satori/Satoril
- Plus sur Satori, Plus sur Satoril
- Syntaxe :
- Exemple :
BlindElephant
- Plus sur BlindElephant
- Syntaxe :
- Exemple :