O que é SHAttered? Ataques de colisão SHA-1, explicados

Índice:

O que é SHAttered? Ataques de colisão SHA-1, explicados
O que é SHAttered? Ataques de colisão SHA-1, explicados

Vídeo: O que é SHAttered? Ataques de colisão SHA-1, explicados

Vídeo: O que é SHAttered? Ataques de colisão SHA-1, explicados
Vídeo: Windows Tip #16 : Making Aero Peek Display Instantly - YouTube 2024, Maio
Anonim
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: os pesquisadores quebraram o SHA-1 criando o primeiro ataque de colisão do mundo real. Veja o que tudo isso significa.
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: os pesquisadores quebraram o SHA-1 criando o primeiro ataque de colisão do mundo real. Veja o que tudo isso significa.

O que é o SHA-1?

Image
Image

O SHA em SHA-1 significa Algoritmo de hash seguroe, simplesmente, você pode pensar nisso como um tipo de problema ou método de matemática 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 aprofundaremos a matemática e a ciência da computação de nenhuma das funções do SHA, mas aqui está a ideia 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 seqüência de caracteres de volta aos dados originais. É assim que o armazenamento de senhas geralmente funciona. Quando você cria uma senha, sua entrada de senha é criptografada 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.
Não aprofundaremos a matemática e a ciência da computação de nenhuma das funções do SHA, mas aqui está a ideia 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 seqüência de caracteres de volta aos dados originais. É assim que o armazenamento de senhas geralmente funciona. Quando você cria uma senha, sua entrada de senha é criptografada 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 de 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”, cujo propósito é 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. O Git, o software de controle e distribuição de versão para código-fonte aberto, usa hashes SHA-1 por esse mesmo motivo.
As funções de 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”, cujo propósito é 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. O Git, o software de controle e distribuição de versão para código-fonte aberto, usa hashes SHA-1 por esse mesmo 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 esta tecnologia me afeta?

Image
Image

Digamos que você precise visitar um site em particular. Seu banco, seu e-mail e até mesmo sua conta do Facebook - todos usam criptografia para manter os dados que você envia a eles privados. Um site profissional fornecerá criptografia obtendo um certificado de uma autoridade confiável - uma terceira parte, 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çãoou CA, é crucial, já 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.

Image
Image

Vamos analisar um cenário teórico: o How-To Geek quer manter as sessões dos usuários logadas privadas com criptografia, por isso faz uma petição a uma CA como a Symantec com um Solicitação de Assinatura de Certificadoou 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.
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.
Image
Image

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 idéia 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 do que você espera, na verdade - o suficiente para parecer uma estranha coincidência. Em um grupo com apenas 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 mascarar como confiável e distribuir dados mal-intencionados.
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 mascarar como confiável e distribuir dados mal-intencionados.
Image
Image

Encontrar hashes correspondentes em dois arquivos é chamado de ataque de colisão. Sabe-se que pelo menos um ataque de colisão em larga 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 tal ataque.

Então, quão fácil é esse ataque para executar? O 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 nas peças do computador e você pode obter mais energia por menos, ataques como o SHAttered se tornam mais fáceis de serem executados.

US $ 110.000 podem parecer muito, mas estão dentro da esfera de acessibilidade para algumas organizações - o que significa que os cibervilos da vida real podem falsificar assinaturas de documentos digitais, interferir nos sistemas de backup e controle de versão como Git e SVN ou fazer com que uma ISO de Linux mal-intencionada 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. O upload dos 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 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ê tem medo de 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, muitos hash, por favor, não prejudique o autor da Web desconhecido, Google.

Recomendado: