Skip to main content
  1. Concetti/

Inode Anatomy

·3 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

Cos'è
#

L'Inode (Index Node) è la struttura dati fondamentale dei filesystem Unix-like. Funge da "carta d'identità" del file, contenendo tutti i metadati e i puntatori ai dati fisici, ma ignorando completamente il nome del file.

L'Essenza del Sistema: "Everything is a File"
#

tutto è un file

In Linux, la massima "tutto è un file" si traduce tecnicamente nel fatto che ogni oggetto (documento, cartella, dispositivo hardware) è rappresentato da un Inode.

A basso livello, nel codice C del Kernel, l'Inode è una struct (una struttura dati complessa) che funge da ponte logico:

  • Da una parte riceve il riferimento dal nome che l'utente usa nel terminale.
  • Dall'altra punta ai bit scritti fisicamente sui piatti del disco o sulle celle della memoria flash.

Flusso dei Puntatori (ASCII Diagram)
#

    LIVELLO UTENTE (Nomi)        KERNEL (Puntatori Struct)       DISCO FISICO (Bit)
   +--------------------+       +------------------------+      +-----------------+
   |   nomi.txt (Hard)  | ----> |      INODE STRUCT      |      |  [Data Block 1] |
   +--------------------+       |  --------------------  |      |  [Data Block 2] |
                                |  - Inode Number        |      |  [Data Block 3] |
   +--------------------+       |  - UID / GID           | ---> |  [Data Block 4] |
   |  cognomi.txt (Hard)| ----> |  - Permessi (rwx)      |      |                 |
   +--------------------+       |  - Link Count: 2       |      +-----------------+
                                |  - Data Pointers ------+      | (I bit reali)   |
                                +------------------------+      +-----------------+

Caratteristiche della Struct Inode
#

  1. Indipendenza dal Nome: L'Inode non contiene il nome del file. L'associazione nome-inode avviene nelle tabelle delle directory (Dentry).
  2. Metadati Completi: Contiene dimensioni, timestamp (Access, Modify, Change), e i permessi di accesso.
  3. Contatore Link (Link Count): Tiene traccia di quante directory entry (nomi) puntano a questa specifica struct.
  4. Puntatori ai Blocchi: Contiene gli indirizzi fisici dei blocchi di dati sul disco.

Struttura Logica (ASCII Diagram)
#

(nomi e cognomi sono link simbolici hard, quindi hanno lo stesso inode)

    FILENAME (Porta)          INODE (Registro)            DATA BLOCKS (Stanza)
   +--------------+        +--------------------+        +-------------------+
   |  nomi.txt    | -----> | Inode #1573299     |        | "Dati reali del   |
   +--------------+        | ------------------ |        |  file scritti sul |
                           | - Proprietario     | -----> |  piatto del disco"|
   +--------------+        | - Permessi         |        |                   |
   | cognomi.txt  | -----> | - Link Count: 2    |        +-------------------+
   +--------------+        | - Size / Timestamps|
                           +--------------------+

Perché è importante per Blue Team
#

  1. Recupero Dati: Anche se un file viene "cancellato" (unlink), finché l'Inode non viene sovrascritto, i dati sono recuperabili.
  2. Analisi Forense: Il numero di Inode permette di tracciare file che sono stati rinominati o spostati per nascondere attività malevole.
  • Analisi Forense (DFIR): Poiché l'Inode sopravvive alla rimozione del nome (finché il link count non è zero), è possibile recuperare dati "cancellati" analizzando gli Inode non ancora sovrascritti.
  • Individuazione Malware: Un attaccante potrebbe creare più Hard Link a un toolkit malevolo in diverse cartelle per garantirsi la persistence anche se uno dei file viene scoperto e rimosso.
  • Verifica Integrità: Se due file hanno nomi diversi ma lo stesso numero di Inode, sono lo stesso identico contenuto.

Collegato a
#

Collegato a
#

  • bandit-12 — Identificazione file compressi tramite firme e metadati.

  • TLCL — Capitolo sulla manipolazione dei file e link.

  • system — categoria

  • file — categoria

  • stat — comando per leggere la struct Inode

  • link-hard-vs-symbolic — spiega i diversi tipi di puntatori

  • rm-mechanism — spiega l'operazione di unlink sulla struct

Related