sábado, 16 de agosto de 2014

HeartBleed – Falha no OpenSSL







Há poucos meses atrás, o mundo da segurança da informação foi abalado por um falha ao mesmo tempo simples e preocupante – O Heartbleed. Resumindo o Heartbleed, é uma falha no OpenSSL, software que permite ao seu computador e a um servidor saberem que são quem dizem que são. Ele deixou grandes sites – como Yahoo, Flickr e Imgur – vulneráveis ​​a roubo de dados por anos, desde 2011.

Qual o motivo da falha ter sido batizada com esse nome?

O Heartbleed não é um problema com as tecnologias TLS/SSL que criptografam a internet. Não é nem mesmo um problema com a forma como o OpenSSL funciona na teoria. É apenas um erro no código.

Quando dois servidores se preparam para fazer um aperto de mão criptografado, eles realizam algo chamado de “heartbeat” (batimento cardíaco).

Heartbeats são uma forma de dois computadores que conversam entre si garantirem que o outro ainda está vivo: dessa forma, se algo der errado durante o processo, ele não continua. Eles fazem isso enviando dados um para o outro, de forma constante:

1- O cliente, envia o seu heartbeat para o servidor (seu banco, por exemplo).

2- O servidor entrega o heartbeat entrega de volta.


Simples assim, dessa forma, se algo der errado durante a transação – por exemplo, se um computador parar de funcionar – o outro vai saber, porque os “batimentos cardíacos” saem de sincronia. Basicamente, o heartbeat envia alguns dados para o servidor  e ele precisa devolver para você exatamente os mesmos dados. Assim, garante-se que a conexão está segura.


A Vulnerabilidade


O problema real, que gerou uma crise de segurança, está nesta pequena linha de código:

memcpy(bp, pl, payload);

memcpy é um comando que copia dados, e requer três informações para fazer o trabalho – são os termos dos parênteses.

  •  pl: onde estão os dados que serão enviados no heartbeat;

  • bp: o destino final dos dados no heartbeat;

  • payload: o tamanho desses dados.

No entanto, a cópia de dados é mais complicada do que parece. Quando o heartbeat vai para o servidor de destino – seu banco, por exemplo – ele não ocupa um espaço realmente vazio de memória. Sempre há alguma coisa gravada, que o computador precisa apagar para então gravar o heartbeat.

Aí está o problema: o comando memcpy pode mentir o tamanho do heartbeat. Ele pode dizer que o arquivo tem 64KB, quando ele na verdade tem 0KB. Então o servidor, confuso, vai alocar 64KB de memória – onde pode haver dados confidenciais – e enviá-los de volta para você.

Exemplificando, diga que vai enviar um heartbeat de 64KB, envie na verdade um arquivo de 0KB, e o servidor devolve 64KB de dados – que podem conter senhas ou endereços de e-mail, por exemplo. Repita isso diversas vezes, e você pode conseguir até chaves de criptografia.


Com o Heartbleed, é possível pedir informações várias vezes a um servidor, até que ele envie de volta algo bem revelador.


O Heartbleed foi consertado com uma solução tão simples quanto a falha. Segundo Sean Cassidy, checando se o heartbeat tem comprimento zero. E garantindo que a função memcpy não está mentindo o tamanho do payload. Este tipo de erro é comum, e tem um nome: transbordamento de dados, ou estouro de buffer (buffer overflow). Ao escrever código, um dos erros mais comuns é “esquecer de fazer algo óbvio e verificar se os dados inseridos pelo usuário nunca estão errados”. 

Felizmente, não foram todas as versões do OpenSSL que são vulneráveis a essa falha, e mesmo que os sites já tenham corrigido o OpenSSL problemático, a questão está longe de ser solucionada. Qualquer dado já roubado antes ainda estará vulnerável, e assim continuará para sempre, pois como o heartbeat é um processo simples, repetido milhões de vezes por dia em todo o mundo, nunca iremos saber quais delas foram utilizadas para roubar dados. Felizmente, não há nenhum gigante de comércio online envolvido nisso. Nada de Amazon, Google, Microsoft. Nem LastPass, nem 1Password. Mas ainda é uma brecha sem precedentes e provavelmente nunca saberemos quantos sites foram atacados através dela.

Para mais informações sobre o heartbleed, visite o site oficial , e leia o texto de Sean Cassidy sobre.
O código do OpenSSL pode ser visto no GitHub.

Fonte:

http://gizmodo.uol.com.br/como-funciona-o-heartbleed/
http://gizmodo.uol.com.br/heartbleed/

Nenhum comentário:

Postar um comentário