Attaques/Enumeration-Scanning/Prise-empreintes

From aldeid
Jump to: navigation, search

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.

Incomplete.png
INCOMPLETE SECTION OR ARTICLE
This section/article is being written and is therefore not complete.
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  [email protected]@.LN....
       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)

Incomplete.png
INCOMPLETE SECTION OR ARTICLE
This section/article is being written and is therefore not complete.
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).

Processus-transfert-donnees-acquittement.png

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)

Incomplete.png
INCOMPLETE SECTION OR ARTICLE
This section/article is being written and is therefore not complete.
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

Incomplete.png
INCOMPLETE SECTION OR ARTICLE
This section/article is being written and is therefore not complete.
Thank you for your comprehension.

Source : http://www.honeynet.org/papers/finger/traces.txt

Outils

telnet

# 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

# 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)

C:\>sl -v -b 127.0.0.1

Xprobe2

# xprobe2 127.0.0.1

AMAP

# 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

nmap

Thc-rut

Satori/Satoril

BlindElephant