Řešení 1:
Na základě data zobrazeného ve vaší verzi OpenSSL se zdá, že jste zobrazí se zde zobrazená plná verze.
Open SSL 1.0.1 byl vydán 14. března 2012. 1.0.1a byl vydán 19. dubna 2012.
Takže pokračuji a tvrdím, že openssl version -a
je správný, cross-distro způsob, jak zobrazit plnou verzi OpenSSL, která je nainstalovaná v systému. Zdá se, že funguje pro všechny linuxové distribuce, ke kterým mám přístup, a je to také metoda navržená v dokumentaci help.ubuntu.com OpenSSL. Ubuntu LTS 12.04 se dodává s vanilla OpenSSL v1.0.1, což je verze, která vypadá jako zkrácená verze, protože za ní není písmeno.
Zdá se však, že existuje hlavní chyba v Ubuntu (nebo jak balí OpenSSL), v tom openssl version -a
nadále vrací původní verzi 1.0.1 od 14. března 2012, bez ohledu na to, zda OpenSSL bylo nebo nebylo upgradováno na některou z novějších verzí. A jako u většiny věcí, když prší, i leje.
Ubuntu není jedinou velkou distribucí, která má ve zvyku zpětně portovat aktualizace do OpenSSL (nebo jiných balíčků), spíše než se spoléhat na upstream aktualizace a číslování verzí, které každý zná. V případě OpenSSL, kde písmenná čísla verzí představují pouze opravu chyb a bezpečnostní aktualizace, se to zdá být téměř nepochopitelné, ale byl jsem informován, že to může být způsobeno tím, že hlavní distribuce Linuxu s certifikací FIPS jsou dodávány s OpenSSL. Kvůli požadavkům na revalidaci, které se spouštějí v důsledku jakékoli změny, dokonce i změn, které ucpávají bezpečnostní díry, je verze uzamčena.
Například v Debianu zobrazuje pevná verze číslo verze 1.0.1e-2+deb7u5
namísto upstream verze 1.0.1g
.
Výsledkem je, že v současné době neexistuje žádný spolehlivý a přenosný způsob kontroly verzí SSL napříč distribucemi Linuxu , protože všechny používají své vlastní backportované záplaty a aktualizace s různými schématy číslování verzí. Budete muset vyhledat pevné číslo verze pro každou jinou distribuci Linuxu, kterou provozujete, a zkontrolovat nainstalovanou verzi OpenSSL s číslováním konkrétní verze této distribuce, abyste zjistili, zda vaše servery používají zranitelnou verzi nebo ne.
Řešení 2:
Pokud chcete něco skutečně multiplatformního, zkontrolujte raději samotnou zranitelnost, než abyste se spoléhali na čísla verzí.
Možná máte kód, který hlásí číslo verze, o které je známo, že je zranitelná, ale skutečný kód zranitelný není . A naopak – tiše zranitelný kód – by mohl být ještě horší!
Mnoho dodavatelů, kteří sdružují produkty s otevřeným zdrojovým kódem, jako je OpenSSL a OpenSSH, selektivně dovybaví naléhavé opravy starší verze kódu, aby byla zachována stabilita a předvídatelnost API. To platí zejména pro „dlouhodobé vydání“ a platformy zařízení.
Ale dodavatelé, kteří to dělají potichu (bez přidání vlastní přípony řetězce verze), riskují, že spouštějí falešné poplachy ve skenerech zranitelnosti (a matou uživatele). Aby to bylo transparentní a ověřitelné, někteří prodejci připojují k verzi hlavního balíčku své vlastní řetězce. Debian (OpenSSL) i FreeBSD (v OpenSSH, přes VersionAddendum
direktiva sshd_config) to někdy dělají.
Prodejci, kteří to nedělají, to pravděpodobně dělají, aby minimalizovali možnost poškození kvůli mnoha přímým a nepřímým způsobům, kterými jiné programy kontrolují čísla verzí.
Může to tedy vypadat takto:
$ 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
... i když byl opraven:
$ 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
Když jsou ve hře takové věci, bude pro vás lepší, když číslu verze nevěříte.
Řešení 3:
Bohužel si nejsem jistý, zda existuje multiplatformní způsob, jak toho dosáhnout. Jak uvádím v příspěvku na blogu, verze OpenSSL zobrazená na Ubuntu 12.04 ZŮSTÁVÁ po upgradu na pevnou verzi 1.0.1.
POUZE pro Ubuntu 12.04 můžete zjistit, zda jste byli aktualizováni, pokud jsou splněny všechny níže uvedené skutečnosti:
dpkg -s openssl | grep Version
zobrazuje verzi 1.0.1-4ubuntu5.12 nebo novější.dpkg -s libssl1.0.0 | grep Version
zobrazuje verzi 1.0.1-4ubuntu5.12 nebo novější.openssl version -a
zobrazuje datum „postaveno na“ 7. dubna 2014 nebo později.
Děkujeme @danny za další informace.
Řešení 4:
Vyzkoušejte následující. Extrahuje všechny řetězce z crypto knihovna, se kterou je ssh propojeno. Vytváří více než jeden řádek výstupu, ale v případě potřeby může být převeden na 1 řádek.
ldd `which ssh` | awk '/\// { print $3 }' | grep crypto | xargs strings | grep OpenSSL
produkuje
OpenSSLDie
DSA_OpenSSL
...
MD4 part of OpenSSL 1.0.1f 6 Jan 2014
MD5 part of OpenSSL 1.0.1f 6 Jan 2014
...
etc
např. na Gentoo před objevením
[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
výsledkem výše uvedeného příkazu je
...
OpenSSL 1.0.1c 10 May 2012
po
...
OpenSSL 1.0.1f 6 Jan 2014
Au, stále žádné g.
Řešení 5:
Testuje některý z těchto skriptů všechny služby, nebo pouze HTTPS? AFAIK, PostgreSQL je zranitelný, ale to je jen fáma, dokud se neobjeví divoký útok.
K dispozici je metasploit skript.
https://github.com/rapid7/metasploit-framework/commit/dd69a9e5dd321915e07d8e3dc8fe60d3c54f551a
Můžete to napsat (testováno s binární verzí GnuWin32 OpenSSL 1.0.1.6, datem 2014-01-14), nebo stačí použít skript v komentáři pod tímto. Je to přesnější a jednodušší!
s_client -connect a23-75-248-141.deploy.static.akamaitechnologies.com:443 -debug -state
Po připojení zadejte B a na zranitelném hostiteli uvidíte a nebudete odpojeni:
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
Obdržíte srdeční odezvu, která vypadá podobně jako tato.
Na opraveném hostiteli uvidíte odpověď podobnou níže a budete odpojeni:
Zadejte 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
Zdroj:
- Příspěvek na blogu Jak otestovat, zda vaše OpenSSL srdce krvácí
K dispozici jsou také tyto nástroje:
-
https://github.com/titanous/heartbleeder
-
http://filippo.io/Heartbleed/
-
https://github.com/musalbas/heartbleed-masstest