Extraindo a MFT de uma Imagem Forense

Opa, e aí galera

Tudo bem?
Hoje, nós vamos falar sobre como extrair a MFT de uma imagem forense. Obviamente que a MFT é um recurso do Windows. Então, nesse post aqui, nós estaremos analisando uma imagem forense do windows.

1) Introdução
Mas qual a importância da MFT para a análise forense de uma imagem? A MFT é o principal arquivo no NTFS. Nela estão armazenadas referências de todos os arquivos e diretórios do sistema operacional. A MFT armazena os timestamps de cada arquivo, o tamanho, o dono dos arquivos/diretórios, permissões de segurança do arquivo/diretório, etc.
Todas essas informações são armazenadas no que chamamos de MFT Entry.
Cada arquivo/diretório possui uma mft entry (entrada mft). Essa entrada mft (mft entry) é como se fosse um ponteiro, similar ao inode no mundo UNIX.
Portanto, a mft entry contém informações (metadados) sobre o arquivo ao qual ela aponta.

Normalmente, cada entrada mft (mft entry) possui 1024 KB de tamanho. Se olharmos cada entrada mft em um editor hexadecimal, vamos ver que ela começa com a string "file0" ou "file", seguida de informações específicas.
As primeiras 16 entradas da MFT são reservadas para arquivos do NTFS, por exemplo, $BitMap e $Log.

Para o NTFS, tudo é arquivo, inclusive a MFT (que contém informações sobre os arquivos). Portanto, a MFT possui uma entrada pra ela mesma. Este é o primeiro arquivo de toda MFT: uma entrada pra ela mesma, que é representada por $MFT (mft entry 0). O segundo arquivo da MFT é o arquivo $MFTMirr (mft entry 1). O objetivo de existir o $MFTMirr é se ocorrer algum tipo de problema com as primeiras entradas reservadas da mft, eu tenho o $MFTMirr. Ou seja: o $MFTMirr é um backup das 16 entradas reservadas da MFT.

2) Extraindo a MFT de uma Imagem Forense
Eu já vou partir do pressuposto de que vocês já tenham uma imagem forense de um Windows qualquer. E aí, como eu faço para extrair a MFT da imagem forense? Resposta: eu vou mostrar 2 maneiras de extrair a MFT de uma imagem forense:
  1. usando o FTK Imager
  2. usando ferramentas do sleuthkit
2.1) Extraindo com o FTK Imager
Uma maneira simples de se extrair a MFT de uma imagem forense é usar a ferramenta FTK Imager. A figura a seguir mostra um exemplo:

Depois de exportar a MFT, eu vou gerar um arquivo dela. Assim, eu posso escolher qualquer ferramenta que faça o parsing da MFT e analisá-la.
Muito simples, né? :)

2.2) Extraindo a MFT com o Sleuthkit
Uma outra forma de extrair a MFT é fazendo uso do sleuthkit.
Cabe ressaltar que o arquivo $MFT ocupa a primeira posição (posição 0) na MFT. Como eu sei disso? Basta digitar o comando fls "imagem". Assim, a linha de comando é: fls image.001

Neste exemplo, a minha imagem forense se chama image.001.
O utilitário fls lista os arquivos e os diretórios de uma imagem forense.
OBS: a imagem não está montada, por isso eu usei o fls. Se ela estivesse montada, eu poderia usar o comando ls com os parâmetros -lhi.

Depois de usar o utilitário fls, eu vou usar o utilitário icat. O icat serve para copiar um determinado arquivo da imagem forense, tendo como base um determinado inode/mft entry. Isso significa que temos que passar um endereço (número do inode/mft entry) correspondente ao arquivo que queremos copiar da imagem forense.
No nosso exemplo, eu vou copiar a MFT da imagem forense. Como o inode da MFT é 0 (zero), eu vou passar esse endereço na linha de comando do icat.
Portanto, a linha de comando do icat fica assim:
icat -i raw -f ntfs image.001 0 > MFT.raw

Que parâmetros são esses?
É simples. O parâmetro -i indica que a imagem original de onde vamos extrair a mft é uma imagem forense do tipo/formato raw. O parâmetro -f indica que o sistema de arquivos da imagem forense é NTFS. E esse parâmetro 0 (zero), como já dissemos anteriormente, é o endereço da entrada mft da própria mft. No caso, a mft possui como entrada o endereço 0 (zero). Ou seja, a mft entry da própria mft é 0 (zero).

OBS: Existem outras ferramentas que fazem esse trabalho de extrair a MFT de uma imagem forense. Como exemplo, vocês podem ver aqui.

Pronto, agora extraímos a MFT da imagem forense. Qual o próximo passo? É analisar a mft extraída.
Mas isso fica para os próximos capítulos. :)

Bom, é isso galera
Espero que seja útil para o estudo e trabalho de vocês
Um abraço!




Referências:
http://sysforensics.org/2012/01/sift-workstation-video-4-extracting-mft-using-mmls-icat-and-log2timeline/
https://whereismydata.wordpress.com/2009/06/05/forensics-what-is-the-mft/
https://whereismydata.wordpress.com/2008/08/22/file-system-mft-entries-basic/
http://www.cse.scu.edu/~tschwarz/coen252_07Fall/Lectures/NTFS.html
http://grayscale-research.org/new/pdfs/NTFS%20forensics.pdf
https://en.wikipedia.org/wiki/NTFS

Conversão de Imagens

Opa, e aí galera.

Tudo bem?
Hoje nós vamos falar sobre conversão entre alguns formatos de imagens forense. Lembrando que temos basicamente 3 tipos de formato forense: raw (dd), ewf/e01 e AFF. Existem outros, mas esses são os mais usados.
Então, a intensão deste post é falar sobre como fazer a conversão de um formato para outro formato.
Resumindo, o que nós vamos fazer nesse post é a conversão dos seguintes formatos:

1) Conversão do formato EWF/E01 para o formato RAW
Bom, falamos sobre o formato ewf/e01 aqui. Mostramos, inclusive, sobre como criar uma imagem forense nesse formato. Agora, nós vamos mostrar como eu posso converter uma imagem forense "ewf" para o formato "raw".
Mas você pode estar se perguntando: por que eu quero converter de e01 para raw? Qual o benefício disso? A minha resposta é: a partir do formato RAW, eu posso realizar várias técnicas como o file carving visando a recuperação de arquivos, eu posso usar ferramentas para analisar o timeline (e.g. log2timeline), eu posso fazer exame de evidências em geral (analisar o registro do Windows, analisar o histórico do browser, etc) fazendo uso de várias ferramentas forense (até mesmo ferramentas open source). Tudo isso eu consigo fazer quando analiso uma imagem no formato RAW.
E se eu não converter para RAW? Se eu quiser analisar a imagem no formato EWF mesmo? Quais ferramentas eu vou usar para analisar uma imagem no formato EWF? A minha resposta é: basicamente, você vai usar o EnCase, que é uma ferramenta paga/proprietária.

Bom, então vamos lá.
O que eu quero, neste momento, é converter uma imagem do formato ewf para o formato raw. Pra isso, eu preciso ter uma imagem no formato ewf, não é mesmo? :)
E aí vem a pergunta: Onde eu vou conseguir uma imagem .E01/EWF? Resposta: eu vou usar uma imagem forense criada para um exercício do Lance Mueller, o forensics_practical_3. Pra baixar a imagem referente a este exercício, basta ir neste link. No fim deste post, ele coloca o link para baixar a imagem forense.

Existem 2 maneiras de realizar a conversão do formato ewf para o formato raw:
  1. Usando o utilitário ewfexport (que faz parte da libewf)
  2. Usando o utilitário img_cat (que faz parte da suíte do sleuthkit)
Vamos mostrar as 2 opções.
A primeira opção que vou mostrar é usando o utilitário ewfexport.


O utilitário vai fazer algumas perguntas básicas. Vamos analisá-las:
  • na primeira pergunta, ele quer saber qual o formato depois da conversão. No caso, eu escolhi que após a conversão, a imagem vai ser no formato raw
  • na segunda pergunta, ele quer saber o caminho completo do diretório onde a imagem no formato raw será armazenada. Nisso, ele pede pra ser incluído o nome da imagem no formato raw (sem usar nenhuma extensão no nome). No exemplo aqui eu disse que a imagem no formato raw vai se chamar imagem (ele vai adicionar a extensão automaticamente). O path completo (caminho do diretório) onde a imagem será armazenada vai ser em /home/sansforensics/Desktop/cases/Forensics_practical. Lá dentro, vai ter um arquivo chamado imagem.raw.
  • na terceira pergunta, o tamanho do segmento. Esse segmento é quando queremos trabalhar com o chamado split image. E o que é isso? É quando queremos dividir o nosso arquivo de imagem forense em vários pedaços/segmentos. Aí então, se quiséssemos uma split image no formato raw, iríamos indicar qual o tamanho de cada segmento. Como eu não quero que a imagem no formato raw não seja "repartida" em segmentos, eu escolhi o valor zero (0). Isso significa que eu não vou querer "splitar" a imagem forense; eu vou querer somente um arquivo, mesmo que seja grande, para ser a minha imagem forense no formato raw.
  • na quarta pergunta, ele quer saber qual o primeiro byte que será exportado/convertido. Podemos notar que ele mostra um intervalo que vai de 0 até 7.9 EiB. Nesse caso eu indiquei que o primeiro byte a ser exportado/convertido é o byte 0, justamente porque eu quero converter toda imagem no formato ewf, desde o início. Como o início é no byte 0, então eu indiquei que ele vai começar a exportar/converter desde o início :). Isso parece até um pouco óbvio :)
  • na quinta pergunta, ele quer saber o número de bytes a ser exportado/convertido. Como eu quero converter toda a imagem forense, então eu optei por converter o número máximo de bytes da imagem, assim significa que eu vou exportar/converter o arquivo inteiro.
OBS: vale a pena observar que ele mostra os valores defaults entre colchetes. Se você quiser os valores default, é só apertar a tecla Enter.
Como dissemos no post anterior, o formato EWF permite a compressão de dados. Então, a imagem no formato EWF será bem menor do que a mesma imagem no formato RAW.

Outra alternativa que nós temos é usar o utilitário img_cat, que faz parte da suíte de utilitários do sleuthkit. O comando é: img_cat -v -i ewf "imagem.e01" > "imagem.dd"

Podemos notar alguns parâmetros na linha de comando. O primeiro parâmetro (-v) significa que ele vai jogar para o stderr uma saída detalhada de erros; o parâmetro (-i) indica qual é o tipo da minha imagem antes de ser convertida. Neste caso, eu disse que antes da conversão, a minha imagem original é do tipo/formato ewf. Por fim, eu tenho um redirecionamento para um arquivo de imagem forense do tipo raw (imagem.dd).

Podemos notar também a compressão de dados do formato EWF. A imagem no formato EWF é bem menor do que a imagem no formato RAW.


2) Conversão do formato RAW para o formato EWF/E01
E se eu tenho uma imagem forense no formato RAW e quero convertê-la para o formato EWF. Como eu faço isso? Resposta, eu posso usar um utilitário que faz parte da libewf, o ewfacquire.
No post sobre imagens ewf, eu comentei sobre esse utilitário (este utilitário serve para se criar uma imagem forense no formato ewf). Só que eu também posso usar este utilitário para converter uma imagem raw para uma imagem ewf/e01.
Como eu faço isso? Basta digitar: ewfacquire "nome da imagem no formato raw".
Para exemplificar, eu tenho uma imagem no formato raw chamada: imagem.raw. Se eu quiser convertê-la para o formato ewf/e01, basta digitar o comando: ewfacquire imagem.raw. Assim, eu vou converter o arquivo imagem.raw para o formato ewf/e01 (tornando assim imagem.e01).


Vocês podem notar que ele vai me pedir para responder algumas questões básicas. Essas questões são os metadados referentes à imagem no formato EWF (lembram que esse tipo de formato permite armazenar metadados?). Pois é, são algumas perguntas básicas, coisa rápida (nós já vimos sobre o ewfacquire aqui).
Lembrando que para responder as perguntas com as opções default, basta apertar a tecla "enter". Depois de responder essas perguntas, ele começa o processo de conversão. Ao fim, ele mostra quanto tempo durou essa conversão e o hash da nova imagem forense (imagem esta que está no formato ewf).
Agora, uma pergunta: o ewfacquire mostra o hash da nova imagem. Se eu digitar "md5sum imagem.E01", porque esse novo hash vai ser diferente do hash apresentado pelo ewfacquire? Resposta: o hash mostrado pelo utilitário ewfacquire é calculado somente em cima dos dados (isso significa que o hash não leva em conta os metadados da imagem.E01). Portanto, o hash mostrado pelo ewfacquire vai ser igual ao hash do arquivo imagem.raw

3) Conversão do formato AFF para RAW
Já falamos sobre imagens AFF aqui. Se alguém tiver alguma dúvida, basta acessar o link para ver como o aff funciona.
Agora, nós vamos falar sobre a conversão do formato aff para raw.
Eu tenho uma imagem física de uma pendrive. Esta imagem física está no formato AFF? Como eu faço para convertê-la para o formato Raw? Resposta: eu uso o utilitário affconvert (lembrando que nós falamos sobre o affconvert aqui).

E como o affconvert funciona para converter de um formato para o outro? Como ele funciona para converter uma imagem no formato AFF para RAW? É simples. O comando é: affconvert -r "imagem.aff". Neste exemplo, a minha imagem no formato AFF se chama "image.aff". Então, neste exemplo, a linha de comando fica assim: affconvert -r image.aff.

Podemos ver que usei o parâmetro -r. Ele serve para falar que após a conversão, a nova imagem será no formato RAW (-r vem de raw).
Simples, né? :)


4) Conversão do formato RAW para AFF
E se eu quiser converter do formato raw para aff? Qual ferramenta eu posso usar? Resposta: o próprio affconvert. O comando é: affconvert "imagem no formato raw". Como eu vou converter um arquivo de imagem que se chama "imagem.raw", a linha de comando fica assim: affconvert imagem.raw.

Notem que eu não tenho nenhum parâmetro na linha de comando.


5) Conversão do formato AFF para AFF
Agora que nós já falamos de algumas conversões, vamos falar sobre conversão do formato AFF para AFF. Mas como assim? Conversão de um formato para o mesmo formato? Não; o que eu quis dizer é que agora nós vamos falar sobre a conversão entre os vários formatos do container AFF. Lembra que no post passado, sobre imagens AFF, eu comentei que existem 3 métodos/formatos para o container AFF? Esses 3 métodos/formatos são o próprio AFF, o AFD e o AFM.
Então, o que nós vamos fazer agora é pegar uma imagem em um destes 3 formatos e converter para outro formato.

5.1) Conversão do formato AFF para o AFM
A primeira conversão será do formato AFF (armazena tanto os metadados quanto os dados em um único arquivo) para o formato AFM (os metadados são armazenados no arquivo .afm e os dados são armazenados no arquivo splitraw).

Notem que,depois do processo de conversão, eu vou ter 3 arquivos. O arquivo image.000 é o meu arquivo de imagem splitraw. O arquivo image.aff era a minha imagem original, antes da conversão. O arquivo image.afm é o arquivo que contém os metadados referentes a imagem splitraw.
Resumindo, em grosso modo, bem simplista, o que fiz foi o seguinte: eu peguei a imagem aff (arquivo image.aff, que contém os metadados e os dados juntamente em um único arquivo) e separei os metadados dos dados em si; os metadados foi para um novo arquivo (imagem.afm) e os dados foram para o arquivo image.000.
Se eu quiser acessar os metadados, basta digitar o comando "affinfo image.afm. Se eu quiser ver a geometria do disco da minha imagem, basta digitar "mmls image.000" ou "mmls image.aff", vai dar no mesmo.

5.2) Conversão do formato AFF para o AFD
Agora, nós vamos fazer a conversão da imagem no formato AFF para o formato AFD. Lembrando que no formato AFF a imagem e os metadados estão contidos em um único arquivo; e, no formato AFD, os metadados estão armazenados na própria imagem forense, porém, quebra-se a imagem forense em alguns "pedaços".

O nome da imagem forense no formato AFF é: image.aff.
Depois do processo de conversão, será criado um diretório para os arquivos AFD (o diretório recebe o nome da imagem com extensão AFD - image.afd). Nesse diretório estarão os arquivos da imagem splitraw. No meu exemplo, dentro do diretório image.afd, eu vou ter o arquivo file_000.aff (que é um arquivo AFF - img_stat file_000.aff). Se eu quiser, eu posso até montar o arquivo file_000.aff usando o utilitário affuse; já vimos esse procedimento aqui.

5.3) Conversão do formato AFD para o AFM
O processo é o mesmo. Eu vou usar o utilitário affconvert com o parâmetro -a.

Depois do processo de conversão, eu vou ter 4 arquivos:
  • image000: a imagem forense em si. Ela é do tipo splitraw.
  • image.afd: era a minha imagem no formato AFD antes da conversão
  • image.aff: é somente uma imagem no formato AFF, que não participou em nada no processo de conversão
  • image.afm: arquivo que contém os metadados referentes à imagem splitraw - metadados referentes ao arquivo de imagem image.000
5.4) Conversão do formato AFM para o AFD
O processo não é diferente. Vamos usar novamente o utilitário affconvert com o parâmetro -a.

Se eu quiser, eu posso até entrar no diretório "image.afd", que eu vou ver um arquivo de imagem AFF lá dentro. No meu exemplo aqui, a imagem AFF que vai estar dentro do diretório image.afd é o arquivo: file_000.aff.
Eu posso fazer o que quiser com o arquivo file_000.aff; eu posso montá-lo, e posso também exibir algumas informações (metadados) referentes à imagem forense, usando o utilitário affinfo file_000.aff

5.5) Conversão do formato AFM para o AFF
O processo para conversão do formato AFM para o formato AFF é o mesmo das outras conversões. Eu vou usar o utilitário affconvert com o parâmetro -a

5.6) Conversão do formato AFD para o AFF
Por fim, nós temos a conversão do formato AFD para o formato AFF. Novamente, eu vou usar o utilitário affconvert com o parâmetro -a.


Bom, é isso galera.
Espero que esse post tenha alguma importância para você, leitor.

Um abraço!





Referências: