Hitchhiker's Guide to Security (Teil II)
Grundlegende Sicherheitsmaßnahmen für Linux-Rechner

von Ulrich Kiermayr & Aron Vrtala (Ausgabe 02/2, Oktober 2002)

 

Im ersten Teil des Hitchhiker's Guide to Security (Comment 01/1, Seite 20) wurden grundlegende Sicherheitsmaßnahmen und wichtige Verhaltensregeln für Windows-Benutzer vorgestellt. Diesmal beschäftigen wir uns mit Linux, dem Betriebssystem, das an der Uni Wien am zweithäufigsten eingesetzt wird: Die folgenden Tips sollen Ihnen helfen, Ihren Linux-Rechner gegen Gefahren aus dem Netzwerk abzusichern. Beachten Sie aber bitte, daß die diversen Linux-Distributionen in manchen Details stark voneinander abweichen, sodaß in vielen Bereichen keine allgemeingültige Anleitung möglich ist.

Leider schrecken viele Benutzer davor zurück, sich mit dem komplexen Thema Computersicherheit auseinanderzusetzen - obwohl sich mittlerweile herumgesprochen hat, daß mangelhaft geschützte Rechnersysteme gern von Hackern verwendet werden, um direkt am betroffenen Rechner und/oder (oft mit dessen "geborgter" Identität) im Internet ihr Unwesen zu treiben. Der Hauptgrund für die mangelnde Begeisterung liegt wohl in den für viele Anwender kaum verständlichen technischen Details, auf die man unweigerlich stößt, wenn man sich mit dieser Materie beschäftigt.

Dennoch sollte man sich davon nicht beirren lassen: Die kompliziert anmutende Kleinarbeit ist oft nur für Betreiber größerer Server relevant. Wie im folgenden gezeigt werden soll, können aber auch Benutzer mit wenig Systemkenntnis durch einige einfache Vorkehrungen die Angriffsfläche für Hacker stark reduzieren.

Alarmstufe Rot: Vernachlässigte Systeme

Auch Rechner, die von Experten mit Sorgfalt installiert wurden, benötigen regelmäßige Zuwendung, wenn sie über längere Zeit problemlos im Netzwerk betrieben werden sollen: Immer wieder werden in Programmen Fehler (Bugs) entdeckt, die Hackern neue Hintertüren eröffnen. Daher ist es unbedingt notwendig, gegebenenfalls die entsprechenden Programmkorrekturen (Patches) nachzuinstallieren. Die Linux-Gemeinde reagiert üblicherweise sehr rasch auf das Bekanntwerden einer Sicherheitslücke, sodaß meistens nach kurzer Zeit auf der Webseite der jeweiligen Linux-Distribution (RedHat, SuSE, Mandrake, Debian, ...) ein Patch verfügbar ist, der das Problem behebt.1) Die Linux-Distributoren betreiben auch Mailinglisten, in die man sich eintragen kann, wenn man über Sicherheitsprobleme und Updates informiert werden möchte.

Für die gängigsten Linux-Distributionen besteht außerdem die Möglichkeit, das System mit Hilfe des Programms AutoRPM quasi automatisch zu warten. Die Installationsdatei von AutoRPM kann unter http://www.autorpm.org/ heruntergeladen werden; dort finden Sie auch die dazugehörige Dokumentation mit Beispielen für die Konfigurationsdateien. Installieren Sie das Programm nachträglich mit dem Befehl rpm -Uvh autorpm-.....noarch.rpm (anstelle der Punkte ist die Versionsnummer von AutoRPM einzutragen).

Professionelle Systemadministratoren sollten darüber hinaus unter http://www.securityfocus.com/ die Security-Mailingliste "bugtraq" subskribieren. Die Empfänger dieser Liste erhalten im Schnitt täglich etwa 30 eMail-Nachrichten mit Sicherheitsinformationen und -diskussionen zu allen Betriebssystemen. Diese Menge kann leicht zu Ermüdungserscheinungen führen; daher sollte man darauf achten, den Überblick zu bewahren: Nicht jedes Problem ist für Linux-Benutzer relevant, und mit Fehlern in Programmen oder Protokollen, die auf Ihrem Rechner nicht installiert sind, müssen Sie sich ebenfalls nicht auseinandersetzen. Auf der oben genannten Webseite stehen außerdem Suchfunktionen zur Verfügung, die das Auffinden von produktspezifischen Problemen erleichtern.

Sicherer surfen

Der Großteil aller im Netz herumirrenden Computerviren und Trojaner ist auf das Betriebssystem Windows zugeschnitten, sodaß Linux-Benutzer vergleichsweise selten davon heimgesucht werden. Durch die steigende Beliebtheit von Office-Programmen unter Linux kann man sich mittlerweile aber auch damit beachtliche Schwierigkeiten einhandeln. Um bösen Überraschungen vorzubeugen, empfiehlt es sich daher, nicht nur eMail-Attachments, sondern auch Web-Dienste mit einer gewissen Skepsis zu behandeln. Linux-Anwender haben hier einen kleinen Startvorteil: Im Gegensatz zu Windows-Benutzern, die beim Surfen im WWW auch mit ActiveX-Scripts Probleme bekommen können, müssen sie sich lediglich vor Java-Applets und JavaScript-Programmen (Scripts) in acht nehmen.

Java-Applets und Scripts sind in Webseiten eingebundene Programme, die man - bewußt oder unbewußt - am PC zur Ausführung bringt. Sie bieten sehr attraktive Möglichkeiten für die Gestaltung von Webseiten, sind entsprechend beliebt und in vielen Fällen harmlos. Nachdem man den Programmcode aber üblicherweise nicht zu Gesicht bekommt, hat man keinerlei Kontrolle darüber, welche Programme dabei am Rechner ablaufen, sodaß auf diesem Weg auch Viren und Trojaner in das System eingeschleust werden können.

Dieses Sicherheitsrisiko läßt sich durch eine geeignete Browser-Konfiguration allerdings drastisch verringern. Der unter Linux häufig verwendete Webbrowser Mozilla beispielsweise ermöglicht im Menü Edit unter der Option Preferences eine Reihe von sicherheitsrelevanten Einstellungen: Im Dialogfenster Advanced haben Sie die Möglichkeit, Java generell auszuschalten. Hier gilt es, Sicherheits- und Komfortbedürfnis gegeneinander abzuwägen (ohne Java kann der Browser auch nützliche Applets nicht ausführen). Die ebenfalls in diesem Fenster angebotene Option, Ihre eMail-Adresse als anonymes FTP-Paßwort zu senden, sollten Sie jedenfalls deaktivieren: Das erspart Ihnen Eintragungen in die Verteilerlisten von Spammern und somit einiges an unerwünschter Werbe-Mail. Darüber hinaus empfehlen wir, im Unterfenster Scripts & Windows die Funktionen Enable JavaScript for: Mail & Newsgroups und Open unrequested Windows zu deaktivieren (siehe Abb. 1).

Sie sollten auch generell darauf achten, nicht als Benutzer root (unter Windows: Administrator) mit dem Browser zu arbeiten. Dieser Benutzer hat in seinem System alle Privilegien, sodaß ein potentieller unbemerkter "Eindringling" rasch viel Schaden anrichten oder gar die Kontrolle über den Rechner erlangen kann: Auch unter Linux machen die standardisierten Unix-Pfade Hackern das Leben leicht.

Mozilla
Abb. 1: Dialogfenster Scripts & Windows (Mozilla)

Wer braucht Geister und Dämonen?

Viele Linux-Benutzer betreiben ihren PC nicht nur als Workstation, sondern als Server. Das geschieht oft unbewußt - und ist in diesem Fall besonders gefährlich, weil nicht darauf geachtet wird, welche Dienste des Rechners aus dem Netzwerk angesprochen werden können. Wenn Sie ein Linux-System installieren, sollten Sie sich genau überlegen, ob Sie überhaupt Services im Netz anbieten wollen, und wenn ja, welcher Dienst für wen zur Verfügung stehen soll. Dadurch minimieren Sie einerseits die Angriffspunkte für Hacker, andererseits erleichtert dies die Konfiguration einer Firewall, mit der Sie dann einen noch besseren Schutz erreichen können.

Beim Versuch, die benötigten Services zu identifizieren, stoßen oft sogar Unix-Experten auf Dienste, die sie nicht ohne Recherche zuordnen können. Im Gegensatz zu vielen Unix-Varianten, wo eine Fehleinschätzung zu echten Problemen führen kann, kommt man unter Linux aber kaum in die Situation, daß z.B. der Rechner nicht mehr startet, weil man irrtümlich einen Prozeß unterbunden hat, der vom System benötigt wird. Daher empfehlen wir für Linux: Wenn Ihnen der Zweck eines Service nicht bekannt ist, schalten Sie es aus. Alle Dienste, die Sie nach einer Woche noch nicht vermissen, können Sie wahrscheinlich getrost vergessen.

Unter Linux werden die meisten (aber nicht alle!) Netzwerkservices vom sogenannten inetd (Internet Services Daemon) bzw. seinem Nachfolger, dem xinetd, gesteuert. Sofern er nicht deaktiviert ist, reagiert dieser "Internet-Super-Server" auf Anforderungen aus dem Netzwerk, indem er den gewünschten Dienst startet und somit einen Zugriff von außen auf das System ermöglicht. Zu den vielen Services, die über den inetd bzw. xinetd aktiviert werden, gehören beispielsweise telnet, ftp, shell, login, exec, talk, pop-3, imap, tftp, finger und auth. Wenn Sie diese Dienste nicht benötigen, ist es ratsam, den inetd bzw. xinetd überhaupt auszuschalten. Andernfalls sollten Sie die Konfiguration dieses Servers exakt auf Ihre Bedürfnisse abstimmen: Deaktivieren Sie alles, was Sie nicht explizit brauchen.

Der etwas ältere inetd wird über die Datei /etc/inetd.conf konfiguriert, der neuere xinetd verwendet eine Reihe von Konfigurationsdateien, die üblicherweise im Verzeichnis /etc/xinetd.d/ abgelegt sind. Sehen Sie sich die Liste der verfügbaren Dienste genau an. Folgendes werden Sie unter Linux vermutlich nicht benötigen: echo, discard, daytime, chargen, time, comsat, uucp und bootps. Kommentieren Sie die entsprechenden Einträge in der Datei /etc/inetd.conf durch eine Raute (#) am Zeilenanfang aus (siehe Abb. 2) bzw. stellen Sie beim xinetd in den zugehörigen Dateien sicher, daß das Service auf den Status disable = yes gesetzt ist (siehe Abb. 3). Fehlermeldungen, die durch inkorrekte Einträge verursacht werden, finden Sie in der Datei /var/log/messages (siehe Abschnitt Vertrauen ist gut).

/etc/inetd.conf

# echo stream tcp nowait root internal

# echo dgram udp wait root internal

# chargen stream tcp nowait root internal

# chargen dgram udp wait root internal

Abb. 2: Beispiel für die Konfiguration des inetd - die Services echo und chargen werden in der Datei /etc/inetd.conf deaktiviert (auskommentiert).

 

/etc/xinetd.d/chargen

# default: off

# description: A chargen server.

# This is the TCP version.

service chargen

{

type = INTERNAL

id = chargen-stream

socket_type = stream

protocol = tcp

user = root

wait = no

disable = yes

}

Abb. 3: Beispiel für die Konfiguration des xinetd - das Service chargen wird in der Datei /etc/xinetd.d/chargen deaktiviert (disable = yes).

Da viele Dienste (z.B. FTP oder NFS) oft nicht aus dem ganzen Internet, sondern nur für bestimmte Rechner erreichbar sein müssen, kann man zusätzlich mit Hilfe der Dateien /etc/hosts.allow und /etc/hosts.deny genau definieren, wer auf aktive Services Zugriff haben soll. Die Einträge sind bei beiden Dateien in der Form
ServiceIP-Adresse(n)
vorzunehmen.

Damit Sie keinen Dienst übersehen, ist es am einfachsten, wenn Sie zunächst jeglichen Zugriff verbieten, indem Sie in die Datei /etc/hosts.deny die Zeile ALL: ALL eintragen. Anschließend definieren Sie in der Datei /etc/hosts.allow jene Services, die freigegeben werden sollen. Um beispielsweise einem bestimmten Kollegen, dessen PC die IP-Adresse 131.130.11.99 hat, vollen Zugriff auf Ihren Rechner zu gewähren, tragen Sie in diese Datei die Zeile ALL: 131.130.11.99 ein. Wenn die Freigabe für das gesamte Institut (also z.B. für die IP-Adressen 131.130.11.2 bis 131.130.11.254) gelten soll, muß die entsprechende Zeile ALL: 131.130.11.0/255.255.255.0 lauten. Bei dieser relativ groben Vorgangsweise besteht allerdings die Gefahr, daß schlecht gewartete Institutsrechner Ihr System in Mitleidenschaft ziehen. Aufgrund dessen ist es klüger, nur bestimmte Dienste für gewisse Rechner freizugeben: Mit der Zeile in.telnetd: 131.130.11.99 erlauben Sie etwa dem obigen Beispiel-Rechner, mittels Telnet auf Ihren PC zuzugreifen.

Etwas komplizierter ist es bei den häufig verwendeten Services NFS (Network File System) und NIS (Network Information System, auch Yellow Pages genannt). Beide arbeiten mit Hilfe von RPCs (Remote Procedure Calls), die den sogenannten Portmapper benötigen, um das jeweilige Service abzuwickeln. Bedingt durch ihre technische Komplexität sind NFS, NIS und RPCs besonders anfällig für Sicherheitslöcher und sollten daher soweit wie möglich eingeschränkt werden. Mit den Zeilen portmap: 127.0.0.0/255.0.0.0 und portmap: 131.130.11.99 in der Datei /etc/hosts.allow geben Sie den Portmapper für Ihren lokalen Rechner und unseren Beispiel-Rechner frei (aus Gründen, deren Erläuterung hier zu weit führen würde, ist eine Freischaltung des Portmappers für den eigenen Rechner generell empfehlenswert bzw. im Falle von NFS sogar unumgänglich). Für NIS wird zusätzlich noch das Service ypserv benötigt; der entsprechende Eintrag in /etc/hosts.allow muß dann z.B. portmap,ypserv: 131.130.11.99 lauten.

Fort Knox am PC: Die Linux-Firewalls

Die oben beschriebene Zugriffssteuerung ist zwar recht wirkungsvoll, reicht aber für manche Services schlicht nicht aus: Wie bereits erwähnt, können nicht alle Netzwerkdienste mittels inetd/xinetd angesprochen werden. Einige (beispielsweise ssh) verwenden standardmäßig den Super-Server nicht zum Starten. Da hilft dann nur noch die logische Fortsetzung dieses Konzepts: eine Firewall-Software. Eine solche Firewall verhält sich zu den Zugriffslisten /etc/hosts.allow und /etc/hosts.deny in etwa wie eine Pinzette zu einer Zange. Sie bietet deutlich bessere Möglichkeiten zur Feinabstimmung Ihrer Systemsicherheit - nicht nur gegen Angriffe von außen, sondern auch gegen unerwünschte Netzwerkverbindungen von innen. Unter Linux stehen zwei Arten von Firewalls zur Verfügung, die in ihrer Grundfunktion völlig verschieden sind: IP-Chains und IP-Tables.

Die meisten Linux-Systeme installieren beim automatischen Setup des Betriebssystems IP-Chains. Diese Software ist älter und bekannter, aber erheblich umständlicher zu konfigurieren, weil sie den Zusammenhang der zu überprüfenden Netzwerkdatenströme nicht erkennen kann - IP-Chains ist ein Filtermechanismus, der die einzelnen Datenströme weder zueinander noch zum Kontext im System in Beziehung bringt.

Die IP-Tables hingegen gehören zu den besten derzeit verfügbaren Firewall-Programmen und erlauben eine Statefull Inspection. Das bedeutet, daß der Protokollstatus (insbesondere der TCP-Verbindungen) mitverfolgt wird. Wenn Sie IP-Tables einsetzen wollen, benötigen Sie eine aktuelle Linux-Version mit einem V2.4-Kernel - z.B. RedHat 7.3, SuSE 8.0, Mandrake 8.2. Eine Anleitung zur Konfiguration der IP-Tables sowie ein Firewall-Startscript zum Download finden Sie im WWW unter www.univie.ac.at/ZID/security/ (unter Vorträge - Vorlesung - Security im Internet). Zu diesem Themengebiet ist auch ein eigener Comment-Artikel geplant.

Noch ein Tip: Wenn Sie eine Firewall installiert haben und FTP verwenden, achten Sie bitte darauf, daß beim Systemstart der Befehl /sbin/modprobe ip_conntrack_ftp ausgeführt wird, weil das Service sonst nicht ordnungsgemäß funktioniert (weder als Klient noch als Server). Weitere Informationen über Module für Connection Tracking finden Sie unter http://www.netfilter.org/.

Vertrauen ist gut, ...

... Kontrolle ist besser. Die Funktionszusammenhänge in einem Rechner sind komplex und selbst für Experten im allgemeinen nicht überschaubar. Daher ist der Administrator jedes Systems auf dessen Rückmeldungen angewiesen, wenn er wissen möchte, wie es um die Maschine steht. Unter Linux wird dieser Rapport vom syslog-Dämon durchgeführt, der sämtliche Statusinformationen des Systems in der Datei /var/log/messages speichert.

Für professionelle Systemadministratoren ist ein regelmäßiges Sichten dieser sogenannten Log-Datei Pflicht, und auch engagierte Linux-Anwender haben gute Chancen, mit ihrer Hilfe unerwünschte Vorgänge im System rechtzeitig zu erkennen. Auch wenn die Log-Meldungen nicht immer verständlich sind, kann man mit ein wenig Übung die eher bedenklichen Informationen rasch von den den zahllosen harmlosen Meldungen unterscheiden, die durch die regulären Abläufe des Systems bedingt sind. Leider stellt aber der Umfang der Log-Datei hohe Anforderungen an die Konzentration und Ausdauer des Lesers, sodaß man nach längerem ruhigen Betrieb leicht in Versuchung gerät, auf seine Vorkehrungen und/oder sein Glück zu vertrauen und die regelmäßige Kontrolle der Log-Datei zu vernachlässigen.

Glücklicherweise gibt jedoch es Programme wie Logwatch und Logcheck, die die Auswertung der Log-Meldungen erheblich erleichtern. Logwatch ist ein Log-Überwachungssystem, das über http://www.logwatch.org/ bezogen werden kann bzw. bei manchen Linux-Distributionen (z.B. RedHat) im Lieferumfang enthalten ist. Logwatch wird über die Datei logwatch.conf in /etc/log.d gesteuert und schickt das Ergebnis seiner Bemühungen per eMail an den Administrator des Systems. Eine Dokumentation dieses Programms finden Sie auf der oben genannten Webseite.

Das Programm Logcheck, das ebenfalls frei verfügbar ist (http://www.psionic.com/), ermöglicht ein selektives Ausblenden der regulären Statusmeldungen des Systems und damit eine gezielte Suche nach sicherheitsrelevanten Ereignissen. Die Definition der Filterregeln erfolgt mittels Standard Unix Regular Expressions (regex), einer Ausdrucksweise, die zwar im Prinzip nur eine Variation des guten alten Sterns ("Asterisk") bei Dateinamen darstellt, auf Nicht-Eingeweihte aber sehr einschüchternd wirken kann. Da das Programm in der Standardkonfiguration ohnehin recht brauchbar ist, empfehlen wir, für die Analyse zunächst die vordefinierten Regeln zu verwenden und erst dann eigene Regeln festzulegen, wenn man sowohl die regex-Syntax als auch die Bedeutung der Log-Meldungen durchschaut hat.

Logcheck wird üblicherweise im Verzeichnis /usr/local installiert und über vier Konfigurationsdateien gesteuert, die in diesem Fall in /usr/local/etc zu finden sind:

  • Die Datei logcheck.ignore enthält alle Meldungen, die unbedenklich sind und nicht weitergeleitet werden müssen (z.B. cron.*STARTUP).
  • In der Datei logcheck.violations werden diejenigen Meldungen angeführt, die auf mögliche Sicherheitsverletzungen hinweisen (z.B. ROOT LOGIN).
  • Ausnahmen von solchen Warnungen können in der Datei logcheck.violations.ignore definiert werden (z.B. kernel.*fh_verify.*permission failure).
  • Die Datei logcheck.hacking beinhaltet Textelemente, die mit hoher Wahrscheinlichkeit Angriffe darstellen (z.B. login.*:.*LOGIN FAILURE.* FROM.*root).

Die anhand dieser Regeln aus der Log-Datei gefilterten Einträge werden wie bei Logwatch per eMail an den Administrator geschickt.

Weitere Informationen - z.B. die Unterlagen zur Vorlesung Security im Internet, in der der gesamte Themenbereich umfassend behandelt wird - finden Sie unter www.univie.ac.at/ZID/security/.

 

1) Leider gilt dies nicht für alle Betriebssysteme - bei manchen großen Softwareherstellern wartet man mitunter sehr lange auf Patches, die dann so fehlerhaft sind, daß man sie besser gar nicht installiert.