88 votos

Heartbleed: ¿cómo de forma fiable y portable comprobar la versión de OpenSSL?

Yo estaba buscando en un fiable y portátil para comprobar la versión de OpenSSL en GNU/Linux y otros sistemas, así que los usuarios pueden descubrir fácilmente si se debe actualizar sus SSL debido a la Heartbleed bug.

Pensé que sería fácil, pero rápidamente me encontré con un problema en Ubuntu 12.04 LTS con la última OpenSSL 1.0.1 g:

openssl versión-un

Yo estaba esperando a ver la versión completa, pero en lugar de eso tengo esto:

OpenSSL 1.0.1 14 Mar 2012
construido en: Tue Jun 4 07:26:06 UTC 2013
plataforma: [...]

Para mi desagradable sorpresa, la versión de la carta de no show. No f, g, sólo "1.0.1" y eso es todo. La lista de las fechas no ayudar en el descubrimiento de un (no)versión vulnerable.

La diferencia entre la versión 1.0.1 (a-f) y de la versión 1.0.1 g es crucial.

Preguntas:

  • Lo que es una manera confiable para comprobar la versión, preferiblemente de la cruz distro?
  • ¿Por qué no la versión de la carta que se muestra en el primer lugar? Yo era incapaz de poner a prueba esta en otra cosa, pero Ubuntu 12.04 LTS.

Otros son informar de este comportamiento. Un par de ejemplos:

Algunos (distro) sugerencias de rodadura en:

  • Ubuntu y Debian: apt-cache policy openssl y apt-cache policy libssl1.0.0. Comparar los números de versión de los paquetes aquí: http://www.ubuntu.com/usn/usn-2165-1/
  • Fedora 20: yum info openssl (gracias @znmeb en twitter) y yum info openssl-libs

La comprobación de si una versión anterior de OpenSSL es todavía residente:

Resulta que al actualizar el paquete OpenSSL en Ubuntu y Debian no siempre es suficiente. También debe actualizar el libssl1.0.0 paquete y, a continuación, compruebe si openssl version -a indica built on: Mon Apr 7 20:33:29 UTC 2014.

66voto

HopelessN00b Puntos 38607

Basado en la fecha indicada en su versión de OpenSSL, parece que están viendo la versión completa se muestra allí.

Open SSL 1.0.1 fue lanzado el 14 de Marzo de 2012. 1.0.1 una fue lanzado el 19 de abril de 2012.

Así que, voy a seguir adelante y afirmar que la openssl version -a es la adecuada, de la cruz-distro forma de mostrar la versión completa de OpenSSL instalado en el sistema. Parece que funciona para todas las distribuciones de Linux tengo acceso a, y es el método sugerido en el help.ubuntu.com OpenSSL documentación, así. Ubuntu 12.04 LTS entregan con vainilla OpenSSL v1.0.1, que es la versión que se ve como una versión abreviada, en cuenta de no tener una carta siguiente.

Habiendo dicho eso, parece que hay un gran error en Ubuntu (o la forma en que el paquete OpenSSL), en que openssl version -a sigue devolver el original de la versión 1.0.1 de 14 de Marzo de 2012, independientemente de si o no OpenSSL ha sido actualizado a cualquiera de las versiones más recientes. Y, como con la mayoría de las cosas cuando llueve se vierte.

Ubuntu no es la única distro en el hábito de la adaptando cambios actualizaciones en OpenSSL (o de otros paquetes), el evaluador de confiar en el upstream y actualizaciones de la numeración de la versión que todo el mundo reconoce. En el caso de OpenSSL, donde la letra los números de versión de representar sólo la corrección de errores y actualizaciones de seguridad, esto parece casi incomprensible, pero me han informado que esto puede ser debido a la FIPS-validado plugin de las principales distribuciones de Linux barco empaquetado con OpenSSL. Debido a los requisitos de alrededor de revalidación que desencadenan debido a cualquier cambio, incluso los cambios que se conectan los agujeros de seguridad, que es la versión bloqueada.

Por ejemplo, en Debian, la versión fija muestra un número de versión de 1.0.1e-2+deb7u5 en lugar de la versión original de 1.0.1g.

Como resultado, en este momento, no hay ningún confiable, portátil para comprobar SSL versiones a través de las distribuciones de Linux, porque todos tienen que utilizar sus propios puestos de parches y actualizaciones, con diferentes versiones esquemas de numeración. Usted tendrá que buscar el fijo número de versión para cada distribución de Linux que se ejecuta, y de verificación de la instalación de OpenSSL versión en contra de que la distribución de la versión específica de numeración para determinar si los servidores se están ejecutando una versión vulnerable o no.

18voto

Royce Williams Puntos 750

Si quieres algo de verdad de la multiplataforma, comprobar la vulnerabilidad de sí mismo, en lugar de confiar en los números de versión.

Usted podría tener código que informa de un número de versión que se sabe que es vulnerable, pero el código real no es vulnerable. Y a la inversa -- silenciosamente código vulnerable -- podría ser incluso peor!

Muchos de los vendedores que paquete open-source productos como OpenSSL y OpenSSH selectivamente reconversión urgente correcciones a una versión anterior de código, con el fin de mantener la API de estabilidad y previsibilidad. Esto es especialmente cierto para el "largo plazo de la liberación" y un aparato de plataformas.

Pero los vendedores que hacerlo en silencio (sin la adición de su propia versión de la cadena de sufijo) corren el riesgo de provocar falsos positivos en los análisis de vulnerabilidad (y confundir a los usuarios). Para hacer de este transparentes y verificables, algunos proveedores de anexar sus propias cadenas para las principales versiones de los paquetes. Ambos Debian (OpenSSL) y FreeBSD (en OpenSSH, a través de la VersionAddendum sshd_config directiva) a veces hacer esto.

Los vendedores que no pueden hacerlo son, probablemente, haciendo así que para minimizar el riesgo de rotura debido a las muchas formas, directas e indirectas que otros programas de comprobar los números de versión.

Así que puede tener este aspecto:

$ 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

... a pesar de que ha sido parcheado:

$ 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

Con cosas como esta en juego, es mejor si usted no confía en el número de versión.

14voto

Schof Puntos 859

Por desgracia, no estoy seguro de que no es una multiplataforma de la manera de hacer esto. Como les comente en un blog, la versión de OpenSSL se muestra en Ubuntu 12.04 SIGUE siendo 1.0.1 después de actualizar a una versión fija.

Para Ubuntu 12.04 SÓLO usted puede determinar si usted ha sido actualizado si todas las siguientes son verdaderas:

  1. dpkg -s openssl | grep Version muestra la versión 1.0.1-4ubuntu5.12 o más tarde.
  2. dpkg -s libssl1.0.0 | grep Version muestra la versión 1.0.1-4ubuntu5.12 o más tarde.
  3. openssl version -a muestra un "basado en la" fecha de 7 de abril de 2014 o más tarde.

Gracias a @danny para la información adicional.

4voto

waTeim Puntos 131

Dar el siguiente intento. Se va a extraer todas las cadenas de la crypto biblioteca que ssh está vinculado a la contra. Se produce más de una línea de salida, pero si es necesario, se podría convertir en 1 línea.

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

produce

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

por ejemplo, en Gentoo antes de emerger

[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

el comando anterior se traduce en

...
OpenSSL 1.0.1c 10 May 2012

después de

...
OpenSSL 1.0.1f 6 Jan 2014

Ay, todavía no g.

2voto

Justin Goldberg Puntos 36

Hacer cualquiera de estas secuencias de comandos de prueba de todos los servicios, o sólo la prueba de HTTPS? AFAIK, PostgreSQL es vulnerable, pero eso es sólo un rumor hasta que un in-the-wild de las superficies de ataque.

Hay un metasploit secuencia de comandos disponibles para su uso.

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

Puede escribir esto (probado con GnuWin32 OpenSSL versión binaria 1.0.1.6, de fecha 2014-01-14), o simplemente utilizar la secuencia de comandos en el comentario a continuación de este. Es más preciso y más fácil!

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

Una vez conectado, el tipo B, y verás que en un vulnerables de host y usted no será desconectado:

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

Usted recibirá un latido respuesta similar a esta.

En un parcheado de host, usted verá una respuesta similar a la de abajo y usted será desconectado:

Introduzca 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

Fuente:

También hay estas herramientas:

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: