SHAttered – Colisão do SHA-1 Encontrada

por | mar 1, 2017 | Análises Técnicas, Dicas de Segurança | 0 Comentários

Dia 23 de fevereiro foi anunciada a computação da primeira colisão da função de hash SHA-1, em um trabalho de pesquisadores do Google e do centro de pesquisa CWI Amsterdam. Neste post será dada uma breve explicação de funções de hash e do SHA-1 para se entender o impacto desta notícia.

Funções de Hash

Uma função de hash é um mecanismo que, dado um conjunto de dados qualquer (como um arquivo), computa um “resumo criptográfico”: uma sequência pequena de bytes que identifica unicamente aqueles dados. Ela é utilizada, por exemplo, em assinaturas digitais: ao invés de assinar um documento diretamente (o que não é possível por limitações dos esquema de assinatura, que não aceitam dados muito grandes), o seu hash é calculado e ele então assinado. Esta abordagem é segura desde que a função de hash seja segura: isto é, seja difícil gerar documentos diferentes que tenham o mesmo hash (ataque de colisão) e que seja difícil encontrar um documento que tenha um hash específico (ataque de inversão). Um ataque de colisão permitiria, por exemplo, que um atacante troque um contrato que você assinou digitalmente por um outro contrato com termos diferentes.

Ataques Contra Funções de Hash

É sempre possível realizar um ataque de colisão através de força bruta. Por exemplo, uma colisão em uma função de hash com tamanho de 256 bits pode ser calculada por força bruta com 2^128 cálculos. Porém, este é um número gigantesco, e tal computação é totalmente inviável. O SHA-1 possui tamanho de 160 bits, e portanto o ataque de força bruta exige 2^80 cálculos. Tal esforço, apesar de muito menor, ainda é inviável.

Em 2007, foi encontrado um ataque de colisão contra o SHA-1 que exige 2^69 cálculos. Na criptografia, um esquema geralmente passa a ser considerado inseguro quando se encontra um ataque mais eficiente que o de força bruta. Porém, na época, não havia recursos suficientes para executar o ataque de fato, e ele permaneceu um ataque teórico. Por causa disso, o SHA-1 continuou sendo utilizado em muitas aplicações, apesar dos avisos dos pesquisadores que seria necessário migrar para outras funções de hash, como o SHA-256 ou SHA-512, para os quais não são conhecidos nenhum ataque melhor que força bruta, e para os quais o ataque de força bruta é totalmente inviável.

Isso nos leva ao presente, onde os pesquisadores mencionados juntaram avanços teóricos (baixando a complexidade do ataque para 2^63 cálculos) e tecnológicos (uma grande quantidade de CPUs e GPUs disponíveis na infraestrutura do Google) conseguiram finalmente executar o ataque na prática, gerando dois arquivos PDF com o mesmo hash SHA-1. Os cálculos exigiram o equivalente a 6500 CPUs e 110 GPUs trabalhando por um ano ininterruptamente.

MD5

Para se entender o fluxo de acontecimentos relacionados ao SHA-1, vale a pena relembrar o histórico do MD5, a função de hash de 128 bits que foi o predecessor do SHA-1. Em 2004, foi descoberto um ataque de colisão, que permaneceu teórico. Em 2005, pesquisadores realizaram o ataque na prática, gerando dois certificados com o mesmo hash. Porém, o ataque ainda era restrito e os certificados só diferiam na chave pública, o que não permitia ataques na prática. Em 2008, foi divulgado um ataque melhorado e foi possível gerar dois certificados com o mesmo hash, um legítimo e outro malicioso, e este certificado malicioso era capaz de emitir qualquer outro certificado. Finalmente, em 2012, o malware Flame foi descoberto utilizando colisões MD5 para infectar computadores em redes do oriente médio, através de comprometimento do mecanismo do Windows Update.

Portanto, mesmo 7 anos depois desde o primeiro cálculo de colisão (o ponto onde agora estamos com o SHA-1), ainda era possível realizar ataques contra o MD5, porque ele continuava sendo aceito por muitos sistemas. Assim, é razoável prever que o SHA-1 continuará sendo usado por um bom tempo, e que ele será atacado ativamente nos anos futuros; mas se espera que as lições aprendidas com o MD5 diminuam o tempo de resposta pelos desenvolvedores.

Implicações

Como mencionado, pode-se atacar aplicações de assinaturas digitais, forjando-se documentos que possuam assinaturas válidas. A demonstração da colisão SHA-1 explora justamente a maleabilidade formato PDF para ser capaz de gerar, a partir de duas imagens quaisquer, dois documentos PDF com o mesmo SHA-1, se aproveitando de uma única colisão. Com isso, já existe um gerador online de colisões PDF: https://alf.nu/SHA1.

Na infraestrutura de certificados digitais, porém, o impacto não é imediato devido à limitações técnicas do ataque presente: ele é capaz de gerar colisão entre dois documentos com o mesmo prefixo e mesmo sufixo, diferindo apenas em dois blocos de dados internos; para se atacar certificados, é necessário um ataque que permite prefixos abitrários. Porém, é uma questão de tempo para que o ataque seja aperfeiçoado.

Uso Atual do SHA-1

Por um lado, muitas aplicações já migraram do SHA-1 devido ao conhecimento prévio de sua vulnerabilidade. Um fator importante nessa migração foi a decisão dos desenvolvedores dos navegadores (Chrome, Firefox, Edge) de não indicar como seguras conexões que utilizem o SHA-1. Com isso, atualmente, nenhum do 1 milhão de sites mais populares utilizam o SHA-1. (https://www.trustworthyinternet.org/ssl-pulse/)

Por outro lado, muitas outras aplicações ainda utilizam o SHA-1, como o sistema de versionamento de arquivos Git. Tais aplicações estão agora vulneráveis a ataques e devem ser arrumadas o mais rápido possível, migrando o uso do SHA-1 por SHA-256, SHA-512 ou SHA-3. Em alguns casos envolvendo hardware a migração é praticamente impossível, como os chips TPM versão 1.2 utilizados em alguns processadores para obter recursos como boot seguro. Um software também pode parar de funcionar corretamente ao se deparar com uma colisão, o que aconteceu com o sistema de versionamento de arquivos SVN: https://arstechnica.com/security/2017/02/watershed-sha1-collision-just-broke-the-webkit-repository-others-may-follow/

O Que Fazer

Como usuário final: só é possível esperar que aplicações sejam atualizadas. Navegadores, como mencionado, já se recusam a marcar como seguras conexões que utilizem o SHA-1; atente-se sempre aos indicadores de segurança na barra de endereço.

Como desenvolvedor: verifique se o SHA-1 está sendo utilizando em algum produto e planeje a migração. Investigue se algum certificado o utiliza; se sim; emita novos certificados utilizando SHA-256 ou similares. Os autores do ataque também escreveram um software capaz de detectar tentativas de colisão, observando que o ataque deixa traços detectáveis nos dados (https://github.com/cr-marcstevens/sha1collisiondetection). O HMAC com SHA-1 ainda é considerado seguro por ele depender da segurança contra ataques de inversão de hash (ainda inviáveis), e não de colisão; de qualquer modo, a migração é sempre recomendada.

Conrado Gouvêa

Conrado Gouvêa

Desenvolvedor de soluções criptográficas.

Doutor em Ciência da Computação pela Unicamp na implementação eficiente de criptografia.

0 comentários

Enviar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

CONTACT US

CONTACT US


Av. Romeu Tórtima, 554
Barão Geraldo - Campinas-SP - Brasil
CEP 13084-791

fale.conosco@kryptus.com
Tel/Fax +55 (19) 3112 5000

© 2018 - Kryptus | Shaping Trusted Bonds - All rights reserved. - Developed by DDID