06 13 32 04 91

Sécurité TCP IP 2

PRECEDENT     SUITE…

TCP

Le protocole TCP est défini dans le but de fournir un service de transfert de données de haute fiabilité (à la différence de UDP) entre deux ordinateurs “maîtres” raccordés sur un réseau de type “paquets commutés”, et sur tout système résultant de l’interconnexion de ce type de réseaux.

TCP (Transmission Control Protocol : Protocole de Contrôle de Transmission) a pour but, au niveau des applications, de gérer les données en provenance (ou à destination) de la couche inférieure du modèle (IP). Lorsque les données sont fournies au protocole IP, celui-ci les encapsule dans les datagrammes IP, en fixant le champ protocole à 6 (afin de savoir que le protocole en amont est TCP…).

Caractéristiques principales du protocole TCP:

  • TCP permet de remettre en ordre les datagrammes en provenance du protocole IP

  • TCP permet de vérifier le flot de données afin d’éviter une saturation du réseau

  • TCP permet de formater les données en segments de longueur variable afin de les “remettre” au protocole IP

  • TCP permet de multiplexer les données, c’est-à-dire de faire circuler simultanément des informations provenant de sources (applications par exemple) distinctes sur une même ligne

  • TCP permet l’initialisation et la fin d’une communication de manière normalisée

Information TCP

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

Port destination

Numéro d’ordre

Numéro d’accusé de réception

Décalage
données

réservée

URG

ACK

PSH

RST

SYN

FIN

Fenêtre

Somme de contrôle

Pointeur d’urgence

Options

Remplissage

Données

Signification des différents champs:

Port Source (16 bits): Port de la machine source

Port Destination (16 bits): Port de la machine de destination

Numéro d’ordre (32 bits): Lorsque le drapeau SYN est à 0, le numéro d’ordre est celui du premier mot (word) du segment en cours
Lorsque SYN est à 1, le numéro de séquence est le numéro de séquence initial utilisé pour synchroniser les numéros de séquence (ISN)

Numéro d’accusé de réception (32 bits): Dernier segment reçu par le récepteur

Décalage des données (4 bits): il permet de repérer le début des données dans le paquet. Le décalage est ici essentiel car le champ d’options est de taille variable

Réservé (6 bits): Champ inutilisé actuellement mais prévu pour l’avenir

Drapeaux (flags) (6×1 bit): Les drapeaux représentent des informations supplémentaires:

  • URG: si ce drapeau est à 1 le paquet doit être traité de façon urgente

  • ACK: si ce drapeau est à 1 le paquet est un accusé de réception

  • PSH (PUSH): si ce drapeau est à 1, le paquet fonctionne suivant la méthode PUSH

  • RST: si ce drapeau est à 1, la connexion est réinitialisée

  • SYN: si ce drapeau est à 1, les numéros d’ordre sont synchronisés

  • FIN: si ce drapeau est à 1 la connexion s’interrompt

Fenêtre (16 bits): Champ permettant de connaître le nombre d’octets que le récepteur souhaite recevoir sans accusé de réception

Somme de contrôle (Checksum ou CRC): La somme de contrôle est réalisée en faisant la somme des champs de données de l’en-tête, afin de pouvoir vérifier l’intégrité de l’en-tête

Pointeur d’urgence (16 bits): Indique le numéro d’ordre à partir duquel l’information devient urgente

Options (Taille variable): Des options diverses

Les champs d’option peuvent occuper un espace de taille variable à la fin de l’en-tête TCP. Ils formeront toujours un multiple de 8 bits. Toutes les options sont prises en compte par le Checksum. Un paramètre d’option commence toujours sur un nouvel octet. Il est défini deux formats types pour les options:

  1. Cas 1: Option mono-octet.

  2. Cas 2: Octet de type d’option, octet de longueur d’option, octets de valeurs d’option.

La longueur d’option prend en compte l’octet de type, l’octet de longueur lui-même et tous les octets de valeur et est exprimée en octets.

Notez que la liste d’option peut être plus courte que ce que l’offset de données pourrait le faire supposer. Dans ce cas, un octet de remplissage (padding) devra être rajouté après le code de fin d’options. Cet octet est nécessairement à 0.

TCP doit implémenter toutes les options. Actuellement, les options définies sont (type indiqué en octal):

      Type     Longueur  Description

       0         –       Fin de liste d’option

       1         –       Nop

       2         4       Taille de segment maximal

Définition des options spécifiques

Fin de liste d’options = |00000000| >> Type=0

Ce code indique la fin du champ d’options. Sa position peut ne pas coïncider avec l’indication du début du champ de données marqué dans l’Offset de données. Il doit être placé après toutes les options, et non après chaque option. Il ne doit être utilisé que dans le cas ou la fin des options ne coïncide pas avec le début du champ de données.

No-Operation = |00000001| >>Type=1

Cette option peut être utilisée entre deux options, par exemple pour aligner le début d’une option sur un début de mot de 16 bits. L’utilisation de ce séparateur n’est pas une obligation. L’implémentation doit donc prévoir de pouvoir prendre en compte un option même au milieu d’un mot.

Taille maximale de segment = |00000010|00000100|  Taille max. segment | >> Type=2 Longueur=4

Bourrage: On remplit l’espace restant après les options avec des zéros pour avoir une longueur multiple de 4 octets=32 bits , et de sorte que l’offset de données marqué dans l’en-tête corresponde bien au début des données applicatives.

UDP : A la différence de TCP, UDP est un protocole non connecté. UDP n’a pas d’indicateur et de bits réservés comme TCP . Cependant TCP et UDP se basent sur les ports source et destination. Comme les paquets TCP, les paquets UDP ne doivent jamais avoir un port source ou destination réglé à 0. Des paquets UDP peuvent également être réduits en fragments avec malveillance.

IP :

Le protocole IP permet l’élaboration et le transport des datagrammes IP, sans en assurer la “livraison”. Le protocole IP traite les datagrammes IP indépendamment les uns des autres en définissant leur représentation, leur routage et leur expédition.

  • Le protocole IP détermine le destinataire du message grâce à 3 champs:

  • Le champ adresse IP : adresse de la machine

  • Le champ masque de sous-réseau : un masque de sous-réseau permet au protocole IP de déterminer la partie de l’adresse IP qui concerne le réseau

  • Le champ passerelle par défaut : Permet au protocole Internet de savoir à quelle machine remettre le datagramme si la machine de destination n’est pas sur le réseau local

Information IP sur 32 bits

Version
(4 bits)

Longueur entête
(4 bits)

Type de service
(8 bits)

Longueur totale
(16 bits)

Identification
(16 bits)

Drapeau
(3 bits)

Décalage fragment
(13 bits)

Durée de vie
(8 bits)

Protocole
(8 bits)

Somme de contrôle en-tête
(16 bits)

Adresse IP source (32 bits)

Adresse IP destination (32 bits)

Données

Signification des différents champs:

Version (4 bits) : il s’agit de la version du protocole IP que l’on utilise (actuellement on utilise la version 4 IPv4) afin de vérifier la validité du datagramme. Elle est codée sur 4 bits.

Longueur d’en-tête, ou IHL pour Internet Header Length (4 bits) : il s’agit du nombre de mots de 32 bits constituant l’en-tête (nota : la valeur minimale est 5). Ce champ est codé sur 4 bits.

Type de service (8 bits) : il indique la façon selon laquelle le datagramme doit être traité.

Le Type de Service donne une indication sur la qualité de service souhaitée, qui reste cependant un paramètre “abstrait”. Ce paramètre est utilisé pour “guider” le choix des paramètres des services actuels lorsqu’un datagramme transite dans un réseau particulier. Certains réseaux offrent un mécanisme de priorité, traitant préférentiellement un tel trafic par rapport à un trafic moins prioritaire (en général en acceptant seulement de véhiculer des paquets d’un niveau de priorité au dessus d’un certain seuil lors d’une surcharge momentanée). Principalement, le choix offert est une négociation entre les trois contraintes suivantes : faible retard, faible taux d’erreur, et haut débit.

 

Bits 0-2 :

Priorité.

Bit 3 :

0 = Retard standard,

1 = Retard faible.

Bits 4 :

0 = Débit standard,

1 = Haut débit.

Bits 5 :

0 = Taux d’erreur standard

1 = Taux d’erreur faible.

Bit 6-7 :

Réservé.

 

  0     1     2     3     4     5     6     7 

—————————————————–

|    PRIORITE     |  D  |  T  |  R  |  0  |  0  |

—————————————————–

Priorité (détail)

111 –

Network Control

110 –

Internetwork Control

101 –

CRITIC/ECP

100 –

Flash Override

011 –

Flash

010 –

Immediate

001 –

Priority

000 –

Routine

La priorité “Network Control” est stipulée comme étant une priorité à l’intérieur d’un seul réseau. Le fait d’utiliser cette option instaure une priorité pour chaque section traversée. La priorité “Internetwork Control” n’est gérée que par les routeurs. Si l’utilisation de ces priorités ont une signification particulière ou supplémentaire pour l’un des réseaux, il est de la responsabilité de ce dernier de lire et d’interpréter les présentes informations.

Longueur totale (16 bits): il indique la taille totale du datagramme en octets. La taille de ce champ étant de 2 octets, la taille totale du datagramme ne peut dépasser 65536 octets. Utilisé conjointement avec la taille de l’en-tête, ce champ permet de déterminer où sont situées les données.

Identification, drapeaux (flags) et déplacement de fragment sont des champs qui permettent la fragmentation des datagrammes, ils sont expliqués plus bas.

Durée de vie appelée aussi TTL, pour Time To Live (8 bits) : ce champ indique le nombre maximal de routeurs à travers lesquels le datagramme peut passer. Ainsi ce champ est décrémenté à chaque passage dans un routeur, lorsque celui-ci atteint la valeur critique de 0, le routeur détruit le datagramme. Cela évite l’encombrement du réseau par les datagrammes perdus.

Protocole (8 bits) : ce champ permet de savoir de quel protocole est issu le datagramme. Voici la liste des plus courants :

ASSIGNED INTERNET PROTOCOL NUMBERS (RFC 790)

Decimal

Octal

Protocol Numbers

0

0

Reserved

1

1

ICMP

2

2

Unassigned (IGMP)

3

3

Gateway-to-Gateway

4

4

CMCC Gateway Monitoring Message

5

5

ST

6

6

TCP

7

7

UCL

8

10

Unassigned

9

11

Secure

10

12

BBN RCC Monitoring

11

13

NVP

12

14

PUP

13

15

Pluribus

14

16

Telenet

15

17

XNET

16

20

Chaos

17

21

User Datagram

18

22

Multiplexing

19

23

DCN

20

24

TAC Monitoring

21-62

25-76

Unassigned

63

77

any local network

64

100

SATNET and Backroom EXPAK

65

101

MIT Subnet Support

66-68

102-104

Unassigned

69

105

SATNET Monitoring

70

106

Unassigned

71

107

Internet Packet Core Utility

72-75

110-113

Unassigned

76

114

Backroom SATNET Monitoring

77

115

Unassigned

78

116

WIDEBAND Monitoring

79

117

WIDEBAND EXPAK

80-254

120-376

Unassigned

255

377

Reserved

Somme de contrôle de l’en-tête ( header checksum) (16 bits) : ce champ contient une valeur codée sur 16 bits qui permet de contrôler l’intégrité de l’en-tête afin de déterminer si celui-ci n’a pas été altéré pendant la transmission. La somme de contrôle est le complément à un de tous les mots de 16 bits de l’en-tête (champ somme de contrôle exclu). Celle-ci est en fait telle que lorsque l’on fait la somme des champs de l’en-tête (somme de contrôle incluse), on obtient un nombre avec tous les bits positionnés à 1 .

Adresse IP source (32 bits) : Ce champ représente l’adresse IP de la machine émettrice, il permet au destinataire de répondre

Adresse IP destination (32 bits) : l’adresse IP du destinataire du message

DHCP (Dynamic Host Configuration Protocol) est un protocole qui permet à un ordinateur qui se connecte sur un réseau d’obtenir dynamiquement (c’est-à-dire sans intervention particulière) sa configuration (principalement, sa configuration réseau). L’ordinateur se trouve une adresse IP tout seul grâce à DHCP. Le but principal étant la simplification de l’administration d’un réseau.

Le protocole DHCP sert principalement à distribuer des adresses IP sur un réseau, mais il a été conçu au départ comme complément au protocole BOOTP (Bootstrap Protocol) qui est utilisé lorsque l’on installe une machine à travers un réseau (BOOTP est utilisé en étroite collaboration avec un serveur TFTP sur lequel le client va trouver les fichiers à charger et à copier sur le disque dur).

Un serveur DHCP peut renvoyer des paramètres BOOTP ou de configuration propres à un hôte donné.

ARP : Le protocole ARP (Address Resolution Protocol) sert à faire la correspondance entre l’adresse IP d’une interface et son adresse physique(MAC).

Le dialogue entre deux machine d’un réseaux local ressemble à peu près à ce qui est décrit ci-dessous:

  1. A(123.124.125.126) veut se connecter au serveur B(123.124.125.99)

  2. A envoie une requête ARP à destination de tous les hôtes du réseau pour obtenir l’adresse MAC de B.

  3. La requête est du type: Est ce que celui qui à telle adresse IP(123.124.125.99) peut m’envoyer son adresse MAC ?

  4. B voit qu’il est directement concerné et il envoi une réponse ARP à A du type: Mon adresse MAC est AA:12:CB:35:EF:54

ICMP est employé pour passer un message d’erreur entre deux hôtes ou un centre serveur et un dispositif de réseau tel qu’un routeur. Puisque UDP et IP sont des protocoles non connectés, ils se basent sur ICMP pour transmettre des messages d’erreur en leur nom. Pour éviter les boucles de messages d’erreur, les réponses ne sont jamais envoyés aux messages d’erreur ICMP.

ICMP n’a aucun numéro de ports; il utilise des types et des codes de message ICMP à la place.

ICMP supporte le traffic broadcast. C’est-à-dire que les paquets ICMP ne sont pas très compliqués, et il n’y a pas beaucoup de façons pour qu’ils puissent être rendus anormaux.

Un message ICMP peut être utilisé avec malveillance ; c’est le cas d’une redirection. Les messages de redirection ICMP sont destinés a être envoyer d’un routeur à un centre serveur afin d’informer ce centre serveur qu’un routeur différent est plus optimal que lui en contactant une adresse de destination particulière.

Certaines attaques telles que WinFreeze utilisent de faux messages de redirection ICMP pour essayer de convaincre un hôte de s’utiliser comme routeur optimal. Évidemment n’importe quel paquet qui indique à un dispositif de “router” le traffic vers lui-même devrait être considéré comme fortement anormal.

La plupart des paquets ICMP se composent de petites en-têtes et charge utile.

La plupart des paquets de demande d’écho ICMP ont une en-tête de 8 bytes et une charge utile de 56 bytes. Des paquets ICMP qui sont sensiblement plus grands que la normale devraient être considérés douteux.

Certains types ICMP, tels que des demandes d’écho, ne devraient porter aucune données. Quelques applications malveillantes comprenant quelques programmes de Distribues Denial Of Service (DDOS) et les programmes de tunneling utilisent des paquets ICMP en tant que “récipients” cachant d’autres trafics.

Ainsi une réponse d’écho ICMP pourrait réellement contenir un protocole IP complètement différent dans ses données. Si on surveille un système pour de grands paquets ICMP ou pour des paquets de types spécifiques ICMP qui ne devraient pas contenir de données, on doit pouvoir détecter ce type de trafic.

PRECEDENT     SUITE…