Ocultación y Recuperación de Datos en Linux

por Anton Chuvakin, Ph.D. ( Linux Data Hiding and Recovery)
3/10/2002 11:28
Traducido por TageTora (Proyecto HIS)

Licencia de la traducción

Se da permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia Libre de Documentación GNU, versión 1.2 o cualquier versión posterior publicada por la Free Software Foundation (Fundación para el Software Libre); este documento no tiene secciones invariantes, textos de portada ni de contraportada. Se incluye una copia de dicha licencia en la sección titulada "Licencia de Documentación Libre GNU"


Justo cuando piensa que sus datos han sido eliminados para siempre, Anton Chuvakin nos muestra cómo recuperar datos e incluso cómo los datos pueden ocultarse dentro del espacio del sistema de ficheros.

Es conocido que lo que es borrado en una computadora a veces puede recuperarse. Análisis recientes de las implicaciones en seguridad de los " flujos de datos alternativos" en un Windows NT de Kurt Seifried han mostrado que el sistema de ficheros Windows NTFS permite la ocultación de datos en "flujos de datos alternativos" conectados a ficheros. Estos flujos de datos no són destruidos por muchas utilidades de borrado de ficheros que prometen una eliminación irrecuperable de la información. Borrar un fichero significa su eliminación "de forma segura" de disco (no como la forma habitual de eliminar las entradas del fichero de los directorios), de forma que la restauración del archivo se vuelve extemadamente costosa o imposible.

Algunas descripciones de que queda en el disco después de eliminar un fichero, cómo puede descubrirse y cómo tal descubrimiento puede ser prevenido, són proporcionadas en Eliminado Seguro de Datos en Memorias Magnéticas y de Estado Sólido de Peter Gutmann. El autor recomienda sobreescribir los ficheros varias veces con patrones especiales. Contra adversarios ocasionales, simplemente sobreescribiendo el fichero con ceros bastará.

Linux no posee flujos de datos alternativos, pero los ficheros eliminados usando /bin/rm todavía permanecen en el disco. Muchos sistemas Linux usan el sistema de ficheros ext2 (o su versión más actual, la ext3 de Red Hat). Echando un vistazo al diseño del sistema de ficheros ext2 muestra diversos lugares donde los datos pueden esconderse.

Vamos a empezar con el método clásico para esconder material en los sistemas de ficheros UNIX (no específicamente en ext2). Ejecute un proceso que mantenga el fichero abierto y entonces lo elimine. Los contenidos del fichero todavía están en el disco y el espacio no puede ser reclamado por otros programas. Vale la pena notar que si un ejecutable se elimina él mismo, sus contenidos pueden recuperarse desde la imagen de memoria en /proc: el comando "cp /proc/$PID/exe /tmp/file" crea una copia del fichero en /tmp.

Si el fichero se elimina con /bin/rm, sus contenidos permanecen en disco, hasta que sean sobreescritos por otros ficheros. Diversas utilidades de recuperación ante borrado de Linux, incluyendo e2undel y recover, intentan recuperar ficheros de forma automática. Se basan en el Linux Ext2fs Undeletion mini-HOWTO que proporciona una buena guia para recuperar ficheros de particiones Linux. La recuperación también puede llevarse a cabo utilizando manualmente la utilidad para Linux debugfs (como se describe en el anterior HOWTO).

En general, si la recuperación se lleva a cabo poco después de la eliminación del fichero y la partición es puntualmente desmontada, las posibilidades de completar la recuperación són altas. Si el sitema se ha usado mucho, las probabilidades de recuperarlo satisfactoriamente decrecen de forma significativa. Sin embargo, si vamos a ver el problema desde el punto de vista forense, la posibilidad de recuperar algo (como una pequeña parte de una imagen ilegal) es bastante alta. Se ha encontrado que a veces partes de ficheros de algunos años atrás han sido encontradas por examinadores forenses.

Así los ficheros pueden esconderse en el espacio libre. Si muchas copias de un mismo fichero són guardadas y eliminadas, aumenta la posibilidad de recuperar los contenidos usando los métodos anteriores. Sin embargo, debido a las peculiaridades del sistema de ficheros ext2, el proceso sólo puede ser automatizado de forma fiable para ficheros pequeños.

Un examen más detallado al interior del ext2 revela la existencia de espacio de poca actividad. El sistema de ficheros usa partes direccionables del disco llamadas bloques, que tienen el mismo tamaño. El sistema de ficheros ext2 usa habitualmente bloques de 1.2 o 4 Kb. Si un fichero es más pequeño que el tamaño de bloque, el espacio restante se desperdicia. A esto se le llama espacio de poca actividad (espacio vago). Este problema hace mucho que afecta a los usuarios de Windows 9x con sistema de ficheros FAT16, el cual usa tamaños de bloque de hasta 32Kb, desperdiciando así gran cantidad de espacio al guardar ficheros pequeños.

En una partición Linux de 4Gb, el tamaño de bloque es normalmente de 4Kb (elegido de forma automática cuando se ejecuta la utilidad make2fs para crear un sistema de ficheros). Así uno puede ocultar hasta 4Kb de datos por fichero si usa un fichero pequeño. Los datos serán invulnerables al uso del disco, invisibles al sistema de ficheros, y lo que es más excitante para alguna gente, indetectable por los comprobadores de integridad de ficheros que usan algoritmos de sumas de comprobación y tiempos MAC. Un disquete ext2 (con un tamaño de bloque de 1Kb) permite ocultar datos de la misma forma, aunque en pedazos más pequeños.

La herramienta de ocultación bmap existe para embutir datos en espacio "vago", recuperarlos y además limpiar el espacio vago, si se requiere. Algunos ejemplos:

# echo "evil data is here" | bmap --mode putslack /etc/passwd
pone los datos en el espacio vago producido por el fichero /etc/passwd

# bmap --mode slack /etc/passwd
getting from block 887048
file size was: 9428
slack size: 2860
block size: 4096
evil data is here
muestra los datos.

# bmap --mode wipeslack /etc/passwd
Limpia el espacio vago.

Ocultar datos en el espacio vago puede usarse para guardar secretos, colocar pruebas (el software forense lo encontrará, pero el sospechoso probablemente no lo hará) y puede que para ocultar herramientas de los comprobadores de integridad (si automáticamente dividen los ficheros largos en pedazos de tamaño vago. N del T: es decir, si el comprobador de integridad solo tiene en cuenta el espacio que ocupa el archivo y no todo el bloque).

Ahora vamos a descubrir que hay en las enormes extensiones del disco. Si buscamos cadenas de texto, un simple strings /dev/hdaX | grep 'cadena que necesitamos' nos confirmará la presencia de la cadena en la partición (el proceso *necesitará* bastante tiempo). Usando un editor hexadecimal en la partición en bruto puede a veces aclarar los contenidos del disco, pero el proceso es extremadamente complicado. Así el análisis nos lleva firmemente al campo del análisis forense de computadoras. La mejor herramienta para husmear los contenidos del disco es The Coroner's Toolkit de Dan Farmer y Wietse Venema y su conjunto de herramientas tctutils. El software proporciona funcionalidades para la recolección de datos forenses, recuperación de ficheros, análisis de los contenidos de la unidad en busca de cambios (usando marcas de tiempo en los ficheros), localización de contenidos en el disco (usando números de i-nodo y de bloque) y para otras divertidas tareas forenses. Una descripción detallada de las herramientas va más allá del alcance de este texto.

Revisemos brevemente cómo prevenir que los adversarios encuentren datos privados. Existen diversas utilidades de limpieza de ficheros para Linux. Todas excepto una pueden usarse sólo para borrar/limpiar ficheros, mejor que espacio de disco vacio. GNU shred (de Colin Plumb), srm (de Todd Burgess), wipe (de Tom Vier) y srm del kit thc (del grupo THC, véase http://packetstorm.linuxsecurity.com/groups/thc/). Algunas usan múltiples pasadas aleatorias como se recomienda en el texto mencionado antes y algunas simplemente sobreescriben el fichero con ceros una vez. Algunas no funcionan bajo ciertas circunstancias o para sistemas de ficheros específicos. Como se refleja en el manual de shred "shred confía en una suposición muy importante: que el sistema de ficheros sobreescribe los datos en su lugar". Si esta condición no se cumple, no se llevará a cabo ningún borrado seguro (¡sin mensajes de error!).

Para eliminar las trazas de ficheros ya eliminados, uno puede querer limpiar el espacio libre. Este simple método consiste en usar una utilidad estándar de Linux como "dd". Para limpiar el espacio libre en la partición /home debe usar:

  1. dd if=/dev/zero of=/home/bigfile
  2. sync
  3. rm /home/bigfile
  4. sync
Los comandos llenarán con ceros el espacio libre de la partición. Haciendo esto mismo para la partición /tmp puede provocar que algunas aplicaciones se cuelguen, así que hay que tener cuidado. La utilidad sfill del paquete secure_delete de THC (disponible en http://packetstorm.linuxsecurity.com/groups/thc/) puede sobreescribir el espacio libre con un algoritmo más fuerte.

Debe tener en cuenta que el espacio de intercambio (swap) también puede contener partes de datos privados y debe ser limpiada si se desea seguridad adicional. Otro programa (sswap) de las herramientas de THC puede usarse para este propósito.

El hecho importante a tener en cuenta es que cuando el espacio libre es limpiado, el espacio vago de todos los ficheros permanece intacto. Si un fichero es borrado (al menos usando la versión actual del GNU shred), el espacio vago asociado NO se borra con él!.

El atículo trata brevemente sobre ocultar, encontrar y destruir datos en sistemas de ficheros Linux. Debería quedar claro que el area de los análisis forenses en computadoras, apuntada a recuperar pruebas de unidades de disco capturadas, conlleva muchos retos, requiriendo el conocimineto del hardware, sistemas operativos y aplicaciones software.

Sobre el Autor (Versión Original)

Anton Chuvakin, Ph.D. is a Senior Security Analyst with netForensics (http://www.netforensics.com), a security information management company that provides real-time network security monitoring solutions.