14.3. Überwachung: Vorbeugung, Entdeckung, Abschreckung
Monitoring ist aus mehreren Gründen ein integraler Bestandteil jeder Sicherheitsrichtlinie. Unter anderem deshalb, weil das Ziel der Absicherung gewöhnlich nicht darauf beschränkt ist, die Vertraulichkeit der Daten sicherzustellen, sondern auch vorsieht, dass die Verfügbarkeit der Dienste gewährleistet ist. Es ist daher unerlässlich, zu überprüfen, ob alles wie vorgesehen funktioniert und rechtzeitig jedes abweichende Verhalten und jede Änderung in der Qualität der erbrachten Leistungen zu erkennen. Monitoring hilft dabei Einbruchsversuche zu entdecken und darauf schnell zu reagieren, bevor sie ernste Folgen haben. Dieser Abschnitt gibt einen Überblick über einige Hilfsprogramme, die zur Überwachung verschiedener Aspekte eines Debian-Systems eingesetzt werden können. Damit vervollständigt er
Abschnitt 12.4, „Überwachung“.
14.3.1. Protokolle mit logcheck
verfolgen
Das Programm logcheck
überwacht Protokolldateien standardmäßig jede Stunde. Es schickt E-Mails mit ungewöhnlichen Protokollmeldungen zur weiteren Analyse an den Administrator.
The list of monitored files is stored in /etc/logcheck/logcheck.logfiles
and /etc/logcheck/logcheck.logfiles.d/
; the default values work fine with systemd and rsyslog if their configuration files have not been completely overhauled.
logcheck
kann in drei mehr oder weniger detaillierten Modi laufen: Paranoid, Server und Arbeitsplatzrechner. Der erste ist sehr ausführlich und sollte wohl eher auf besondere Server, wie zum Beispiel Firewalls, beschränkt bleiben. Der zweite (voreingestellte) Modus wird für die meisten Server empfohlen. Der letzte ist für Arbeitsplatzrechner bestimmt und ist noch knapper (er unterdrückt mehr Meldungen).
In allen drei Fällen sollte logcheck
wohl so angepasst werden, dass es einige zusätzliche Meldungen ausschließt (in Abhängigkeit von den installierten Diensten), es sei denn, dass der Administrator tatsächlich jede Stunde stapelweise lange uninteressante E-Mails empfangen möchte. Da das Verfahren zur Auswahl der Meldungen recht kompliziert ist, ist es notwendig - wenn auch schwierig - die Datei /usr/share/doc/logcheck-database/README.logcheck-database.gz
durchzulesen.
Die eingesetzten Regeln können in mehrere Arten unterteilt werden:
solche, die eine Meldung als einen Einbruchsversuch einstufen (in einer Datei im Verzeichnis /etc/logcheck/cracking.d/
gespeichert);
solche, die eine derartige Einstufung aufheben (/etc/logcheck/cracking.ignore.d/
);
solche, die eine Meldung als Sicherheitswarnung einordnen (/etc/logcheck/violations.d/
);
solche, die diese Einordnung aufheben (/etc/logcheck/violations.ignore.d/
);
und schließlich solche, die auf die übrigen Meldungen zutreffen (als sogenannte Systemvorfälle angesehen werden).
Ein Systemvorfall wird immer angezeigt, es sei denn, eine Regel in einem der Verzeichnisse des Typs /etc/logcheck/ignore.d.{paranoid,server,arbeitsplatzrechner}/
bestimmt, dass der Vorfall ignoriert werden soll. Es werden natürlich nur die Verzeichnisse berücksichtigt, deren Ausführlichkeitsgrad gleich dem oder höher als der ausgewählte Betriebsmodus ist.
14.3.2. Aktivitäten überwachen
top
ist ein interaktives Hilfsprogramm, das eine Liste der gegenwärtig laufenden Prozesse anzeigt. Die voreingestellte Reihenfolge hängt vom momentanen Umfang der Prozessornutzung ab und kann mithilfe der P-Taste abgerufen werden. Andere Sortierreihenfolgen sind unter anderem nach belegtem Speicher (M-Taste), nach gesamter Prozessorzeit (T-Taste) und nach Prozesskennung (N-Taste). Mit der k-Taste kann ein Prozess abgebrochen werden, indem seine Kennung eingegeben wird. Die r-Taste ermöglicht das renicing eines Prozesses, das heißt, die Änderung seiner Priorität.
Wenn das System überlastet zu sein scheint, ist top
ein großartiges Instrument, um zu sehen, welche Prozesse um die Prozessorzeit konkurrieren oder zu viel Speicher verbrauchen. Insbesondere ist es häufig interessant zu überprüfen, ob die Prozesse, die Ressourcen verbrauchen, den tatsächlichen Diensten entsprechen, die der Rechner bekanntermaßen beherbergt. Ein unbekannter Prozess, der unter dem Benutzernamen www-data läuft, sollte wirklich hervorstechen und kann untersucht werden, da er möglicherweise ein Programm ist, das durch eine Schwachstelle in einer Web-Anwendung auf dem System installiert wurde und ausgeführt wird.
top
ist ein sehr flexibles Hilfsprogramm und seine Handbuchseite beschreibt ausführlich, wie seine Anzeige individuell eingerichtet und an persönliche Bedürfnisse und Gewohnheiten angepasst werden kann.
The gnome-system-monitor
graphical tool is similar to top
and it provides roughly the same features. Alternatives are atop
and htop
, which provide similar functionality, but differ in usability features, like the scrolling ability.
Processor load, memory usage, network traffic and free disk space are information that are constantly varying. Keeping a history of their evolution is often useful in determining exactly how the computer is used.
There are many dedicated tools for this task. The sysstat package, for example, collects and displays system performance statistics locally. The data can then be visualized with the sar
command. Most tools, though, can fetch data via SNMP (Simple Network Management Protocol) in order to centralize this information. An added benefit is that this allows fetching data from network elements that may not be general-purpose computers, such as dedicated network routers or switches.
Dieses Buch behandelt Munin ausführlich als Teil von
Kapitel 12: „Erweiterte Verwaltung“ (siehe
Abschnitt 12.4.1, „Munin einrichten“). Debian stellt ebenfalls ein ähnliches Hilfsprogramm bereit:
cacti. Sein Einsatz ist etwas komplizierter, da es ausschließlich auf SNMP beruht. Obwohl es eine Web-Schnittstelle hat, benötigen das Verständnis der Konzepte, die für die Konfigurierung verwendet werden, noch einige Anstrengungen. Die Lektüre der HTML-Dokumentation (
/usr/share/doc/cacti/html/Table-of-Contents.html
) ist daher als Voraussetzung anzusehen.
14.3.3. Eindringen vermeiden
Attackers try to get access to servers by guessing passwords, which is why strong passwords must always be used. Even then, you should also establish measures against brute-force attacks. A brute-force attack is an attempt to log into an unauthorized software system by performing multiple login attempts in a short period of time.
The best way to stop a brute-force attack is to limit the number of login attempts coming from the same origin, usually by temporarily banning an IP address.
Fail2Ban is an intrusion prevention software suite that can be configured to monitor any service that writes login attempts to a log file or the system journal. It can be found in the package fail2ban.
Fail2Ban is configured through a simple protocol by fail2ban-client
, which also reads configuration files and issues corresponding configuration commands to the server, fail2ban-server
. It has four configuration file types, all stored in /etc/fail2ban/
:
fail2ban.conf
and fail2ban.d/*.conf
. Global configuration (such as logging).
filter.d/*.conf
. Filter, die angeben, wie Authentifizierungsfehler erkannt werden können. Das Debian-Paket enthält bereits Filter für viele gängige Programme.
action.d/*.conf
. Actions defining the commands for banning and “unbanning“ of IP addresses.
jail.conf
and jail.d/*.conf
. It is where jails, the combinations of filters and actions, are defined.
Werfen wir einen Blick auf die Konfiguration von sshd
in /etc/fail2ban/jail.conf
, um besser zu verstehen, wie Fail2Ban funktioniert...
[...]
[DEFAULT]
[...]
bantime = 1h
[...]
findtime = 10m
[...]
maxretry = 5
[...]
[sshd]
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Fail2Ban will check for failed login attempts for sshd
using Python regular expressions defined in /etc/fail2ban/filter.d/sshd.conf
against the log file of sshd
, which is defined in the variable sshd_log
in the file /etc/fail2ban/paths-common.conf
. If Fail2Ban detects five failed login attempts within 10 minutes, it will ban the IP address where those attempts originated for 1 hour.
The default backend
used now is systemd
. The old log files, like auth.log
are only available if rsyslog has been installed and enabled.
To enable, disable, or configure “jails“, the main configuration file /etc/fail2ban/jail.conf
is not supposed to be altered. Instead this is supposed to be done in /etc/fail2ban/jail.d/defaults-debian.conf
or files within the same directory.
If docker containers are involved, the rules injected into iptables
by fail2ban
to block traffic from specific IPs must be applied to the right chain by chain = DOCKER-USER
. Otherwise, the ban will not work.
Fail2Ban ist ein sehr einfacher und effektiver Weg, um sich gegen die häufigsten Brute-Force-Angriffe zu schützen, aber es kann nicht vor verteilten Brute-Force-Angriffen schützen, d.h. wenn ein Angreifer eine große Anzahl von Rechnern nutzt, die über das Internet verteilt sind.
A good way to provide extra protection against distributed brute force attacks is to artificially increase the login time after each failed attempt. It is also possible to increase the block time with each ban for the same IP.
14.3.4. Änderungen erkennen
Sobald das System installiert und konfiguriert ist, gibt es, abgesehen von Sicherheitsupgrades, für die meisten Dateien und Verzeichnisse in der Regel keinen Grund mehr, sich weiterzuentwickeln, Daten ausgenommen. Es ist daher interessant, sich zu vergewissern, dass sich die Dateien tatsächlich nicht ändern: Jede unerwartete Änderung wäre daher eine Untersuchung wert. In diesem Abschnitt werden einige Werkzeuge vorgestellt, die in der Lage sind, Dateien zu überwachen und den Administrator zu warnen, wenn eine unerwartete Änderung eintritt (oder einfach, um solche Änderungen aufzulisten).
14.3.4.1. Pakete mit logcheck
prüfen
dpkg --verify
(or dpkg -V
) is an interesting tool since it allows finding what installed files have been modified (potentially by an attacker), but this should be taken with a grain of salt. To do its job it relies on checksums stored in dpkg's own database which is stored on the hard disk (they can be found in /var/lib/dpkg/info/package.md5sums
); a thorough attacker will therefore update these files so they contain the new checksums for the subverted files. The same is true for debsums
.
Das Ausführen von dpkg -V
überprüft alle installierten Pakete und gibt eine Zeile pro Datei mit fehlgeschlagenem Test aus. Das Ausgabeformat ist das gleiche wie das von rpm -V
, wobei jedes Zeichen einem Test auf bestimmte Metadaten entspricht. Leider speichert dpkg
die für die meisten Tests benötigten Metadaten nicht und gibt daher Fragezeichen aus. Derzeit kann nur der Prüfsummentest eine "5" für das dritte Zeichen ergeben (wenn er fehlschlägt).
#
dpkg -V
??5?????? c /etc/logcheck/logcheck.logfiles.d/syslog.logfiles
??5?????? c /etc/logrotate.d/apt
??5?????? /lib/systemd/system/ssh.service
??5?????? c /etc/systemd/journald.conf
??5?????? c /etc/lvm/lvm.conf
In the sample above, dpkg reports a change to SSH's service file that the administrator made to the packaged file instead of using an appropriate /etc/systemd/system/ssh.service.d/override.conf
override (which would be stored below /etc
like any configuration change should be). It also lists multiple configuration files (identified by the "c" letter on the second field) that had been legitimately modified.
14.3.4.2. Pakete auditieren: debsums
und seine Grenzen
debsums
is the ancestor of dpkg -V
and is thus mostly obsolete. It suffers from the same limitations than dpkg. Fortunately, some of the limitations can be worked-around (whereas dpkg does not offer similar workarounds).
Weil man den Daten auf der Festplatte nicht trauen kann, ermöglicht debsums
Prüfungen basierend auf .deb
Dateien anstatt sich auf die dpkg Datenbank zu verlassen. Um gesicherte .deb
Dateien für alle installierten Pakete herunterzuladen können wir uns auf die von APT beglaubigten Downloads verlassen. Diese Aktion kann sehr langsam und langwierig sein und sollte daher als proaktive Technik in Betracht gezogen werden und nicht regelmäßig verwendet werden.
#
apt-get --reinstall -d install `grep-status -e 'Status: install ok installed' -n -s Package`
[ ... ]
#
debsums -p /var/cache/apt/archives --generate=all
Man beachte, dass in diesem Beispiel der Befehl grep-status
aus dem Paket grep-dctrl verwendet wird, das nicht standardmäßig installiert ist.
debsums
can be run frequently as a cronjob setting CRON_CHECK
in /etc/default/debsums
. To ignore certain files outside the /etc
directory, which have been altered on purpose or which are expected to change (like /usr/share/misc/pci.ids
) you can add them to /etc/debsums-ignore
.
14.3.4.3. Dateien überwachen: AIDE
Das Hilfsprogramm AIDE (Advanced Intrusion Detection Environment) ermöglicht es, die Unversehrtheit von Dateien zu überprüfen und jede Veränderung durch einen Vergleich mit einem zuvor festgehaltenen Abbild des intakten Systems zu entdecken. Dieses Abbild ist als Datenbank (/var/lib/aide/aide.db
) abgespeichert, die relevante Informationen über alle Dateien des Systems enthält (Fingerabdrücke, Berechtigungen, Zeitstempel und so weiter). Diese Datenbank wird erstmals mit dem Befehl aideinit
initialisiert; sie wird dann täglich (mit dem Skript /etc/cron.daily/aide
) genutzt, um nachzuprüfen, dass sich nichts Relevantes verändert hat. Wenn Veränderungen entdeckt werden, hält AIDE diese in Protokolldateien fest (/var/log/aide/*.log
) und sendet seine Befunde per E-Mail an den Administrator.
Viele Optionen in /etc/default/aide
können dazu verwendet werden, das Verhalten des Pakets aide zu justieren. AIDEs eigentliche Konfiguration ist in /etc/aide/aide.conf
und /etc/aide/aide.conf.d/
gespeichert (diese Dateien werden genau genommen nur von update-aide.conf
dazu benutzt, die Datei /var/lib/aide/aide.conf.autogenerated
zu erstellen). Die Konfiguration gibt an, welche Eigenschaften welcher Dateien überprüft werden sollen. Der Inhalt von Protokolldateien verändert sich zum Beispiel regelmäßig und derartige Veränderungen können ignoriert werden, solange die Berechtigungen dieser Dateien die gleichen bleiben. Aber sowohl der Inhalt als auch die Berechtigungen von ausführbaren Dateien müssen unverändert bleiben. Obwohl die Konfigurationssyntax nicht sehr komplex ist, ist sie nicht völlig intuitiv. Daher wird empfohlen, die Handbuchseite aide.conf(5) zu lesen.
Eine neue Version der Datenbank wird täglich in /var/lib/aide/aide.db.new
erstellt; falls alle aufgenommenen Veränderungen legitim waren, kann sie als Ersatz für die Referenzdatenbank verwendet werden.
14.3.5. Eindringen entdecken (IDS/NIDS)
suricata
(in the Debian package of the same name) is a NIDS — a
Network Intrusion Detection System. Its function is to listen to the network and try to detect infiltration attempts and/or hostile acts (including denial of service attacks). All these events are logged in multiple files in
/var/log/suricata
. There are third party tools (Kibana/logstash) to better browse all the data collected. The tool can be considered the successor of
snort
, which has been removed from Debian.
Configuring suricata involves reviewing and editing /etc/suricata/suricata.yaml
, which is very long because each parameter is abundantly commented. A minimal configuration requires describing the range of addresses that the local network covers (HOME_NET
parameter). In practice, this means the set of all potential attack targets. But getting the most of it requires reading it in full and adapting it to the local situation.
On top of this, you should also edit to define the network interface
. You might also want to set LISTENMODE=pcap
in /etc/default/suricata
because the default LISTENMODE=nfqueue
requires further configuration to work properly (the netfilter firewall must be configured to pass packets to some user-space queue handled by suricata via the NFQUEUE
target).
Suricata
muss einen Satz an Monitoring-Regeln erstellen, um bösartiges Verhalten zu entdecken: Man findet solche Regeln im snort-rules-default Paket. Snort
ist historisch die Referenz im IDS-Ökosystem und suricata
kann die Regelsätze, die für Snort geschrieben wurden, weiterverwenden.
Alternatively, oinkmaster
(in the package of the same name) can be used to download Snort rule sets from external sources.
Unfortunately, the mentioned packages are not part of the current Debian
Bookworm release. But they can still be retrieved via the Debian package search or from the Debian snapshot archive.