[ Inicio ] [ Hacking ] [ CTFs ] [ Rant ]
.:: Brenn0 Weblog ::.

Título : O famoso e aterrorizante bug Heartbleed
Autor : brennords
Data : 09/04/2014
            

Muito tem se falado ultimamente sobre esse bug. Mas é realmente uma coisa tão séria assim? Sim, bastante.

Vi ontem (08/04/2014) links com palavras do tipo: ”Falha grave”, “OpenSSL comprometido”, “Afetar toda a internet”, “Dados sigilosos vulneráveis” e “Heartbleed” infestarem meu feed de notícias no facebook e twitter.

Extremamente curioso, abri umas 5 abas e fui ler sobre o tal bug sério.

Mas enfim, o que é esse bug e o que ele significa?

heartbleed

Primeiro deixe-me explicar o que é o software afetado: o OpenSSL.

"OpenSSL é uma implementação de código aberto dos protocolos SSL e TLS. A biblioteca implementa as funções básicas de criptografia e disponibiliza várias funções utilitárias." (De acordo com nossos manos do Wikipédia: http://pt.wikipedia.org/wiki/OpenSSL)

Sim, mas e aí?

Esse rapaz é largamente usado para criar conexões seguras usando os protocolos SSL e TLS. Traduzindo para alguns: ele é usado para conectar você e aquelas páginas (como a do seu banco) onde há um cadeadinho e “https” ao invés do “http” antes do endereço. Isso significa que você está (supostamente) usando uma conexão segura e os dados serão criptografados. Essa criptografia é usada para evitar que terceiros interceptem, leiam ou alterem os dados trocados durante a conexão (senhas, dados bancários, emails, qualquer coisa).

E o que “Heartbleed” tem haver com tudo isso?

Heartbleed é o nome de uma extensão do OpenSSL que permite manter a conexão segura entre os dois lados “viva” sem precisar renegociar a conexão, o que economiza recursos.

O bug foi batizando de “Heartbleed” (algo como “coração sangrando”) porque o pedaço de código falho reside nessa extensão.

E por que está sendo levado tão a sério? O que está em jogo caso a falha seja explorada?

Porque as consequências são graves.

  1. Esse bug está a solta há uns 2 anos;
  2. A popularidade do OpenSSL (cerca de 66% de todos os sites na internet o usam de acordo com a Netcraft). Até a data em que escrevo esse post, importantes sites como yahoo, flickr, steam e redtube usam versões vulneráveis;
  3. A exploração dessa falha não deixa pistas nos logs dos servidores, logo não é possível saber se o servidor foi comprometido.

Caso a falha seja explorada, é possível que, com um pouco de paciência, o cara que ataque o servidor obtenha, não só dados como senhas, mas as chaves de criptografia que protegem todo o tráfego e com isso em mãos já era. Com essas chaves, o atacante pode descriptografar qualquer dado já capturado e os FUTUROS dados também. Ou seja: fudeu, né?

E como a falha é explorada?

Se segure aí porque aqui vão um pouco de informações técnicas.

Basicamente, é tudo culpa dessa única linha de código:

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

Como se pode perceber, há memória alocada para o “payload + padding” e o padding é um valor controlado pelo usuário. Como não há uma checagem para essa alocação de dados, o atacante pode forçar o OpenSSL a ler partes da memória que não deveria.

Após enviar dados de forma maliciosa para a porta 443 do servidor, o atacante receberá de volta uma resposta com 64 kb de dados a mais do que deveria e que, provavelmente, não deveria ter acesso, como nomes de usuários e senhas.

Há esse limite de 64 kb porque é o limite de tamanho para a resposta que o Heartbeat dá. Mas isso não aparenta ser um problema, pois o atacante pode enviar outra requisição maliciosa, receber outros 64 kb, mandar mais uma e receber mais outros 64 kb… E repetir o processo até conseguir o que quer.

Caso se interesse, nesse link há um script escrito na linguagem Python que verifica se um servidor é vulnerável.

E nesse site também é possível testar se um servidor é vulnerável.

Não há uma solução?

Sim. Além de os servidores terem que atualizar suas versões do OpenSSL, é necessário que eles revoguem as chaves comprometidas e distribua novas.

Para os usuários comuns, na maioria das vezes o que resta é mudar as senhas de serviços que foram afetados. O tumblr e outros serviços já andam alertando seus usuários.

Alguns pensamentos

Deu pra concluir que a falha é realmente séria, certo? Além de dados como senhas, transações bancárias e outras coisas valiosas, um bug sério em uma forma popular de criptografia de dados também põe em risco a privacidade. Sabemos que na internet é difícil conseguir alguma, mas a criptografia é o que (supostamente) ainda nos permite a comunicação segura via internet.

Esse bug a solta há tanto tempo me fez lembrar dos slides da NSA e a GCHQ vazados pelo Edward Snowden que citam os esforços para se quebrar as formas de criptografia usadas na internet.

NSA Bullrun 1

Mas informações sobre isso nesse link.

A rapaziada do tor recomenda que, caso realmente precise de anonimato ou privacidade, fique fora da internet por uns dias até as coisas se acalmarem: https://blog.torproject.org/blog/openssl-bug-cve-2014-0160

E aqui finalizo meu momento “teórico da conspiração”, haha.

UPDATE 12 de abril de 2014

Sim, como eu e vários outros teorizavam, eles já sabiam dessa falha antes de nós: http://www.bloomberg.com/news/2014-04-11/nsa-said-to-have-used-heartbleed-bug-exposing-consumers.html

Fontes consultadas e links com informações mais detalhadas (todos em inglês):

http://heartbleed.com/

http://www.garage4hackers.com/entry.php?b=2551

https://github.com/musalbas/heartbleed-masstest/blob/master/top1000.txt

http://techcrunch.com/2014/04/08/openssl-heartbleed-bug-leaves-much-of-the-internet-at-risk/

http://www.troyhunt.com/2014/04/everything-you-need-to-know-about.html