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