segunda-feira, 5 de outubro de 2009

Bad Sectors

Li uma matéria bastante interessante na revista Digital Investigation. A matéria nem é tão nova assim (é de 2007) mas o assunto vale um reforço.


O sonho de todo Perito é chegar, depois de longas horas fazendo uma imagem forense, a uma tela informando que tudo terminou bem. Topar com bad sectors e/ou bad clusters pode ser uma grande dor de cabeça. O hash do dispositivo não vai bater com a cópia e ainda tem a possibilidade da operação parar e nos obrigar a fazer tudo de novo.


O artigo trata exatamente de um estudo a respeito do comportamento de algumas ferramentas de captura de imagem forense quando encontram bad sectors. O estudo foi feito por dois pesquisadores do NIST e usaram os seguintes critérios nos testes de ferramentas:


1) A ferramenta deve capturar todos os setores que não estejam ruins;

2) Ela deve identificar os setores que estão ruins na imagem;

3) Ela deve preencher com dados documentados os setores da imagem que são relativos aos setores ruins do dispositivo. Por exemplo, se um HD estiver com os setores 10,11 e 12 ruins (bad sectors), então esses mesmos setores da imagem deverão ser preenchidos com padrões reconhecidos e bem documentados.


Com esses critérios, a pesquisa realizou uma série de aquisições de imagens usando HDs com bad sectors devidamente mapeados. Vários utilitários foram usados nessas aquisições, e a forma de conectar o HD à estação forense também foi documentada (por firewire ou diretamente). O resultado não foi muito animador ...


Apesar de terem testado poucas ferramentas, fica nítido a falta de capacidade do dd e seus genéricos atenderem ao que foi especificado. Os que melhor saíram no teste foram o IXimager, do iLook e o dd do BSD. Os outros todos deixaram de ler setores bons que estavam nas proximidades dos setores ruins. Além disso, os setores da imagem relativos aos setores ruins do HD foram preenchidos com lixo pelo dd do FreeBSD (os utilitários dd baseados no Linux preenchem com zeros, corretamente).


A questão de não ler setores bons nas proximidades de setores ruins tem relação com tamanho do bloco de leitura. Imagine que o dd foi configurado para ler blocos de 4k e o HD sendo capturado possui um setor danificado de 512 bytes. Em determinado momento, a requisição de leitura irá falhar porque dentro do bloco de 4k lido estará o setor defeituoso de 512b. No fim das contas, todo o bloco de 4k na imagem receberá zeros, e não apenas os 512b realmente defeituosos. Dos oito setores dentro de um bloco, apenas um estava defeituoso mas todos os outros sete ficaram desperdiçados. Nesses sete blocos desperdiçados podemos ter dados importantíssimos para o caso, definindo-o.

O estudo não contemplou outras ferramentas, mas gostaria de citar que há um conjunto especialmente desenvolvido para tratar erros de leitura em bad sectors:

- RDD
- DD_Rescue
- ddrescue

Além de realizarem as operações normais de captura (dd), essas ferramentas podem trabalhar com tamanhos de blocos de leitura que podem variar, se encontrarem um bad sector. Dessa forma, no exemplo anterior, a ferramenta tentaria ler o bloco de 4k e ao receber o erro de leitura, ela tentaria novamente, agora com um bloco da metade do tamanho (2k). Se conseguir, ela avança com o processo; se não, continua a dividir o tamanho do bloco até que tenha sucesso na leitura ou chegue no tamanho mínimo de 512b. Pela lógica, a ferramenta não lerá apenas os setores que realmente estiverem danificados.

Além disso, as ferramentas podem ser configuradas para iniciarem a operação em sentido inverso, dos últimos setores para o primeiro. Em alguns casos, mesmo alguns setores ruins conseguem ser lidos dessa forma.

Comentários ? Alguém quer compartilhar suas experiências com essas ferramentas ou com bad sectors ? Participe !

Até o próximo post !

Nenhum comentário: