Dies ist eine alte Version des Dokuments!
Host based Intrusion Detection System mit AIDE unter Arch
HIDS - was ist das und wozu nutzt man es?
Die Absicherung von Systemen ist eine der Grund- und Pflichtaufgaben eines jeden verantwortungsbewussten Systemadministrators und Administratorin. Dass dies ist kein einmaliger sondern stetig sich wiederholende Vorgang ist, versteht sich in aller Regel von selbst, so ist es unter anderem wichtig, dass regelmässig Systemüberprüfungen und Überwachung von Logmeldungen auf verdächtige und ungewöhnliche Ereignisse durchgeführt werden müssen. Zur Absicherung von Computersystem existieren unterschiedliche Ansätze. TLS-Transportverschlüsselung, SecureShell, oder Firewalls wird hier jedem interessierten Admin sofort in den Sinn kommen. Dabei gibt es zwei unterschiedliche Betrachungsweisen/-richtungen bei den einzelnen Lösungen. Betrachtet und analysiert man in erster Linie Netzwerkverkehr in Netzwerken und/oder Zonengrenzen einzelner Netzwerke und bewertet hierzu entsprechende Protokolle von Netzwerkgeräten wie Switche, Router und Firewalls spricht man von einem NIDS, einem Netzwerk based Intrusion Detection System. Im Gegensatz dazu spricht man von einem HIDS Host based Intrusion Detection System, wenn der Blick primär auf einem Host selbst erfolgt und man mit Hilfe lokaler Informationen Bewertungen über zulässige Änderungen am betreffenden System selbst Entscheidungen über (un)zulässige Änderungen treffen muss und möchte. Ein HIDS konzentriert sich dabei auf detailliertere und interne Angriffe, indem es die Überwachung auf Host-Aktivitäten konzentriert. Dabei versucht ein HIDS wie AIDE lediglich, Systemanomalien und somit Eindringlinge zu erkennen und hat nicht zur Aufgabe aktiv mögliche Angreifer und Bedrohungen zu blockieren! Ein Intrusion Detection System (wie AIDE) versucht lediglich, Eindringlinge zu erkennen, arbeitet aber nicht aktiv daran, ihren Zugang von vornherein zu blockieren. Im Gegensatz dazu arbeitet ein IPS ein Intrusion Prevention System aktiv daran, Bedrohungen zu blockieren und den Benutzerzugriff zu überprüfen.
Weiterführende Informationen rund um Intrusion-Detection-Systeme findet man im BSI-Leitfaden zur Einführung von Intrusion-Detection-Systemen bzz im Orientation Guide to Using Intrusion Detection Systems (IDS).
Eine der Herausforderungen bei der Verwendung von HIDS besteht darin, dass es auf jedem einzelnen Host installiert, konfiguriert und entsprechende Berichte bzw. Logdateien dann auch bewertet werden muss, der vor Eindringlingen geschützt werden soll. Dies kann je nach zur Verfügung stehender Ressourcen zu einer Verlangsamung der Leistung des Hosts und eines eingesetzten HIDS führen. Wir werden uns später daher die Installation und Konfiguration mit Hilfe von Ansible vornehmen. Zur Auswertung der Logmeldungen greifen wir in unserer Umgebung auf graylog zurück.
AIDE
AIDE (Advanced Intrusion Detection Environment) ist ein HIDS, ein Programm zur Erkennung von Eindringlingen, indem es die Integrität von Verzeichnissen und Dateien überwacht.
Hierzu erstellt AIDE auf Basis seiner Konfiguration bei der Erstinitialisierung oder bewusst nach Änderungen am System durch einen entsprechenden Programmaufruf, eine Datenbank des aktuellen Systems. In dieser AIDE-Datenbank werden verschiedene Verzeichnis- und Dateiattribute gespeichert, darunter:
- Berechtigungen
- Inode-Nummern
- Benutzer
- Gruppen
- Dateigrössen
- mtime
- ctime
- atime
- wachsende Grösse
- Anzahl von Links
- Linknamen
AIDE erstellt ausserdem eine kryptografische Prüfsumme oder einen Hash jeder Datei unter Verwendung eines oder einer Kombination der folgenden Message-Digest-Algorithmen:
- sha1
- sha256
- sha512
- md5
- rmd160
- tiger
- gost und whirlpool können kompiliert werden, sofern mhash-Unterstützung verfügbar ist.
Darüber hinaus können die erweiterten Attribute verwendet werden, sofern sie während der Kompilierung explizit aktiviert werden:
- acl
- xattr
- selinux
Wichtig
AIDE führt auf dem System selbst nur Dateiintegritätsprüfungen durch! Es sucht nicht nach rootkits oder analysiert Protokolldateien auf verdächtige Aktivitäten!
AIDE ist ein Fork des bekannten HIDS Tripwire welches ursprünglich von Rami Lehti und Pablo Virolainen 1999 als freie Alternative zum kommerziellen Produkt Tripwire entwickelt wurde. Zwischen 2003 und 2010 wurde es von Richard van den Berg betreut. Seit Oktober 2010 übernahm Hannes von Haugwitz das Projekt. Die Homepage von AIDE ist hier zu finden. Die aktuelle Version von AIDE wird derzeit auf GitHub verwaltet.
In aller Regel wird ein Admin, nachdem ein neuer Host erstellt wurde, initial eine AIDE-Datenbank auf dem neuen System erstellen, bestenfalls bevor der neue Host produktiv mit dem Netzwerk verbunden wird. Diese initiale AIDE-Datenbank ist eine Momentaufnahme des Systems in seinem Normalzustand und ist der Massstab, an dem alle nachfolgenden Aktualisierungen und Änderungen gemessen werden. Diese Datenbank sollte Informationen über die wichtigsten Systembinärdateien, Bibliotheken, Header-Dateien und alle Verzeichnisse sowie Dateien enthalten, die im Laufe der Zeit unverändert bleiben sollten. Dateien, welche sich häufig ändern, wie z.B. Log- und Protokolldateien Mail-Spools, proc-Dateisysteme, Home-Verzeichnisse von Benutzern oder temporäre Verzeichnisse, nimmt man in aller Regel nicht in die AIDE-Datenbank auf, das sonst später die Meldungen unnötig durch viele unerwünschte und erwartbare Meldungen überflutet werden würde.
Durch erneutes Ausführen von AIDE zur Systemüberprüfung kann ein Systemadministrator Änderungen an systemrelevanten Verzeichnissen und Dateien schnell erkennen und sich ziemlich sicher sein, dass die protokollierten Ergebnisse korrekt sind.
ACHTUNG:
Ein Admin muss sich aber auch im Klaren sein, dass auch mit AIDE keine absulute Sicherheit gewährleistet werden kann, denn wie alle anderen Systemdateien können auch die Binär- und/oder Datenbankdateien von AIDE komprommitiert werden können!
Ebenso ist vor allem in orchestrierten Umgebungen (Puppet) darauf zu achten, dass nicht etwa ein gerade initiierter Datenbank-Update durch einen Puppet-Agent Lauf abgebrochen wird. So stünde im Extremfall keine aktuelle und valide Datenbank für spätere Systemchecks zur Verfügung, was zu unzähligen false-positive Meldungen führen würde. Die Reputation des HIDS bei den Administratoren wäre in einem solch einem Fall dahin und der erhoffte bzw. geforderte Erfolg mehr als fraglich!
Installation
AIDE kann unter Arch Linux nicht einfach aus dem Core- oder Extras-Repository mit Hilfe des Paketverwaltungswerkzeugs pacman
installiert werden. Jedoch gibt es aus dem Arch User Repository kurz AUR, dem Community verwaltetes Repository für Benutzer von Arch Linux, eine Paketbeschreibungen (PKGBUILDs
), mit denen Sie ein Paket aus dem Quellcode mit makepkg
kompilieren und dann über pacman
installieren kann. Möchte man auf den entsprechenden Zielsystemen die hierzu nötigen Kompilierungswerkzeuge nicht vorhalten, so kann man das Paket auch auf einem entsprechenden geschützten Buildhost erstellen und dann lokal, auf dem entsprechendem Zielsystem mit Hilfe von pacman
installieren!
Da bei der Installation bzw. beim Kompilieren die Integrität des Quell-Archives an Hand dessen PGP-Signatur geprüft wird, ist es notwendig dass der PGP-Schlüssel mit der Key-ID F6947DAB68E7B931
von Hannes von Haugwitz in unserem Keyring vorhanden ist. Hierzu importieren wir zuerst den betreffenden Public-Key von Hannes:
$ gpg --recv-key 18EE86386022EF57
gpg: key F6947DAB68E7B931: public key "Hannes von Haugwitz <hannes@vonhaugwitz.com>" imported gpg: Total number processed: 1 gpg: imported: 1
Mit Hilfe von $ gpg --list-keys
können wir uns bei Bedarf vergewissern, ob der Schlüssel von Hannes vorliegt:
$ gpg --list-keys
... pub rsa4096 2011-06-28 [C] [expires: 2026-06-27] 2BBBD30FAAB29B3253BCFBA6F6947DAB68E7B931 uid [ unknown] Hannes von Haugwitz <hannes@vonhaugwitz.com> uid [ unknown] Hannes von Haugwitz <hvhaugwitz@debian.org> sub rsa3072 2011-06-28 [E] [expires: 2025-06-27] sub rsa3072 2011-06-28 [A] [expires: 2025-06-27] sub rsa3072 2011-06-28 [S] [expires: 2025-06-27]
Installation von AIDE mit Hilfe von Pikaur
Darf man aus Sicherheitsgründen auf allen Zielsystemen keine Kompilierwerkzeuge vorhalten, so holt man sich das vom eigenen Maintainer erstellen Paketes vom eigenen internen Repo-Server und installiert das Paket mit Hilfe von
pacman
lokal wie folgt:
Lokale Installation von AIDE mit Hilfe von Pacman
Bevor das Programm AIDE gestartet werden kann muss es allerdings konfiguriert werden!
Dokumentation
Die Dokumentation von AIDE findet man in der Datei README im Git Repository.
Paketinfo
Was uns das Paket alles ins System gebracht hat finden wir am einfachsten mit Hilfe von pacman -Qil
heraus.
Programminfo
Bei Bedarf können wir uns alle Optionen mit denen das AIDE-Binary gebaut wurde zusammen mit den Default Konfigurationsparametern, den verfügbaren einkompilierten Attributen, den verfügbaren Hass-Attributen sowie den defaultmässigen Compound Groups uns anzeigen lassen.
Manpages
Konfiguration
Die Konfiguration wird über die Dateien /etc/aide/aide.conf
vorgenommen. Um später Änderungen und Neuerungen bei Paketupdates besser verfolgen zu können kopieren wir uns als erstes die mitgelieferte Konfigurationsdatei aide.conf
.
# cp -av /etc/aide/aide.conf /etc/aide/aide.conf.orig
So können wir später leichter Änderungen mit Hilfe von vimdiff
vergleichen!
Anpassungen und Änderungen an der Konfiguration nehmen mit mit dem Editor unserer Wahl , wie z.B. vim
vor.
# sudo vim /etc/aide/aide.conf
- /etc/aide/aide.conf
# Example configuration file for AIDE. # More information about configuration options available in the aide.conf manpage. # Inspired from https://src.fedoraproject.org/rpms/aide/raw/rawhide/f/aide.conf # ┌───────────────────────────────────────────────────────────────┐ # │ CONTENTS OF aide.conf │ # ├───────────────────────────────────────────────────────────────┘ # │ # ├──┐VARIABLES # │ ├── DATABASE # │ └── REPORT # ├──┐RULES # │ ├── LIST OF ATTRIBUTES # │ ├── LIST OF CHECKSUMS # │ └── AVAILABLE RULES # ├──┐PATHS # │ ├──┐EXCLUDED # │ │ ├── ETC # │ │ ├── USR # │ │ └── VAR # │ └──┐INCLUDED # │ ├── ETC # │ ├── USR # │ ├── VAR # │ └── OTHERS # │ # └─────────────────────────────────────────────────────────────── # ################################################################ VARIABLES # ################################ DATABASE @@define DBDIR /var/lib/aide @@define LOGDIR /var/log/aide # The location of the database to be read. database_in=file:@@{DBDIR}/aide.db.gz # The location of the database to be written. #database_out=sql:host:port:database:login_name:passwd:table #database_out=file:aide.db.new database_out=file:@@{DBDIR}/aide.db.new.gz # Whether to gzip the output to database gzip_dbout=yes # ################################ REPORT # Default. log_level=warning report_level=changed_attributes report_url=file:@@{LOGDIR}/aide.log report_url=stdout #report_url=stderr #NOT IMPLEMENTED report_url=mailto:root@foo.com #NOT IMPLEMENTED report_url=syslog:LOG_AUTH # ################################################################ RULES # ################################ LIST OF ATTRIBUTES # These are the default parameters we can check against. #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 #acl: Access Control Lists #selinux SELinux security context (must be enabled at compilation time) #xattrs: Extended file attributes # ################################ LIST OF CHECKSUMS #md5: md5 checksum #sha1: sha1 checksum #sha256: sha256 checksum #sha512: sha512 checksum #rmd160: rmd160 checksum #tiger: tiger checksum #haval: haval checksum (MHASH only) #gost: gost checksum (MHASH only) #crc32: crc32 checksum (MHASH only) #whirlpool: whirlpool checksum (MHASH only) # ################################ AVAILABLE RULES # These are the default rules #R: p+i+l+n+u+g+s+m+c+md5 #L: p+i+l+n+u+g #E: Empty group #>: Growing logfile p+l+u+g+i+n+S # You can create custom rules - my home made rule definition goes like this ALLXTRAHASHES = sha1+rmd160+sha256+sha512+whirlpool+tiger+haval+gost+crc32 ALLXTRAHASHES = sha1+rmd160+sha256+sha512+tiger # Everything but access time (Ie. all changes) EVERYTHING = R+ALLXTRAHASHES # Sane, with multiple hashes # NORMAL = R+rmd160+sha256+whirlpool # NORMAL = R+sha256+sha512 NORMAL = p+i+l+n+u+g+s+m+c+sha256 # For directories, don't bother doing hashes DIR = p+i+n+u+g+acl+xattrs # Access control only PERMS = p+i+u+g+acl # Logfile are special, in that they often change LOG = > # Just do sha256 and sha512 hashes FIPSR = p+i+n+u+g+s+m+c+acl+xattrs+sha256 LSPP = FIPSR+sha512 # Some files get updated automatically, so the inode/ctime/mtime change # but we want to know when the data inside them changes DATAONLY = p+n+u+g+s+acl+xattrs+sha256 # ################################################################ PATHS # Next decide what directories/files you want in the database. # ################################ EXCLUDED # ################ ETC # Ignore backup files !/etc/.*~ # Ignore mtab !/etc/mtab # ################ USR # These are too volatile !/usr/src !/usr/tmp # ################ VAR # Ignore logs !/var/lib/pacman/.* !/var/cache/.* !/var/log/.* !/var/log/aide.log !/var/run/.* !/var/spool/.* # ################################ INCLUDED # ################ ETC # Check only permissions, inode, user and group for /etc, but cover some important files closely. /etc PERMS /etc/aliases FIPSR /etc/at.allow FIPSR /etc/at.deny FIPSR /etc/audit/ FIPSR /etc/bash_completion.d/ NORMAL /etc/bashrc NORMAL /etc/cron.allow FIPSR /etc/cron.daily/ FIPSR /etc/cron.deny FIPSR /etc/cron.d/ FIPSR /etc/cron.hourly/ FIPSR /etc/cron.monthly/ FIPSR /etc/crontab FIPSR /etc/cron.weekly/ FIPSR /etc/cups FIPSR /etc/exports NORMAL /etc/fstab NORMAL /etc/group NORMAL /etc/grub/ FIPSR /etc/gshadow NORMAL /etc/hosts.allow NORMAL /etc/hosts.deny NORMAL /etc/hosts FIPSR /etc/inittab FIPSR /etc/issue FIPSR /etc/issue.net FIPSR /etc/ld.so.conf FIPSR /etc/libaudit.conf FIPSR /etc/localtime FIPSR /etc/login.defs FIPSR /etc/login.defs NORMAL /etc/logrotate.d NORMAL /etc/modprobe.conf FIPSR /etc/nscd.conf NORMAL /etc/pam.d FIPSR /etc/passwd NORMAL /etc/postfix FIPSR /etc/profile.d/ NORMAL /etc/profile NORMAL /etc/rc.d FIPSR /etc/resolv.conf DATAONLY /etc/securetty FIPSR /etc/securetty NORMAL /etc/security FIPSR /etc/security/opasswd NORMAL /etc/shadow NORMAL /etc/skel NORMAL /etc/ssh/ssh_config FIPSR /etc/ssh/sshd_config FIPSR /etc/stunnel FIPSR /etc/sudoers NORMAL /etc/sysconfig FIPSR /etc/sysctl.conf FIPSR /etc/vsftpd.ftpusers FIPSR /etc/vsftpd FIPSR /etc/X11/ NORMAL /etc/zlogin NORMAL /etc/zlogout NORMAL /etc/zprofile NORMAL /etc/zshrc NORMAL # ################ USR /usr NORMAL /usr/sbin/stunnel FIPSR # ################ VAR /var/log/faillog FIPSR /var/log/lastlog FIPSR /var/spool/at FIPSR /var/spool/cron/root FIPSR # ################ OTHERS /boot NORMAL /bin NORMAL /lib NORMAL /lib64 NORMAL /opt NORMAL /root NORMAL
Wie eigentlich immer bei der Konfiguration von neuen Programmen lohnt es sich die zugehörige Konfigurationsdatei - in unserem Falle von AIDE die /etc/aide.conf
einmal komplett zu lesen! So erhält man einen Überblick welche Einstellungsoptionen uns AIDE grundsätzlich bietet.
- Die ersten Einstellungen die man sich überlegen sollte, wären wo die Datenbanken erstellt und vorgehalten werden sollen und ob diese gepackt werden sollen.
- Anschließend sollte man sich Gedanken machen, welche Hashingalgorithmen verwendet werden sollen. In den Standardeinstellungen bildet AIDE sieben verschiedene Checksummen für jede überwachte Datei. Zu beachten ist hierbei ggf. ob der bei der Erzeugung der Hash-Werte benötige Rechenaufwand gerechtfertigt ist, oder ob man auf einige davon aus Performancegründen besser verzichtet! In der Regel solten eigentlich zwei verschiedene Hash-Werte Pro Datei ausreichen.
- Ferner kann über Regelsätze definiert werden welche Eigenschaften (Parameter) von Verzeichnissen und/oder Dateien überwacht werden sollen. Hier können entsprechende Vorgaben in der Default-Konfigurationsdatei übernommen bzw. auch ganz eigene individiuelle Rule-Sets definiert werden. Folgende Parameter können dabei bei der Bewertung und Überwachung herangezogen werden:
- p: Überprüfen Sie die Dateiberechtigungen der ausgewählten Dateien oder Verzeichnisse.
- i: Überprüfen Sie die Inode-Nummer. Jeder Dateiname hat eine eindeutige Inode-Nummer, die sich nicht ändern sollte.
- n: Überprüfen Sie die Anzahl der Links, die auf die betreffende Datei verweisen.
- u: Überprüfen Sie, ob sich der Eigentümer der Datei geändert hat.
- g: Überprüfen Sie, ob sich die Gruppe der Datei geändert hat.
- s: Überprüfen Sie, ob sich die Dateigröße geändert hat.
- b: Prüfen, ob sich die von der Datei verwendete Blockanzahl geändert hat.
- m: Prüfen, ob sich das Änderungsdatum der Datei geändert hat.
- c: Prüfen, ob sich die Zugriffszeit der Datei geändert hat.
- S: Auf eine geänderte Dateigröße prüfen.
- I: Änderungen des Dateinamens ignorieren.
Folgende Hash-Werte können bei der berechnung der Prüfsummen verwendet werden: - md5: md5 Prüfsumme (Die Verwendung von sha256 oder sha512 ist hier empfohlen.)
- sha1: sha1 Prüfsumme (Die Verwendung von sha256 oder sha512 ist hier empfohlen.)
- sha256: sha256 Prüfsumme
- sha512: sha512 Prüfsumme
- rmd160: rmd160 Prüfsumme
- tiger: tiger Prüfsumme
- haval: haval Prüfsumme (MHASH only)
- gost: gost Prüfsumme (MHASH only)
- crc32: crc32 Prüfsumme (MHASH only)
- whirlpool: whirlpool Prüfsumme (MHASH only)
- Zum Schluß muss man sich noch Gedanken machen welche Dateien und Verzeichniss ggf. ausgenommen werden sollen und welche Dateien und Verzeichnisse man in welcher Tiefe überwachen möchte. Die manpage zu
aide.conf
liefert hierzu wertvolle und tiefergehende Informationen!
Ist man mit der Konfiguration von AIDE soweit zufrieden und fertig, ist man gut beraten mit Hilfe der Option --config-check
oder kurz -D
einen Syntax-Check der Konfigurationsdatei vorzunehmen.
# aide --config-check
!