Add MitM attack course
This commit is contained in:
parent
394ec1a08e
commit
4817388af1
3 changed files with 768 additions and 0 deletions
142
content/secu_reseaux/2_mitm/index.md
Normal file
142
content/secu_reseaux/2_mitm/index.md
Normal file
|
@ -0,0 +1,142 @@
|
|||
---
|
||||
title: "Sécurité des réseaux : Man in the Middle"
|
||||
date: 2022-09-20
|
||||
tags: ["DNS", "TCP", "MitM"]
|
||||
categories: ["Sécurité des réseaux", "Cours"]
|
||||
---
|
||||
|
||||
Nous allons étudier deux vecteurs d'attaque de ce type:
|
||||
|
||||
* **le DNS**: c'est un protocole simple, on pose une question et le serveur
|
||||
répond. Les attaques majeures se sont produite en 2004, 2014 et 2018.
|
||||
* **le routage**: celui qui conrôle le routage peut emmener les paquets où il
|
||||
le souhaite.
|
||||
|
||||
## Rappel sur TCP
|
||||
|
||||

|
||||
|
||||
Si **A** n'accède pas à **B** en TCP alors il peut untiliser un picot **Pi**
|
||||
pour le faire (proxy HTTP, SSH ect.).
|
||||
|
||||
Si un attaquant veut interferer dans une communication nentre **A** et **B**, il
|
||||
y a une série de donnée qu'il devra connaitre:
|
||||
|
||||
| IP source | IP destination | port source | port destination | seq | ack |
|
||||
|-----------|----------------|-------------|------------------|---------|---------|
|
||||
| 32 bits | 32 bits | 16 bits | 16 bits | 64 bits | 64 bits |
|
||||
|
||||
### Fenêtre TCP
|
||||
|
||||
C'est un espace tampon dans lequel le système positionne les segments en
|
||||
attente de traitement. C'est un intervale de numéro de séquences. Lorque la
|
||||
fenêtre est pleine, l'emmeteur doit arrêter le traitement jusqu'à réception d'un
|
||||
acquitement.
|
||||
|
||||
### Interrompre une communication
|
||||
|
||||
Nous avons deux méthodes pour interrompre une communication TCP entre deux
|
||||
hôtes:
|
||||
|
||||
1. envoyer un segment `RST`;
|
||||
2. initier une nouvelle connexion: renvoyer un `SYN` au milieu d'une connexion
|
||||
n'est pas sensé arriver;
|
||||
|
||||
#### le cas du RST
|
||||
|
||||
Pour **se prémunir** d'un `RST` intempestif, TCP intègre un *ACK challenge*. Ce
|
||||
mécanisme intègre lui même un *rate-limit* par la présence d'un compteur sur
|
||||
l'*acl challenge*.
|
||||
|
||||
### Attaque par SYN
|
||||
|
||||
Partons du principe que l'attaquant connait déjà les adresses source et
|
||||
destination ainsi que le port de destination. **Il lui reste à deviner le port
|
||||
source**: 16 bis c'est jouable.
|
||||
|
||||
Notre attaquant peut aussi obtenir le nombre d'*ACK challenges* disponibles en
|
||||
testant lui-même en amont.
|
||||
|
||||
Notre attaquant envoi un segment TCP forgé en se faisant passer pour la source.
|
||||
Il envoie ensuite une série d'*ACK challenges**: **S'il en manque un alors c'est
|
||||
gagné**.
|
||||
|
||||
**La contre-mesure**: une fonction de hashage sur le compteur d'*ACK challenge*.
|
||||
|
||||
## Man in the Middle sur le routage
|
||||
|
||||
Internet est organisé en systèmes autonomes (AS pour Autonomous System)
|
||||
interconnectés.
|
||||
|
||||
### BGP
|
||||
|
||||
C'est le protocole de routage utilisé entre les AS. Chaque AS publie les plages
|
||||
d'adresses qu'il connait (annonces de préfixe). Un paquet BGP contient le
|
||||
préfixe et l'*AS Path*: le chemin parcouru par notre paquet.
|
||||
|
||||
> Ainsi si je reçois un paquet BGP dans lequel j'apparais, je le détruis
|
||||
|
||||
Si deux paquets annoncent une même route, c'est la plus **spécifique** qui
|
||||
**l'emporte**.
|
||||
|
||||
```
|
||||
A: 192.168.0.0/16
|
||||
B: 192.168.0.0/24 <- gagnant
|
||||
```
|
||||
|
||||
#### MitM sur BGP
|
||||
|
||||
Maintenant, comment exploiter tout ça pour mettre en place une attaque
|
||||
spéficique. Notre attaquant peut forger une annonce
|
||||
|
||||

|
||||
|
||||
1. L'attaquant repère une route propre vers sa victime **B**;
|
||||
2. Il forge une annonce BGP vers **B** avec dans l'*AS path* les AS 1, 2 et 3
|
||||
repérés précédement
|
||||
3. L'attaquant lance l'annonce, comme **1**, **2** et **3** sont dans l'*AS
|
||||
path*, ils ignonrent l'annonce
|
||||
|
||||
#### MitM sur OSPF
|
||||
|
||||
OSPF pour -- *Open Shortest Path First* -- est un protocole de routage qui
|
||||
permet de déterminer le meilleur chemin vers d'autres routeurs. Un paquet OSPF
|
||||
contient deux champs qui nous intéressent:
|
||||
|
||||
* `advertising router`
|
||||
* `link id`
|
||||
|
||||
Ces deux champs soivent être identique, mais **la norme est ambigue**. Les
|
||||
routeurs Cisco ne le vérifiaient pas, il était donc possible de polluer les
|
||||
tables de routages.
|
||||
|
||||
## Man in the Middle sur le DNS
|
||||
|
||||
DNS utilise le protocole *UDP* sur le port 53:
|
||||
|
||||
| IP source | IP destination | port source | port destination | request ID | Payload |
|
||||
|-----------|----------------|-------------|------------------|------------|---------|
|
||||
| 32 bits | 32 bits | 16 bits | 16 bits | 64 bits | ... |
|
||||
|
||||
Le principe de l'attaque est d'empoisonner le cache d'un résolveur.
|
||||
|
||||
### Attaque via le port source
|
||||
|
||||
Avant 2008, le port source était écrit en dur dans le logiciel et donc connu à
|
||||
l'avance. Mais cet état a chagé après la découverte de cette faiblesse par
|
||||
[Kaminsky](https://www.bortzmeyer.org/comment-fonctionne-la-faille-kaminsky.html).
|
||||
Avant cela un attaquant avait juste 16 bits d'entropie à déjouer...
|
||||
|
||||
Dans une trame DNS, la partie la plus critique est composée des
|
||||
**adresses et port sources** ainsi que **l'identifiant de requête**.
|
||||
|
||||
L'attaquant connait les adresses IP ainsi que le port de destination mais ni
|
||||
le **port source** ni l'**ID de requête**. L'entropie et trop forte, impossible
|
||||
de le deviner.
|
||||
|
||||
L'attaquant peut alors utiliser à son avantage la **fragmentation IP** en jouant
|
||||
avec la [MTU](https://fr.wikipedia.org/wiki/Maximum_transmission_unit). En
|
||||
découpant la trame UDP au bon endroit, il lui est possible de séparer l'entête
|
||||
UDP et l'ID de requête d'un côté, et la charge utile de l'autre.
|
||||
|
||||
Mais en frangmentant, l'attaquant doit pouvoir manipuler l'*IPID*.
|
Loading…
Add table
Add a link
Reference in a new issue