O que é SHAttered? Ataques de colisão SHA-1, explicados
No primeiro dia de 2016, a Mozilla encerrou o suporte a uma tecnologia de segurança enfraquecida chamada SHA-1 no navegador da web Firefox. Quase imediatamente, eles reverteram sua decisão, já que isso cortaria o acesso a alguns sites mais antigos. Mas em fevereiro de 2017, seus medos finalmente se tornaram realidade: pesquisadores quebraram o SHA-1 criando o primeiro ataque de colisão do mundo real. Aqui está o que tudo isso significa.
O que é SHA-1?
O SHA em SHA-1 significa Algoritmo de hash seguro, e, simplesmente, você pode pensar nisso como um tipo de problema de matemática ou método que embaralha os dados que são colocados nele. Desenvolvido pela NSA dos Estados Unidos, é um componente essencial de muitas tecnologias usadas para criptografar transmissões importantes na Internet. Os métodos comuns de criptografia SSL e TLS, dos quais você pode 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 na ciência da computação de nenhuma das funções do SHA, mas aqui está a idéia básica. Um "hash" é um código único baseado na entrada de qualquer dado. Até mesmo uma pequena seqüência 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 string de caracteres para os dados originais. É assim que o armazenamento de senhas geralmente funciona. Quando você cria uma senha, sua entrada de senha é armazenada em hash e armazenada pelo servidor. Após o seu retorno, 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 hash são úteis principalmente porque facilitam 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 conhecidos como “chave”). Isso é um pouco diferente de “criptografia”, cuja finalidade é embaralhar dados com o propósito de descodificá-los mais tarde, usando cifras e chaves secretas. Os hashs servem apenas para garantir a integridade dos dados - para garantir que tudo seja igual. Git, o software de controle e distribuição de versão para código aberto, usa hashes SHA-1 por esse motivo.
Isso é muita informação técnica, mas para simplificar: um hash não é a mesma coisa que criptografia, é usado para identificar se um arquivo foi alterado.
Como essa tecnologia me afeta??
Vamos dizer que você precisa visitar um site em particular. Seu banco, seu e-mail, até mesmo sua conta do Facebook - todos usam criptografia para manter os dados que você envia para eles privados. Um site profissional fornecerá criptografia obtendo um certificado de uma autoridade confiável - um terceiro, confiável para garantir que a criptografia esteja no nível, privada entre o site e o usuário e não seja espionada por nenhuma outra parte. Esse relacionamento com o terceiro, chamado Autoridades de Certificação, ou CA, é crucial, uma vez que qualquer usuário pode criar um certificado "auto-assinado" - você mesmo pode fazer isso sozinho em uma máquina rodando Linux com Open SSL. A Symantec e a Digicert são duas empresas de CA amplamente conhecidas, por exemplo.
Vamos percorrer um cenário teórico: How-To Geek quer manter as sessões dos usuários logadas privadas com criptografia, por isso requer uma CA como a Symantec com um Solicitação de Assinatura de Certificado, ou CSR. Eles criam um chave pública e chave privada para criptografar e descriptografar dados enviados pela Internet. A solicitação de CSR envia a chave pública à Symantec junto com informações sobre o site. A Symantec verifica a chave em relação ao seu registro para verificar se os dados estão inalterados por todas as partes, porque qualquer pequena alteração 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 certificado com um hash verificado da Symantec (em nosso exemplo), uma autoridade, garante ao 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 verificada e correta 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 foi realmente único?
O que é um ataque de colisão e é possível no mundo real?
Você pode ter ouvido falar do "Problema de Aniversário" em matemática, embora você possa não saber o que foi chamado. A ideia básica é que, se você reunir um grupo grande de pessoas, é bem provável que duas ou mais pessoas tenham o mesmo aniversário. Mais alto do que você esperaria, na verdade - o suficiente para que pareça uma estranha coincidência. Em um grupo tão pequeno quanto 23 pessoas, há 50% de chance de que dois compartilhem um aniversário.
Esta é a fraqueza inerente em todos os hashes, incluindo o SHA-1. Teoricamente, a função SHA deve criar um hash exclusivo para todos os dados inseridos, mas à medida que o número de hashes aumenta, torna-se mais provável que diferentes pares de dados possam criar o mesmo hash. Assim, pode-se criar um certificado não confiável com um hash idêntico a um certificado confiável. Se eles conseguissem instalar esse certificado não confiável, ele poderia se passar por confiável e distribuir dados mal-intencionados.
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á aconteceu para hashes MD5. Mas em 27 de fevereiro de 2017, o Google anunciou o SHAttered, a primeira colisão trabalhada para o SHA-1. O Google conseguiu criar um arquivo PDF que tinha o mesmo hash SHA-1 de outro arquivo PDF, apesar de ter um conteúdo diferente.
O SHAttered foi executado em um arquivo PDF. Os PDFs são um formato de arquivo relativamente solto; Muitas pequenas alterações no nível de bits podem ser feitas sem impedir que os leitores o abram ou causem diferenças visíveis. Os PDFs também costumam ser usados para entregar malware. Embora o SHAttered possa funcionar em outros tipos de arquivos, como ISOs, os certificados são rigidamente especificados, tornando improvável um ataque desse tipo..
Então, quão fácil é esse ataque para executar? SHAttered foi baseado em um método descoberto por Marc Stevens em 2012, que exigiu 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 high-end trabalhando em paralelo, levaria aproximadamente um ano para produzir uma colisão. Alugar esse tempo de computação do Amazon AWS custaria cerca de US $ 110.000. Tenha em mente que à medida que os preços caem para peças de computador e você pode obter mais energia por menos, ataques como o SHAttered tornam-se mais fáceis de serem executados.
US $ 110.000 podem parecer muito, mas estão no âmbito da acessibilidade para algumas organizações - o que significa que os cibervilos da vida real podem forjar assinaturas de documentos digitais, interferir nos sistemas de backup e controle de versão como Git e SVN ou fazer com que uma ISO Linux maliciosa pareça legítima.
Felizmente, existem fatores atenuantes que impedem tais ataques. O SHA-1 é raramente usado para assinaturas digitais. As autoridades de certificação não fornecem mais certificados assinados com o SHA-1, e tanto o Chrome quanto o Firefox perderam o suporte para eles. Normalmente, as distribuições Linux são lançadas com mais freqüência do que uma vez por ano, o que torna impraticável que um invasor crie uma versão mal-intencionada e, em seguida, gere um preenchido para ter o mesmo hash SHA-1.
Por outro lado, alguns ataques baseados no SHAttered já estão acontecendo no mundo real. O sistema de controle de versão do SVN usa o SHA-1 para diferenciar arquivos. Fazer o upload dos dois PDFs com hashes SHA-1 idênticos para um repositório SVN fará com que ele corrompa.
Como posso me proteger contra ataques de SHA-1??
Não há muito para o usuário típico fazer. Se você estiver usando somas de verificação para comparar arquivos, deverá usar SHA-2 (SHA-256) ou SHA-3 em vez de SHA-1 ou MD5. Da mesma forma, se você for um desenvolvedor, use algoritmos de hash mais modernos, como SHA-2, SHA-3 ou bcrypt. Se você está preocupado que o SHAttered tenha sido usado para fornecer dois arquivos distintos com o mesmo hash, o Google lançou uma ferramenta no site do SHAttered que pode verificar você.
Créditos de Imagem: Lego Firefox, Muito Hash, Por Favor, Não Machuque o Autor da Web Desconhecido, Google.