- Que sont Wireshark et tcpdump ?
- Qu'est-ce que le cryptage SSL ?
- Décryptage SSL avec une clé secrète pré-maîtresse
- Utilisation d'une clé RSA pour décrypter SSL
- En savoir plus
Dans les réseaux modernes, la sécurisation de la transmission des données est primordiale, et les protocoles SSL (Secure Sockets Layer) et TLS (Transport Layer Security) sont largement utilisés pour garantir la confidentialité et la sécurité des données. Cependant, il peut arriver que vous ayez besoin d'analyser le trafic chiffré à des fins de dépannage, d'analyse médico-légale ou de surveillance du réseau. Cet article technique vous guidera dans le déchiffrement du trafic SSL/TLS à l'aide de Wireshark et tcpdump, deux puissants outils d'analyse réseau. Nous expliquerons ce que sont Wireshark et tcpdump, expliquerons le chiffrement SSL et TLS et montrerons comment déchiffrer le trafic SSL à l'aide d'une clé secrète pré-maîtresse ou d'une clé privée RSA.
Que sont Wireshark et tcpdump ? #
Wireshark #
Wireshark est un analyseur de protocole réseau open source qui permet aux utilisateurs de capturer et de parcourir de manière interactive le trafic en cours sur un réseau informatique. Il vous permet d'inspecter les données à un niveau granulaire, offrant une visibilité sur les protocoles et les paquets de données transmis. Wireshark est largement utilisé pour le dépannage réseau, le développement de protocoles et l'analyse de sécurité.
tcpdump #
tcpdump est un outil d'analyse de paquets en ligne de commande qui capture le trafic réseau et l'affiche en temps réel. Il est très efficace pour capturer des données à partir de réseaux en direct, vous permettant d'enregistrer des paquets dans un fichier (appelé fichier de capture) pour une analyse ultérieure. Bien que tcpdump ne dispose pas de l'interface graphique de Wireshark, il est puissant pour une analyse rapide, le filtrage des paquets et la collecte de données sur des systèmes distants.
Qu'est-ce que le cryptage SSL ? #
SSL (Secure Sockets Layer) est un protocole développé par Netscape pour la transmission de documents privés via Internet. SSL utilise des algorithmes de cryptage pour garantir que les données envoyées entre le client (par exemple, un navigateur Web) et le serveur sont illisibles pour quiconque intercepte la transmission.
Le protocole TLS (Transport Layer Security) est le successeur du protocole SSL et est plus sécurisé. Bien que le protocole TLS soit techniquement différent du protocole SSL, le terme SSL est souvent utilisé pour désigner les deux protocoles.
SSL/TLS fonctionne en établissant un canal de communication sécurisé entre deux systèmes. Les concepts clés du cryptage SSL/TLS incluent :
- Cryptage symétrique : une seule clé est utilisée pour crypter et décrypter les données.
- Chiffrement asymétrique : Deux clés (publique et privée) sont utilisées ; les données chiffrées avec la clé publique ne peuvent être déchiffrées qu'avec la clé privée correspondante.
- Certificats : SSL/TLS utilise des certificats pour vérifier l'identité du serveur et parfois du client.
- Poignée de main : processus par lequel le client et le serveur établissent une connexion sécurisée, échangent des clés et conviennent des méthodes de cryptage.
Décryptage SSL avec une clé secrète pré-maîtresse #
La clé secrète pré-maîtresse est un élément essentiel du processus de négociation SSL/TLS. Cette clé est utilisée pour générer des clés de session, qui sont ensuite utilisées pour chiffrer les données réellement transférées sur le réseau. En obtenant la clé secrète pré-maîtresse, vous pouvez déchiffrer les données de session.
Étapes de base pour décrypter SSL avec une clé secrète pré-maîtresse #
Pour décrypter le trafic SSL à l’aide de la clé secrète pré-maîtresse, procédez comme suit :
1. Définir la variable d'environnement du fichier journal
2. Capture avec tcpdump et vérification du fichier journal
3. Configurer Wireshark pour le décryptage SSL
Définir la variable d'environnement du fichier journal #
Paramètres SSLKEYLOGFILE sous Windows #
Sur les systèmes Windows, vous devrez définir une variable d'environnement pour stocker les clés secrètes pré-maîtres dans un fichier journal. Cette variable, nommée SSLKEYLOGFILE, définit le chemin où ces clés sont enregistrées.
1. Commencez par faire un clic droit sur Poste de travail et la sélection Propriétés depuis le menu pour ouvrir le menu Système.
2. Cliquez sur Paramètres système avancés dans la liste de gauche pour ouvrir la fenêtre Propriétés système.
3. Dans l' Avancé onglet, cliquez sur le bouton « Variables d’environnement ».
4. Sous Variables utilisateur, clique le Nouveau… bouton. Vous pouvez également créer cette variable sous Variables système si vous souhaitez enregistrer les clés SSL de tous les utilisateurs du système. Cependant, il est généralement préférable de le limiter à votre profil.
5. Dans l' Nom de variable champ, entrez SSLKEYLOGFILE.
Dans l' Valeur variable Dans le champ, saisissez le chemin où vous souhaitez enregistrer le fichier journal. Vous pouvez également cliquer sur Parcourir le fichier… pour sélectionner le chemin à l'aide du sélecteur de fichiers.
Si vous définissez cette variable comme variable à l'échelle du système, assurez-vous que le fichier est accessible à tous les utilisateurs ou utilisez des caractères génériques. Par exemple, vous pouvez utiliser %USERPROFILE%\AppData\ssl-keys.log or C:\ssl-keys.log .
6. Une fois que vous avez terminé, cliquez OK pour appliquer les modifications et passer aux étapes suivantes.
Paramètres SSLKEYLOGFILE sur Linux ou Mac #
Sous Linux et Mac, vous devrez définir le SSLKEYLOGFILE variable d'environnement utilisation Exporter. Dans le même terminal, vous pouvez exécuter tcpdump et il générera le fichier journal de clé indiqué lorsqu'une connexion SSL est détectée.
root@noid-01:~# export SSLKEYLOGFILE=~/.ssl-key.log root@noid-01:~# tcpdump ...
Pour maintenir une configuration de variable d'environnement permanente, modifiez le profil utilisateur avec un éditeur de texte comme nano. Pour Linux, cette variable est stockée dans ~ / .bashrc, et sur Mac, il est créé dans ~ / .bash_profile. Ensuite, ajoutez le Exporter commande pour SSLKEYLOGFILE variable à la fin du fichier et enregistrez les modifications.
Capture avec tcpdump et vérification du fichier journal #
Pour tester la génération du fichier journal, essayez d'ouvrir un navigateur, tcpdump ou lancez une commande curl sur un serveur HTTPS pour confirmer que le fichier est correctement généré.
À titre d’exemple, dans le même terminal où la variable d’environnement a été créée, la tcpdump pour capturer le trafic et un curl vers un service HTTPS sera lancé pour être décrypté :
root@noid-01:~# export SSLKEYLOGFILE=~/.ssl-key.log root@noid-01:~# tcpdump -i n'importe quel port 443 -w ~/capture.pcap & root@noid-01:~# curl https://(puis fermez la commande tcpdump)
Vérifiez que le fichier journal ~/.clé-ssl.log et la capture du trafic à ~/capture.pcap sont générés. Enfin, consultez la dernière étape pour voir le trafic crypté avec wireshark.
Si vous ouvrez le clé ssl.log fichier, vous verrez quelque chose comme ce qui suit :
root@noid-01:~# cat ~/.ssl-key.log CLIENT_HANDSHAKE_TRAFFIC_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a db6f3d27b40b7c8e10ed415281b39e45ca6ef2b59468f943dbe6e81e1f82e0f0 SERVER_HANDSHAKE_TRAFFIC_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a d819660e194d9439e7152ceac2a439b41584afbeb5d719663cecb3c63b5c2eb1 CLIENT_TRAFFIC_SECRET_0 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 71d4806141cb1b247c1d1f3f7747a804fcc5e06c4192d8f53fc763a27b92316c SERVER_TRAFFIC_SECRET_0 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 2ca17b0f7ff708fb3001be17a1c85163219221a4595462415e9e9e6653daf1fa EXPORTER_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 3f74b0cbe802d3e3dd3b5f6dee4114f928ec936a0cd388643d146cfb606f62a4
Configurer Wireshark pour le décryptage SSL #
Une fois que le système de capture enregistre les clés pré-maîtres, vous pouvez utiliser le fichier journal des clés avec les paquets capturés pour décrypter le trafic SSL dans Wireshark.
1. Téléchargez le journal des clés et les fichiers de capture dans le système sur lequel Wireshark est installé.
2. Ouvrez le fichier de capture du trafic avec Wireshark.
3. Configurer le protocole SSL. Cliquez sur Modifier, Puis sélectionnez Préférences. La boîte de dialogue Préférences s'ouvre, affichant une liste d'éléments sur la gauche. Développez le Protocoles section, faites défiler vers le bas et cliquez sur SSL. Dans le SSL options de protocole, localisez le champ intitulé Nom du fichier journal (pré)-Master-SecretAccédez au fichier journal que vous avez configuré précédemment ou collez le chemin directement dans ce champ.
4. Appliquer la configuration. Après avoir défini le Nom du fichier journal (pré)-Master-Secretcliquez OK pour enregistrer vos modifications et revenir à Wireshark. Vous êtes maintenant prêt à décrypter le trafic capturé. Lorsque vous sélectionnez une trame de données cryptée, vérifiez la vue Octets du paquet. Sous la vue, vous devriez voir un onglet pour Données SSL décryptées etc.
Si les données de session semblent toujours illisibles et que vous ne voyez aucun code HTML, cela peut être dû à la compression GZIP, qui est couramment utilisée par les serveurs Web comme Apache. Dans ce cas, cliquez sur le bouton Corps d'entité non compressé Onglet, qui n'est disponible que lorsque le décryptage SSL est activé. Ici, vous pouvez afficher le code source non compressé du site, comme l'élément de titre de la page Apache par défaut en texte brut.
Utilisation d'une clé RSA pour décrypter SSL #
Wireshark propose une fonctionnalité qui vous permet de télécharger vos clés RSA pour décrypter le trafic SSL, mais dans la pratique, le décryptage des clés RSA est devenu obsolète.
Cette baisse d'utilisation est due à l'adoption du Perfect Forward Secrecy (PFS), qui a rendu obsolète le déchiffrement traditionnel des clés RSA. Avec PFS, les sessions négociées à l'aide de Diffie-Hellman ne s'appuient pas directement sur la clé RSA. Au lieu de cela, elles génèrent une clé à usage unique qui est stockée uniquement dans la RAM et chiffrée à l'aide de la clé sur le disque.
Si vous avez déjà utilisé une clé RSA pour déchiffrer le trafic et que vous avez constaté qu'elle ne fonctionne plus, il est probable que la machine cible utilise des échanges de clés Diffie-Hellman. Vous pouvez le confirmer en activant la journalisation SSL dans Wireshark.
Pour activer la journalisation :
1. Cliquez sur Modifier dans le menu de la barre d'outils et sélectionnez Préférences.
2. Élargir la Protocoles section sur la gauche, faites défiler vers le bas et cliquez sur SSL.
3. Définissez l'emplacement de votre fichier journal SSL en cliquant sur le bouton Explorer .
Une fois la journalisation activée, capturez une session avec votre hôte compatible SSL et vérifiez les journaux. Recherchez la trame de négociation de la négociation TLS ; vous verrez probablement une entrée DHE (ou ECDHE, pour les clés à courbe elliptique) dans la chaîne de chiffrement, indiquant que les échanges de clés Diffie-Hellman sont en cours d'utilisation.
Si vous voyez un message indiquant que le secret principal est introuvable et que le déchiffrement de la clé RSA échoue, vous devrez passer à la méthode du secret principal pré-maître pour le déchiffrement.
À mesure que PFS se généralise, en particulier avec l’avènement de TLS 1.3, le déchiffrement de clé RSA traditionnel est obsolète et ne doit plus être utilisé.
En savoir plus #
Le format SSLKEYLOGFILE pour TLS #
Le Fichier journal des clés SSL Le format est un fichier texte utilisé pour stocker les clés secrètes pré-maîtres pour le décryptage des connexions TLS. Le fichier est codé en UTF-8, chaque ligne contenant un secret identifié par une étiquette, une valeur aléatoire client et le secret lui-même, le tout séparé par des espaces. Le format accepte différentes fins de ligne (CRLF, CR, LF) et les lignes commençant par # sont traités comme des commentaires.
Pour TLS 1.3, plusieurs étiquettes correspondent à différentes étapes du planning clé, telles que SECRET_TRAFIC_POIGNEE_DE_MAIN_CLIENT et SERVER_TRAFFIC_SECRET_0. Pour TLS 1.2 et versions antérieures, le CLIENT_ALÉATOIRE l'étiquette identifie le maître du centre de Bruxelles.
Considérations de sécurité :
L'accès à la Fichier journal des clés SSL permet le déchiffrement du trafic TLS, ce qui pose un risque de sécurité important. Des contrôles d'accès appropriés sont essentiels pour empêcher tout accès non autorisé ou toute escalade de privilèges. La journalisation ne doit être activée que par les utilisateurs autorisés et des autorisations de fichiers strictes doivent être appliquées. Les secrets enregistrés permettent non seulement le déchiffrement, mais peuvent également permettre aux attaquants de modifier ou d'injecter des données dans des connexions actives et, dans certains cas, d'usurper l'identité de points de terminaison ou de falsifier des messages.
Comment fonctionne une négociation SSL bidirectionnelle ? #
Une connexion SSL bidirectionnelle authentifie à la fois le serveur et le client. Voici comment se déroule le processus :
1. Client Bonjour: Le client lance la négociation en envoyant un message « Client Hello » au serveur. Ce message inclut les suites de chiffrement prises en charge par le client et les compatibilités de version TLS.
2. Serveur Bonjour:Le serveur répond avec un message « Server Hello », qui contient le certificat public du serveur et une demande de certificat du client.
3. Validation du certificat client: Le client vérifie le certificat du serveur. S'il est valide, le client renvoie son propre certificat au serveur.
4. Validation du certificat du serveur: Le serveur vérifie le certificat du client. Si le certificat du client est valide, l'établissement de la session se poursuit, permettant une communication sécurisée entre les deux parties.
Est-il possible de décrypter le trafic SSL/TLS détecté passivement ? #
Oui, il est possible de décrypter le trafic SSL/TLS intercepté de manière passive, mais vous aurez besoin de la clé RSA pour le faire. Cette clé peut être obtenue par des moyens légitimes avec une autorisation appropriée ou, de manière moins éthique, en l'interceptant à l'aide d'une attaque de type « man-in-the-middle ».