Ler em inglês

Partilhar via


SDelete v2.05

Por Mark Russinovich

Publicado em: 29 de setembro de 2023

DownloadBaixar SDelete (304 KB)

Introdução

Um recurso da conformidade com C2 do Windows NT/2000 (Win2K) é que ele implementa a proteção de reutilização de objetos. Isso significa que, quando um aplicativo aloca espaço de arquivo ou memória virtual, ele não consegue exibir dados que foram armazenados anteriormente nos recursos que o Windows NT/2K aloca para ele. Windows NT zera a memória e zera os setores no disco onde um arquivo é colocado antes de apresentar qualquer tipo de recurso para um aplicativo. No entanto, a reutilização de objeto não determina que o espaço que um arquivo ocupa antes de ser excluído seja zerado. Isso ocorre porque o Windows NT/2K foi projetado com a suposição de que o sistema operacional controla o acesso aos recursos do sistema. No entanto, quando o sistema operacional não está ativo, é possível usar editores de disco bruto e ferramentas de recuperação para visualizar e recuperar dados que o sistema operacional desalocou. Mesmo quando encripta ficheiros com o Sistema de Encriptação de Ficheiros (EFS) do Win2K, os dados originais de um ficheiro não encriptado são deixados no disco depois de uma nova versão encriptada do ficheiro ser criada.

A única maneira de garantir que os arquivos excluídos, bem como os arquivos que você criptografa com o EFS, estejam protegidos contra recuperação é usar um aplicativo de exclusão seguro. Os aplicativos de exclusão segura substituem os dados no disco de um arquivo excluído usando técnicas que são mostradas para tornar os dados do disco irrecuperáveis, mesmo usando tecnologia de recuperação que pode ler padrões em mídia magnética que revelam arquivos excluídos fracamente. SDelete (Secure Delete) é uma aplicação desse tipo. Você pode usar o SDelete tanto para excluir arquivos existentes com segurança, quanto para apagar com segurança todos os dados de arquivos que existem nas partes não alocadas de um disco (incluindo arquivos que você já excluiu ou criptografou). O SDelete implementa o padrão de limpeza e higienização do Departamento de Defesa DOD 5220.22-M, para lhe dar confiança de que, uma vez excluído com o SDelete, seus dados de arquivo desaparecerão para sempre. Observe que o SDelete exclui com segurança os dados do arquivo, mas não os nomes dos arquivos localizados no espaço livre em disco.

Usando o SDelete

SDelete é um utilitário de linha de comando que usa várias opções. Em qualquer uso, ele permite que você exclua um ou mais arquivos e/ou diretórios, ou limpe o espaço livre em um disco lógico. O SDelete aceita caracteres curinga como parte do diretório ou especificador de arquivo.

Utilização:

sdelete [-p passes] [-r] [-s] [-q] [-f] <file or directory [...]>
sdelete [-p passes] [-q] [-z|-c] <drive letter [...]>
sdelete [-p passes] [-q] [-z|-c] <physical disk number [...]>
Parâmetro Description
-c Espaço livre limpo.
-f Forçar argumentos contendo apenas letras a serem tratados como um arquivo/diretório em vez de um disco.
Não é necessário se o argumento contiver outros caracteres (separadores de caminho ou extensões de arquivo, por exemplo).
-p Especifica o número de passos de substituição (o padrão é 1).
-q Modo silencioso.
-r Remova o atributo Somente leitura.
-s Subdiretórios recorrentes.
-z Zero espaço livre (bom para otimização de disco virtual).
-nobanner Não exiba o banner de inicialização e a mensagem de direitos autorais.
  • Os discos não devem ter volumes para serem limpos.
  • Para letras de unidade, inclua :, por exemplo D:, .

Como funciona o SDelete

A exclusão segura de um arquivo que não tem atributos especiais é relativamente simples: o programa de exclusão segura simplesmente substitui o arquivo pelo padrão de exclusão segura. O que é mais complicado é excluir com segurança arquivos compactados, criptografados e esparsos do Windows NT/2K e limpar com segurança os espaços livres do disco.

Compactados, criptografados e esparsos são gerenciados pelo NTFS em blocos de 16 clusters. Se um programa grava em uma parte existente de tal arquivo, o NTFS aloca novo espaço no disco para armazenar os novos dados e, após os novos dados terem sido gravados, deslocaliza os clusters anteriormente ocupados pelo arquivo. O NTFS adota essa abordagem conservadora por razões relacionadas à integridade dos dados e, no caso de arquivos compactados e esparsos, no caso de uma nova alocação ser maior do que a existente (os novos dados compactados são maiores do que os dados compactados antigos). Assim, substituir tal arquivo não terá sucesso em excluir o conteúdo do arquivo do disco.

Para lidar com esses tipos de arquivos , o SDelete depende da API de desfragmentação. Usando a API de desfragmentação, o SDelete pode determinar com precisão quais clusters em um disco são ocupados por dados pertencentes a arquivos compactados, esparsos e criptografados. Uma vez que o SDelete sabe quais clusters contêm os dados do arquivo, ele pode abrir o disco para acesso bruto e substituir esses clusters.

A limpeza do espaço livre representa outro desafio. Como FAT e NTFS não fornecem meios para um aplicativo endereçar diretamente o espaço livre, o SDelete tem uma das duas opções. A primeira é que ele pode, como faz para arquivos compactados, esparsos e criptografados, abrir o disco para acesso bruto e substituir o espaço livre. Esta abordagem sofre de um grande problema: mesmo que o SDelete fosse codificado para ser totalmente capaz de calcular as partes de espaço livre das unidades NTFS e FAT (algo que não é trivial), correria o risco de colisão com operações de arquivos ativas que ocorrem no sistema. Por exemplo, digamos que o SDelete determina que um cluster é livre e, justamente nesse momento, o driver do sistema de arquivos (FAT, NTFS) decide alocar o cluster para um arquivo que outro aplicativo está modificando. O driver do sistema de arquivos grava os novos dados no cluster e, em seguida , o SDelete aparece e substitui os dados recém-gravados: os novos dados do arquivo desapareceram. O problema é ainda pior se o cluster for alocado para metadados do sistema de arquivos, uma vez que o SDelete corromperá as estruturas em disco do sistema de arquivos.

A segunda abordagem, e a que o SDelete adota, é substituir indiretamente o espaço livre. Primeiro, o SDelete aloca o maior arquivo possível. O SDelete faz isso usando E/S de arquivo não armazenadas em cache para que o conteúdo do cache do sistema de arquivos NT não seja descartado e substituído por dados inúteis associados ao arquivo de espaço do SDelete. Como a E/S de arquivo não armazenada em cache deve estar alinhada por setor (512 bytes), pode haver algum espaço restante que não é alocado para o arquivo SDelete, mesmo quando o SDelete não pode aumentar ainda mais o arquivo. Para pegar qualquer espaço restante, o SDelete em seguida aloca o maior arquivo armazenado em cache que puder. Para ambos os arquivos , o SDelete executa uma substituição segura, garantindo que todo o espaço em disco que estava livre anteriormente seja limpo com segurança.

Em unidades NTFS, o trabalho do SDelete não é necessariamente concluído depois que ele aloca e substitui os dois arquivos. O SDelete também deve preencher todas as partes livres existentes do NTFS MFT (Master File Table) com arquivos que cabem em um registro MFT. Um registro MFT normalmente tem 1 KB de tamanho, e cada arquivo ou diretório em um disco requer pelo menos um registro MFT. Arquivos pequenos são armazenados inteiramente em seu registro MFT, enquanto arquivos que não cabem em um registro são alocados clusters fora do MFT. Tudo o que o SDelete tem que fazer para cuidar do espaço MFT livre é alocar o maior arquivo que puder - quando o arquivo ocupa todo o espaço disponível em um registro MFT NTFS impedirá que o arquivo fique maior, uma vez que não há clusters livres no disco (eles estão sendo mantidos pelos dois arquivos SDelete alocados anteriormente). SDelete então repete o processo. Quando o SDelete não pode mais criar um novo arquivo, ele sabe que todos os registros anteriormente livres no MFT foram completamente preenchidos com arquivos substituídos com segurança.

Para substituir nomes de arquivo de um arquivo excluído, o SDelete renomeia o arquivo 26 vezes, cada vez substituindo cada caractere do nome do arquivo por um caractere alfabético sucessivo. Por exemplo, a primeira mudança de nome de "foo.txt" seria para "AAA. AAA".

A razão pela qual o SDelete não exclui nomes de arquivos com segurança ao limpar o espaço livre em disco é que excluí-los exigiria manipulação direta das estruturas de diretório. As estruturas de diretório podem ter espaço livre contendo nomes de arquivos excluídos, mas o espaço livre de diretório não está disponível para alocação em outros arquivos. Portanto, o SDelete não tem como alocar esse espaço livre para que possa substituí-lo com segurança.

DownloadBaixar SDelete (304 KB)

Funciona em:

  • Cliente: Windows 10 e superior.
  • Servidor: Windows Server 2012 e superior.
  • Nano Server: 2016 e superior.