A conhecida falha Heartbleed, detectada em abril na suite OpenSSL, uma suite « open source » utilizada por um grande número de sites no mundo, assim como plataformas e hardware criptográficos, seis novas vulnerabilidades foram atualizadas em abril e maio por um especialista do Japão, e publicadas 5 junho pela Fundação OpenSSL.

Segundo a Fundação, o bug é um tipo de « man in the middle », ou seja, que abre uma conexão entre dois pontos encriptados graças a uma ferramenta OpenSSL e pode assim permitir a uma pessoa interceptar uma troca de dados entre os pontos da conexão. Um cenário arriscado mais comum é o uso de uma rede pública onde uma das pontas se mostra vulnerável, e basta apenas que uma delas seja desvelada. Tal falha era ainda menos perigosa que o bug Heartbleed tornado público em abril, até então presente na biblioteca OpenSSL, ainda que nenhum código para explorar esta falha tenha sido apresentado imediatamente1. O bug consiste em toda sua singeleza no mecanismo TLS Heartbeat que é construído para preservar conexões vivas ainda que nenhum dado seja efetivamente trocado. As Heartbeat messages enviadas numa rede contém dados aleatórios e um tamanho de payload. A outra ponta da rede deve responder espelhando exatamente com os mesmos dados.

Em pseudo-código a estrutura de dados assim se apresenta (note-se ainda o tamanho de 2-byte do payload):

  1. struct {
  2. HeartbeatMessageType type;
  3. uint16 payload_length;
  4. opaque payload[HeartbeatMessage.payload_length];
  5. opaque padding[padding_length];
  6. } HeartbeatMessage;

A expressão heartbeat, « batida de coração », representa este desejo manter viva a conexão na rede, por assim dizer, como na sequência de várias « batidas » que nos mantém vivos. A batida transforma-se, desgraçadamente, em hemorragia, heartbleed, porque a falta de verificação do correto perímetro (o atacante) pode desvelar uma determinada quantidade de memória (64K) armazenada entre cliente & servidor. Ali podem estar, cookies, senhas e tantas outras informações sensíveis. Resumidamente, NSFOCUS Secutity Labs: « the OpenSSL TLS Heartbeat Extension protocol implements blind trust from the length of payload in the communicating field. Lacking correct perimeter checks, this protocol may allow disclosure of data amounts up to 64K memory to any connected clients or server and with this, sensitive information contained in that memory data can also be exposed. This Heatbeat defect can be exploited to access sensitive user data stored in millions of servers or by clients—data such as licenses, cookies, and user passwords. An attacker may even eavesdrop on communications using acquired secret keys, and thereby steal data from service providers by impersonating the service providers and users ». O bug foi introduzido originalmente nesta inserção na plataforma GIT do projeto OpenSSL.

Em especial, podemos ver aqui:

2427                 /* Allocate memory for the response, size is 1 bytes

2428                  * message type, plus 2 bytes payload length, plus

2429                  * payload, plus padding

2430                  */

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

2432                 bp = buffer;

2433                 

2434                 /* Enter response type, length and copy payload */

2435                 *bp++ = TLS1_HB_RESPONSE;

2436                 s2n(payload, bp);

2437                 memcpy(bp, pl, payload);

2438                 

2439                 r = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buffer, 3 + payload + padding); 

O dados gerados maliciosamente contém um payload, que incorretamente o software confia cegamente sem as devidas verificações. O OpenSSL assim procede a resposta com o buffer, copiando os dados presentes no ponteiro « pl »:


memcpy(bp, pl, payload);

Apesar do tom quase sempre bombástico da mídia não-especializada (por exemplo: Falha 'Heartbleed' é uma catástrofe2, , e mesmo naquela que trata do tema tecnologia, tais vulnerabilidade e falhas são sempre passíveis de serem encontradas, não há engenharia e implementação perfeita -, seja no mundo open source seja no de softwares não abertos. Encontrado o bug, seja qual for, tão logo possa, deve o o responsável pela infraestrutura aplicar as devidas correções e atualizações.

Enfim, não foi o armagedom, todos continuamos usando a Rede, aproveitando seus recursos, fazendo negócios, política, interação em redes sociais, até que uma próxima falha seja encontrada.


Referências:
1. http://www.lemonde.fr/economie/article/2014/06/06/apres-heartbleed-une-nouvelle-faille-de-securite-dans-openssl_4433841_3234.html
2. http://www.heartbleed.com.br/
3. http://www.nsfocus.com/2014/SecurityView_0417/169.html

 
Revisão v. 1.9a
 
  1. Alguns scripts logo apareceram para que se testassem a vulnerabilidade Heartbleed, o mais conhecido foi o ssltest.py, que pode ser visto aqui []
  2. http://g1.globo.com/tecnologia/blog/seguranca-digital/post/falha-heartbleed-e-uma-catastrofe.html []