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.
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.
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.
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.
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).