AIDE
AIDE (Advanced Intrusion Detection Environment) ist ein Host-basiertes Intrusion Detection System. AIDE scannt Dateien und andere Ressourcen und speichert Informationen über diese Dateien in einer Datenbank. Zu den gespeicherten Informationen gehören wichtige Dateiattribute wie Hash-Ausgabe, Dateigröße, Eigentümer, Änderungszeit, Erstellungszeit und mehr. Nachdem die erste Datenbank erstellt wurde, führt AIDE einen erneuten Scan des Systems durch und vergleicht die erneuten Scanergebnisse mit den zuvor gespeicherten Werten. Weichen die Werte ab, wurde die Datei geändert und die Änderung wird gemeldet. Die Idee hinter der Verwendung von AIDE ist es, einen Schnappschuss eines Systems zu erstellen und diesen Schnappschuss mit einem anderen Schnappschuss zu vergleichen, um gefährdete Dateien zu finden.
Installation
USE-Flags
Es ist einfach, app-forensics/aide zu installieren, nachdem Sie die USE-Flags entsprechend gesetzt haben.
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) |
USE-Flag-Änderungen, die sich auf ein bestimmtes Paket beziehen, sollten in der Datei /etc/portage/package.use oder einer Textdatei in einem Verzeichnis namens /etc/portage/package.use definiert werden. Wenn Sie zum Beispiel eine /etc/portage/package.use Datei haben:
app-forensics/aide zlib
Emerge
Nachdem die USE-Flags gesetzt wurden, installieren Sie die Software:
root #
emerge --ask app-forensics/aide
Konfiguration
Übersicht
Die Konfigurationsdatei für app-forensics/aide ist nicht so entmutigend, wie sie auf den ersten Blick erscheinen mag. Die Standarddatei ist unter /etc/aide/aide.conf gespeichert, aber Administratoren können bei Bedarf leicht mehrere Konfigurationsdateien erstellen. Neben ein paar Variablen enthält die Konfigurationsdatei Kurzbezeichnungen dafür, nach welchen Aspekten von Dateien gescannt werden soll (nur Hashes oder auch Inode-Informationen usw.) und welche Dateien gescannt werden sollen.
Schauen Sie sich die Datenbankvariablen an:
database=file:/var/lib/aide/aide.db
database_out=file:/var/lib/aide/aide.db.new
Die erste Zeile im obigen Beispiel (database
) definiert den Speicherort der Datenbank, die die bekannten Werte enthält. Die zweite Zeile (database_out
) legt fest, wo neue Datenbanken gespeichert werden sollen, wenn eine weitere generiert wird. Es wird allgemein davon abgeraten, diese Variablen auf dieselbe Datenbank verweisen zu lassen (gleiche Pfade für jede Variable). Wenn eine Datenbank eine andere überschreiben soll, ist es am besten, die erzeugte Datenbank manuell von einem Ort zum anderen zu "kopieren". Um zum Beispiel die erste Datenbank mit der zweiten zu überschreiben, könnte dieser Befehl verwendet werden:
root #
cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
Lassen Sie die Datenbankvariablen vorerst so, wie sie sind; sie werden später in diesem Artikel ausführlicher behandelt.
Als Nächstes betrachten wir die Variablen, die Kurzbezeichnungen dafür sind, welche Informationen in der Datenbank gespeichert werden sollen.
Binlib = p+i+n+u+g+s+b+m+c+md5+sha1
Logs = p+i+n+u+g+S
...
Es sollte offensichtlich sein, dass
md5
und sha1
bedeuten, dass MD5- bzw. SHA-1-Prüfsummen genommen werden.Die Buchstaben sind in der Standarddatei aide.conf beschrieben, aber der Einfachheit halber gibt die folgende Tabelle einen Überblick über die gängigsten Optionen:
Abkürzung | Beschreibung |
---|---|
p
|
Berechtigungen |
i
|
Inode-Nummer |
n
|
Anzahl an (hard)links |
u
|
Informationen zum Benutzer |
g
|
Informationen zur Gruppe |
s
|
Größe |
S
|
Größe (nur melden, wenn die Größe plötzlich kleiner ist - Wachstum ist erlaubt) |
b
|
Blockanzahl |
m
|
Änderungszeit |
Als nächstes folgt eine Überblick darüber, welche Verzeichnisse gescannt werden sollen und wonach zu suchen ist. Im folgenden Drei-Zeilen-Beispiel wird AIDE angewiesen, die Verzeichnisse /bin und /sbin anhand der in der Binlib-Kurzbeschreibungsvariable festgelegten Maßnahmen zu überprüfen. In der Datei /var/log werden die in der oben definierten Variable Logs definierten Scan-Maßnahmen angezeigt.
/bin Binlib
/sbin Binlib
/var/log Logs
...
AIDE unterstützt reguläre Ausdrücke und die Benutzer können Übereinstimmungen "entfernen". Um zum Beispiel /var/log zu scannen, aber nicht /var/log/portage, setzen Sie einen Ausschluss, indem Sie das !
(Ausrufezeichen) vor den ausgeschlossenen Pfad(en) verwenden:
/var/log Logs
!/var/log/portage
Detaillierte Optionen
Die Konfigurationsdatei basiert auf regulären Ausdrücken, Makros und Regeln für Dateien und Verzeichnisse. Benutzer, die bereits Erfahrung mit Tripwire haben, werden keine Schwierigkeiten haben, mit der Konfigurationsdatei von AIDE umzugehen. Die folgenden Makros sind verfügbar:
Makro | Beschreibung | Syntax |
---|---|---|
ifdef |
Wenn definiert | @@ifdef "name"
|
ifndef |
Wenn nicht definiert | @@ifndef "name"
|
define |
Definieren einer Variable | @@define "name" "value"
|
undef |
Undefinieren einer Variable | @@undef "name"
|
ifhost |
Wenn "hostname" | @@ifhost "hostname"
|
ifnhost |
Wenn nicht "hostname" | @@ifnhost "hostname"
|
endif |
Endif muss nach jedem der oben genannten Makros außer define und undef verwendet werden | @@endif
|
Dies Makros sind sehr praktisch, wenn man mit mehreren Gentoo-Rechnern arbeitet und auf allen die gleiche Konfiguration verwendet. Nicht auf allen Rechnern laufen die gleichen Dienste oder haben sogar die gleichen Benutzer.
Als nächstes haben wir eine Reihe von Flags, welche die Berechtigungen, Dateieigenschaften, Prüfsummen, kryptografische Hashes, ... für Dateien und Verzeichnisse angeben, welche überprüft werden sollen.
Flag | Beschreibung |
---|---|
p |
Berechtigungen |
i |
inode |
n |
Anzahl von Links |
u |
Benutzer |
g |
Gruppe |
s |
Größe |
b |
Blockanzahl |
m |
mtime |
a |
atime |
c |
ctime |
S |
Prüfung auf zunehmende Größe |
md5 |
MD5-Prüfsumme |
sha1 |
SHA1-Prüfsumme |
rmd160 |
rmd160-Prüfsumme |
tiger |
tiger-Prüfsumme |
R |
p+i+n+u+g+s+m+c+md5
|
L |
p+i+n+u+g
|
E |
Leere Gruppe |
> |
Wachsende Logdatei p+u+g+i+n+S
|
Wenn AIDE mit mhash-Unterstützung kompiliert wurde, dann können die folgenden Flags ebenfalls verwendet werden:
Flag | Beschreibung |
---|---|
haval |
Haval-Prüfsumme |
gost |
Gost-Prüfsumme |
crc32 |
CRC32-Prüfsumme |
Initialisierung und häufiges Scannen
Für eine grundlegenden AIDE-Einrichtung muss eine Datenbank initialisiert werden. Dies wird mit der Option --init
durchgeführt. Um sicherzustellen, dass AIDE die in den vorangegangenen Abschnitten definierten Konfigurationseinstellungen verwendet, müssen Sie die Option --config
übergeben, die auf die richtige Konfigurationsdatei zeigt:
root #
aide --init --config=/etc/aide/aide.conf
AIDE, version 0.14.2 ### AIDE database at /var/lib/aide/aide.db.new initialized.
Nach der Initialisierung können alle bereits vorhandenen Datenbankdateien kopiert werden:
root #
cd /var/lib/aide; cp aide.db.new aide.db
Wenn eine neue Datenbank verfügbar ist, können die Einträge mit der Option --check
erneut überprüft werden (jetzt oder zu einem späteren Zeitpunkt). Dadurch wird eine weitere Datenbank erstellt, die alle Änderungen enthält, die seit der Erstellung der ersten Datenbank am Dateisystem vorgenommen wurden. Stellen Sie sicher, dass Sie die Option --config
verwenden, die auf dieselbe Konfigurationsdatei zeigt, mit der die erste Datenbank erstellt wurde:
root #
aide --check --config=/etc/aide/aide.conf
AIDE, version 0.14.2 ### All files match AIDE database. Looks okay!
Wenn eine oder mehrere Datei(en) geändert wurden, wird eine Benachrichtigung verschickt, wenn noch keine ursprüngliche Datenbank existiert, wird eine Warnung ausgegeben, wie z.B:
root #
aide --init --config=/etc/aide/aide.conf
Couldn't open file /var/lib/aide/aide.db.new for writing
Dies ist kein echter Fehler, sondern eine einfache Meldung von AIDE, dass keine Datenbank gefunden wurde und eine erstellt werden muss.
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=
Bewährte Verfahren
Seien Sie sich im Klaren darüber, was zu scannen ist
Die Standardkonfiguration von AIDE ist nützlich, muss aber an die Bedürfnisse der Benutzer angepasst werden. Es ist wichtig zu wissen, welche Dateien gescannt werden sollen und warum.
Um beispielsweise nach allen authentifizierungsbezogenen Dateien zu suchen, aber nicht nach anderen Dateien, verwenden Sie eine Konfiguration wie diese:
# SELinux-Richtlinie und -Einstellungen
/etc/selinux ConfFiles
# Authentifizierungsdatenbanken
/etc/passwd ConfFiles
/etc/shadow ConfFiles
/etc/nsswitch.conf ConfFiles
# Konfiguration der Authentifizierung
/etc/pam.d ConfFiles
/etc/securetty ConfFiles
/etc/security ConfFiles
# PAM-Bibliotheken
/lib(64)?/security Binlib
Die Datenbank offline und schreibgeschützt halten
Ein zweiter wichtiger Aspekt ist, dass die Ergebnisdatenbank offline gespeichert werden sollte, wenn sie nicht benötigt wird, und schreibgeschützt verwendet werden sollte, wenn die Datenbank benötigt wird. Dies bietet einen gewissen Schutz gegen einen böswilligen Benutzer, der in den Rechner eingedrungen sein könnte, um die Ergebnisdatenbank zu ändern. Stellen Sie die Ergebnisdatenbank beispielsweise auf einem schreibgeschützten NFS-Mount (für Server) oder einem schreibgeschützten Medium (wenn physischer Zugriff auf den Rechner möglich ist) wie einer CD/DVD oder einem schreibgeschützten USB-Laufwerk bereit.
Nachdem Sie die Datenbank an einem schreibgeschützten Ort gespeichert haben, aktualisieren Sie die Datei aide.conf, damit database
auf diesen neuen Ort zeigt.
Offline-Scan durchführen
Versuchen Sie gegebenenfalls, Offline-Scan-Methoden für das System zu verwenden. Bei virtuellen Plattformen könnte es möglich sein, einen Snapshot des Systems zu erstellen, diesen Snapshot einzuhängen (schreibgeschützt) und dann den AIDE-Scan auf dem eingegangenen Dateisystem durchzuführen.
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
Der obige Ansatz verwendet chroot. Dies ist erforderlich, wenn das ursprüngliche Dateisystem vom Live-System aus gescannt wurde und der Administrator eine Offline-Validierung durchführen möchte. Wenn der erste Scan offline durchgeführt wurde, verweist die Datei aide.conf bereits auf den Einhängepunkt und die Datenbank verwendet diese Pfade sofort, so dass kein Chroot erforderlich ist.
Siehe auch
- Integrity/Concepts behandelt die Konzepte im Zusammenhang mit der Systemintegrität