Monday, April 18, 2011

Forensics Data Carving

Uma notícia que chocou e revoltou todos os Brasileiros recentemente foi o caso do massacre do Realengo, onde o atirador Wellington Menezes de Oliveira abriu fogo contra crianças dentro de uma escola pública.

Para minha surpresa, esta semana fui agraciado por uma reportagem do jornal Extra, que circula no Rio de Janeiro, com a seguinte nota:

Técnicos do ICCE estão usando o software desenvolvido pelo FBI para recuperar as informações contidas nos computadores apreendidos na casa de Wellington. O programa EnCase, fornecido pela Techbiz Forense Digital, possibilita a recuperação até de arquivos que tenham sido apagados pelo atirador. Dois dos três HDs, os discos de memória dos equipamentos, estão em melhores condições.

Para mim foi muito satisfatório ler este trecho em específico. Mesmo que indiretamente e de forma diminuta, estamos colaborando com a solução dos mistérios que ainda envolvem este caso.

Para este artigo, resolvi falar sobre as técnicas utilizadas para recuperação destes arquivos apagados, chamada de data carving: Basicamente, data carving é um processo que localiza arquivos e objetos que foram deletados ou que estão "inseridos" em outros arquivos.


Os arquivos são "esculpidos" a partir do espaço alocado (ou não) baseando-se no "header" (cabeçalho) do tipo de arquivo e nos "footers" (rodapé). As estruturas do sistema de arquivos (FAT, MFT, inode table) não são utilizados durante o processo. Para demonstrar este recurso, vou utilizar o FTK, da AccessData.

Após criado o caso, o FTK nos solicita adicionar os arquivos de evidência e permite configurar o processamento destas evidências. Um click no botão "Refinement Options" abre a seguinte tela:



Observe que um dos últimos itens da lista a esquerda chama-se Data Carve, que vem desmarcado por padrão. Marcando esta opção, habilita-se o botão Carving Options, que nos exibe a seguinte tela:


Nesta tela, podemos verificar os tipos mais comuns de arquivos que o FTK consegue "esculpir" a partir do arquivo de evidência:

• AOL Bag Files
• BMP Files
• EMF Files
• GIF Files
• HTML Files
• JPEG Files
• LNK Files
• OLE Files (Office Documents)
• PDF Files
• PNG File

Vou tomar como exemplo um formato de arquivo muito popular, o JPEG, utilizado para arquivos de imagens. Praticamente todas as imagens que você vê na internet e também neste blog estão em formato JPEG. Na prática, o que um "data carve" faz é procurar uma sequência em hexadecimal 0xFF D8, que representa o início de um arquivo JPEG, e procurar depois o final deste arquivo, representado pelo 0xFF D9. Feito isso, tudo o que estiver entre estes dois blocos de imagem forma um arquivo de imagem JPEG:



No primeiro exemplo deste post há um arquivo de imagem "dentro" de um documento do Word. O princípio de funcionamento é o mesmo: imagina este documento do Word gravado no disco. O conjunto de dados que representa esta imagem está lá, o FTK só precisa "abrir" este documento do Word para conseguir achar o 0xFF D8 ...... 0xFF D9!

O mesmo princípio se aplica também a um arquivo de imagem JPEG, dentro de um arquivo do Word, compactado em um arquivo ZIP e enviado por e-mail. (!!!)


O FTK consegue abrir todos estes arquivos até chegar aos JPEG que estamos buscando.


Os mais atentos perceberam que o último item da tela do "Carving Options" não está presente na lista: Microsoft Outlook Personal Folder, ou simplesmente PST. Isso é por que esta não é uma entrada padrão do sistema, este é um "carve" customizado, disponível através do botão "Custom Carvers":


Observe que é informado o "header" do arquivo PST (representado por 0x21 42 44 4E) e o tamanho máximo do arquivo (em bytes). É possível até mesmo categorizar o arquivo através da seleção de algum item na árvore File Category. Ao contrário dos arquivos JPEG, um arquivo PST é extenso, e pode sofrer mais com a fragmentação dos dados no disco. Já existem algumas técnicas que tentam recuperar os fragmentos de um mesmo arquivo espalhados pelo disco após a perda da referencia (delete arquivo, wipe MFT free space, por exemplo), e os resultados são animadores!

Claro que, se você utiliza o FTK, não precisa se preocupar em saber headers e footers dos arquivos, a AccessData disponibiliza em seu site, quase 300 tipos de arquivos já pré-definidos, bastando importá-los para o seu FTK. Estes arquivos estão disponíveis em http://accessdata.com/support/custom-carvers e estão categorizados em formatos de arquivos para Windows, para Linux e para MacOS.


Leia mais sobre o formato JPEG aqui.
Leia mais sobre data carving em um excelente estudo da SANS sobre o tema aqui.
Leia mais sobre o processo de data carving no FTK através do manual do sistema, disponível aqui.

[update 19/04]

Excelente o trabalho: Advanced File Carving - How much evidence are you ignoring - by Bas Kloet - http://bit.ly/eKMotZ  (tks, Sandro!)

5 comments:

Ronaldo Lima said...

Muito bom o artigo, conhecia os headers para identificar o tipo do arquivo mas não os footers para delimitar o final.

Tobias said...

Se a imagem jpeg estiver dentro de um zip ou dentro de um arquivo doc, ela vai continuar com o hexadecimal do header e footer inalterados? Pelo que entendi do teu post, sim, vai. Mas parece estranho pensar que isso é possivel, ainda mais no zip, que comprime o arquivo.

Luiz Rabelo said...

Olá Tobias! É exatamente isso. De fato, com a compressão, os dados do header / footer do arquivo não estarão na sua forma original, mas o FTK consegue "descompactar" o arquivo antes de executar a análise, entendeu?

Grande abraço!

Tobias said...

Atendo-me a técnica, nao a um software em si. Como seria feito esta busca, o data carving ? É necessario ter um algoritimo capaz de ler os dados em zip, doc, etc? Caso afirmativo, existe alguma outra maneira de se ler estes dados sem que se tenha a possibilidade de decifrar o seu conteudo?

Luiz Rabelo said...

Sim, com certeza. Os algoritimos de carving buscam, por exemplo, 0xFFD8 no disco quando procuram por imagens JPG. Caso o arquivo de imagem esteja salvo em um arquivo zip, doc, etc, deverá haver um algoritimo capaz de interpretar estes dados para então montar o arquivo de imagem JPG. Caso contrário, o algoritimo de carving somente será capaz de recuperar arquivos deletados, não os dados "compostos".

[]s!

Post a Comment