1944982

Server-Administration - Tipps für mehr Sicherheit

12.06.2014 | 11:43 Uhr |

Ein Linux-Server ist nur so sicher wie seine Konfiguration: Die größten Löcher werden in aller Regel nicht von genialen Hackern gerissen, sondern schlicht durch Nachlässigkeit des Administrators.

Willkommen im Schreckenskabinett der Konfigurationsfehler! Anstatt eine Anleitung zu geben, wie man einen Server mit der Linux-Distribution X am sichersten konfiguriert – darüber werden üblicherweise Bücher geschrieben –, zeigen wir hier, wie man es am besten nicht macht. Das folgende Dutzend an Konfigurationspannen ist leider allzu häufig, in vielen Fällen katastrophal und kompromittierend, aber immer vermeidbar. Generell empfiehlt es sich, von böswilligen Anwendern auszugehen, die nichts anderes zu tun haben, als einen Server im Intranet und im Internet sowieso auf Lücken abzuklopfen. Hundert Prozent Sicherheit gibt es nicht, dafür sorgen schon die vielen Zeilen schnell geschriebener Code von verbreiteten PHP-Projekten und deren Plug-ins. Ein kompletter Server-Check (Pentest) ist teuer. Es hilft aber schon, sich in die Rolle eines potenziellen Hackers hineinzuversetzen und die gleichen Analysewerkzeuge gegen den eigenen Server zu richten, um die gröbsten Konfigurationsfehler zu finden. Gerade bei Miet-Servern im Internet („Root-Server“ oder virtualisierte Server) ist ein Check auch für Gelegenheits-Admins Pflicht, da man ansonsten schlimmstenfalls bald nicht mehr Herr im Hause ist.

Dieser Artikel stammt aus der LinuxWelt 3/2014

So klappt der Umstieg von XP zu Linux, Videoüberwachung mit Raspberry Pi einrichten, das beste Linux für jeden PC - das und mehr finden Sie in der neuen LinuxWelt 3/2014 .

Alle offenstehenden Dateien finden: Der Befehl find durchsucht so das gesamte Dateisystem (ausgenommen „/proc“) nach Dateien mit den oktalen Rechten 666. Dazu sind keine root-Rechte nötig.
Vergrößern Alle offenstehenden Dateien finden: Der Befehl find durchsucht so das gesamte Dateisystem (ausgenommen „/proc“) nach Dateien mit den oktalen Rechten 666. Dazu sind keine root-Rechte nötig.

Unbeschränkte Zugriffsrechte: Vollzugriff für alle

Wer keine Gruppen für gemeinsame Zugriffsrechte für Verzeichnisse und Dateien einrichtet, behilft sich oft mit einer simplen, aber unsicheren Abkürzung: Dateien bekommen kurzerhand die Zugriffsrechte 666 oder gar 777 zugewiesen und Verzeichnisse die Rechte 777. Damit sind Lese- und Schreibberechtigungen effektiv ausgehebelt, da alle Welt Vollzugriff auf diese Dateiobjekte hat. Auf einem Server ist dies keine gute Idee und schlicht ein Konfigurationsfehler, auch wenn nachlässig geschriebene Anleitungen diese Rechte empfehlen. Denn auch unprivilegierteBenutzer und eigentlich abgeschottete Server-Dienste könnten diese Dateien und Verzeichnisse manipulieren.

Lösung: Sie können Dateien und Verzeichnissemit unbeschränkten Zugriffsrechteneinfach ausfindig machen und benötigen dazu noch nicht mal root-Rechte. Das Kommando

find / -path /proc -prune -o –type f -perm 666

findet alle Dateien im gesamten Dateisystem (ausgenommen „/proc“), die von allen gelesen und beschrieben werden dürfen, und

find / -path /proc -prune -o –type f -perm 777

listet Dateien auf, die dazu noch ausführbar sind. Genausofindet

find / -path /proc -prune -o –type d -perm 777

alle Verzeichnisse, die zum Lesen und Schreiben offenstehen. Anstatt für Dateien und Ordner uneingeschränktenVollzugriff zu setzen, ist es besser, Gruppen für gemeinsam genutzte Dateien zu verwenden. Der Befehl

chgrp [Gruppe] [Datei/Verzeichnis]

ändert die Gruppe in Dateisystem-Objekten. Für den Vollzugriff für Besitzer und Gruppe genügen dann bei Ordnern die Rechte 770, bei Dateien 660.

Eigene Webserver mit Apache einrichten

Unerwünschte Anzeige von Verzeichnissen: Directory-Listings sind in Apache bei den verbreiteten Distributionen in der Beispielkonfiguration über die Option „Indexes“ aktiviert.
Vergrößern Unerwünschte Anzeige von Verzeichnissen: Directory-Listings sind in Apache bei den verbreiteten Distributionen in der Beispielkonfiguration über die Option „Indexes“ aktiviert.

Apache: Aktivierter Verzeichnisindex

Der Webserver Apache bietet eine Option, den Inhalt von Ordnern des Webverzeichnisses als Dateiliste anzuzeigen, wenn dort keine Dateien mit den Namen „index.htm“ „index.html“ oder „index.php“ liegen. Diese Option „Indexes“ist in der Standardkonfiguration gesetzt und sollte bei öffentlichen Webservern abgeschaltet werden, da eine Dateiliste allzu viel über die Server-Konfiguration verraten kann.

Ob es sich im konkreten Fall dann tatsächlich um eine ernste Sicherheitslücke handelt, ist natürlich immer vom Verzeichnisinhalt abhängig. In besonders ungünstigen Fällen können so aber temporäre Konfigurationsdateien mit vertraulichem Inhalt in falsche Hände geraten.

Lösung: Besser ist es, das Auflisten von Verzeichnissen (Directory-Listing) generell abzuschalten. Diese Einstellung nimmt man bei Apache in der Konfiguration der Website oder des Virtual Hosts vor.

Dazu ein Beispiel: Unter „Debian/Ubuntu“ liegt die Standardkonfiguration in der Datei „/etc/apache2/sitesavailable/default“ vor. Hier ist unter der Zeile „<Directory /var/www>“ mit „Options Indexes FollowSymLinksMultiViews“ das Directory-Listing erlaubt. Ändern Sie dort die Option „Indexes“zu „-Indexes“, und starten Sie den Webserver neu.

Die Optionen werden übrigens automatisch in die Unterverzeichnisse vererbt, und man braucht die Option deshalb nicht für jedes Verzeichnis einzelnzu setzen. Es genügt, die Einstellungauf der höchsten Verzeichnisebene zu verbieten, sofern sie in Unterverzeichnissen nicht wieder explizit eingeschaltet wird.

Dirbuster in Aktion: Der Scanner überprüft systematisch die Verzeichnisstruktur auf Webservern mittels Listen und findet so auch Überbleibsel aus der Entwicklungsphase.
Vergrößern Dirbuster in Aktion: Der Scanner überprüft systematisch die Verzeichnisstruktur auf Webservern mittels Listen und findet so auch Überbleibsel aus der Entwicklungsphase.

Webserver: Verräterische Dateien

Während der Entwicklungsphase eines Webauftritts kann es in den Webverzeichnissen schon mal unübersichtlich werden: Temporäre Dateien, Backup-Archive, Datenbank-Dumps, nicht gelöschte Installationsverzeichnisse und schlecht geschützte Admin-Zugänge werden zum Problem, sobald der Server über das Internet erreichbar ist. Denn mittels automatisierten Scans entgeht neugierigen Besuchern kaum etwas.

Lösung: Vor dem Launch ist es immer ratsam, die Webverzeichnisse systematisch zu überprüfen. Bei kleineren Websites genügt es noch, manuell die Webserver-Verzeichnisse durchzusehen. Meist ist das aber schon bei kleinen Sites zu umständlich. Besser ist, zusätzlich einen Scanner dafür einzusetzen.

Der bekannteste Scanner ist das Open-Source-Programm „Dirbuster“, ein englischsprachiges Java-Programm für Linux und Windows (Download der Version 0.12 unter https://www.owasp.org/index.php/Category:OWASP_DirBuster_Project ).

Dirbuster wird nicht auf dem Server selbst installiert, sondern auf einem Client. Es benötigt eine Java-Runtimeund klopft einen Webserver anhand von Listen auf interessante Verzeichnisse und Dateien hin ab. In Ubuntu ist es nötig, eine Java-Runtimeerst noch zu installieren. In Ubuntu 13.10 und Co erledigt das der Befehl

sudo apt-getinstall openjdk-6-jre

Dirbuster 0.12 wird nach dem Entpacken in ein beliebiges Verzeichnis mit dem Kommando

java -jar DirBuster-0.12.jar
Alle Benutzer-Accounts zeigen: Dieser Befehl listet alle Benutzer aus der Datei „/etc/passwds“ auf, die ein eigenes Home-Verzeichnis haben. Benutzer mit IDs unter 1000 sind System-Accounts.
Vergrößern Alle Benutzer-Accounts zeigen: Dieser Befehl listet alle Benutzer aus der Datei „/etc/passwds“ auf, die ein eigenes Home-Verzeichnis haben. Benutzer mit IDs unter 1000 sind System-Accounts.

aufgerufen. Zum Start des Scans ist es nötig, eine Dateiliste im Feld „File withlistofdirs/files“ auszuwählen; Dirbuster bringt dazu mehrere Listen mit unterschiedlichen Umfängen mit. Die Standardliste hat eine Größe von 1,7 MB und liegt als „directory-list-1.0.txt“im Programmverzeichnis.

Altlasten: Vergessene Benutzer auf dem Server

In Teams mit wechselnder Besetzung kann es vorkommen, dass auch längst weitergezogene Ex-Kollegen noch einen Benutzer-Account auf dem Server haben. Im schlechtesten Fall ist der Benutzer-Account dann auch noch für sudo freigeschaltet.

Lösung: Überprüfen Sie regelmäßig die Liste der eingerichteten Benutzer- Accounts auf dem Server. Diese stehenin der Datei „/etc/passwds“ und lassen sich mit dem Kommando

cat /etc/passwds |grep "/home"

anzeigen, wobei es hier nur auf Benutzer mit einer numerischen ID über 1000 ankommt, alle anderen sind Accounts von Systemdiensten. Nicht mehr benötigte Accounts löscht dann der Befehl

userdel -rf [Benutzername]

samt zugehörigem Home-Verzeichnis.Der Parameter „f“ führt dabei die Löschaktion auch dann aus, wenn der Benutzer gerade noch angemeldet ist.

Den eigenen Linux-Server einrichten

Anmeldung über SSH als root vermeiden: Reservierte Account-Namen sollten bei Servern im Internet über SSH nicht funktionieren, um Brute-Force-Attacken keine Log-in-Namen anzubieten.
Vergrößern Anmeldung über SSH als root vermeiden: Reservierte Account-Namen sollten bei Servern im Internet über SSH nicht funktionieren, um Brute-Force-Attacken keine Log-in-Namen anzubieten.

SSH: Anmeldung für root erlaubt

Server werden üblicherweise über SSH gepflegt. Eine grafische Oberfläche über VNC oder direkt am Server ist eher die Ausnahme. Bei SSH kommt es darauf an, dass alle Benutzer-Accounts sichere, also komplexe Passwörter haben. Zudem sollten Standard-Accounts wie root über SSH nicht direkt zugänglich sein, damit der Account-Name nicht einfach für Brute-Force-Angriffe erraten werden kann.

Lösung: Ein gewöhnlicher Benutzer kann auch nach der Anmeldung noch mit su zum root-Account wechseln. Damit man sich nicht selbst aussperrt, ist es wichtig, sich wirklich erst davon zu überzeugen, dass su mit dem bekannten root-Passwort funktioniert oder dass sudo für den eigenen Benutzer-Account eingerichtet ist. Besteht darüber kein Zweifel, kann man die Konfiguration des SSH-Dienstes in der Datei „/etc/ssh/sshd_config“ anpassen und mit der Zeile

PermitRootLoginno

die SSH-Anmeldung für root verbieten. Die Änderung ist nach einem Neustart des SSH-Dienstes aktiv, was beispielsweise in Debian der Befehl

sudo /etc/init.d/ssh restart

erledigt. Bei Ubuntu ist dies übrigens unnötig, da hier die Anmeldung als root sowieso deaktiviert ist.

Ohne Updates keine Sicherheit

Linux-Distributionen machen das regelmäßige System-Update für Kernel, Server-Dienste und Bibliotheken über den Paketmanager zu einer der leichteren Aufgaben. Sofern keine besonders eiligen Bugfixes anliegen, ist auf einem Webserver das wöchentliche Update ausreichend. Anders ist es bei den diversen PHP-Projekten und anderen Frameworks, die üblicherweise auf Webservern laufen. Um diese auf dem neuesten Stand zu halten, muss der Administrator selbst aktiv werden, da nach gravierenden Sicherheitslücken nicht viel Zeit bleibt, die eigene Site abzusichern. Nachrichten zu Updates gibt es auf der Webseite des verwendeten PHP-Projekts oder der anderweitigen Scripts. Bei Wordpress wäre dies beispielsweise https://wordpress.org/news . Besonders wichtig ist, auch Plug-ins stets auf dem neuesten Stand zu halten, da dort bei allen CMS und Blog-Systemen die meisten Sicherheitslücken lauern. Newsseiten berichten meist nur über die großen Systeme und auch nicht immer ganz aktuell.

Für die Suche nach neuen Sicherheitslücken in bestimmten Versionen von Webseiten-Frameworks und deren Plug-ins ist die Mailingliste „ FullDisclosure “ eine gute Anlaufstelle.

Abonnieren kann man die umfangreiche Mailliste unter www.grok.org.uk/full-disclosure . Bekannte Exploits für viele Projekte nimmt auch das Archiv von www.exploit-db.com unter „Web ApplicationExploits“ auf.

0 Kommentare zu diesem Artikel
1944982