Securing Debian HOWTO

Im „Securing Debian HOWTO“ (das englische Original ist erreichbar unter http://www.debian.org/doc/manuals/securing-debian-howto/index.html) finden sich Informationen an welchen Stellen ein Debian System noch sicherer gemacht werden kann. Daher soll an dieser Stelle nur auf einige grundlegende Dinge hingewiesen werden.

Zunächst müssen Sie sich darüber im klaren sein das ein System nur dann 100%tig sicher ist wenn keinerlei Dienste auf diesem nach aussen hin über das Netzwerk angeboten werden oder sogar garkeine Verbindung zu einem Netzwerk besteht. Dies ist in der Realität natürlich unsinnig und nicht durchsetzbar, das System würde so nicht sinnvoll benutzbar sein.

Man sollte sich auch darüber im klaren sein das die Anforderungen an die Sicherheit stark vom Einsatz des Systems abhängig sind. Ein Privatnutzer wird deutlich andere Anforderungen stellen wie der Administrator eines Firewall Systems. Viele Einstellungen die die Sicherheit eines Systems erhöhen vereinfachen die Bedienung nicht unbedingt, auch hier ist zwischen Benutzbarkeit und Paranoia abzuwägen.

Die Softwareseitigen Einstellungen an einem Debian System die zur Verbesserung der Sicherheit dienen, können nicht den physikalischen Zugriff auf das System verhindern. Wenn von Systemsicherheit die Rede ist muß auch bedacht werden das zu einem völlig sicheren System auch gehört das der Zugriff auf die Hardware unterbunden wird. Ein Angreifer der Zugriff auf die Hardware hat kann beispielsweise über eine Boot-CD oder Diskette Zugriff auf das System erlangen. Auch ein BIOS- oder Lilo-Passwort kann den Diebstahl der Festplatte nicht verhindern. Ein völlig sicheres System gehört also hinter gut verschlossene Türen. Doch Betrachtungen zur Hardwaresicherung sollen an dieser Stelle nicht weiter verfolgt werden.

Vor und während der Installation

Bereits vor der Installation können einige Maßnahmen zur Sicherheit des Systems getroffen werden. Das Debian Installationsprogramm enthält ebenfalls einige Punkte an denen die Sicherheit des Systems verbessert werden kann.

Superuser Passwort

Während der Installation wird nach einem Passwort für den Superuser (root) gefragt. Zusätzlich kann ein Benutzer dem System hinzugefügt, auch für diesen ist dann ein Passwort einzugeben. Auch wenn es möglich ist hier ein sehr einfaches Passwort zu verwenden, so ist dies natürlich nicht empfehlenswert. Die Auswahl eines guten Passwortes ist auf vielen Webseiten im Netz beschrieben, es sind dabei nur einige einfache Regeln zu beachten. Eine Suche nach „auswahl gutes passwort“ mittels Google führt schnell zum Erfolg.

Grundsätzlich sollte auf jedem System neben dem Account für den Superuser auch ein Account für einen Benutzer angelegt werden der nicht alle Rechte hat. Dieser Benutzeraccount sollte für alle Logins auf dem System verwendet werden und nur wenn für eine bestimmte Aufgabe die Zugriffsrechte nicht ausreichend sind sollte mittels des Kommandos su die Identität gewechselt werden. Nach Beendigung der Arbeiten als Superuser sollte man sich umgehend wieder als normaler Benutzer im System bewegen.

Mailinglisten

Lesen Sie die Debian Security Mailinglisten. Relevant sind in diesem Zusammenhang debian-security-announce, dort werden Sicherheitslücken bekanntgegeben und es wird über Bugfixes dagegen informiert, sowie debian-security@lists.debian.org, dort werden alle Sicherheitstemen rund um Debian behandelt.

Wenn Sie Meldungen über Sicherheitsupdates per E-Mail bekommen wollen, so senden Sie eine Mail an: debian-security-announce-request@lists.debian.org mit dem Wort „subscribe“ im Betreff der Mail. Die Anmeldung zu dieser Mailingliste ist auch über die Webseite http://www.debian.org/MailingLists/subscribe möglich.

Auf dieser Mailingliste kommen nur sehr wenige Mails, man erfährt dort aber sehr schnell über Probleme mit Paketen informiert und erfahren eine Adresse an der eine fehlerbereinigte Version zur Verfügung steht.

Nach der Installation

Nachdem das System mit allen benötigten Programmen eingerichtet ist, kann mit einigen weiteren Aktionen die Sicherheit des Systems weiter erhöht werden.

Absicherung des Bootloaders

Jede Person die Zugang zur Tastatur des Systems hat kann eine Superuser-Shell bekommen und beispielsweise alle Passwörter ändern, indem am Bootprompt dateiname-des-bootkernels init=/bin/sh eingegeben wird. Um dies zu verhindern kann ein Passwort für den Boot-Loader gesetzt werden. Dies kann global für alle Boot-Images geschehen oder individuell für jedes einzelne.

Wenn Lilo als Bootloader verwendet wird, muß die Datei /etc/lilo.conf um die Einträge password und restricted erweitert werden.

image=/boot/2.2.14-vmlinuz
   label=Linux
   read-only
   password=hackme
   restricted

Danach muß lilo nochmal aufgerufen werden. Sorgen Sie dafür das die Datei /etc/lilo.conf nur vom Superuser gelesen werden kann, da das Passwort unverschlüsselt in der Konfigurationsdatei steht, dies ist mit dem Kommando chmod 600 /etc/lilo.conf zu erreichen. Die Option restricted bewirkt das nur nach einem Passwort gefragt wird wenn der Benutzer versucht zusätzliche Parameter am Bootprompt anzugeben. Die Auswahl verschiedener, bereits in der Konfiguration eingetragener Kernel ist weiterhin möglich. Wird der Eintrag restricted weggelassen, fragt Lilo in jedem Fall nach einem Passwort.

Die genannten Einträge können am Anfang der Konfigurationsdatei allgemeingültig für alle Kernel in der Konfiguration angegeben werden, oder aber innerhalb eines Abschnittes der Konfigurationsdatei nur für bestimmte Kernel.

Wird auf dem System GRUB verwendet, so müssen folgende Zeile der Datei /boot/grub/menu.lst hinzugefügt werden:

timeout 3
password hackme

Die Option timeout sorgt nach der angegebenen Zeit dafür das der Standardeintrag gebootet wird.

Debian Sicherheitsupdates

Sobald eine neue Sicherheitslücke in einem Debian Paket oder einer Software dieses Paketes bekannt wird, wird von den Paket-Maintainern innerhalb weniger Stunden oder Tage ein Update der betroffenen Pakete bereitgestellt. Das aktualisierte Paket wird unter http://security.debian.org zur Verfügung gestellt.

Um auch die Sicherheitsupdates bei jeder Aktualisierung des Systems automatisch durchzuführen, muß folgende Zeile in die Datei /etc/apt/sources.list eingefügt werden:


deb http://security.debian.org/debian-security stable/updates main contrib non-free

In Ländern die den Import von Kryptografischer Software nicht verbieten kann zusätzlich folgende Zeile hinzugefügt werden.


deb http://security.debian.org/debian-non-US stable/non-US main contrib non-free

Natürlich können auch die entsprechenden deb-src Zeilen hinzugefügt werden wenn auch der Zugriff auf die Sourcen gewährleistet sein soll. Danach ist nur noch ein apt-get update gefolgt von einem apt-get upgrade nötig um das System auf den neuesten Stand zu bringen.

PAM - Pluggable Authentication Modules

PAM erlaubt dem Systemadministrator die Auswahl auf welche Weise die verschiedenen Anwendungen eine Authentifizierung durchführen sollen. Hierzu muß jede Anwendung auf die Verwendung von PAM angepasst sein, dies ist seit Debian 2.2 für die meisten Programme der Fall. Ältere Versionen von Debian benutzen noch keine Authentifizierung über PAM. Für jede Anwendung existiert im Verzeichnis /etc/pam.d eine eigene Konfigurationsdatei.

Mit PAM bietet sich die Möglichkeit mehrere Authentifizierungsschritte, vom Benutzer unbemerkt, durchzuführen. Beispielsweise kann eine Authentifizierung sowohl gegen eine Datenbank als auch gegen die Datei /etc/passwd erfolgen.

Über PAM können viele Restriktionen auferlegt werden, genauso gut ist es aber möglich das System weit zu öffnen und so Sicherheitslücken zu schaffen. Bei der Veränderung von Einstellungen von PAM sollte also größte Vorsicht bewahrt werden. Eine typische Konfigurationszeile enthält in der dritten Spalte ein Kontrollfeld. Dieses sollte auf den Wert „requisite“ gesetzt werden, so das bei einem Fehler in einem Modul ein Login verhindert wird.

Zuerst sollte die Unterstützung für MD5 verschlüsselte Passwörter aktiviert werden, um so zu verhindern das ein Passwort leicht von einem Programm über eine Datenbank ermittelt werden kann. Die folgenden Zeilen sollten in allen Dateien in /etc/pam.d/ hinzugefügt werden die Zugang zu dem System erlauben, beispielsweise login und ssh.


password   required     pam_cracklib.so retry=3 minlen=12 difok=3
password   required     pam_unix.so use_authtok nullok md5

Der erste Eintrag lädt das Cracklib PAM Modul, welches eine strengere Anforderungen an das verwendete Passwort stellt. Passwörter müssen mit diesem Modul mindestens 12 Zeichen haben, bei einer Passwortänderung müssen mindestens drei Zeichen verändert werden. Weiterhin werden nur 3 Login Versuche erlaubt.

Die zweite Zeile benutzt die Standard Authentifizierung des Unix Systems mit einer MD5 Verschlüsselung und erlaubt auch leere Passwörter. Die use_authtok Option wird benötigt um das Passwort vom vorhergehenden Modul zu übernehmen.

Um den Zugriff so zu beschränken das der Benutzer root sich lediglich auf den lokalen Terminal einloggen kann, muß die folgende Zeile in der Datei /etc/pam.d/login aktiviert werden:


auth     requisite  pam_securetty.so

Weiterhin müssen die Terminal von denen dem Benutzer root der Zugriff auf das System gewährt werden soll in die Datei /etc/security/access.conf eingetragen werden. Um auch die eigentlichen Benutzer des Systems zu beschränken, beispielsweise in der Anzahl der gleichzeitigen Logins, muß noch die folgende Zeile aktiviert werden:


session  required   pam_limits.so

In der Datei /etc/pam.d/passwd ist nun noch die erste Zeile zu verändern. Dort muß die Option „md5“ eingetragen werden um mit MD5 verschlüsselte Passwörter zu benutzen. Weiterhin kann die minimale Passwortlänge beispielsweise von 4 auf 6 Zeichen erhöht werden. Ebenso kann eine maximale Länge gesetzt werden falls dies gewünscht ist. Schlußendlich sollte die Zeile in etwas wie folgt aussehen:


password   required   pam_unix.so nullok obscure min=6 max=11 md5

Wenn das Kommando su so geschützt werden soll das es nur von bestimmten Benutzern ausgeführt werden kann, muß zunächst eine neue Gruppe dem System hinzugefügt werden. Üblich ist es hierzu die Gruppe „wheel“ zu verwenden, da diese noch nicht existiert und es somit unwahrscheinlich ist das bereits Dateien zu dieser Gruppe gehören. Dieser Gruppe ist der Benutzer root sowie alle Benutzer die das Kommando su ausführen sollen, hinzuzufügen. In der Datei /etc/pam/su ist dann folgender Eintrag zu ergänzen:


auth        requisite   pam_wheel.so group=wheel debug

Somit wird sichergestellt das nur Benutzer die der Gruppe „wheel“ angehören das Kommando su ausführen können. Alle anderen Benutzer bekommen eine entsprechende Meldung wenn sie versuchen das Kommando auszuführen.

Wenn nur bestimmten Benutzern eine Authentifizierung über PAM erlaubt werden soll, so ist dies relativ einfach über Dateien zu erreichen in denen die Benutzer aufgeführt sind denen der Login erlaubt oder verboten werden soll. Wenn beispielsweise nur dem Benutzer „fr“ der Login über ssh erlaubt werden soll, so muß dieser in die Datei /etc/sshusers-allowed eingetragen werden und folgender Eintrag muß der Datei /etc/pam.d/ssh hinzugefügt werden.


auth        required    pam_listfile.so item=user sense=allow file=/etc/sshusers-allowed onerr=fail

Zu guter letzt sind folgende Einträge der Datei /etc/pam.d/other hinzuzufügen:


Last, but not least, create /etc/pam.d/other and enter the following lines:

auth     required       pam_securetty.so
auth     required       pam_unix_auth.so
auth     required       pam_warn.so
auth     required       pam_deny.so
account  required       pam_unix_acct.so
account  required       pam_warn.so
account  required       pam_deny.so
password required       pam_unix_passwd.so
password required       pam_warn.so
password required       pam_deny.so
session  required       pam_unix_session.so
session  required       pam_warn.so
session  required       pam_deny.so

Diese Voreinstellungen sind erst einmal eine sinnvolle Vorgabe, es werden grundsätzlich erstmal alle PAM Zugriffe verweigert.

Ein Aufmerksamer Blick sollte auch in die Datei /etc/security/limits.conf geworfen werden. Hier werden Resourcen für die Benutzer des Systems festgelegt.

Anpassungen der /etc/inetd.conf

Generell sollten alle nicht benötigten Dienste auf einem System deaktiviert werden. Jeder laufende, nicht unbedingt benötigte Dienst stellt ein potentielles Risiko dar. Dies betrifft beispielsweise die Dienste echo, charges, discard, daytime, time, talk, ntalk sowie die extrem unsicheren „r“-Kommandos wie rsh, rlogin, rcp. Für letztere ist es in jedem Fall besser das Kommando ssh zu benutzen.

Nachdem die nicht benötigten Dienste deaktiviert sind, sollte geprüft werden ob der inetd überhaupt noch benötigt wird. Dienste können natürlich auch als Daemon gestartet werden statt den inetd zu benutzen. Denial of Service (DoS) Angriff können auch auf den inetd als Ziel ausgeführt werden und so beispielsweise die Systemlast eines Rechners in die Höhe treiben. Wenn trotzdem nicht auf den Einsatz eines inetd verzichtet werden kann, so sollte unter Umständen ein alternativer inetd eingesetzt werden der vielfältiger konfiguriert werden kann, beispielsweise der xinetd oder der rlinetd.

Veränderungen an der inetd.conf können von Hand vorgenommen werden, Debian bietet aber eine einfach zu benutzende Alternative dazu: mit dem Programm update-inetd können einzelne Dienste verändert werden.

Beipiel:

/usr/sbin/update-inetd --disable telnet
/etc/init.d/inetd restart

Nach jeder Änderung ist der inetd noch neu zu starten.

Das Kommando update-inetd kennt noch viele andere Optionen, beispielsweise auch um Einträge zu löschen:


sushi:/home/fr# 
Usage: update-inetd [OPTION] MODE ARGUMENT

Options:
  --version                       output version information and exit
  --help                          display this help and exit
  --verbose                       explain what is being done
  --debug                         enables debugging mode
  --multi                         allow multiple removes/disables
  --file FILENAME                 use FILENAME instead of /etc/inetd.conf
  --group GROUPNAME               add entry to section GROUPNAME
  --comment-chars CHARACTERS      use CHARACTERS as comment characters
  --pattern PATTERN               use PATTERN to select a service

Modes:
  --add ENTRY                     add ENTRY to /etc/inetd.conf
  --remove ENTRY                  remove ENTRY (regular expression)
  --enable SERVICE                enable SERVICE in /etc/inetd.conf
  --disable SERVICE               disable SERVICE in /etc/inetd.conf

In order to prevent the shell from changing your ENTRY definition
you have to quote the ENTRY using single or double quotes. You can
use tabs (the tab character or \t) and spaces to separate the fields
of the ENTRY. If you want to enable/disable more than one SERVICE you
can use a comma separated list of services (no whitespace characters
allowed).


/etc/login.defs

Nun sollten einige Einstellungen zum Benutzer Login und zur grundsätzlichen Konfiguration vorgenommen werden.


FAIL_DELAY          10

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, muß der Benutzer 10 Sekunden warten bis ein neuer Login Versuch gestartet werden kann. Dies frist 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        yes

Mit dieser Variablen werden fehlgeschlagene Logins im Logfile verzeichnet. Dies ist wichtig wenn „Brute-Force“ Angriffe aufgezeichnet werden sollen.


LOG_UNKFAIL_ENAB    yes

Wenn die Variable FAILLOG_ENAB auf yes gesetzt wird, so sollte dies Variable auf yes gesetzt werden. Diese Einstellung schreibt auch unbekannte Benutzernamen bei einem Login ins Logfile. Es ist darauf zu achten das die entsprechenden Logdateien nicht von allen Benutzern gelesen werden können, da Benutzer häufig anstelle des Benutzernamens das Passwort eingeben. Damit andere Benutzer diese Datei nicht lesen können sind die Zugriffsrechte beispielsweise auf 640 zu setzen.


SYSLOG_SU_ENAB      yes

Diese Einstellung verzeichnet die Benutzung des Kommandos su im Syslog.


SYSLOG_SG_ENAB      yes

Diese Einstellung erfüllt die gleiche Funktion wie die vorhergehende, jedoch für das Kommando sg.


MD5_CRYPT_ENAB      yes

Wie schon beschrieben reduzieren MD5 verschlüsselte Passwörter die Gefahr des erschleichens eines Passwortes durch entsprechende Software. Wenn auf dem System noch „slink“ (Debian 2.1) eingesetzt wird so ist vor dem aktivieren dieser Option ein Blick in die Dokumentation zu werfen. Ansonsten wird diese Einstellung über PAM realisiert.


PASS_MAX_LEN        50

Wenn MD5 Passwörter in der PAM Konfiguration aktiviert sind, so sollte diese Variable auf den gleichen Wert wie dort gesetzt werden.

Benutzung von Quotas

Eine saubere Definition von Benutzerquotas ist wichtig um zu verhindern das Benutzer ein komplettes Dateisystem mit Daten füllen können.

Es können grundsätzlich zwei verschieden Quota Systeme eingesetzt werden - Benutzer- oder Gruppen-orientierte Quotas. Dies ist bei der Planung zu berücksichtigen.

Einige Punkte sind bei der Benutzung von Quotas zu beachten:

Für jede Partition, bzw. jedes Verzeichnis, auf das Benutzer einen Schreibzugriff haben, sollten Quotas aktiviert werden. Für diese Bereiche ist ein sinnvoller Wert zu errechnen der eine Balance zwischen Sicherheit und Benutzbarkeit des Systems schafft.

Doch nun zur Benutzung von Quotas: Zunächst muß geprüft werden ob im Kernel die Quota Unterstützung aktiviert ist. Wenn dies nicht der Fall ist, muß ein neuer Kernel erzeugt werden. Danach ist zu prüfen ob das Paket quota installiert ist, ggf. ist dies zu installieren.

Quotas werden aktiviert indem in der Datei /etc/fstab der Eintrag für das entsprechende Dateisystem in der Spalte „Options“ um den Eintrag usrquota erweitert wird. Wenn statt Benutzer-Quota, Gruppen-Quota benutzt werden sollen, lautet der Eintrag grpquota. Natürlich können auch beide gleichzeitig verwendet werden. Nun muß im Root-Verzeichnis des Dateisystems eine leere Datei quota.user und quota.group erzeugt werden.

Das Quota System muß nun neugestartet werden, dies geschieht durch die Kommandos /etc/init.d/quota stop und /etc/init.d/quota start. Nun können die gewünschten Grenzwerte gesetzt werden.

Um die Quota für einen Benutzer (beispielsweise fr) zu setzen, wird das Kommando edquota -u fr benutzt. Gruppen-Quota werden mit dem Kommando edquota -g gruppe gesetzt. Nun können die Grenzwerte für „soft“ und „hard“ sowie für die Inodes gesetzt werden.

Integrität des Dateisystems

Sind Sie sicher das die, auf einem bereits seit Wochen oder Monaten ans Internet angeschlossenen System, installierten Programme noch die urspünglichen sind? Oder kann es sein das bereits das Programm /bin/login durch eine veränderte Variante ersetzt wurde, die einen unbemerkten Login als Superuser erlaubt...?

Die einzige Methode ein System gegen solche Veränderungen zu schützen, ist die installierten Dateien täglich, wöchentlich oder beispielsweise monatlich (je häufiger dieser Test durchgeführt wird, umso weniger Zeit bleibt einem Eindringling auf dem System zu agieren) mittels eine Checksumme zu prüfen und diese mit vorab gespeicherten Werten zu vergleichen.

Pakete die einen regelmäßigen Check der installierten Pakete ermöglichen sind: sXid, AIDE (Advanced Intrusion Detection Environment) und Tripwire (die aktuelle Version befindet sich im Bereich non-free, eine der nächsten Versionen wird unter der GPL stehen).

Mit dem Paket debsums können alle MD5-Checksummen der installierten Pakete mit der Original Checksumme der Dateien in den Ursprungspaketen verglichen werden.

Mittels debsums -a können alle Pakete des Systems oder aber mit debsums paketname bestimmte Pakete hinsichtlich der Checksummen überprüft werden. Hierbei ist zu beachten das es einem versierten Eindringling durchaus möglich ist auch diese Kontrolle der Checksummen zu beeinflussen. Die ursprünglichen Checksummen der Pakete liegen in den Dateien /var/lib/dpkg/info/paketname.md5sums und können von Angreifer auch angepasst werden. Eine höhere Sicherheit bietet wie schon erwähnt das Paket tripwire.

Sichere Dienste

ssh

Ssh sollte generell für alle Remote-Logins auf einem System eingesetzt werden. Wenn Sie noch telnetd einsetzen, so ändern Sie dies jetzt sofort. Heutzutage ist es sehr einfach den Netzwerkverkehr mitzuschneiden und so an unverschlüsselte Benutzernamen und Passwörter zu gelangen. Die Verwendung von Programmen die keine verschlüsselte Kommunikation erlauben verbietet sich somit von selbst. Auch der Einsatz von hochwertigen Netzwerkkompenenten wie Switches erlaubt Angreifern das „mitlauschen“ auf den angeschlossenen Ports! Die meisten Switches schalten bei zu hoher Last einfach das „switching“ ab und arbeiten wie ein normaler Hub! Verlassen Sie sich nie auf diese Komponenten, sorgen Sie selbst für Sicherheit. Das Paket ssh kann mit dem Kommando apt-get install ssh schnell und einfach installiert werden.

Nun sollten alle Benutzer angewiesen werden ausschliesslich ssh und keinesfalls telnet zu benutzen. Wenn möglich deinstallieren Sie telnet. Auch sollte ein Login als Superuser unmöglich gemacht werden, um Superuser Rechte zu erlangen können die Kommandos su oder besser sudo benutzt werden.

Auch die Konfiguration des ssh Daemons kann zur Erhöhung der Sicherheit noch verbessert werden. In der Datei /etc/ssh/sshd_config verbietet folgende Zeile einen Login via ssh als Superuser:


PermitRootLogin No

Dies verhindert das per Brute-Force Angriff ein Login als Superuser möglich ist, da kein Login als Superuser erlaubt wird. Es sind nun zwei Login-Vorgänge (zunächst als Benutzer, dieser muss dann noch Superuser werden) notwendig.


Listen 666

Wenn der Port auf dem der ssh Daemon läuft verändert wird, so kann dies einen potentiellen Angreifer auch etwas beschäftigen. Es stehen aber verschiedene Netzwerktools zur Verfügung mit deren Hilfe schnell und einfach ermittelt werden kann auf welchem Port ein Dienst läuft. Verwenden Sie hier nicht zuviel Ehrgeiz...


PermitEmptyPasswords no

Leere Passwörter sollte ebenfalls verhindert werden.


AllowUsers alex geka fr

Mit dieser Option wird nur bestimmten Benutzern der Login via ssh erlaubt.


AllowGroups wheel admin

Gleichermassen wird mit dieser Direktive nur bestimmten Gruppen der Zugriff per ssh erlaubt.

Um Benutzern oder Gruppen expliziert den Zugriff zu verbieten, stehen die Optionen DenyUsers und DenyGroups zur Verfügung.


PasswordAuthentication no

Wird diese Option auf „no“ gesetzt, so ist der Login nur Benutzern gestattet deren ssh-Key der Datei ~/.ssh/authorized_keys hinzugefügt wurde. Diese Einstellung ist sehr empfehlenswert! Bei Verwendung eines Key wird das Passwort nicht mehr von Client zum Server übermittelt. Die Authorisierung wird anhand eines Hashes geprüft und der Client erhält lediglich die Freigabe für den Server, oder auch nicht.

Weiterhin ist der SSH Daemon so einzustellen das auschliesslich das Protokoll der Version 2 verwendet wird. Die Protokollversion 1 ist nach aktuellem Kenntnisstand als angreifbar anzusehen und sollte nicht mehr verwendet werden.

Alle diese Optionen beziehen sich auf die Konfigurationsdateien von OpenSSH. Momentan sind drei ssh-Pakete im Umlauf: ssh1, ssh2 und OpenSSH, welches vom OpenBSD Team entwickelt wurde. OpenSSH ist eine komplett freie Implementation eines SSH Daemons, welche sowohl ssh1 als auch ssh2 unterstützt. Wenn das Paket „ssh“ installiert wird, so wird das Paket OpenSSH gewählt.

E-Mail

Das lesen bzw. empfangen von E-Mail mittels POP3 ist das am häufigsten eingesetzte Protokoll ohne Verschlüsselung. Unabhängig davon ob POP3 oder IMAP als Protokoll verwendet wird, beide benutzen Benutzernamen und Passwörter im Klartext und auch die Daten werden unverschlüsselt übertragen. Als Alternative kann auch hier ssh verwendet werden, falls ein Shell-Account auf dem Rechner vorhanden ist.

Mittels fetchmail kann über ssh eine verschlüsselte Verbindung aufgebaut werden, hierzu eine entsprechende .fetchmailrc:


poll my-imap-mailserver.org via "localhost"
  with proto IMAP port 1236
      user "ref" there with password "hackme" is alex here warnings 3600
    folders
      .Mail/debian
    preconnect 'ssh -f -P -C -L 1236:my-imap-mailserver.org:143 -l ref
     my-imap-mailserver.org sleep 15 < /dev/null > /dev/null'

Die wichtigste Zeile ist der „preconnect“ Eintrag. Dieser startet eine ssh Session und installiert einen Tunnel welcher automatisch die Verbindungen zum IMAP Server auf Port 1236 weiterreicht, verschlüsselt. Alternativ kann fetchmail auch mit SSL benutzt werden.

Wenn verschlüsselte IMAP und POP3 Server zur Verfügung gestellt werden sollen, so ist das Paket stunnel zu installieren. Die Daemonen müssen dann über stunnel -p /etc/ssl/certs/stunnel.pem -d pop3s -l /usr/sbin/popd gestartet werden, wobei -l den gewünschten Daemon und -d den Port beschreibt. Die Option -p setzt das SSL Zertifikat.

Mittlerweile sind auch POP und IMAP Server verfügbar die über Verschlüsselungsfunktionen mittels SSL verfügen. Als Server für das POP Protokoll wäre hier apop zu nennen.

BIND

Auf einem unveränderten System läuft der Nameserver BIND nach der Installation mit den Rechten des Benutzers und der Gruppe „root“. BIND kann sehr leicht umkonfiguriert werden, so daß er unter einer anderen Benutzer ID läuft. Leider kann er dann nicht mehr automatisch neue Netzwerkdevices erkennen die während des laufenden Betriebes hinzugefügt wurden, beispielsweise eine PCMCIA Netzwerkkarte in einem Notebook oder auch virtuelle Netzwerkdevices.

In der Datei README.Debian des Nameservers finden sich weitere Informationen wie BIND unter einer anderen Benutzer ID zu laufen zu bringen ist. Wenn möglich sollte darauf verzichtet werden BIND mit Superuserrechten zu benutzen.

Um BIND mit einer anderen Benutzer ID zu starten muß zunächst ein neuer Benutzer und eine entsprechende Gruppe angelegt werden. Es kann beispielsweise als Benutzername und Gruppe der Name „named“ benutzt werden.

Hierzu sind folgende Kommandos notwendig


addgroup named
adduser --system --ingroup named named

Nun muß in der Datei /etc/init.d/bind der Eintrag


start-stop-daemon --start

in


start-stop-daemon --start --quiet --exec /usr/sbin/named -- -g named -u named

geändert werden.

Natürlich ist BIND nun noch mit /etc/init.d/bind stop und /etc/init.d/bind start neuzustarten. Dabei sollten im syslog (/var/log/syslog) in etwa folgender Eintrag auftauchen:


Jul  8 23:21:01 sushi named[12432]: group = named
Jul  8 23:21:01 sushi named[12432]: user = named

Damit ist die Umstellung abgeschlossen. Idealerweise kann BIND nun noch in einer „chroot“ Umgebung betrieben werden.

Vor einem Einbruch

Austausch von Software

Zunächst sollten alle Netzwerkdienste deren Passwörter im Klartext übertragen werden, deaktiviert, bzw. gegen Versionen mit verschlüsselter Kommunikation ausgetauscht werden. Dies betrifft Dienste wie FTP/Telnet/NIS/RPC usw..

Auch sollte auf die Verwendung von NIS (Network Information Service) verzichtet werden. Bei einer fehlerhaften Konfiguration kann es leicht zu Sicherheitslücken kommen.

Auch sollte RPC deaktiviert werden soweit es möglich ist. Für diesen Dienst sind eine ganze Reihe von Sicherheitslücken bekannt. Natürlich wird grade NFS häufig verwendet und stellt in vielen Netzen einen wichtigen Basisdienst dar. Hier gilt es einen Kompromiss zwischen Sicherheit und Benutzbarkeit der Netzwerkdienste zu finden. Viele DDoS (Distributed Denial of Service) Angriffe benutzen RPC Sicherheitslücken um Systeme zu sogenannten „Agents“ oder „Handlern“ umzuwandeln.

Das deaktivieren des Portmapers ist relativ einfach, wie für jede Lösung gibt es auch hier verschiedene Wege. Auf einem Debian System ist der einfachste Weg sicherlich ein update-rc.d portmap remove. Dieses Kommando löscht jeden symbolischen Link auf den Portmaper in /etc/rc${runlevel}.d/. Dies kann natürlich auch auf herkömlichem Wege von Hand erledigt werden. Eine weitere, nicht ganz elegante, Möglichkeit ist es die Zugriffsrechte so zu ändern das das Script nicht mehr ausführbar ist, mittels: chmod 644 /etc/init.d/portmap. Dies würde jedoch zu einer Fehlermeldung beim Start des Systems führen.

Natürlich macht es nur wenig Sinn lediglich einen Teil der Dienste von unverschlüsselter auf verschlüsselte Kommunikation umzustellen, hier sollte der Systemadministrator konsequent durchgreifen. Generell sollten die Dienste ftp, telnet, pop, imap, http entfernt und durch die entsprechenden Dienste mit verschlüsselter Kommunikation (ftp-ssl, telnet-ssl, pop-ssl, https) ersetzt werden.

Kernel Patches

Im Netz sind einige Kernel Patches verfügbar die nicht Bestandteil des Standard Linux Kernels sind, dessen Sicherheit aber verbessern. Vor dem Einsatz ist im Einzelfall zu prüfen ob der gewünschte Patch nicht schon in den gewünschten Kernel eingeflossen ist. Auch erhebt die Auflistung natürlich keinerlei Anspruch auf Vollständigkeit.

Nach einem Einbruch...

Nach einem Einbruch gibt es nicht viel zu tun. Das System ist sofort vom Netz zu nehmen und komplett neu zu installieren. Einfach, nicht war? Natürlich gilt es herauszufinden wie der Eindringling auf das System gekommen ist. Dies geschieht in einer abgeschotteten Umgebung, also ohne Netzzugang für das betroffene System. Es sind zur späteren weiteren Analyse alle Daten auf einem geeigneten Medium zu sichern. Gegebenenfalls ist eine Meldung an ein CERT zu erstellen und dort der Einbruch zu melden. Ist eine Strafverfolgung des Einbruchs vorgesehen oder geplant, so ist ggf. auf professionelle Unterstützung zurückzugreifen.

Weiterhin sind auf dem neuen System alle notwendigen, vorab beschriebenen Sicherheitsvorkehrungen zu treffen.