segunda-feira, 28 de junho de 2010

Virtualizacão e CAINE 2.0 - Parte 3

Ainda na técnica do artigo anterior, queremos montar no Windows um disco virtual que é, na verdade, um arquivo colhido em uma aquisição forense. Como nossa máquina a ser investigada era uma máquina virtual, o que temos não é um arquivo no formato dd, EWF ou ainda AFF. Temos um arquivo que é o próprio disco virtual. No entanto, a técnica passada no artigo anterior (Parte 2), mamão com açúcar, acabou indo por água abaixo agora porque dessa vez o que temos é um arquivo .vdi.

VDI é a extensão do arquivo que constitui o disco virtual do VirtualBox, e nesse caso não tem um utilitário free no Windows que faça o que o DiskMount da VMWare faz. Vamos ter que quebrar pedra ...

Antes de sair na briga com o arquivo e ver quem vence, vou logo avisando que a técnica abaixo só funciona em arquivos .vdi fixos, ou seja, o tamanho atual é o pré-estabelecido desde sua criação. Todos os tipos de máquinas virtuais (VMWare, VirtualBox, VirtualPC, etc) fornecem a capacidade de criação de discos virtuais do tipo fixo, onde o arquivo assumirá o tamanho final já no momento de sua criação, ou então discos dinâmicos, onde o arquivo começa com um tamanho pequeno e vai crescendo conforme for recebendo conteúdo, até que finalmente atinja o tamanho final especificado. A bem da verdade, os discos (arquivos .vdi) mais comuns são criados no formato dinâmico, o que nos deixa na mão na técnica abaixo. O DiskMount, como foi desenvolvido diretamente pela VMWare, não enfrenta nenhuma dificuldade com o vmdk, mas a Sun não proveu nada parecido com o DiskMount para o VirtualBox, e acabamos com essa dificuldade a mais. Sem desesperos ! Ao final vou mostrar que nem tudo está perdido se o disco for dinâmico.

A técnica para montar arquivos .vdi fixos para Windows passa pelos seguintes passos:

1) Abra o .vdi em um editor Hexa. Recupere uma DWORD (4 bytes) a partir do offset 76 (em decimal). Esse valor informa o tipo de disco virtual, se dinâmico (1) ou fixo (2). Portanto, para essa técnica funcionar você deverá achar 00000001. Lembre-se que a informação estará em Little Endian, ficando invertido. Na prática, no editor hexa você verá 01000000.

2) Ainda no mesmo editor hexa, vá para o offset 344 (em decimal). Recupere uma DWORD (4 bytes) que refere-se ao offset de onde a tabela de partições do disco efetivamente começa. Lembre-se que o valor vai estar invertido (little endian) e em hexadecimal. Por exemplo, em um dos meus arquivos .vdi o valor no editor hexa é 00C80100, o que equivale à 0001C800 em hexa, ou a 116736 em decimal.

3) Vá até esse offset no editor hexa e visualize o início da MBR. Daqui em diante, pode-se fazer alguma técnica de extração que crie um novo arquivo a partir desse ponto até o final, gerando um arquivo .dd que pode ser pesquisado no TSK (SleuthKit) e montado por outras ferramentas, como o ImDisk. Uma maneira de extrair pode ser usando o próprio editor hexa. Outra prática é usando um utilitário dd para Windows como no ex:

c:/>dd if=arquivo.vdi of=minhaimagem.dd offset=116736

4) O exemplo acima funciona, mas vai tomar muito tempo e espaço, já que estamos extraindo todo o disco, praticamente, jogando para um novo arquivo. Para evitar isso, podemos fazer o seguinte: Extraia uma porção bem menor, 1Mb, por exemplo. Novamente, isso pode ser feito tanto do editor hexa quanto do utilitário dd.

c:/>dd if=arquivo.vdi of=pedaco.dd offset=116736 count=1M

5) Esse pequeno pedaço da nossa imagem contém a tabela de partições, que pode ser consultada pelo utilitário mmls do TSK para se determinar onde cada partição está e qual o offset (em setores) de cada uma. No meu exemplo:

c:/>mmls pedaco.dd

6) Localize o offset da partição desejada e o tamanho de cada setor. Em geral, cada setor tem 512 bytes e as partições costumam ter offset 63, o que faz offset da minha partição a ser montada (em relação ao início da MBR) ser 63 x 512 = 32256. Com esse valor calculado, o pedaco.dd pode ser apagado.

7) Agora temos onde a MBR começa dentro do arquivo (116736, no meu exemplo) e onde, a partir daí, está a minha partição a ser montada. Com isso, o offset dessa partição é, a partir do início do arquivo .vdi, igual a 116736+32256= 148992

8) Com esse número, podemos finalmente usar o ImDisk para montar a partição. Verifique que o ImDisk pede o offset da partição em bytes. Nesse campo, informamos o valor calculado acima. Logicamente, o arquivo usado é o .vdi. Prontinho, a partição desejada estará disponível com a letra escolhida no ImDisk.

9) Se você quiser pular toda a trabalheira e ciência acima, há um atalho. Basta buscar pela string NTFS a partir do início do arquivo .vdi (logicamente, se a partição a ser montada for NTFS). O primeiro a ser achado deverá ser um conjunto de bytes EB 52 90 4E 54 46 53. Esse é o offset da partição a ser montada. Lembre-se de pegar o offset em decimal. Outro detalhe: Essa dica rápida só funciona em NTFS. FAT, ext2, ext3, etc tem assinaturas diferentes.

Bem, fechando o artigo, eu diria que além do problema de só funcionar para arquivos .vdi fixos, essa técnica é por demais trabalhosa. Quer um atalho ??? O WinMount faz tudo isso automaticamente, só com um clique, e custa apenas U$ 40 doletas. Monta .vdi dinâmico e estático. Além disso, monta vmdk e VHD também. Uma pechicha e ainda vem com um trial de 15 dias.

Comentários ?

Para o próximo artigo, vamos explorar outras possibilidades de trabalho com arquivos de discos virtuais.

Até o próximo post !

Nenhum comentário: