web-dev-qa-db-fra.com

Comment la désactivation de Diffie-Hellman Cipher pour l'inspection de paquets peut-elle être sécurisée?

J'ai remarqué qu'un certain nombre d'outils de surveillance de paquets de réseau sur le marché semblent aujourd'hui avoir à peu près les mêmes paramètres de configuration recommandés que ceux décrits ci-dessous:

Désactiver Diffie Hellman à Apache

Essentiellement, ils prétendent que la surveillance du réseau d'Apache ou IIS ne peut pas fonctionner pour le trafic TLS à moins que le Diffie-Hellman Cipher soit désactivé à Apache. Qu'est-ce qui me confond est comment cela ne cesse pas de casser TLS dans ce cas ? Comment l'échange clé est-il toujours sécurisé dans ce cas?

Si Apache utilise une autre suite asymétrique de chiffrement asymétrique pour un échange de clé, par exemple, qu'est-ce que Diffie-Hellman fournit exactement l'outil de surveillance ici?

3
maple_shaft

TL, DR: L'utilisation de ce produit strictement aussi recommandé viole probablement vos règles de conformité. Ce n'est pas à cause de l'aspect Diffie-Hellman, mais je ne l'utiliserais toujours pas, en partie parce que l'aspect DH témoigne d'une architecture non sécurisée et en partie parce que d'autres aspects de la documentation témoignent d'un manque d'inquiétude pour la sécurité.

Il y a plusieurs façons différentes une poignée de main TLS peut fonctionner. Considérant le cas commun où le serveur est prêt à parler à quiconque, mais le client souhaite parler à un serveur spécifique, la poignée de main a deux objectifs fonctionnels:

  • Permettez au client de vérifier qu'il parle au serveur prévu.
  • Permettez aux deux parties d'accepter une clé de session (la partie d'échange de clé).

L'échange de clé a un objectif de sécurité, qui est celui d'un Man-in-Middle capable d'observer et de modifier la communication ne peut pas imiter le serveur ou obtenir la clé de session.

Le serveur envoie d'abord sa clé publique au client, ainsi que des données supplémentaires (certificats) qui permettent au client de vérifier que la clé publique est la bonne pour ce serveur, grâce à [~ # ~ ~] PKI [~ # ~] . À ce stade, le client connaît la clé publique du serveur légitime (sinon il détecte qu'il a été envoyé une fausse clé et ferme la connexion), mais elle ne peut toujours pas faire confiance à ce qu'elle reçoit depuis qu'un attaquant aurait pu modifier les données. .

Après cela, il y a trois façons d'aller. (Voir aussi Quel mécanisme d'échange de clé doit être utilisé dans TLS? Pour une discussion plus technique.)

  • Cryptage: le client génère une clé de session et crypte qu'avec la clé publique du serveur légitime (confirmée par PKI). Seul le serveur légitime peut le détecter, un homme dans le milieu ne peut pas, car il n'a pas la clé privée du serveur. Cela se produit avec des ciphersuites qui ont RSA dans leur nom mais pas DHE. catégorie ApacheRSA désigne ces ciphersuites.
  • Signature: Le client et le serveur utilisent A Diffie-Hellman pour échanger des données de manière à ce que les deux côtés puissent calculer la même clé de session, mais un homme dans le milieu ne peut pas trouver le clé de session prévue. Un attaquant homme-intermédiaire peut être en mesure de modifier les données pour que les deux parties calculent les différentes clés de session que l'attaquant sait, cependant. Pour éviter cela, le serveur envoie une signature de l'échange de données pendant la poignée de main, de telle manière que lorsque le client vérifie cette signature, il sait que le serveur a utilisé les mêmes données pour générer sa clé de session. L'attaquant ne peut pas simuler cette signature car elle ne connaît pas la clé privée du serveur. Cela se produit avec des ciphersuites qui ont DHE dans leur nom (y compris ECDHE). Le E in DHE signifie "Ephemeral", car l'algorithme Diffie-Hellman est utilisé pour générer une clé de session à usage unique. La partie signature peut être RSA ou ECDSA. catégorie ApacheEDH désigne ces ciphersuites.
  • Échange de clé: Il existe des ciphersuites qui utilisent des clés privées statiques Diffie-Hellman, mais essentiellement, personne ne les utilise donc je ne les discuterai plus.

Envisagez maintenant de ce qui se passe si l'attaquant peut observer le trafic mais ne le modifiez pas et connaît en outre la clé privée du serveur. Avec la première méthode, ils peuvent déchiffrer le paquet contenant la clé de session cryptée. Avec la deuxième méthode, ils ne peuvent rien faire. Un attaquant actif qui connaît la clé de signature du serveur peut imiter le serveur pendant la poignée de main, ce qui entraîne une session TLS valide entre le serveur et l'attaquant et une autre session TLS valide entre l'attaquant et le client. Mais un attaquant qui ne peut pas ou ne modifiera pas le trafic ne peut pas faire cela.

Cette propriété de la deuxième méthode est appelée Secrecy en avant parfait (PFS), car si l'attaquant parvient à enregistrer le trafic, puis parvient à obtenir la clé du serveur, ils ne pourront toujours pas déchiffrer le trafic enregistré. Ils auraient besoin de connaître les parties secrètes de l'échange de clé Diffie-Hellman, mais les participants les effacent dès que la poignée de main est terminée.

Cette centrale veut apparemment surveiller le trafic que le serveur est servi, mais ne le transmet pas activement. Il aurait besoin de connaître la clé privée du serveur, sinon l'ensemble est inutile. Donc, les instructions sont de désactiver tous les ciphersuites qui utilisent Ephemeral Diffie-Hellman, c'est-à-dire tous les ciphersuites avec PFS et gardez uniquement ceux qui ne sont que celles-cryptage.

C'est un moyen terrible moyen de surveiller le trafic, car c'est une sécurité dégradante. PFS n'est pas nécessaire pour assurer la sécurité de base de TLS, mais c'est une bonne chose puisqu'elle limite l'impact d'une clé privée compromise. En particulier, une clé privée devient inutile une fois que le certificat correspondant a expiré ou a été révoqué (en supposant que les clients vérifient correctement l'expiration et la révocation). Sans PFS, une vieille sauvegarde fuite permet de décrypter l'ancien trafic. De plus, cette configuration nécessite une copie de la clé privée du serveur dans une autre case, ce qui augmente le risque que la clé privée fuit.

Le bon endroit pour surveiller le trafic serait sur le serveur lui-même, entre l'application et le point final TLS. Je suppose que ce produit est conçu de cette manière car il facilite le déploiement, mais c'est un design terrible.

En plus de désactiver les PFS, ces instructions permettent aux chiffres d'exportation, à des chiffres à faible sécurité tels que le seul DES et SSLV2. Je ne sais pas quel âge ce produit est, mais même en 2005, qui est lorsque Apache 2.2 et RHEL4 (mentionné sur la page Web du produit) est sorti, les trois étaient obsolètes, pour être activé que si vous n'aviez vraiment absolument pas eu à parler aux anciens clients. Permettant à l'une de ces trois aujourd'hui violerait toute norme de conformité cryptographique.