Para tratar de comprobar qué hace efectivamente con los inodos de un sistema de archivos ext2 un kernel Linux 4.9 al momento de borrar un archivo, descubrí la herramienta istat parte del paquete sleuthkit. Este artículo demuestra cómo volcar el contenido de un inodo de un sistema de archivos ext2/ext3/ext4 por pantalla en Linux.

The Sleuth Kit (TSK) es un paquete de herramientas de análisis forense digital open source. Provee una colección de utilitarios de línea de comandos y librerías C que permiten investigar y analizar imágenes de disco y sistemas de archivos, y recuperar archivos desde los mismos.

En los sistemas operativos de la familia Debian, se encuentra disponible mediante el paquete sleuthkit:

# apt-get install sleuthkit

Una de las herramientas de TSK es istat. Esta se utiliza para mostrar detalles de estructuras de metadatos (léase inodo) de un sistema de archivos. Muestra el uid, gid, bits de modo, tamaño, fechas de acceso y todas las unidades o bloques de disco alocados.

Veamos directamente un ejemplo con un archivo:

root@devuan:~# ls -li /tmp/1000px-Tux.svg.png 
146542 -rwxrwxr-x 1 emi emi 199696 Dec 20 10:29 /tmp/1000px-Tux.svg.png

Tal como se observa, la opción -i de ls permite mostrar el número de inodo del archivo.

Este archivo pertenece al dispositivo /dev/sda1:

root@devuan:~# df /tmp/1000px-Tux.svg.png
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1        7158264 3758208   3016724  56% /

Ya sabemos el dispositivo y el número de inodo de dicho archivo. Con esta información es suficiente para volcar el contenido del inodo utilizando istat:

root@devuan:~# istat /dev/sda1 146542
inode: 146542
Allocated
Group: 17
Generation Id: 1792997560
uid / gid: 1000 / 1000
mode: rrwxrwxr-x
Flags: Extents, 
size: 199696
num of links: 1

Inode Times:
Accessed:	2019-12-20 10:29:56.670571389 (-03)
File Modified:	2019-12-20 10:29:56.674573389 (-03)
Inode Modified:	2019-12-20 11:10:02.219287453 (-03)
File Created:	2019-12-20 10:29:56.670571389 (-03)

Direct Blocks:
691904 691905 691906 691907 691908 691909 691910 691911 
691912 691913 691914 691915 691916 691917 691918 691919 
691920 691921 691922 691923 691924 691925 691926 691927 
691928 691929 691930 691931 691932 691933 691934 691935 
691936 691937 691938 691939 691940 691941 691942 691943 
691944 691945 691946 691947 691948 691949 691950 691951 
691952

Es interesante notar que, además de la información que muestra típicamente ls (como uid, gid, bits de modo, conteo de enlaces, tamaño, etc.), es posible acceder a información interesante como fechas de acceso y creación, y fecha de modificación del inodo (por ejemplo cuando se cambian permisos u ownership).

Además, istat muestra los bloques directos e indirectos que utiliza el archivo para almacenar sus datos.

Más allá de istat, TSK provee muchas otras herramientas:

root@devuan:~# dpkg -L sleuthkit | grep /bin/
/usr/bin/blkcalc
/usr/bin/blkcat
/usr/bin/blkls
/usr/bin/blkstat
/usr/bin/fcat
/usr/bin/ffind
/usr/bin/fiwalk
/usr/bin/fls
/usr/bin/fsstat
/usr/bin/hfind
/usr/bin/icat
/usr/bin/ifind
/usr/bin/ils
/usr/bin/img_cat
/usr/bin/img_stat
/usr/bin/istat
/usr/bin/jcat
/usr/bin/jls
/usr/bin/jpeg_extract
/usr/bin/mactime
/usr/bin/mmcat
/usr/bin/mmls
/usr/bin/mmstat
/usr/bin/sigfind
/usr/bin/sorter
/usr/bin/srch_strings
/usr/bin/tsk_comparedir
/usr/bin/tsk_gettimes
/usr/bin/tsk_loaddb
/usr/bin/tsk_recover

Volcar el contenido de un bloque de disco

blkcat permite volcar el contenido crudo (o nen ASCII, estilo hexdump u otros formatos) por pantalla. Por ejemplo, es posible volcar el contenido del primer bloque directo (691904) del archivo anterior:

root@devuan:~# blkcat -h /dev/sda1 691904 | head
0	89504e47 0d0a1a0a 0000000d 49484452 	.PNG .... .... IHDR 
16	000003e8 0000049b 08060000 0005b295 	.... .... .... .... 
32	05000000 0467414d 410000b1 8f0bfc61 	.... .gAM A... ...a 
48	05000000 20634852 4d00007a 26000080 	....  cHR M..z &... 
64	840000fa 00000080 e8000075 300000ea 	.... .... ...u 0... 
80	6000003a 98000017 709cba51 3c000000 	`..: .... p..Q <... 
96	06624b47 4400ff00 ff00ffa0 bda79300 	.bKG D... .... .... 
112	00000774 494d4507 e20c1914 3239d6e3 	...t IME. .... 29.. 
128	32e80000 80004944 415478da ecdd779c 	2... ..ID ATx. ..w. 
144	24477d3e fea7aabb 276cba1c 745177d2 	$G}> .... 'l.. tQw.

Es posible comprobar que volcamos el bloque de disco correcto pues los datos coinciden :

root@devuan:~# hexdump -C /tmp/1000px-Tux.svg.png | head
00000000  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |.PNG........IHDR|
00000010  00 00 03 e8 00 00 04 9b  08 06 00 00 00 05 b2 95  |................|
00000020  05 00 00 00 04 67 41 4d  41 00 00 b1 8f 0b fc 61  |.....gAMA......a|
00000030  05 00 00 00 20 63 48 52  4d 00 00 7a 26 00 00 80  |.... cHRM..z&...|
00000040  84 00 00 fa 00 00 00 80  e8 00 00 75 30 00 00 ea  |...........u0...|
00000050  60 00 00 3a 98 00 00 17  70 9c ba 51 3c 00 00 00  |`..:....p..Q<...|
00000060  06 62 4b 47 44 00 ff 00  ff 00 ff a0 bd a7 93 00  |.bKGD...........|
00000070  00 00 07 74 49 4d 45 07  e2 0c 19 14 32 39 d6 e3  |...tIME.....29..|
00000080  32 e8 00 00 80 00 49 44  41 54 78 da ec dd 77 9c  |2.....IDATx...w.|
00000090  24 47 7d 3e fe a7 aa bb  27 6c ba 1c 74 51 77 d2  |$G}>....'l..tQw.|

Mostrar estadísticas de un sistema de archivos

La herramienta fsstat muestra estadísticas del sistema de archivos:

root@devuan:~# fsstat /dev/sda1 | head -n 30
FILE SYSTEM INFORMATION
--------------------------------------------
File System Type: Ext4
Volume Name: 
Volume ID: dcaee73f4740e96d24571f1bf97f804

Last Written at: 2019-12-20 09:38:19 (-03)
Last Checked at: 2019-11-08 09:34:45 (-03)

Last Mounted at: 2019-12-20 09:38:24 (-03)
Unmounted properly
Last mounted on: /

Source OS: Linux
Dynamic Structure
Compat Features: Journal, Ext Attributes, Resize Inode, Dir Index
InCompat Features: Filetype, Needs Recovery, Extents, 64bit, Flexible Block Groups, 
Read Only Compat Features: Sparse Super, Large File, Huge File, Extra Inode Size

Journal ID: 00
Journal Inode: 8

METADATA INFORMATION
--------------------------------------------
Inode Range: 1 - 458753
Root Directory: 2
Free Inodes: 329353
Inode Size: 256
Orphan Inodes: 159024, 37317, 

Volcar el contenido del journal de un sistema de archivos

Una herramienta interesante es jls, la cual vuelca el contenido del journal de un sistema de archivos:

root@devuan:~# jls /dev/sda1 | head -n 20
JBlk	Description
0:	Superblock (seq: 0)
sb version: 4
sb version: 4
sb feature_compat flags 0x00000000
sb feature_incompat flags 0x00000013
	JOURNAL_REVOKE
	JOURNAL_64BIT
sb feature_ro_incompat flags 0x00000000
1:	Unallocated Descriptor Block (seq: 36996)
2:	Unallocated FS Block 0
3:	Unallocated FS Block 0
4:	Unallocated FS Block 524624
5:	Unallocated FS Block 0
6:	Unallocated FS Block 524323
7:	Unallocated FS Block 0
8:	Unallocated FS Block 524620
9:	Unallocated FS Block 0
10:	Unallocated FS Block Unknown
11:	Unallocated FS Block Unknown

Otras herramientas útiles de TSK

Algunas otras herramientas provistas por TSK:

  • icat: vuelca archivos por inodo (en lugar de por nombre de archivo).
  • ifind: busca el inodo que tiene alocado a cierto bloque pasado como parámetro.
  • ils: lista información de inodos de archivos borrados.
  • ffind: encuentra el nombre de archivo que corresponde a un inodo.
  • mmcat: vuelca el contenido de una partición.
  • mmls: lista la tabla de particiones de un disco.
  • tsk_recover: recupera archivos borrados o eliminados de un disco.

Referencias

Compartí este artículo