Tarefa
Ao introduzir um arquivo eletrônico em uma organização, tivemos que automatizar a destruição de documentos de arquivo eletrônico. O arquivo em si é um sistema Directum, no qual, usando a ferramenta de desenvolvimento IS-Builder embutida, uma grande quantidade de lógica foi escrita para receber documentos no arquivo a partir de sistemas de origem, convertendo formatos de assinatura eletrônica, concedendo e revogando direitos de acesso a casos inteiros ou documentos individuais. Os textos dos documentos de arquivo são armazenados em um suporte magnético e, ao realizar o procedimento de exclusão de rotina do suporte, os arquivos apenas dos documentos cujo período de armazenamento expirou devem ser irremediavelmente excluídos. Ou seja, a destruição de um meio inteiro estava fora de questão, e a tarefa era encontrar uma ferramenta adequada para destruir dados de documentos nesse meio.
Uma vez que o processo de exclusão de documentos também é implementado no IS-Builder, estávamos procurando uma ferramenta para excluir arquivos que pudessem ser controlados a partir do código na linguagem de programação integrada do sistema Directum. Do ponto de vista do desempenho, um requisito foi imposto à ferramenta: a ferramenta não deve gastar mais do que um segundo destruindo um arquivo de um megabyte. Quanto ao algoritmo usado pela ferramenta para destruição de dados, é obrigatório cumprir com GOST R 50739-95, e o suporte para vários algoritmos é encorajado para uma escolha. Além disso, a ferramenta deve ser gratuita e gratuita para uso comercial.
A maior parte das ferramentas, informação que conseguimos encontrar pesquisando na Internet, não cumpria os requisitos, visto que se tratavam de utilitários apenas com interface gráfica, sem possibilidade de interação programática. Para um estudo mais detalhado, apenas:
- Utilitário Sysinternals SDelete;
- O Eraser é um utilitário com uma abordagem interessante à destruição;
- Bem, também colocamos nossas esperanças na implementação da ferramenta diretamente no IS-Builder.
Como testamos
Para o teste, preparamos uma pequena partição no disco rígido para facilitar a visualização de nosso teatro de operações. Nesse disco, criamos arquivos, destruímos de maneiras diferentes e depois olhamos o que sobrou deles. A destruição é considerada bem-sucedida se for executada a uma velocidade não inferior à exigida e nenhum fragmento do arquivo original puder ser encontrado. E para tornar a comparação entre as ferramentas honesta, o mesmo algoritmo foi utilizado em todas as ferramentas para destruição de arquivos, o qual é suportado por todas elas - DOD 5220.22-M, que atende formalmente os requisitos do GOST.
Usamos as seguintes ferramentas para monitorar os resultados da destruição:
- WinHex é um utilitário shareware que obtém acesso ao conteúdo de mídia em um nível baixo, permitindo que você busque dados por parte de um conteúdo e os recupere;
- DiskView – Sysinternals. , – «» .
IS-Builder
A essência do algoritmo DOD 5220.22-M é bastante simples e nós o implementamos na linguagem de programação embutida do sistema Directum. O algoritmo recebe o nome do arquivo como entrada e pergunta ao sistema de arquivos seu tamanho em bytes. Em seguida, um buffer do tamanho calculado é gerado três vezes e gravado no arquivo especificado. A beleza da abordagem é que o algoritmo de destruição pode ser implementado em qualquer lugar, com qualquer número de passes e os padrões de reescrita mais inconcebíveis. Além disso, como a ferramenta é implementada no IS-Builder sem dependências de software externo, não há absolutamente nenhuma dificuldade com sua integração no desenvolvimento de aplicativos do sistema Directum. E funciona rapidamente. Simplesmente não destrói dados! WinHex encontrou não apenas fragmentos do arquivo original no disco, mas o arquivo inteiro e o restaurou com sucesso. Revelou,que, no momento de gravar o primeiro buffer no disco, a localização do arquivo no disco muda: o arquivo original estava localizado no início da seção, mas acabou no meio ou no final. Descobrimos isso usando o DiskView. Os clusters originais, embora marcados como livres, ainda contêm dados. Isso, é claro, não é bom. Usamos métodos diferentes de gravação no arquivo, o resultado é o mesmo em todos os lugares, os dados podem ser encontrados e restaurados. Acontece que podemos gerar um buffer para reescrever, mas não podemos gravá-lo no disco corretamente. E como não foi possível encontrar esquemas funcionando, tive que dizer adeus à ideia de continuar com as ferramentas integradas ao Directum.Os clusters originais, embora marcados como livres, ainda contêm dados. Isso, é claro, não é bom. Usamos diferentes métodos de gravação no arquivo, o resultado é o mesmo em todos os lugares, os dados podem ser encontrados e restaurados. Acontece que podemos gerar um buffer para reescrever, mas não podemos gravá-lo no disco corretamente. E como não foi possível encontrar esquemas funcionando, tive que dizer adeus à ideia de continuar com as ferramentas integradas ao Directum.Os clusters originais, embora marcados como livres, ainda contêm dados. Isso, é claro, não é bom. Usamos métodos diferentes de gravação no arquivo, o resultado é o mesmo em todos os lugares, os dados podem ser encontrados e restaurados. Acontece que podemos gerar um buffer para reescrever, mas não podemos gravá-lo no disco corretamente. E como não foi possível encontrar esquemas funcionando, tive que dizer adeus à ideia de continuar com as ferramentas integradas ao Directum.
SDelete
docs.microsoft.com/en-us/sysinternals/downloads/sdelete
Sysinternals SDelete implementa apenas um algoritmo de exclusão (DOD 5220.22-M), mas você pode especificar o número de passagens de reescrita, destruir a árvore de diretório com todo o seu conteúdo e até mesmo realizar uma "limpeza "Espaço em disco não alocado. SDelete é um utilitário de linha de comando com apenas algumas opções, portanto, é fácil chamá-lo a partir dos cálculos do IS-Builder:
SDelete = "C:\Sysinternals\SDelete\sdelete.exe"
Command = Format('"%s" -p 1 "%s"'; ArrayOf(SDelete; Filename))
ExecuteProcess(Command; smNormal; wmYes)
Como resultado da utilização do utilitário, os arquivos desapareceram do disco quase sem deixar vestígios: usando WinHex, foi possível detectar apenas vestígios da regravação do nome do arquivo, mas o conteúdo não foi encontrado e restaurado. Ao mesmo tempo, o utilitário funcionou muito rapidamente (excluindo um arquivo de 1 megabyte = 0,2 segundos) e merecidamente assumiu a liderança.
Borracha
eraser.heidi.ie
Utilitário GUI gratuito. O que diferencia o Eraser do resto é seu trabalho com uma kill queue. Se você deseja excluir algo, deve criar a tarefa correspondente e adicioná-la à fila. Cada tarefa na fila do Eraser é uma coleção de informações:
- sobre o objeto de destruição - pode ser um arquivo ou diretório específico, o conteúdo da "Lixeira" do usuário, espaço em disco não alocado. Também pode ser uma movimentação segura de arquivos ou pastas ou uma limpeza completa de uma partição do disco rígido;
- sobre o algoritmo de destruição - o Eraser conhece vários algoritmos de reescrita prontos e também oferece a capacidade de criar o seu próprio, definindo o número necessário de passagens e especificando para cada uma delas seu próprio modelo de dados para reescrita;
- sobre a hora de início - a tarefa pode ser executada imediatamente após ser colocada na fila, de acordo com uma programação, quando o sistema operacional inicializa, ou manualmente.
O processo de borracha em execução em segundo plano processa a fila e executa tarefas. Portanto, a destruição de dados no Eraser é sempre um processo assíncrono, muito parecido com os eventos do servidor no Directum.
Controlar o utilitário por meio de chaves de linha de comando também funciona, e há muito tempo, embora o trabalho na linha de comando ainda não tenha sido anunciado oficialmente e esteja no estado de funcionalidade desenvolvida:
Eraser = "C:\Program Files\Eraser\Eraser.exe"
Command = Format('"%s" erase /method="ecbf4998-0b4f-445c-9a06-23627659e419" /quiet file="%s"'; ArrayOf(Eraser; Filename))
ExecuteProcess(Command; smNormal; wmYes)
A destruição do arquivo com o Eraser foi bem-sucedida. Não foi possível estimar a velocidade de trabalho devido à destruição assíncrona. Do ponto de vista do uso no desenvolvimento aplicado, o status suspenso do trabalho na linha de comando é confuso, mas a capacidade de criar métodos de destruição arbitrários parece interessante.
resultados
Se não fosse pelo arquivo chato de gravar o buffer no disco, a implementação no IS-Builder pareceria um milhão, mas, infelizmente, não atingiu a linha de chegada. As outras duas ferramentas tiveram um desempenho muito melhor, com o utilitário SDelete parecendo o mais vantajoso. Não requer instalação, embora tenha funcionalidade mínima, mas suficiente, e bom desempenho.