Articles

TLS

Transport Layer Security (TLS) assure la sécurité de la communication entre deux hôtes. Il assure l’intégrité, l’authentification et la confidentialité. Il est utilisé le plus souvent dans les navigateurs Web, mais peut être utilisé avec n’importe quel protocole qui utilise TCP comme couche de transport.

Secure Sockets Layer (SSL) est le prédécesseur du protocole TLS. Ces noms sont souvent utilisés de manière interchangeable, ce qui peut conduire à une certaine confusion :

  • Une configuration qui utilise le protocole SSL (SSLv2/SSLv3) n’est pas sécurisée. Le protocole TLS devrait être utilisé à la place.

  • Les certificats X.509 pour l’authentification sont parfois également appelés certificats SSL.

  • Certaines applications (telles que la messagerie électronique) utilisent un seul port pour les sessions non cryptées et cryptées. Pour passer du non chiffré au chiffré, (START) TLS est utilisé. Lorsqu’un seul port utilise directement le protocole TLS, il est souvent appelé SSL.

  • Pour des raisons historiques, les logiciels (Wireshark inclus) font référence à SSL ou SSL / TLS alors qu’il signifie en fait le protocole TLS puisque c’est de nos jours ce que tout le monde utilise.

Dépendances de protocole

  • TCP: En règle générale, TLS utilise TCP comme protocole de transport.

Dissection TLS dans Wireshark

Le dissecteur TLS est entièrement fonctionnel et prend même en charge des fonctionnalités avancées telles que le décryptage de TLS si des secrets appropriés sont fournis (#TLS_Decryption).

Depuis Wireshark 3.0, le dissecteur TLS a été renommé de SSL à TLS. L’utilisation du filtre d’affichage ssl émettra un avertissement.

Décryptage TLS

Wireshark prend en charge le décryptage TLS lorsque des secrets appropriés sont fournis. Les deux méthodes disponibles sont :

  • Fichier journal des clés utilisant des secrets par session (#Using_the_.28Pré.29 – Maître- Secret).

  • Décryptage à l’aide d’une clé privée RSA.

Un fichier journal de clés est un mécanisme universel qui permet toujours le déchiffrement, même si un échange de clés Diffie-Hellman (DH) est utilisé. La clé privée RSA ne fonctionne que dans un nombre limité de cas.

Le fichier journal des clés est un fichier texte généré par des applications telles que Firefox, Chrome et curl lorsque la variable d’environnement SSLKEYLOGFILE est définie. Pour être précis, leur bibliothèque sous-jacente (NSS, OpenSSL ou boringssl) écrit les secrets requis par session dans un fichier. Ce fichier peut ensuite être configuré dans Wireshark (#Using_the_.28Pré.29 – Maître- Secret).

Le fichier de clé privée RSA ne peut être utilisé que dans les circonstances suivantes :

  • La suite de chiffrement sélectionnée par le serveur n’utilise pas (EC)DHE.
  • La version du protocole est SSLv3, (D)TLS 1.0-1.2. Cela ne fonctionne pas avec TLS 1.3.

  • La clé privée correspond au certificat du serveur. Il ne fonctionne pas avec le certificat client, ni avec le certificat d’autorité de certification (CA).

  • La session n’a pas repris. La prise de contact doit inclure le message de prise de contact ClientKeyExchange.

Le fichier journal des clés est généralement recommandé car il fonctionne dans tous les cas, mais nécessite la possibilité continue d’exporter les secrets depuis l’application client ou serveur. Le seul avantage de la clé privée RSA est qu’elle ne doit être configurée qu’une seule fois dans Wireshark pour permettre le déchiffrement, sous réserve des limitations ci-dessus.

Paramètres de préférence

Allez dans Modifier -> Préférences. Ouvrez l’arborescence des protocoles et sélectionnez TLS. Vous pouvez également sélectionner un paquet TLS dans la liste des paquets, cliquer avec le bouton droit sur la couche TLS dans la vue Détails du paquet et ouvrir le menu Préférences de protocole.

Les préférences notables du protocole TLS sont :

  • (Pre)-Master-Secret log filename(tls.keylog_file) : chemin pour lire le fichier journal des clés TLS à déchiffrer.
  • Liste des clés RSA : ouvre une boîte de dialogue pour configurer les clés privées RSA à déchiffrer. Obsolète en faveur de la boîte de dialogue Preferences-> Clés RSA.

  • Clé pré-partagée : utilisée pour configurer la clé de déchiffrement pour les suites de chiffrement PSK. Pas généralement utilisé.
  • Fichier de débogage TLS (tls.debug_logfile) : chemin pour écrire des détails internes sur le processus de décryptage. Contiendra les résultats du déchiffrement et les clés qui ont été utilisées dans ce processus. Cela peut être utilisé pour diagnostiquer pourquoi le déchiffrement échoue.

Les préférences de protocole TCP suivantes sont également requises pour activer le déchiffrement TLS :

  • Autoriser le sous-détecteur à réassembler les flux TCP. Activé par défaut.
  • Réassembler les segments en panne (depuis Wireshark 3.0, désactivé par défaut).

En commençant par Wireshark 3.0, une nouvelle boîte de dialogue de clés RSA peut être trouvée dans Edit-> Préférences -> Clés RSA. Dans cette boîte de dialogue, utilisez l’option Ajouter un nouveau fichier de clés… bouton pour sélectionner un fichier. Un mot de passe vous sera demandé si nécessaire. Ajouter un nouveau jeton… le bouton peut être utilisé pour ajouter des clés à partir d’un HSM qui peut nécessiter l’utilisation d’Ajouter un nouveau fournisseur… pour sélectionner, sélectionnez un fichier DLL/.so et une configuration supplémentaire spécifique au fournisseur.

Le fichier de clé RSA peut être une clé privée au format PEM ou un magasin de clés PKCS #12 (généralement un fichier avec un.pfx ou .extension p12). La clé PKCS #12 est un fichier binaire, mais le format PEM est un fichier texte qui ressemble à ceci:

  • -----BEGIN PRIVATE KEY-----MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDReQzlKVeAK8b5TRcRBhSi9IYwHX8Nqc8K4HeDRvN7HiBQQP3bhUkVekdoXpRLYVuc7A8h1BLr93Qw...KOi8FZl+jhG+p8vtpK5ZAIyp-----END PRIVATE KEY-----

La boîte de dialogue de liste des clés RSA obsolètes peut être supprimée à un moment donné. Pour configurer les clés, utilisez plutôt la boîte de dialogue Clés RSA. Pour modifier le protocole des données réseau déchiffrées, cliquez avec le bouton droit sur un paquet TLS et utilisez Decode As pour modifier le protocole actuel pour le port TLS. Les champs d’adresse IP et de port ne sont pas utilisés.

Exemple de fichier de capture

Voir aussi SampleCaptures #SSL_with_decryption_keys.

  • vidage.pcapng TLSv1.2 capture avec 73 suites de chiffrement, vous avez besoin de ce premaster.fichier txt pour déchiffrer le trafic. (lié à partir de https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9144)

  • tls12-dsb.trace pcapng-TLS 1.2 avec clés de déchiffrement intégrées.
  • https://github.com/wireshark/wireshark/blob/master/test/captures – La suite de tests contient diverses traces TLS.

Filtre d’affichage

Une liste complète des champs de filtre d’affichage TLS se trouve dans la référence du filtre d’affichage

Afficher uniquement le trafic basé sur TLS:

  • tls

Filtre de capture

Vous ne pouvez pas filtrer directement les protocoles TLS lors de la capture. Cependant, si vous connaissez le port TCP utilisé (voir ci-dessus), vous pouvez filtrer sur celui-ci, par exemple en utilisant le port tcp 443.

En utilisant le (Pre)-Master-Secret

Le secret maître permet le déchiffrement TLS dans Wireshark et peut être fourni via le fichier journal des clés. Le secret pré-maître est le résultat de l’échange de clés et peut être converti en secret maître par Wireshark. Ce secret pré-maître peut être obtenu lorsqu’une clé privée RSA est fournie et qu’un échange de clés RSA est utilisé.

Instructions étape par étape pour décrypter le trafic TLS de Chrome ou Firefox dans Wireshark:

  1. Fermez complètement le navigateur (vérifiez votre gestionnaire de tâches pour en être sûr).
  2. Définissez la variable d’environnement SSLKEYLOGFILE sur le chemin absolu d’un fichier inscriptible.

  3. Démarrez le navigateur.
  4. Vérifiez que l’emplacement de l’étape 2 est créé.
  5. Dans Wireshark, allez dans Préférences ->Protocoles ->TLS, et modifiez la préférence de nom de fichier du journal (Pré)-Maître-Secret sur le chemin de l’étape 2.

  6. Démarrez la capture Wireshark.
  7. Ouvrez un site Web, par exemple https://www.wireshark.org/

  8. Vérifiez que les données déchiffrées sont visibles. Par exemple, en utilisant le filtre tls et (http ou http2).

Pour Windows, une variable d’environnement peut être définie globalement comme décrit dans cette procédure pas à pas, mais cela n’est pas recommandé car elle est facile à oublier et peut être un problème de sécurité car elle permet le décryptage de tout votre trafic TLS. Une meilleure façon de définir la variable d’environnement est via un fichier batch. Créez un fichier start-fx.cmd avec :

  • @echo offset SSLKEYLOGFILE=%USERPROFILE%\Desktop\keylogfile.txtopen firefox

Modifiez le chemin du fichier SSLKEYLOG au besoin et remplacez firefox par chrome pour Google Chrome. Ce mécanisme actuellement (2019) ne fonctionne pas pour Safari, Microsoft Edge et d’autres, car leurs bibliothèques TLS (Microsoft SChannel / Apple SecureTransport) ne prennent pas en charge ce mécanisme. Ce mécanisme fonctionne également pour des applications autres que les navigateurs Web, mais il dépend de la bibliothèque TLS utilisée par l’application.

Exemples d’autres applications :

  • Les applications utilisant OpenSSL peuvent utiliser une astuce GDB ou LD_PRELOAD pour extraire les secrets. Cela inclut Python.

    • Pour une procédure pas à pas pour le serveur HTTP Apache utilisant ceci libsslkeylog.so bibliothèque, voir cet article.

  • Pour les programmes Java, les secrets peuvent être extraits de la préférence de journal de débogage TLS, ou sortis directement dans le format requis par Wireshark via un agent Java. Deux projets similaires :
    • jSSLKeyLog: http://jsslkeylog.sourceforge.net/

    • Extract-tls-secrets: https://github.com/neykov/extract-tls-secrets

  • Les scripts Python peuvent également être modifiés pour vider les clés.

Pour une enquête sur les applications et bibliothèques TLS prises en charge, voir également la page 19 de la présentation de Peter Wu sur le décryptage SSL/ TLS SharkFest ’18 EU.

Intégration des secrets de déchiffrement dans un fichier pcapng

Depuis Wireshark 3.0, vous pouvez intégrer le fichier journal des clés TLS dans un fichier pcapng. Cela facilite la distribution des fichiers de capture avec des secrets de déchiffrement et facilite la commutation entre les fichiers de capture car la préférence du protocole TLS n’a pas à être mise à jour. Pour ajouter le contenu des clés du fichier journal des clés.txt pour capturer le fichier.pcap et écrivez le résultat dans out-dsb.le code pcapng :

  • editcap –inject-secrets tls, clés.txt dans.sortie pcap – dsb.pcapng

Le suffixe dsb signifie Decryption Secrets Block (DSB) et fait partie de la spécification pcapng.

Un fichier journal de clés peut contenir des clés qui ne sont pas liées à un fichier de capture. Pour vous assurer que les clés inutiles ne sont pas divulguées, vous pouvez utiliser le inject-tls-secrets.py script de https://gist.github.com/Lekensteyn/f64ba6d6d2c6229d6ec444647979ea24 pour filtrer le fichier journal des clés et ajouter les secrets requis à un fichier de capture. Le script shell a été testé avec Linux et macOS, mais une version Python 3 est également disponible pour toutes les plates-formes, y compris Windows. Exemple:

  • git clone https://gist.github.com/Lekensteyn/f64ba6d6d2c6229d6ec444647979ea24 ~/its~/its/inject-tls-secrets.py keys.txt some.pcap

Voir aussi

Certains autres protocoles sont dérivés de TLS. Cela inclut :

  • DTLS est basé sur la norme TLS et s’exécute au-dessus d’UDP en tant que protocole de transport.

  • QUIC est un protocole en développement qui utilise TLS pour son chiffrement, le statut de Wireshark peut être suivi à https://github.com/quicwg/base-drafts/wiki/Tools#wireshark.

  • https://en.wikipedia.org/wiki/Transport_Layer_SecurityArticle Wikipedia pour TLS

  • https://sharkfesteurope.wireshark.org/assets/presentations16eu/07.pdfPrésentation de SharkFest ’16 EU par Sake Blok sur le dépannage du SSL avec Wireshark / Tshark (ou regardez la vidéo de la présentation sur https://youtu.be/oDaDY9QCnXk)

  • https://lekensteyn.nl/files/wireshark-ssl-tls-decryption-secrets-sharkfest18eu.pdfPrésentation du SharkFest ’18 EU par Peter Wu sur le décryptage TLS (vidéo pour une conférence précédente en Asie à https://youtu.be/bwJEBwgoeBg)

  • https://lekensteyn.nl/files/wireshark-tls-debugging-sharkfest19us.pdf SharkFest ’19 US présentation de Peter Wu décrivant le décryptage TLS et l’utilisation du décryptage embarqué les secrets (https://youtu.be/Ha4SLHceF6w).

  • Comment fonctionne SSL/TLS ? – Échange de pile de sécurité de l’information

  • SSL sans clé: Les détails techniques graveleux avec une bonne introduction dans TLS

  • PolarProxy de Netresec est un proxy SSL / TLS transparent créé pour les intervenants en cas d’incident et les chercheurs de logiciels malveillants qui est principalement conçu pour intercepter et décrypter le trafic crypté TLS à partir de logiciels malveillants. PolarProxy décrypte et crypte à nouveau le trafic TLS, tout en enregistrant le trafic déchiffré dans un fichier PCAP qui peut être chargé dans Wireshark ou un système de détection d’intrusion (IDS).

  • CategoryHowTo

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *