web-dev-qa-db-fra.com

Comment vérifier DIFFIE Hellman utilise un "coffre-fort" Prime

Je suis le développeur d'une application Web récemment testée. L'une des vulnérabilités signalées dans le test de stylo est que notre serveur utilise un dangereux Diffie-Hellman Prime dans notre échange de clé. J'interprète cela comme dangereux, par ex. pas un Safe Prime . Pour un contexte supplémentaire, le testeur de stylo référencé Cet avis de sécurité .

Je voudrais vérifier cette conclusion. Plus précisément, je cherche le "savoir-faire" pour classer le prime comme sûr ou dangereux. Cela ne doit pas nécessairement être d'une perspective intellectuelle, une ressource tierce serait tout simplement bien. J'ai essayé d'utiliser SSL Labs , qui vérifie si vous avez utilisé un prime commun, mais pas si c'est une prime dangereuse.

Comment puis-je déterminer si la DIFFIE Hellman Prime de mon site est sûre ou dangereuse?

openssl dhparam a un -check argument que vous pouvez utiliser. Mais la version actuelle de OpenSSL est incorrecte et est trop stricte. En tant que preuve, les groupes DHE de RFC 7919 qui sont les seuls groupes que vous pouvez utiliser pour DHE avec TLS 1.3 DO ne transmet pas ce chèque , même si elles sont prudentes à utiliser.

Les paramètres du groupe "dangereux" sont ceux générés par openssl dhparam -dsaparam. Ils sont soi-disant en toute sécurité à utiliser tant que votre serveur TLS ait SSL_OP_SINGLE_DH_USE Ensemble (comme l'avis de sécurité que vous avez lié dit). Avec OpenSSL 1.1.1, cette option est toujours allumée et ne fait rien (comparez le manuel pour 1.1.0 et 1.1.1 )).

Vous pouvez lire le code invoqué lorsque vous exécutez dhparam , dhparam -dsaparam et dhparam -check . Ne me demandez tout simplement pas d'expliquer pourquoi le code fait ce qu'il fait.

Sur l'échange de pile de sécurité, les gens peuvent lire des pages man et parcourir le code sur Github, mais ne comprennent pas nécessairement les calculs. Si vous voulez que quelqu'un vous explique le calcul, vous devriez demander à l'échange de pile de cryptographie. Mais ici est une réponse qui pourrait suffire à vous satisfaire.

Ce que vous devriez faire: remplacez le groupe DH que votre serveur Web utilise avec une générée par openssl dhparam 2048 ou utiliser les valeurs de RFC 7919.

Pour répondre à la question "Comment le pentestester a-t-il subi?", Pentestaler a probablement couru quelque chose comme ça:

#!/bin/bash
set -e
rm -f dh.pcapng
Sudo tcpdump -w dh.pcapng &
sleep 2
echo "Q" | openssl s_client -cipher 'EDH' -servername $1 -connect $1:443
sleep 2
Sudo killall tcpdump
sleep 2
printf "asn1=SEQUENCE:seq_sect\n[seq_sect]\nfield1=INTEGER:0x" >dh.cnf
tshark -r dh.pcapng -2 -R ssl.handshake.p -T fields -e ssl.handshake.p | sed -e 's/://g' >>dh.cnf
printf "\nfield2=INTEGER:0x" >>dh.cnf
tshark -r dh.pcapng -2 -R ssl.handshake.g -T fields -e ssl.handshake.g | sed -e 's/://g' >>dh.cnf
openssl asn1parse -genconf dh.cnf -noout -out dh.der
openssl dhparam -check -noout -inform DER -in dh.der

avec un nom de domaine comme argument (mettre cela dans un fichier appelé dh.sh, puis courez bash dh.sh www.example.com avec votre domaine).

4
Z.T.