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 !

Nenhum comentário: