Après les attaque BEAST et bug Heartbleed , j'ai entendu parler d'une nouvelle vulnérabilité de SSL/TLS appelée CANICHE . Comment puis-je me protéger contre l'exploitation?
S'il vous plaît me montrer des exemples sur la façon d'éviter cette vulnérabilité.
SSL est conçu pour sécuriser le niveau de transport sur Internet. Pour "le Web", c'est-à-dire HTTP, vous le reconnaîtrez sous le nom de HTTPS, mais il est également utilisé pour d'autres protocoles d'application. SSLv2 était le premier protocole de sécurité de transport largement utilisé, mais a été découvert peu sûr peu de temps après. Les successeurs SSLv3 et TLSv1 sont maintenant largement pris en charge. TLSv1.1 et TLSv1.2 sont plus récents et gagnent également en support. La plupart des navigateurs Web publiés à partir de 2014, sinon tous, sont compatibles.
La récente découverte par les ingénieurs de Google indique que SSLv3 ne doit plus être utilisé (car SSLv2 est obsolète depuis longtemps). Les clients qui ne pourront pas se connecter à votre site/service sont probablement très très limités. CloudFlare annoncé que moins de 0,09% de leurs visiteurs utilisent encore SSLv3.
Solution simple: désactivez SSLv3.
Oui, via sn-2385-1 avec l’ajout de la fonctionnalité SCSV, , mais cela n’atténue pas complètement le problème , car cela ne désactive pas SSLv3 et le correctif ne fonctionnera que si les deux côtés de la connexion ont été corrigés. Vous le recevrez via vos mises à jour de sécurité régulières dans votre gestionnaire de paquets.
Donc, toujours VOUS devez agir vous-même pour désactiver SSLv3 (c'est configurable). Les versions futures des clients/navigateurs désactiveront probablement SSLv3. Par exemple. Firefox 34 le fera.
Désactiver complètement SSLv3 par défaut dans Ubuntu au niveau de l’implémentation risque d’éclater certaines choses également pour une utilisation SSL non-HTTPS qui n’est pas si vulnérable. Je suppose donc que les responsables ne le feront pas et que ce correctif SCSV sera appliqué.
Vraiment, arrêtez de poser de telles questions et sautez quelques paragraphes et désactivez SSLv3. Mais bon, si vous n'êtes pas convaincu, c'est parti:
POODLE montre que SSLv3 avec les chiffrements CBC est cassé, implémenter SCSV ne change rien à cela. SCSV s'assure uniquement que vous ne rétrogradez pas un protocole TLS vers un protocole TLS/SSL inférieur, au besoin, avec l'attaque Man-in-the-Middle requise dans les cas habituels.
Si vous devez accéder à un serveur qui n'offre pas du tout TLS, mais uniquement SSLv3, votre navigateur n'a pas vraiment le choix et doit parler au serveur à l'aide de SSLv3, qui est alors vulnérable sans aucune attaque par rétrogradation.
Si vous devez accéder à un serveur proposant également TLSv1 + et SSLv3 (ce qui est déconseillé) et que vous voulez être sûr que votre connexion ne sera pas dégradée en SSLv3 par un attaquant, alors le serveur et le client ont besoin de ce correctif SCSV.
Pour atténuer complètement le problème, la désactivation de SSLv3 est suffisante et vous pouvez être sûr de ne pas être rétrogradé. Et vous ne pourrez pas parler aux serveurs uniquement SSLv3.
Voir ci-dessous dans les sections spécifiques à l'application: Firefox, Chrome, Apache, Nginx et Postfix sont couverts pour l'instant.
La vulnérabilité existe si le serveur et le client acceptent tous deux SSLv3 (même s'ils sont tous deux capables de TLSv1/TLSv1.1/TLS1.2 en raison d'une attaque par déclassement).
En tant qu'administrateur de serveur, vous devez désactiver SSLv3 maintenant pour la sécurité de vos utilisateurs.
En tant qu'utilisateur, vous devez désactiver SSLv3 sur votre navigateur maintenant pour vous protéger lorsque vous visitez des sites Web qui prennent encore en charge SSLv3.
Non, c'est un bogue de protocole (conception), pas un bogue d'implémentation. Cela signifie que vous ne pouvez pas vraiment le corriger (sauf si vous modifiez la conception de l'ancien SSLv3).
Et oui, il y a un nouveau version de sécurité OpenSSL , mais lisez ci-dessous ( mais j'ai vraiment besoin du support de SSLv3 ... pour la raison X, Y, Z! ) sur la raison pour laquelle vous feriez mieux de vous concentrer sur la désactivation de SSLv3.
Oui, probablement. Je mets cela dans un article de blog séparé pour plus de réflexion et de travail. Nous pouvons avoir une règle magique iptables
que vous pouvez utiliser!
Mon article de blog: Comment supprimer SSLv3 sur votre réseau en utilisant iptables pour POODLE?
Les chercheurs ont montré que le vecteur d’attaque actuel contrôlait le texte en clair envoyé au serveur à l’aide de Javascript qui était exécuté sur la machine de la victime. Ce vecteur ne s'applique pas aux scénarios non-HTTPS sans l'utilisation d'un navigateur.
De plus, normalement, un client SSL ne permet pas de rétrograder la session en SSLv3 (TLSv1 + étant vu dans les capacités de négociation), mais les navigateurs veulent être très compatibles avec les versions antérieures et ils le font. La combinaison avec le contrôle du texte en clair et la manière spécifique dont un en-tête HTTP est construit le rend exploitable.
Conclusion: désactivez SSLv3 pour HTTPS maintenant , désactivez SSLv3 pour les autres services dans la fenêtre de service suivante.
Non, vous n'avez pas besoin de faire pivoter vos certificats pour cela. La vulnérabilité expose la récupération de texte en clair à partir des données de session, elle ne donne accès à aucun secret (ni la clé de session ni la clé de certificat).
Un attaquant est très probablement uniquement capable de voler les en-têtes en texte clair, tels que les cookies de session, afin d'effectuer détournement de session . Une contrainte supplémentaire est la nécessité d'une attaque (active) attaque MitM .
En tant qu'utilisateur, outre la désactivation de SSLv3 dans votre navigateur, pas vraiment. Eh bien, installez toujours les dernières mises à jour de sécurité.
Pour les serveurs, suivez Guide du serveur TLS de Mozilla . Et testez avec test de Qualys 'SSL Labs . Ce n'est vraiment pas difficile d'obtenir une cote A + sur votre site. Il suffit de mettre à jour vos paquets et de mettre en œuvre les recommandations du guide de Mozilla.
Eh bien, il existe un correctif qui évite l'attaque par rétrogradation des clients compatibles TLSv1, appelé Protection de remplacement SSLv3. Soit dit en passant, cela améliorera également la sécurité de TLSv1 + (une attaque par déclassement est plus difficile/impossible). Il est proposé comme portage d'une version OpenSSL plus récente dans l'avis de sécurité Ubuntu sn-2385-1 .
Gros problème: les clients et les serveurs ont besoin de ce correctif pour fonctionner. Donc, à mon avis, pendant la mise à jour des clients et des serveurs, vous devriez quand même passer à TLSv1 +.
Cependant, s'il vous plaît, retirez simplement SSLv3 de votre réseau pour l'instant. Faites des efforts pour mettre à niveau les normes de sécurité et abandonnez simplement SSLv3.
Seulement si vous avez vraiment besoin de SSLv3 pour une raison étrange, mais que cela améliore également la sécurité dans TLSv1 +, alors oui, je vous recommande de l'installer. Ubuntu fournit une mise à jour pour cette fonctionnalité dans sn-2385-1 . Vous le recevrez via vos mises à jour de sécurité régulières dans votre gestionnaire de paquets.
Vos serveurs sont vulnérables simplement s'ils prennent en charge SSLv3. Plusieurs options ici:
Avec OpenSSL s_client:
openssl s_client -connect <server>:<port> -ssl3
Si la connexion réussit, sslv3 est activé. Si cela échoue, il est désactivé. Quand cela échoue, vous devriez voir quelque chose comme:
error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
Utilisation de nmap
name__:
nmap --script ssl-enum-ciphers -p 443 myhostname.tld
Il devrait générer 'SSLv3: No supported ciphers found
'. Ajustez pour votre nom d'hôte/port.
Utilisation de cipherscan . Cloner/télécharger le binaire et l'exécuter:
./cipherscan myhostname.tld
Il devrait ne pas répertorier quoi que ce soit avec SSLv3 dans la colonne "protocoles".
Ouvrez about:config
, trouvez security.tls.version.min
et définissez la valeur sur 1
. Puis redémarrez votre navigateur pour supprimer toutes les connexions SSL ouvertes.
Firefox à partir de la version 34 désactivera SSLv3 par défaut et ne nécessitera donc aucune action ( source ). Cependant, au moment de la rédaction de cet article, 33 articles sont tout juste publiés et 34 sont prévus pour le 25 novembre.
Editez le fichier /usr/share/applications/google-chrome.desktop
, par exemple.
Sudo nano /usr/share/applications/google-chrome.desktop
Editez toutes les lignes en commençant par Exec=
pour inclure --ssl-version-min=tls1
.
Par exemple. une ligne comme
Exec=/usr/bin/google-chrome-stable %U
devient
Exec=/usr/bin/google-chrome-stable --ssl-version-min=tls1 %U
Assurez-vous ensuite de fermer complètement le navigateur (les applications Chrome permettent peut-être de garder votre navigateur actif en arrière-plan!).
Remarque: vous devrez peut-être répéter cette opération à chaque mise à jour du paquet google-chrome, en écrasant ce fichier de lancement .desktop
. Un navigateur Google Chrome ou Chromium avec SSLv3 désactivé par défaut n'est pas encore annoncé au moment de la rédaction.
Si vous utilisez un serveur Web Apache qui autorise actuellement SSLv3, vous devrez modifier la configuration Apache. Sur les systèmes Debian et Ubuntu, le fichier est /etc/Apache2/mods-available/ssl.conf . Sur CentOS et Fedora, le fichier est /etc/httpd/conf.d/ssl.conf . Vous devrez ajouter la ligne suivante à votre configuration Apache avec d'autres directives SSL.
SSLProtocol All -SSLv2 -SSLv3
Cela autorisera tous les protocoles sauf SSLv2 et SSLv3.
Pendant que vous y êtes, vous voudrez peut-être envisager d’améliorer la configuration de ciphersuite pour votre serveur Web, comme expliqué à la section Guide du serveur TLS de Mozilla . Ajouter par exemple:
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on
SSLCompression off
# Read up on HSTS before you enable it (recommended)
# Header add Strict-Transport-Security "max-age=15768000"
Puis vérifiez si la nouvelle configuration est correcte (pas de fautes de frappe, etc.):
Sudo Apache2ctl configtest
Et redémarrez le serveur, par exemple.
Sudo service Apache2 restart
Sur CentOS et Fedora:
systemctl restart httpd
Plus d'infos: documentation Apache
Maintenant, testez-le: si votre site est publiquement disponible, testez-le avec outil Qualys ’SSL Labs .
Si vous utilisez Nginx, incluez simplement la ligne suivante dans votre configuration parmi les autres directives SSL:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Pendant que vous y êtes, vous voudrez peut-être envisager d’améliorer la configuration de ciphersuite pour votre serveur Web, comme expliqué à la section Guide du serveur TLS de Mozilla . Ajouter par exemple:
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
# Read up on HSTS before you enable it (recommended)
# add_header Strict-Transport-Security max-age=15768000;
Et redémarrez le serveur, par exemple.
Sudo service nginx restart
Référence: documentation Nginx
Maintenant, testez-le: si votre site est publiquement disponible, testez-le avec outil SSL Labs de Qualys .
Les versions de Lighttpd> 1.4.28 prennent en charge une option de configuration permettant de désactiver SSLv2 et v3. Les versions de Lighttpd antérieures à 1.4.28 vous permettent de désactiver SSLv2 UNIQUEMENT. Veuillez noter que Ubuntu 12.04 LTS et les versions antérieures s'installent au mieux, lighttpd v1.4.28 et, par conséquent, un correctif simple n'est pas disponible pour ces distributions. Ce correctif ne doit donc être utilisé que pour les versions d'Ubuntu supérieures. à 12.04.
Pour Ubuntu version 12.04 ou Debian 6, un paquet lighttpd mis à jour est disponible à partir du référentiel openSUSE: http://download.opensuse.org/repositories/server:/http/Debian_6.
Le paquet est destiné à Debian 6 (squeeze) mais fonctionne également à 12.04 (précis)
Editez votre /etc/lighttpd/lighttpd.conf
pour ajouter les lignes suivantes après la directive ssl.engine = "enable"
ssl.use-sslv2 = "disable"
ssl.use-sslv3 = "disable"
Ensuite, vous devez redémarrer le service lighttpd avec un Sudo service lighttpd restart
et effectuer un test de prise de contact ssl3 comme décrit dans les sections précédentes pour vous assurer que la modification a été implémentée avec succès.
Tiré de http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_SSL .
Pour le "SSL opportuniste" (la politique de chiffrement n'est pas appliquée et le langage clair est également acceptable), vous n'avez rien à changer. Même si SSLv2 est meilleur que tout simplement, si vous avez besoin de sécuriser votre serveur, vous devriez quand même utiliser le mode "SSL obligatoire".
Pour que le mode 'SSL obligatoire' soit déjà configuré, ajoutez/modifiez simplement le paramètre smtpd_tls_mandatory_protocols pour les connexions entrantes et smtp_tls_mandatory_protocols pour les connexions sortantes:
smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
smtp_tls_mandatory_protocols=!SSLv2,!SSLv3
Si vous souhaitez également désactiver SSLv3 pour le chiffrement opportuniste (même s'il est inutile comme expliqué ci-dessus), procédez comme suit:
smtpd_tls_protocols=!SSLv2,!SSLv3
smtp_tls_protocols=!SSLv2,!SSLv3
et redémarrez Postfix:
Sudo service postfix restart
(édition non vérifiée par un utilisateur anonyme, je ne suis pas à l'aise avec Sendmail, veuillez vérifier.)
Ces options sont configurées dans la section LOCAL_CONFIG
de votre sendmail.mc
LOCAL_CONFIG
O CipherList=HIGH
O ServerSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3 +SSL_OP_CIPHER_SERVER_PREFERENCE
O ClientSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3
Dans Dovecot v2.1 +, ajoutez ce qui suit à votre /etc/dovecot/local.conf
(ou à un nouveau fichier dans /etc/dovecot/conf.d
):
ssl_protocols = !SSLv2 !SSLv3
et redémarrez Dovecot:
Sudo service dovecot restart
Pour les versions plus anciennes, vous devrez corriger le code source .
Courier-imap autorise SSLv3 par défaut sur Ubuntu 12.04 et autres. Vous devez le désactiver et utiliser STARTTLS à la place pour forcer TLS. Editez votre fichier de configuration /etc/courier/imapd-ssl
pour refléter les modifications suivantes
IMAPDSSLSTART=NO
IMAPDSTARTTLS=YES
IMAP_TLS_REQUIRED=1
TLS_PROTOCOL=TLS1
TLS_STARTTLS_PROTOCOL=TLS1
TLS_CIPHER_LIST="<take those from the Mozilla TLS Server guide!>"
SSL est pris en charge dans HAProxy> = 1.5.
Editez le fichier /etc/haproxy.cfg
et trouvez votre ligne bind
name__. Ajoutez no-sslv3
. Par exemple:
bind :443 ssl crt <crt> ciphers <ciphers> no-sslv3
Référence: Documentation HAProxy
Semble ne pas être affecté ( source ).
OpenVPN utilise TLSv1.0 ou (avec> = 2.3.3) éventuellement TLSv1.2 et n'est donc pas impacté par POODLE.
Puppet utilise SSL sur HTTPS mais il n'est pas utilisé par les clients du "navigateur", mais par les agents de Puppet qui ne sont pas vulnérables au vecteur d'attaque affiché. Cependant, il est préférable de désactiver SSLv3.
Ma recommandation est d'utiliser le module de marionnettes stephenrjohnson/puppetmodule pour configurer votre maître de marionnettes dans lequel j'ai tué SSLv il y a quelque temps.
Peut-être pas spécifique à Ubuntu, mais pour contourner la vulnérabilité Poodle dans Node.js, vous pouvez définir le secureOptions
à require('constants').SSL_OP_NO_SSLv3
lorsque vous créez un serveur https ou tls.
Voir https://Gist.github.com/3rd-Eden/715522f6950044da45d8 pour plus d'informations.
Le "correctif" pour les messageries désactive les niveaux 1.1 et 1.2. Il ne semble pas y avoir de moyen de faire fonctionner un service de messagerie avec une version 1.1 ou supérieure. Un scan PCI sur votre serveur peut revenir avec la recommandation suivante:
Configurez les serveurs SSL/TLS pour qu'ils n'utilisent que TLS 1.1 ou TLS 1.2 s'ils sont pris en charge. Configurez les serveurs SSL/TLS pour ne prendre en charge que les suites de chiffrement n'utilisant pas de chiffrements en bloc.