Kapitel 1:

Grundlagen der Linux-Sicherheit


Dieses Kapitel gibt einen ersten Überblick über Linux-Sicherheit. Es werden die Probleme der physikalischen Sicherheit besprochen, wie Standortwahl und Absicherung gegen physischen Zugriff.

Weiters werde ich auf die Sicherheitsaspekte bei der Installation eingehen, einen Überblick über die Linux-Systemadministration geben und kurz die Schwachstellen von vernetzten Linux-Systemen erläutern.

 

      Zurück zur Inhaltsangabe

      1.1 Physikalische Sicherheit

      1.2 Sicherheit bei der Installation

      1.3 Linux-Systemadministration

      1.4 Schwachstellen in vernetzten Linux-Systemen





1.1 Physikalische Sicherheit


Zugegeben, Netzwerksicherheit ist ein brandaktuelles Thema. Allerdings wird oft1 übersehen, das viele Rechner physikalisch viel verwundbarer sind als durch Angriffe, die „durchs Kabel“ kommen. Gegen Vandalen, Diebe oder böswillige lokale Benutzer nützt die beste Firewall nicht viel.

Also gehen wir die Grundlagen der physikalischen Computersicherheit Schritt für Schritt durch:


Standort des Computers

Bei einem Personal Computer, der nur Zuhause steht, erübrigt sich die Frage der Standortwahl und des physikalischen Zugriffs natürlich. Bei größeren Firmen, deren finanzielles Überleben vom reibungslosen Funktionieren ihrer Server abhängt, ist es aber enorm wichtig, dass nur autorisierte Personen Zugriff haben, und allen anderen der Zugang verwehrt wird.

Denn ein böswilliger Benutzer braucht nur ein paar Sekunden, um einen Computer außer Gefecht zu setzen, indem er den Stecker zieht oder neu bootet. Dadurch können wichtige Daten verloren gehen und ein großer finanzieller Schaden entstehen.


In größeren Firmen wäre daher ein Network Operations Center (NOC)*) ideal. Das ist ein abgegrenzter Bereich innerhalb einer Firma, in dem sich die Server und die Netzwerkhardware befindet und zu dem nur wenige Personen Zugriff haben. Perfekt ist ein NOC, wenn er die folgenden Anforderungen erfüllt:




Wenn die finanzielle Situation der Firma es zulässt, können wichtige Rechner zusätzlich mit biometrischen Zugriffskontrollen gesichert sein. Diese Geräte identifizieren Anwender anhand von biologischen Merkmalen, wie:



Diese Zugriffskontrollen sind allerdings ziemlich teuer und haben außerdem eine relativ hohe Fehlerquote. Zum Beispiel wird eine Stimme nicht erkannt, wenn der Benutzer heiser ist. Wurde eine Person allerdings erkannt, kann man sich sicher sein, dass es sich um diese Person handelt und die Aufzeichnungen können daher als fast unwiderlegbar gelten.


1.2 Sicherheit bei der Installation


Die Sicherheit bei Linux fängt schon ganz am Anfang an: bei der Installation. Wenn man2 einige einfache Regeln befolgt, hat man die Grundlage für ein sicheres System geschaffen.


Erste Probleme ergeben sich schon bei den unterschiedlichen Linux-Distributionen:

Die unterschiedlichen Distributionen haben meistens verschiedene Installationstools. Einige legen fest, welche Pakete und Server installiert werden und beim Booten gestartet werden, andere fragen den Benutzer danach. Dadurch werden unerfahrene Anwender oft überfordert und installieren viele Dienste, die überhaupt nicht benötigt werden und eventuell Sicherheitsrisiken bergen.

Daher kann es sich lohnen, die eine oder andere Distribution probeweise zu installieren und sich in der Paketauswahl die Beschreibungen zu den einzelnen Paketen durchzulesen. Es sollten nur die Dienste installiert werden, die wirklich benötigt werden, und es ist auch zu überlegen, welche Dienste schon beim booten gestartet werden und welche erst manuell gestartet werden sollen.

Besonderes Augenmerk sollte hierbei auf Netzwerkdienste aller Art gelegt werden. Ihr Zweck ist es, Benutzer oder Clients mit Daten und Informationen zu versorgen, demnach geht von ihnen naturgemäß ein gewisses Sicherheitsrisiko aus. Deshalb sollte man die Netzwerkdienste, die nicht gebraucht werden, auf jeden Fall deaktivieren. Hier sind einige dieser nicht unbedingt notwendigen Dienste, die Anwendern Daten oder Funktionen zur Verfügung stellen:


Nützlich ist auch die Linux Software Map (http://www.boutell.com/lsm/), um sich über die einzelnen Anwendungen zu informieren.


Linux unterscheidet sich von anderen Betriebssystemen dadurch, dass es keine einzelne Firma gibt, die die Entwicklung und Kontrolle durchführt. Vielmehr besteht Linux aus unzähligen Modulen, Tools und Bibliotheken:




Partitionen und Sicherheit

Während der Installation wird das Linux-Installationstool nach der gewünschten Partitionierung der Festplatte fragen. Auch diese Partitionierung kann kann Einfluss auf die Sicherheit haben.

Wenn man mehrere Betriebssysteme auf einer Festplatte installieren will, sollte man für jedes System zumindest eine eigene Partition einrichten, so dass die Beriebssysteme problemlos koexistieren können.


Es kann durchaus riskant sein, Linux in eine einzige Partition zu legen. Da kann es nämlich schon vorkommen, dass sich eine beschränkte Beschädigung von Dateien auf das ganze System auswirkt.


Um solche Probleme von Anfang an auszuschließen, sollte eine Konfiguration wie die folgende gewählt werden, die für jedes Hauptdateisystem eine eigene Partition vorsieht.


  1. Linux-Swap-Partition - zur Auslagerung von temporären Daten.

  2. Root Dateisystem /root - für den Systemadministrator (root).

  3. Gemeinsam benutzte Programme /usr

  4. Benutzerpartition /home

  5. Verwaltung /var - hier werden Logfiles, Nachrichten und Fehlermeldungen gespeichert.


Für jeden dieser Punkte sollte eine eigene Partition vorhanden sein, die entsprechend der in der Textdatei /etc/fstab festgelegten Optionen gemountet (ins Dateisystem eingebunden) wird. So kann man z. B. nur Lesezugriff erlauben oder das Ausführen von Programmen mit automatischen Superuser-Zugriff (SUID) verhindern.


Vorteile mehrerer Partitionen:



Partitioniert wird am besten mit dem Linux-Tool fdisk. Es ist einfach zu bedienen und sollte auch Anfängern keine Probleme bereiten.


1.3 Linux-Systemadministration


Das Grundprinzip

Bei Linux liegt die gesamte administrative Macht bei einem Superuser, genannt root. Er3 hat Einsicht und Kontrolle über alle Dateien im System und ihm fallen im Wesentlichen folgende Aufgaben zu:



Einrichten und Verwalten von Benutzer-Accounts

Es gibt zwei Möglichkeiten, sich in ein Linux-System einzuloggen: wenn man persönlich vor dem Rechner sitzt oder per shell-Zugriff über telnet oder ähnliche Dienste.

Persönlichen Zugriff zu einem Rechner gibt man natürlich nur Personen, denen man vertraut, denn sobald man physischen Zugriff zu einem Rechner hat, ungestört ist und böse Absichten verfolgt, kann man mit dem Rechner machen, was man will.

Aber zurück zu den Shell-Zugriffen: Oft sind Shell Benutzer völlig anonym (z.B. bei Webspace-Anbietern mit telnet-Zugriff) und können doch boshafte Absichten haben. Im Gegensatz zu anderen Angreifern haben sie den halben Weg schon hinter sich: Sie haben bereits Zugriff auf den Rechner.

Wenn man schon Shell-Zugriff gewähren muss, sollte man das Risiko für das Linux-Netzwerk zumindest mit folgenden Maßnahmen reduzieren:



Ein gültiger Account besteht aus einem Benutzernamen mit Passwort, einem Heimatverzeichnis und einem Shell-Zugriff.


Die Daten aller Benutzer sind in der Textdatei /etc/passwd gespeichert, außer natürlich dem Passwort, das wird gesondert in der Datei /etc/shadow abgelegt, die nur für den root lesbar ist.


Aber ein Eintrag in /etc/passwd allein macht noch keinen User. Es muss noch sein Heimatverzeichnis angelegt werden, mit dem Befehl chown an ihn übergeben werden und die Startdateien in sein Verzeichnis kopiert werden (von /etc/skel).


Benutzer kann man auf mehrere Arten hinzufügen: per manuellen Eintrag in /etc/passwd (etwas umständlich), mit Text-Tools wie useradd oder mit grafischen Tools, die bei jeder Distribution enthalten sind.


Normalerweise sollte man sich als Administrator nicht immer als root durch das System bewegen. Zu leicht könnte man eine falsche Eingabe machen (der Befehl rm -rf * zum Beispiel, ausgeführt als root und am oberen Ende des Dateibaumes, löscht das gesamte System und alle Dateien). Daher ist es besser, als normaler Benutzer zu agieren und bei Situationen, die root-Zugriff erfordern, den Befehl su anzuwenden. Dann wird man nach einem Passwort gefragt und ist anschließend root. Wenn man fertig ist, sollte man die Sitzung mit der Tastaturkombination Strg-D wieder beenden, um zu verhindern, dass jemand die noch geöffnete Sitzung missbraucht.


Zugriffsrechte

Bei Linux gibt es drei grundlegende Arten von Zugriffsrechten:



Die Rechte können auch mit Oktalwerten angegeben werden. 0 steht dann für keine Rechte, 1 für Ausführen, 2 für Schreibrecht und 4 für Lesezugriff. Die Zahlen können zusammenaddiert werden, 7 steht dann z.B. für lesen, schreiben und ausführen.

Nun hat eine Datei aber niemals nur eine Art von Rechten. Die Rechte können für Besitzer der Datei, Gruppe und alle anderen jeweils unterschiedlich sein. Deshalb werden 4 Ziffern hintereinander benötigt: die zweite steht für den Besitzer, die dritte für die Gruppe und die vierte für alle anderen User. Modus 0751 gibt z.B. an, dass der Besitzer lesen, schreiben und ausführen darf, die Gruppe darf lesen und ausführen, alle anderen dürfen nur ausführen.

Die erste Ziffer wird benützt, um spezielle Optionen zu setzen. Modus 4000 setzt z.B. das Set User ID - Bit (SUID):

Das ist ein bedeutendes Sicherheitsrisiko bei Linux. Mit SUID können einer Datei besondere Rechte verliehen werden, sodass ein Programm nicht mit Rechten des Ausführenden, sondern mit denen eines anderen Users ausgeführt wird. Wenn SUID nun auf root gesetzt wird, kann es leicht sein, dass die Superuser-Rechte des Programms missbraucht werden, um Das System auszuspionieren oder zu schädigen.

Unter Red Hat 2.1 gab es ein Sicherheitsloch, das mit einem Exploit namens abuser.sh ausgenutzt werden konnte, um eine SUID-root-shell in /tmp/abuser zu generieren, mit der man alle Aktionen mit root-Rechten ausführen konnte.

Man sollte daher mit dem Befehl find / -perm +4000 alle Dateien aufspüren, die solche Rechte besitzen, und den Modus von SUID-Programmen, bei denen das nicht unbedingt notwendig ist, ändern (chmod -s [Datei]). Außerdem sollte unbedingt darauf geachtet werden, dass SUID-Programme nicht schreibbar sind.


Gruppen

Bei Linux können User zu Gruppen zusammengefasst werden. Das vereinfacht die Systemadministration erheblich, da diesen Gruppen eigene Zugriffsrechte zugewiesen werden können, wie oben besprochen.

Gespeichert werden Gruppen in /etc/group, die sehr an /etc/passwd erinnert. Gruppen werden entweder mit grafischen Tools, mit dem Befehlszeilentool groupadd oder mit einem manuellen Eintrag in /etc/group erzeugt.


Die Pfadvariable4

ein bekanntes Problem bei Linux besteht bei Pfadvariablen. Oft wundert man sich als Linux-Neuling, warum z.B. das Programm „doit“ nicht ganz einfach ausgeführt werden kann, in dem man von dem Ordner aus, in dem sich das Programm befindet, einfach „doit“ eingibt:


user@linux> ls -l doit

-rwxr-xr-x 1 user users 177 Sep 23 10:52 doit


user@linux> doit

bash: doid: command not found


Das liegt daran, weil die Pfadvariable den aktuellen Pfad beim Suchen nach dem Programm nicht berücksichtigt. Das hat durchaus seinen Grund, es ist also nicht sehr sinnvoll, den aktuellen Pfad (./) zur Pfadvariablen hinzuzufügen (export PATH=.:$PATH). Denn es kann z.B. vorkommen, dass man einen seiner Ordner im Verzeichnis /tmp (dem Ordner, in dem alle User ihre temporären Dateien ablegen) mit dem Befehl rm löschen will. Nun kann aber ein anderer User ein Programm namens „rm“ in /tmp abgelegt habe, dass in böswilliger Absicht zum Anfang des Dateibaumes wechselt und dort alle Dateien löscht, bei denen man Schreibrechte hat, da es ja mit den Rechten desjenigen ausgestattet ist, der es ausführt.

Genausogut kann aber auch ein falsches „su“-Programm versteckt sein, dass unbemerkt das root-Passwort in einer Datei speichert.

Die Alternative wäre, das aktuelle Verzeichnis als letzten zu betrachtenden Pfad anzugeben (export PATH=$PATH:. ), doch auch hier besteht ein Risiko: Wenn man auf mehreren Rechnern arbeitet, könnte ein Programm, dass auf dem einen System vorhanden ist, auf einem anderen nicht installiert sein und sich als trojanisches Pferd erweisen.


1.4 Schwachstellen in vernetzten Linux-Systemen


Linux kann eine ausgezeichnete Sicherheit bieten, wenn gewisse Vorraussetzungen5 gegeben werden und alle Schwachstellen ausgemerzt werden. Die ersten Risiken treten schon bei der Wahl der Netzwerk-Topologien auf:



Grundsätzlich gibt es drei Arten von Netzwerktopologien:


Die Bus-Topologie

Hier sind alle Rechner mit einer Hauptleitung verbunden und mit einem (eventuellen) Server verbunden:

Die Vorteile dieser Lösung liegen darin, dass, wenn jeder Rechner unabhängig arbeiten kann, bei einer Unterbrechung der Verbindung zum Server das Netzwerk zwischen den einzelnen Rechnern erhalten bleibt. Der Single-Point-of-Failure liegt hier bei der Verbindung zum Server. Allerdings ist in diesem Netzwerk die Abhörgefahr relativ groß. Jeder Rechner könnte (ohne weitere Sicherheitsvorkehrungen) den gesamten Verkehr abhören.


Die Ring-Topologie

Wenn 2 Rechner dieses Netzwerks ausfallen, haben alle anderen höchstens noch zu ihren Nachbarn Kontakt. Es ist daher nicht sehr fehlertolerant. Es ist auch sehr anfällig für elektronisches Abhören, da Nachrichten immer in einer Richtung weitergeleitet werden.





Die Stern-Topologie

Dieses Netzwerk ist sehr sicher was Abhören betrifft, da die Kommunikation immer nur zwischen dem Hub oder Server und den einzelnen Computern abläuft. Es ist auch sehr fehlertolerant, wenn ein Rechner ausfällt, läuft alles andere problemlos weiter. Wenn allerdings der Knotenpunkt ausfällt, kann überhaupt keine Kommunikation mehr zwischen den Computern stattfinden.


Daten während der Übertragung sichern

Daten sollten innerhalb eines Netzes immer verschlüsselt übertragen werden. Weitere Informationen dazu in Kapitel 2, 2.6 Sicherheit bei Datenübertragungen.

Jede Netzwerkaktivität sollte außerdem überwacht und zur späteren Überprüfung in Log- Dateien aufgezeichnet werden, um den Hergang und den Urheber eines eventuellen Einbruchs rekonstruieren zu können.


Die größten Risiken bei Linux gehen von Netzwerkdiensten wie telnet, ssh oder ftp aus. Doch auch andere Ports können Schlupflöcher für Einbrecher bieten. Im nächsten Kapitel werde ich genau auf einzelne Sicherheitslücken eingehen und beschreiben, wie Angreifer in Linux-Systeme einbrechen und wie man das verhindert.

 

 

 

 

*)Begriff übernommen aus dem Buch „linux hacker's guide“

 

1linux hacker's guide von anonymous, erschienen bei Markt und Technik, Kapitel 2 - Physikalische Sicherheit


2linux hacker's guide von anonymous, Kapitel 3 - Installation


3linux hacker's guide von anonymous, Kapitel 4 - Grundlagen der Linux-Systemadministration


4Sicherheit unter Linux, URL: http://www.linuxfibel.de/securesystem.htm


5linux hacker's guide von anonymous, Kapitel 2 - Physikalische Sicherheit

 

Weiter zu Kap. 2