
Estaba buscando una forma confiable y portátil de verificar la versión de OpenSSL en GNU/Linux y otros sistemas, para que los usuarios puedan descubrir fácilmente si deben actualizar su SSL debido al error Heartbleed.
Pensé que sería fácil, pero rápidamente me encontré con un problema en Ubuntu 12.04 LTS con el último OpenSSL 1.0.1g:
versión openssl -a
Esperaba ver una versión completa, pero en lugar de eso obtuve esto:
OpenSSL 1.0.1 14 de marzo de 2012 construido en: martes 4 de junio 07:26:06 UTC 2013 plataforma: [...]
Para mi desagradable sorpresa, la letra de la versión no aparece. No hay f, no hay g, solo "1.0.1" y eso es todo. Las fechas enumeradas tampoco ayudan a descubrir una versión (no) vulnerable.
La diferencia entre 1.0.1 (af) y 1.0.1g es crucial.
Preguntas:
- ¿Cuál es una forma confiable de verificar la versión, preferiblemente entre distribuciones?
- ¿Por qué no aparece la letra de la versión en primer lugar? No pude probar esto en nada más que Ubuntu 12.04 LTS.
Otros también informan de este comportamiento. Algunos ejemplos:
- https://twitter.com/orblivion/status/453323034955223040
- https://twitter.com/axiomsofchoice/status/453309436816535554
Algunas sugerencias (específicas de la distribución) están llegando:
- Ubuntu y Debian:
apt-cache policy openssl
yapt-cache policy libssl1.0.0
. Compare los números de versión con los paquetes aquí:http://www.ubuntu.com/usn/usn-2165-1/ - Fedora 20:
yum info openssl
(gracias @znmeb en twitter) yyum info openssl-libs
Comprobar si aún existe una versión anterior de OpenSSL:
- No es completamente confiable, pero puedes intentarlo
lsof -n | grep ssl | grep DEL
. VerHeartbleed: ¿cómo comprobar de forma fiable y portátil la versión de OpenSSL?sobre por qué esto puede no funcionar para usted.
Resulta que actualizar el paquete OpenSSL en Ubuntu y Debian no siempre es suficiente. También debe actualizar el paquete libssl1.0.0 y, luego, verificar si openssl version -a
indica built on: Mon Apr 7 20:33:29 UTC 2014
.
Respuesta1
Según la fecha que muestra su versión de OpenSSL, parece quesonviendo la versión completa que se muestra allí.
Open SSL 1.0.1 se lanzó el 14 de marzo de 2012. 1.0.1a se lanzó el 19 de abril de 2012.
Entonces, continuaré y afirmaré que openssl version -a
esta es la forma adecuada, entre distribuciones, de mostrar la versión completa de OpenSSL que está instalada en el sistema. Parece funcionar para todas las distribuciones de Linux a las que tengo acceso, yes el método sugerido en la documentación de OpenSSL de help.ubuntu.com, también. Ubuntu LTS 12.04 se envió con Vanilla OpenSSL v1.0.1, que es la versión que parece una versión abreviada, debido a que no tiene una letra a continuación.
Dicho esto, parece que hay unaimportanteerror en Ubuntu (o cómo empaquetan OpenSSL), ya que openssl version -a
continúa devolviendo la versión 1.0.1 original del 14 de marzo de 2012, independientemente de si OpenSSL se ha actualizado o no a alguna de las versiones más nuevas. Y, como ocurre con la mayoría de las cosas, cuando llueve, llueve a cántaros.
Ubuntu no es la única distribución importante que tiene la costumbre de respaldar las actualizaciones en OpenSSL (u otros paquetes), en lugar de depender de las actualizaciones ascendentes y la numeración de versiones que todos reconocen. En el caso de OpenSSL, donde los números de versión en letras representan solo correcciones de errores y actualizaciones de seguridad, esto parece casi incomprensible, pero me han informado que esto puede deberse a laValidado por FIPSEl complemento de las principales distribuciones de Linux viene empaquetado con OpenSSL. Debido a los requisitos relacionados con la revalidación que se activan debido a cualquier cambio, incluso los cambios que tapan agujeros de seguridad, la versión está 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 existe una forma portátil y confiable de verificar las versiones de SSL en las distribuciones de Linux., porque todos usan sus propios parches y actualizaciones con diferentes esquemas de numeración de versiones. Tendrá que buscar el número de versión fijo para cada distribución diferente de Linux que ejecute y comparar la versión de OpenSSL instalada con la numeración de versión específica de esa distribución para determinar si sus servidores están ejecutando una versión vulnerable o no.
Respuesta2
Si quieres algo verdaderamente multiplataforma,compruebe la vulnerabilidad en sí en lugar de confiar en los números de versión.
Es posible que tenga un código que informe un número de versión que se sabe que es vulnerable,pero el código real no es vulnerable. ¡Y lo contrario (código silenciosamente vulnerable) podría ser aún peor!
Muchos proveedores que combinan productos de código abierto como OpenSSL y OpenSSH adaptarán selectivamente correcciones urgentes a una versión anterior del código para mantener la estabilidad y previsibilidad de la API. Esto es especialmente cierto para las plataformas de dispositivos y de "lanzamiento a largo plazo".
Pero los proveedores que hacen esto silenciosamente (sin agregar su propio sufijo de cadena de versión) corren el riesgo de generar falsos positivos en los escáneres de vulnerabilidades (y confundir a los usuarios). Entonces, para que esto sea transparente y verificable, algunos proveedores agregan sus propias cadenas a la versión principal del paquete. Tanto Debian (OpenSSL) como FreeBSD (en OpenSSH, mediante la VersionAddendum
directiva sshd_config) a veces hacen esto.
Los proveedores que no hacen esto probablemente lo hacen para minimizar la posibilidad de rotura debido a las muchas formas directas e indirectas en que otros programas verifican los números de versión.
Entonces puede verse así:
$ 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 deha 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, será mejor siNo confíes en el número de versión.
Respuesta3
Desafortunadamente, no estoy seguroesuna forma multiplataforma de hacer esto.Como lo analizo en una publicación de blog, la versión de OpenSSL que se muestra en Ubuntu 12.04 PERMANECE 1.0.1 después de actualizar a una versión fija.
SOLO para Ubuntu 12.04, puedes saber si has sido actualizado si todo lo siguiente es cierto:
dpkg -s openssl | grep Version
muestra la versión 1.0.1-4ubuntu5.12 o posterior.dpkg -s libssl1.0.0 | grep Version
muestra la versión 1.0.1-4ubuntu5.12 o posterior.openssl version -a
muestra una fecha "construida" del 7 de abril de 2014 o posterior.
Gracias a @danny por la información adicional.
Respuesta4
¿Alguno de estos scripts prueba todos los servicios o solo pruebaHTTPS?hasta donde se,PostgreSQLes vulnerable, pero eso es sólo un rumor hasta que surge un ataque salvaje.
Hay unmetasploitscript disponible para su uso.
https://github.com/rapid7/metasploit-framework/commit/dd69a9e5dd321915e07d8e3dc8fe60d3c54f551a
Puedes escribir esto (probado conGnuWin32Versión binaria OpenSSL 1.0.1.6, con fecha del 14 de enero de 2014), o simplemente use el script en el comentario debajo de este. ¡Es más preciso y sencillo!
s_client -connect a23-75-248-141.deploy.static.akamaitechnologies.com:443 -debug -state
Una vez conectado, escriba B y verá en un host vulnerable y no se desconectará:
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
Obtendrá una respuesta de latido similar a esta.
En un host parcheado, verá una respuesta similar a la siguiente y se le desconectará:
Ingrese 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 [email protected]...
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:
- Entrada en el blogCómo probar si tu corazón OpenSSL sangra
También existen estas herramientas: