Apéndice B - Sistema de Ficheros Loopback de Linux
El kernel de Linux tiene soporte vara múltiples sistemas de fichero (ver "manmount") 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 discosarrancables, 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) [30].
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.
[[email protected] 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 -tufs 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 "graverobber".
# df | ||
---|---|---|
Filesystem | 1k-blocks | Used Available Use% Mounted on |
/x/c0t3d0s0.dd | 173791 | 6872587696 44% /t |
/x/c0t3d0s3.dd | 202423 | 26148156035 14% /t/usr |
/x/c0t3d0s6.dd | 246743 | 19759224481 89% /t/var |
/x/c0t3d0s7.dd | 473031 | 111506314225 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)