Product SiteDocumentation Site

Anhang B. Anhang

B.1. Der Abhärtungsprozess Schritt für Schritt

Eine Anleitung, die Schritt für Schritt darstellt, wie ein Debian 2.2 GNU/Linux-System nach der Installation abgehärtet wird, ist unten aufgeführt. Das ist nur eine denkbare Herangehensweise für einem solchen Vorgang. Sie ist am Absichern von Netzwerkdiensten orientiert und stellt den gesamten Anlauf der Konfiguration vor. Vergleichen Sie auch Abschnitt B.2, „Prüfliste der Konfiguration“.
  • Installieren Sie das System. Beachten Sie dabei die Informationen dieses HOWTOs bezüglich der Partitionierung. Nach der Basis-Installation nehmen Sie eine angepasste Installation vor. Wählen Sie keine Task-Pakete aus. Aktivieren Sie shadow-Passwörter.
  • Entfernen Sie mit dselect alle nicht benötigten, aber ausgewählten Pakete, bevor Sie [I]nstallation wählen. Belassen Sie nur die absolut notwendige Software auf dem System.
  • Aktualisieren Sie die ganze Software mit den aktuellen Paketen von security.debian.org, wie bereits unter Abschnitt 4.2, „Ausführen von Sicherheitsaktualisierungen“ beschrieben.
  • Implementieren Sie die in dieser Anleitung vorgeschlagenen Maßnahmen zu Benutzer-Quotas, Ausgestaltung des Anmeldevorgangs und Lilo.
  • Machen Sie sich eine Liste von allen Diensten, die derzeit auf Ihrem System laufen. Versuchen Sie dazu Folgendes:
      $ ps aux
      $ netstat -pn -l -A inet 
      # /usr/sbin/lsof -i | grep LISTEN
    Damit das dritte Kommando funktioniert, werden Sie lsof-2.2 installieren müssen (und es als Root laufen lassen). Beachten Sie, dass lsof das Wort LISTEN passend zu Ihrer Lokalisation übersetzen kann.
  • Um einen unnötigen Dienst zu entfernen, stellen Sie zunächst fest, wie er gestartet wird und welches Paket ihn zur Verfügung stellt. Sie können dies ganz einfach machen, indem Sie das Programm prüfen, das auf dem Socket lauscht. Das nachfolgende Shell-Skript, das die Programme lsof und dpkg verwendet, macht genau das:
    #!/bin/sh
    # FIXME: this is quick and dirty; replace with a more robust script snippet
    for i in `sudo lsof -i | grep LISTEN | cut -d " " -f 1 |sort -u` ; do
      pack=`dpkg -S $i |grep bin |cut -f 1 -d : | uniq`
      echo "Service $i is installed by $pack";
      init=`dpkg -L $pack |grep init.d/ `
      if [ ! -z "$init" ]; then
        echo "and is run by $init"
      fi
    done
  • Wenn Sie einen unerwünschten Dienst finden, entfernen Sie das Paket (mit dpkg --purge). Oder benutzen Sie update-rc.d (siehe Abschnitt 3.5.1, „Daemons abschalten“), um ihn aus dem Start-Prozess zu entfernen.
  • Überprüfen Sie bei inetd-Diensten (werden durch den Superdaemon gestartet), welche Dienste in /etc/inetd.conf aktiviert sind. Verwenden Sie dazu Folgendes:
      $ grep -v "^#" /etc/inetd.conf | sort -u
    Deaktivieren Sie dann diejenigen Dienste, die Sie nicht benötigen, indem Sie die Zeile in /etc/inetd.conf auskommentieren, das Paket entfernen, oder indem Sie update-inetd benutzen.
  • Wenn Sie Dienste eingehüllt haben (und /usr/sbin/tcpd benutzen), prüfen Sie, ob die Dateien /etc/hosts.allow und /etc/hosts.deny passend zu Ihrer Richtlinie für die Dienste konfiguriert sind.
  • Wenn der Server mehr als eine externe Schnittstelle benutzt, können Sie Dienste darauf beschränken, auf bestimmten Schnittstellen zu lauschen. Ob das möglich ist, hängt aber von den Diensten ab. Wenn Sie zum Beispiel internen FTP-Zugriff erlauben wollen, lassen Sie den FTP-Daemon nur auf der internen Schnittstelle lauschen, nicht auf allen (d.h. 0.0.0.0:21).
  • Booten Sie die Maschine neu, oder wechseln Sie in den Single-User-Modus und zurück in den Multi-User-Modus mit:
      # init 1
      (....)
      # init 2
  • Prüfen Sie die nun angebotenen Dienste und wiederholen Sie gegebenenfalls die letzten Schritte.
  • Installieren Sie jetzt die benötigten Dienste, falls es noch nicht geschehen ist, und konfigurieren Sie sie passend.
  • Prüfen Sie mit folgendem Shell-Befehl, unter welchem Benutzer die verfügbaren Dienste laufen:
      # for i in `/usr/sbin/lsof -i |grep LISTEN |cut -d " " -f 1 |sort -u`; \
      > do user=`ps ef |grep $i |grep -v grep |cut -f 1 -d " "` ; \
      > echo "Dienst $i läuft als Benutzer $user"; done
    Überlegen Sie, ob Sie diese Dienste einem bestimmten Benutzer oder Gruppe zuweisen wollen und sie vielleicht auch in eine chroot-Umgebung einsperren wollen, um die Sicherheit zu erhöhen. Sie können dies tun, indem Sie die /etc/init.d-Skripte ändern, die den Dienst starten. Die meisten Dienste benutzen unter Debian start-stop-daemon, der die dafür Optionen (--change-uid und --chroot) zur Verfügung stellt. Ein paar warnende Worte zum Einsperren in eine chroot-Umgebung: Sie müssen alle Dateien, die durch das Paket des Dienstes installiert wurden (verwenden Sie dpkg -L), und alle Pakete, von denen es abhängt, in die Chroot-Umgebung legen. Informationen, wie das Programm ssh in eine chroot-Umgebung eingesperrt wird, finden Sie unter Abschnitt B.7, „Chroot-Umgebung für SSH.
  • Wiederholen Sie die Schritte oben um zu prüfen, ob nur die gewünschten Dienste laufen und ob sie unter der gewünschten Benutzer/Gruppen-Kombination laufen.
  • Testen Sie die installierten Dienste, um festzustellen, ob sie wie erwartet arbeiten.
  • Überprüfen Sie das System, indem Sie einen Scanner zur Abschätzung der Verwundbarkeit (zum Beispiel nessus) benutzen, um Angriffsmöglichkeiten (Fehlkonfigurationen, alte oder nicht benötigte Dienste) zu finden.
  • Installieren Sie Instrumente zur Entdeckung von Eindringlingen in Netzwerk und Hosts (wie snort und logcheck).
  • Wiederholen Sie den Netzwerk-Scan und prüfen Sie, ob das System zur Erkennung von Eindringlingen funktioniert.
Die richtig Paranoiden überlegen sich auch Folgendes:
  • Fügen Sie dem System Firewall-Fähigkeiten hinzu, die eingehende Verbindungen nur zu angebotenen Diensten erlauben und ungenehmigte ausgehende Verbindungen verhindern.
  • Überprüfen Sie erneut die Installation auf Angriffspunkte mit einem Netzwerk-Scanner.
  • Prüfen Sie ausgehende Verbindungen vom System zu Hosts außerhalb mit einem Netzwerk-Scanner, um sicherzustellen, dass ungewollte Verbindungen keinen Weg nach draußen finden.
FIXME: this procedure considers service hardening but not system hardening at the user level, include information regarding checking user permissions, SETUID files and freezing changes in the system using the ext2 file system.