File Integrity Monitoring

Cos'è FIM

FIM (File Integrity Monitoring), è uno strumento che monitora file e avvisa di eventuali cambiamenti, come la creazione di file, modifiche, rimozioni e così via. Grazie a FIM, si ha una maggiore probabilità di rilevare tempestivamente le violazioni della sicurezza, garantendo migliori possibilità di rimanere online e scongiurare eventuali danni rilevanti. Per questo motivo, FIM è considerato principalmente una soluzione di sicurezza. Inoltre è utile per controllare proprietà di file come i permessi, in quanto anche una semplice modifica dei permessi di un file potrebbe lasciare il sistema aperto agli attacchi.

Andando nelle impostazioni del modulo, si possono creare una serie di filtri indicando delle cartelle all'interno della quale far eseguire FIM. Inoltre, si possono includere o escludere file e/o cartelle, indicare un lasso di tempo o un'ora in cui far eseguire il modulo ecc.

Una volta date tutte le informazioni necessarie, premendo il pulsante di start del relativo filtro, FIM scorre tutta la struttura gerarchica dei file system a partire dalle cartelle indicate nel filtro. Per ogni file che incontra, salva tutte le informazioni di quel file su un xml che chiameremo "database", compreso il suo MD5. Per quanto riguarda le cartelle invece, vengono salvate le stesse informazioni dei file, tranne che l'MD5 e la dimensione, sullo stesso file.

Quando questa elaborazione è finita, viene creata la firma del database e salvata al suo interno, usando come algoritmo SHA-512. Durante l'esecuzione successiva, controllerà se la firma del database è corretta:

  • se non è corretta significa che il contenuto del database è stato modificato;
  • se è corretta significa che il contenuto del database non è stato modificato.

Nel primo caso, verrà solo creato un nuovo database con le informazioni sui file e cartelle della nuova esecuzione di FIM. Nel secondo caso invece, per ogni file e cartella elaborata, verrà confrontata ogni sua informazione con quella relativa salvata nel database. Se anche solo un'informazione non coincide, verrà creato un file che chiameremo "alert", all'interno del quale verranno salvate le informazioni non uguali, indicando il prima (informazione del database) e il dopo (informazione del file appena elaborato).

Pagina Impostazioni

Cliccando nella sezione FIM-FIM settings del menu laterale a sinistra, verrà mostrata la lista di moduli FIM, attualmente attivi. Di seguito gli attributi della tabella visualizzata:

  • Where: nome del nodo;
  • What: nome del modulo;
  • Tot. Enabled filters: numero di filtri attivi per quel nodo.

Cliccando sull'icona di edit, si accederà alla visualizzazione del modulo FIM di quel nodo specifico.

Figura 1: FIM Modules

Pagina Modulo

In questa visualizzazione vengono mostrati 2 pannelli principali:

  • Basic Parameters: contiene i parametri di base del modulo;
  • Filter List: contiene la lista di filtri con le informazioni di base per ogni filtro.

Figura 2: Modulo

Di seguito i parametri del pannello Basic Parameters:

  • Keystore name: nome del keystore che contiene il certificato digitale che serve per firmare sia i file di alert che i file di database;
  • Keystore password: password del keystore;
  • Alias name: nome identificativo del certificato all'interno del keystore;
  • Alias password: password dell'alias;
  • Max alerts to write: numero massimo di alert, di file o cartelle che hanno informazioni differenti da quelle salvate nel database, da scrivere nel file di alert;
  • Max files to keep: numero massimo di file alert e file database da mantenere nel disco.

Figura 3: Basic Parameters

Di seguito i parametri del pannello Filter list:

  • Filter name: nome del filtro;
  • Description: descrizione del filtro;
  • Root directory: cartella principale all'interno della quale far eseguire FIM, questa cartella viene esclusa dal controllo se si imposta almeno una cartella nel pannello Directory List la quale deve essere una cartella interna alla root directory;
  • Enable: abilita o disabilita il filtro.

Cliccando sull'icona di see details del pannello Filters, si accederà alla visualizzazione del relativo filtro.

Figura 4: Filter list

Pagina Filtro

In questa visualizzazione vengono mostrati 3 pannelli principali:

  • Filter: contiene le impostazioni del filtro in dettaglio;

  • Filter Conditions: contiene le regole generiche per filtrare cartelle e file;

  • Directory List: contiene tutte le directory associate a quel filtro all'interno della quale far eseguire FIM. Quindi per ogni filtro si possono avere una lista di cartelle da monitorare, le quali possono avere delle condizioni di filtraggio uguali.

Figura 5: Impostazioni Filtro

Di seguito i parametri del pannello Filter:

  • Filter name: nome del filtro;

  • Description: descrizione del filtro;

  • Root directory: cartella principale all'interno della quale far eseguire FIM, questa cartella viene esclusa dal monitoraggio se si imposta almeno una cartella nel pannello Directory List la quale deve essere una cartella interna alla root directory;

  • Starts every (minutes): indica ogni quanto far eseguire FIM in minuti, se questo campo non è vuoto, Starts at (server time) non viene preso in considerazione;

  • Starts at (server time): indica l'ora e i minuti (nel formato hh:mm) in cui far eseguire FIM ogni giorno. Se Starts every (minutes) non è vuoto, questo campo non viene preso in considerazione. NB: l'ora inserita è l'ora del server in cui è installato FIM, che potrebbe essere diversa da quella locale;

  • Depth: indica la profondità del monitoraggio di file e cartelle, se vuoto il valore di default è 2147483647;

  • Enable: abilita o disabilita il filtro.

Figura 6: Pannello del filtro

Di seguito i parametri del pannello Filter Conditions:

  • Operation: lista che comprende due opzioni:

  • Include: include i file/cartelle. Se viene utilizzato Include, verranno inclusi nel monitoraggio solo i file/cartelle che rispettano i parametri della regola, mentre tutti gli altri verranno saltati. Include ha priorità maggiore rispetto a Exclude, ciò significa che se vengono utilizzati entrambi per la stessa cartella, Exclude viene ignorato;

  • Exclude: esclude tutti i file/cartelle. Se viene utilizzato Exclude, verranno esclusi dal monitoraggio tutti i file/cartelle che rispettano i parametri della regola. Exclude ha priorità maggiore rispetto a Include, ciò significa che se vengono utilizzati entrambi per la stessa cartella, Exclude viene ignorato;

  • Type: lista che comprende due opzioni:

  • File: comprendi solo i file;

  • Directory: comprendi solo le directory.

  • Where: lista che comprende tre opzioni:

  • Start: nome del file o della cartella che inizia per ...;

  • End: nome del file o della cartella che finisce per ...;

  • Regex: espressione regolare.

  • Value: valore della regola.

Facciamo un esempio. Se vogliamo escludere tutti i file che finiscono per .log, allora la regola sarà: Exclude -- File -- End- .log. Se invece vogliamo includere tutti i file che finiscono per .exe, allora la regola sarà: Include -- File -- End- .exe. Questo però significa che si andranno ad escludere tutti i file che hanno estensione diversa da .exe. Se si vogliono aggiungere nuove regole, cliccare sul pulsante Se invece si vogliono eliminare delle regole, cliccare sul pulsante

Figura 7: Pannello Filter Conditions

Di seguito i parametri del pannello Directory List:

  • Directory name: nome della directory che si vuole includere nel monitoraggio;
  • Description: descrizione della directory;
  • Depth: indica la profondità del monitoraggio di file e cartelle all'interno di questa, se vuoto il valore di default è 2147483647;
  • Enable: abilita o disabilita il monitoraggio su questa directory.

Figura 8: Pannello Directory List

Se si vogliono aggiungere nuove directories, cliccare sul pulsante . Se invece si vogliono eliminare delle directories, cliccare sul pulsante . Cliccando sull'icona di see details del pannello Directory List, si accederà alla visualizzazione della relativa directory.

Pagina Directory

In questa visualizzazione vengono mostrati 2 pannelli principali:

  • Directory: riprende le stesse informazioni del pannello Directory List;
  • Directory Conditions: contiene le regole generiche per filtrare cartelle e file. Riprende gli stessi parametri del pannello Filter Conditions, l'unica differenza è che le regole definite in questo pannello sovrascrivono quelle del filtro.

Figura 9: Impostazioni delle directories

Figura 10: Pannello Directory Conditions

NB: Le cartelle all'interno della quale verranno salvati database e alert sono:

  • Linux:
TCOProject/bin/LBL/LBLLoadBalancer_aai_010_000_000/procsProfiles/C10_LBLGoFim/notificationDir
  • Windows:
C:\\TCOProject\\bin\\LBL\\LBLLoadBalancer_aai_010_000_000\\procsProfiles\\C10_LBLGoFim\\notificationDir

All'interno di questo path, per ogni filtro, verranno create automaticamente delle cartelle: .../<nomeFiltro/databases e .../<nomeFiltro/alerts.

Conditions

Andiamo a vedere più nel dettaglio come funzionano le Conditions per quanto riguarda le directory.

OperazioneInput utenteInput utente norm.Root + DirectoryDirectoryDirectory norm.Match
REGEX(.*)/bb/var/var/aa/bbb/aa/bbb/True
STARTS/aa/bb/aa/bb/var/var/aa/bbb/aa/bbb/True
/aa/bb//aa/bb//var/var/aa/bbb/aa/bbb/False
aa/bb/aa/bb/var/var/aa/bbb/aa/bbb/True
aa/bb//aa/bb//var/var/aa/bbb/aa/bbb/False
ENDS/aa/bb/aa/bb//var/var/aaa/bb/aaa/bb/False
/aa/bb//aa/bb//var/var/aaa/bb/aaa/bb/False
aa/bbaa/bb//var/var/aaa/bb/aaa/bb/True
aa/bb/aa/bb//var/var/aaa/bb/aaa/bb/True

Operazione: indica la condizione che FIM dovrà usare per filtrare le cartelle;

Input utente: indica il campo Value;

Input utente norm: indica il campo Value normalizzato (operazione che FIM esegue durante la ricerca);

Root+Directory: indica la concatenazione del campo RootDirectory con il campo FilterDirectory che verrà utilizzata da FIM per normalizzare le directories che filtrerà;

Directory: indica la directory che FIM ha trovato all'interno di Root+Directory;

Directory norm: indica la directory che FIM ha trovato all'interno di Root+Directory, normalizzata (operazione che FIM esegue durante la ricerca);

Match: indica se l'input utente normalizzato fa match con la directory normalizzata.

Quando FIM ricerca i files, esegue una serie di operazioni per normalizzare le stringhe passate, come condizioni di filtro, dall'utente.

  • Per normalizzare i valori di Starts, verifica se l'input utente ha come primo carattere uno slash, se non ce l'ha lo aggiunge. Per quanto riguarda la Directory invece, viene normalizzata togliendo, dal path della directory trovata, Root+Directory e aggiungendo come ultimo carattere uno slash.

  • Per normalizzare i valori di Ends, verifica se l'input utente ha come ultimo carattere uno slash, se non ce l'ha lo aggiunge. Per quanto riguarda la Directory invece, è uguale alla normalizzazione di Starts.

  • Per normalizzare i valori di Regex, l'input utente non viene cambiato, ma viene normalizzato Directory allo stesso modo di Starts.

NB: se l'utente inserisce lo slash (\ oppure /) del sistema operativo sbagliato, FIM non valuterà correttamente tale condizione. L'utente dovrà inserire il path della directory da escludere/includere a partire da Root+Directory.

Pagina Status

Cliccando nella sezione FIM-FIM Status del menu laterale a sinistra, verrà mostrata la lista di filtri attualmente attivi, all'interno di una tabella.

Figura 11: Pagina Status

Di seguito gli attributi della tabella visualizzata:

  • Node: nome del nodo;

  • Module: nome del modulo;

  • Filter name: nome del filtro;

  • Description: descrizione del filtro;

  • Last Run: data e ora dell'ultima esecuzione;

  • Prog. files: numero di file attualmente verificati;

  • Tot. Files: numero di file totali da controllare;

  • Alerts: numero di file con problemi rilevati;

  • Starts at: indica l'ora e i minuti (nel formato hh:mm) in cui far eseguire FIM, ogni giorno. Se Start at e Start every non sono impostati, di default verrà eseguito a mezzanotte di ogni giorno;

  • Starts every: indica ogni quanto far eseguire FIM, in minuti;

  • Phase: indica la fase di progresso dell'elaborazione;

  • Progress: indica la percentuale di progresso dell'esecuzione del monitoraggio. La barra del progresso può essere di due colori:

  • verde se non ci sono alert;

  • arancione se ci sono alert;

  • Status: mostra lo stato del filtro, il quale può essere:

  • In esecuzione: dopo aver premuto il pulsante di start della colonna delle Actions, oppure in automatico in base ai valori di Starts at e Starts every;

  • In fase di stop: dopo aver premuto il pulsante di stop della colonna delle Actions;

  • In attesa: se un filtro dello stesso nodo è già in esecuzione.

  • Actions: insieme di pulsanti utilizzati per eseguire delle azioni, le quali possono essere:

  • Edit: reindirizza nella pagina del filtro in Figura 5: Impostazioni Filtro;

  • Start: esegue il monitoraggio;

  • Stop: ferma il monitoraggio che è in esecuzione. Se lo si ferma non si potrebbero vedere gli alert fino ad allora creati (se esistenti), dipende dalla fase del monitoraggio in cui viene fermato

  • View Alert: reindirizza nella pagina Alerts in Figura 12: Alerts List.

  • Suspend: mette in pausa oppure riprende l'elaborazione degli alert. Se messo in pausa, non verranno considerati gli alert durante il monitoraggio e quindi non visualizzati i nuovi alert (se presenti).

Pagina Alerts

Dopo aver cliccato sul pulsante View alert, si viene reindirizzati su una pagina che mostra gli alert (se esistenti) dell'ultima esecuzione.

Figura 12: Alerts List

Vengono visualizzati sotto forma di tabella i cui attributi sono:

  • Node: nome del nodo;

  • Module: nome del modulo;

  • Type: indica se l'alert mostrato è:

  • File mismatch: ovvero se il file ha qualche informazione diversa da quella della precedente esecuzione;

  • Directory mismatch: ovvero se la directory ha qualche informazione diversa da quella della precedente esecuzione;

  • File new/old: ovvero se il file è nuovo oppure è stato spostato o cancellato;

  • Directory new/old: ovvero se la directory è nuova oppure è stata spostata o cancellata.

  • Path name: il path in cui è stata trovata una incongruenza;

  • See details: per ogni riga della tabella c'è un pulsante che, una volta cliccato, mostrerà solo le informazioni che sono state modificate rispetto l'ultima esecuzione. Si possono visualizzare 5 tipologie di alert:

  • Mismatch: mostra solo le informazioni diverse da quelle della precedente esecuzione;

Figura 13: Modal Mismatch

  • Max alert exceed: viene mostrato un solo alert nella tabella quando il numero di alert creati supera il limite massimo impostato nel parametro Max alerts to write.

Figura 14: Alert Max Alert Exceed

Se si clicca su View details, verranno mostrati i dettagli dell'alert;

Figura 15: Modal Max Alert Exceed

  • New/old: mostra tutte le informazioni del nuovo o vecchio file/directory indicando se è nuovo oppure vecchio.

Figura 16: Modal New/Old

Se si clicca su View details, verranno mostrati i dettagli dell'alert;

  • Firm failed: viene mostrato l'alert nella tabella quando la firma di un file non è corretta.

Figura 17: Firm failed

Se si clicca su View details, verranno mostrati i dettagli dell'alert.

Figura 18: Modal firm failed

Se si vogliono visualizzare tutti gli alert di file o directory che sono contenuti nella directory padre di uno dei path della lista, basterà cliccare sull'icona della colonna Type, di quel path. Esempio: Path name: A/B/C/file.txt Se clicchiamo sull'icona di questo file, verrà scritto il path completo sulla barra di ricerca della tabella, escludendo file.txt, e quindi verranno mostrati solo gli alert di file e cartelle che hanno come *Path name* A/B/C.

Templates

Sono presenti dei template all'interno del pannello Filter list che possono essere modificati secondo le proprie esigenze.

I template disponibili sono: Apache, MySQL, Tomcat, Nginx, Jboss.