Dans cet article, nous illustrons en pratique les échanges sur les couches 2,3,4 d'un réseau: ethernet, IP, TCP, UDP.



Le trafic est filtré:
- source = client XP
- protocole ICMP



Dans la première requête ARP, nous remarquons que le champ MAC destination est égal à 00:00:00:00:00:00. C'est normal puisque le but de cette requête est de demander l'adresse MAC associée à l'IP 192.168.0.10.
Attention il existe d'autres types de trames Ethernet qui possèdent d'autres particularités. Le champ Type de protocole peut prendre par exemple les valeurs suivantes :
0x0800 : IPv4
0x86DD : IPv6
0x0806 : ARP



le protocole encapuslé est TCP ( = 6)
Les adresses source et destination sont:
c0.a8.00.0a (192.168.0.10)
c0.a8.00.02 (192.168.0.2)
les ports source et destination sont:
413 (1043d)
17 (23d = telnet)

Le flag TCP de la requete du client est 02 (SYN):
0 = 0000
ECN = 00
URG = 0
ACK = 0
2 = 0010:
PSH = 0
RST = 0
SYN = 1
FIN = 0
Le flag TCP de la réponse est 14 (ACK - RST)
1 = 0001
ECN = 00
URG = 0
ACK = 1
4 = 0100:
PSH = 0
RST = 1
SYN = 0
FIN = 0

En octets
Le tableau suivant montre les différents champs d'un message ARP classique (protocole TCP/IPv4).
Type matérielle : pour ethernet, 0x0001
Type protocole : par exemple IPv4
Taille adresse matérielle : Pour ethernet, c'est 6 (car les adresses ethernet sont définies sur 6 octets)
Taille adresse protocole (logique) :
Pour IPv4, l'adresse logique des machines est sûr 4 octets
Pour IPv6, l'adresse logique des machines est sûr 6 octets
Opération :
requête (0000.....0001)
réponse (0000.....0010)
En bits
Signification des champs :
Port source : Numéro du port source
Port destination : Numéro du port destination
Numéro de séquence : Numéro de séquence du premier octet de ce segment
Numéro d'acquittement : Numéro de séquence du prochain octet attendu
Taille de l'en-tête : Longueur de l'en-tête en mots de 32 bits (les options font partie de l'en-tête)
Réservé : Réservé pour un usage futur
ECN : signale la présence de congestion, voir RFC 3168
Drapeaux
URG : Signale la présence de données URGentes
ACK : Signale que le paquet est un accusé de réception (ACKnowledgement)
PSH : Données à envoyer tout de suite (PuSH)
RST : Rupture anormale de la connexion (ReSeT)
SYN : Demande de SYNchronisation ou établissement de connexion
FIN : Demande la FIN de la connexion
Fenêtre : Taille de fenêtre demandée, c'est-à-dire le nombre d'octets que le récepteur souhaite recevoir sans accusé de réception
Checksum : Somme de contrôle calculée sur l'ensemble de l'en-tête TCP et des données, mais aussi sur un pseudo en-tête (extrait de l'en-tête IP)
Pointeur de données urgentes : Position relative des dernières données urgentes
Options : Facultatives
Remplissage : Zéros ajoutés pour aligner les champs suivants du paquet sur 32 bits, si nécessaire
Données : Séquences d'octets transmis par l'application (par exemple: +OK POP3 server ready...)
prérequis: installer traceroute:

le port source est: 61168 (0xc7e0)
le port destination est: 33434 (0x829a)
L'émetteur a inscrit son numéro de port dans l'en-tête UDP. Cela permet au serveur de connaître le port auquel renvoyer la réponse.
L'en-tête (header en anglais) d'un segment UDP est bien plus simple que celui de TCP :
Il contient les 4 champs suivants :
Port Source
il indique depuis quel port le paquet a été envoyé.
Port de Destination
il indique à quel port le paquet doit être envoyé.
Longueur
il indique la longueur totale du segment UDP (en-tête et données). La longueur minimale est donc de 8 octets (taille de l'en-tête).
Somme de contrôle
celle-ci (de type checksum) permet de s'assurer de l'intégrité du paquet reçu. Elle est calculée sur l'ensemble de l'en-tête UDP et des données, mais aussi sur un pseudo en-tête (extrait de l'en-tête IP)
Pré-requis: installer le serveur FTP sur le serveur

Autre prérequis: installation du client FTP FileZilla sur le client XP


description d'une trame:
les données FTP sont encapsulées dans un segment TCP, lui même encapsulé dans un paquet IP.

En suivant le flux TCP (follow TCP stream):


Nous remarquons que le mot de passe et le pseudo sont transmis en clair. Il est nécessaire d'utiliser un autre protocole, comme ftps.
4) Wikipedia – Transmision Control Protocol - http://fr.wikipedia.org/wiki/Transmission_Control_Protocol
5) Wikipedia – Ipv4 - http://fr.wikipedia.org/wiki/IPv4
6) Wikipedia – UDP - http://fr.wikipedia.org/wiki/User_Datagram_Protocol
7) Ubuntu proftpd - http://doc.ubuntu-fr.org/proftpd
visualisation du trafic avec TCPDUMP
Dans notre labo, sur le client Windows, dans un terminal:C:\clientXP > ping -n 1 192.168.0.2(envoi d'une seule requête echo au serveur)
intrus $ sudo tcpdumpNous observons bien le trafic de paquets IP du client WXP au serveur: echo request.
intrus $ tcpdump icmp and src 192.168.0.10( écoute des requêtes icmp provenant du client XP)
Le trafic est filtré:
- source = client XP
- protocole ICMP
Intrus $ sudo tcpdump icmp[0]=8(uniquement les requêtes echo)
analyse de l'en-tête Ethernet
C:\clientxp > arp -d
C:\clientxp > ping -n 1 192.168.0.2
intrus $ sudo tcpdump -x icmp or arp( affiche les requêtes ICMP ou ARP en format hexadécimal.)
Dans la première requête ARP, nous remarquons que le champ MAC destination est égal à 00:00:00:00:00:00. C'est normal puisque le but de cette requête est de demander l'adresse MAC associée à l'IP 192.168.0.10.
rappel trame Ethernet
En octets0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 … 1513 | 1514 | 1515 | 1516 | 1517 |
Adresse MAC destination | Adresse MAC source | Type de protocole | Données | FCS/CRC |
Attention il existe d'autres types de trames Ethernet qui possèdent d'autres particularités. Le champ Type de protocole peut prendre par exemple les valeurs suivantes :
0x0800 : IPv4
0x86DD : IPv6
0x0806 : ARP
C:\clientXP > ipconfig /all
serveur $ ifconfig
analyse de l'en-tête TCP/IP
C:\clientXP > telnet -l utilisteur 192.168.0.2
intrus $ sudo tcpdump -x src 192.168.0.10
le protocole encapuslé est TCP ( = 6)
Les adresses source et destination sont:
c0.a8.00.0a (192.168.0.10)
c0.a8.00.02 (192.168.0.2)
les ports source et destination sont:
413 (1043d)
17 (23d = telnet)
C:\clientXP > telnet -l utilisteur 192.168.0.2
intrus $ sudo tcpdump -x src 192.168.0.10 or src 192.168.0.2
Le flag TCP de la requete du client est 02 (SYN):
0 = 0000
ECN = 00
URG = 0
ACK = 0
2 = 0010:
PSH = 0
RST = 0
SYN = 1
FIN = 0
Le flag TCP de la réponse est 14 (ACK - RST)
1 = 0001
ECN = 00
URG = 0
ACK = 1
4 = 0100:
PSH = 0
RST = 1
SYN = 0
FIN = 0
rappel paquet IP
(référence [5]En octets
1 | 2 | 3 | 4 | ||
Version d'IP | Longueur en-tête (en mots de 32 bits) | Type de service | Longueur totale en octets | ||
Identification (pour les fragments) | Flags (pour les fragments) | Fragment offset | |||
Durée de vie (TTL Time To Live) | Protocole | Somme de contrôle de l'en-tête | |||
Adresse source | |||||
Adresse destination | |||||
Option(s) + bourrage |
rappel paquet ARP:
(référence: [3])Le tableau suivant montre les différents champs d'un message ARP classique (protocole TCP/IPv4).
Type matérielle | Type protocole | Taille adresse matérielle | Taille adresse protocole | Opération | Adresse matérielle source | Adresse protocole source | Adresse matérielle destinataire | Adresse protocole destinataire |
2 octets | 2 octets | 1 octet | 1 octet | 2 octets | 6 octets | 4 octets | 6 octets | 4 octets |
Type matérielle : pour ethernet, 0x0001
Type protocole : par exemple IPv4
Taille adresse matérielle : Pour ethernet, c'est 6 (car les adresses ethernet sont définies sur 6 octets)
Taille adresse protocole (logique) :
Pour IPv4, l'adresse logique des machines est sûr 4 octets
Pour IPv6, l'adresse logique des machines est sûr 6 octets
Opération :
requête (0000.....0001)
réponse (0000.....0010)
rappel segment TCP
(référence [4]En bits
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Port Source 2 octets | Port destination 2 octets | ||||||||||||||||||||||||||||||
Numéro de séquence | |||||||||||||||||||||||||||||||
Numéro d'acquittement | |||||||||||||||||||||||||||||||
Taille de l'en-tête | réservé | ECN | URG | ACK | PSH | RST | SYN | FIN | Fenêtre | ||||||||||||||||||||||
Somme de contrôle | Pointeur de données urgentes | ||||||||||||||||||||||||||||||
Options | Remplissage | ||||||||||||||||||||||||||||||
Données |
Signification des champs :
Port source : Numéro du port source
Port destination : Numéro du port destination
Numéro de séquence : Numéro de séquence du premier octet de ce segment
Numéro d'acquittement : Numéro de séquence du prochain octet attendu
Taille de l'en-tête : Longueur de l'en-tête en mots de 32 bits (les options font partie de l'en-tête)
Réservé : Réservé pour un usage futur
ECN : signale la présence de congestion, voir RFC 3168
Drapeaux
URG : Signale la présence de données URGentes
ACK : Signale que le paquet est un accusé de réception (ACKnowledgement)
PSH : Données à envoyer tout de suite (PuSH)
RST : Rupture anormale de la connexion (ReSeT)
SYN : Demande de SYNchronisation ou établissement de connexion
FIN : Demande la FIN de la connexion
Fenêtre : Taille de fenêtre demandée, c'est-à-dire le nombre d'octets que le récepteur souhaite recevoir sans accusé de réception
Checksum : Somme de contrôle calculée sur l'ensemble de l'en-tête TCP et des données, mais aussi sur un pseudo en-tête (extrait de l'en-tête IP)
Pointeur de données urgentes : Position relative des dernières données urgentes
Options : Facultatives
Remplissage : Zéros ajoutés pour aligner les champs suivants du paquet sur 32 bits, si nécessaire
Données : Séquences d'octets transmis par l'application (par exemple: +OK POP3 server ready...)
analyse de l'en-tête UDP
Traceroute utilise le protocole UDP. Nous allons l'utiliser sur l'interface localhost (pour rester furtif vis à vis du serveur)prérequis: installer traceroute:
intrus $ sudo apt-get install traceroute1er terminal:
intrus $ tcpdump -x -i lo2eme terminal:
intrus $ sudo traceroute -i lo localhost
le port source est: 61168 (0xc7e0)
le port destination est: 33434 (0x829a)
L'émetteur a inscrit son numéro de port dans l'en-tête UDP. Cela permet au serveur de connaître le port auquel renvoyer la réponse.
rappel datagramme UDP
(référence [6])L'en-tête (header en anglais) d'un segment UDP est bien plus simple que celui de TCP :
Port Source (16 bits) | Port Destination (16 bits) |
Longueur (16 bits) | Somme de contrôle (16 bits) |
Données (longueur variable) |
Il contient les 4 champs suivants :
Port Source
il indique depuis quel port le paquet a été envoyé.
Port de Destination
il indique à quel port le paquet doit être envoyé.
Longueur
il indique la longueur totale du segment UDP (en-tête et données). La longueur minimale est donc de 8 octets (taille de l'en-tête).
Somme de contrôle
celle-ci (de type checksum) permet de s'assurer de l'intégrité du paquet reçu. Elle est calculée sur l'ensemble de l'en-tête UDP et des données, mais aussi sur un pseudo en-tête (extrait de l'en-tête IP)
analyse du protocole FTP
(Référence [7])Pré-requis: installer le serveur FTP sur le serveur
serveur $ sudo apt-get install proftpdsi vous voulez afficher le fichier de configuration:
serveur $ cat /etc/proftp/proftp.conf | lessla configuration par défaut suffit pour notre travail.
Autre prérequis: installation du client FTP FileZilla sur le client XP
http://filezilla-project.org/download.php?type=clientAutre prérequis: installation de Wireshark sur l'intrus:
intrus $ sudo apt-get install wiresharklancement de Wireshark (il faut être sudo):
intrus $ sudo wireshark
description d'une trame:
les données FTP sont encapsulées dans un segment TCP, lui même encapsulé dans un paquet IP.
En suivant le flux TCP (follow TCP stream):
Nous remarquons que le mot de passe et le pseudo sont transmis en clair. Il est nécessaire d'utiliser un autre protocole, comme ftps.
références
3) la norme IEE802.3 et les protocoles ARP et ETHERNET - http://yannklein.free.fr/cours/reseau/protocole_ethernet_arp.html4) Wikipedia – Transmision Control Protocol - http://fr.wikipedia.org/wiki/Transmission_Control_Protocol
5) Wikipedia – Ipv4 - http://fr.wikipedia.org/wiki/IPv4
6) Wikipedia – UDP - http://fr.wikipedia.org/wiki/User_Datagram_Protocol
7) Ubuntu proftpd - http://doc.ubuntu-fr.org/proftpd
Aucun commentaire:
Enregistrer un commentaire