No primeiro dia de 2016, a Mozilla encerrou o suporte para uma tecnologia de segurança enfraquecida chamada SHA-1 no navegador Firefox. Quase imediatamente, eles reverteram sua decisão, pois isso cortaria o acesso a alguns sites mais antigos. Mas em fevereiro de 2017, seus medos finalmente se tornaram realidade: os pesquisadores quebraram o SHA-1 criando o primeiro ataque de colisão do mundo real . Aqui está o que tudo isso significa.
Índice
O que é SHA-1?
O SHA em SHA-1 significa Secure Hash Algorithm e, simplesmente, você pode pensar nele como um tipo de problema matemático ou método que embaralha os dados que são colocados nele . Desenvolvido pela NSA dos Estados Unidos, é um componente central de muitas tecnologias usadas para criptografar transmissões importantes na Internet. Métodos comuns de criptografia SSL e TLS, dos quais você já deve ter ouvido falar, podem usar uma função hash como SHA-1 para criar os certificados assinados que você vê na barra de ferramentas do navegador.
Não vamos nos aprofundar na matemática e ciência da computação de qualquer uma das funções SHA, mas aqui está a ideia básica. Um “hash” é um código exclusivo baseado na entrada de quaisquer dados . Mesmo uma seqüência pequena e aleatória de letras inseridas em uma função hash como SHA-1 retornará um número longo e definido de caracteres, tornando (potencialmente) impossível reverter a seqüência de caracteres de volta aos dados originais. É assim que geralmente funciona o armazenamento de senha. Quando você cria uma senha, sua entrada de senha é criptografada e armazenada pelo servidor. Ao retornar, quando você digita sua senha, ela é criptografada novamente. Se corresponder ao hash original, a entrada pode ser considerada a mesma e você terá acesso aos seus dados.
As funções de hash são úteis principalmente porque tornam mais fácil saber se a entrada, por exemplo, um arquivo ou uma senha, foi alterada. Quando os dados de entrada são secretos, como uma senha, o hash é quase impossível de reverter e recuperar os dados originais (também conhecido como “chave”). Isso é um pouco diferente de “criptografia”, cujo propósito é embaralhar dados com o propósito de decodificá-los posteriormente , usando cifras e chaves secretas. Hashes destinam-se simplesmente a garantir a integridade dos dados – para garantir que tudo seja igual. Git, o software de controle de versão e distribuição de código-fonte aberto, usa hashes SHA-1 exatamente por esse motivo .
São muitas informações técnicas, mas para simplificar: um hash não é a mesma coisa que criptografia, já que é usado para identificar se um arquivo foi alterado .
Como essa tecnologia me afeta?
Digamos que você precise visitar um site com privacidade. Seu banco, seu e-mail e até mesmo sua conta do Facebook – todos usam criptografia para manter os dados que você envia privados. Um site profissional fornecerá criptografia obtendo um certificado de uma autoridade confiável – um terceiro, de confiança para garantir que a criptografia seja no nível, privada entre o site e o usuário, e não sendo espionada por nenhuma outra parte. Esse relacionamento com terceiros, chamados de Autoridades de Certificação , ou CA , é crucial, pois qualquer usuário pode criar um certificado “autoassinado” – você mesmo pode fazer isso em uma máquina rodando Linux com Open SSL . Symantec e Digicert são duas empresas CA amplamente conhecidas, por exemplo.
Vamos examinar um cenário teórico: o How-To Geek deseja manter as sessões dos usuários conectadas privadas com criptografia, portanto, solicita a uma CA como a Symantec com uma solicitação de assinatura de certificado , ou CSR . Eles criam uma chave pública e uma chave privada para criptografar e descriptografar dados enviados pela Internet. A solicitação de CSR envia a chave pública para a Symantec junto com informações sobre o site. A Symantec compara a chave com seu registro para verificar se os dados não foram alterados por todas as partes, porque qualquer pequena mudança nos dados torna o hash radicalmente diferente.
Essas chaves públicas e certificados digitais são assinados por funções hash, porque a saída dessas funções é fácil de ver. Uma chave pública e um certificado com um hash verificado da Symantec (em nosso exemplo), uma autoridade, garante a um usuário do How-To Geek que a chave não foi alterada e não foi enviada por alguém mal-intencionado.
Como o hash é fácil de monitorar e impossível (alguns diriam “difícil”) de reverter, a assinatura hash correta e verificada significa que o certificado e a conexão podem ser confiáveis e os dados podem ser enviados criptografados de ponta a ponta . Mas e se o hash não fosse realmente único ?
O que é um ataque de colisão e é possível no mundo real?
Você pode ter ouvido falar do “Problema do Aniversário” em matemática , embora não saiba como era chamado. A ideia básica é que, se você reunir um grupo grande o suficiente de pessoas, há grandes chances de que duas ou mais pessoas façam aniversário no mesmo dia. Mais do que você esperava, na verdade – o suficiente para parecer uma coincidência estranha. Em um grupo de apenas 23 pessoas, há 50% de chance de que dois façam aniversário.
Esta é a fraqueza inerente a todos os hashes, incluindo SHA-1. Teoricamente, a função SHA deve criar um hash exclusivo para todos os dados colocados nela, mas à medida que o número de hashes aumenta, torna-se mais provável que diferentes pares de dados possam criar o mesmo hash. Portanto, pode-se criar um certificado não confiável com um hash idêntico a um certificado confiável. Se eles fizerem com que você instale esse certificado não confiável, ele pode se disfarçar como confiável e distribuir dados maliciosos.
Encontrar hashes correspondentes em dois arquivos é chamado de ataque de colisão . Sabe-se que pelo menos um ataque de colisão em grande escala já ocorreu para hashes MD5. Mas em 27 de fevereiro de 2017, o Google anunciou o SHAttered , a primeira colisão criada para o SHA-1. O Google conseguiu criar um arquivo PDF com o mesmo hash SHA-1 de outro arquivo PDF, apesar de ter conteúdo diferente.
SHAttered foi executado em um arquivo PDF. PDFs são um formato de arquivo relativamente flexível; muitas pequenas alterações no nível de bits podem ser feitas sem impedir que os leitores abram ou causem quaisquer diferenças visíveis. Os PDFs também são freqüentemente usados para entregar malware. Embora o SHAttered possa funcionar em outros tipos de arquivos, como ISOs, os certificados são especificados de forma rígida, tornando esse tipo de ataque improvável.
Então, quão fácil é realizar esse ataque? O SHAttered foi baseado em um método descoberto por Marc Stevens em 2012 que exigia mais de 2 ^ 60,3 (9,223 quintilhões) de operações SHA-1 – um número impressionante. No entanto, esse método ainda é 100.000 vezes menos operações do que seria necessário para obter o mesmo resultado com força bruta. O Google descobriu que, com 110 placas gráficas de última geração trabalhando em paralelo, levaria aproximadamente um ano para produzir uma colisão. O aluguel desse tempo de computação do Amazon AWS custaria cerca de US $ 110.000. Lembre-se de que, à medida que os preços das peças do computador caem e você pode obter mais energia com menos, ataques como o SHAttered se tornam mais fáceis de realizar.
US $ 110.000 pode parecer muito, mas está dentro do reino de acessibilidade para algumas organizações – o que significa que os cibervilianos da vida real podem falsificar assinaturas de documentos digitais, interferir em sistemas de backup e controle de versão como Git e SVN ou fazer um ISO Linux malicioso parecer legítimo.
Felizmente, existem fatores atenuantes que impedem esses ataques. SHA-1 raramente é usado para assinaturas digitais mais. As autoridades de certificação não fornecem mais certificados assinados com SHA-1 e o Chrome e o Firefox abandonaram o suporte para eles. As distribuições do Linux normalmente são lançadas com mais frequência do que uma vez por ano, tornando impraticável para um invasor criar uma versão maliciosa e então gerar uma versão preenchida para ter o mesmo hash SHA-1.
Por outro lado, alguns ataques baseados em SHAttered já estão acontecendo no mundo real. O sistema de controle de versão SVN usa SHA-1 para diferenciar arquivos. Carregar os dois PDFs com hashes SHA-1 idênticos para um repositório SVN fará com que ele seja corrompido .
Como posso me proteger de ataques SHA-1?
Não há muito para o usuário típico fazer. Se estiver usando somas de verificação para comparar arquivos, você deve usar SHA-2 (SHA-256) ou SHA-3 em vez de SHA-1 ou MD5. Da mesma forma, se você for um desenvolvedor, certifique-se de usar algoritmos de hash mais modernos, como SHA-2, SHA-3 ou bcrypt. Se você está preocupado porque o SHAttered foi usado para fornecer o mesmo hash a dois arquivos distintos, o Google lançou uma ferramenta no site do SHAttered que pode verificar para você.
Créditos de imagem: Lego Firefox , muito hash , por favor, não machuque o autor da Web desconhecido, Google .