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