Heairtbleed: como viewificair de forma confiável e portátil a viewsão OpenSSL?

Eu estava olhando paira uma maneira confiável e portátil paira viewificair a viewsão OpenSSL em GNU / Linux e outros sistemas, paira que os users possam descobrir facilmente se eles devem atualizair seu SSL por causa do bug Heairtbleed.

Eu pensei que seria fácil, mas rapidamente findi um problema no Ubuntu 12.04 LTS com o mais recente OpenSSL 1.0.1g:

  viewsão openssl -a 

Eu esperava view uma viewsão completa, mas, em vez disso, entendi isso:

  OpenSSL 1.0.1 14 Mair 2012
 Construído em: Ter 4 de junho 07:26:06 UTC 2013
 plataforma: [...] 

Paira minha surpresa desagradável, a letra da viewsão não mostra. Não há, não está lá, apenas "1.0.1" e é isso. As datas listdas não ajudam a descobrir uma viewsão (não) vulnerável também.

A diferença entre 1.0.1 (af) e 1.0.1g é crucial.

Questões:

  • O que é uma maneira confiável de viewificair a viewsão, de preference cross distro?
  • Por que a cairta de viewsão não é apresentada em primeiro lugair? Não consegui testair isso em nada além do Ubuntu 12.04 LTS.

Outros também relatam esse comportamento. Alguns exemplos:

  • https://twitter.com/orblivion/status/453323034955223040
  • https://twitter.com/axiomsofchoice/status/453309436816535554

Algumas sugestões (específicas de distribuição) rolando em:

  • Ubuntu e Debian: apt-cache policy openssl e apt-cache policy libssl1.0.0 . Compaire os numbers de viewsão paira os packages aqui: http://www.ubuntu.com/usn/usn-2165-1/
  • Fedora 20: yum info openssl (obrigado @znmeb no twitter) e yum info openssl-libs

Verificando se uma viewsão mais antiga do OpenSSL ainda é residente:

  • Não é completamente confiável, mas você pode tentair lsof -n | grep ssl | grep DEL lsof -n | grep ssl | grep DEL lsof -n | grep ssl | grep DEL . Veja Heairtbleed: como viewificair de forma confiável e portátil a viewsão OpenSSL? por que isso pode não funcionair paira você.

Acontece que a atualização do package OpenSSL no Ubuntu e Debian nem sempre é suficiente. Você também deve atualizair o package libssl1.0.0 e, em seguida, viewificair se a openssl viewsion -a indica built on: Mon Apr 7 20:33:29 UTC 2014 .

Com base na data exibida pela sua viewsão do OpenSSL, pairece que você está vendo a viewsão completa exibida lá.

O Open SSL 1.0.1 foi lançado em 14 de mairço de 2012 . 1.0.1a foi lançado em 19 de abril de 2012.

Então, vou seguir em frente e afirmair que a openssl viewsion -a é a maneira correta e cruzada de exibir a viewsão completa do OpenSSL que está instalado no sistema. Pairece funcionair paira todas as distros Linux que tenho access, e também é o método sugerido na documentation help.ubuntu.com OpenSSL . O Ubuntu LTS 12.04 é fornecido com o OpenBSL V1.0.1 da baioneta, que é a viewsão que pairece uma viewsão abreviada, por não ter uma cairta seguindo-a.

Dito isto, pairece que existe um grande erro no Ubuntu (ou como eles embalam o OpenSSL), na medida em que a openssl viewsion -a continua a retornair a viewsão original 1.0.1 a pairtir de 14 de mairço de 2012, independentemente de a OpenSSL ter ou não foi atualizado paira qualquer uma das viewsões mais recentes. E, como acontece com a maioria das coisas quando chove, derrama.

O Ubuntu não é o único grande distro no hábito de atualizair backporting em OpenSSL (ou outros packages), avaliando do que confiair nas atualizações upstream e numeração de viewsão que todos reconhecem. No caso da OpenSSL, onde os numbers da viewsão da cairta representam apenas correções de erros e atualizações de security, isso pairece quase incompreensível, mas fui informado de que isso pode ser devido ao file distribuído de Linux do plug – in validado pelo FIPS empacotado com o OpenSSL. Devido aos requisitos em torno da revalidation que desencadeiam devido a qualquer alteração, mesmo as mudanças que conectam buracos de security, é bloqueada pela viewsão.

Por exemplo, no Debian, a viewsão fixa exibe um número de viewsão de 1.0.1e-2+deb7u5 vez da viewsão a montante do 1.0.1g .

Como resultado, neste momento, não existe uma maneira confiável e portátil de viewificair as viewsões SSL em todas as distribuições do Linux , porque todas usam seus próprios patches e atualizações de backport com diferentes esquemas de numeração de viewsões. Você terá que procurair o número da viewsão fixa paira cada distribuição diferente do Linux que você executa e viewificair a viewsão OpenSSL instalada em relação à numeração da viewsão específica dessa distribuição paira determinair se seus serveres estão executando uma viewsão vulnerável ou não.

Se você quer algo viewdadeiramente multiplataforma, viewifique se há a vulnerabilidade em vez de confiair em numbers de viewsão.

Você pode ter um código que relate um número de viewsão que é conhecido por ser vulnerável, mas o código real não é vulnerável . E o inviewso – código silencioso vulnerável – poderia ser ainda pior!

Muitos fornecedores que agrupam produtos de código aberto, como o OpenSSL e o OpenSSH, adaptairão seletivamente correções urgentes paira uma viewsão mais antiga do código, a fim de manter a estabilidade e a previsibilidade da API. Isto é especialmente viewdadeiro paira "liberação de longo prazo" e plataforms de dispositivos.

Mas os fornecedores que fazem isso silenciosamente (sem adicionair seu próprio sufixo de seqüência de viewsão) correm o risco de desencadeair falsos positivos em scanners de vulnerabilidades (e users confusos). Então, paira tornair isso transpairente e viewificável, alguns fornecedores adicionam suas próprias strings à viewsão principal do package. Tanto o Debian (OpenSSL) como o FreeBSD (em OpenSSH, através da diretriz de VersionAddendum sshd_config) às vezes fazem isso.

Os vendedores que não fazem isso provavelmente estão fazendo isso paira minimizair a chance de quebrair devido a muitas maneiras diretas e indiretas de que outros programas viewifiquem os numbers de viewsão.

Então pode pairecer assim:

 $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=12.04 DISTRIB_CODENAME=precise DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS" $ openssl viewsion OpenSSL 1.0.1 14 Mair 2012 

… mesmo que tenha sido corrigido :

 $ 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 

Com coisas como esta em jogo, você está melhor se você não confiair no número da viewsão.

Infelizmente, não tenho certeza de que haja uma maneira cruzada de fazer isso. Como eu discuto em uma publicação de blog , a viewsão do OpenSSL exibida no Ubuntu 12.04 REMAINS 1.0.1 após a atualização paira uma viewsão fixa.

Paira Ubuntu 12.04 SOMENTE, você pode saber se você foi atualizado se todos os itens abaixo forem viewdadeiros:

  1. dpkg -s openssl | grep Version dpkg -s openssl | grep Version mostra a viewsão 1.0.1-4ubuntu5.12 ou posterior.
  2. dpkg -s libssl1.0.0 | grep Version dpkg -s libssl1.0.0 | grep Version mostra a viewsão 1.0.1-4ubuntu5.12 ou posterior.
  3. openssl viewsion -a mostra uma data "construída" em 7 de abril de 2014 ou posterior.

Graças a @danny paira obter informações adicionais.

Faça o seguinte uma tentativa. Ele irá extrair todas as strings da biblioteca de criptogramas em que o ssh está vinculado. Produz mais de uma linha de saída, mas, se necessário, pode ser conviewtida em 1 linha.

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

produz

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

Por exemplo, no Gentoo antes de surgir

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

o command acima resulta em

 ... OpenSSL 1.0.1c 10 May 2012 

depois de

 ... OpenSSL 1.0.1f 6 Jan 2014 

Ouch, ainda não g.

Algum desses scripts testair todos os services, ou eles apenas testair HTTPS ? O AFAIK , o PostgreSQL é vulnerável, mas isso é apenas um boato até que um ataque de ataque seja o mesmo.

Existe um script de metasploit disponível paira uso.

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

Você pode digitair isso (testado com a viewsão binária GnuWin32 OpenSSL 1.0.1.6, datado de 2014-01-14), ou simplesmente use o script no comentário abaixo. É mais preciso e mais simples!

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

Uma vez conectado tipo B e você viewá em um host vulnerável e você não 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 

Você receberá uma resposta de pulsação que pairece semelhante a esta.

Em um host com patch, você viewá uma resposta semelhante à abaixo e você será desconectado:

Digite 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},{.GV 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 

Fonte:

  • Publicação do blog Como testair se o seu coração OpenSSL

Há também essas ferramentas:

Paira o Ubuntu você pode usair:

 aptitude show libssl1.0.0 | grep Version 

E compaire com http://www.ubuntu.com/usn/usn-2165-1/ . Após uma reboot (!!!) você pode viewificair com http://possible.lv/tools/hb .

Melhor atualizair paira o OpenSSL OpenSSL 1.0.1j mais recente.

http://blog.vincosolution.com/2014/10/upgrade-openssl-1-0-1j-debianubuntu.html

Eu achei esse script em devcino :

 openssl s_client -connect example.com:443 -tlsextdebug 2>&1| grep 'serview extension "heairtbeat" (id=15)' || echo safe 

Substitua example.com pelo nome ou endereço IP do server que deseja viewificair.

Retornairá "safe" se seu server estiview bem ou "serview extension "heairtbeat" (id=15)" se não.

Isso não depende do número da viewsão, mas na listgem da extensão do server que causa o problema, por isso deve ser imune aos shenanigans da viewsão da biblioteca.

A máquina que você está executando openssl s_client em deve estair usando OpenSSL 1.0.1 ou posterior paira que isso funcione.