Imagens E01/EWF

Opa, e aí galera?

Tudo bem?
Hoje nós vamos falar sobre imagens EWF/E01. Mas, primeiramente, vamos falar um pouco sobre a história de como surgiu esse tipo de imagem.

1) História
Bom, em 1998, a empresa Guidance criou um software inovador que viria a ser o líder de mercado na área de forense computacional. Na época, ou seja, em 1998, este software se chamava Expert Witness. Então, uma empresa chamada ASR Data, que já detinha a marca "expert witness" registrada, entrou com um processo contra a Guidance com o intuito de proibí-la a usar a marca "expert witness". No fim das contas, a Guidance mudou a marca para EnCase. E é por isso que o formato da imagem gerada pelo software EnCase se chama EWF (Expert Witness Format).

Acontece que este formato começou a ser também chamado de E01. Isso significa que o formato EWF pode ser também chamado de E01.

2) LibEWF
Uma das primeiras coisas a se falar é que para se manipular imagens no formato ewf/e01 (ler e escrever), precisamos de uma biblioteca chamada libewf. É ela quem permite fazer leitura e escrita no formato ewf/e01.
Os formatos suportados para leitura e escrita são:
  • SMART .s01 (EWS-S01), 
  • EnCase .E01 (EWF-E01) e Ex01 (EWF2-Ex01); 

Os formatos suportados somente para leitura são:
  • LEF (Logical Evidence File), .L01 (EWF-L01) e o formato Lx01 (EWF2-Lx01)

A biblioteca libewf possui algumas ferramentas que permite trabalharmos com as imagens forense. As principais ferramentas são:
  • ewfacquire: utilitário que cria uma imagem forense de algum dispositivo. Essa imagem será no formato EWF.
  • ewfinfo: utilitário que mostra os metadados da imagem. Estes metadados foram criados no momento da criação da imagem forense.
  • ewfverify: utilitário que verifica a integridade de cada pedaço da imagem forense. 
  • ewfexport: utilitário que exporta a imagem do formato EWF para o formato RAW
Existem outros utilitários que fazem parte do pacote libewf, mas creio que estes sejam os principais.


3) Características
O formato ewf/e01 é um formato interessante. Ele permite comprimir os dados da imagem forense, Assim, quando analisamos um arquivo de imagem do tipo "raw" (criado através da ferramenta DD) e o comparamos com a sua versão no formato ewf/e01, podemos notar que a imagem no formato do encase é bem menor. Ou seja: o formato do encase permite a compressão de dados.
A imagem a seguir mostra a diferença entre a imagem no formato e01 (comprimida) e a mesma imagem em formato raw (não comprimida):

Uma outra característica interessante é que agente pode dividir a imagem forense de um HD ou de uma partição em pedaços. Cada um desses pedaços serão renomeados da seguinte forma: imagem.Exx. Portanto, se eu tenho um HD de 20 gigas, e quero ter 2 pedaços no formato ewf, os meus arquivos de imagem forense ficam desta forma: imagem.E01 e imagem .E02. Se eu quero ter 3 pedaços no formato ewf, os meus arquivos de imagem forense ficam desta forma: imagem.E01, imagem.E02 e imagem.E03. Resumindo a história é que eu posso ter múltiplos pedaços que formam a imagem forense do meu disco/partição


4) Criando uma Imagem Forense E01
Já falamos sobre a história do formato ewf/e01, já falamos sobre a libewf, já falamos sobre algumas características do formato ewf/e01; agora é mão na massa. Nós vamos falar agora sobre como criar uma imagem forense no formato ewf/e01.

Uma das formas de criar uma imagem forense no formato ewf/e01 é usando o FTK Imager. E essa opção é boa se eu tenho, por exemplo, uma máquina virtual e quero criar uma imagem forense dessa máquina virtual. Basta carregar o FTK Imager e no momento de escolher qual o alvo, eu indico o disco virtual da máquina virtual em questão. Maiores explicações sobre como realizar uma imagem forense com o FTK Imager podem entrar neste link: http://periciadigitaldf.blogspot.com.br/2012/12/criando-imagens-forense-com-ftk-imager.html

Uma outra forma de criar uma imagem forense no formato ewf/e01 é usando distribuições linux voltadas para forense computacional. Como exemplo, nós temos as distribuições Helix, Caine, SIFT, e até mesmo a Kali Linux, etc.
Neste exemplo aqui, eu vou fazer uma imagem forense de um pendrive.
OBS: Se você tiver alguma dúvida persistente, existem alguns vídeos no youtube mostrando o processo. Um exemplo de vídeo é este aqui.

Bom, vamos para o primeiro passo: eu vou atachar o pendrive no SIFT. Depois eu digito o comando "fdisk -l" para ver se o pendrive foi reconhecido. Após isso, eu já posso começar a fazer a imagem da minha pendrive. O comando é: ewfacquire (dispositivo alvo que eu quero criar a imagem). Como no meu exemplo a pendrive foi reconhecida como o dispositivo /dev/sdc, a linha de comando fica assim: ewfacquire /dev/sdc.


Pode-se notar que o utilitário pergunta algumas informações. Basta responder; é muito tranquilo. Algumas perguntas ele já até coloca a opção entre colchetes; neste caso basta apertar a tecla "enter", ele já escolhe a opção default. Antes de iniciar o processo de realizar a imagem, ele mostra um resumo com as opções que você escolheu.



Quando ele terminar todo o processo de realização da imagem forense, ele mostra o hash e informa se o processo foi realizado com sucesso


Neste momento, em que todo o processo foi realizado com sucesso, eu posso ainda usar a ferramenta ewfinfo para ver algumas informações sobre a minha imagem forense. Estas informações são os metadados que nós informamos no momento que estávamos iniciando o processo dei magem forense (com a ferramenta ewfacquire). O comando é: ewfinfo (imagem.E01). No nosso exemplo aqui, a linha de comando fica assim: ewfinfo USB.E01


Outro utilitário que também posso usar neste momento é o ewfverify. O comando é: ewfverify (imagem.E01). No nosso exemplo aqui, a linha de comando fica assim: ewfverify USB.E01


5) Montando Imagens EWF
Um fato interessante é que quando temos imagens .e01, vamos notar que depois de montá-la, vamos ver que lá dentro dela existe uma imagem RAW. Ou seja: imagens .e01 funcionam como se fosse contêineres.

Agora, vamos partir para o próximo passo: montar as imagens.
Nesse momento eu não vou usar a imagem do pendrive; eu vou usar as imagens da digital corpora. O cenário que vou usar como exemplo é o M57-Jean. São dois arquivos no formato E01; estes arquivos são o "nps-2008-jean.E01" e "nps-2008-jean.E02".
OBS 1: sempre que temos uma imagem forense no formato EWF com mais de um arquivo (.e01, .e02, .e03 ...), é preciso que todos eles estejam no mesmo diretório. No nosso exemplo aqui, é necessário ter no mesmo diretório os arquivos "nps-2008-jean.E01" e o "nps-2008-jean.E02".
OBS 2: na hora de montar, eu não preciso montar os arquivos com extensão .e02, .e03, .e04, etc. Basta montar o arquivo com extensão .e01. Então, aqui no nosso exemplo, eu só vou montar o arquivo "nps-2008-jean.e01".

Eu vou usar 2 scripts para montar imagens no formato EWF: mount_ewf.py e ewfmount. Mas por que eu vou mostrar exemplos com esses 2 scripts? Porque na hora de montar a imagem, pode ser que um dê algum tipo de problema; então nós temos a outra opção. Além dessas 2, existem outras opções de scripts para se montar uma imagem; o xmount é uma dessas opções (eu não vou mostrar o xmount nesse post).

Para montar as imagens no formato EWF, precisamos realizar 2 passos (sequencialmente):
  1. O diretório /mnt/ewf é onde vai ficar a minha imagem RAW. Então primeiro eu vou montar a imagem .e01 usando o comando mount_ewf.py (ou ewfmount)
  2. O segundo passo é rodar o comando mount em cima da imagem RAW (e vou montar a imagem RAW no diretório /mnt/windows_mount).
5.1) Montando uma imagem usando o script mount_ewf.py
No exemplo a seguir, a imagem "nps-2008-jean.e01" está no diretório /home/sansforensics/Desktop/cases/Corpora/nps-jean-2008.e01.
Então, a linha de comando fica assim:
# mount_ewf.py /home/sansforensics/Desktop/cases/Corpora/nps-jean-2008.e01 /mnt/ewf


O que chama a atenção neste último comando (comando mount) é o parâmetro offset. Este parâmetro indica o offset da partição que vamos analisar dentro do disco virtual (lembrando que esta imagem é uma imagem do HD, ou seja, uma imagem física).
Toda vez que temos uma imagem de um disco virtual (e não de uma partição), precisamos usar este parâmetro offset e indicar justamente o offset do início da partição, que neste caso o offset é o setor 63. Como os setores são de 512 bytes, basta multiplicar o offset pelo tamanho do setor (63 setores * 512 bytes por setor = 32256). Ou seja, para montar partição com o filesystem NTFS, eu preciso passar o parâmetro offset=32256.
E se ao invés de 63, estivesse aparecendo 2048? Aí bastaria fazer o seguinte: 2048 * 512, que seria igual a 1048576. Assim, o parâmetro offset=1048576. Fácil, né? :)

Para desmontar a imagem, é preciso fazer 3 coisas.
  1. Sair do diretório /mnt/ (e consequentemente sair também dos seus subdiretórios). Por exemplo, eu fui para o diretório /home/sansforensics
  2. umount /mnt/windows_mount
  3. Por fim, o comando: umount /mnt/ewf



Se eu desmontasse somente o diretório /mnt/windows_mount, o diretório /mnt/ewf ainda estaria montado. Por isso é necessário desmontar os dois diretórios.

5.2) Montando uma imagem usando o script ewfmount
Este script tem a linha de comando igual ao mount_ewf.py. A diferença entre os dois é que o script ewfmount é produto de uma atualização do outro script. Isso significa que o ewfmount é mais atual que o mount_ewf.py. Mas os dois funcionam do mesmo jeito.
A linha de comando é:
# ewfmount /home/sansforensics/Desktop/cases/Corpora/nps-jean-2008.e01 /mnt/ewf


Para Desmontar, vamos fazer do mesmo jeito que fizemos com o mout_ewf.py: desmontamos primeiro o diretório /mnt/windows_mount (umount /mnt/windows_mount) e depois desmontamos o diretório /mnt/ewf (umount /mnt/ewf)

Bom, é isso galera
Um abração!



Referências Bibliográficas:

Nenhum comentário:

Postar um comentário