Qual é o valor das somas de verificação MD5 se o próprio hash MD5 poderia também ter sido manipulado?

39

Os downloads em websites às vezes têm uma soma de verificação MD5, permitindo que as pessoas confirmem a integridade do arquivo. Ouvi dizer que isso permite que não apenas os arquivos corrompidos sejam identificados instantaneamente antes que eles causem um problema, mas também que quaisquer alterações maliciosas sejam facilmente detectadas.

Eu sigo a lógica no que diz respeito à corrupção de arquivos, mas se alguém deliberadamente quiser enviar um arquivo malicioso , eles podem gerar uma soma de verificação MD5 correspondente e postá-la no site de download junto com arquivo alterado. Isso poderia enganar qualquer um que baixasse o arquivo e pensasse que ele estava inalterado.

Como as somas de verificação MD5 podem fornecer alguma proteção contra arquivos alterados deliberadamente se não houver como saber se a soma de verificação foi comprometida?

    
por Austin ''Danger'' Powers 08.12.2014 / 08:24

12 respostas

89

I have heard this is to allow [...] for any malicious changes to be detected also.

Bem, você ouviu errado, então. As somas de verificação MD5 (ou SHA ou qualquer outra) são fornecidas ( próximo a links de downloads, especificamente ) apenas para verificar um download correto. A única coisa que eles pretendem garantir é que você tenha o mesmo arquivo que o servidor. Nada mais nada menos. Se o servidor estiver comprometido, você é SOL. É tão simples assim.

    
por 08.12.2014 / 09:06
15

A solução usada por alguns sistemas de gerenciamento de pacotes como o dpkg é assinar o hash : usar o hash como entrada para um dos algoritmos de assinatura de chave pública. Consulte o link

Se você tiver a chave pública do signatário, poderá verificar a assinatura, o que prova que o hash não está modificado. Isso apenas deixa você com o problema de obter a chave pública certa com antecedência, embora se alguém falsificar a distribuição de chaves, eles também tenham que mexer em tudo que você possa verificar com ela, caso contrário, você perceberá que algo estranho está acontecendo. / p>     

por 08.12.2014 / 11:16
9

Sua suposição está correta. Existe uma exceção. Se o servidor que fornece o arquivo e a página em que o hash está, não são gerenciados pela mesma entidade. Nesse caso, o desenvolvedor de software pode querer dizer "ei, as pessoas baixam isso daquele lugar, mas acreditam apenas se hash = xxxx". (Isso pode ser útil para CDN como um exemplo). Eu acho que essa foi a razão pela qual alguém fez isso em primeiro lugar. Do que outros apenas seguiram pensando em como seria legal mostrar o hash. Nem mesmo pensar em como é útil nem o arquivo nem o hash estão no mesmo local.

Tendo dito isto, vale a pena o que é. Não assuma muito a segurança como os outros já afirmaram. Se e somente se você puder confiar totalmente no hash original, então o arquivo é bom. Caso contrário, um invasor com motivação e conhecimento suficientes pode adulterar o arquivo e o hash, mesmo que estejam em servidores diferentes e gerenciados por entidades diferentes.

    
por 08.12.2014 / 15:50
8

Às vezes, as somas de verificação são fornecidas com segurança, mas o download não é. Como o MD5 está quebrado , os checksums fornecidos pelo MD5 são mais fracos do que checksums mais seguros, mas antes do MD5 ser quebrado, um MD5 fornecido com segurança (por exemplo, um que foi assinado com PGP ou GPG ou Gatekeeper ou buscado por HTTPS) que correspondia ao MD5 do download era strong evidência de que o download recebido era o o servidor estava disponibilizando.

Eu tenho escrito sobre a lamentável falta de checksums seguros por anos, aqui .

Os usuários não devem baixar executáveis não confiáveis em redes não confiáveis e executá-los, devido ao risco de ataques MITM. Veja, por exemplo "Inseguranças dentro de sistemas de atualização automática" por P. Ruissen, R. Vloothuis.

Adendo de 2014: Não, NÃO é errado "que somas de verificação postadas em páginas da web sejam usadas para detectar modificações maliciosas", porque essa é uma função que elas podem desempenhar. Eles ajudam a proteger contra danos acidentais e, se forem veiculados por HTTPS ou com uma assinatura verificada (ou, melhor ainda, ambos) ajudam a proteger contra corrupção maliciosa! Eu obtive checksums por HTTPS e verifiquei que eles correspondiam a downloads HTTP muitas vezes.

Hoje em dia, os binários geralmente são distribuídos com hashes assinados e verificados automaticamente, e mesmo assim isso é não perfeitamente seguro .

Trecho do link acima: "O aplicativo KeRanger foi assinado com um certificado válido de desenvolvimento de aplicativos para Mac, portanto, foi capaz de contornar a proteção do Gatekeeper da Apple." ... "A Apple já revogou o certificado abusado e atualizou a assinatura do antivírus XProtect, e o Projeto de Transmissão removeu os instaladores mal-intencionados de seu site. A Palo Alto Networks também atualizou a filtragem de URL e a Prevenção contra ameaças para impedir que a KeRanger causasse impacto nos sistemas. Análise Técnica

Os dois instaladores da Transmissão infectados pela KeRanger foram assinados com um certificado legítimo emitido pela Apple. O desenvolvedor listada este certificado é uma empresa da Turquia com o ID Z7276PX673, que era diferente do ID do desenvolvedor usado para assinar versões anteriores do instalador do Transmission. Nas informações de assinatura de código, descobrimos que esses instaladores foram gerados e assinados na manhã de 4 de março. "

Adendos de 2016:

@Cornstalks: Re. seu comentário abaixo: Errado. Como notado no artigo da Wikipedia sobre o ataque de colisão, "Em 2007, um ataque de colisão de prefixo escolhido foi encontrado contra o MD5" e "o invasor pode escolher dois documentos arbitrariamente diferentes e, em seguida, acrescentar diferentes valores calculados que resultam no todo documentos com um valor hash igual ". Assim, mesmo que o MD5 seja fornecido de forma segura e um invasor não possa modificá-lo, um invasor ainda PODE usar um ataque de colisão de prefixo escolhido com um prefixo escolhido contendo malware, o que significa que o MD5 NÃO é seguro para propósitos de criptografia. Isto é em grande parte porque a US-CERT disse que o MD5 "deve ser considerado criptograficamente quebrado e inadequado para uso posterior".

Mais algumas coisas: o CRC32 é uma soma de verificação. MD5, SHA, etc. são mais que checksums; Eles pretendem ser hashes seguros. Isso significa que eles devem ser muito resistentes a ataques de colisão. Ao contrário de uma soma de verificação, um hash seguro com segurança é protegido contra um ataque MITM (man-in-the-middle), em que o MITM está entre o servidor e o usuário. Ele não protege contra um ataque em que o próprio servidor está comprometido. Para proteger contra isso, as pessoas normalmente confiam em algo como PGP, GPG, Gatekeeper, etc.

    
por 09.12.2014 / 17:22
4

Este é o motivo exato pelo qual as somas de verificação postadas geralmente contêm um aviso dizendo "Isto não pode proteger contra modificações maliciosas do arquivo". Assim, a resposta curta é "eles não podem fornecer qualquer tipo de proteção contra um arquivo deliberadamente alterado" (embora, se a página for entregue via HTTPS, o próprio HTTPS protege contra modificação; se o arquivo não for entregue por HTTPS, mas a soma de verificação é, então, isso pode ajudar alguns, mas não é um caso comum). Quem informou que as somas de verificação postadas nas páginas da Web são usadas para detectar modificações maliciosas estava errado, porque essa não é uma função que elas podem desempenhar; tudo o que eles fazem é ajudar a proteger contra corrupção acidental e corrupção maliciosa preguiçosa (se alguém não se incomodar em interceptar a página dando-lhe a soma de verificação).

Se você quiser proteger-se contra modificações deliberadas, é necessário impedir que as pessoas mexam com a soma de verificação ou impossibilitar que outras pessoas gerem uma soma de verificação válida. O primeiro pode envolver doar pessoalmente ou similar (então a soma de verificação é confiável); o último vai para algoritmos de assinatura digital (onde você precisa obter sua chave pública com segurança para o downloader; no TLS, isso é feito confiando diretamente nas autoridades de certificação e fazendo com que elas verifiquem todos os outros; isso também pode ser feito em uma rede de confiança , mas o ponto é que algo tem que ser transferido com segurança em algum momento, e apenas postar algo no seu site não é suficiente).

    
por 08.12.2014 / 08:49
4

Isso é realmente um problema. Mostrar checksums no mesmo site que o arquivo a ser baixado é inseguro. Uma pessoa que pode alterar o arquivo também pode alterar a soma de verificação. A soma de verificação deve ser mostrada através de um sistema separado completo, mas isso dificilmente é viável, porque como dizer ao usuário de maneira segura onde a soma de verificação pode ser encontrada.

Uma possível solução é o uso de arquivos assinados.

(BTW: o MD5 é inseguro em qualquer lugar e não deve mais ser usado).

    
por 08.12.2014 / 08:42
2

How can MD5 checksums provide any protection against deliberately altered files if there is no way of knowing if the checksum itself has been compromised?

Você está totalmente correto. O objetivo, então, seria tornar o seu "se" errado - se sabemos que um hash criptográfico seguro de um arquivo não está comprometido, então sabemos que o arquivo também não está comprometido.

Por exemplo, se você postar um hash de um arquivo em seu site e, em seguida, vincular a uma cópia do arquivo em um servidor espelho de terceiros - prática comum na distribuição de software livre antiquado - seus usuários poderão ser protegidos contra alguns tipos de ataques. Se o servidor espelho for malicioso ou comprometido, mas seu site estiver correto, o espelho não poderá subverter o arquivo.

Se o seu site usar HTTPS ou você assinar o hash com gpg , seu arquivo também poderá ser (principalmente ) protegidos contra invasores de rede, como pontos de acesso Wi-Fi mal-intencionados, nós de saída do Tor desonestos ou NSA.

    
por 08.12.2014 / 11:29
1

Você não pode modificar a soma de verificação MD5 sem modificar também o arquivo. Se você baixar o arquivo, faça o download do hash e, em seguida, seu cálculo do arquivo não corresponde ao que é fornecido, seja o hash ou o arquivo incorreto ou incompleto.

Se você deseja "amarrar" o arquivo a algo externo, como autor, máquina, etc., ele precisa ser assinado , usando um processo do tipo PKI com certificados. O autor do arquivo, etc. pode assinar o arquivo com sua chave privada e você pode verificar as assinaturas com a chave pública, que deve estar disponível publicamente, ela mesma assinada por uma CA na qual você e o autor confiam, e para download, de preferência vários locais.

A modificação do arquivo tornaria a assinatura inválida, portanto, isso também pode ser usado para verificar a integridade do arquivo.

    
por 08.12.2014 / 12:36
1

Os hashes indicam se a sua versão do arquivo (o "download") é diferente da versão do servidor. Eles não oferecem garantia para a autenticidade do arquivo.

Assinaturas digitais (criptografia assimétrica + função hash) podem ser usadas para verificar se o arquivo não foi modificado por alguém que não tenha a chave privada correspondente.

O criador do arquivo hashes o arquivo e criptografa o hash usando sua chave privada (secreta). Dessa forma, qualquer pessoa com a chave pública correspondente (não secreta) pode verificar se o hash corresponde ao arquivo, mas embora o conteúdo do arquivo possa ser modificado, ninguém pode substituir o hash correspondente por um que corresponda ao arquivo (após o hash ser descriptografado usando a chave pública) - a menos que eles consigam forçar a chave privada, ou obter acesso a ela de alguma forma.

O que deve impedir o Sr. "A.Hacker" de simplesmente modificar o arquivo e assiná-lo com sua própria chave privada?

Para validar o arquivo, você precisa comparar seu hash com o obtido por meio da descriptografia da assinatura digital associada. Se você acha que o arquivo é de "I.M.Awesome", então você descriptografa o hash usando sua chave e o hash não corresponde ao arquivo, já que o hash foi criptografado usando a chave de A.Hacker.

As assinaturas digitais permitem, assim, detectar alterações acidentais e maliciosas.

Mas como conseguimos a chave pública de I.M.Awesome em primeiro lugar? Como podemos garantir que, quando obtivemos a chave dele, a chave de A.Hacker não foi servida por um servidor comprometido ou um ataque man-in-the-middle? É aqui que entram as cadeias de certificados e os certificados raiz confiáveis, nenhuma das quais é perfeitamente segura [1] para o problema, e ambas provavelmente devem ser bem explicadas na Wikipedia e em outras questões sobre SO.

[1] Após a inspeção, os certificados raiz fornecidos com o sistema operacional da Microsoft no meu PC de trabalho incluem um certificado do governo dos EUA. Qualquer pessoa com acesso à chave privada correspondente cough NSA cough pode, portanto, exibir conteúdo para meu navegador que passa na verificação "há um cadeado na barra de endereço". Quantas pessoas vão realmente se incomodar em clicar no cadeado e ver o par de chaves who's sendo usado para "proteger" a conexão?

    
por 08.12.2014 / 14:09
1

How can MD5 checksums provide any protection against deliberately altered files if there is no way of knowing if the checksum has not been compromised either?

Esta é realmente uma boa pergunta. Em geral, sua avaliação da manipulação do MD5 está correta. Mas acredito que o valor das somas de verificação MD5 nos downloads é superficial, na melhor das hipóteses. Talvez depois de baixar um arquivo você possa verificar o MD5 que você tem contra um site, mas eu costumo ver o armazenamento MD5 lado-a-lado como um “recibo” ou algo que é bom ter, mas não confiável. Como tal, eu geralmente nunca me importei com checksums MD5 de arquivos baixados, mas posso falar da minha experiência na criação de processos MD5 baseados em servidor ad-hoc.

Basicamente, o que eu fiz quando um cliente quer varrer um sistema de arquivos para checksums MD5 é fazer com que eles sejam gerados em arquivos CSV que mapeiam nome de arquivo, caminho, MD5 - e outras informações de arquivo diversas - para um formato de dados estruturado. em seguida, ingeriu em um banco de dados para comparação e armazenamento.

Portanto, usando seu exemplo, enquanto uma soma de verificação MD5 pode se sentar ao lado de um arquivo em seu próprio arquivo de texto, a soma de verificação MD5 do registro de autoridade será armazenada em um sistema de banco de dados não conectado. Então, se alguém de alguma forma invadisse um compartilhamento de arquivos para manipular dados, esse intruso não teria acesso aos registros de autoridade MD5 ou ao histórico conectado.

Recentemente, descobri um bom software de arquivamento de bibliotecas chamado gerenciador de Auditoria do ACE que Basicamente é uma aplicação Java projetada para sentar e assistir a um sistema de arquivos para mudanças. Ele registra as alterações através de alterações MD5. E ele opera com uma filosofia semelhante ao meu processo ad-hoc - armazene as somas de verificação em um banco de dados - mas leva um passo além, mas cria uma soma de verificação MD5 de somas de verificação MD5 que é conhecida como árvore da árvore ou Merkle .

Digamos que você tenha 5 arquivos em uma coleção. Esses 5 arquivos no gerenciador do ACE Audit obteriam outro - vamos chamá-lo de "pai" - check-in que é um hash gerado a partir das 5 somas de verificação MD5 de cada arquivo. Então, se alguém falsificasse apenas um arquivo, o hash do arquivo mudaria e o mesmo seria o hash de toda a coleção “pai”.

Em geral, a maneira que você precisa olhar para checksums MD5 e hashes de integridade relacionados é, a menos que eles não estejam conectados a algum armazenamento não-direto para os hashes MD5, eles podem estar corrompidos. E o seu valor como uma ferramenta de integridade de dados a longo prazo é equivalente a uma fechadura barata que vem “grátis” em uma nova peça de bagagem; Se você é sério sobre o bloqueio de sua bagagem, você receberá um bloqueio que não pode ser aberto em 5 segundos com um clipe de papel.

    
por 08.12.2014 / 08:57
0

velocidade

Muitas vezes as pessoas acham que é muito mais rápido (a) baixar um arquivo grande de alguma rede de entrega de conteúdo (CDN) não-confiável, mirror site, torrent peers, etc. e também fazer o download do arquivo de checksum curto (freqüentemente SHA256; software antigo frequentemente usado MD5) de alguns confiáveis fontes. Eles acham que é insuportavelmente lento para (b) baixar todo o arquivo grande diretamente de uma fonte confiável.

validação

Muitas vezes essa pessoa acha que tudo valida - as fontes (confiáveis e não confiáveis) concordam com a mesma soma de verificação, e executando o shasum (ou md5sum) com qualquer um desses arquivos de soma de verificação curtos (não importa qual, quando todos são idênticos) indica que o arquivo grande tem uma soma de verificação correspondente.

modificação

Você está certo quando o Mallory maliciosamente altera um arquivo grande em algum site de download, seria fácil para Mallory também maliciosamente a soma de verificação para aquele arquivo no mesmo download do site para que o shasum ( ou md5sum) executado nesse arquivo de soma de verificação maliciosa parece validar o arquivo grande. Mas esse arquivo de checksum não é o (único) que o baixador deve usar para validação.

Quando o downloader compara esse arquivo de soma de verificação para os arquivos de soma de verificação baixados de fontes confiáveis, se a soma de verificação original ocorrer mesmo que uma vez, o downloader verificará se tudo não é validado saiba que algo deu errado.

Como cpast disse antes, se uma boa soma de verificação criptográfica é transmitida através de uma conexão confiável, ela pode fornecer segurança (que é derivada da conexão confiável).

Como o supercat disse anteriormente, os arquivos de checksum em um site não ajudam as pessoas que baixam arquivos grandes do mesmo site e da mesma forma que baixam os arquivos de checksum - eles ajudam as pessoas que querem baixar arquivos de alguns outro site.

"In terms of security, cryptographic hashes such as MD5 allow for authentication of data obtained from insecure mirrors. The MD5 hash must be signed or come from a secure source (an HTTPS page) of an organization you trust." -- https://help.ubuntu.com/community/HowToMD5SUM

As somas de verificação criptográficas são uma parte importante das assinaturas práticas de chave pública (conforme implementadas no GnuPG e em outros softwares compatíveis com OpenPGP). Assinaturas de chave pública têm algumas vantagens sobre as somas de verificação sozinhas.

    
por 09.12.2014 / 19:25
0

I have heard this [MD5 checksum] is to allow [...] also for any malicious changes to be easily detected.

Bem, você não ouviu totalmente errado . A assinatura digital é, na verdade, o que é usado para detectar alterações maliciosas. Por algumas razões importantes, o hash é uma parte fundamental da assinatura digital, em que apenas o hash é realmente assinado , não o arquivo original inteiro.

Dito isto, se a fonte não fornecer a assinatura do hash e uma forma fidedigna de a verificar , está certo, não é dada proteção contra > deliberadamente arquivos alterados , mas o hash ainda é útil como uma soma de verificação contra a corrupção acidental .

Aqui está um exemplo do mundo real que pode esclarecer tudo. A seguinte passagem é particularmente significativa sobre o assunto:

For older archived CD releases, only MD5 checksums were generated [...] For newer releases, newer and cryptographically stronger checksum algorithms (SHA1, SHA256 and SHA512) are used

    
por 09.12.2014 / 11:08