Tarea
Al introducir un archivo electrónico en una organización, tuvimos que automatizar la destrucción de documentos de archivo electrónico. El archivo en sí es un sistema Directum, en el que, utilizando la herramienta de desarrollo IS-Builder incorporada, se ha escrito una gran cantidad de lógica para recibir documentos en el archivo desde sistemas de origen, convertir formatos de firma electrónica, otorgar y revocar derechos de acceso a casos completos o documentos individuales. Los textos de los documentos de archivo se almacenan en un soporte magnético y, al realizar el procedimiento de eliminación de rutina del soporte, los archivos de solo aquellos documentos cuyo período de almacenamiento ha expirado deben eliminarse irrevocablemente. Es decir, la destrucción de un medio completo estaba fuera de discusión y la tarea consistía en encontrar una herramienta adecuada para destruir los datos del documento en el medio.
Dado que el proceso de eliminación de documentos también se implementa en IS-Builder, estábamos buscando una herramienta para eliminar archivos que se pueda controlar desde el código en el lenguaje de programación integrado del sistema Directum. Desde el punto de vista del rendimiento, se impuso un requisito a la herramienta: la herramienta no debería dedicar más de un segundo a destruir un archivo de un megabyte. En cuanto al algoritmo utilizado por la herramienta para la destrucción de datos, es obligatorio cumplir con GOST R 50739-95, y se recomienda el soporte para varios algoritmos para elegir. Además, la herramienta debe ser gratuita y gratuita para uso comercial.
La mayoría de las herramientas, información sobre la cual pudimos encontrar buscando en Internet, no cumplían con los requisitos, ya que eran utilidades solo con una interfaz gráfica, sin posibilidad de interacción programática. Para un estudio más detallado, solo:
- Utilidad Sysinternals SDelete;
- Eraser es una utilidad con un interesante enfoque de destrucción;
- Bueno, también confiamos en la implementación de la herramienta directamente en IS-Builder.
Como probamos
Para las pruebas, hemos preparado una pequeña partición en el disco duro para que sea más fácil echar un vistazo a nuestro teatro de operaciones. En este disco, creamos archivos, los destruimos de diferentes maneras y luego miramos lo que quedaba de ellos. La destrucción se considera exitosa si se realiza a una velocidad no inferior a la requerida y no se pueden encontrar fragmentos del archivo original. Y para que la comparación entre las herramientas sea honesta, se usó el mismo algoritmo en todas las herramientas para destruir archivos, que es compatible con todas ellas: DOD 5220.22-M, que cumple formalmente con los requisitos de GOST.
Usamos las siguientes herramientas para monitorear los resultados de la destrucción:
- WinHex es una utilidad shareware que obtiene acceso a contenido multimedia a un nivel bajo, lo que le permite buscar datos por un fragmento de contenido y restaurarlos;
- DiskView – Sysinternals. , – «» .
IS-Builder
La esencia del algoritmo DOD 5220.22-M es bastante simple y lo implementamos en el lenguaje de programación incorporado del sistema Directum. El algoritmo recibe el nombre del archivo como entrada y pregunta al sistema de archivos su tamaño en bytes. Luego, se genera tres veces un búfer del tamaño calculado y se escribe en el archivo especificado. La belleza del enfoque es que el algoritmo de destrucción se puede implementar absolutamente cualquiera, con cualquier número de pasadas y los patrones de reescritura más inconcebibles. Además, dado que la herramienta se implementa en IS-Builder sin dependencias de software externo, no hay absolutamente ninguna dificultad con su integración en el desarrollo de aplicaciones del sistema Directum. Y funciona rápidamente. ¡Simplemente no destruye datos! WinHex encontró no solo fragmentos del archivo original en el disco, sino todo el archivo y lo restauró con éxito. Reveló,que en el momento de escribir el primer búfer en el disco, la ubicación del archivo en el disco cambia: el archivo original estaba ubicado al principio de la sección, pero terminaba en el medio o al final. Descubrimos esto usando DiskView. Los grupos originales, aunque marcados como gratuitos, aún contienen datos. Esto, por supuesto, no es bueno. Usamos diferentes métodos de escritura en el archivo, el resultado es el mismo en todas partes, los datos se pueden encontrar y restaurar. Resulta que podemos generar un búfer para reescribir, pero no podemos escribirlo en el disco correctamente. Y como no era posible encontrar esquemas de trabajo, tuve que despedirme de la idea de arreglármelas con las herramientas integradas en Directum.Los grupos originales, aunque marcados como gratuitos, aún contienen datos. Esto, por supuesto, no es bueno. Usamos diferentes métodos de escritura en el archivo, el resultado es el mismo en todas partes, los datos se pueden encontrar y restaurar. Resulta que podemos generar un búfer para reescribir, pero no podemos escribirlo en el disco correctamente. Y como no era posible encontrar esquemas de trabajo, tuve que despedirme de la idea de arreglármelas con las herramientas integradas en Directum.Los grupos originales, aunque marcados como gratuitos, aún contienen datos. Esto, por supuesto, no es bueno. Usamos diferentes métodos de escritura en el archivo, el resultado es el mismo en todas partes, los datos se pueden encontrar y restaurar. Resulta que podemos generar un búfer para reescribir, pero no podemos escribirlo en el disco correctamente. Y como no era posible encontrar esquemas de trabajo, tuve que despedirme de la idea de arreglármelas con las herramientas integradas en Directum.
SDelete
docs.microsoft.com/en-us/sysinternals/downloads/sdelete
Sysinternals SDelete implementa solo un algoritmo de eliminación (DOD 5220.22-M), pero puede especificar el número de pasadas de reescritura, destruir el árbol de directorios con todo su contenido e incluso realizar una "limpieza "Espacio en disco no asignado. SDelete es una utilidad de línea de comandos con solo unos pocos conmutadores, por lo que es fácil invocarla desde los cálculos de IS-Builder:
SDelete = "C:\Sysinternals\SDelete\sdelete.exe"
Command = Format('"%s" -p 1 "%s"'; ArrayOf(SDelete; Filename))
ExecuteProcess(Command; smNormal; wmYes)
Como resultado del uso de la utilidad, los archivos desaparecieron del disco casi sin dejar rastro: usando WinHex fue posible detectar solo rastros de la reescritura del nombre del archivo, pero el contenido no se pudo encontrar ni restaurar. Al mismo tiempo, la utilidad funcionó con bastante rapidez (eliminando un archivo de 1 megabyte = 0,2 segundos) y tomó la delantera merecidamente.
Borrador
Eraser.heidi.ie
Utilidad GUI gratuita. Lo que distingue a Eraser del resto es su trabajo con una cola de muerte. Si desea eliminar algo, debe crear la tarea correspondiente y agregarla a la cola. Cada tarea en la cola de Eraser es una colección de información:
- sobre el objeto de destrucción: puede ser un archivo o directorio específico, el contenido de la "Papelera de reciclaje" del usuario, espacio en disco no asignado. También puede ser un movimiento seguro de archivos o carpetas, o una limpieza completa de una partición del disco duro;
- sobre el algoritmo de destrucción: Eraser conoce varios algoritmos de reescritura listos para usar y también ofrece la capacidad de crear el suyo propio estableciendo el número requerido de pasadas y especificando para cada uno de ellos su propia plantilla de datos para reescribir;
- acerca de la hora de inicio: la tarea se puede ejecutar inmediatamente después de colocarse en la cola, de acuerdo con la programación, cuando se inicia el sistema operativo o manualmente.
El proceso de Eraser que se ejecuta en segundo plano está ocupado procesando la cola y ejecutando tareas. Por lo tanto, la destrucción de datos en Eraser es siempre un proceso asincrónico, al igual que los eventos del servidor en Directum.
El control de la utilidad usando interruptores de línea de comando también funciona, y durante mucho tiempo, aunque el trabajo en la línea de comando aún no se ha anunciado oficialmente y se encuentra en el estado de una funcionalidad desarrollada:
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)
La destrucción de archivos con Eraser se realizó correctamente. No fue posible estimar la velocidad de trabajo debido a la destrucción asincrónica. Desde el punto de vista del uso en el desarrollo aplicado, el estado suspendido del trabajo en la línea de comando es confuso, pero la capacidad de crear métodos de destrucción arbitrarios parece interesante.
resultados
Si no fuera por el molesto archivo de escribir el búfer en el disco, la implementación en IS-Builder se vería como un millón, pero, por desgracia, no llegó a la meta. Las otras dos herramientas funcionaron mucho mejor, siendo la utilidad SDelete la más ventajosa. No requiere instalación, aunque tiene una funcionalidad mínima, pero suficiente y un buen rendimiento.