Je cherchais un moyen fiable et portable de vérifier la version d'OpenSSL sur GNU / Linux et d'autres systèmes, afin que les utilisateurs puissent facilement savoir s'ils devaient mettre à niveau leur SSL à cause du bogue Heartbleed.
Je pensais que ce serait facile, mais j'ai rapidement rencontré un problème sous Ubuntu 12.04 LTS avec le dernier OpenSSL 1.0.1g:
version openssl -a
Je m'attendais à voir une version complète, mais à la place, j'ai eu ceci:
OpenSSL 1.0.1 14 mars 2012 construit le: mar. juin 4 07:26:06 UTC 2013 Plate-forme: [...]
A ma désagréable surprise, la lettre de version ne s'affiche pas. Non f, non g, juste "1.0.1" et c'est tout. Les dates indiquées ne permettent pas non plus de découvrir une version (non) vulnérable.
La différence entre 1.0.1 (af) et 1.0.1g est cruciale.
Des questions:
- Quel est un moyen fiable de vérifier la version, de préférence une distribution croisée?
- Pourquoi la lettre de version n'apparaît-elle pas en premier lieu? Je n'ai pas pu tester cela sur autre chose que Ubuntu 12.04 LTS.
D'autres signalent également ce comportement. Quelques exemples:
- https://twitter.com/orblivion/status/453323034955223040
- https://twitter.com/axiomsofchoice/status/453309436816535554
Quelques suggestions (spécifiques à la distribution):
- Ubuntu et Debian:
apt-cache policy openssl
etapt-cache policy libssl1.0.0
. Comparez les numéros de version aux packages ici: http://www.ubuntu.com/usn/usn-2165-1/ - Fedora 20:
yum info openssl
(merci @znmeb sur twitter) etyum info openssl-libs
Vérifier si une ancienne version d'OpenSSL est toujours résidente:
- Ce n'est pas complètement fiable, mais vous pouvez essayer
lsof -n | grep ssl | grep DEL
. Voir Heartbleed: comment vérifier de manière fiable et portable la version OpenSSL? pourquoi cela peut ne pas fonctionner pour vous.
Il s'avère que la mise à jour du paquet OpenSSL sur Ubuntu et Debian ne suffit pas toujours. Vous devez également mettre à jour le paquet libssl1.0.0, et -then- vérifier si openssl version -a
indique built on: Mon Apr 7 20:33:29 UTC 2014
.
[root@null~]# openssl version -a OpenSSL 1.0.1e-fips 11 Feb 2013
apt-cache policy openssl
et il a répondu avec:Installed: 1.0.1-4ubuntu5.12
qui est la 1.0.1g récemment publiée par Ubuntu pour 12.04 LTS. Je me suis déconnecté puis je suis rentré. Y a-t-il autre chose que je puisse faire pour vérifier?Réponses:
Sur la base de la date affichée par votre version de OpenSSL, il semble que vous êtes voyez la version complète , il affiche.
Open SSL 1.0.1 est sorti le 14 mars 2012 . La version 1.0.1a a été publiée le 19 avril 2012.
Donc, je vais aller de l'avant et affirmer que
openssl version -a
c'est le moyen approprié, pour la distribution croisée, d'afficher la version complète d'OpenSSL installée sur le système. Cela semble fonctionner pour toutes les distributions Linux auxquelles j'ai accès, et c'est aussi la méthode suggérée dans la documentation helpSS.ubuntu.com OpenSSL . Ubuntu LTS 12.04 est livré avec la version vanille OpenSSL v1.0.1, qui est une version qui ressemble à une version abrégée, car aucune lettre ne la suit.Cela dit, il semble qu’un bogue majeur se soit produit dans Ubuntu (ou dans la façon dont ils conditionnent OpenSSL), qui
openssl version -a
continue de renvoyer la version 1.0.1 originale à partir du 14 mars 2012, que OpenSSL ait été mis à niveau ou non. des nouvelles versions. Et comme pour la plupart des choses quand il pleut, ça déverse.Ubuntu n'est pas la seule distribution majeure à prendre l'habitude de rapporter les mises à jour dans OpenSSL (ou d'autres packages), mais plutôt de s'appuyer sur les mises à jour en amont et la numérotation de version que tout le monde reconnaît. Dans le cas d’OpenSSL, où les numéros de version des lettres ne représentent que des correctifs de bogues et des mises à jour de sécurité, cela semble presque incompréhensible, mais j’ai été informé que cela était peut-être dû au plugin validé par la FIPS et aux principales distributions Linux livrées avec OpenSSL. En raison des exigences relatives à la revalidation qui se déclenchent en raison de toute modification, même les modifications qui bouchent les failles de sécurité, il est verrouillé par la version.
Par exemple, sous Debian, la version corrigée affiche un numéro de version de
1.0.1e-2+deb7u5
au lieu de la version en amont de1.0.1g
.Par conséquent, il n’existe actuellement aucun moyen fiable et portable de vérifier les versions SSL sur les distributions Linux , car elles utilisent toutes leurs propres correctifs et mises à jour avec des schémas de numérotation de version différents. Vous devrez rechercher le numéro de version fixe pour chaque distribution de Linux que vous exécutez et vérifier la version OpenSSL installée par rapport à la numérotation de version spécifique de cette distribution pour déterminer si vos serveurs exécutent une version vulnérable ou non.
la source
openssl version -a
ne s'agit pas d'une méthode portable (du moins, pas portable vers Ubuntu). J'ai vérifiéapt-cache policy openssl
et il a répondu avec:Installed: 1.0.1-4ubuntu5.12
qui est la 1.0.1g que vient de publier Ubuntu pour 12.04 LTS. Je me suis déconnecté et je suis revenu avant de vérifier.After the release of OpenSSL 1.0.0 the versioning scheme changed. Letter releases (e.g. 1.0.1a) can only contain bug and security fixes and no new features.
Donc, rien n'est gagné en abandonnant le schéma de versioning en amont; Le portage des mises à jour est essentiellement identique à l'utilisation de la version mise à jour, car la mise à jour inclut uniquement des correctifs de sécurité et des bogues. Cela confond les choses et ne nous laisse aucun moyen de vérifier de manière portable la version d'OpenSSL sur des distributions Linux.Si vous voulez quelque chose de vraiment multi-plateforme, vérifiez la vulnérabilité elle-même plutôt que de vous fier aux numéros de version.
Votre code peut indiquer un numéro de version réputé vulnérable, mais le code lui-même n'est pas vulnérable . Et l'inverse - un code silencieusement vulnérable - pourrait être encore pire!
De nombreux fournisseurs qui intègrent des produits open-source tels que OpenSSL et OpenSSH intégreront de manière sélective des correctifs urgents à une version antérieure du code, afin de maintenir la stabilité et la prévisibilité de l'API. Cela est particulièrement vrai pour les plates-formes "Version à long terme" et les appliances.
Mais les fournisseurs qui le font en silence (sans ajouter leur propre suffixe de chaîne de version) courent le risque de déclencher des faux positifs dans les scanners de vulnérabilité (et de créer de la confusion chez les utilisateurs). Donc, pour rendre cela transparent et vérifiable, certains fournisseurs ajoutent leurs propres chaînes à la version principale du paquet. C'est
VersionAddendum
ce que font parfois Debian (OpenSSL) et FreeBSD (sous OpenSSH, via la directive sshd_config).Les fournisseurs qui ne le font pas le font probablement pour minimiser les risques de casse en raison des nombreuses méthodes directes et indirectes utilisées par les autres programmes pour vérifier les numéros de version.
Donc ça peut ressembler à ça:
... même si ça a été corrigé :
Avec de telles choses en jeu, vous feriez mieux de ne pas faire confiance au numéro de version.
la source
Malheureusement, je ne suis pas sûr qu'il existe un moyen multi-plateforme de le faire. Comme je le dis dans un billet de blog , la version d'OpenSSL affichée sur Ubuntu 12.04 REMAINS 1.0.1 après la mise à niveau vers une version corrigée.
Pour Ubuntu 12.04 SEULEMENT, vous pouvez dire si vous avez été mis à jour si tous les éléments ci-dessous sont vrais:
dpkg -s openssl | grep Version
montre la version 1.0.1-4ubuntu5.12 ou ultérieure.dpkg -s libssl1.0.0 | grep Version
montre la version 1.0.1-4ubuntu5.12 ou ultérieure.openssl version -a
affiche une date de "construction" du 7 avril 2014 ou plus tard.Merci à @danny pour l'info supplémentaire.
la source
1.0.1-4ubuntu5.12
est UNIQUEMENT pour Ubuntu 12.04 LTS. Si vous êtes sur Ubuntu 12.10, vous devriez voir au moins la version1.0.1c-3ubuntu2.7
et si vous êtes sur 13.10, alors ce devrait être au moins la version1.0.1e-3ubuntu1.2
, selon la source: ubuntu.com/usn/usn-2165-1libssl1.0.0
explicitement sur Ubuntu. Si vous voyez une date de création antérieure au 7 avril 2014, même si la version openssl est correcte (1.0.1-4ubuntu5.12
pour Ubuntu 12.04), vous êtes probablement toujours vulnérable.openssl version -a
n’aura peut-être pas besoin de la date de compilation du 7 avril, car le correctif est transféré dans les versions antérieures.Essayez ce qui suit. Il va extraire toutes les chaînes de la Crypto bibliothèque ssh est lié avec . Il produit plus d'une ligne de sortie, mais peut éventuellement être converti en une ligne.
produit
par exemple sur Gentoo avant d'émerger
la commande ci-dessus a pour résultat
après
Ouch, toujours pas g.
la source
[...] part of OpenSSL 1.0.1 14 Mar 2012
, de la même manière que leopenssl version -a
fait. C'est un truc qui peut marcher dans d'autres cas!Certains de ces scripts testent-ils tous les services ou ne testent-ils que HTTPS ? Autant que je sache , PostgreSQL est vulnérable, mais ce n’est qu’une rumeur jusqu’à ce que survienne une attaque sauvage.
Un script metasploit est disponible.
Vous pouvez taper ceci (testé avec la version binaire GnuWin32 OpenSSL 1.0.1.6, datée du 14/01/2014), ou simplement utiliser le script dans le commentaire situé en dessous de celui-ci. C'est plus précis et plus simple!
Une fois connecté, tapez B et vous verrez sur un hôte vulnérable et vous ne serez pas déconnecté:
Vous obtiendrez une réponse de pulsation cardiaque semblable à celle-ci.
Sur un hôte corrigé, vous verrez une réponse semblable à celle ci-dessous et vous serez déconnecté:
Entrez B
La source:
Il y a aussi ces outils:
https://github.com/titanous/heartbleeder
http://filippo.io/Heartbleed/
https://github.com/musalbas/heartbleed-masstest
la source
Pour Ubuntu, vous pouvez utiliser:
Et comparez avec http://www.ubuntu.com/usn/usn-2165-1/ . Après un redémarrage (!!!), vous pouvez vérifier avec
http://possible.lv/tools/hb
.la source
Vous feriez mieux de mettre à jour OpenSSL OpenSSL 1.0.1j.
http://blog.vincosolution.com/2014/10/upgrade-openssl-1-0-1j-debianubuntu.html
la source
J'ai trouvé ce script dans devcentral :
Remplacez-le
example.com
par le nom ou l'adresse IP du serveur que vous souhaitez vérifier.Je reviendrai
"safe"
si votre serveur est ok ou"server extension "heartbeat" (id=15)"
sinon.Cela ne repose pas sur le numéro de version, mais sur la liste de l'extension du serveur qui cause le problème, il devrait donc être immunisé contre les shenanigans de la version de la bibliothèque.
La machine que vous utilisez
openssl s_client
sur doit être en utilisant OpenSSL 1.0.1 ou plus tard pour que cela fonctionne.la source
openssl s_client
DOIT utiliser OpenSSL 1.0.1 ou une version ultérieure pour que cela fonctionne. Si vous exécutez cette commande sur une machine avec 0.9.8 ou 1.0.0, il signalera toujours "Sécuritaire", même pour les serveurs vulnérables .