Apéndice B - Sistema de Ficheros Loopback de Linux

El kernel de Linux tiene soporte vara múltiples sistemas de fichero (ver "man mount") tales como: adfs, affs, autofs, coda, coherent, devpts, efs, ext, ext2, hfs, hpfs, iso9660, minix, msdos, ncpfs, nfs, ntfs, proc, qnx4, romfs, smbfs, sysv, udf, ufs, umsdos, vfat, xenix, xiafs.

Los sistemas de ficheros coherent, sysv y xenix son idénticos y en el futuro no se mencionarán los tres sino, se limitará a utilizar el nombre sysv.

El soporte de una variedad de sistemas de ficheros por el kernel de GNU/Linux nos ofrece una buena plataforma de análisis ya que no tendremos que cambiar ni de máquina ni de sistema operativo para estudiar un sistema comprometido que no sea GNU/Linux.

Linux también tiene soporte para dispositivos "loopback", que permiten montar un sistema de ficheros dentro del fichero. Este método se utiliza dentro de los discos arrancables, CD-ROMs auto-ejecutables, sistemas de fichero cifrados para laptops, etc. Para más información podemos leer siguiente documentación de losetup(8), mount(8).

Los dispositivos "loop" en las versiones anteriores de GNU/Linux eran 8 por defecto y se utilizaban de forma indirecta por el comando "mount", mientras que actualmente son 16. Estos dispositivos se encuentran en el directorio /dev junto con el resto de dispositivos.

[static@lowershaft.activalink dev]$ ls -l /dev/loop*
   brw-rw---- 1 root root 7, 0 Apr 11 16:25 /dev/loop0
   brw-rw---- 1 root root 7, 1 Apr 11 16:25 /dev/loop1
   brw-rw---- 1 root root 7, 10 Apr 11 16:25 /dev/loop10
   brw-rw---- 1 root root 7, 11 Apr 11 16:25 /dev/loop11
   brw-rw---- 1 root root 7, 12 Apr 11 16:25 /dev/loop12
   brw-rw---- 1 root root 7, 13 Apr 11 16:25 /dev/loop13
   brw-rw---- 1 root root 7, 14 Apr 11 16:25 /dev/loop14
   brw-rw---- 1 root root 7, 15 Apr 11 16:25 /dev/loop15
   brw-rw---- 1 root root 7, 2 Apr 11 16:25 /dev/loop2
   brw-rw---- 1 root root 7, 3 Apr 11 16:25 /dev/loop3
   brw-rw---- 1 root root 7, 4 Apr 11 16:25 /dev/loop4
   brw-rw---- 1 root root 7, 5 Apr 11 16:25 /dev/loop5
   brw-rw---- 1 root root 7, 6 Apr 11 16:25 /dev/loop6
   brw-rw---- 1 root root 7, 7 Apr 11 16:25 /dev/loop7
   brw-rw---- 1 root root 7, 8 Apr 11 16:25 /dev/loop8
   brw-rw---- 1 root root 7, 9 Apr 11 16:25 /dev/loop9

Combinar dos utilidades como dd y mount es más fácil de lo que puede pensar. Puede hacer una prueba copiando imágenes de cada partición con dd del sistema de ficheros de la víctima, los copia a su sistema y les monta utilizando dispositivos "loopback". Para nuestro ejemplo, las particiones fueron obtenidos de un disco duro interno de una Sun SPARC ejecutando Solaris 2.5:

# ls -l c0t3d0*
   -rw-r--r-- 1 root root 189399040 Sep 14 12:44 c0t3d0s0.dd
   -rw-r--r-- 1 root root 171991040 Sep 14 13:15 c0t3d0s1.dd
   -rw-r--r-- 1 root root 220733440 Sep 14 12:57 c0t3d0s3.dd
   -rw-r--r-- 1 root root 269475840 Sep 14 12:51 c0t3d0s6.dd
   -rw-r--r-- 1 root root 515973120 Sep 14 13:48 c0t3d0s7.dd

Puede montar la imagen en modo solo lectura especificando que es un sistema de ficheros UFS de tipo "sun" y que deseamos utilizar un dispositivo loopback de siguiente manera:

# mount -o ro,loop,ufstype=sun -t ufs c0t3d0s0.dd /t

Desde aquí podemos determinar donde apuntaban el resto de las particiones buscando el dispositivo en el sistema de víctima /etc/vfstab (montado en este ejemplo bajo /t):

# grep c0t3d0 /t/etc/vfstab
   /dev/dsk/c0t3d0s1 - - swap - no -
   /dev/dsk/c0t3d0s0 /dev/rdsk/c0t3d0s0 / ufs 1 no -
   /dev/dsk/c0t3d0s6 /dev/rdsk/c0t3d0s6 /usr ufs 1 no -
   /dev/dsk/c0t3d0s3 /dev/rdsk/c0t3d0s3 /var ufs 1 no -
   /dev/dsk/c0t3d0s7 /dev/rdsk/c0t3d0s7 /export/home ufs 2 yes -

Ahora podemos montar otras particiones de siguiente manera:

# mount -o ro,loop,ufstype=sun -t ufs c0t3d0s3.dd /t/var
   # mount -o ro,loop,ufstype=sun -t ufs c0t3d0s6.dd /t/usr
   # mount -o ro,loop,ufstype=sun -t ufs c0t3d0s7.dd /t/export/home

Ahora el contenido del sistema de ficheros es visible a las herramientas forenses de TCT como por ejemplo "grave-robber".

# df
   Filesystem 1k-blocks Used Available Use% Mounted on
   . . .
   /x/c0t3d0s0.dd 173791 68725 87696 44% /t
   /x/c0t3d0s3.dd 202423 26148 156035 14% /t/usr
   /x/c0t3d0s6.dd 246743 197592 24481 89% /t/var
   /x/c0t3d0s7.dd 473031 111506 314225 26% /t/export/home
# mount
   . . .
   /x/c0t3d0s0.dd on /t type ufs (ro,loop=/dev/loop0,ufstype=sun)
   /x/c0t3d0s3.dd on /t/usr type ufs (ro,loop=/dev/loop1,ufstype=sun)
   /x/c0t3d0s6.dd on /t/var type ufs (ro,loop=/dev/loop2,ufstype=sun)
   /x/c0t3d0s7.dd on /t/export/home type ufs (ro,loop=/dev/loop3,ufstype=sun)

[Subir]


[Anterior] [Menu Principal] [Siguiente]