AIDE

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page AIDE and the translation is 74% complete.
Outdated translations are marked like this.


AIDE (Advanced Intrusion Detection Environment) è un sistema di rilevamento delle intrusioni basato su host-based. AIDE scansiona file ed altre risorse, immagazzinando informazioni riguardo a questi in un database. Le informazioni immagazzinate includono alcuni attributi chiave dei file come l'hash, la dimensione, proprietà, tempo di modifica, tempo di creazione, ed altri. Dopo la creazione iniziale del database, AIDE riscansiona il sistema e compara i nuovi risultati con quelli precedentemente immagazzinati. Se i valori differiscono, il file è stato modificato ed il cambiamento viene riportato. L'idea dietro all'utilizzo di AIDE è di creare un'immagine del sistema e poi compararla con una già creata in modo da identificare file compromessi.

Opzioni USE

Installare app-forensics/aide è semplice una volta settate le opzioni USE.

USE flags for app-forensics/aide AIDE (Advanced Intrusion Detection Environment) is a file integrity checker

acl Add support for Access Control Lists
audit Enable support for Linux audit subsystem using sys-process/audit
curl Use curl for http,https and ftp backends
e2fs Enable support for checking file attributes on ext2/ext3/ext4 filesystems
mhash Add support for the mhash library
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
xattr Add support for extended attributes (filesystem-stored metadata)

Le opzioni USE specifiche ad un certo pacchetto dovrebbero essere definite in /etc/portage/package.use, oppure in un file di testo dentro una directory chiamata /etc/portage/package.use. Per esempio, utilizzando /etc/portage/package.use come file:

FILE /etc/portage/package.useAbilitazione supporto zlib per AIDE
app-forensics/aide zlib

Emerge

Dopo aver settato le opzioni USE, si installi il software:

root #emerge --ask app-forensics/aide

Configurazione

Panoramica

Il file di configurazione per app-forensics/aide non è così spaventoso come può sembrare a prima vista. Il file predefinito si trova in /etc/aide/aide.conf, ma gli amministratori possono facilmente creare molteplici file se necessario. Oltre ad alcune variabili, il file di configurazione utilizza una notazione breve per i vari aspetti dei file da scansionare (solo hash, o anche informazioni sugli inode, ecc.) e quali file scansionare.

Di seguito sono riportate le variabili relative al database:

FILE aide.confVariabili di configurazione del database di AIDE
database=file:/var/lib/aide/aide.db
database_out=file:/var/lib/aide/aide.db.new

La prima riga dell'esempio sopra (database) definisce il percorso del database che contiene i valori conosciuti. La seconda riga (database_out) definisce dove scrivere il nuovo database quando viene generato. Si raccomanda di non far puntare queste variabili allo stesso database (con lo stesso percorso per ogni variabile). Se un database deve sovrascrivere l'altro, il miglior metodo è di copiare manualmente il nuovo database da un posto all'altro. Per esempio, per sovrascrivere il primo database con il secondo, è possibile usare questo comando:

root #cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db

Per ora, si lascino le impostazioni sul database così come sono; le vedremo in dettaglio in seguito.

Successivamente, si considerino le variabili che sono notazioni brevi che indicano quali informazioni registrare nel database.

FILE aide.confConfigurazione di AIDE utilizzando la notazione breve
Binlib = p+i+n+u+g+s+b+m+c+md5+sha1
Logs = p+i+n+u+g+S
...
Nota
I codici md5 e sha1 significano ovviamente che saranno calcolati hash di tipo MD5 e SHA-1 (rispettivamente).

Le lettere sono descritte nel file aide.conf di default, ma per comodità riportiamo nella tabella seguente le opzioni più comuni:

Short Description
p Permessi
i Numero dell'inode
n Numero di (hard)link
u Informazioni sull'Utente (User)
g Informazioni sul Gruppo (Group)
s Dimensione (Size)
S Dimensione (Size, ma viene riportato solo il calo di dimensione - la crescita è consentita)
b Conta dei blocchi (Block count)
m Modification time

Di seguito un'overview di quali directory scansionare e di cosa cercare. Con le tre righe d'esempio seguenti, AIDE è configurato per esaminare le directory /bin e /sbin con gli elementi identificati dalla notazione in Binlib. Il path /var/log utilizzerà invece quanto definito nella variabile Logs sopra.

FILE aide.confOpzioni sugli obbiettivi da scansionare
/bin Binlib
/sbin Binlib
/var/log Logs
...

AIDE supporta le espressioni regolari ed agli utenti è permesso "rimuovere" le corrispondenze. Per esempio, per controllare il path /var/log ma non il /var/log/portage è possibile impostare un set di esclusioni utilizzando il ! prima dei percorsi da escludere:

FILE aide.confAltri obbiettivi di scan
/var/log Logs
!/var/log/portage

Opzioni dettagliate

Il file di configurazione è basato su espressioni regolari, macro e regole per i file e i percorsi. Gli utenti esperti con tripwire non hanno difficoltà a gestire il file di configurazione di AIDE. Sono disponibili le seguenti macro:

Macro Descrizione Sintassi
ifdef Se definito @@ifdef "name"
ifndef Se non definito @@ifndef "name"
define Definisce una variabile @@define "nome" "valore"
undef Cancella una variabile a variable @@undef "nome"
ifhost se "hostname" @@ifhost "hostname"
ifnhost se non "hostname" @@ifnhost "hostname"
endif Endif deve essere usato dopo qualunque delle macro di cui sopra eccetto define e undef @@endif

Queste macro diventano molto comode quando si ha a che fare con più sistemi Gentoo usando la stessa configurazione su ciascuna di esse. Non tutte le macchine eseguono gli stessi servizi o possiedono gli stessi utenti.

Inoltre, abbiamo un insieme di opzioni che identificano i permessi, le proprietà dei file, i checksum, gli hash crittografici, ... per convalidare i file e i percorsi.

Opzione Descrizione
p permessi
i inode
n numero di collegamenti
u utente
g gruppo
s dimensione
b conteggio dei blocchi
m mtime
a atime
c ctime
S controllo della dimensione in crescita
md5 checksum md5
sha1 checksum sha1
rmd160 checksum rmd160
tiger checksum tiger
R p+i+n+u+g+s+m+c+md5
L p+i+n+u+g
E Gruppo vuoto
> File di log crescente p+u+g+i+n+S

Se AIDE viene compilato con il supporto a mhash, allora si dovrebbero usare anche le seguenti opzioni:

Opzione Descrizione
haval haval checksum
gost gost checksum
crc32 crc32 checksum

Inizializzazione e scansioni frequenti

Per un setup di base di AIDE, è necessario inizializzare un database. Questo avviene utilizzando l'opzione --init. Per sincerarsi che AIDS utilizzi le configurazioni definite nelle sezioni precedenti, assicurarsi di passare l'opzione --config con il puntamento alla configurazione corretta:

root #aide --init --config=/etc/aide/aide.conf
AIDE, version 0.14.2
  
### AIDE database at /var/lib/aide/aide.db.new initialized.

Una volta inizializzato, ogni database preesistente può essere sovrascritto:

root #cd /var/lib/aide; cp aide.db.new aide.db

Con il nuovo database disponibile, le risorse possono essere esaminate nuovamente utilizzando l'opzione --check. Questo creerà un altro database contente ogni modifica fatta al filesystem dalla creazione del primo database. Assicuratevi di utilizzare l'opzione --config con il puntamento alla stessa configurazione utilizzata per la creazione del primo database:

root #aide --check --config=/etc/aide/aide.conf
AIDE, version 0.14.2
  
### All files match AIDE database. Looks okay!

Se ci sono state modifiche, verrà inviata una notifica:

This is not a real error and is simply aide stating it cannot find a database so it must create one, this may take several minutes.

root #aide --check --config=/etc/aide/aide.conf
AIDE found differences between database and filesystem!!
Start timestamp: 2013-04-11 15:31:02
  
Summary:
  Total number of files:        318
  Added files:                  0
  Removed files:                0
  Changed files:                2
  
  
---------------------------------------------------
Changed files:
---------------------------------------------------
  
changed: /etc/pam.d
changed: /etc/pam.d/run_init
  
---------------------------------------------------
Detailed information about changes:
---------------------------------------------------
  
  
Directory: /etc/pam.d
  Mtime    : 2013-04-09 22:11:18              , 2013-04-11 15:31:01
  Ctime    : 2013-04-09 22:11:18              , 2013-04-11 15:31:01
  
File: /etc/pam.d/run_init
  Size     : 205                              , 208
  Mtime    : 2013-04-09 22:11:18              , 2013-04-11 15:31:00
  Ctime    : 2013-04-09 22:11:18              , 2013-04-11 15:31:01
  Inode    : 394203                           , 394053
  MD5      : Mm0KPzpPt63eqGClTJ/KaQ==         , eLUrP2BsIq25f3AZX+dlBA==
  SHA1     : NrQtsUeOsXS4RHUq+ejYBne5V6E=     , 5A6ef6VJCcMiqEjKQ7e9xkBNZB8=

Consigli e Best practices

Specificate cosa esaminare

La configurazione di default è utile, ma necessità di alcune rifiniture per andare incontro alle necessità dell'utente. E' dunque importante sapere quali file esaminare e perché.

Per esempio, per esaminare solo i file relativi all'autenticazione ma non altri, utilizzate una configurazione come la seguente:

FILE aide.confTargets relativi all'autenticazione
# SELinux policy e configurazioni
/etc/selinux ConfFiles
# DB di autenticazione 
/etc/passwd ConfFiles
/etc/shadow ConfFiles
/etc/nsswitch.conf ConfFiles
# Configurazioni Autenticazione
/etc/pam.d ConfFiles
/etc/securetty ConfFiles
/etc/security ConfFiles
# librerie PAM 
/lib(64)?/security Binlib

Mantenete il database offline ed in sola lettura

Un secondo aspetto importante è che il database risultante dovrebbe essere memorizzato "offline" quando "non" necessario e dovrebbe essere utilizzato in sola lettura quando "è" necessario. Questo aggiunge un certo grado di protezione contro un utente malevolo che possa aver compromesso la macchina e modificato il database. Per esempio, memorizzare il database su una share NFS read-only (per i server) o su un media non scrivibile (quando l'accesso fisico alla macchina è possibile), come un CD o una chiavetta USB in sola lettura.

Dopo aver memorizzato il database in una posto in sola lettura, aggiornate il file aide.conf in modo che la variabile database punti a questo nuovo file.

Fare scansioni offline

Se possibile, provate ad utilizzare metodi di scansione offline per i vostri sistemi. In caso di piattaforme virtuali, è possibile fare delle snapshot del sistema, montare queste snapshot (in read-only) e fare lo scan su quest'ultimo filesystem.

root #losetup /dev/loop0 /srv/virt/gentoo.img
root #vgscan
root #vgchange -ay
root #mount -o ro /dev/volgrpX/volumeY /mnt/image
root #chroot /mnt/image
root #aide --check --config=/path/to/aide.conf
root #exit
root #umount /mnt/image
root #vgchange -an /dev/volgrpX
root #losetup -d /dev/loop0

L'approccio sopra utilizza chroot. Questo è necessario solamente quando il filesystem iniziale è stato scansionato dal sistema "live" e l'amministratore vuole eseguire una verifica offline. Se lo scan iniziale è stato fatto anch'esso offline, allora il file aide.conf punterà già al mount point corretto ed il database utilizzerà quei percorsi immediatamente, quindi non ci sarà bisogno di alcun chroot.

Ulteriori informazioni

  • In Integrity/Concepts vengono discussi concetti relativi all'integrità dei sistemi (in inglese)

Risorse esterne