Esculpimento de arquivos

Esculpimento de arquivos (do inglês file carving) é o processo de remontar arquivos de computador a partir de fragmentos na ausência de metadados do sistema de arquivos.

Introdução e princípios básicos

[editar | editar código-fonte]

Todos os sistemas de arquivos contém alguns metadados que descrevem o sistema de arquivos atual. No mínimo a informação a seguir é armazenada: a hierarquia de pastas e arquivos, com nomes para cada um. Para cada arquivo é também armazenado o endereço físico no disco rígido onde o arquivo é armazenado. Como explicado abaixo, um arquivo pode ser dividido em fragmentos com endereços físicos diferentes.

O esculpimento de dados é o processo de tentar recuperar arquivos sem estes metadados. Isto é feito analizando-se os dados brutos e identificando o que eles são (texto, executável, png, mp3 etc.). Isto pode ser feito de diferentes formas, mas a maneira mais simples é por meio da procura de cabeçalhos. Por exemplo, cada arquivo de classe Java tem como seus primeiros quatro bytes o valor hexadecimal CA FE BA BE. Alguns arquivos também possuem rodapés simplificando bastante a identificação do final do arquivo.

A maioria dos sistemas de arquivo, como FAT e UNIX Fast File System, trabalham com o conceito de clusters de um tamanho igual e fixo. Por exemplo, um sistema de arquivos FAT32 pode ser quebrado em clusters de 4 KiB cada. Qualquer arquivo menor que 4 KiB se estabelece em um único cluster e nunca há mais que um arquivo em cada cluster. Os arquivos que ocupam mais que 4 KiB são alocados entre vários clusters. Algumas vezes estes clusters são todos contíguos, enquanto que outras vezes eles são dispersos entre dois ou potencialmente muito mais dos chamados fragmentos, com cada fragmento contendo um número de clusters contíguos armazenando uma parte dos dados de arquivo. Obviamente que arquivos grandes são mais propensos a serem fragmentados.

Simson Garfinkel[1] relatou estatísticas de fragmentação coletadas de cerca de 350 discos contendo sistemas de arquivo FAT, NTFS e UFS. Ele mostrou que enquanto a fragmentação em um disco típico é baixa, a taxa de fragmentação de arquivos de importância forense como e-mail, JPEG e documentos do Word é relativamente alta. A taxa de fragmentação de arquivos JPEG foi encontrada em torno de 16%, documentos do Word possuíram fragmentação de 17%, AVI apresentaram taxa de fragmentação de 22% e arquivos PST (Microsoft Outlook) apresentaram taxa de framentação de 58% (a fração de arquivos sendo fragmentados em dois ou mais fragmentos). Pal, Shanmugasundaram e Memon[2] apresentaram um algoritmo eficiente baseado em uma heurística e poda alfa-beta ambiciosa para remontar imagens fragmentadas. Pal, Sencar e Memon[3] introduziram testes de hipótese sequencial como um mecanismo efetivo para detecção de pontos de fragmentação. Richard e Roussev[4] apresentaram Scalpel, uma ferramenta de esculpimento de dados de código aberto.

O esculpimento de dados é uma tarefa altamente complexa, com um número potencialmente enorme de permutações a tentar. Para tornar esta tarefa tratável, os softwares de esculpimento normalmente fazem uso extensivo de modelos e heurísticas. Isto é necessário não apenas do ponto de vista de tempo de execução, mas também para a precisão dos resultados. O estado da arte dos algoritmos de esculpimento de dados usam técnicas estatísticas como teste de hipótese sequencial para determinar pontos de fragmentação.

O esculpimento de dados pode ser usado para recuperar dados de um disco rígido onde os metadados estão perdidos ou danificados, especialmente por empresas profissionais de recuperação de dados.[5]

Quando um arquivo é removido, apenas a entrada no metadado do sistema de arquivos é removida, enquanto que os dados reais permanecem no disco. Após uma formatação, ou até mesmo de um particionamento, pode ser que a maioria dos dados brutos estejam intocáveis e possam ser recuperados usando esculpimento de dados.

Esquemas de esculpimento

[editar | editar código-fonte]

Esculpimento de lacuna de dois fragmentos

[editar | editar código-fonte]

Garfinkel introduziu o uso de validação rápida de objeto para remontar arquivos que foram divididos em dois pedaços. Esta técnica é descrita como Esculpimento de Lacuna de Dois Fragmentos, do inglês Bifragment Gap Carving (BGC). Um conjunto de fragmentos de início e um conjunto de fragmentos de fim são identificados. Os fragmentos são remontados se juntos eles formam um objeto válido.

Esculpimento inteligente (SmartCarving)

[editar | editar código-fonte]

Pal desenvolveu um esquema de esculpimento que não é limitado a arquivos de dois fragmentos. A técnica, conhecida como SmartCarving, faz uso de heurísticas relativas ao comportamento de fragmentação de sistemas de arquivos conhecidos. O algoritmo possui três fases: pré-processamento, colagem e remontagem. Na fase de pré-processamento, blocos são descomprimidos e/ou descriptografados se necessário. Na fase de colação, os blocos são organizados de acordo com seu tipo de arquivo. Na fase de remontagem, os blocos são colocados em sequência para reproduzir arquivos removidos. O algoritmo de SmartCarving é a base para as aplicações Adroit Photo Forensics e Adroit Photo Recovery da Digital Assembly.

Esculpimento de descargas de memória

[editar | editar código-fonte]

Trechos de memória volátil de computador podem ser esculpidos. O esculpimento de descargas de memória é rotineiramente usado em forense digital, permitindo aos investigadores acessarem evidência efêmera. Evidência efêmera inclui imagens e páginas Web recentemente acessadas, documentos, bate-papos e comunicações enviadas por meio de redes sociais. Se um volume criptografado (TrueCrypt, BitLocker, PGP Disk) foi usado, chaves binárias para recipientes (containers) criptografados podem ser extraídas e usadas para montar tais volumes instantaneamente. O conteúdo de memória volátil fica fragmentado. Um algoritmo de esculpimento proprietário foi desenvolvido pela Belkasoft para habilitar o esculpimento de conjuntos de memória fragmentados (BelkaCarving).

Referências

  1. Simson Garfinkel, "Carving Contiguous and Fragmented Files with Fast Object Validation", in Proceedings of the 2007 digital forensics research workshop, DFRWS, Pittsburgh, PA, August 2007
  2. A. Pal and N. Memon, "Automated reassembly of file fragmented images using greedy algorithms" in IEEE Transactions on Image processing, February 2006, pp 385393
  3. A. Thus, finding the header of a file means that the first fragment of the file is found, but the other fragments might be scattered anywhere else on the partition, making file carving much more challenging. By studying how file systems actually do fragmentation and applying statistics, it is possible to make qualified guesses as to which fragments might fit together. These fragments are then put together in various possible permutations and it is tested if the fragments fit together. For some files it is easy for the software to test if they fit, while for others, the software might accidentally fit the pieces together incorrectly. Pal, T. Sencar and N. Memon, "Detecting File Fragmentation Point Using Sequential Hypothesis Testing", Digital Investigations, Fall 2008
  4. Richard, Golden, Roussev, V., "Scalpel: a frugal, high performance file carver", in Proceedings of the 2005 Digital Forensics Research Workshop, DFRWS, August 2005
  5. [1]