Afinal, o que é Heartbleed? Quais as providências a serem tomadas?

Na última semana foi divulgada uma vulnerabilidade muito grave no código do OpenSSL, que é utilizado em uma parcela significativa dos servidores existentes na Internet, e pode gerar problemas aos usuários e empresas. Para piorar, esta vulnerabilidade estava no código do OpenSSL desde 2011, o que pode indicar que venha sendo explorada já há algum tempo.

O OpenSSL é uma biblioteca open source de criptografia, adotada por aproximadamente 2 em cada 3 servidores de empresas para blindar comunicações. É ela a responsável por colocar o S no HTTPS e o cadeado na barra de endereços dos sites seguros, por exemplo.

Esta falha, denominada Heartbleed, permite que um atacante capture pedaços de dados carregados em memória em um servidor que rode a versão vulnerável da biblioteca, eventualmente comprometendo informações importantes.

O problema já foi corrigido e uma nova versão do código já está disponível para atualização.

Mas ainda há bastante a fazer!

Heart Bleed

Tecnicamente falando sobre o bug Heartbleed

A falha explora um bug na implementação do TLS Heartbeat do OpenSSL, nas versões 1.0.1 até 1.0.1f, que permite que um atacante consiga ler uma área de memória de 64kb do OpenSSL e com isso acessar informações privilegiadas a que o processo tenha acesso, como as chaves privadas utilizadas para criptografar o tráfego HTTPS, logins, senhas, e informações trafegadas através do acesso.

Veja também:

A estimativa é que a falha tenha atingido cerca de 17.5% dos sites da internet [1], cerca de 500 milhões, mas o número pode ser bem maior, pois a falha também afeta outros serviços que podem utilizar a mesma biblioteca, como SMTP, VPN, IMAP e MySQL.

A extensão TLS Heartbeat foi criada para manter viva a conexão TLS sem a necessidade de renegociação de chaves e foi implementada em dezembro de 2011. No dia 7 de abril de 2014 foi anunciada a falha. Não se sabe desde quando a falha foi explorada, mas há indícios de explorações ao menos há 5 meses. [2]

Como o bug HeartBleed funciona

As mensagens de comunicação SSL/TLS se baseiam na estrutura SSL3_RECORD, onde a variável length define o tamanho total do pacote da mensagem SSL [3].

struct ssl3_record_st
{
int type;
unsigned int length; /* How many bytes available */
[…]
unsigned char *data; /* HeartbeatMessage goes here */
[…]
} SSL3_RECORD;

O protocolo Heartbeat por sua vez é bem simples e consiste de dois módulos: de requisição heartbeat_request e resposta heartbeat_response, como um addon ao OpenSSL. Essas mensagens são formatadas de acordo com a estrutura HeartbeatMessage:

struct
{
HeartbeatMessageType type;
uint16 payload_length;
opaque payload[HeartbeatMessage.payload_length];
opaque padding[padding_length];
} HeartbeatMessage;

Quando o servidor inicia uma requisição ele aloca em memória espaço suficiente para o pacote que ele deseja enviar e assim configura os campos payload_length de HeartbeatMessage e length de SSL3_RECORD:

buffer = OPENSSL_malloc(1 + 2 + payload + padding);

Um atacante por sua vez ao responder informa um valor de payload_length maior que o necessário, que sendo um inteiro unsigned de 16-bit pode ter o valor máximo de 2^16-1, ou seja, 65535 bytes ou 64kb, incoerente com o valor do length do SSL3_RECORD declarado inicialmente.

A RFC 6250 [4] que trata da extensão Heartbeat ao TLS e DTLS, explicita que “When a HeartbeatRequest message is received […] the receiver MUST send a corresponding HeartbeatResponse message carrying an exact copy of the payload of the received HeartbeatRequest.”, ou seja, “Quando uma mensagem HeartbeatRequest é recebida […] o recipiente DEVE enviar uma mensagem HeartbeatResponse correspondente carregando uma cópia exata do payload que foi recebido pelo HeartbeatRequest.”

Como o servidor não verifica o valor de payload_length, ele responde com bytes da própria memória, que não foram alocadas para o Heartbeat, enviando assim informações fora da área de memória da função, contendo dados aleatórios do processo.

Como o ataque pode ocorrer repetidamente e extrair até 64kb de informação por vez, a falha pode expor informações críticas como senhas e chaves de criptografia privada, que podem levar a ataques do tipo man-in-the-middle.

Como corrigir o bug Heartbleed

Se você é um administrador de sistema, verifique e atualize os seus servidores. Tenha em mente que as versões do OpenSSL de 1.0.1 até o 1.0.1f (inclusive) são vulneráveis. Versões anteriores à 1.0.1, como a 1.0.0 e 0.9.8, não são vulneráveis. E que a versão 1.0.1g corrige o bug, portanto não é vulnerável.

Para verificar se seus servidores estão vulneráveis, utilize o comando abaixo:

$ echo -e “quit\n” | openssl s_client -connect seuhost:443 -tlsextdebug 2>&1| grep ‘TLS server extension “heartbeat” (id=15), len=1’
Também é importante gerar novos certificados para servidores que estiveram vulneráveis.

No caso dos usuários finais, é importante a troca de todas as senhas em sites ou serviços que possam ter sido comprometidos. Mas antes de trocar, assegure-se que o provedor do serviço já corrigiu o problema. Alguns sites que sabidamente foram afetados e cujas senhas deverão ser trocadas são Facebook, Google e serviços como YouTube e Gmail, Yahoo e serviços como Yahoo! Mail Tumblr. Pinterest, serviços de computação em nuvem Amazon (ex. EC2), Dropbox, SoundCloud e IFTTT.

Diversos sites estão publicando listas de sites em que você vai precisar trocar as suas senhas.

Felipe Lemos

Foto-mini-currículo-Felipe-Lemos

 

Coordenador de Redes da Módulo Security Solutions, com larga experiência em Administração de Redes e Infraestrutura, com foco em segurança e um forte compromisso com as melhores práticas e processos de melhoria contínua.

 

 

Compartilhe conhecimentoShare on LinkedInShare on FacebookTweet about this on TwitterShare on Google+
http://segurancadainformacao.modulo.com.br/wp-content/uploads/2014/04/27.pnghttp://segurancadainformacao.modulo.com.br/wp-content/uploads/2014/04/27.pngFelipe LemosCiberdefesacibersegurança,heartbleed,segurança da informação
Afinal, o que é Heartbleed? Quais as providências a serem tomadas? Na última semana foi divulgada uma vulnerabilidade muito grave no código do OpenSSL, que é utilizado em uma parcela significativa dos servidores existentes na Internet, e pode gerar problemas aos usuários e empresas. Para piorar, esta vulnerabilidade estava no...