SDelete v2.05
Por Mark Russinovich
Publicado: 29 de setembro de 2023
Baixar o SDelete (304 KB)
Um recurso da conformidade C2 do Windows NT/2000 (Win2K) é que ele implementa a proteção contra a reutilização de objetos. Isso significa que, quando um aplicativo aloca espaço de arquivo ou memória virtual, ele não pode exibir os dados que foram armazenados anteriormente nos recursos que o Windows NT/2K alocou para ele. O Windows NT zera a memória e zera os setores do disco nos quais um arquivo é colocado antes de apresentar qualquer tipo de recurso a um aplicativo. Entretanto, a reutilização de objetos não exige que o espaço que um arquivo ocupa antes de ser excluído seja zerado. Isso ocorre porque o Windows NT/2K foi projetado pressupondo 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 exibir e recuperar dados que o sistema operacional desalocou. Mesmo quando você criptografa arquivos com o EFS (Encrypting File System) do Win2K, os dados originais não criptografados de um arquivo são deixados no disco depois que uma nova versão criptografada do arquivo é criada.
A única maneira de garantir que os arquivos excluídos, bem como os arquivos criptografados com o EFS, estejam protegidos contra recuperação é usar um aplicativo de exclusão segura. Os aplicativos de exclusão segura sobrescrevem os dados de um arquivo excluído no disco usando técnicas que mostraram tornar os dados do disco irrecuperáveis, mesmo usando tecnologia de recuperação que pode fazer a leitura de padrões em mídia magnética que revelam arquivos fracamente excluídos. O SDelete (Secure Delete) é um desses aplicativos. Você pode usar o SDelete tanto para excluir com segurança os arquivos existentes quanto para apagar com segurança qualquer dado de arquivo existente nas partes não alocadas de um disco (inclusive arquivos que já tenham sido excluídos ou criptografados). O SDelete implementa o padrão de limpeza e sanitização DOD 5220.22-M do Departamento de Defesa, para lhe dar a certeza de que, uma vez excluídos com o SDelete, os dados do arquivo desaparecerão para sempre. Observe que o SDelete exclui com segurança os dados do arquivo, mas não os nomes de arquivos localizados no espaço livre do disco.
O SDelete é um utilitário de linha de comando que aceita várias opções. Em um determinado uso, ele permite excluir um ou mais arquivos e/ou diretórios ou limpar o espaço livre em um disco lógico. O SDelete aceita caracteres curinga como parte do especificador de diretório ou arquivo.
Uso:
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 | Descrição |
---|---|
-c | Limpar o espaço livre. |
-f | Forçar os 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 aprovações de substituição (o padrão é 1). |
-q | Modo silencioso. |
-r | Remover o atributo somente leitura. |
-s | Recursar os subdiretórios. |
-z | Espaço livre zero (bom para otimização do disco virtual). |
-nobanner | Não exiba a faixa de inicialização e a mensagem de direitos autorais. |
- Os discos não devem ter nenhum volume para serem limpos.
- Para letras de unidade, inclua
:
, por exemploD:
.
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 é a exclusão segura de arquivos compactados, criptografados e esparsos do Windows NT/2K e a limpeza segura dos espaços livres do disco.
Os arquivos compactados, criptografados e esparsos são gerenciados pelo NTFS em blocos de 16 clusters. Se um programa gravar em uma parte existente de um arquivo desse tipo, o NTFS alocará um novo espaço no disco para armazenar os novos dados e, após a gravação dos novos dados, desalocará os clusters anteriormente ocupados pelo arquivo. O NTFS adota essa abordagem conservadora por motivos relacionados à 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). Portanto, a substituição desse tipo de arquivo não conseguirá excluir o conteúdo do arquivo do disco.
Para lidar com esses tipos de arquivos, SDelete conta com a API de desfragmentação. Usando a API de desfragmentação, o SDelete pode determinar com precisão quais clusters em um disco estão ocupados por dados pertencentes a arquivos compactados, esparsos e criptografados. Quando SDelete souber quais clusters contêm os dados do arquivo, ele poderá abrir o disco para acesso bruto e sobrescrever esses clusters.
A limpeza do espaço livre apresenta outro desafio. Como o FAT e o NTFS não fornecem meios para que um aplicativo aborde diretamente o espaço livre, o SDelete tem duas opções. A primeira é que ele pode, como faz para arquivos compactados, esparsos e criptografados, abrir o disco para o acesso bruto e sobrescrever o espaço livre. Essa abordagem tem um grande problema: mesmo que o SDelete fosse codificado para ser totalmente capaz de calcular as porções de espaço livre das unidades NTFS e FAT (algo que não é trivial), ele correria o risco de colidir com as operações de arquivo ativas que estão ocorrendo no sistema. Por exemplo, digamos que o SDelete determine que um cluster está livre e, nesse exato momento, o driver do sistema de arquivos (FAT, NTFS) decida alocar o cluster para um arquivo que outro aplicativo esteja modificando. O driver do sistema de arquivos grava os novos dados no cluster e, em seguida, SDelete aparece e sobrescreve os dados recém-gravados: os novos dados do arquivo desaparecem. O problema é ainda pior se o cluster for alocado para os metadados do sistema de arquivos, uma vez que SDelete corromperá as estruturas do sistema de arquivos no disco.
A segunda abordagem, e a que o SDelete adota, é sobrescrever indiretamente o espaço livre. Primeiro, o SDelete aloca o maior arquivo possível. O SDelete faz isso usando a E/S de arquivos sem cache para que o conteúdo do cache do sistema de arquivos do NT não seja descartado e substituído por dados inúteis associados ao arquivo do SDelete que ocupa muito espaço. Como a E/S de arquivos sem cache deve estar alinhada ao setor (512 bytes), pode existir algum espaço restante que não esteja alocado para o arquivo do SDelete, mesmo quando o SDelete não puder aumentar ainda mais o arquivo. Para obter qualquer espaço restante, o SDelete aloca o maior arquivo em cache possível. 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, a tarefa do SDelete não é necessariamente concluída após a alocação e a substituição dos dois arquivos. O SDelete também deve preencher todas as partes livres existentes da MFT (Tabela de Arquivos Mestre) do NTFS com arquivos que se encaixem em um registro da MFT. Um registro da MFT normalmente tem 1 KB de tamanho e cada arquivo ou diretório em um disco exige pelo menos um registro da MFT. Os arquivos pequenos são armazenados inteiramente dentro do registro da MFT, enquanto os arquivos que não se encaixam em um registro são alocados em clusters fora da MFT. Tudo o que SDelete precisa fazer para cuidar do espaço livre da MFT é alocar o maior arquivo que puder; quando o arquivo ocupar todo o espaço disponível em um Registro da MFT, o NTFS impedirá que o arquivo fique maior, pois não existem clusters livres no disco (eles estão sendo mantidos pelos dois arquivos do SDelete alocados anteriormente). Em seguida, o SDelete repete o processo. Quando o SDelete não consegue mais criar um novo arquivo, ele sabe que todos os registros anteriormente livres na MFT foram completamente preenchidos com arquivos sobrescritos com segurança.
Para sobrescrever os nomes de um arquivo excluído, o SDelete renomeia o arquivo 26 vezes, substituindo cada caractere do nome do arquivo por um caractere alfabético sucessivo. Por exemplo, a primeira renomeação de "foo.txt" seria "AAA.AAA".
O motivo pelo qual o SDelete não exclui com segurança os nomes de arquivos ao limpar o espaço livre em disco é que a exclusão deles exigiria a manipulação direta das estruturas do diretório. As estruturas do diretório podem ter espaço livre contendo nomes de arquivos excluídos, mas o espaço livre do 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 sobrescrevê-lo com segurança.
Baixar o SDelete (304 KB)
Executado em:
- Cliente: Windows 10 e superior.
- Servidor: Windows Server 2012 e superior.
- Nano Server: 2016 e superior.