Falha grave no OpenSSL deixa milhões de sites vulneráveis

18 Comentários

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.

openssl_00

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.

chave_publica_chave_privada

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

Comentários

18

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de M
    M

    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

  2. Avatar de dreadster
    dreadster

    Ui lá se vai as chaves privadas das assinaturas das facturas a enviar para as finanças 😀

  3. Avatar de Miguel
    Miguel

    O ppl descontrai, eu já uso a OpenSSL 1.0.2 desde fevereiro nos meus sites.

    1. Avatar de TuxPT

      pois… a versão 1.0.2 também está vulnerável. Só na proxima beta não estará.

  4. Avatar de Aybara
    Aybara

    Tenho uns servers rhel ainda com a 0.9.8 e pelos vistos nao esta vulneravel… ufa.

    1. Avatar de Rui Moreira
      Rui Moreira

      RHEL 4 ??

  5. Avatar de Carlos
    Carlos

    Ops.
    Parece que abriu a época de caça aos bugs de enorme impacto no open source…

  6. Avatar de Carlos
    Carlos

    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.

    1. Avatar de TuxPT

      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.

  7. Avatar de Luis Gomes

    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

    1. Avatar de Pedro Dias

      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.

      1. Avatar de Luis Gomes
        Luis Gomes

        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

  8. Avatar de Luis Gomes
    Luis Gomes

    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

  9. Avatar de Pedro Tarrinho
    Pedro Tarrinho

    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/

  10. Avatar de Luis Gomes
    Luis Gomes

    o ubuntu 13 ja lancou o update no repositorio?