AIDE

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page AIDE and the translation is 87% complete.

Other languages:
English • ‎italiano • ‎日本語 • ‎한국어 • ‎русский • ‎中文(中国大陆)‎

AIDE (Advanced Intrusion Detection Environment) è un HIDS (Host-based Intrusion Detection System). 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, ownership, modification time, creation time, 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.

Installazione

Flags USE

L'installazione di app-forensics/aide è semplice una volta settate le flags USE.

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

acl Add support for Access Control Lists global
curl Add support for client-side URL transfer library global
e2fs Enable support for checking file attributes on ext2/ext3/ext4 filesystems local
mhash Add support for the mhash library global
postgres Add support for the postgresql database global
prelink Bypass prelinking when calculating checksums local
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur global
static !!do not set this during bootstrap!! Causes binaries to be statically linked instead of dynamically global
xattr Add support for extended attributes (filesystem-stored metadata) global
zlib Add support for zlib (de)compression global

Le flag 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 flag USE, installate 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 di default 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 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 la collocasione 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 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 db 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, lasciate le impostazioni sul database così come sono; le vedremo in dettaglio in seguito.

Next, consider the variables which are short-hand notations for what information to record in the 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
...
Note
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

The configuration file is based on regular expressions, macros and rules for files and directories. Users experienced with the tripwire solution will have no difficulties dealing with AIDE's configuration file. The following macros are available:

Macro Description Syntax
ifdef If defined @@ifdef "name"
ifndef If not defined @@ifndef "name"
define Define a variable @@define "name" "value"
undef Undefine a variable @@undef "name"
ifhost if "hostname" @@ifhost "hostname"
ifnhost if not "hostname" @@ifnhost "hostname"
endif Endif must be used after any of the above macros except define and undef @@endif

These macros become very handy when dealing with multiple Gentoo boxes, while using the same configuration on all. Not all machines run the same services or even have the same users.

Next we have a set of flags which identify the permissions, file properties, checksums, cryptographic hashes, ... to validate on files and directories.

Flag Description
p permissions
i inode
n number of links
u user
g group
s size
b block count
m mtime
a atime
c ctime
S check for growing size
md5 md5 checksum
sha1 sha1 checksum
rmd160 rmd160 checksum
tiger tiger checksum
R p+i+n+u+g+s+m+c+md5
L p+i+n+u+g
E Empty group
> Growing logfile p+u+g+i+n+S

If AIDE is compiled with mhash support, then the following flags can be used as well:

Flag Description
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:

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