
Uma ferramenta de pesquisa projetada para verificar a vulnerabilidade OpenSSL CVE-2014-0160
Uma ferramenta simples escrita em Ruby que permite testar seus servidores para a vulnerabilidade OpenSSL CVE-2014-0160.
Não me responsabilizarei pelos danos que possam ser causados pelo uso desta ferramenta. Ela foi escrita para verificar servidores privados quanto a uma vulnerabilidade específica e medir possíveis vazamentos de dados relacionados a usuários sob alto tráfego. É compartilhada como uma ferramenta para auditoria de segurança interna.
Requer :
Para instalar esses pré-requisitos, primeiro baixe e instale o Ruby para sua plataforma. Em seguida, instale o Bundler com o comando gem install bundler e recupere as dependências do projeto executando bundle install no diretório raiz do projeto.
A sinopse da linha de comando é ruby src/run.rb <host> [<port>]
Se seu servidor não parecer vulnerável, a saída será semelhante a esta:
Host server:443 seems safe
Por outro lado, se estiver vulnerável, a saída exibirá cerca de 64 Kib de dados roubados da memória e mostrados como um dump hexadecimal para que você possa verificar se houve ou não divulgação de informações sensíveis.
Host server:443 is vulnerable! Heartbeat response payload : 00000000 d4 03 03 53 4a 84 a9 00 01 02 03 04 05 06 07 08 |...SJ...........| 00000010 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 |................| 00000020 19 1a 1b 00 01 a6 00 00 00 01 00 02 00 03 00 04 |................| 00000030 00 05 00 06 00 07 00 08 00 09 00 0a 00 0b 00 0c |................| 00000040 00 0d 00 0e 00 0f 00 10 00 11 00 12 00 13 00 14 |................| 00000050 00 15 00 16 00 17 00 18 00 19 00 1a 00 1b 00 1c |................| 00000060 00 1d 00 1e 00 1f 00 20 00 21 00 22 00 23 00 24 |....... .!.".#.$| 00000070 00 25 00 26 00 27 00 28 00 29 00 2a 00 2b 00 2c |.%.&.'.(.).*.+.,| 00000080 00 2d 00 2e 00 2f 00 30 00 31 00 32 00 33 00 34 |.-.../.0.1.2.3.4| ....
De acordo com as RFCs 6520 e 6066, o tamanho máximo da mensagem Heartbeat deve ser ,
,
,
ou
bytes, dependendo do uso da extensão Maximum Fragment Length ou não.
Citando a RFC 6520 :
O comprimento total de uma HeartbeatMessage NÃO DEVE exceder 2^14 ou max_fragment_length quando negociado, conforme definido na RFC 6066.
Citando a RFC 6066 :
O campo "extension_data" desta extensão DEVE conter:
enum{ 2^9(1), 2^10(2), 2^11(3), 2^12(4), (255) } MaxFragmentLength;cujo valor é o comprimento máximo de fragmento desejado. Os valores permitidos para este campo são: 2^9, 2^10, 2^11 e 2^12.
Isso significa que o tamanho máximo do chunk de dados roubados deve ser de cerca de 16 Kib. No entanto, o OpenSSL não respeita essa restrição, permitindo usar o valor máximo do campo de comprimento do payload da mensagem Heartbeat, ou seja, 65535 (0xFFFF).