AIDE¶
Siehe auch
- Verwandte Artikel
- Offizielle Dokumentation
man aide,man aide.conf
Das in C entwickelte AIDE (Advanced Intrusion Detection Environment) überwacht Programm- und Konfigurationsdateien auf Änderungen. Es berechnet deren Prüfsumme mit verschiedenen Hash-Verfahren (was der Kollisionsvermeidung dienen soll) und bemerkt Timestamp-, Berechtigungs- und Owner-Änderungen. AIDE erkennt auch, falls Dateien hinzugekommen oder entfernt worden sind.
Die erste Version wurde 1999 vorgestellt. Die Konfiguration ist stark an Tripwire angelehnt.
Begriffe¶
- Baseline
Erstmalig gezogene Datenbank, die den Sollzustand repräsentiert. AIDE vergleicht bei jedem Lauf den aktuellen Zustand mit der Baseline. Änderungen an Systemdateien zwischen zwei Läufen müssen entweder bewusst bestätigt (
aide --update) oder als Vorfall behandelt werden.- Check
Ein vollständiger Vergleich zwischen aktueller Festplatte und der Baseline-Datenbank. AIDE ist ein scheduled scanner - kein Real-Time-FIM wie OSSEC/Wazuh. Typisch läuft
aide --checkals systemd-Timer oder Cronjob einmal täglich.- FIM
File Integrity Monitoring. Oberbegriff für die Überwachung kritischer Systemdateien auf unerwünschte Änderungen. Bildet Teil der CIS-Benchmark-Empfehlungen (Section 6.1) und ist für PCI-DSS explizit vorgeschrieben.
- HIDS
Host-based Intrusion Detection System. AIDE gehört - neben OSSEC, Samhain und Tripwire - in diese Kategorie. Bezieht seine Informationen ausschliesslich vom eigenen Host, im Gegensatz zu NIDS (Snort, Suricata), die Netzwerkverkehr inspizieren.
- Hash-Gruppe
Eine in der
aide.confdefinierte Menge an Attributen, die bei einer Regel geprüft werden (z.B.PERMS,LOG,CONTENT_EX). Die AIDE-Standardkonfiguration liefert eine Reihe vorgefertigter Gruppen mit.
Installation und Verwendung¶
dnf --assumeyes install aide
Debian/Ubuntu:
apt-get --yes install aide aide-common
Das Kommando /usr/sbin/aide --init --before 'database_out=file:/var/lib/aide/aide.db.gz' initialisiert die Datenbank und füllt sie mit den aktuellen Hashes aller Dateien des Systems. Alternativ und konventionell:
aide --init
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
Die Systemprüfung wird mit aide --check angestossen und sollte regelmässig mit Hilfe eines Cronjobs oder systemd-Timers durchgeführt werden. Auf einem frisch installierten RHEL 8 Minimal benötigt sie knapp 20 Sekunden.
Ablauf, wenn Dateien gemeldet werden¶
Kurzform:
sudo cat /var/log/aide/aide.log
sudo aide --update
sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
sudo systemctl restart aidecheck.service
Meldet sich AIDE mit einem Fehler, dann haben sich gegenüber der Datenbank Dateien geändert, sind entfernt worden oder neu hinzugekommen. Das Vorgehen ist dann wie folgt:
Prüfung des AIDE-Logs in
/var/log/aide/aide.log. Wie das Log zu interpretieren ist, siehe weiter unten.Ursachen beheben oder Dateien und Verzeichnisse in der
/etc/aide.confvon der Prüfung ausnehmen, Attribute besser prüfen etc.aide --updateausführen, was eine neue Datenbank in/var/lib/aide/aide.db.new.gzerzeugt, die den aktuellen Systemzustand repräsentiert.Um diese zur aktiven Datenbank zu machen,
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gzausführen.systemctl restart aidecheck
aide.conf¶
Um die Konfiguration anzupassen, editiert man /etc/aide.conf und prüft mit aide --config-check auf syntaktische Korrektheit.
In der aide.conf wird zwischen Gross- und Kleinschreibung unterschieden. Führende und nachfolgende Leerzeichen werden ignoriert. AIDE verwendet den Backslash \ als Escape-Zeichen für Leerzeichen, @ und \ (Backslash) (z.B. \ `` oder ``\@). Um ein \ in einer Pfadangabe mit einem Perl-kompatiblen regulären Ausdruck zu matchen, muss der Backslash zweimal escaped werden (\\\\).
Die Konfigurationsdatei enthält
- „Configuration options“ in der Form
key = value:PERMS = p+i+u+g+acl+selinuxdefiniert eine Gruppe namens „PERMS“, die nach Änderungen in den File Permissions (p), inode (i), user ownership (u), group ownership (g), ACLs (acl) oder SELinux context (selinux) schaut.LOG = p+u+g+n+S+acl+selinux+xattrsprüft auf Änderungen in den File Permissions (p), user ownership (u), group ownership (g), link count (n), growing size (S), ACLs (acl), SELinux context (selinux) oder Extended Attributes. - „Rules“ wie
/dir1 group:Definieren, welche Regeln auf welche Verzeichnisse anzuwenden sind:/dir1wendet die Regel auf das Verzeichnis inkl. aller Unterverzeichnisse und Dateien an=/dir1nicht-rekursiv auf das Verzeichnis inkl. aller enthaltenen Dateien!/dir1und darunter wird von der Prüfung ausgenommenJeder reguläre Ausdruck muss mit einem/beginnen. Ihm wird implizit ein^vorangestellt, was heisst: Die regulären Ausdrücke matchen ab der ersten Position mit dem vollständigen Dateinamen (d.h. einschliesslich des Pfads). Sonderzeichen in Dateinamen können mit Hilfe von URL-Encoding maskiert werden (z.B.%20für ein Leerzeichen).Um eine einzelne Datei zu matchen, sollte der reguläre Ausdruck mit$enden, damit nicht auch Dateien mit demselben Anfang erfasst werden. - „Makro lines“ wie
@@define VAR value:@@{VAR}referenziert das vorherige Makro.
Das Manual hilft, das Pattern-Matching zu verstehen.
Hash-Verfahren¶
AIDE unterstützt eine Reihe von Hash-Algorithmen. In einer Regel werden sie als Teil der Attributgruppe angegeben:
Attribut |
Algorithmus |
Bemerkung |
|---|---|---|
|
MD5 |
kollisionsanfällig, nur aus historischen Gründen |
|
SHA-1 |
kollisionsanfällig, veraltet |
|
SHA-256 |
empfohlener Standard |
|
SHA-512 |
schneller auf 64-Bit, gleicher Sicherheitslevel |
|
RIPEMD-160 |
EU-Alternative |
|
Tiger |
selten gebraucht |
|
HAVAL |
selten gebraucht |
|
CRC-32 |
keine kryptografische Hash-Funktion, nur Änderungsheuristik |
|
Whirlpool |
512-Bit-Hash |
|
GOST R 34.11-94 |
russische Norm |
Für eine belastbare Integritätsprüfung reicht sha256 (oder sha512) aus. Die klassische CIS-/Tripwire-Empfehlung, mehrere unterschiedliche Hash-Familien zu kombinieren (z.B. sha256+sha512+rmd160), stammt aus der Zeit, als die Kollisionsresistenz einzelner Verfahren in Frage stand - heute eher redundant, aber nicht schädlich.
aide.log¶
Das Logging ist viel zu umfangreich. Nach einem dnf update haben sich auf einem unbenutzten RHEL-Minimal-System mit knapp 50’000 Dateien ca. 25’000 Dateien geändert. Im AIDE-Log wird berichtet, …
verbose=0: … dass Unterschiede gefunden wurden, aber nicht, welche.verbose=2: Loggt über 24’000 Zeilen.verbose=5: Loggt über 50’000 Zeilen.verbose=7: Loggt über 300’000 Zeilen.
Geänderte Dateien werden je mit einer Zeile im Log aufgelistet. Beispiel für solch eine Zeile: f = ... . .X. : /var/log/messages. Jedes Zeichen bis zum Doppelpunkt (:) hat seine Bedeutung:
YlZbpugamcinCAXS : /var/log/messages
1234567890123456 (= Position)
Y: File Type
? otherwise
B for a block device
D for a character device
d for a directory
F for a FIFO
f for a regular file
L for a symbolic link
s for a unix socket
l: link name
Z: Size Comparison
= size has not changed
< reports a shrinked size
> reports a grown size
b: block count
p: permissions
u: uid
g: gid
a: access time
m: modification time
c: change time
i: inode
n: link count
C: one or more checksums
A: access control list
X: extended attributes
S: check for growing size
".": no change
"+": attribute has been added
"-": attribute has been removed
":": attribute is listed in ignore_list
" ": attribute has not been checked
Die Log-Zeile f = ... . .X. : /var/log/messages bedeutet damit, dass von 16 möglichen Attributen 9 geprüft wurden:
Pos 01
f: Datei ist einregular filePos 03
=:sizegeprüft, aber unverändertPos 05
.:permissionsgeprüft, aber unverändertPos 06
.:uidgeprüft, aber unverändertPos 07
.:gidgeprüft, aber unverändertPos 12
.:linkcount geprüft, aber unverändertPos 14
.:access control listgeprüft, aber unverändertPos 15
X:extended attributes- geändert (!)Pos 16
.:check for growing sizegeprüft, aber unverändert
Punktangaben können also ignoriert werden. Die Leerzeichen sind keine Trenner, sondern zeigen an, dass die für die Zeichenposition zuständige Eigenschaft gar nicht geprüft wurde.
Best Practices¶
Datenbank vor Manipulation schützen: die AIDE-Datenbank liegt standardmässig unter
/var/lib/aide/aide.db.gz. Ein Angreifer mit Root-Rechten kann sie aber trivial manipulieren. Robust ist sie nur, wenn sie nach dem--initauf ein Read-Only-Medium oder off-host (z.B. auf einen Log-Server, ein zentrales Backup oder ein schreibgeschütztes Bind-Mount) kopiert wird und AIDE beim Check gegen diese Referenz prüft.Datenbank signieren: die Hashes in der Datei sind nur dann glaubwürdig, wenn die Datei selbst signiert ist. Verfügbar über
--gpg(seit 0.18) oder eine externegpg --detach-sign-Pipeline.Initial-Lauf nach jeder grösseren Änderung: ein
dnf updateoderapt upgradeerzeugt tausende Treffer. Einaide --updatedirekt im Anschluss an geplante Systemänderungen verhindert, dass echte Treffer im Rauschen untergehen.Log-Aggregation:
/var/log/aide/aide.lognach Graylog / Loki / Elasticsearch forwarden. Alarmierung aufAIDE found differences between database and filesystem!!einrichten.Konsistente Ausnahmen pflegen: Verzeichnisse wie
/var/log,/var/cache,/var/spool,/tmp,/run,/proc,/sysvon der strengen Prüfung ausnehmen (mit!oder einer minimalen Attributgruppe). Die Default-Konfigurationen von RHEL und Debian machen das bereits grösstenteils - eigene Ergänzungen in einer eigenen Datei/etc/aide.conf.d/linuxfabrik.confhalten.
Unterschiede RHEL / Debian¶
Paketname: RHEL
aide. Debian/Ubuntuaide+aide-common(enthält dasupdate-aide.conf-Hilfsskript, das aus Fragmenten in/etc/aide/aide.conf.d/eine finale Konfiguration zusammensetzt).Konfiguration: RHEL nutzt eine einzige
/etc/aide.conf. Debian verteilt die Konfiguration auf/etc/aide/aide.confplus Fragmente in/etc/aide/aide.conf.d/.Systemd-Timer: RHEL liefert
aidecheck.service+aidecheck.timermit. Debian legt einen cron-basierten Job unter/etc/cron.daily/aideab; systemd-Timer müssen bei Bedarf selbst angelegt werden.SELinux-Kontext: RHEL überwacht standardmässig das SELinux-Label (
selinuxin der Attributgruppe). Unter Debian mit AppArmor ist dieser Teil irrelevant; stattdessen lassen sich AppArmor-Profile selbst zur Prüfung heranziehen.
CIS-Benchmark¶
Der CIS-Benchmark für RHEL 10 verlangt in Section 6.1 die Installation und tägliche Ausführung von AIDE (oder eines gleichwertigen FIM-Tools). Konkret:
aideinstalliert und initialisiert.Die AIDE-Datenbank liegt ausserhalb des überwachten Bereichs - idealerweise auf einem entfernten, schreibgeschützten Speicher.
aide --checkläuft mindestens täglich, Ausgabe wird an einen privilegierten User oder an ein zentrales SIEM ausgeleitet.Audit-Logs (
auditd), SELinux-Policy und AIDE-Datenbank selbst stehen unter Überwachung.
Siehe dazu auch den auditd-Artikel für den passenden Regelsatz auf Kernel-Event-Ebene.