summaryrefslogtreecommitdiff
path: root/RFC_8065_Privacy_Considerations_for_IPv6_AdaptationLayer_Mechanisms.txt
blob: 5e761ed9c12e94bb3dfe62e35ae52db64192f5b5 (plain)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
Titre: RFC 8065: Privacy Considerations for IPv6 Adaptation-Layer Mechanisms
Auteur: 
Date: Fri 24 Feb 2017 01:00:00 +0100
Lien: https://www.bortzmeyer.org/8065.html

Entre la couche 3 (du modèle en couches) et la couche 2 (par exemple Ethernet) 
se trouve une adaptation, qui définit comment on va mettre les paquets IPv6 sur
la couche sous-jacente. Certaines de ces adaptations posent des problèmes de 
protection de la vie privée. Ce RFC résume les problèmes existants. Chaque 
adaptation devra ensuite travailler à s'améliorer sur ce plan (le RFC donne des
idées). L'idée est d'améliorer les normes actuelles et futures, pour mieux 
prendre en compte ce problème de vie privée.

Ce problème de la vie privée pour IPv6 a déjà été beaucoup discuté, notamment 
en raison d'un choix initial de privilégier une adaptation à Ethernet qui 
gardait une partie de l'adresse IPv6 constante, même quand la machine changeait
de réseau. Ce problème est résolu depuis longtemps (RFC 4941) mais d'autres 
peuvent demeurer, surtout si la couche 2 a des contraintes qui empêchent de 
déployer certaines protections de la vie privée.

Les documents de référence à lire d'abord sont le RFC général sur la vie 
privée, RFC 6973 (sa section 5.2 est particulièrement utile ici), et, plus 
spécifique à IPv6, le RFC 7721. Le risque qui concerne l'adaptation est lié au 
mécanisme de génération des IID (identificateurs d'interface, cf. RFC 4291), 
puisque cet IID fait partie de l'adresse IPv6 (typiquement les 64 derniers 
bits) et va donc être potentiellement visible publiquement. Si l'IID est trop 
prévisible ou trop stable, il permettra notamment : 

  * De corréler des activités du même utilisateur au cours du temps,
  * De suivre l'utilisateur à la trace s'il se déplace en gardant le même IID,
  * De balayer plus facilement un réseau à la recherche de machines à attaquer 
    (alors que, normalement, la taille élevée de l'espace d'adressage IPv6 rend
    ces balayages lents et pénibles).

Un concept important est celui d'entropie, c'est-à-dire du nombre de bits dans 
l'IID qui sont réellement imprévisibles. Idéalement, l'entropie devrait être de
64 bits (le préfixe IPv6 ayant typiquement une longueur de 64 bits pour un 
réseau, cf. RFC 7421).

Voilà pourquoi le RFC 8064 déconseille de créer un IID à partir d'une adresse 
« couche 2 » fixe, comme l'est souvent l'adresse MAC. Il recommande au 
contraire la technique du RFC 7217 si on veut des adresses stables tant qu'on 
ne se déplace pas, et celle du RFC 4941 si on veut être vraiment difficile à 
tracer (au prix d'une administration réseaux plus difficile). Le RFC sur la 
sélection des adresses source, RFC 6724 privilégie déjà par défaut les adresses
temporaires du RFC 4941.

Revenons maintenant à cette histoire d'entropie (section 2 du RFC). Combien de 
bits sont-ils nécessaires ? Prenons le cas le plus difficile, celui d'un 
balayage du réseau local, avec des paquets ICMP Echo Request ou bien avec des 
TCP SYN. L'entropie minimum est celle qui minimise les chances d'un attaquant 
de trouver une adresse qui réponde. Quel temps faudra t-il pour avoir une 
chance sur deux de trouver une adresse ? (Notez que la capacité de l'attaquant 
à trouver des machines dépend aussi du fait qu'elles répondent ou pas. Si une 
machine ne répond pas aux ICMP Echo Request, et n'envoie pas de RST aux paquets
TCP SYN, la tâche de l'attaquant sera plus compliquée. Cf. RFC 7288, notamment 
sa section 5. Même si la machine répond, un limiteur de trafic peut rendre la 
tâche de l'attaquant pénible. Avec la valeur par défaut d'IOS de deux réponses 
ICMP par seconde, il faut une année pour balayer un espace de seulement 26 
bits.)

Les formules mathématiques détaillées sont dans cette section 2 du RFC. 
L'entropie nécessaire dépend de la taille de l'espace d'adressage mais aussi de
la durée de vie du réseau. Avec 2^16 machines sur le réseau (c'est un grand 
réseau !) et un réseau qui fonctionne pendant 8 ans, il faudra 46 bits 
d'entropie pour que l'attaquant n'ait qu'une chance sur deux de trouver une 
machine qui réponde (avec la même limite de 2 requêtes par seconde ; sinon, il 
faudra davantage d'entropie).

Et combien de bits d'entropie a-t-on avec les techniques actuelles ? La section
3 donne quelques exemples : seulement 48 bits en Bluetooth (RFC 7668), 8 (oui, 
uniquement 256 adresses possibles, mais c'est nécessaire pour permettre la 
compression des en-têtes) en G.9959 (RFC 7428) et le pire, 5 bits pour NFC (RFC
pas encore paru).

Ces adaptations d'IPv6 à diverses couches 2 utilisent comme identificants 
d'interface des adresses IEEE (comme les adresses MAC) ou bien des « adresses 
courtes ». Commençons par les adresses reposant sur des adresses IEEE. Dans 
certains cas, la carte ou la puce qui gère le réseau dipose d'une adresse 
EUI-48 ou EUI-64 (comme l'adresse MAC des cartes Ethernet). On peut facilement 
construire une adresse IPv6 avec ces adresses, en concaténant le préfixe avec 
cette adresse IEEE utilisée comme identificateur d'interface (IID). L'entropie 
dépend du caractère imprévisible de l'adresse IEEE. L'IEEE a d'ailleurs des 
mécanismes[1] (pas forcément déployés dans le vrai monde) pour rendre ces 
adresses imprévisibles. Même dans ce cas, la corrélation temporelle reste 
possible, sauf si on change les adresses de temps en temps (par exemple avec 
macchanger[2]).

Un argument souvent donné en faveur des adresses MAC est leur unicité, qui 
garantit que les adresses IPv6 seront « automatiquement » distinctes, rendant 
ainsi inutile la détection d'adresses dupliquées (DAD, RFC 4862, section 5.4, 
et RFC 4429, annexe A). Sauf que ce n'est pas vrai, les adresses MAC ne sont 
pas forcément uniques, en pratique et les identificateurs d'interface 
aléatoires sont donc préférables, pour éviter les collisions d'adresses.

En dehors des adresses allouées par un mécanismes de l'IEEE, il y a les 
« adresses courtes » (16 bits, utilisées par IEEE 802.15.4, cf. RFC 4944), 
allouées localement, et uniques seulement à l'intérieur du réseau local. Vu 
leur taille, elles n'offrent évidemment pas assez d'entropie. Il faut donc les 
étendre avant de s'en servir comme identificateur d'interface. Le RFC cite par 
exemple un condensat de la concaténation de l'adresse courte avec un secret 
partagé par toutes les machines du réseau.

On peut aussi utiliser dans le condensat le numéro de version spécifié dans la 
section 4.3 du RFC 6775. Ainsi, un changement de numéro de version permettra 
une rénumérotation automatique.

Bien, après cette analyse, les recommandations (section 4) : 

  * La section Sécurité (Security Considerations) des RFC qui normalisent une 
    adaptation à une couche 2 donnée devrait dire clairement comment on limite 
    le balayage. Cela nécessite de préciser clairement la durée de vie des 
    adresses, et le nombre de bits d'entropie.
  * Il faut évidemment essayer de maximiser cette entropie. Avoir des 
    identificateurs d'adresses aléatoires est une bonne façon de le faire.
  * En tout cas, pas question de juste utiliser une adresse courte et stable 
    avec quelques bits supplémentaires de valeur fixe et bien connue.
  * Les adresses ne devraient pas être éternelles, pour limiter la durée des 
    corrélations temporelles.
  * Si une machine peut se déplacer d'un réseau à l'autre (ce qui est courant 
    aujourd'hui), il faudrait que l'identifiant d'interface change, pour 
    limiter les corrélations spatiales.


Liens:
[1]: https://mentor.ieee.org/privecsg/documents (lien)
[2]: http://www.gnu.org/software/macchanger (lien)