GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Ein ultimativer Leitfaden zum Sichern von Ubuntu-Hosts

Ubuntu wird als das hochsichere Betriebssystem bezeichnet, das verfügbar ist, aber es hat Fehler in seiner Standardinstallation wie jedes andere Betriebssystem. Um diese Schwachstellen zu beseitigen, hat der IT-Sicherheitsspezialist Richtlinien herausgegeben, um die Hintertüren/Schwächen Ihres Systems zu bekämpfen und Sie vor einigen der üblichen Ubuntu-Exploits zu schützen. In dieser Anleitung werden wir uns einige wichtige Sicherheitseinstellungen ansehen, die jeder Systemadministrator auf seinem Server anwenden möchte.

1. Harden Boot-Einstellungen

Um zu verhindern, dass Nicht-Root-Benutzer die Bootloader-Konfigurationsdatei (/boot/grub/grub.cfg) ändern, setzen Sie die Besitzer und Gruppen dieser Datei auf root. Führen Sie den folgenden Befehl aus, um den Besitz auf root zu ändern.

# chown root:root /boot/grub/grub.cfg

Um zu verhindern, dass Nicht-Root-Benutzer die Boot-Parameter lesen, setzen Sie die Berechtigung für die Bootloader-Datei auf „Nur lesen und schreiben“. Führen Sie den folgenden Befehl aus, um diesen Benchmark zu erreichen.

# chmod og-rwx /boot/grub/grub.cfg

Legen Sie auch ein Passwort für den Bootloader fest, sodass jeder nicht autorisierte Benutzer, der versucht, das System neu zu starten, ein Passwort eingeben muss, um mit dem nächsten Schritt fortzufahren. Dadurch wird sichergestellt, dass ein nicht autorisierter Benutzer den Boot-Parameter nicht ändern kann, z. B. das Deaktivieren von SELinux oder das Ändern der Boot-Partition. Führen Sie den folgenden Befehl aus, um ein Bootloader-Passwort zu erstellen.

# grub-mkpasswd-pbkdf2

Erstellen Sie nun eine neue Datei mit dem Namen /etc/grub.d/00_header und fügen Sie die folgenden Zeilen hinzu.

set superusers=""
password_pbkdf2

Entfernen Sie die Option --unrestricted im Parameter CLASS der Datei /etc/grub.d/10_linux . Dies stellt eine obligatorische Passwortanforderung sicher, um mit dem nächsten Schritt fortzufahren, d. h. dem Bearbeiten von Boot-Parametern.

Aktualisieren Sie das Grub

# update-grub

2. Sicheres Dateisystem

Erstellen Sie Partitionen basierend auf verschiedenen Kategorien wie Benutzerdaten in der /home-Partition, Auslagerungsdateien in der /swap-Partition, temporäre Dateien in der /tmp-Partition, Systemkonfigurationsdateien in der /etc-Partition, Gerätedateien in der /dev-Partition usw. Dies verhindert eine Ressourcenerschöpfung als sowie flexible Befestigungsoptionen basierend auf der beabsichtigten Verwendung von Daten.

2.1 Partition für /tmp erstellen

Der erste Grund für die Erstellung einer separaten Partition für /tmp besteht darin, dass die Möglichkeit besteht, dass die Ressourcen erschöpft sind, da das /tmp-Verzeichnis weltweit beschreibbar ist. Das Erstellen einer separaten Partition für /temp ermöglicht es auch, die Option noexec zu setzen, wodurch sie für nicht autorisierte Benutzer nutzlos wird, um Code auszuführen und einen festen Link zum Setuid-Programm des Systems zu erstellen.

2.2 Nodev-Option für /tmp setzen

Legen Sie die nodev-Option für die /tmp-Partition fest, um zu verhindern, dass Benutzer eine Block-/Zeichen-Gerätedatei erstellen. Bearbeiten Sie die Datei /etc/fstab und fügen Sie die folgende Zeile hinzu.

# mount -o remount,nodev /tmp

2.3 Nosuid-Option für /tmp setzen

Um zu verhindern, dass Benutzer festgelegte Benutzer-ID-Dateien im /tmp-Dateisystem erstellen, fügen Sie die folgende Zeile in /etc/fstab hinzu, da das /tmp-Dateisystem für die temporäre Dateispeicherung verwendet wird.

# mount -o remount,nosuid /tmp

2.4 Noexec-Option für /tmp setzen

Um zu verhindern, dass Benutzer ausführbare Binärdateien ausführen, legen Sie die Option noexec für die /tmp-Partition fest. Fügen Sie die folgende Zeile in /etc/fstab hinzu, um die Ausführung ausführbarer Binärdateien zu blockieren.

# mount -o remount,noexec /tmp

2.5 Separate Partition für /var erstellen

Die Systemdämonen und andere Dienste speichern vorübergehend dynamische Daten in /var, wobei einige Verzeichnisse möglicherweise weltweit beschreibbar sind. Daher besteht die Möglichkeit einer Ressourcenerschöpfung in /var. Um die Ressourcenerschöpfung in /var zu verhindern, erstellen Sie eine separate Partition für /var in einer neuen Installation und verwenden Sie für ein zuvor installiertes System LVM, um eine neue Partition zu erstellen.

2.6 /var/tmp an /tmp binden

Das bindende Einhängen von /var/tmp in /tmp ermöglicht es, /var/tmp auf die gleiche Weise zu schützen, wie /tmp geschützt wird. Dies verhindert auch, dass /var den Speicher in /var/tmp mit temporären Dateien erschöpft. Führen Sie den folgenden Befehl aus, um /tmp und /var/tmp

zu binden
# sudo mount --bind /tmp /var/tmp

Um es dauerhaft zu machen, fügen Sie die folgende Zeile in /etc/fstab

hinzu
# /tmp /var/tmp none bind 0 0

2.7 Separate Partition für /var/log erstellen

Erstellen Sie zum Schutz vertraulicher Prüfdaten und zum Schutz vor Ressourcenerschöpfung eine separate Partition für /var/log in der Neuinstallation und verwenden Sie für zuvor installierte Systeme LVM, um eine neue Partition zu erstellen.

2.8 Separate Partition für /var/log/audit erstellen

Der Audit-Daemon speichert Protokolldaten im Verzeichnis /var/log/audit. Um sich vor Ressourcenerschöpfung zu schützen, da das Überwachungsprotokoll sehr groß werden kann, und auch um vertrauliche Überwachungsdaten zu schützen, erstellen Sie eine separate Partition für /var/log/audit in einer neuen Installation und verwenden Sie für zuvor installierte Systeme LVM, um eine neue Partition zu erstellen.

2.9 Separate Partition für /home erstellen

Die Benutzerdaten werden im Verzeichnis /home gespeichert. Es ist möglich, den Dateityp einzuschränken, der in /home gespeichert werden kann. Um dies zu erreichen, erstellen Sie eine separate Partition für /home in einer neuen Installation und für ein zuvor installiertes System, verwenden Sie LVM, um eine neue Partition zu erstellen. Auch eine separate Partition für /home schützt vor Ressourcenerschöpfung.

2.10 setze nodev für /home

Um zu verhindern, dass das /home-Verzeichnis zum Definieren von Zeichen- und Block-Spezialgeräten verwendet wird, stellen Sie die nodev-Option so ein, dass Benutzer diese Dateitypen nicht erstellen können. Bearbeiten Sie die Datei /etc/fstab und fügen Sie die folgenden Zeilen hinzu.

# mount -o remount, nodev /home

2.11 Nodev für Wechselmedien festlegen

Ein Benutzer kann Sicherheitskontrollen täuschen, indem er Zeichen verwendet und spezielle Geräte von Wechselmedien blockiert, um auf vertrauliche Gerätedateien wie /dev/kmem zuzugreifen. Bearbeiten Sie die Datei /etc/fstab und fügen Sie die folgenden Zeilen hinzu.

# mount -o remount, nodev { removable device like floppy or cdrom or USB stick etc. }

2.12 Noexec auf Wechseldatenträger setzen

Um zu verhindern, dass Programme von Wechselmedien ausgeführt werden, damit keine schädlichen Programme in das System platziert werden können, fügen Sie die folgenden Zeilen in /etc/fstab

hinzu
# mount -o remount,noexec { removable device like floppy or cdrom or USB stick etc. }

2.13 Nosuid zu Wechselmedien hinzufügen

Um zu verhindern, dass das Wechselmedium als setuid/setgid verwendet wird, wodurch Nicht-Root-Benutzer privilegierte Programme im System platzieren können. Bearbeiten Sie /etc/fstab und fügen Sie die folgenden Zeilen darin hinzu

# mount -o remount,nosuid { removable device like floppy or cdrom or USB stick etc. }

2.14 Nodev-Option für /run/shm-Partition hinzugefügt

Um zu verhindern, dass Benutzer spezielle Gerätedateien in /run/shm-Partitionen erstellen, fügen Sie die folgende Zeile in /etc/fstab hinzu. Dadurch wird sichergestellt, dass Benutzer keine Geräte in /run/shm

erstellen können
# mount -o remount,nodev /run/shm

2.15 Nosuid-Option zur /run/shm-Partition hinzufügen

Um zu verhindern, dass /run/shm als setuid/setgid verwendet wird, erlaubt dies Nicht-Root-Benutzern, privilegierte Programme im System zu platzieren. Der Benutzer kann das Programm mit seiner eigenen uid und gid ausführen. Bearbeiten Sie /etc/fstab und fügen Sie die folgenden Zeilen darin hinzu

# mount -o remount,nosuid /run/shm

2.16 noexec zur /run/shm-Partition hinzufügen

Um zu verhindern, dass die /run/shm-Partition zum Ausführen von Programmen verwendet wird, fügen Sie die folgenden Zeilen in /etc/fstab

hinzu
# mount -o remount, noexec /run/shm

2.17 Sticky-Bit auf weltweit beschreibbare Verzeichnisse setzen

Um zu verhindern, dass Benutzer Dateien in diesem Verzeichnis löschen oder umbenennen, die ihnen nicht gehören , setzen Sie das Sticky-Bit auf.

# chmod +t /tmp
or
# chmod 1777 /tmp

3. Alte Systeme verwerfen

Installieren/verwenden Sie die folgenden veralteten Dienste und Dienstprogramme nicht, da diese Systeme/Dienstprogramme Sicherheitslücken aufweisen . Diese sind - NIS , RSH server/client , talk server/client , Telenet, TFTP, XINETD, Chargen, Daytime, echo, discard, time

4. Spezialdienste verwerfen

Installieren/verwenden Sie die folgenden Dienste nicht, da diese Dienste Sicherheitslücken aufweisen. Diese sind-
X Window-System, Avahi Server Druckserver, DHCP-Server, LDAP, NFS und RPC, DNS-Server, FTP, Samba, SNMP, Rsync, BIOSDEVNAME. Einige der oben genannten Dienste werden tatsächlich für den täglichen Betrieb benötigt, wie z. B. DNS-Server. In diesem Fall ist es ratsam, diese Server auf einem separaten Host zu installieren, der keine sensiblen Daten enthält.

5. Netzwerkkonfiguration und Firewall

5.1 IP-Weiterleitung deaktivieren

Um zu verhindern, dass der Server zum Weiterleiten von Paketen verwendet wird, d. h. um als Router zu fungieren, setzen Sie den Parameter net.ipv4.ip_forward in /etc/sysctl.conf

auf 0
net.ipv4.ip_forward = 0

Laden Sie nun die sysctl-Konfiguration neu

# sudo sysctl -p

5.2 Sendepaketumleitung deaktivieren

Ein nicht autorisierter Benutzer kann einen kompromittierten Host verwenden, indem er ICMP-Umleitungspakete an andere Routing-Geräte sendet, um das Routing zu beschädigen. Um die Weiterleitung von Paketen zu deaktivieren, setzen Sie die Parameter net.ipv4.conf.all.send_redirects und net.ipv4.conf.default.send_redirects in /etc/sysctl.conf

auf 0
# net.ipv4.conf.all.send_redirects = 0

# net.ipv4.conf.default.send_redirects =0

Laden Sie nun die sysctl-Konfiguration neu

# sudo sysctl -p

5.3 Quellrouten-Paketannahme deaktivieren

Unter Verwendung von Source-Routing-Paketen kann ein Benutzer Zugriff auf die private Adresse des Systems erhalten, da eine Route angegeben werden kann.
Setzen Sie die Parameter net.ipv4.conf.all.accept_source_route und net.ipv4.conf.default.accept_source_route in /etc/sysctl.conf

auf 0
# net.ipv4.conf.all.accept_source_route=0
# net.ipv4.conf.default.accept_source_route=0

Laden Sie nun die sysctl-Konfiguration neu

# sudo sysctl -p

5.4 ICMP-Umleitungsakzeptanz deaktivieren

Ein Benutzer kann die Routing-Tabelle ändern, um Pakete mit gefälschter ICMP-Umleitung an falsche Netzwerke zu senden, wodurch die Pakete erfasst werden können. Um die Annahme von ICMP-Umleitungen zu deaktivieren, setzen Sie die Parameter net.ipv4.conf.all.accept_redirects und net.ipv4.conf.default.accept_redirects in /etc/sysctl.conf

auf 0
# net.ipv4.conf.all.accept_redirects = 0
# net.ipv4.conf.default.accept_redirects parameters = 0

Laden Sie nun die sysctl-Konfiguration neu

# sudo sysctl -p

5.5 Sichere ICMP-Umleitungsannahme deaktivieren

Sichere ICMP-Umleitungen und ICMP-Umleitungen sind fast gleich, der einzige Unterschied besteht darin, dass die Quelle der Pakete für sichere ICMP-Umleitungen ein Gateway ist. Wenn das Quell-Gateway kompromittiert ist, kann ein Benutzer die Routing-Tabelle mit sicheren ICMP-Umleitungen aktualisieren.
Setzen Sie die Parameter net.ipv4.conf.all.secure_redirects und net.ipv4.conf.default.secure_redirects in /etc/sysctl.conf auf 0, um die sichere ICMP-Umleitungsannahme zu deaktivieren.

net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0

Laden Sie nun die sysctl-Konfiguration neu

# sudo sysctl -p

5.6 Verdächtige Pakete protokollieren

Ein Administrator kann das System diagnostizieren, wenn ein Angreifer gefälschte Pakete sendet.

Setzen Sie die Parameter net.ipv4.conf.all.log_martians und net.ipv4.conf.default.log_martians in /etc/sysctl.conf auf 1, um dies zu verhindern.

# net.ipv4.conf.all.log_martians=1

# net.ipv4.conf.default.log_martians=1

Laden Sie nun die sysctl-Konfiguration neu

# sudo sysctl -p

5.7 Broadcast-Anfrage ignorieren aktivieren

Um Smurf-Angriffe in einem Netzwerk zu verhindern, setzen Sie net.ipv4.icmp_echo_ignore_broadcasts auf 1, wodurch das System alle ICMP-Echo- und Zeitstempelanforderungen an Broadcast- und Multicast-Adressen ignorieren kann. Setzen Sie den Parameter net.ipv4.icmp_echo_ignore_broadcasts in /etc/sysctl.conf

auf 1
# net.ipv4.icmp_echo_ignore_broadcasts=1

Laden Sie nun die sysctl-Konfiguration neu

# sudo sysctl -p

5.8 Schutz bei fehlerhaften Fehlermeldungen aktivieren

Um zu verhindern, dass der Angreifer Antworten sendet, die gegen RFC-1122 verstoßen, um zu versuchen, Systemprotokolldateien mit nutzlosen Fehlermeldungen einzufügen. Setzen Sie den Parameter net.ipv4.icmp_ignore_bogus_error_responses in /etc/sysctl.conf auf 1, um gefälschte Fehlerantworten zu blockieren.

# net.ipv4.icmp_ignore_bogus_error_responses=1

Laden Sie nun die sysctl-Konfiguration neu

# sudo sysctl -p

5.9 Validierung der empfohlenen RFC-Quellroute aktivieren

Mithilfe von Reverse Path Filtering kann der Kernel feststellen, ob das Paket gültig ist, andernfalls wird es das Paket verwerfen.
Setzen Sie die Parameter net.ipv4.conf.all.rp_filter und net.ipv4.conf.default.rp_filter in /etc/sysctl.conf

auf 1
# net.ipv4.conf.all.rp_filter=1
# net.ipv4.conf.default.rp_filter=1

Laden Sie nun die sysctl-Konfiguration neu

# sudo sysctl -p

5.10 TCP-SYN-Cookies aktivieren

Ein Angreifer kann einen DOS-Angriff im Server starten, indem er SYN-Pakete überflutet, ohne den Drei-Wege-Handshake zu initialisieren. Um dies zu verhindern, setzen Sie den Parameter net.ipv4.tcp_syncookies auf 1 in /etc/sysctl.conf

# net.ipv4.tcp_syncookies=1

Laden Sie nun die sysctl-Konfiguration neu

# sudo sysctl -p

5.10 IPv6-Router-Advertisement deaktivieren

Aktivieren Sie den Server, um Router-Ankündigungen nicht zu akzeptieren, da dies dazu führen kann, dass Datenverkehr an kompromittierte Systeme weitergeleitet wird.
Setzen Sie die Parameter net.ipv6.conf.all.accept_ra und net.ipv6.conf.default.accept_ra in /etc/sysctl.conf

auf 0
# net.ipv6.conf.all.accept_ra=0
# net.ipv6.conf.default.accept_ra=0

Laden Sie nun die sysctl-Konfiguration neu

# sudo sysctl -p

5.12 ​​IPv6-Umleitungsakzeptanz deaktivieren

Aktivieren Sie den Server, um Router-Ankündigungen nicht zu akzeptieren, da dies dazu führen kann, dass Datenverkehr an kompromittierte Systeme weitergeleitet wird. Es wird empfohlen, feste Routen innerhalb des Systems festzulegen, um das System vor schlechten Routen zu schützen.

Setzen Sie die Parameter net.ipv6.conf.all.accept_redirects und net.ipv6.conf.default.accept_redirects in /etc/sysctl.conf

auf 0
# net.ipv6.conf.all.accept_redirects=0
# net.ipv6.conf.default.accept_redirects=0

Laden Sie nun die sysctl-Konfiguration neu

# sudo sysctl -p

5.13 IPv6 deaktivieren

Um die Angriffswahrscheinlichkeit im System zu verringern, deaktivieren Sie IPv6
Bearbeiten Sie die Datei /etc/sysctl.conf und fügen Sie die folgenden Zeilen hinzu:

# net.ipv6.conf.all.disable_ipv6=1
# net.ipv6.conf.default.disable_ipv6=1
# net.ipv6.conf.lo.disable_ipv6=1

Laden Sie nun die sysctl-Konfiguration neu

# sudo sysctl -p

5.14 TCP-Wrapper installieren

Verwenden Sie TCP-Wrapper für alle Dienste, die TCP-Wrapper unterstützen.

TCPD installieren:

# apt-get install tcpd

5.15 /etc/hosts.allow erstellen

Um sicherzustellen, dass nur autorisierte Systeme eine Verbindung zum Server herstellen können, verwenden Sie /etc/hosts.allow
Bearbeiten Sie /etc/hosts.allow und fügen Sie Folgendes hinzu

"ALL: <net>/<mask>, <net>/<mask>, …"
e.g <net> = 192.168.10.100 , <mask> = 255.255.255.0

5.16 Überprüfen Sie die Berechtigungen für /etc/hosts.allow

Es ist wichtig, /etc/hosts.allow vor unbefugtem Schreibzugriff zu schützen. Führen Sie den folgenden Befehl aus, um die Berechtigung von /etc/hosts.allow

zu finden

# ls -l /etc/hosts.allow

-rw-r--r-- 1 root root 15. Februar 2055 11:30 /etc/hosts.allow

Wenn die Berechtigung falsch ist, verwenden Sie den folgenden Befehl, um sie zu korrigieren

#chmod 644 /etc/hosts.allow

5.17 Erstellen Sie /etc/host an verweigern

Verweigern Sie den Zugriff auf den Server mit /etc/hosts.deny . Die Datei /etc/hosts.deny ist so konfiguriert, dass sie

verweigert

alle Hosts, die nicht in /etc/hosts.allow aufgeführt sind. Erstellen Sie die Datei /etc/hosts.deny

echo "ALL:ALL">> /etc/hosts.deny

5.18 Überprüfen Sie die Berechtigungen für /etc/hosts.deny

Es ist wichtig, /etc/hosts.deny vor unbefugtem Schreibzugriff zu schützen. Führen Sie den folgenden Befehl aus, um die Berechtigung von /etc/hosts.deny

zu finden
# ls -l /etc/hosts.deny
-rw-r--r-- 1 root root 2055 Feb 15 11:30 /etc/hosts.deny

5.19 Stellen Sie sicher, dass die Firewall aktiv ist

Verwenden Sie eine Firewall, um die Kommunikation innerhalb und außerhalb der Box auf bestimmte IP-Adressen und Ports zu beschränken. Ubuntu bietet Uncomplicated Firewall (UFW) zur einfachen Konfiguration der Firewall-Konfiguration.
Installieren Sie UFW

# sudo apt-get install ufw

ufw aktivieren:

# sudo ufw enable

Beispiel:
SSH- und HTTP-Dienste zulassen.

# sudo ufw allow TCP/80
# sudo ufw allow TCP/22
# sudo ufw reload

6. Protokollierung und Prüfung

Durch die Verwendung eines leistungsstarken Audit-Frameworks kann das System viele Ereignistypen verfolgen, um das System zu überwachen und zu auditieren.
Installieren Sie auditd mit dem folgenden Befehl

sudo apt-get install auditd audispd-plugins

Erstellen Sie bei Bedarf geeignete Startlinks für auditd in /etc/rc*.d, indem Sie den folgenden Befehl in jedem der relevanten Verzeichnisse ausführen:

# ln -s /etc/init.d/auditd S37auditd

Startlinks sollten für Runlevel erstellt werden

6.1 Speichergröße für Audit-Protokolle konfigurieren

Die Größe der Überwachungsprotokolldatei sollte sorgfältig gewählt werden, damit sie das System nicht beeinträchtigt und keine Überwachungsdaten verloren gehen.
Setzen Sie den Parameter max_log_file in /etc/audit/auditd.conf

max_log_file = <MB>

6.2 Deaktivieren Sie das System, wenn das Überwachungsprotokoll voll ist

Der auditd-Daemon kann so konfiguriert werden, dass er das System anhält, wenn die Audit-Protokolle voll sind. Führen Sie die folgenden Schritte aus, um festzustellen, ob auditd so konfiguriert ist, dass es den Administrator benachrichtigt und das System anhält, wenn die Audit-Protokolle voll sind.

space_left_action = email
action_mail_acct = root
admin_space_left_action = halt

6.3 Alle Überwachungsinformationen aufbewahren

In Hochsicherheitskontexten übersteigen die Vorteile der Pflege eines langen Audit-Verlaufs die Kosten für die Speicherung des Audit-Verlaufs. Fügen Sie die folgende Zeile zur Datei /etc/audit/auditd.conf hinzu.

max_log_file_action = keep_logs

6.4 Ereignisse aufzeichnen, die Datums- und Uhrzeitinformationen ändern

Um ungewöhnliche Änderungen des Systemdatums und/oder der Systemzeit zu überwachen, die auf eine nicht autorisierte Aktivität im System hinweisen.
Fügen Sie für 64-Bit-Systeme die folgenden Zeilen zur Datei /etc/audit/audit.rules hinzu.

-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change
-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -F arch=b64 -S clock_settime -k time-change
-a always,exit -F arch=b32 -S clock_settime -k time-change -w /etc/localtime -p wa -k time-change

# Führen Sie den folgenden Befehl aus, um auditd neu zu starten

# sudo service auditd restart

Fügen Sie für 32-Bit-Systeme die folgenden Zeilen zur Datei /etc/audit/audit.rules hinzu.

-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -F arch=b32 -S clock_settime -k time-change -w /etc/localtime -p wa -k time-change

# Führen Sie den folgenden Befehl aus, um auditd neu zu starten

# sudo service auditd restart

6.6 Ereignisse aufzeichnen, die Benutzer-/Gruppeninformationen ändern

Unerwartete Änderungen an /etc/group, /etc/passwd, /etc/gshadow, /etc/shadow, /etc/security/opasswd sind ein klarer Hinweis darauf, dass ein nicht autorisierter Benutzer versucht, seine Aktivitäten zu verbergen oder zusätzliche Konten zu kompromittieren.
Fügen Sie die folgenden Zeilen zur Datei /etc/audit/audit.rules hinzu.

-w /etc/group -p wa -k identity
-w /etc/passwd -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/security/opasswd -p wa -k identity

# Führen Sie den folgenden Befehl aus, um auditd neu zu starten

# sudo service auditd restart

6.7 Ereignisse aufzeichnen, die die Netzwerkumgebung des Systems ändern

Um unbefugte Änderungen am Host- und Domänennamen eines Systems zu verhindern, um Sicherheitsparameter zu brechen, die auf der Grundlage dieser Namen festgelegt wurden, fügen Sie die folgenden Zeilen in /etc/audit/audit.rules hinzu
Fügen Sie für 64-Bit-Systeme die folgenden Zeilen zur Datei /etc/audit/audit.rules hinzu.

-a exit,always -F arch=b64 -S sethostname -S setdomainname -k system-locale
-a exit,always -F arch=b32 -S sethostname -S setdomainname -k system-locale
-w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale
-w /etc/hosts -p wa -k system-locale -w /etc/network -p wa -k system-locale

# Führen Sie den folgenden Befehl aus, um auditd neu zu starten

# sudo service auditd restart

Fügen Sie für 32-Bit-Systeme die folgenden Zeilen zur Datei /etc/audit/audit.rules hinzu.

-a exit,always -F arch=b32 -S sethostname -S setdomainname -k system-locale
-w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale
-w /etc/hosts -p wa -k system-locale -w /etc/network -p wa -k system-locale

# Führen Sie den folgenden Befehl aus, um auditd neu zu starten

# sudo service auditd restart

6.8 Aufzeichnen von Ereignissen, die die obligatorischen Zugriffskontrollen des Systems ändern

Alle Änderungen an Dateien in /etc/selinux sind ein Hinweis darauf, dass ein nicht autorisierter Benutzer versucht, Zugriffskontrollen und Sicherheitskontexte zu ändern, um Zugriff auf das System zu erhalten.
Fügen Sie die folgenden Zeilen zu /etc/audit/audit.rules

hinzu
-w /etc/selinux/ -p wa -k MAC-policy

# Führen Sie den folgenden Befehl aus, um auditd neu zu starten

# sudo service auditd restart

6.9 Anmelde- und Abmeldeereignisse erfassen

Um Informationen im Zusammenhang mit Anmelde-/Abmelde-/Brute-Force-Angriffen zu überwachen, fügen Sie die folgenden Zeilen zur Datei /etc/audit/audit.rules hinzu.

-w /var/log/faillog -p wa -k logins
-w /var/log/lastlog -p wa -k logins
-w /var/log/tallylog -p wa -k logins

# Führen Sie den folgenden Befehl aus, um auditd neu zu starten

# sudo service auditd restart

6.10 Informationen zur Sitzungsinitiierung sammeln

Überwachen Sie Sitzungseinleitungsereignisse. Ein Systemadministrator kann Anmeldungen überwachen, die zu ungewöhnlichen Zeiten erfolgen, was auf eine nicht autorisierte Aktivität hinweisen könnte.
Fügen Sie die folgenden Zeilen zur Datei /etc/audit/audit.rules hinzu.

-w /var/run/utmp -p wa -k session
-w /var/log/wtmp -p wa -k session
-w /var/log/btmp -p wa -k session

# Führen Sie den folgenden Befehl aus, um auditd neu zu starten

# sudo service auditd restart

6.11 Erfassen von Ereignissen zur Änderung der Berechtigung zur diskretionären Zugriffskontrolle

Finden Sie Änderungen in Dateiattributen, die auf Eindringlingsaktivitäten hinweisen.
Fügen Sie für 64-Bit-Systeme die folgenden Zeilen zur Datei /etc/audit/audit.rules hinzu.

-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod

# Führen Sie den folgenden Befehl aus, um auditd neu zu starten

# sudo service auditd restart

Fügen Sie für 32-Bit-Systeme die folgenden Zeilen zur Datei /etc/audit/audit.rules hinzu.

-a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod

# Führen Sie den folgenden Befehl aus, um auditd neu zu starten

# sudo service auditd restart

6.12 Sammeln Sie erfolglose unbefugte Zugriffsversuche auf Dateien

Finden Sie fehlgeschlagene Versuche, Dateien zu öffnen, zu erstellen oder zu kürzen, um unbefugten Zugriff auf das System zu erhalten.
Fügen Sie für 64-Bit-Systeme die folgenden Zeilen zur Datei /etc/audit/audit.rules hinzu.

-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access

# Führen Sie den folgenden Befehl aus, um auditd neu zu starten

# sudo service auditd restart

Fügen Sie für 32-Bit-Systeme die folgenden Zeilen zur Datei /etc/audit/audit.rules hinzu.

-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access

# Führen Sie den folgenden Befehl aus, um auditd neu zu starten

# sudo service auditd restart

6.13 Sammeln Sie die Nutzung privilegierter Befehle

Finden Sie heraus, ob privilegierte Befehle von nicht privilegierten Benutzern verwendet werden, um Zugriff auf das System zu erhalten. Führen Sie zuerst den folgenden Befehl aus und fügen Sie dann die Ausgabe des folgenden Befehls zur Datei /etc/audit/audit.rules

hinzu
# find PART -xdev \( -perm -4000 -o -perm -2000 \) -type f | awk '{print \ "-a always,exit -F path=" $1 " -F perm=x -F auid>=500 -F auid!=4294967295 \ -k privileged" }'

6.14 Sammeln Sie nicht erfolgreiche Dateisystem-Mounts

Um das Mounten der Dateisysteme durch nicht privilegierte Benutzer zu verfolgen, fügen Sie die folgenden Regeln in die Datei /etc/audit/audit.rules ein
Fügen Sie für 64-Bit-Systeme die folgenden Zeilen zur Datei /etc/audit/audit.rules hinzu.

-a always,exit -F arch=b64 -S mount -F auid>=500 -F auid!=4294967295 -k mounts
-a always,exit -F arch=b32 -S mount -F auid>=500 -F auid!=4294967295 -k mounts

# Führen Sie den folgenden Befehl aus, um auditd neu zu starten

# sudo service auditd restart

Fügen Sie für 32-Bit-Systeme die folgenden Zeilen zur Datei /etc/audit/audit.rules hinzu.

-a always,exit -F arch=b32 -S mount -F auid>=500 -F auid!=4294967295 -k mounts

# Führen Sie den folgenden Befehl aus, um auditd neu zu starten

# sudo service auditd restart

6.15 Erfassen von Dateilöschereignissen nach Benutzer

Um herauszufinden, ob Dateien und Dateiattribute, die geschützten Dateien zugeordnet sind, entfernt werden, fügen Sie die folgenden Regeln hinzu.
Fügen Sie für 64-Bit-Systeme Folgendes zur Datei /etc/audit/audit.rules hinzu.

-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete
-a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete

Führen Sie den folgenden Befehl aus, um auditd neu zu starten

# sudo service auditd restart

Fügen Sie für 32-Bit-Systeme Folgendes zur Datei /etc/audit/audit.rules hinzu.

-a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete

# Führen Sie den folgenden Befehl aus, um auditd neu zu starten

# sudo service auditd restart

6.16 Erfassen von Änderungen am Umfang der Systemverwaltung

Änderungen in der Datei /etc/sudoers können darauf hinweisen, dass eine nicht autorisierte Änderung am Umfang der Aktivität des Systemadministrators vorgenommen wurde.

Fügen Sie die folgenden Zeilen zur Datei /etc/audit/audit.rules hinzu.

-w /etc/sudoers -p wa -k scope

# Führen Sie den folgenden Befehl aus, um auditd neu zu starten

# sudo service auditd restart

6.17 Erfassen von Systemadministratoraktionen (sudolog)

Um zu verhindern, dass unbefugte Benutzer privilegierte Befehle verwenden, finden Sie heraus, ob Änderungen in /var/log/sudo.log vorgenommen werden.
Fügen Sie die folgenden Zeilen zur Datei /etc/audit/audit.rules hinzu.

-w /var/log/sudo.log -p wa -k actions

auditd neu starten

# sudo service auditd restart

6.18 Laden und Entladen des Collect-Kernel-Moduls

Um herauszufinden, ob ein nicht autorisierter Benutzer insmod, rmmod und modprobe verwendet und damit die Sicherheit des Systems gefährdet, fügen Sie die folgenden Zeilen zur Datei /etc/audit/audit.rules hinzu.

-w /sbin/insmod -p x -k modules
-w /sbin/rmmod -p x -k modules
-w /sbin/modprobe -p x -k modules

Fügen Sie für 32-Bit-Systeme

hinzu
-a always,exit -F arch=b32 -S init_module -S delete_module -k modules

Fügen Sie für 64-Bit-Systeme

hinzu
-a always,exit -F arch=b64 -S init_module -S delete_module -k modules

auditd neu starten

# sudo service auditd restart

6.19 Audit-Konfiguration unveränderlich machen

Um zu verhindern, dass nicht autorisierte Benutzer Änderungen am Überwachungssystem vornehmen, um ihre böswilligen Aktivitäten zu verbergen, und dann die Überwachungsregeln zurücksetzen, fügen Sie die folgenden Zeilen zur Datei

hinzu

/etc/audit/audit.rules-Datei.

-e 2

Dies muss die letzte Zeile in der Datei /etc/audit/audit.rules sein
auditd neu starten

# sudo service auditd restart

7. Systemzugriff, Authentifizierung und Autorisierung

7.1 Benutzer-/Gruppeneigentümer und -berechtigung für Cron festlegen

Führen Sie die folgenden Befehle aus, um den Lese-/Schreib- und Suchzugriff auf Root-Benutzer und -Gruppen zu beschränken und zu verhindern, dass normale Benutzer auf diese Dateien/Verzeichnisse zugreifen.

# chown root:root /etc/crontab
# chmod og-rwx /etc/crontab
# chown root:root /etc/cron.hourly
# chmod og-rwx /etc/cron.hourly
# chown root:root /etc/cron.daily
# chmod og-rwx /etc/cron.daily
# chown root:root /etc/cron.weekly
# chmod og-rwx /etc/cron.weekly
# chown root:root /etc/cron.monthly
# chmod og-rwx /etc/cron.monthly
# chown root:root /etc/cron.d
# chmod og-rwx /etc/cron.d

7.2 PAM konfigurieren

PAM (Pluggable Authentication Modules) ist ein Dienst, der modulare Authentifizierungsmodule auf UNIX-Systemen implementiert. PAM muss sorgfältig konfiguriert werden, um die Systemauthentifizierung zu sichern.

7.2.1 Festlegen der Anforderungsparameter für die Passworterstellung mit pam_cracklib

Das Modul pam_cracklib prüft die Stärke von Passwörtern. Es führt Überprüfungen durch, z. B. um sicherzustellen, dass ein Passwort kein Wörterbuchwort ist, eine bestimmte Länge hat, eine Mischung aus Zeichen enthält (z. B. alphabetisch, numerisch, andere) und mehr.
Setzen Sie die pam_cracklib.so Parameter wie folgt in /etc/pam.d/common-password

password required pam_cracklib.so retry=3 minlen=14 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1

7.2.2 Sperre für fehlgeschlagene Passwortversuche festlegen

Sperren von Benutzern nach erfolglosen aufeinanderfolgenden Anmeldeversuchen, um Brute-Force-Passwortangriffe auf Ihre Systeme zu verhindern.
Bearbeiten Sie die Datei /etc/pam.d/login und fügen Sie die folgende Authentifizierungszeile hinzu:

auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900

7.2.3 Wiederverwendung von Passwörtern einschränken

Wenn Benutzer gezwungen werden, ihre letzten 5 Passwörter nicht erneut zu verwenden, wird es weniger wahrscheinlich, dass ein Angreifer das Passwort erraten kann. Setzen Sie den Parameter pam_unix.so Remember auf 5 in /etc/pam.d/common-password

password sufficient pam_unix.so remember=5

8. Konfigurieren Sie SSH

Bearbeiten Sie die Datei /etc/ssh/sshd_config, um den folgenden Parameter wie folgt festzulegen, um ihn sicher zu machen.

Protocol 2
LogLevel INFO
X11Forwarding no
MaxAuthTries 4
IgnoreRhosts yes
HostbasedAuthentication no
PermitRootLogin no
PermitEmptyPasswords no
PermitUserEnvironment no
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
ClientAliveInterval 300
ClientAliveCountMax 0
AllowUsers <userlist>
AllowGroups <grouplist>
DenyUsers <userlist>
DenyGroups <grouplist>
Banner <your bannerfile>

9. Restrict Access to the su Command

Use sudo instead of su as it provides a better logging out and audit mechanism. The another motivation for using sudo is to restrict the uses of su. Uncomment the pam_wheel.so line in /etc/pam.d/su, so that su command will be available to users in the wheel group to execute su.

# grep pam_wheel.so /etc/pam.d/su
auth required pam_wheel.so use_uid
# grep wheel /etc/group
wheel:x:10:root, <user list>.....

10. User Accounts and Environment

10.1 Set Password Expiration Days

Reduce the maximum age of a password.

Set the PASS_MAX_DAYS parameter to 120 in /etc/login.defs

PASS_MAX_DAYS 60

Modify active user parameters to match:

# chage --maxdays 120 <user>

10.2 Set Password Change Minimum Number of Days

To prevent the user from changing their password until a minimum no of days have passed since the user changed the password. Set the PASS_MIN_DAYS parameter to 7 in /etc/login.defs

PASS_MIN_DAYS 7

Modify active user parameters to match:
# chage --mindays 7

10.3 Set Password Expiring Warning Days

The administrator can notify the users about the expiry of their password using ASS_WARN_AGE parameter in /etc/login.defs.

Set the PASS_WARN_AGE parameter to 7 in /etc/login.defs

PASS_WARN_AGE  7

Modify active user parameters to match

# chage --warndays 7 <user>

11. System Accounts

11.1 Disable System Accounts

To prevent the system account from being used to get an interactive shell, append “/usr/sbin/nologin” at the end of each system accounts in /etc/passwd

11.2 Set Default

umask for Users
Set umask of 022 will make files readable by every user on the system.
Edit the /etc/login.defs file and add the following line

UMASK 022

11.3 Lock Inactive User Accounts

To make the system more secure, execute the following command to lock the inactive accounts.

# useradd -D -f 35

11.4 Remove OS Information from Login Warning Banners

To prevent the OS and patch level information from login banners, edit the /etc/motd, /etc/issue and /etc/issue.net files and remove any lines containing \m, \r, \s or \v.

12. Verify System File Permissions

12.1 Verify Permissions on /etc/passwd, /etc/shadow, /etc/group

These file needs to be protected from unauthorized changes by non-privileged users as well as needs to be readable as this information is used by non-privileged programs.
Execute the following commands to correct the permissions for these files

# chmod 644 /etc/passwd
# chmod o-rwx,g-rw /etc/shadow
# chmod 644 /etc/group

12.2 Verify User/Group Ownership on /etc/passwd, /etc/shadow, /etc/group

These file needs to be protected from unauthorized changes by non-privileged users as well as needs to be readable as this information is used by non-privileged programs.
Execute the following commands to correct the ownership for these files

# chown root:root /etc/passwd
# chown root:shadow /etc/shadow
# chown root:root /etc/group

13. Check for rootkits

There are few tools available through which you can check for rootkit in the server. The two popular rootkit hunters are RKHunte and CHKRootKit, use anyone of them periodically to check for rootkit in the system

Install chkrootkit

# sudo apt-get install chkrootkit

To run chkrootkit, execute the following command in the terminal

# chkrootkit

14. PSAD IDS/IPS

To detect the intrusion in your network, you can use toos like snort or cipherdyne's psad. The later has the capability of intrusion detection and log analysis with iptables. PSAD is a lightweight system daemons that analyze the iptables log message to detect scans and other spurious traffic.

Install PSAD

#sudo apt-get install psad

Now configure psad to detect scans, Intrusion Detection and Intrusion Prevention

15. Prevent IP Spoofing

Add following lines in /etc/host.conf to prevent IP spoofing

order bind,hosts
nospoof on

16. Enabling automatic security updates

It is highly recommended to enable automatic security updates and patches to keep the system secure. You will be notified every time you logged in to the system using SSH about security updates and patches. In Ubuntu Desktop, to enable automatic security updates, click on "System" select "Administration" and then "Software Sources" menu. Now select the "Internet Updates" and enable "Check for updates automatically" specifying daily". If Ubuntu issues a new security release then you will be notified via the "Update Manager" icon in the system tray. You can use unattended-upgrades which can handle automatic installation of security upgrades in Ubuntu system. Running sudo unattended-upgrade will install all the security package available for upgrade.

Install this package if it isn't already installed using

# sudo apt-get install unattended-upgrades

To enable it type

# sudo dpkg-reconfigure unattended-upgrades

and select "yes".

17. Harden PHP

Edit the php.ini file /etc/php5/apache2/php.ini and add uncomment/add following lines.

safe_mode = On

safe_mode_gid = On

disable_functions = hp_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, set_time_limit, exec,

system, highlight_file, source, show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid,

posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix, _getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit,

posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times,

posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo

register_globals = Off

expose_php = Off

display_errors = Off

track_errors = Off

html_errors = Off

magic_quotes_gpc = Off

mail.add_x_header = Off

session.name = NEWSESSID

allow_url_fopen = Off

allow_url_include = Off

session.save_path = A secured location in the server

18. Harden Apache

Edit Apache2 configuration security file /etc/apache2/conf-available/security.conf and add the following-

ServerTokens Prod

ServerSignature Off

TraceEnable Off

Header unset ETag

FileETag None

The web application firewall ModSecurity is effective way to protect web server so that it's much less vulnerable to probes/scans and attacks. First install mod_security using following command.

# sudo apt-get install libapache2-mod-security2

# mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

Edit /etc/modsecurity/modsecurity.conf

Activate the rules by editing the SecRuleEngine option and set to On and modify your server signature

SecRuleEngine On

SecServerSignature FreeOSHTTP

Now edit the following to increase the request limit to 16 MB

SecRequestBodyLimit 16384000

SecRequestBodyInMemoryLimit 16384000

Download and install the latest OWASP ModSecurity Core Rule Set from their website.

# wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/master.zip

# unzip master.zip

# cp -r owasp-modsecurity-crs-master/* /etc/modsecurity/

# mv /etc/modsecurity/modsecurity_crs_10_setup.conf.example /etc/modsecurity/modsecurity_crs_10_setup.conf

# ls /etc/modsecurity/base_rules | xargs -I {} ln -s /etc/modsecurity/base_rules/{} /etc/modsecurity/activated_rules/{}

# ls /etc/modsecurity/optional_rules | xargs -I {} ln -s /etc/modsecurity/optional_rules/{} /etc/modsecurity/activated_rules/{}

Now add the following line in /etc/apache2/mods-available/mod-security.conf

Include "/etc/modsecurity/activated_rules/*.conf"

Check if the modules has been loaded-

# sudo a2enmod headers

# sudo a2enmod mod-security

Now restart Apache2

# service apache2 restart

Apart from ModSecurity, install modevasive to protect your server from DDOS (Denial of Service) attacks

Once you've hardened the system, run some vulnerability scans and penetration tests against it in order to check that it's actually rock solid as you're now expecting it. However attack on your server can happen, it is up-to you to scan the log files regularly to find out any breaches have been occurred. You can use log analyzer tool like ELK stack to drill through servers log files quickly. If you find evidences of breaches then quickly disconnect your server from the internet and take remedial measures.


Ubuntu
  1. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  2. So bereinigt systemd-tmpfiles /tmp/ oder /var/tmp (Ersatz von tmpwatch) in CentOS / RHEL 7

  3. Ultimative Anleitung zur Installation von Flask unter Ubuntu

  4. Erstellen Sie die beschädigte /tmp-Partition auf cPanel neu

  5. Warum andere Dinge als /home auf eine separate Partition legen?

Ubuntu 20.04-Leitfaden

Ubuntu 22.04-Leitfaden

Ubuntu 15.10 Desktop-Installationsanleitung

Wie kann ich Speicherplatz in der /boot-Partition unter Ubuntu Linux freigeben?

Ubuntu – /usr/bin/host übernimmt auch nach dem Neustart keine Änderungen an /etc/hosts?

FOG-Server auf Ubuntu-Server installieren – Ultimate Guide