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.

image1

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.

image2

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.

image3

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.

image4

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.

    image5

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.

image6

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 image7 Se invece si vogliono eliminare delle regole, cliccare sul pulsante image8

image9

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.

image10

Figura 8: Pannello Directory List

Se si vogliono aggiungere nuove directories, cliccare sul pulsante image7 . Se invece si vogliono eliminare delle directories, cliccare sul pulsante image8 . 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.

image11

Figura 9: Impostazioni delle directories

image12

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.

CondizioneInput utenteInput utente norm.Root + DirectoryDirectoryDirectory norm.Match
REGEX(.*)/bb/var/aa/bbb/var/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.

image13

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; image14

  • arancione se ci sono alert; image15

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

  • In esecuzione: image16 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: image17 dopo aver premuto il pulsante di stop della colonna delle Actions;

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

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

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

  • Start: image20 esegue il monitoraggio;

  • Stop: image21 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: image22 reindirizza nella pagina Alerts in Figura 12: Alerts List.

  • Suspend: image23 mette in pausa oppure image20 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.

image24

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: image25 ovvero se il file ha qualche informazione diversa da quella della precedente esecuzione;

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

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

  • Directory new/old: image28 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;

image29

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.

image30

Figura 14: Alert Max Alert Exceed

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

image31

Figura 15: Modal Max Alert Exceed

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

image32 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.

image33

Figura 17: Firm failed

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

image34

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.