segunda-feira, 30 de julho de 2007

Nosso Amigo Hash - Parte III - Continuação

Hash aplicado na Forense Computacional - Prática

Quarto exemplo: Comprovando a integridade de uma imagem de um HD ou outra mídia

Comprovar a integridade de uma imagem através de hash é uso comum em dois momentos: quando se quer comprovar que a imagem é cópia exata da mídia original ou quando se quer comprovar que a manipulação aplicada sobre a imagem não introduziu qualquer mudança na mesma.

Neste exemplo, vamos trabalhar com algumas ferramentas fornecidas pelo live CD Helix.

Capturando imagem

A primeira situação, descrita acima, ocorre quando se faz a captura da imagem de uma mídia.
O procedimento de captura requer que a imagem obtida seja cópia fiel da mídia original (cópia bit a bit). Dessa forma, a análise da mídia, buscando evidências, garantidamente será feita sem prejuízo de sua integridade, como se fosse na própria mídia original.

É importante ressaltar que uma simples cópia ou uma imagem não-forense deixaria algumas partes da mídia original de fora (não seriam copiadas), e tais partes podem conter informações relevantes. Nesse tipo de imagem, a área não alocada da mídia não é copiada, por exemplo.

Somente com a comprovação da integridade da imagem podemos ter certeza de que o procedimento de captura não inseriu ou removeu artefatos que modificaram as conclusões.

Imagine:

1) Um caso onde um computador foi supostamente usado para cometer um crime. Imediatamente antes do computador ser confiscado, os arquivos (artefatos) que comprovariam o ocorrido são deletados. Se o procedimento de captura de imagem utilizado não for um procedimento forense, os dados contidos nas áreas não alocadas serão perdidos e não será possível comprovar a situação. Também podemos ter o contrário, onde os dados que refutariam a hipótese de participação (ou de culpabilidade) poderiam estar em arquivos recém apagados, prejudicando assim as conclusões.

2) Um caso onde um arquivo foi propositalmente adicionado à imagem para fraudulentamente indicar o envolvimento de alguém inocente em uma situação. Se o procedimento de captura utilizado incluir a verificação de integridade, essa manipulação fraudulenta será detectada.

Se fossemos fazer um paralelo da Forense Computacional com outras investigações não digitais, a captura de uma mídia através de procedimentos de imagem forense bit a bit é equivalente à exigência ao investigador de se usar luvas na cena de um crime para colher as impressões digitais.

dd

Existem várias formas de capturar uma imagem forense, mas sem dúvida a mais usada e difundida é o comando dd. Esse comando realiza a cópia exata (bit a bit) da origem para o destino. É possível, portanto, indicar como origem a path da mídia a ser capturada, e como destino um arquivo. Ao final da cópia, todo o conteúdo da mídia estará refletido nesse arquivo destino, incluindo ali seus espaços não alocados (arquivos deletados).

Ex: Para copiar um pendrive que está localizado em /dev/sda para um arquivo chamado imgblog.dd, usamos o seguinte:
dd if=/dev/sda of=/media/hda1/imagens/imgblog.dd conv=noerr bs=512

O comando acima criará a imagem, capturando-a de forma forense. Entretanto, ele está incompleto porque não faz a verificação de integridade. Essa verificação vai comprovar que a mídia não foi alterada durante o procedimento de cópia, e que o arquivo de saída (destino) é realmente a cópia exata da origem.

Para fazer a verificação de integridade, fazemos uso do utilitário de hash md5deep, que a semelhança do md5sum, computará o hash:

md5deep /dev/sda
dd if=/dev/sda of=/media/hda1/imagens/imgblog.dd conv=noerr bs=512
md5deep /media/hda1/imagens/imgblog.dd

Se o procedimento capturou a imagem corretamente, os valores de saída do primeiro md5deep, sobre a mídia, e do terceiro md5deep, sobre a imagem, serão idênticos e a integridade do procedimento está garantida.

Interface gráfica

Apesar de ser sempre interessante conhecer os pormenores das opções de linhas de comando, há boas interfaces gráficas para realizar a tarefa acima.

O utilitário Adepto, incluído no Helix, pode ser configurado para a captura através de uma tela amigável. O melhor disso é que o Adepto já traz opção para fazer a validação usando hash, sem necessidade de inserir comandos específicos. Basta um clique para acionar a opção e o hash da mídia será computado antes da captura e depois automaticamente comparado com o hash computado sobre a imagem. Uma mensagem de alerta será exibida no log caso os valores não coincidam. O log de utilização é bastante detalhado e traz detalhes da máquina onde o Adepto está sendo executado também.

Comprovando a integridade após a manipulação da imagem

Todo cuidado deve ser tomado durante a análise da imagem, para que a mesma não sofra qualquer tipo de alteração. Write-blockers são úteis, e para quem tem uma imagem a partir do dd, pode-se montá-la usando o loopback device com as opções de read-only.

Ainda assim, a comprovação de que a integridade da imagem continua preservada é feita através do cálculo do hash antes de montar a imagem, e imediatamente após. Os valores calculados precisam ser os mesmos se a imagem continua integra.

md5deep arquivoimagem.dd
mount arquivoimagem.dd /media/imagem -o ro,loop
... Faz as operações e análises ...
umount /media/imagem
md5deep arquivoimagem.dd

Uma advertência: O comando de montar imagem como read-only não previne alterações na imagem em caso de uso de sistemas de arquivo com journaling. O ext3, segundo li recentemente, tem esse recurso e introduz modificações na imagem mesmo quando montado com as opções read-only. Nesse caso, só mesmo um write-blocker.

Na próxima, vamos falar do uso prático de hashes na separação de arquivos conhecidos e desconhecidos.

Até o próximo post !

quarta-feira, 25 de julho de 2007

Tem Helix Novo na área !!!!

A turma da e-fense lançou a nova versão do Helix, talvez o mais famoso e utilizado live CD de Forense Computacional. Foram mais de 6 meses de espera, mas valeu a pena.

Faça o download do .iso diretamente do link acima. Aproveite para praticar o assunto do post anterior ! Após o download, use o MD5Sum e calcule o hash do arquivo .iso baixado. Em seguida, confira com o valor indicado na página.

Abaixo, segue a relação das modificações dessa versão em relação a anterior (v1.8):

Helix 1.9: 13.July.2007

Adicionados

Módulo Windows :

1. RD PassView 1.00 - http://www.nirsoft.net
2. USBDeview 1.05 - http://www.nirsoft.net
3. InjectedDLL 1.00 - http://www.nirsoft.net
4. LSASecretsView 1.10 - http://www.nirsoft.net
5. WirelessKeyView 1.10 - http://www.nirsoft.net
6. Nigilant32 0.1 - http://www.agilerm.net
7. ZeroView 1.1 - http://www.techpathways.com
8. Pre-Search 0.08 - Paul Bright

Módulo Linux :

1. vinetto 0.06 - http://sourceforge.net
2. Pythonraw 1.0 - http://www.storm.net.nz
3. sg3-utils 1.24-0.1 - http://packages.debian.org
4. Truecrypt 4.3a - http://www.truecrypt.org
5. lzop 1.0.1 - http://www.lzop.org

Atualizações

Módulo Windows :

1. WFT 3.0.01 - http://www.foolmoon.net
2. IRCR 2.3 - http://tools.phantombyte.com
3. Mail PassView 1.38 - http://www.nirsoft.net
4. MessenPass 1.14 - http://www.nirsoft.net
5. IE PassView 1.05 - http://www.nirsoft.net
6. PstPassword 1.01 - http://www.nirsoft.net
7. NetPass Recovery 1.11 - http://www.nirsoft.net
8. RegScanner 1.51 - http://www.nirsoft.net

Módulo Linux :

1. Scalpel 1.60 - http://www.digitalforensicssolutions
2. Foremost 1.5 - http://foremost.sourceforge.net
3. dcfldd 1.3.4-1 - http://dcfldd.sourceforge.net
4. libewf-20070512 - http://www.uitwisselplatform.nl
5. mount-ewf-20070512
6. allin1 0.4 - http://www.netmon.ch/forensic
7. Sluethkit 2.09 - http://www.sleuthkit.org
8. RKHunter 1.2.9 - http://rkhunter.sourceforge.net
9. afflib-2.3.0 - http://www.afflib.org
10. NTFS-3g 1.710 - http://www.ntfs-3g.org
11. FUSE 2.7.0 - http://fuse.sourceforge.net
12. CDFS 2.6.19 - http://trappist.elis.ugent.be
13. Kernel 2.6.18 - http://www.kernel.org
14. Linen 6.01 - http://www.guidancesoftware.com

Removidos

Modulo Windows :

1. Convair File Recovery
2. Foxit PDF Viewer

Até o próximo post !

segunda-feira, 23 de julho de 2007

Nosso Amigo Hash - Parte III

Hash aplicado na Forense Computacional - Prática

Vamos agora partir para exemplos práticos de uso do hash. Para facilitar, vou fazer referência aos exemplos já citados no post anterior (Parte II).

O primeiro passo é obter um utilitário que faça o cálculo do hash. Existem alguns disponíveis, tanto para o algoritmo MD5 quanto para o SHA-1.

Usaremos o MD5Sum.exe, que pode ser baixado aqui

Esse programa tem um uso muito simples:

c:>md5sum arquivo.txt
763430d9cf670bb98094c15f9288ca75 *arquivo.txt

O arquivo.txt é qualquer arquivo, com qualquer conteúdo. Fotos, mp3, executáveis, enfim, qualquer informação pode existir nos arquivos.

Primeiro exemplo - Integridade de Arquivos transmitidos:

- João calcula o hash MD5 de um arquivo

c:>md5sum relacao.xls
3f39881820bdd7bdb842af37224daedc *relacao.xls

- e envia o arquivo por e-mail para José.

- Logo em seguida, liga para ele e dita o resultado (3f39881820bdd7bdb842af37224daedc).

- Assim que José recebe o e-mail, ele computa o hash MD5 novamente e confere com o valor anotado. Se for igual, o arquivo está integro.

Segundo exemplo - Integridade de arquivos baixados de um site:

- João visita o site da e-fense para fazer o download da imagem-iso do Helix. Após o download, ele computa o hash do arquivo e verifica se o valor é o mesmo do indicado no website

Terceiro exemplo - Comprovando a integridade das ferramentas:

O CD do Helix traz a relação de hashes MD5 para cada ferramenta usada. No caso de usar as ferramentas a partir de um CD, obviamente que um código malicioso não conseguiria alterá-las. Porém, imaginando que tenhamos um pen drive com as ferramentas, essa alteração pode acontecer.

Para detectar qualquer alteração indevida nas ferramentas, é interessante antes do uso aplicar o MD5Sum no diretório das ferramentas e comparar os resultados com a lista criada anteriormente:

e:/tools>md5sum *
ce338fe6899778aacfc28414f2d9498b *rrr.exe
ce338fe6899778aacfc28414f2d9498b *qqq.bat
3f39881820bdd7bdb842af37224daedc *www.EXE
3f39881820bdd7bdb842af37224daedc *yyy.EXE
1c17da341aa184c96a5f305cca04871f *xxx.exe

Na próxima, continuarei com os exemplos de integridade da imagem de um HD.

Até o próximo post !

quinta-feira, 19 de julho de 2007

Estamos de Luto

É com tristeza que soube hoje do falecimento de um dos consultores da Axur no acidente do voo 3054 da TAM na última terça.

A Axur é uma das empresas brasileiras com maior expertise em Forense Computacional, e teve nessa terça uma grande perda. O consultor estava vindo para São Paulo, onde ministraria um treinamento nessa quarta-feira.

Envio a Axur e a todos os brasileiros que sofreram perdas nesse dia minha solidariedade e orações pelas famílias em luto.

Que Deus abençoe a todos nós e que o Brasil, nossa querida nação, saiba olhar para cima, porque é de Deus que vem o nosso socorro !

Até o próximo post.

quarta-feira, 18 de julho de 2007

Jurisprudencia para a RAM

Vou interromper a sequência de artigos sobre hash, mas é por um bom motivo.

Estava passeando pelos blogs de Forense que temos por aí, quando vi um artigo muito interessante indicando uma decisão na corte americana sobre um processo. Você pode ler os detalhes do processo na integra clicando aqui.

Há vários pontos interessantes, mas talvez o mais interessante mesmo seja o ponto onde a decisão judicial marca que "a RAM é informação armazenada eletronicamente", e dessa forma os dados obtidos a partir dela foram usados como evidência.

No fim das contas, isso não é apenas ponto para o time que briga pela análise e captura dos dados voláteis como parte fundamental dos procedimentos de Forense Computacional. Isso é ponto para todos nós, Investigadores e Peritos nessa ciência tão nova. Essa decisão com certeza fará eco em processos aqui no Brasil.

Por mais que algumas coisas as vezes pareçam ainda mais difíceis, com essa nossa realidade ainda engatinhando, um ponto deve ser levado em conta: Você não acha bacana o fato de estar ajudando a definir e a criar uma cultura para uma nova profissão ?

Até o próximo post !

terça-feira, 10 de julho de 2007

Nosso Amigo Hash - Parte II

Hash aplicado na Computação Forense

Como disse no post anterior, o hash é um excelente instrumento para se comprovar a integridade de um conjunto de bits (um arquivo, um texto, uma password, etc).
O resultado do hash é armazenado e sempre que a integridade do arquivo precisar ser conferida, ele é computado novamente, através do mesmo algoritmo. Dessa forma, se não houve nenhuma alteração, a saída deverá ser a mesma.

Vamos detalhar melhor os usos de hash na Forense Computacional:

Integridade de Arquivos transmitidos

Ao enviar um arquivo para um destinatário, pode-se computar previamente o hash dele e repassar o resultado por um meio diferente que o usado para a transmissão. O destinatário, ao receber o arquivo, computa novamente o hash e verifica sua integridade, comprovando que nenhum erro de transmissão alterou o arquivo, ou que a transmissão não foi alvo de um ataque conhecido como Man-In-The-Middle, alterando seu conteúdo.

Ex: João calcula o hash MD5 de um arquivo e o envia por e-mail para José. Logo em seguida, liga para ele e dita o resultado. Assim que José recebe o e-mail, ele computa o hash MD5 novamente e confere com o valor anotado. Se for igual, o arquivo está integro.

Integridade de arquivos baixados de um site

Para verificar a integridade de um arquivo após seu download, seja para garantir que a operação foi concluída sem problemas ou que a versão obtida é realmente a verdadeira, é comum que o hash computado do arquivo seja disponibilizado no site, para a posterior conferência.

Ex: João visita um site para fazer o download de um utilitário. Após o download, ele computa o hash do arquivo e verifica se o valor é o mesmo do indicado no website.

Comprovando a integridade das ferramentas

As ferramentas e comandos usados tanto nas análises forenses computacionais quanto nas operações de resposta a incidentes são testadas quanto a sua eficiência e acurácie dos resultados emitidos. Esses testes garantem que a ferramenta, aplicação ou utilitário fornece resultados confiáveis. Imagine como seria desastroso se um investigador de forense computacional utilizasse em suas conclusões dados obtidos por um utilitário que foi propositalmente adulterado para emitir resultados falsos ?
Para evitar isso, as ferramentas tem, em seu site de origem, a relação de hashs e algoritmos usados, por cada versão compilada e disponibilizada. Nesse caso, vale a pena sempre conferir se a ferramenta utilizada está integra em relação ao hash publicado no site do desenvolvedor.

Outra situação semelhante é possível de ocorrer com quem usa mídia gravável em operações de resposta a incidentes. Usar utilitários a partir de um pendrive nessas operações pode não ser uma boa idéia, pois o investigador corre o risco de acabar com seus utilitários sendo infectados por algum código malicioso. Um dos meios de garantir a integridade desses utilitários é ter os hashes deles computados e verificados antes do uso. Na verdade, o melhor mesmo é usar as ferramentas a partir de um CD-ROM ou DVD-ROM. Desse modo, menos um problema para se preocupar.

Comprovando a integridade de uma imagem de um HD ou outra mídia

Um dos itens mais importantes em uma investigação computacional, principalmente para as realizadas em torno de um caso jurídico (uma ação criminal, civel, etc) é a preservação da evidência. Hoje, é comum não tratar mais a mídia (um disquete, HD, CD, etc) como uma evidência, mas como um item que pode conter muitas evidências. Para localizar essas evidências, não podemos usar diretamente a mídia sob risco de adulterá-la e tornar questionável o resultado da investigação. Mesmo um simples boot usando o HD periciado introduz grandes modificações em seu estado. A RFC 3227 dá diretrizes para a conservação das mídias envolvidas e/ou necessárias para uma investigação, e uma das primeiras ações indicadas pela RFC é realizar a captura da imagem da mídia. Esse procedimento, já comentado em um dos meus posts, cria uma cópia bit a bit dela. Essa cópia é usada, então, nas análises e a mídia original é armazenada, também segundo orientações da RFC 3227. Porém,
1) Como fazemos para garantir que a imagem usada na análise continua integra ?
2) Como garantir que o investigador não introduziu mudanças que levarão o caso para direções diferentes do que deveria (provocando conclusões erradas) ?
3) Como garantir que o processo de captura foi realizado corretamente ?

Para isso, contamos novamente com a ajuda do nosso amigo hash !

Antes de fazer a imagem bit a bit (também chamada forensically sound image), o hash da mídia é calculado e armazenado. Normalmente essa operação é feita em conjunto e tudo é registrado em um arquivo de log. Assim que a operação de criação da imagem termina, o hash desse arquivo é também calculado e se tudo correu perfeitamente, esses valores de hash serão iguais. Dessa forma, respondemos ao item 3) acima.

Já durante as análises, o investigador deve tomar o cuidado de manipular sempre seu arquivo de imagem com opções que não permitam a escrita. Pode ser simplesmente montando a imagem como read-only, pode ser também usando um write-blocker. O fato é que, além de tomar medidas preventivas para nunca escrever na imagem, é de bom tom que o investigador compute sempre o hash antes e depois de usar a imagem para qualquer procedimento de análise. Com os valores de hash coincidindo, conferimos sua integridade e respondemos ao item 1).

A resposta do item 2) depende de um procedimento chamado cadeia de custódia (Custody Chain). Logo após a captura da imagem, a mídia é selada e guardada em recipientes apropriados. Esses recipientes/sacolas devem registrar o hash computado da mídia (e seu algoritmo, sempre) e deve registrar também todos que tiveram contato com a mídia, indicando data e hora. Se a mídia foi corretamente armazenada e todos respeitaram o fato de não usá-la (ou a usaram, mas mantendo mecanismos de proteção contra escrita), o hash computado a qualquer momento comprovará que ela permanece integra e, ao mesmo tempo, poderá comprovar também a integridade da imagem capturada.

Resumindo, se houver a suspeita de manipulação indevida da imagem, computa-se novamente o hash da mesma e o resultado é comparado com o hash da mídia. Eles devem ser o mesmo se a imagem estiver integra.

Comprovando a integridade de um conjunto de arquivos

Os procedimentos descritos na RFC 3227, de captura de imagens da mídia, nem sempre são aplicáveis. Imagine como gerar a imagem para posterior análise de um servidor que armazena seus dados em um storage, ou em um conjunto de discos da ordem de centenas Terabytes. Ou ainda, em casos de análises onde o servidor é 24x7, e não pode ser desligado ?
Nesses casos, usamos um procedimento conhecido como "live analysis" e em geral não há como comparar hashes da imagem gerada com hashes da mídia, pois é como atirar em um alvo em movimento. Como a mídia está em uso, seu estado está em constante mudança e o hash do início do processo dificilmente será igual ao do final. Entretanto, a aplicação do hash na verificação da integridade da imagem ainda é válida, e também nos casos onde apenas alguns arquivos são extraídos (caso dos storages, por exemplo), o hash pode ser usado sobre o arquivo, e alguns detalhes do mesmo são armazenados para comprovar que aquele arquivo manteve sua integridade durante o período de análise.

Determinando e selecionando arquivos conhecidos e desconhecidos

Uma análise forense computacional de uma imagem de um HD não é uma tarefa trivial, e os tamanhos mais comuns dos HDs de hoje, por volta de 80 Gb nas estações de trabalho, torna a tarefa de análise ainda mais difícil. Um dos motivos é a grande quantidade de arquivos existente em um HD desse tamanho.
Uma forma interessante de ajudar na investigação é separar os arquivos conhecidos (e que não precisamos prestar muita atenção) dos arquivos desconhecidos. Essa operação é feita com o auxílio de grandes bases de dados de hashes de aplicações, utilitários, arquivos executáveis, dlls e outros arquivos disponíveis no mercado. Nesse banco de dados temos entradas indicando o nome e o hash de todos os arquivos que compoem cada versão do Windows, incluindo os arquivos alterados por aplicações de patches. Também temos nessas bases os arquivos executáveis de ferramentas comuns comercializadas e também de softwares livres. Em algumas bases também temos uma classificação indicando que os arquivos são "bons" ou não. Nessas bases, por exemplo, também encontramos hashes dos principais códigos maliciosos conhecidos.
Pois bem. De posse dessas bases, o investigador pode indicar que todos os arquivos que constam na imagem sejam classificados como conhecidos ou desconhecidos. Nesse caso, após essa classificação, reduzimos em MUITO a quantidade de arquivos a analisar. Normalmente, sobram apenas arquivos de documentos, imagens, htmls e uma ou outra ferramenta que ainda não foi cadastrada. Com isso, podemos reduzir a área a investigar e melhorar o foco no que realmente é o alvo da busca.
Outra opção é quando se busca classificar e filtrar os arquivos na imagem que são conhecidos e "não-bons". Como resultado podemos identificar arquivos de phishing ou outros trojans existentes na imagem. Há também entidades que mantém bases de hashes de figuras e imagens sobre pedofilia. Com isso, é possível classificar a imagem separando qualquer arquivo, independentemente do seu nome ou extensão, cujo hash coincidiu com algum existente na base. Nesse caso, o investigador deve aprofundar sua pesquisa e, a não ser por uma remota possibilidade de colisão, verificar que provavelmente o arquivo localizado trata-se de um arquivo com conteúdo criminoso.

No próxima, vou entrar nos detalhes de como usar os hashes para filtrar os arquivos.

Até o próximo post !

terça-feira, 3 de julho de 2007

Nosso Amigo Hash - Parte I

Uma das ferramentas mais úteis para o Investigador/Perito Computacional é o hash. Há diversas situações onde podemos aplicá-lo. Mas o que seria exatamente um hash ???

Hash é uma função matemática com algumas propriedades interessantes. Duas propriedades das mais importantes são:
- Essa função deve ser capaz de receber como entrada um grupo de bits e mapear em um grupo de bits menor
- Deve ter a capacidade de fornecer sempre a mesma saída para a mesma entrada, e uma saída diferente mesmo que apenas um bit seja modificado na entrada
- Não deve ser possível obter a entrada a partir da saída.

Na prática, são usadas funções matemáticas que usem, para qualquer conjunto de bits na entrada, uma quantidade fixa de bits na saída e que, conforme a função, pode ser de 128-bit, 160-bit, 256-bit, 512-bit e 1024-bit. Essa saída é chamada comumente de digest ou resumo.

Os algoritmos de Hash

Há inúmeros algoritmos de hash disponíveis. Cada um implementa uma função matemática com as características acima. Alguns conseguem ter melhor performance, outros oferecem mais segurança ou menos colisão. Falaremos nisso adiante.

MD5 - Ainda é o algoritmo mais usado em Forense Computacional. Tem saída de 128 bits, ou seja, para qualquer entrada ele calcula e retorna uma sequência de 128 bits que "resume" a entrada. Essa entrada pode ser desde um numero, uma letra, uma frase, até arquivos imensos de vários gigabytes.

SHA-1 - É o segundo algoritmo mais utilizado na área de Forense Computacional, e tudo leva a crer que estará substituindo o MD5 no coração dos Investigadores e Peritos Computacionais. Ele fornece uma saída de 160 bits.

Colisão ????

Calma ! Ninguém vai sair machucado dessa colisão !
Como expliquei acima, o hash mapeia uma entrada de qualquer tamanho em uma saída de tamanho fixo, geralmente muitas vezes menor que a entrada. Dessa forma, é possível imaginar que várias possíveis entradas sejam mapeadas para a mesma saída. Por exemplo, se definíssemos uma função de hash chamada A, com finalidade de mapear saídas de, digamos, 4 letras, sendo que o universo de entradas possíveis seriam palavras de 10 letras, com certeza teríamos situações onde a saída abcd seria resultado de entradas como hdjsdteysd, uriwjkdrty e wjdgaalsttd. Ou seja,

A(hdjsdteysd) = abcd
A(uriwjkdrty) = abcd
A(wjdgaalstt) = abcd

Compreendeu ? Várias entradas acarretaram na mesma saída. Isso é uma colisão em um hash.
O algoritmo de hash é melhor quanto menor o número de colisões que ele gera. Gerar um número pequeno de colisões não é algo trivial, já que, diferentemente do nosso exemplo, em funções reais de hash não temos limitação do tamanho da entrada. Ainda assim, colisões em algoritmos profissionais de hash tem baixa frequência.

Aplicações mais comuns de hash

Integridade de arquivos: O hash é comumente usado para constatar que um arquivo está integro. Para isso, usa-se o arquivo como entrada de um algoritmo de hash, e a saída é armazenada. Para testar a integridade do mesmo, basta passar novamente o arquivo pelo algoritmo. A saída deverá ser a mesma, se o arquivo continua inalterado.

Uma variação desse item também frequentemente usada é a comparação de integridade de ambientes. Algumas ferramentas montam um baseline de um grupo de arquivos, registrando em uma base o hash de cada arquivo desse grupo. Periodicamente, esse grupo de arquivos passa novamente pelo algoritmo de hash, e o resultado é comparado com o baseline. Se diferir, houve alteração no grupo. Essa é uma das técnicas usadas por ferramentas de detecção de intrusão em servidores e estações.

Sistemas de autenticação: Quando um sistema precisa autenticar um usuário, ele pede uma conta e uma senha associada. Para evitar trafegar a senha pela rede, a senha original é passada em uma função de hash e esse hash, junto com a conta, é transmitido para o servidor de autenticação, que vai comparar as informações recebidas com as cadastradas em sua base de usuários. Se o hash for o mesmo, é porque a senha digitada pelo usuário é a mesma cadastrada.

Hash é seguro ??? O que é Birthday Attack, ou Ataque do Aniversário ?

Acima comentamos que o hash garante a integridade de um arquivo porque qualquer alteração no mesmo fará com que o hash também seja alterado. Porém, como sabemos que nenhuma função de hash é totalmente desprovida de colisões, o seguinte ataque a essa técnica é realizável:
1) João está celebrando um contrato com José. Ele manda o contrato final para José, onde indica em uma das cláusulas o pagamento combinado de 10000 (dez mil) Reais. Ele manda o resultado do hash do documento, indicando também o algoritmo usado, para Maria, que guarda o hash e atua como uma autenticadora dos contratos.
2) José recebe o documento. Maria executa sobre ele o mesmo algoritmo indicado por João e verifica o resultado, que confere.
3) João, um indivíduo muito mal intencionado, vai no contrato e acrescenta um 0 no valor, ficando com um pagamento de 100000 (cem mil).
4) Logicamente, o hash do documento não vai mais coincidir. O que faz João ? Monta um procedimento automatizado que acrescenta sucessivamente caracteres de espaço no fim do documento. A cada espaço acrescentado, um hash é obtido.
5) Esse processo continua indefinidamente, até que o hash crie uma colisão.
6) Feliz com o resultado, João guarda sua versão do documento, que é diferente mas tem o mesmo hash do documento de José. Agora ele pode reclamar e contar com Maria, que vai autenticar o documento fornecido por ele, pois os hashes coincidem.

Essa técnica de ataque é chamada Ataque do Aniversário por conta de um exercício clássico de análise combinatória e probabilidade, que diz que a probabilidade de haver duas pessoas com a mesma data de aniversário em um universo de 50 pessoas beira 100%, ou seja, é praticamente certo de acontecer.

No próximo post, vamos falar do uso de hashes especificamente em Forense Computacional.

Aguardo comentários e dúvidas,

Até o próximo post !