--- title: "Sécurité des réseaux : sécurité des échanges" date: 2022-10-04 tags: ["TLS", "IPSEC"] categories: ["Sécurité des réseaux", "Cours"] mathjax: true --- Dans cette partie nous aborderons *TLS* (*Transport Layer Security*), *IPSec* (*IP Security*) et les *PKI* (*Public Key Infrastructure*) ## Propriété à assurer Pour sécuriser un échange, il faut assurer 4 points: 1. la confidentialité: seul mon interlocuteur peut lire le message; 2. l'authenticité: le message est authentique; 3. l'intégrité: le message vient bien de mon interlocuteur, il n'a pas été modifié par un tiers; 4. la non répudiabilité: mon interlocuteur ne peut pas réfuter ses messages; ## IPSec C'est un protocole ancien (~1994) créé pour répondre aux 4 propriétés vu précédemment. Il se positionne dans la couche IP, il est donc totalement transparent pour les couches supérieures. IPSec est composé de plusieurs parties: * **ESP (*Encapsulating Security Payload*)**: chiffrement; * **AH** (*Authentication Header*): authentification de l'origine des paquets, contrôle des accès, rejet des paquets rejoués; * **Négociation**: établissement des paramètres de la communication avec**IKE** (*Internet Key Exchange*). ### Les défi des attaques par rejeu Ces types d'attaques permettent de mettre à mal des protocoles réputés fiables comme *WPA2*. Quelle solution est implémentée dans IPSec? Au niveau du récepteur, un identifiant de paquet et une fenêtre de réception sont utilisés. Une **fenêtre** est une intervalle de temps bornée pendant laquelle les identifiants sont acceptés. Le déroulé: * Une fenêtre de taille `W` est créée sur le récepteur; * Le numéro d'ordre le plus élevé, noté `N`, est placé à l'extrémité droite de la fenêtre; * Pour tout paquet reçu avec un numéro d'ordre compris entre `N - W +1` et `N`, la position correspondante est marquée; * Lors de la réception d'un nouveau paquet; * Si la position et la *MAC* sont corrects, la position est marquée * Si la *MAC* est correct et que le numéro d'ordre est à droite de la fenêtre, alors cette dernière est avancée de sorte que `N` prenne la valeur du numéro d'ordre de ce paquet; * Si la *MAC* est invalide ou que le numéro d'ordre est à gauche de la fenêtre, **il est détruit**; ### Authentication Header L'entête d'authentification assure l'intégrité des données et authentifie les paquets IP. Elle est basée sur MAC (*Message Authentication Code*) ([Wikipedia](https://fr.wikipedia.org/wiki/Code_d%27authentification_de_message)). L'entête permet aussi la détection du rejeu (cf chapitre au dessus) ### Encapsulated Security Payload Ce protocole assure la confidentialité des échange, l'authentification et l'intégrité des messages. En opposition avec le protocole *AH*, *ESP* chiffre les données et les encapsules et y ajoute su besoin du bourrage (*padding*) (voir schémas ci-dessous) ### Le mode transport Deux hôtes se "parlent" via un tunnel sécurisé. Dans ce mode, le paquet d'origine est inclus dans un autre. Le paquet d'origine est alors chiffré et / ou authentifié. ![Encapsulation de la trame IP en mode transport](./images/ipsec_transport.svg) Un champ AH est ajouté pour authentifier la trame. Cette authentification est assurée par une signature qui prend la forme: \\[ hash(K || hash(K || M)) \\] Ou `hash` est une fonction de hashage, `K` la clé et `M` le message. En mode transport, **ESP** chiffre la charge utile du paquet d'origine, l'entête reste inchangée. *ESP* authentifie l'information utile et certaines parties de l'entête IP comme montré sur le schéma ci-dessous: ![Utilisation d'ESP en mode transport](./images/ipsec_transport_esp.svg) Lors de l'utilisation du mode transport, il n'est pas possible de faire du *NAT* sans compromettre l'intégrité du paquet. Il est tout de même possible de faire du [NAT-Traversal](https://fr.wikipedia.org/wiki/NAT-T) qui en capsule les paquets IPsec dans des paquets *UDP* ### Le mode tunnel Deux réseaux se "parlent" via l'établissement d'un tunnel sécurisé. ![Encapsulation de la trame IP en mode tunnel](./images/ipsec_tunnel.svg) Ce mode assure la protection du paquet IP dans sa totalité. En mode ESP, le message doit être **chiffré**. ![Utilisation d'ESP en mode transport](./images/ipsec_tunnel_esp.svg) Le mode *ESP* supporte le *NAT*. ### IKE -- Gestion des clés IKE sert à gérer et distribuer les clés, il est aussi chargé de négocier la connexion. 4 clés sont nécessaire pour sécuriser le tunnel: une paire pour la transmission et une autre pour le réception. Deux type d'authentification sont possible : * *Pre-Shared Key* ou *PSK*, en somme un secret partagé * à l'aide de certificats, dans ce cas l'utilisation d'une autorité de certification assure la **non répudiation** des messages envoyés IPsec propose deux mode de gestion des clés: manuelle -- chaque poste est configuré manuellement -- ou automatique via *Internet Security Association and Key Management* (ISAKPM). **ISAKPM** fournit un cadre pour la création et la gestion des clés, pour authentifier les communications et la gestion des *Security Associations*. Il utilise *IKE* pour l'échange de clés. ### Diffie-Hellman #### Principe de fonctionnement Alice et Bob choisissent un nombre premier \\(q\\) et une racine primaire de \\(q\\) notée \\(a\\). Ils tirent chacun un nombre aléatoire, respectivement \\(X_{A}\\) et \\(X_{B}\\), ces nombres correspondent aux **clés privées** de nos deux protagonistes. 1. Alice transmet \\(Y_{A}\\) qui vaut \\(a^{X_{A}}mod(q) \\) 2. Bob transmet \\(Y_{B}\\) qui vaut \\(a^{Y_{B}}mod(q) \\) 3. Chacun des protagoniste calcule la clé de session : \\(K = (Y_{B})^{X_{A}}mod(q) = \(Y_{A})^{X_{B}}mod(q) = a^{X_{A}X_{B}}mod(q)\\) #### Faiblesses Cette algorithme permet d'assurer la *Perfect Forward Secrecy* : la compromission de la clé n'entraine pas la compromission des échanges passés. Mais DH est sensible aux **attaque par l'homme du milieu (MitM)**. Il est alors nécessaire de signer les messages \\(Y_{A}\\) et \\(Y_{B}\\). Alice et Bob ont alors besoin **d'échanger des informations avant leurs échanges**. De plus la réception des premiers message est coûteuse en temps de calcul: **risque de déni de service**. ### Oakley Il intervient à plusieurs endroits pour sécuriser les échanges: * Utilisation des cookies pour éviter les attaques par déni de service; * Négociation d'un groupe de paramètres pour DH; * Authentification des échanges de clés DH; * Utilisation de **nonce** pour contrer les attaques par rejeu. Un nonce est un nombre aléatoire (ou pseudo aléatoire) à usage unique utilisé dans une communication afin de garantir qu'un ancien message ne puisse pas être réutilisé. ### ISAKMP C'est le plus populaire des IKE: * il négocie d'abords les associations de sécurité (*SA*) * Il utilise le protocole d'*Oackley* * Il nécessite deux phases : la première pour créer un canal sécurisé permettant à la phase deux d'échanger les véritables paramètre de sécurité ## SSL / TLS Ici aussi il est question de respecter les 4 paramètres vu en introduction. Dans TLS pour *Transport Layer Security*, il est toujours question de Client / Serveur. Avec la version 1.3 de *TLS*, il y a rupture dans la rétro-compatibilité afin de se débarrasser des éléments problématiques. ### Poignée de main #### Version simplifiée (RSA) 1. Le client envoi un `hello` en clair. Ce message comprend: * la version du protocole qu'il souhaite utiliser * les suite de chiffrement prise en charge * un *client random*, courte chaine de donnée aléatoire 2. Le serveur répond en clair : * son certificat x509 * ses suites de chiffrement préférées * un *serveur random*, courte chaine de donnée aléatoire 3. Le client créé un autre ensemble de données aléatoire : le *premaster secret*, la chiffre avec le certificat donné par le serveur. 4. le serveur déchiffre le secret 5. Les deux partie dispose maintenant du *client random*, *serveur random* et le *premaster secrets*. Ces trois éléments permettent de générer une clé de session. #### Version avancée (DHE) 1. le client envoi un `hello` avec les même éléments de la poignée de main RSA 2. le serveur répond avec les même éléments, il y ajoute son paramètre *Diffie-Hellman*. Il chiffre le *client random*, le *server random* et les paramètres DH avec sa clé privée. 3. le client déchiffre et authentifie le message du serveur avec la clé publique (certificat) 4. en utilisant les paramètres DH du serveur et du client, les deux parties calculent la *premaster key* 5. comme pour la poignée de main RSA, les deux parties créent les clé de session ### Les attaques sur TLS #### CRIME *Compression Ratio Info-leak Made Easy* porte sur la compression et touche les protocoles *HTTP* et *SPDY*. Elle permet le vol du cookie d'authentification. L'attaquant observe la taille du cyphertext envoyé par le navigateur pendant qu'il force ce même navigateur à envoyer des requête spécialement forgée vers des sites déterminés. #### HEIST *HTTP Encrypted Information Can Be Stolen Through TCP-Windows* est une attaque qui n'utilise pas de MitM. Comme CRIME, l'attaque se joue dans le navigateur de la victime et utilise pour partie la compression combinée à l'utilisation du timing en side-channel (via *Javascript*). #### FREAKS *Factoring RSA Export Keys* est une attaque qui découle de faiblesses délibérément introduites dans les implémentation des protocoles SSL/TLS. CEs faiblesses sont dues aux législations des États-Unis d'Amériques sur l'exportation des solution de chiffrement. Ces faiblesses sont combinées à la possibilité de renégocier la suite de protocole utilisée dans TLS permet donc l'attaquant à forcer la victime à choisir les protocoles affaiblis. #### Alpaca TLS ne s'occupe pas de chiffrer les données annexes comme les adresses IP, les ports (source et destination) etc. Un attaquant peut alors rediriger le traffic vers un serveur qu'il contrôle.