Falha grave no OpenSSL deixa milhões de sites vulneráveis
O OpenSSL é uma implementação em código aberto dos protocolos SSL e TLS. Uma das funcionalidades consiste na criação de certificados X.509 que permitem confidencialidade em ligações com SSL (HTTPS) entre outros serviços. Os certificados digitais X.509 representam para o utilizador, o mecanismo de segurança mais visível no âmbito da certificação digital.
No entanto, uma descoberta divulgada durante o dia de ontem, dá conta que o OpenSSL até a versão 1.0.1f está vulnerável, e os atacantes podem conseguir ler até 64 KB de informação numa comunicação cifrada.
O SSL é um protocolo criptográfico baseado em cifras assimétricas (chave privada + chave publica) que tem como principal objectivo providenciar segurança e integridade dos dados transmitidos em redes inseguras como é o caso da Internet. Quando um utilizador acede a um site que recorre ao SSL, o servidor envia ao cliente a chave publica para que esta possa cifrar a informação que vai ser passada ao servidor. Quando o servidor recebe essa informação, usa a sua chave privada para decifrar a informação transmitida pelo cliente.
Existem várias aplicações para este protocolo, como por exemplo o comércio electrónico, servidores Web, servidores FTP, VPNs, etc. Para identificar facilmente se estão a visualizar um site seguro basta verificar no URL que em vez de estar o normal http:// se encontra https://. Saber mais aqui.
Chave pública vs Chave privada
A chave pública, que está presente no certificado digital, é usada para cifrar os dados a serem enviados ao para o servidor. Já a chave privada, que só o dono do certificado conhece, serve para decifrar a informação que foi cifrada com a sua chave pública.
Certificado Digital
Um certificado é um documento digital que contém informação acerca de quem o possui, nome, morada, localidade, e-mail, duração do certificado, domínio (Common Name) e nome da entidade que assina o certificado. Contém ainda uma chave pública e um hash que permite verificar a integridade do próprio certificado (i.e se um certificado foi alterado).
Um certificado assenta numa estrutura hierárquica de confiança, cujo topo é pertença de uma Entidade Certificadora (CA Root Certificate).
Esta entidade certificadora confirma que o possuidor do certificado é quem afirma ser, e assina o certificado, impossibilitando desta forma a sua modificação. Em Portugal, como entidade certificadora temos como exemplo a multicert.
Bug Heartbleed
O Bug Heartbleed é uma vulnerabilidade grave que afecta a popular biblioteca criptográfica OpenSSL. Explorando este bug, é possível ler até 64 KB de informação de informação numa sessão SSL/TLS. No entanto, os 64 KB não é o limite de informação que pode ser lida já que o atacante pode restabelecer a ligação, várias vezes, durante uma sessão TLS activa, obtendo assim vários “pedaços” de 64 KB de informação, comprometendo a chave privada, usada para decifrar toda a informação (ex.passwords).
Versões afectadas
- OpenSSL 1.0.1 até a versão 1.0.1f (inclusive)
Como saber a versão do OpenSSL?
Para saber a versão, basta que execute o comando openssl version
Verificar se um servidor está vulnerável
openssl s_client -connect google.com:443 -tlsextdebug 2>&1| grep 'server extension "heartbeat" (id=15)' || echo safe |
Verificar online se o seu servidor está vulnerável aqui
Homepage: heartbleed
Este artigo tem mais de um ano
Dou os parabéns. Este bug foi publicado ontem e já escreveram um artigo sobre isso.
Faço apenas uma correção. Escreveram que a versão 1.0.1g está vunerável. Mas no site do heartbleed encontra-se esta informação:
What versions of the OpenSSL are affected?
Status of different versions:
OpenSSL 1.0.1 through 1.0.1f (inclusive) are vulnerable
OpenSSL 1.0.1g is NOT vulnerable
OpenSSL 1.0.0 branch is NOT vulnerable
OpenSSL 0.9.8 branch is NOT vulnerable
Ui lá se vai as chaves privadas das assinaturas das facturas a enviar para as finanças 😀
O ppl descontrai, eu já uso a OpenSSL 1.0.2 desde fevereiro nos meus sites.
pois… a versão 1.0.2 também está vulnerável. Só na proxima beta não estará.
https://bugzilla.redhat.com/show_bug.cgi?id=1084875
http://www.openssl.org/news/secadv_20140407.txt
http://git.openssl.org/gitweb/?p=openssl.git;a=commit;h=96db9023b881d7cd9f379b0c154650d6c108e9a3
já está corrigido. pelo menos no git.
Tenho uns servers rhel ainda com a 0.9.8 e pelos vistos nao esta vulneravel… ufa.
RHEL 4 ??
trololo
Atenção aí à rapaziada com contas no Yahoo!
https://www.tuxpt.com/forum/Thread-Vulnerabilidade-no-OpenSSL-1-0-1g?pid=831#pid831
Ops.
Parece que abriu a época de caça aos bugs de enorme impacto no open source…
E mais um bug em código aberto que obviamente ninguém se preocupou em alguma vez validar.
Até se percebe, não é que se esteja a falar de código altamente sensível e onde erros tenham consequências potencialmente desastrosas por isso é perfeitamente razoável que um erro no código que permite aceder às chaves privadas dos servidores de forma indetetável e aceder a todas as comunicações encriptadas tenha existido durante 2 anos e meio, pelo menos.
E não estamos a falar só de servidores web, o que não falta por aí são aplicações dos mais variados tipos que usam o OpenSSL e que estão vulneráveis.
Se calhar era altura do pessoal do open source começar a olhar para coisas como esta http://blogs.msdn.com/b/sdl/archive/2009/05/14/please-join-me-in-welcoming-memcpy-to-the-sdl-rogues-gallery.aspx, reparem na data, 14 de maio de 2009, e começar a fazer o mesmo, banir do código funções intrinsecamente inseguras como o memcpy em vez de simplesmente dizer “Pfff! Microsoft! BSOD! LOL!!!”.
Porque só um idiota é que não aprende com os erros dos outros.
Como diz no proprio artigo que citaste, não é por “banires” uma função que vais corrigir o problema. Continuas a conseguir usa-la da maneira errada. Ainda assim, o memcpy não é das piores, as str*() e *gets() são bem piores e muitas delas já vem com grandes warnings nos manuais.
para quem precisar de actualizar esta aqui um pequeno script que trata do assunto
#!/bin/sh
wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz
sleep 1
tar zxvf openssl-1.0.1g.tar.gz
cd openssl-1.0.1g
sleep 1
./config –prefix=/usr –openssldir=/usr/local/openssl shared
sleep 1
make
sleep 1
make test
sleep 1
make install
Olá Luis Gomes, boa tarde.
Esse script mencionado acima também serve para atualização Ubuntu server 12.04LTS?
Depois de executar o script precisa fazer algo mais?
Desculpe a pergunta mas é que sou extremamente leigo no assunto.
Obrigado.
Boa tarde,
Sim, em principio correrá sem problemas uma vez que o script complia o codigo apartir do codigo fonte… ou seja nao depende de uma plataforma especifica (redhat, debian etc.)
os unicos problemas que podera encontrar e a nivel de dependencias aquando da compilaçao, mas se tiver algum erro coloque aqui que eu dou lhe uma ajuda
apos executar o script e instalar so tem que correr o seguinte comando para verificar se o openssl ficou actualizado:
openssl version
desculpe qualquer erro visto eu estar a utilizar o telemovel
No Ubuntu 13.10
sudo apt-get dist-upgrade
Em principio não precisam de fazer reboot, pois é feito um restart ao Apache.
Nota: Devem fazer o seguinte, pois podem ter sido atacados:
– trocar as vossas passwords;
– trocar os certificados;
– verificar se não têm portas abertas (que não sejam precisas)
– programas em execução que não conhecem;
Por fim, apesar de haver algumas questões se empresas externas podem fazer o teste do Heartbleed, podem testar aqui:
https://www.ssllabs.com/ssltest/
o ubuntu 13 ja lancou o update no repositorio?