quarta-feira, 1 de agosto de 2007

Nosso Amigo Hash - Parte IV

Hash aplicado na Forense Computacional - Prática

Quinto exemplo: Determinando e Selecionando Arquivos Conhecidos e Desconhecidos

Já comentei em um dos posts passados sobre um grande problema para os investigadores computacionais: O enorme número de arquivos e artefatos para serem analisados.

A técnica mais comum para diminuir a quantidade de arquivos é aplicar filtros que separem a mídia analisada, destacando os arquivos que são conhecidos dos desconhecidos. Dessa forma, esquecemos os conhecidos e mantemos o foco da análise nos desconhecidos, na busca de evidências.

Para ajudar nessa classificação (conhecido e desconhecido), entra em cena nosso amigo hash. A técnica consiste em:
1) Computa-se o hash do arquivo
2) Busca-se na base pelo hash computado. Se achou, o arquivo é classificado como conhecido
3) Se não achou, o arquivo é classificado como desconhecido e vai receber maior atenção durante a análise.

Dando nomes aos bois

Continuaremos usando o CD do Helix nos nossos exemplos.

Para aplicar a técnica, usamos o utilitário MD5Deep. Esse utilitário é muito semelhante ao já apresentado MD5Sum. Ele calcula o hash MD5 do arquivo indicado (ou do diretório), mas tem algumas vantagens sobre o MD5Sum:
  • O MD5Deep tem a opção de calcular hashes para cada arquivo em um diretório indicado, podendo descer na estrutura dos subdiretórios, de forma recursiva.
  • É possível passar ao MD5Deep uma lista de hashes e, através de parâmetros, fazê-lo verificar se o hash computado está ou não na lista passada.

A lista citada possui um formato conhecido e pode ser tanto gerada pelo próprio MD5Deep/MD5Sum ou então obtida fazendo o download das bases conhecidas como Hashsets.

Uma das mais acessíveis é a disponibilizada pela NSRL. Essa base, produzida e mantida pelo NIST, é uma grande lista de arquivos contendo o hash computado em MD5 e SHA-1, devidamente separados por Sistema Operacional, Pacote, versão de Software, etc. Ela é atualizada trimestralmente e está na versão 2.17 enquanto escrevo esse post.

Vamos a prática

Primeiro, vamos baixar e montar as bases da NSRL:

1) Faça o download dos 4 arquivos disponibilizados no site da NSRL, nesse link. Verifique que há quatro downloads para se ter a base completa (disc 1 a disc 4) . Lembre-se que os arquivos são muito grandes e podem levar bastante tempo.

2) Após os downloads, use o MD5Sum ou o MD5Deep para calcular o hash do arquivo baixado com o hash declarado no link signatures.

3) Cada arquivo é uma imagem de CD. Extraia dessa imagem os arquivos compactados que no final terão as bases de hashes.

4) Mantenha as bases em um diretório único, divididas nos respectivos subdiretórios, para facilitar.

Ao final dessa etapa, você deverá ter um diretório com 4 subdiretórios, e em cada um deles os arquivos descompactados e extraídos das imagens .iso baixadas. Vamos supor que temos /NSRLFILES com os subdiretórios A, B, C e D.

Na nossa prática, faremos a classificação dos arquivos do diretório /Arquivos de Programas e todos os seus subdiretórios. Todos os arquivos desconhecidos, isto é, que não estiverem na base NSRL, serão exibidos.

cd /Arquivos de Programas
MD5Deep -r -x /NSRLFILES/A/NSRLFile.txt -x /NSRLFILES/B/NSRLFile.txt -x /NSRLFILES/C/NSRLFile.txt -x /NSRLFILES/D/NSRLFile.txt *

A opção -r junto com o * no final do comando faz com que o MD5Deep calcule o hash de todos os arquivos do diretório /Arquivos de Programas e seus subdiretórios.

A opção -x passa uma base de hashes para o utilitário e indica a ele que liste o arquivo se ele não estiver relacionado na base. Como a base NSRL é dividida em 4, adicionamos todas as 4 através dos parâmetros -x. Todos os arquivos que forem listados a partir desse comando são arquivos desconhecidos que receberão maior foco na investigação.

Variações

Podemos, ao invés de classificar todos os arquivos de um diretório, classificar apenas um arquivo (ARQUIVO.EXE, no nosso exemplo). Nesse caso, o comando seria:

cd /Arquivos de Programas
MD5Deep -x /NSRLFILES/A/NSRLFile.txt -x /NSRLFILES/B/NSRLFile.txt -x /NSRLFILES/C/NSRLFile.txt -x /NSRLFILES/D/NSRLFile.txt ARQUIVO.EXE

Outra variação desse uso é carregar apenas a base específica do NSRL. Se você prestou bastante atenção, percebeu que a NSRL dividiu suas bases (non-English sw, operationg systems, application sw, images & graphics) e assim é possível passar para o utilitário MD5Deep apenas a base que se aplica.

Também é possível usar o MD5Deep para criar sua própria base de hashes, bastando redirecionar a saída do comando para um arquivo:

MD5Deep * > novabase.txt

Problemas

Um ponto muito ruim nessa técnica é que as bases são muito grandes e o utilitário carrega para a memória todas as bases passadas para ele antes de começar as comparações. Dessa forma, a memória rapidamente é exaurida com o comando acima que carrega várias bases. Esse problema ficou ainda pior se usado no Helix 1.8, pois nessa versão não há suporte ao swapon/swapoff, comandos que acionam a memória virtual (swap). Nesse caso, a RAM é usada até sua exaustão e o Helix trava.

Além de tentar carregar apenas uma base específica, uma opção para esse problema seria usar esse comando fora do Helix, em um sistema com a memória virtual devidamente configurada.

Ainda assim, há uma opção melhor através do uso de banco de dados, e estaremos falando nisso nos próximos posts.

Uma ultima observação

Os exemplos tratados aqui fazem referência a classificação entre arquivos conhecidos e desconhecidos. Algumas instituições, ao contrário da NSRL, oferecem bases classificadas entre conhecidos bons e conhecidos maus. Exemplos disso seriam uma base com hashes de códigos maliciosos ou hashes de imagens com conteúdo sobre pedofilia. Entretanto, nesses casos nosso interesse maior na investigação é justamente descobrir na imagem analisada os arquivos que tiverem hash coincidindo na base. O comando seria:

cd /Arquivos de Programas
MD5Deep -m /BASEVIRUS/base.txt *

Todos os arquivos do diretório que estiverem classificados na base serão listados. O investigador, a partir daí, intensifica sobre esse resultado sua análise.

Até o próximo post !

Nenhum comentário: