Unnötige Systemdienste abschalten

Aus LinuxUser 07/2003

Unnötige Systemdienste abschalten

Abgehärtet

Der Feind lauert überall: Nicht nur das Einrichten einer Firewall oder der Einsatz eines Viren-Scanners, sondern auch das Abschalten von Diensten trägt dazu bei, den eigenen Rechner zu schützen. Wir zeigen, wie Sie Ihren Linux-PC ein bisschen besser abschotten.

Sicherheit hat viele Aspekte. Die eines Computer-Systems verbessert sich nicht nur durch den Einsatz einer Firewall oder eines Viren-Programms, auch das Entfernen von Risikofaktoren trägt dazu bei. Im Englischen nennt man das “Operating System Hardening”, etwa “das Betriebssystem (ab)härten”. Dabei schaltet man erst einmal Dienste ab, die man nicht braucht und die über Sicherheitslöcher Angriffsmöglichkeiten bieten können.

Zu Ihren Diensten

Die meisten Linux-Distributionen installieren standardmäßig jede Menge Programme und Dienste; oft starten diese sogar automatisch. Welche Netzwerkdienste im Hintergrund arbeiten, erfahren Sie mit dem Befehl netstat (Listing 1).

Listing 1

<I>netstat<I> zeigt Netzwerkverbindungen

antony@mars:~$ netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address      Foreign Address State
tcp        0      0 *:login            *?             LISTEN
tcp        0      0 *:shell            *?             LISTEN
tcp        0      0 *:time             *?             LISTEN
tcp        0      0 *:netbios-ssn      *?             LISTEN
tcp        0      0 *:finger           *?             LISTEN
[…]

Die netstat-Ausgabe zeigt eine Liste aller aktiver Netzwerkverbindungen Ihres Systems. Jeder Eintrag steht für einen Dienst, der vom jeweils angebundenen Netz (Intra- oder Internet) aus erreichbar ist. Die meisten dieser Services (selbst wenn ihre Implementation keine Sicherheitslöcher enthält) verraten über Ihren Computer oder sogar über Sie Details, die nicht unbedingt für den Rest der Welt bestimmt sind. Es empfiehlt sich daher, nicht benötigte Services auszuschalten oder sogar ganz zu deinstallieren.

In der netstat-Ausgabe aus Listing 1 sehen Sie den Eintrag finger. Dieser Dienst verrät einiges über den Rechner oder dessen Benutzer – und das nicht nur lokal, sondern auch auf entfernten Maschinen (Listing 2).

Listing 2

Der <I>finger<I>-Dienst

antony@mars:~$ finger pooh@saturn
[saturn.rockstone.co.uk]
Login: pooh                             Name: Pooh Bear
Directory: /home/pooh                   Shell: /bin/bash
Last login Sun Apr 27 14:55 (BST) on ttyp0 from jupiter
New mail received Sat May 10 12:59 2003 (BST)
     Unread since Fri May  9 15:18 2003 (BST)
No Plan.

Wie Sie sehen, gibt er einige recht vertrauliche Dinge preis: der Vor- und Nachnamen des Benutzers, Datum und Uhrzeit des letzten Login, den Name des Rechners, von dem aus die letzte Anmeldung erfolgte, oder mit Datum und Uhrzeit, wann User pooh die letzte Mail empfangen und gelesen hat. Der finger-Dienst ist ein Überbleibsel aus den Anfängen des Internets, als die Zahl der Nutzer noch überschaubar und die Übermittlung von Information wichtiger war als deren Schutz. Heutzutage gibt es fast keinen Grund mehr, den finger-Service auf einem Computer anzubieten – erst recht nicht über’s Internet.

Doch nicht nur die unerwünschte Informationsweitergabe birgt Risiken. Netzwerkdienste können Sicherheitslöcher haben, durch die fremde Benutzer Ihren Rechner betreten und eventuell root-Rechte erlangen können.

Bevor Sie damit anfangen, Dienste abzuschalten, lohnt es sich klarzumachen, wie Linux Daten vor lokalen und fremden Benutzern schützt. Abbildung 1 zeigt, über welche Ebenen Daten für Benutzer erreichbar sind: Nur wenn Sie Anwendungen und Daemons kontrollieren, können Sie den Zugriff auf sensible Daten beeinflussen.

Abbildung 1: Gut geschachtelt – Zugriffskontrolle für Daten

Abbildung 1: Gut geschachtelt – Zugriffskontrolle für Daten

Gehen wir davon aus, dass auf dem System keine Software mit nennenswerten Sicherheitslücken installiert ist. In dem Fall liegt der Hauptaugenmerk auf den Daemons. Nicht richtig konfiguriert, ermöglichen sie unter Umständen Zugriff auf sensible Daten. Noch viel schlimmer: Sie bilden häufig die Eingangstür für unerwünschte Besucher.

Daemons austreiben

Ein wichtiger Schritt zu mehr Sicherheit besteht daher darin, überflüssige Netzwerkdienste zu finden und abzuschalten. Viele davon kontrolliert der Super-Daemon inetd: Er startet sie nur dann, wenn sie benötigt werden – eine effizientere Lösung als die, dass ständig ein eigener Daemon für jeden Service läuft. In der Datei /etc/inetd.conf (Listing 3) findet inetd die Informationen darüber, welche Dienste wie gestartet werden.

Listing 3

Auszüge aus <I>/etc/inetd.conf<I>

ftp       stream   tcp   nowait   root     /usr/sbin/tcpd       proftpd
# telnet  stream   tcp   nowait   root     /usr/sbin/tcpd       in.telnetd
shell     stream   tcp   nowait   root     /usr/sbin/tcpd       in.rshd -L
login     stream   tcp   nowait   root     /usr/sbin/tcpd       in.rlogind
# exec    stream   tcp   nowait   root     /usr/sbin/tcpd       in.rexecd
# talk    dgram    udp   wait     root     /usr/sbin/tcpd       in.talkd
ntalk     dgram    udp   wait     root     /usr/sbin/tcpd       in.talkd
finger    stream   tcp   nowait   nobody   /usr/sbin/tcpd       in.fingerd -u
# systat  stream   tcp   nowait   nobody   /usr/sbin/tcpd       /bin/ps -auwwx
# netstat stream   tcp   nowait   root     /usr/sbin/tcpd       /bin/netstat -a
auth      stream   tcp   wait     nobody   /usr/sbin/in.identd  in.identd -P/dev/null

Zeilen, welche mit einer Raute # beginnen, ignoriert der inetd. Ein erster Schritt zum sicheren System ist also das Abschalten diverser Services durch Auskommentieren der Einträge in /etc/inetd.conf.

Grundsätzlich gilt: Wird ein Dienst nicht benötigt, schalten Sie ihn ab. Sie sollten auf der Maschine nur die Services starten, die Sie wirklich brauchen. Einige Dienste sind sogar so unsicher, dass wir völlig davon abraten (siehe Kasten 1).

Kasten 1: Unsichere Dienste

Einige Netzwerkdienste und -Protokolle sind so unsicher, dass Sie nach Möglichkeit völlig auf sie verzichten sollten:

*telnet erlaubt das Einloggen auf anderen Rechnern. Anders als bei ssh gehen dabei aber der Benutzername und das Passwort (und alle weiteren Kommandos) im Klartext über das Netz. Mit sogenannten “Paket-Sniffer”, die telnet-Verbindungen zwischen Client und Server abhören, kommen bösartige Mitbenutzer des Netzes an diese sensiblen Daten.

  • rsh ist sogar noch unsicherer, weil dieser Dienst so konfiguriert werden kann, dass Verbindungen ohne Passwort-Abfrage aufgebaut werden dürfen. Ein unbefugter Eindringling muss also nicht mal mehr das Passwort raten.

Eiserne Sicherheitsregel: Verzichten Sie am besten auf alle Dienste, die kein Passwort erfordern oder die dieses unverschlüsselt über’s Netz schicken. Dazu gehören außer den besprochenen beispielsweise ftp, rlogin, pop3 und nfs. All diese Protokolle können sicherer gemacht werden, indem sie mit ssh “getunnelt” werden (siehe dazu auch die weiteren Artikel im Schwerpunkt).

Nachdem Sie alle überflüssigen Einträge in /etc/inetd.conf auskommentiert haben, kann es gut sein, dass Sie nur noch ein oder zwei Einträge übrig haben – nicht ungewöhnlich für ein halbwegs sicheres System. Anschließend muss der inetd neu gestartet werden:

kill -HUP `cat /var/run/inetd.pid`

Zur Sicherheit schauen Sie mit netstat -a nach, was noch läuft – das Programm darf die abgeschalteten Dienste nicht mehr anzeigen.

Offene Türen

Nicht alle Dienste, die von netstat angezeigt werden, tauchen in /etc/inetd.conf auf; sie werden also offenbar anders gestartet. Das gilt beispielsweise für den ssh-Daemon:

antony@mars:~$ ps ax | less
[…]
  499 ?        S      0:00 /usr/sbin/sshd

Mit dem Kommando ps lassen Sie sich alle laufenden Prozesse anzeigen [1], darunter auch die Daemonen, die nicht von inetd abhängen. Das Pipe-Zeichen leitet dessen Ausgabe an den Befehl less weiter, welcher sie seitenweise anzeigt. Zu den Netzwerkdiensten, die Sie abschalten sollten (sofern Sie sie nicht unbedingt benötigen), zählen nmbd und smbd, named und httpd. nmbd und smbd gehören beide zu Samba; sie sorgen für Datei- und Druckdienste für Windows-Netzwerke. Der “Domain Name Server” named löst Namen, wie z. B. “www.linux-user.de”, zur IP-Adresse 62.245.157.217 auf. In seiner eigenschaft als Webserver nimmt httpd Anfragen von Browsern entgegen und bearbeitet sie.

Beachten Sie, dass nicht jeder Service, der auf “d” endet und dessen Bedeutung Ihnen nicht sofort klar ist, ausgeschaltet werden muss. Einige Daemons brauchen Sie sogar unbedingt für den Betrieb Ihres Rechners, z. B. syslogd, klogd, kswapd oder apmd. syslogd und klogd zeichnen beide für die Log-Dateien zuständig. Fehler- oder Protokollausgaben von Programmen fängt der syslogd auf und leitet sie in die Logfiles weiter. Der klogd nimmt seine Arbeit beim Systemstart vor allen anderen Daemons auf und protokolliert anschließend die Meldungen des Kernels. Der “Kernel Swap Daemon” kswapd überwacht die Swap-Bereiche (Partitionen oder Dateien) und behandelt Speicheranforderungen von Programmen, die nicht vom physikalisch vorhandenen Arbeitsspeicher abgedeckt werden können. Auf Laptops schaltet der “Advanced Power Management Daemon” apmd beispielsweise nicht benutzte Festplatten ab, um Strom zu sparen, und gibt Auskunft über die Batterieleistung.

Ports unter der Lupe

Noch mehr über angebotene Netzwerkdienste lässt sich mit sogenannten Port-Scans herausfinden. Programme wie das von Trinity in “Matrix reloaded” benutzte nmap überprüfen dabei, welche Services ein Rechner über’s Netz anbietet. Sie testen jeden möglichen TCP– und UDP-Port und sprechen so außer ein paar exotischen Services (wie z. B. Novell IPX oder IPsec Virtual Private Network Support) alle Netzwerkdienste an, um zu sehen, hinter welchen Ports Server antworten.

Am besten starten Sie einen solchen Port-Scan von einem anderen Computer aus – ohne Firewall oder andere Filter-Systeme im Weg. Beachten Sie dabei bitte, dass Sie nur eigene Rechner scannen, da Sie sich sonst eventuell strafbar machen. Admins fremder Rechner werden sich über einen Einbruchsversuch, auch wenn es “nur” ein Test war, nicht gerade freuen und entsprechend reagieren. Alternativ lässt sich über die Website http://www.port-scan.de/ der eigene Rechner auf offene Türen hin überprüfen (Abbildung 2).

Abbildung 2: Alles sicher?

Abbildung 2: Alles sicher?

Das Kommandozeilen-Tool nmap darf nur der Super-User root starten. Es zeigt an, welche Ports offen oder geschlossen sind. In Listing 4 warten acht TCP-Ports auf dem Rechner saturn auf Anfragen; nmap bezeichnet sie in der Zusammenfassung als open. Zu den typischen Abschaltkandidaten zählen in diesem Beispiel telnet und ftp.

Listing 4

Port-Scan mit <I>nmap<I>

root@mars:~# nmap saturn
Starting nmap 3.27 ( www.insecure.org/nmap/ ) at 2003-05-20 17:09 BST
Interesting ports on 192.168.1.13:
(The 1615 ports scanned but not shown below are in state: closed)
Port       State       Service
21/tcp     open        ftp
22/tcp     open        ssh
23/tcp     open        telnet
37/tcp     open        time
111/tcp    open        sunrpc
113/tcp    open        auth
139/tcp    open        netbios-ssn
515/tcp    open        printer
Nmap run completed – 1 IP address (1 host up) scanned in 4.175 seconds

Kehraus

Die meisten einzeln und nicht über indetd zu startenden Daemons nehmen beim Booten ihren Dienst auf – und das sollen sie beim nächsten Systemstart nicht wieder. Um sie aus der dabei abgearbeiteten “Liste” zu entfernen, verwenden die verschiedenen Linux-Distributionen unterschiedliche Tools: Bei Debian erledigt das Perl-Skript update-rc.d oder noch einfacher das Tool rcconf diese Aufgabe. Starten Sie dieses als root, und deaktivieren Sie die unnötigen Dienste. Nach Bestätigen durch Ok löscht update-rc.d die Symlinks der entsprechenden Daemon-Start-Skripte in /etc/rc*.d.

Bei SuSE finden Sie den Runlevel-Editor im Arbeitsmenü unter Administration / YaST2 Module / System / Runlevel-Editor. Red-Hat-Anwender benutzen das Shell-Tool chkconfig, das eine sehr hilfreiche Manpage mitbringt. Alternativ lassen sich die symbolischen Links für die nicht länger erwünschten Dienste in den Verzeichnissen /etc/rc.d/rc0.d, /etc/rc.d/rc1.d usw. auch von Hand löschen.

Slackware besitzt kein spezielles Tool zur Runlevel-Konfiguration. Hier müssen Sie die entsprechenden Dateien im Verzeichnis /etc/rc.d (z. B. /etc/rc.d/rc.inet2) von Hand editieren. Setzen Sie in dieser Datei einfach das Raute-Zeichen # vor die unerwünschten Einträge.

All diese Änderungen treten erst beim nächsten Neustart des Rechners in Kraft. Wollen Sie nicht solange warten und laufende Netzwerkdienste sofort loswerden, rufen Sie das entsprechende Init-Skript als root mit dem Argument stop auf. So beendet

root@venus # /etc/init.d/postfix stop
Shutting down mail service (Postfix)

den Mailserver postfix. Alternativ finden Sie mit dem ps-Kommando die Prozess-ID des jeweiligen Daemons heraus. Diese steht in der ersten Spalte der Ausgabe unter PID. Anschließend werden Sie ihn mit dem Befehl kill los:

kill prozessnummer

Platte geputzt

Nachdem alle unsicheren Dienste abgeschaltet sind, sollten hoffentlich keine sensiblen Daten mehr über’s Netz geschickt oder Türen für Angreifer geöffnet werden. Natürlich kann es auch immer Sicherheitslücken in anderen Programmen, die Sie wirklich benötigen, geben. Websites wie [3–5] geben Informationen über bekannte Sicherheitsprobleme und liefern Anleitungen, wie entsprechende Security-Fixes eingespielt werden.

Am besten schalten Sie unerwünschte Dienste nicht einfach nur ab, sondern deinstallieren Sie sie wirklich. Überschreibt ein Distributions-Upgrade beispielsweise die veränderte Datei /etc/inetd.conf, antworten plötzlich die einstmals sorgfältig auskommentierten Netzwerkdienste wieder auf Anfragen. Ein deinstallierter fingerd startet jedoch auch dann nicht. Sollten Sie einen abgeschalteten Dienst zu einem späteren Zeitpunkt doch benötigen, lässt er sich jederzeit neu installieren.

Sobald Sie mit der Abschalterei ferig sind, vergessen Sie nicht, das System nochmal mit einem Port-Scan zu testen.

Schotten dicht?

Operating System Hardening kann und sollte aber noch weiter gehen: * Entfernen Sie überflüssige Benutzerzugänge (Accounts). * Überprüfen Sie Datei- und Gruppenrechte. * Wählen Sie sichere Passwörter, die schwierig zu knacken sind. * Verwenden Sie einen Kernel, der lediglich die Dienste und Protokolle unterstützt, die Sie brauchen.

Wie eingangs erwähnt: Sicherheit hat viele Aspekte und lässt sich auf unterschiedlichen Wegen verbessern. Die in diesem Artikel vorgeschlagenen Maßnahmen können dazu beitragen, potentiellen Angreifern das Leben ein bisschen schwerer zu machen.

Glossar

Auskommentieren
Einträge in einer Konfigurationsdatei werden ignoriert, wenn sie mit einem speziellen Zeichen markiert sind. Sehr oft wird hierfür die Raute verwendet.
Port
Über Netzwerk-Ports von 0 bis 65535 können auf einem System Netzwerkdienste angesprochen werden. Viele Port-Nummern sind standardisiert einem bestimmten Dienst zugewiesen (z. B. läuft der DNS auf Port 53), andere lassen sich frei vergeben. So lauschen Webserver nicht nur auf Port 80, sondern oft auch auf Port 8000 oder 8080.
TCP
Das “Transport Control Protocol” dient zur Datenübertragung. Vor dem Verschicken werden die Daten dabei in kleine Pakete unterteilt, über die Sender und Empfänger vor dem eigentlichen Transfer Informationen austauschen. TCP sorgt für eine Empfangsbestätigung für jedes Paket und sorgt für die richtige Einsortierung. So lassen sich Übertragungsfehler korrigieren. Der Nachteil dieses zuverlässigen Protokolls: Es ist ineffizient für kleine Datenmengen. Die meisten Internet-Protokolle basieren auf TCP.
UDP
Das “User Datagram Protocol” ist effizienter, aber unzuverlässiger als TCP. Ob Pakete beim Empfänger ankommen, überprüft es nicht. Als Alternative zu TCP kommt beispielsweise beim Audio-Streaming zum Einsatz. Wenn Pakete unterwegs verloren gehen, wird die Übertragung einfach fortgesetzt.
/etc/rc*.d
Für jedes mögliche Runlevel eines Linux-Systems gibt es ein extra Verzeichnis, in dem Verweise (Links) auf die “Init(ialisierungs)-Skripte stehen, die Dienste starten oder anhalten [2]. Für Runlevel 5 ist das beispielsweise das Verzeichnis /etc/rc5.d; auch /etc/rc.d/rc5.d oder /etc/init.d/rc5.d sind gebräuchlich.
Runlevel
Betriebsmodus eines Linux-Systems. Durch gezielte Auswahl der Links im jeweiligen Runlevel-Verzeichnis lassen sich beispielsweise Konfigurationen zusammenstellen, bei denen der Rechner als Internet-Server bootet, oder solche, bei denen ein grafisches Login möglich ist.

Infos

[1] Heike Jurzik: “Kurzer Prozess für Zombies – ps, kill und Konsorten”, LinuxUser 12/2000, S. 92 f., http://www.linux-user.de/ausgabe/2000/12/092-zubefehl/befehl11.html

[2] Marc André Selig: “Wie Linux sich die Stiefel anzieht”, LinuxUser 12/2002, S. 26 ff., http://www.linux-user.de/ausgabe/2002/12/026-init/

[3] http://www.cert.org/

[4] http://www.cert.dfn.de/

[5] http://www.bsi.de/

[6] http://www.sans.org/top20/

Der Autor

Antony Stone besitzt einen Universitätsabschluss in Medizinischer Elektrotechnik und arbeitet seit 1994 mit Linux. Er ist Technical Director bei Rockstone Ltd, einem Unternehmen mit Sitz in Großbritannien, das Firewalls auf Linux-Basis herstellt. An der University of London unterrichtet er einen Masters-Kurs in Information Security.

LinuxUser 07/2003 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben