---
title: "Sécurité des réseaux : L'attaque"
date: 2022-09-13
tags: ["TCP", "scan", "nmap"]
categories: ["Sécurité des réseaux", "Cours"]
---

## Comment

C'est la question centrale posées par l'attaquant: comment pénétrer le réseau
cible. Pour cela il va passer par plusieurs étapes:

 1. **recherche d'information** sur la cible: organisation du réseau, versions
    des systèmes d'exploitations des équipements, version des logiciels etc.
 2. **recherche de vulnérabilités** en fonction des éléments obtenus
    précédemment
 3. **exploitation** de ces vulnérabilités
 4. **installation d'une porte dérobée**

L'attaquant doit alors rester le plus discret possible

Le défenseur doit lui détecter la collecter des informations au plus vite afin de
se prémunir.

## Les buts recherchés

Les buts d'une attaque sont multiples:

 * **le déni de service**: le rendre inaccessible en le noyant de requête
 * **le déni service distribué**: il s'agit ici aussi de rendre un service
   inaccessible mais avec une multitude d'attaquant: les **botnets**. Il sont
   composé de centaines à quelques millions d'équipements. L'exemple le plus
   parlant est [Mirai](https://fr.wikipedia.org/wiki/Mirai_(logiciel_malveillant))
 * **l'interception**: C'est une classe d'attaque par l'homme du milieu *(Man in
   the Middle)*.

   ![Interception du trafic entre deuxinterlocuteurs](./images/interception.svg) 
   
   Dans l'exemple ci-dessus, une attaquant intercepte le trafic entre A et B et p
   renant soin de le réacheminer après l'avoir enregistré (pour l'analyser à 
   posteriori).
 * **la corruption**: C'est une autre attaque de type *MitM*. Il s\agit de
   corrompre une communication. Le cas le plus courant et le 
   [cache poisoning](https://en.wikipedia.org/wiki/Cache_poisoning]) que se soit
   sur les caches DNS ou les caches ARP (les deux protocoles les plus attaqués)
 * **l'usurpation** avec les
   [attaques par rejeu](https://fr.wikipedia.org/wiki/Attaque_par_rejeu).

## Recherche d'informations

Il est possible de deviner tout un tas d'informations en observant le trafic
réseau et utilisant des techniques de
[fingerprinting](https://fr.wikipedia.org/wiki/Empreinte_digitale_d%27appareil). En
observant notamment les numéro de séquence d'un échange TCP, il est possible
d'en déduire le *système d'exploitation*. L'outil de base pour le fingerprinting
est [nmap](https://nmap.org/), dans le cas du système d'exploitation, il utilise 
*xprobe*.

### Balayages de ports
Nmap permet aussi le balayage les ports d'un hôte (ou d'un groupe d'hôte). Il
utilise pour cela plusieurs technique. 

 * la plus connue est le *SYN SCAN*: nmap envoie un paquet TCP `SYN` à la cible,
   celle-ci répond avec les drapeaux `SYN/ACK` de positionnés si le port est 
   ouvert et `RST/ACK` s'il est fermé. Il est possible de trasformer cette
   technique en envoyant un `ACK` après le `SYN/ACK` de la réponse de la victime
   afin de simuler une connexion valide et ce afin d'être plus discret;
 * le *FIN scan*: nmap envoie un paquet TCP de fin de connexion (drapeau `FIN`
   positionné à 1). En cas de port ouvert la victime ne réponds pas, sinon elle
   répond par un `RST/ACK`;
 * le *null scan* et *xmas scan* jouent avec les drapeaux en les initialisation
   de manière non conforme afin de dejouer les pare-feux. En vas de réponse
   `RST/ACK` alors on peut en déduite que le port est ouvert sur la victime.

#### le cas de l'IDLE scan

C'est un balayage particulier qui fait intervenir un tiers  et joue avec l'IPID.
L'IPID est un numéro d'identification IP utilisé en cas de fragmentation
notamment.

![Schéma représentant l'IDLE Scan](./images/idle_scan.svg)

Reprenons le schéma ci-dessus, nous avons **A**, machine *zombie* sous conrôle
de l'attaquant et **B** la victime:

 1. l'attaqant récupère l'*IPID* de la machine zombie **A** en envoyant un
    `SYN/ACK` et en observant l'IPID du segment TCP `RST` en retour -- nomons le
    X;
 2. l'attaquant forge ensuite un segment TCP `SYN`; la trame IP englobant celui-
    ci a comme adresse source l'IP celle de **A**;
 3. il suffit alors de renvoyer un segment `SYN/ACK` et d'observer l'*IPID* de
    la réponse : fonction de l'échange entre **A** et **B**, nous pouvons en
    déduire si le port est ouvert sur la cible:
     * s'il est égal à X+1 alors le port est fermé: en effet la victime a
       répondu un simple `RST`, l'*IPID* n'est pas incrémenté;
     * s'il est égal à X+2, le port est ouvert: la victime a répondue avec un
       `SYN/ACK`, notre *zombie* avec un `RST` incrémentant l'*IPID* de 1.
