AIDE
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.
Installazione
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:
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:
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.
Binlib = p+i+n+u+g+s+b+m+c+md5+sha1
Logs = p+i+n+u+g+S
...
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.
/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:
/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:
# 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)