Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
linux:hardening [2007/10/04 11:32] – st | linux:hardening [2009/11/24 21:51] (aktuell) – st | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Hardening ====== | ||
+ | * [[software: | ||
+ | |||
+ | ===== Links ===== | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | Daneben sollte man natürlich auch (täglich) Logs überwachen (z.B. mit '' | ||
+ | / | ||
+ | Mit Hilfe des Befehls '' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Checkliste ===== | ||
+ | - **aktuelle Sicherheitspatches einspielen** | ||
+ | - regelmäßig auf neue Patches überprüfen (automatisch oder Sicherheits-Mailinglisten abonnieren, :!: vor allem bei Webanwendungen die meist nicht reglmäßig aktualisiert werden) | ||
+ | - zeitnah einspielen (so schnell wie möglich) | ||
+ | - **Physikalischen Zugriff** verhindern: Seperater und abgeschlossener Raum, BIOS Passwort, Start von Diskette/CD abschalten, [[linux: | ||
+ | - **Partitionierung**: | ||
+ | - **Dienste** sollten nicht als root laufen! (oder höchstens als root starten und dann die Privilegien abgeben bzw. den eigentlichen Dienst unter einem eingeschränkten Benutzer laufen lassen) | ||
+ | - unnötige **Dienste abschalten** (Verringerung der Angriffsfläche): | ||
+ | - Internetsuperserver | ||
+ | - veralteter '' | ||
+ | - [[xinetd]] sicher konfigurieren | ||
+ | - **(gefährdete) Dienste** absichern: | ||
+ | - nur auf einer bestimmten IP lauschen, auf andere Ports wechseln | ||
+ | - evtl. Port-knocking einsetzen ([[netzwerke: | ||
+ | - [[server: | ||
+ | - sicheren FTP-Server einsetzen: | ||
+ | - **unsichere Dienste** nicht für kritische Aufgaben (Login) zulassen: | ||
+ | - FTP | ||
+ | - Telnet | ||
+ | - veraltete r-Dienste (rsh, rlogin, ...) | ||
+ | - nur notwendige **Benutzerkonten** einrichten | ||
+ | - regelmäßig die **[[security: | ||
+ | - Login-Shells bei Benutzern von Diensten auf ''/ | ||
+ | - leere Passwörter nicht erlauben | ||
+ | - [[linux: | ||
+ | - eigenen (minimalen) [[linux: | ||
+ | - spezielle Sicherheitspatches (z. B. [[linux: | ||
+ | - **Sicherheitsmodelle** einsetzen | ||
+ | - [[wpde> | ||
+ | - [[wpde> | ||
+ | - **Firewall** einrichten | ||
+ | - Nur benötigte Dienste/ | ||
+ | - [[security: | ||
+ | - [[security: | ||
+ | - [[ids:IDS]] einrichten (Snort, ...) | ||
+ | - Die Benutzung von Shadow ist meist schon aktiviert ('' | ||
+ | - Protokolle (Logfiles) sichern: | ||
+ | - Loghost einrichten oder | ||
+ | - Logfiles absichern: Mit Secure Logging von Core-Wisdom können Sie Logfiles auch in mySQL-Datenbanken ablegen oder per Fingerabdruck gegen Veränderung sichern. | ||
+ | - msyslogd oder | ||
+ | - logrotate -> Log per mail | ||
+ | - regelmäßig nach suid-Programme suchen: | ||
+ | - automatisch mit Programmen: | ||
+ | - sxid schickt eine tägliche Report über dazugekommene suid/sgid per mail zu | ||
+ | - manuell: | ||
+ | - root-suids: < | ||
+ | - allgemein suids: < | ||
+ | - sgid-programme: | ||
+ | - volle Ausgabe mit allen Rechten bekommt man mit: < | ||
+ | - **[[netzwerke: | ||
+ | - **Systemressourcen** für Benutzer **begrenzen** | ||
+ | - [[linux: | ||
+ | - FIXME (andere) | ||
+ | - **sinnvolle Dateirechte** setzen | ||
+ | - ''/ | ||
+ | - restriktive [[linux: | ||
+ | - Banner (Versionsnummern etc.) von Diensten abschalten | ||
+ | - in ''/ | ||
+ | - [[netzwerke: | ||
+ | - Webserver: | ||
+ | - evtl. Zugriffe auf bestimmte Rechner beschränken | ||
+ | - in ''/ | ||
+ | - [[PAM]] anpassen | ||
+ | - **Ereignisüberwachung** | ||
+ | - [[Systemprotokolle]] regelmäßig lesen | ||
+ | - [[server: | ||
+ | |||
+ | ==== Links ==== | ||
+ | * :!: Weitere [[security: | ||
+ | * [[http:// | ||
+ | * **[[http:// | ||
+ | |||
+ | ===== Tools ===== | ||
+ | * **cruft** untersucht das komplette Dateisystem nach Dateien, die eigentlich nicht vorhanden sein sollten, beziehungsweise nach Dateien, die sich nicht mehr im Dateisystem finden lassen. Hierzu wird im Wesentlichen auf die Informationen vom [[Paketmanager]] (aus den Dateien im Verzeichnis ''/ | ||
+ | * sxid | ||
+ | * chkrootkit | ||
+ | |||
+ | |||
+ | ===== Mounten von Dateisystemen ===== | ||
+ | |||
+ | Beim Mounten (Einhängen in das Dateisystem) von ext2-Partitionen gibt es diverse Optionen, die dem Kommando mount übergeben werden oder die direkt in die Datei /etc/fstab eingetragen werden können. Ein solcher Eintrag könnte beispielsweise wie folgt aussehen: | ||
+ | |||
+ | / | ||
+ | |||
+ | Die Optionen finden sich in der vierten Spalte. Die Option nosuid ignoriert gesetzte SUID- und GUID-Bits auf dieser Partition. Eine gesetzte Option noexec verhindert, dass auf dieser Partition befindliche Programme ausgeführt werden können, und nodev ignoriert Device-Dateien. Dabei ist zu beachten: | ||
+ | |||
+ | Dies bezieht sich **nur auf ext2-Dateisysteme**. | ||
+ | |||
+ | Auch solche Optionen können relativ leicht umgangen werden. | ||
+ | |||
+ | Hierzu ein Beispiel: | ||
+ | |||
+ | fr@sushi:/ | ||
+ | |||
+ | /dev/hda3 on /tmp type ext2 (rw, | ||
+ | fr@sushi:/ | ||
+ | bash: ./date: Keine Berechtigung | ||
+ | fr@sushi:/ | ||
+ | Sun Jul 29 14:40:32 CEST 2001 | ||
+ | ** | ||
+ | Viele Tools, die von Hackern benutzt werden, versuchen im Verzeichnis /tmp Dateien anzulegen und diese auszuführen.** Mit der Option noexec kann man dem Angreifer zumindest das Leben etwas schwerer machen. | ||
+ | |||
+ | * Da mittlerweile viele Distributionen tmpfs benutzen, muss der Eintrag in der ''/ | ||
+ | |||
+ | tmpfs / | ||
+ | |||
+ | * tmpfs arbeitet wie eine Ramdisk indem es für die tempären Dateien zuerst den Arbeitsspeicher benutzt und erst wenn es eng wird auslagert. | ||
+ | |||
+ | ===== Absicherung des Bootloaders ===== | ||
+ | Nachdem das System mit allen benötigten Programmen eingerichtet ist, kann mit einigen weiteren Aktionen die Sicherheit des Systems weiter erhöht werden. | ||
+ | |||
+ | Jede Person, die Zugang zur Tastatur des Systems hat, kann eine Administrator-Shell bekommen und beispielsweise alle Passwörter ändern, indem am Bootprompt dateiname- des-bootkernels init=/ | ||
+ | |||
+ | Wenn Lilo als Bootloader verwendet wird, muss die Datei / | ||
+ | < | ||
+ | image=/ | ||
+ | |||
+ | label=Linux | ||
+ | read-only | ||
+ | password=hackme | ||
+ | restricted | ||
+ | </ | ||
+ | |||
+ | Danach muss lilo noch einmal aufgerufen werden. Sorgen Sie dafür, dass die Datei / | ||
+ | |||
+ | Die genannten Einträge können am Anfang der Konfigurationsdatei allgemein gültig für alle Kernel in der Konfiguration angegeben werden oder aber innerhalb eines Abschnitts der Konfigurationsdatei nur für bestimmte Kernel. | ||
+ | |||
+ | Wird auf dem System GRUB verwendet, so müssen folgende Zeilen der Datei / | ||
+ | |||
+ | timeout 3 | ||
+ | |||
+ | password hackme | ||
+ | |||
+ | Die Option timeout sorgt nach der angegebenen Zeit dafür, dass der Standardeintrag gebootet wird. | ||
+ | |||
+ | |||
+ | |||
+ | ===== Festplattenpartitionen ===== | ||
+ | |||
+ | Die Einteilung des verfügbaren Festplattenplatzes hängt von der Verwendung des Systems ab. Hierzu sollten Sie einige Dinge beachten: | ||
+ | |||
+ | Jede Partition, auf die die Benutzer des Systems Schreibzugriff haben, sollte auf einer eigenen Partition liegen, beispielsweise in den Bereichen /home und /tmp. Dies verhindert, dass ein Benutzer das Root-Dateisystem (/) unbenutzbar macht und das gesamte System in einen instabilen Zustand bringt. Es bleibt natürlich ein gewisser Platz (meist fünf Prozent, dieser Wert kann bei ext2/3 mit tune2fs, Parameter '' | ||
+ | |||
+ | Es sollte für jeden Bereich, der automatisch mit Daten gefüllt wird (beispielsweise /var und hier insbesondere das Verzeichnis /var/log), eine eigene Partition vorgesehen werden. Auf Debian-Systemen sollte /var großzügiger bemessen werden, da unter / | ||
+ | |||
+ | Wenn Software installiert werden soll, die nicht in der Debian-Distribution enthalten ist, sollten auch diese Bereiche auf eigenen Partitionen liegen; diese werden dann bei einer Neuinstallation des Systems nicht überschrieben. Nach dem „File Hierarchy Standard“ (FHS) sind dies /opt oder /usr/local. | ||
+ | |||
+ | |||
+ | ===== Das Paket task-harden ===== | ||
+ | |||
+ | Um sicherzustellen, | ||
+ | |||
+ | Das Debian-Team ist dabei der Meinung, dass es besser ist, einen Dienst eine Zeit lang nicht zur Verfügung zu stellen, statt einem Angreifer einen Angriffspunkt zu liefern. | ||
+ | |||
+ | Das Paket task-harden besitzt definierte Abhängigkeiten zu diversen anderen Paketen, die auch gesondert installiert werden können. Diese decken kleinere Bereiche ab, so dass es möglich ist, einzelne Dienste oder bestimmte Systeme gezielt zu schützen. Diese Pakete sind: | ||
+ | |||
+ | harden - Makes your system hardened. | ||
+ | |||
+ | harden-3rdflaws - Avoid packages with security problems. | ||
+ | |||
+ | harden-clients - Avoid clients that are known to be insecure. | ||
+ | |||
+ | harden-development - Development tools for creating more secure programs. | ||
+ | |||
+ | harden-doc - Useful documentation to secure a Debian system. | ||
+ | |||
+ | harden-environment - Hardened system environment. | ||
+ | |||
+ | harden-localflaws - Avoid packages with security holes. | ||
+ | |||
+ | harden-nids - Harden a system by using a network intrusion detection system. | ||
+ | |||
+ | harden-remoteaudit - Audit your system from this host. | ||
+ | |||
+ | harden-remoteflaws - Avoid packages with security holes. | ||
+ | |||
+ | harden-servers - Avoid servers that are known to be insecure. | ||
+ | |||
+ | harden-surveillance - Check services and/or servers automaticly. | ||
+ | |||
+ | harden-tools - Tools to enhance or analyze the security of the local system. | ||
+ | |||
+ | ===== Die Datei / | ||
+ | |||
+ | |||
+ | Hier sollten einige Einstellungen zum Benutzer-Login und zur grundsätzlichen Konfiguration vorgenommen werden. | ||
+ | |||
+ | FAIL_DELAY | ||
+ | |||
+ | Diese Variable sollte auf einen höheren Wert gesetzt werden, um „Brute-Force“-Angriffe auf einem Terminal zu erschweren. Wenn ein falsches Passwort eingegeben wird, muss der Benutzer 10 Sekunden warten, bis ein neuer Login-Versuch gestartet werden kann. Dies frisst einiges an Zeit, wenn versucht wird, ein Passwort zu erraten. Diese Einstellung gilt nur, wenn getty benutzt wird; bei mingetty beispielsweise ist diese Einstellung ohne Wirkung. | ||
+ | |||
+ | FAILLOG_ENAB | ||
+ | |||
+ | Mit dieser Variablen werden fehlgeschlagene Logins im Logfile verzeichnet. Dies ist wichtig, wenn „Brute-Force“-Angriffe aufgezeichnet werden sollen. | ||
+ | |||
+ | LOG_UNKFAIL_ENAB | ||
+ | |||
+ | Wenn die Variable FAILLOG_ENAB auf yes gesetzt wird, so sollte auch diese Variable auf yes gesetzt werden. Diese Einstellung schreibt auch unbekannte Benutzernamen bei einem Login-Versuch ins Logfile. Es ist darauf zu achten, dass die entsprechende Logdatei nicht von allen Benutzern gelesen werden kann, da Benutzer häufig anstelle des Benutzernamens das Passwort eingeben. Damit andere Benutzer die Logdatei nicht lesen können, sind die Zugriffsrechte beispielsweise auf 640 zu setzen. | ||
+ | |||
+ | SYSLOG_SU_ENAB | ||
+ | |||
+ | Diese Einstellung verzeichnet die Benutzung des Kommandos su im Syslog. | ||
+ | |||
+ | SYSLOG_SG_ENAB | ||
+ | |||
+ | Diese Einstellung erfüllt die gleiche Funktion wie die vorhergehende, | ||
+ | |||
+ | MD5_CRYPT_ENAB | ||
+ | |||
+ | Wie schon beschrieben, | ||
+ | |||
+ | PASS_MAX_LEN | ||
+ | |||
+ | Wenn MD5-Passwörter in der PAM-Konfiguration aktiviert sind, so sollte diese Variable auf den gleichen Wert wie dort gesetzt werden. | ||
+ | |||
+ | |||
+ | |||
+ | ===== Kernel-Features ===== | ||
+ | |||
+ | |||
+ | Viele Funktionen des Kernels können während der Laufzeit verändert werden, beispielsweise indem mit dem Kommando echo ein Wert in die entsprechende Datei geschrieben wird, oder mit dem Kommando sysctl. Mit dem Kommando sysctl -A kann angezeigt werden, welche Einstellungen verändert werden können und welche Optionen verfügbar sind. In seltenen Fällen muss etwas verändert werden, aber auf diesem Weg kann die Sicherheit des Systems erhöht werden. | ||
+ | |||
+ | / | ||
+ | |||
+ | Wird diese Variable auf den Wert 1 gesetzt, so verhält sich das System nach außen wie ein Windows-System, | ||
+ | |||
+ | / | ||
+ | |||
+ | Wenn ICMP-Pakete auf der vorgeschalteten Firewall nicht geblockt werden sollen, so ist diese Variable auf den Wert 0 zu setzen. | ||
+ | |||
+ | / | ||
+ | |||
+ | Diese Option ist ein zweischneidiges Schwert: Einerseits schützt sie gegen „Syn-Flooding-Attacken“, | ||
+ | |||
+ | / | ||
+ | |||
+ | Mit dieser Option werden Pakete mit unerlaubten Adressen, beispielsweise wegen eines fehlerhaften Routings, im Netzwerk protokolliert. |