Mappa Globale#
Cosa fa#
FIM (File Integrity Monitoring) calcola l'hash crittografico di ogni file critico del sistema e salva un database di riferimento (baseline). A intervalli regolari (o in real-time) ricalcola gli hash e confronta con la baseline: qualsiasi differenza genera un alert. Rileva modifiche non autorizzate a binari, configurazioni e file di sistema.
TL;DR#
FIM e' come git diff ma per il filesystem di produzione. Qualsiasi modifica non autorizzata - un rootkit che sostituisce /usr/bin/ls, un attaccante che aggiunge una riga a /etc/sudoers, un malware che modifica il cron - viene rilevata confrontando l'hash attuale con l'hash salvato nella baseline.
Come Funziona#
Il principio e' semplice: un file non modificato ha sempre lo stesso hash crittografico. Se l'hash cambia, il file e' cambiato. Punto.
flowchart TD
INST[Installazione sistema
stato pulito e verificato]
BASE[Creazione Baseline
SHA-256 di ogni file monitorato
Salva in database protetto]
MON[Monitoraggio continuo
Ricalcola hash a intervalli
o su evento filesystem]
CMP{Confronto
Hash cambiato?}
OK[Nessun alert
File integro]
ALT[ALERT
File modificato
Creato / Cancellato]
INV[Investigation
SOC analista
verifica causa]
INST --> BASE --> MON --> CMP
CMP -->|No| OK
CMP -->|Si'| ALT --> INV
OK --> MON
Cosa viene registrato per ogni file nella baseline:
- Hash SHA-256 del contenuto
- Dimensione file
- Data creazione / modifica / accesso (timestamps)
- Permessi Unix (octal) o ACL Windows
- Owner (uid/gid) e gruppo
- Per file di testo: hash riga per riga (alcuni tool)
File Critici Monitorati#
Linux#
I file piu' importanti da monitorare su sistemi Linux:
| Percorso | Perche' monitorato | Attacco che lo colpisce |
|---|---|---|
/etc/passwd | Aggiunta utenti non autorizzati | Privilege escalation, backdoor account |
/etc/shadow | Hash password degli utenti | Esfiltrazione hash per offline cracking |
/etc/sudoers | Chi puo' eseguire comandi come root | Privilege escalation diretta |
/usr/bin/, /usr/sbin/ | Binari di sistema | Rootkit che sostituiscono ls, ps, netstat |
/etc/cron.d/, /etc/cron.daily/ | Script eseguiti automaticamente | Persistence via cron job nascosto |
/etc/ssh/sshd_config | Configurazione SSH | Attivare PermitRootLogin, backdoor |
/boot/ | Kernel, bootloader | Bootkit, rootkit a livello kernel |
/etc/ld.so.preload | Library preloading | Rootkit tramite LD_PRELOAD injection |
Windows#
| Percorso | Perche' monitorato |
|---|---|
C:\Windows\System32\ | Binari OS critici |
Registry: HKLM\SAM, HKLM\SYSTEM | Database account e configurazione OS |
C:\Windows\System32\drivers\ | Driver di sistema - vettore rootkit |
| Chiavi Run/RunOnce del registry | Persistence startup |
Tool Principali#
Tripwire#
Tripwire e' il tool di riferimento per FIM enterprise. Esiste in versione open source (Tripwire Open Source) e enterprise (Tripwire Enterprise).
# Inizializzare il database baseline (da fare su sistema pulito)
tripwire --init
# Eseguire un check manuale
tripwire --check
# Output tipico di un alert:
# Modified: /etc/passwd
# SHA512: baseline=abc123... current=def456...
# Size: baseline=2048 current=2100AIDE (Advanced Intrusion Detection Environment)#
AIDE e' la versione open source alternativa a Tripwire, comune su distribuzioni Linux enterprise.
# Creare baseline iniziale
aide --init
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# Check manuale
aide --check
# Tipicamente schedulato in cron
0 3 * * * /usr/bin/aide --check | mail -s "AIDE Check" soc@company.comWazuh FIM#
Wazuh include un modulo FIM integrato nel proprio agente. Il vantaggio: gli alert FIM convergono direttamente nel SIEM Wazuh, correlati con altri eventi di sicurezza.
Configurazione in /var/ossec/etc/ossec.conf:
# File di configurazione Wazuh - sezione FIM
# <syscheck>
# <directories realtime="yes" check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
# <directories check_all="yes">/bin,/sbin</directories>
# </syscheck>Windows SFC (System File Checker)#
Windows include un tool built-in per verificare i file di sistema:
# Verifica e ripristina file di sistema Windows (richiede admin)
sfc /scannow
# Output in C:\Windows\Logs\CBS\CBS.log
# Trovera' file corrotti e li ripristinera' dalla cache WinSxSSFC e' un tool reattivo (verifica su richiesta), non un sistema di monitoring continuo come Tripwire/AIDE/Wazuh.
Casi d'Uso Security#
Rilevamento Rootkit#
I rootkit sostituiscono binari di sistema con versioni modificate che nascondono la loro presenza. Un rootkit classico modifica /usr/bin/ps per non mostrare il proprio processo, e /usr/bin/ls per non mostrare i propri file.
FIM rivela questa sostituzione: l'hash di /usr/bin/ps nella baseline non corrisponde all'hash attuale. Anche se il rootkit nasconde il file al filesystem, l'hash del file su disco cambia.
FIM deve essere eseguito da un sistema separato o da un agente con filesystem montato in read-only. Un rootkit avanzato puo' compromettere anche il tool FIM stesso se gira sullo stesso sistema che monitora.
Compliance#
FIM e' richiesto da diversi framework di compliance:
| Framework | Requisito |
|---|---|
| PCI DSS | Requirement 11.5: monitorare i file critici e alertare su modifiche non autorizzate |
| HIPAA | Richiede audit log delle modifiche a sistemi che trattano PHI |
| CIS Benchmarks | FIM raccomandato per i file di sistema in tutti i livelli |
| NIST SP 800-53 | SI-7 (Software, Firmware, and Information Integrity) |
Dev parallel: Come
git logche registra ogni commit e chi l'ha fatto - FIM e' il git blame del filesystem di produzione. Ogni modifica ha un "commit" con timestamp, cosa e' cambiato, e l'hash prima/dopo. La baseline e' come il branchmainprotetto: nessuna modifica accettata senza verifica.
FIM in Ambienti Container#
Nei container Docker/Kubernetes il concetto di FIM e' meno rilevante per design: i container sono immutabili. Il filesystem del container e' definito dall'immagine; qualsiasi modifica e' temporanea e viene persa al riavvio.
La security nei container si concentra su:
- Image scanning (vulnerabilita' nei layer dell'immagine) - tool: Trivy, Grype
- Runtime security (syscall anomali, mount non previsti) - tool: Falco
- Protezione del volume montato dall'host (quello non e' immutabile!)
Se un container scrive su un volume persistente (bind mount), quel volume puo' e deve essere monitorato con FIM tradizionale.
Scenario Reale#
Un server Linux di produzione mostra comportamento anomalo: comandi ps e netstat non mostrano tutti i processi, ma tcpdump rivela traffico verso un IP sospetto. Il team SOC esegue un check AIDE: l'hash di /usr/bin/ps, /usr/bin/netstat e /usr/bin/ss sono tutti diversi dalla baseline. Hash baseline: a3f4b2..., hash attuale: 9c7e1d.... Conferma rootkit. Azione: isolare il server, montare il disco su un sistema pulito, analizzare i binari modificati con strings e strace, recuperare dalla baseline pulita o reinstallare l'OS.
Collegato a#
- rootkit - FIM e' la principale difesa contro rootkit che modificano binari
- wazuh-architecture - Wazuh FIM e' integrato nel modulo syscheck di Wazuh
- hashing - SHA-256 e' l'algoritmo di hash usato per le baseline FIM
- edr - EDR moderni includono FIM come componente di behavioral detection
- linux-filesystem-hierarchy - conoscere la struttura filesystem aiuta a configurare i path corretti


