88 votes

Heartbleed : comment vérifier de manière fiable et portative la version d'OpenSSL ?

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 découvrir s'ils doivent mettre à jour leur SSL à cause du bogue Heartbleed.

Je pensais que ce serait facile, mais j'ai rapidement rencontré un problème sur Ubuntu 12.04 LTS avec la dernière version d'OpenSSL 1.0.1g :

openssl version -a

Je m'attendais à voir une version complète, mais à la place j'ai eu ça :

OpenSSL 1.0.1 14 Mar 2012
built on: Tue Jun  4 07:26:06 UTC 2013
platform: \[...\]

À ma désagréable surprise, la lettre de version n'apparaît pas. Pas de f, pas de g, juste "1.0.1" et c'est tout. Les dates indiquées n'aident pas non plus à découvrir une version (non) vulnérable.

La différence entre 1.0.1 (a-f) et 1.0.1g est cruciale.

Questions :

  • Quel est le moyen le plus fiable de vérifier la version, de préférence à travers une distro ?
  • Pourquoi la lettre de version n'est-elle pas affichée en premier lieu ? Je n'ai pas pu tester cela sur autre chose qu'Ubuntu 12.04 LTS.

D'autres personnes ont également signalé ce comportement. Quelques exemples :

Quelques suggestions (spécifiques à la distribution) nous parviennent :

  • Ubuntu et Debian : apt-cache policy openssl y apt-cache policy libssl1.0.0 . Comparez les numéros de version aux paquets ici : http://www.ubuntu.com/usn/usn-2165-1/
  • Fedora 20 : yum info openssl (merci @znmeb sur twitter) et yum info openssl-libs

Vérifier si une ancienne version d'OpenSSL est toujours présente :

Il s'avère que la mise à jour du paquet OpenSSL sur Ubuntu et Debian n'est pas toujours suffisante. Vous devez également mettre à jour le paquet libssl1.0.0, et -ensuite- vérifier si openssl version -a indique built on: Mon Apr 7 20:33:29 UTC 2014 .

67voto

HopelessN00b Points 53075

D'après la date affichée par votre version d'OpenSSL, il semble que vous sont voir la version complète qui y est affichée.

Open SSL 1.0.1 a été publié le 14 mars 2012. . La version 1.0.1a est sortie le 19 avril 2012.

Donc, je vais aller de l'avant et affirmer que openssl version -a est la façon correcte et multi-distro d'afficher la version complète d'OpenSSL qui est installée sur le système. Cela semble fonctionner pour toutes les distributions Linux auxquelles j'ai accès, et est la méthode suggérée dans la documentation OpenSSL de help.ubuntu.com, ainsi que . Ubuntu LTS 12.04 est livré avec la version vanille d'OpenSSL v1.0.1, qui est la version qui ressemble à une version abrégée, du fait qu'elle n'est pas suivie d'une lettre.

Cela dit, il semble qu'il y ait une principal bogue dans Ubuntu (ou la façon dont ils empaquettent OpenSSL), en ce que openssl version -a continue de renvoyer la version originale 1.0.1 du 14 mars 2012, qu'OpenSSL ait ou non été mis à jour vers l'une des versions les plus récentes. Et, comme pour la plupart des choses, quand il pleut, il pleut à verse.

Ubuntu n'est pas la seule grande distribution qui a l'habitude de reporter les mises à jour dans OpenSSL (ou d'autres paquets), plutôt que de s'appuyer sur les mises à jour en amont et la numérotation des versions que tout le monde reconnaît. Dans le cas d'OpenSSL, où les numéros de version sous forme de lettres ne représentent que les corrections de bogues et les mises à jour de sécurité, cela semble presque incompréhensible, mais j'ai été informé que cela peut être dû au fait que Validé par FIPS Les principales distributions Linux sont livrées avec OpenSSL. En raison des exigences de revalidation qui se déclenchent à la suite de tout changement, même ceux qui comblent les failles de sécurité, la version est verrouillée.

Par exemple, sur Debian, la version fixe affiche un numéro de version de 1.0.1e-2+deb7u5 au lieu de la version amont de 1.0.1g .

Par conséquent, à l'heure actuelle, il n'existe pas de moyen fiable et portable de vérifier les versions de SSL dans toutes les distributions de Linux car ils utilisent tous leurs propres correctifs et mises à jour avec des systèmes de numérotation de version différents. Vous devrez rechercher le numéro de version fixe pour chaque distribution de Linux que vous utilisez, et vérifier la version d'OpenSSL installée par rapport à la numérotation de version spécifique de cette distribution pour déterminer si vos serveurs utilisent une version vulnérable ou non.

18voto

nikhilk Points 3770

Si vous voulez quelque chose de vraiment multiplateforme, vérifier la vulnérabilité elle-même plutôt que de s'appuyer sur les numéros de version.

Vous pouvez avoir un code qui rapporte un numéro de version connu pour être vulnérable, mais le code actuel n'est pas vulnérable . Et l'inverse - un code vulnérable en silence - pourrait être encore pire !

De nombreux fournisseurs qui regroupent des produits open-source tels qu'OpenSSL et OpenSSH intégreront de manière sélective des correctifs urgents à une ancienne version du code, afin de maintenir la stabilité et la prévisibilité de l'API. C'est particulièrement vrai pour les plates-formes de type "version à long terme" et les appareils.

Mais les fournisseurs qui le font de manière silencieuse (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 d'embrouiller les utilisateurs). Ainsi, pour rendre cette opération transparente et vérifiable, certains fournisseurs ajoutent leur propre chaîne de caractères à la version principale du paquet. Debian (OpenSSL) et FreeBSD (dans OpenSSH, via la balise VersionAddendum sshd_config) le font parfois.

Les fournisseurs qui ne le font pas le font probablement pour minimiser les risques de casse dus aux nombreuses façons directes et indirectes dont les autres programmes vérifient les numéros de version.

Cela peut donc ressembler à ça :

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS"

$ openssl version
OpenSSL 1.0.1 14 Mar 2012

... même si il a été corrigé :

$ dpkg -l openssl | grep openssl
ii  openssl  1.0.1-4ubuntu5.12  [truncated]

$ ls -la `which openssl`
-rwxr-xr-x 1 root root 513208 Apr  7 12:37 /usr/bin/openssl

$ md5sum /usr/bin/openssl
ea2a858ab594905beb8088c7c2b84748  /usr/bin/openssl

Avec des choses comme ça en jeu, il est préférable que vous ne vous fiez pas au numéro de version.

14voto

Schof Points 952

Malheureusement, je ne suis pas sûr qu'il y ait es un moyen multiplateforme de le faire. Comme je l'explique dans un billet de blog la version d'OpenSSL affichée sur Ubuntu 12.04 RESTE 1.0.1 après la mise à jour vers une version corrigée.

Pour Ubuntu 12.04 UNIQUEMENT, vous pouvez savoir si vous avez été mis à jour si tous les éléments ci-dessous sont vrais :

  1. dpkg -s openssl | grep Version montre la version 1.0.1-4ubuntu5.12 ou ultérieure.
  2. dpkg -s libssl1.0.0 | grep Version montre la version 1.0.1-4ubuntu5.12 ou ultérieure.
  3. openssl version -a indique que la date de construction est le 7 avril 2014 ou plus tard.

Merci à @danny pour les informations complémentaires.

4voto

ssarabando Points 1915

Essayez ce qui suit. Il extraira toutes les chaînes de caractères du fichier crypto avec laquelle ssh est lié. Il produit plus d'une ligne de sortie, mais si nécessaire, il peut être converti en une seule ligne.

ldd `which ssh` | awk '/\// { print $3 }' | grep crypto | xargs strings  | grep OpenSSL

produit

OpenSSLDie
DSA_OpenSSL
...
MD4 part of OpenSSL 1.0.1f 6 Jan 2014 
MD5 part of OpenSSL 1.0.1f 6 Jan 2014
... 
etc

par exemple, sur Gentoo avant emerge

[ebuild     U  ] dev-libs/openssl-1.0.1f [1.0.1c] USE="bindist (sse2) tls-heartbeat%* zlib -gmp -kerberos -rfc3779 -static-libs {-test} -vanilla" 4,404 kB

la commande ci-dessus donne comme résultat

...
OpenSSL 1.0.1c 10 May 2012

après

...
OpenSSL 1.0.1f 6 Jan 2014

Aïe, toujours pas de G.

2voto

Justin Goldberg Points 173

Est-ce que l'un de ces scripts teste tous les services, ou est-ce qu'ils testent seulement HTTPS ? AFAIK , PostgreSQL est vulnérable, mais ce n'est qu'une rumeur jusqu'à ce qu'une attaque en règle fasse surface.

Hay una metasploit script disponible pour l'utilisation.

https://github.com/rapid7/metasploit-framework/commit/dd69a9e5dd321915e07d8e3dc8fe60d3c54f551a

Vous pouvez taper ceci (testé avec GnuWin32 Version binaire OpenSSL 1.0.1.6, datée du 2014-01-14), ou simplement utiliser le script dans le commentaire sous celui-ci. C'est plus précis et plus simple !

s_client -connect a23-75-248-141.deploy.static.akamaitechnologies.com:443 -debug -state

Une fois connecté, tapez B et vous verrez sur un hôte vulnérable et vous ne serez pas déconnecté :

B

HEARTBEATING
write to 0x801c17160 [0x801cbc003] (66 bytes => 66 (0x42))
0000 - 18 03 03 00 3d 8f 6f 3c-52 11 83 20 9c a2 c0 49   ....=.o 5 (0x5))
0000 - 18 03 03 00 3d                                    ....=
read from 0x801c17160 [0x801cb7008] (61 bytes => 61 (0x3D))
0000 - 05 4d f5 c0 db 96 d1 f5-c7 07 e5 17 1f 3b 48 34   .M...........;H4
0010 - 6e 11 9d ba 10 0c 3a 34-eb 7b a5 7c c4 b6 c0 c0   n.....:4.{.|....
0020 - b0 75 0e fe b7 fa 9e 04-e9 4e 4a 7d 51 d3 11 1f   .u.......NJ}Q...
0030 - e2 23 16 77 cb a6 e1 8e-77 84 2b f8 7f            .#.w....w.+..
read R BLOCK

Vous obtiendrez une réponse du cœur qui ressemble à celle-ci.

Sur un hôte patché, vous verrez une réponse similaire à celle ci-dessous et vous serez déconnecté :

Entrer B

HEARTBEATING
write to 0x801818160 [0x8019d5803] (101 bytes => 101 (0x65))
0000 - 18 03 03 00 60 9c a3 1e-fc 3b 3f 1f 0e 3a fe 4c   ....`....;?..:.L
0010 - a9 33 08 cc 3d 43 54 75-44 7d 2c 7b f3 47 b9 56   .3..=CTuD},{.G.V
0020 - 89 37 c1 43 1c 80 7b 87-66 ff cb 55 5f 8d 1a 95   .7.C..{.f..U_...
0030 - 1b 4c 65 14 21 a1 95 ac-7a 70 79 fc cc a0 cf 51   .Le.!...zpy....Q
0040 - 0f 7e c5 56 14 c8 37 c1-40 0b b8 cb 43 96 8a e6   .~.V..7.@...C...
0050 - 21 42 64 58 62 15 fb 51-82 e6 7f ef 21 1b 6f 87   !BdXb..Q....!.o.
0060 - b9 c2 04 c8 47                                    ....G

Source :

Il y a aussi ces outils :

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X