Como corrigir o bug do Heartbleed (CVE-2014-0160) no OpenSSL?

152

A partir de hoje, foi encontrado um bug no OpenSSL afetando as versões 1.0.1através de 1.0.1f(inclusive) e 1.0.2-beta.

Desde o Ubuntu 12.04, todos somos vulneráveis ​​a esse bug. Para corrigir esta vulnerabilidade, os usuários afetados devem atualizar para o OpenSSL 1.0.1g.

Como todos os usuários afetados podem aplicar essa atualização agora ?

Lucio
fonte
Você tem uma versão afetada do openssl?
Braiam
Eu tenho a versão corrigida 1.0.1-4ubuntu5.12 e reiniciei o serviço apache, mas o teste filippo.io/Heartbleed no meu site ainda diz que estou vulnerável Alguma idéia do porquê?
1
@ Mat Eu não sei o que esse site testa, mas talvez ele detecte que você está usando uma chave antiga. Como a chave pode ter vazado, é necessário regenerá-la.
Gilles
1
Você realmente não deseja atualizar o OpenSSL para novas versões no atacado, isso é uma dor inacreditável. Muito mais fácil é apenas para instalar o pacote atualizado que corrige o problema: ubuntu.com/usn/usn-2165-1
sarnold
você reiniciou seus serviços após a atualização?
Axel

Respostas:

141

As atualizações de segurança estão disponíveis para 12.04, 12.10, 13.10 e 14.04, consulte o Aviso de segurança do Ubuntu USN-2165-1 .

Então, primeiro você precisa aplicar as atualizações de segurança disponíveis, por exemplo, executando

sudo apt-get update
sudo apt-get upgrade

na linha de comando.

Não se esqueça de reiniciar os serviços (HTTP, SMTP, etc.) que usam a versão afetada do OpenSSL, caso contrário você ainda estará vulnerável. Veja também Heartbleed: O que é e quais são as opções para mitigá-lo? em Serverfault.com.

O comando a seguir mostra (após uma atualização) todos os serviços que precisam ser reiniciados:

sudo find /proc -maxdepth 2 -name maps -exec grep -HE '/libssl\.so.* \(deleted\)' {} \; | cut -d/ -f3 | sort -u | xargs --no-run-if-empty ps uwwp

Depois disso, você precisa gerar novamente todas as chaves SSL do servidor e avaliar se suas chaves podem ter vazado. Nesse caso, os invasores podem ter recuperado informações confidenciais de seus servidores.

Florian Diesch
fonte
23
Não tenho certeza se isso funciona no Ubuntu 12.04.4 LTS. Após a atualização completa, openssl versionOpenSSL 1.0.1 14 Mar 2012. Essa não é a versão corrigida, certo? Ou estou interpretando errado?
Paul Cantrell
7
O que fazer com o Ubuntu 13.04? Nenhum openssl atualizado disponível :-(
Frodik 08/04
20
No Ubuntu 12.04, até o OpenSSL fixo exibe a versão 1.0.1 14 Mar 2012. Leia a resposta do crimi para descobrir se sua instalação está incluindo a correção.
dan
7
Obrigado, @dan! Resumindo a resposta da @ crimi aqui: se você correr dpkg -l | grep ' openssl 'e conseguir 1.0.1-4ubuntu5.12, estará pronto .
Paul Cantrell
20
Remendar e reiniciar não é suficiente. Você precisa gerar novamente as chaves e avaliar se elas vazaram, bem como outro material confidencial. Veja, por exemplo, Heartbleed significa novos certificados para todos os servidores SSL?
Gilles
71

O bug é conhecido como Heartbleed .

Eu sou vulnerável?

Geralmente, você é afetado se executar algum servidor para o qual você gerou uma chave SSL em algum momento. A maioria dos usuários finais não é (diretamente) afetada; pelo menos o Firefox e o Chrome não usam o OpenSSL. SSH não é afetado. A distribuição dos pacotes Ubuntu não é afetada (depende de assinaturas GPG).

Você estará vulnerável se executar qualquer tipo de servidor que utilize o OpenSSL versões 1.0-1.0.1f (exceto as versões do curso que foram corrigidas desde que o bug foi descoberto). As versões afetadas do Ubuntu são as versões 11.10 oníricas e 14.04 confiáveis. É um bug de implementação, não uma falha no protocolo; portanto, apenas os programas que usam a biblioteca OpenSSL são afetados. Se você tiver um programa vinculado à versão antiga 0.9.x do OpenSSL, ele não será afetado. Somente programas que usam a biblioteca OpenSSL para implementar o protocolo SSL são afetados; programas que usam o OpenSSL para outras coisas não são afetados.

Se você executou um servidor vulnerável exposto à Internet, considere-o comprometido, a menos que seus logs não mostrem conexão desde o anúncio em 07/04/2014. (Isso pressupõe que a vulnerabilidade não foi explorada antes do anúncio.) Se o servidor foi exposto apenas internamente, a necessidade de alterar as chaves dependerá de outras medidas de segurança.

Qual é o impacto?

O bug permite que qualquer cliente que possa se conectar ao seu servidor SSL recupere cerca de 64 kB de memória do servidor. O cliente não precisa ser autenticado de forma alguma. Repetindo o ataque, o cliente pode despejar diferentes partes da memória em tentativas sucessivas.

Uma das partes críticas de dados que o invasor pode recuperar é a chave privada SSL do servidor. Com esses dados, o invasor pode se passar por seu servidor.

Como me recupero em um servidor?

  1. Coloque todos os servidores afetados offline. Enquanto estiverem em execução, eles estão potencialmente vazando dados críticos.

  2. Atualize o libssl1.0.0pacote e verifique se todos os servidores afetados foram reiniciados.
    Você pode verificar se os processos afetados ainda estão em execução com o `` grep 'libssl. (excluído) '/ proc / / maps`

  3. Gere novas chaves . Isso é necessário porque o bug pode ter permitido que um invasor obtenha a chave privada antiga. Siga o mesmo procedimento que você usou inicialmente.

    • Se você usar certificados assinados por uma autoridade de certificação, envie suas novas chaves públicas à sua CA. Quando você receber o novo certificado, instale-o no seu servidor.
    • Se você usa certificados autoassinados, instale-o no seu servidor.
    • De qualquer maneira, mova as chaves e os certificados antigos para fora do caminho (mas não os exclua, apenas verifique se eles não estão mais sendo usados).
  4. Agora que você possui novas chaves descomprometidas, pode colocar seu servidor novamente online .

  5. Revogue os certificados antigos.

  6. Avaliação de danos : todos os dados que estiveram na memória de um processo que atende às conexões SSL podem ter vazado. Isso pode incluir senhas de usuários e outros dados confidenciais. Você precisa avaliar quais podem ser esses dados.

    • Se você estiver executando um serviço que permita autenticação por senha, as senhas dos usuários que se conectaram desde pouco antes da divulgação da vulnerabilidade devem ser consideradas comprometidas. (Um pouco antes, porque a senha pode ter permanecido sem uso na memória por um tempo.) Verifique seus logs e altere as senhas de qualquer usuário afetado.
    • Também invalide todos os cookies de sessão, pois eles podem ter sido comprometidos.
    • Os certificados de cliente não são comprometidos.
    • Quaisquer dados que foram trocados um pouco antes da vulnerabilidade podem ter permanecido na memória do servidor e, portanto, podem ter sido vazados para um invasor.
    • Se alguém gravou uma conexão SSL antiga e recuperou as chaves do servidor, agora pode descriptografar a transcrição. (A menos que o PFS tenha sido garantido - se você não sabe, não foi.)

Como me recupero em um cliente?

Existem apenas algumas situações nas quais os aplicativos clientes são afetados. O problema no lado do servidor é que qualquer pessoa pode se conectar a um servidor e explorar o bug. Para explorar um cliente, três condições devem ser atendidas:

  • O programa cliente usou uma versão de buggy da biblioteca OpenSSL para implementar o protocolo SSL.
  • O cliente conectado a um servidor malicioso. (Por exemplo, se você se conectou a um provedor de e-mail, isso não é uma preocupação.) Isso aconteceu depois que o proprietário do servidor ficou ciente da vulnerabilidade, presumivelmente após 07-04-2014.
  • O processo do cliente tinha dados confidenciais na memória que não foram compartilhados com o servidor. (Portanto, se você apenas correu wgetpara baixar um arquivo, não havia dados a serem vazados.)

Se você fez isso entre 07/04/2014 à noite UTC e atualizou sua biblioteca OpenSSL, considere comprometidos os dados que estavam na memória do processo do cliente.

Referências

Gilles
fonte
4
Não acredito que "apenas o lado do servidor das conexões SSL / TLS seja afetado" seja verdadeiro. O openssl.org/news/secadv_20140407.txt diz que pode revelar segredos do cliente ou do servidor. O ubuntu.com/usn/usn-2165-1 concorda. As chances de você estar usando certificados de cliente enquanto se conecta a um servidor mal-intencionado são pequenas, mas existe a possibilidade.
ARMB
@armb Você faz um bom argumento. Não importa se certificados de clientes são usados, o vazamento de dados não está relacionado ao uso de certificados. Eu alistei a ajuda de profissionais .
Gilles
Certificados de cliente são o caso em que você vazaria chaves privadas, mas sim, senhas, cookies de autorização etc. poderiam vazar de qualquer maneira. No entanto, com um cliente baseado em OpenSSL, como curl ou wget no uso típico, você não teria segredos para outros sites na memória ao se conectar a um servidor mal-intencionado; nesse caso, acho que o único vazamento seria se você desse segredos ao cliente antecipando a entrega a um site legítimo e o Heartbleed os vazou durante o handshake antes que a verificação do certificado revele que você não está conectado ao site certo.
ARMB
1
@Gilles Você pode estar interessado nas respostas para Quais clientes comprovadamente são vulneráveis ​​ao Heartbleed? . Consegui ganhar memória "interessante" no nginx (modo proxy), wget, links e outros.
Lekensteyn
1
@ MuhamedHuseinbašić O pacote opensslcontém ferramentas de linha de comando. Não é usado por aplicativos que usam a biblioteca OpenSSL para implementar o protocolo SSL (como o Apache). Mas você deve apenas aplicar as atualizações de segurança da distribuição.
Gilles
40

Para ver qual versão do OpenSSL está instalada no Ubuntu, execute:

dpkg -l | grep openssl

Se você vir a seguinte versão de saída, o patch para CVE-2014-0160 deve ser incluído.

ii  openssl      1.0.1-4ubuntu5.12      Secure Socket Layer (SSL)...

Olhando https://launchpad.net/ubuntu/+source/openssl/1.0.1-4ubuntu5.12 , mostra que tipo de bugs foram corrigidos:

...
 SECURITY UPDATE: memory disclosure in TLS heartbeat extension
    - debian/patches/CVE-2014-0160.patch: use correct lengths in
      ssl/d1_both.c, ssl/t1_lib.c.
    - CVE-2014-0160
 -- Marc Deslauriers <email address hidden>   Mon, 07 Apr 2014 15:45:14 -0400
...
crimi
fonte
2
Eu atualizei e obtive a versão 5.12, mas essa ferramenta ainda me diz que sou vulnerável filippo.io/Heartbleed Thoughts?
toxaq
3
Testei nossos servidores atualizados nesse lado e ele me disse que não sou afetado. Você reiniciou o sistema ou pelo menos tem certeza de que todos os processos necessários foram reiniciados?
crimi
3
Depois de atualizar o OPENSSL, tudo que eu precisava fazer era reiniciar o serviço apache, mas o gracioso não ajudou . Eu tive que ir e reiniciar usandosudo service apache2 restart
Tom Hert
1
Acabei de encontrar a causa da minha vulnerabilidade: eu tinha o mod-spdy-beta instalado. Após removê-lo e reiniciar o apache, todos os testes ficam verdes agora.
Andreas Roth
3
A atualização opensslnão corrige aplicativos como Apache, Nginx ou postfix. Você precisa atualizá libssl1.0.0-los e reiniciá-los, conforme explicado em outras postagens.
usar o seguinte comando
17

Se os seus repositórios apt-get não contêm nenhuma versão OpenSSL 1.0.1g pré-compilada , basta baixar fontes do site oficial e compilá-lo.

Abaixo da linha de comando única para compilar e instalar a última versão do openssl.

curl https://www.openssl.org/source/openssl-1.0.1g.tar.gz | tar xz && cd openssl-1.0.1g && sudo ./config && sudo make && sudo make install

Substitua o arquivo binário openssl antigo pelo novo via um link simbólico.

sudo ln -sf /usr/local/ssl/bin/openssl `which openssl`

Você é tudo de bom!

# openssl version should return
openssl version
OpenSSL 1.0.1g 7 Apr 2014

Ver esta postagem no blog .

Nota: Como declarado na postagem do blog, esta solução alternativa não corrigirá "o servidor Nginx e Apache que precisa ser recompilado com fontes openSSL 1.0.1g".

Quentin Rousseau
fonte
2
Como normalmente, o Ubuntu não fornece a nova versão upstream, mas corrigiu as versões de todos os lançamentos suportados para manter as alterações no mínimo.
Florian Diesch
1
Nota: Certifique-se de reiniciar o servidor após atualizar o OpenSSL. Apache e Nginx pegaram a nova lib e a vulnerabilidade foi encerrada.
DAngelov 08/04
6
Agora que dedico tempo para ler os detalhes desta postagem, fico ainda mais horrorizado - baixar um tarball de algum lugar aleatório da Internet, desempacotar e executar partes dele como root é apenas um comportamento imprudente. Seria um pouco melhor se as assinaturas de tarball fossem baixadas e verificadas, mas garantir que você valide as assinaturas foi assinado pela chave certa é uma questão difícil. As distribuições já se esforçaram para garantir a proveniência segura de tarballs e patches. Obrigado.
sarnold
2
que poderia ser uma boa idéia para compilar a partir da fonte agora, e instalar um mais novo, mais tarde, a partir de apt, dessa forma o seu mais seguro do que sem expectly em versões anteriores do Ubuntu em todo o caso apenas meus dois centavos
nwgat
2
@sarnold openssl.org não parece ser um lugar aleatório para baixar o fonte para openssl. A Canonical deve tornar isso desnecessário, mas o openssl.org deve ser a autoridade autorizada a montante da qual trabalhar.
Rustavore 13/09/16
12

Para quem não deseja fazer uma atualização de pacote em todo o servidor. Eu li vários desses guias hoje e apt-get upgrade openssl=== apt-get upgradeisso aplicará todas as correções de segurança exigidas pela sua máquina. Maravilhoso, a menos que você esteja explicitamente apoiado em uma versão antiga do pacote em algum lugar.

Esta é a ação mínima necessária no Ubuntu 12.04 LTS executando o Apache 2:

  • Vá para este endereço e prove que você tem a vulnerabilidade. Você deve usar o ENDEREÇO ​​EXTERNO DIRETO DO SEU SERVIDOR DA WEB. Se você usa um loadbalancer (por exemplo, ELB), pode não estar entrando em contato diretamente com o servidor da web.

  • Execute o seguinte liner 1 para atualizar pacotes e reiniciar. Sim, eu vi todos os guias dizendo que você deveria ter um carimbo de data e hora depois de 4 de abril de 2014, isso não parece ser o meu caso.

    apt-get update && apt-get install openssl libssl1.0.0 && /etc/init.d/apache2 restart

  • Verifique se você possui as versões de pacotes apropriadas instaladas e verifique novamente o servidor da Web quanto à vulnerabilidade.

Os principais pacotes são os seguintes, eu determinei essas informações usando o comando abaixo e depois editei o cruft (você não precisa saber muito sobre o estado das minhas máquinas).

$ dpkg -l | grep ssl

ii  libssl-dev                       1.0.1-4ubuntu5.12          SSL development libraries, header files and documentation
ii  libssl1.0.0                      1.0.1-4ubuntu5.12          SSL shared libraries
ii  openssl                          1.0.1-4ubuntu5.12          Secure Socket Layer (SSL)* binary and related cryptographic tools

1.0.1-4ubuntu5.12NÃO deve conter a vulnerabilidade. Verifique se é esse o caso, acessando novamente o site abaixo e testando seu servidor da web.

http://filippo.io/Heartbleed/

Adrian
fonte
2
Usar um site externo para provar uma vulnerabilidade em um servidor parece ser a abordagem errada para mim.
Rinzwind
Atualmente, scripts de teste de vulnerabilidade externa estão se tornando cada vez mais comuns. Ele faz exatamente o que um script interno faz, a conexão é iniciada apenas a partir de um servidor da web externo. Você pode consultar sites como o WhiteHatSecurity.com para obter um exemplo de programa que inicia todas as conexões remotamente. Há casos em que isso não ocorre, por exemplo, teste de vulnerabilidade de rede, mas para testar um servidor da web voltado para a frente (que geralmente é um servidor SSL), isso é quase ideal.
Adrian
Por que instalar o pacote se estiver sendo atualizado?
Braiam
1
apt-get install openssl libssl1.0.0fez isso por mim. A execução openssl version -aagora mostra:built on: Mon Apr 7 20:33:29 UTC 2014
topher
"Os scripts de teste de vulnerabilidade externa estão se tornando cada vez mais comuns hoje em dia", o que abre a possibilidade de o site externo abusar do meu sistema: tudo o que eles precisam para saber se ele falha e invadir meu sistema antes de corrigi-lo. Não, este não é o caminho correto. (e sim, eu hospedo meus próprios sites com apache e openssl).
Rinzwind 10/04
11

Notei muitos comentadores aqui que precisam de ajuda urgentemente. Eles estão seguindo as instruções, atualizando e reinicializando, e ainda vulneráveis ​​ao usar alguns dos sites de teste.

Você deve verificar se você não possui pacotes em espera, como libssl.

:~$ sudo apt-get upgrade -V
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
  libssl-dev (1.0.1-4ubuntu5.10 => 1.0.1-4ubuntu5.12)
  libssl1.0.0 (1.0.1-4ubuntu5.10 => 1.0.1-4ubuntu5.12)
  linux-image-virtual (3.2.0.31.34 => 3.2.0.60.71)
  linux-virtual (3.2.0.31.34 => 3.2.0.60.71)
0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.

Para atualizar aqueles apt-mark unhold libssl1.0.0(por exemplo). Em seguida, atualizar: apt-get upgrade -V. Em seguida, reinicie os serviços afetados.

Dominó
fonte