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 deberían 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 cambio 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 carta de la versión no se muestra. No f, no g allí, solo "1.0.1" y listo. 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 la distribución cruzada?
- ¿Por qué no se muestra la letra de la versión en primer lugar? No pude probar esto en otra cosa que no sea Ubuntu 12.04 LTS.
Otros también informan este comportamiento. Algunos ejemplos:
- https://twitter.com/orblivion/status/453323034955223040
- https://twitter.com/axiomsofchoice/status/453309436816535554
Algunas sugerencias (específicas de la distribución) llegan:
- 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
Comprobando si una versión anterior de OpenSSL sigue siendo residente:
- No es completamente confiable, pero puedes intentarlo
lsof -n | grep ssl | grep DEL
. Vea Heartbleed: ¿cómo verificar de forma confiable 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 lo openssl version -a
indica 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
y respondió con:Installed: 1.0.1-4ubuntu5.12
que es el 1.0.1g recién lanzado por Ubuntu para 12.04 LTS. Salí y volví a entrar. ¿Hay algo más que pueda hacer para verificar?Respuestas:
Según la fecha que muestra su versión de OpenSSL, parece que está viendo la versión completa que se muestra allí.
Open SSL 1.0.1 fue lanzado el 14 de marzo de 2012 . 1.0.1a fue lanzado el 19 de abril de 2012.
Por lo tanto, voy a seguir adelante y afirmar que esa
openssl version -a
es la forma correcta, de distribución cruzada para 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, y también es el método sugerido en la documentación de OpenSSL de help.ubuntu.com . Ubuntu LTS 12.04 se envió con Vanilla OpenSSL v1.0.1, que es la versión que se parece a una versión abreviada, debido a que no tiene una carta a continuación.Dicho esto, parece que hay un error importante en Ubuntu (o cómo empaquetan OpenSSL), ya que
openssl version -a
continúa devolviendo la versión original 1.0.1 del 14 de marzo de 2012, independientemente de si OpenSSL se ha actualizado o no a cualquier de las versiones más nuevas. Y, como con la mayoría de las cosas cuando llueve, llueve a cántaros.Ubuntu no es la única distribución importante en el hábito de actualizar las actualizaciones en OpenSSL (u otros paquetes), en lugar de confiar en las actualizaciones ascendentes y la numeración de versiones que todos reconocen. En el caso de OpenSSL, donde los números de versión de las letras representan solo la corrección de errores y las actualizaciones de seguridad, esto parece casi incomprensible, pero me han informado que esto puede deberse a que el complemento validado por FIPS distribuye las principales distribuciones de Linux empaquetadas con OpenSSL. Debido a los requisitos en torno a la revalidación que se activan debido a cualquier cambio, incluso los cambios que tapan los agujeros de seguridad, está bloqueado en la versión.
Por ejemplo, en Debian, la versión fija muestra un número de versión en
1.0.1e-2+deb7u5
lugar de la versión anterior de1.0.1g
.Como resultado, en este momento, no hay una forma confiable y portátil de verificar las versiones SSL en las distribuciones de Linux , porque todas usan sus propios parches y actualizaciones con diferentes esquemas de numeración de versiones. Tendrá que buscar el número de versión fija 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.
fuente
openssl version -a
no es un método portátil (al menos no portátil para Ubuntu). Lo comprobéapt-cache policy openssl
y respondió con:Installed: 1.0.1-4ubuntu5.12
que es el 1.0.1g recién lanzado por Ubuntu para 12.04 LTS. Me desconecté y volví a ingresar antes de verificar.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.
Por lo tanto, no se gana nada abandonando el esquema de versiones ascendente; respaldar las actualizaciones es esencialmente lo mismo que usar la versión actualizada, ya que la actualización solo incluye correcciones de seguridad y errores de todos modos. Lo que hace es confundir las cosas y dejarnos sin forma de verificar de forma portátil la versión de OpenSSL en las distribuciones de Linux.Si desea algo verdaderamente multiplataforma, verifique la vulnerabilidad en sí en lugar de confiar en los números de versión.
Es posible que tenga un código que informa un número de versión que se sabe que es vulnerable, pero el código real no es vulnerable . Y lo contrario, un código silenciosamente vulnerable, ¡podría ser aún peor!
Muchos proveedores que agrupan productos de código abierto como OpenSSL y OpenSSH actualizarán selectivamente las correcciones urgentes a una versión anterior de código, para mantener la estabilidad y la previsibilidad de la API. Esto es especialmente cierto para "lanzamiento a largo plazo" y plataformas de dispositivos.
Pero los vendedores que hacen esto en silencio (sin agregar su propio sufijo de cadena de versión) corren el riesgo de desencadenar falsos positivos en los escáneres de vulnerabilidad (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. Debian (OpenSSL) y FreeBSD (en OpenSSH, a través de la
VersionAddendum
directiva sshd_config) a veces hacen esto.Los proveedores que no hacen esto probablemente lo estén haciendo 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í:
... a pesar de que ha sido parcheado :
Con este tipo de cosas en juego, es mejor que no confíes en el número de versión.
fuente
Por desgracia, no estoy seguro de que es una forma de plataforma cruzada de hacer esto. Como discutí en una publicación de blog , la versión de OpenSSL mostrada en Ubuntu 12.04 REMAINS 1.0.1 después de actualizar a una versión fija.
SOLO para Ubuntu 12.04, puede saber si ha sido actualizado si se cumple todo lo siguiente:
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 "incorporada" del 7 de abril de 2014 o posterior.Gracias a @danny por la información adicional.
fuente
1.0.1-4ubuntu5.12
es SOLO para Ubuntu 12.04 LTS. Si está en Ubuntu 12.10, debería ver al menos la versión1.0.1c-3ubuntu2.7
y si está en 13.10, entonces debería ser al menos la versión1.0.1e-3ubuntu1.2
, según la fuente: ubuntu.com/usn/usn-2165-1libssl1.0.0
explícitamente en ubuntu. Si está viendo una fecha de construcción anterior al 7 de abril de 2014, incluso si openssl es la versión correcta (1.0.1-4ubuntu5.12
para Ubuntu 12.04), probablemente todavía sea vulnerable.openssl version -a
es posible que no necesite la fecha de compilación del 7 de abril, ya que la solución se está actualizando a las versiones anteriores.Prueba lo siguiente. Extraerá todas las cadenas de la biblioteca de cifrado con las que ssh está vinculado. Produce más de una línea de salida, pero si es necesario podría convertirse a 1 línea.
produce
por ejemplo, en Gentoo antes de emerger
el comando anterior da como resultado
después
Ay, todavía no g.
fuente
[...] part of OpenSSL 1.0.1 14 Mar 2012
, de la misma manera que loopenssl version -a
hace. ¡Sin embargo, este es un truco que puede funcionar en otros casos!¿Alguno de estos scripts prueba todos los servicios o solo prueba HTTPS ? AFAIK , PostgreSQL es vulnerable, pero eso es solo un rumor hasta que surge un ataque en la naturaleza.
Hay un script metasploit disponible para su uso.
Puede escribir esto (probado con GnuWin32 OpenSSL versión binaria 1.0.1.6, con fecha 14/01/2014), o simplemente usar el script en el comentario debajo de este. ¡Es más preciso y más simple!
Una vez conectado, escriba B y verá en un host vulnerable y no se desconectará:
Obtendrá una respuesta de latido similar a esta.
En un host parcheado, verá una respuesta similar a la siguiente y se desconectará:
Ingrese B
Fuente:
También hay estas herramientas:
https://github.com/titanous/heartbleeder
http://filippo.io/Heartbleed/
https://github.com/musalbas/heartbleed-masstest
fuente
Para Ubuntu puedes usar:
Y compare con http://www.ubuntu.com/usn/usn-2165-1/ . Después de reiniciar (!!!) puede consultar con
http://possible.lv/tools/hb
.fuente
Será mejor que actualice a la última versión de OpenSSL OpenSSL 1.0.1j.
http://blog.vincosolution.com/2014/10/upgrade-openssl-1-0-1j-debianubuntu.html
fuente
Encontré este script en devcentral :
Reemplace
example.com
con el nombre o la dirección IP del servidor que desea verificar.Volverá
"safe"
si su servidor está bien o"server extension "heartbeat" (id=15)"
si no.Esto no depende del número de versión, sino de enumerar la extensión del servidor que causa el problema, por lo que debería ser inmune a las travesuras de la versión de la biblioteca.
La máquina está ejecutando
openssl s_client
en debe ser el uso de OpenSSL 1.0.1 o posterior para que esto funcione.fuente
openssl s_client
DEBE utilizar OpenSSL 1.0.1 o posterior para que esto funcione. Si ejecuta este comando en una máquina con 0.9.8 o 1.0.0, SIEMPRE INFORMARÁ "Seguro", incluso para servidores vulnerables .