Je mehr unsichere Dienste auf der Firewall laufen, um so mehr kann die eigentliche Aufgabe der Firewall, gefährlichen Netzwerkverkehr zu blocken, untergraben und damit nutzlos gemacht werden.
Gängige Linuxdistributionen stellen die passenden Tools (Runlevel
Editor) bereit, um Netzwerkdienste bequem zu starten oder stoppen.
Abbildung 1, Runlevel-Editor unter Red Hat Linux 6.1
Ein Auszug der Datei /etc/services:
# /etc/services: daytime 13/tcp daytime 13/udp netstat 15/tcp qotd 17/tcp quote ftp-data 20/tcp ftp 21/tcp fsp 21/udp fspd ssh 22/tcp # SSH Remote Login Protocol ssh 22/udp # SSH Remote Login Protocol telnet 23/tcp domain 53/tcp nameserver # name-domain server domain 53/udp nameserver tftp 69/udp gopher 70/tcp # Internet Gopher gopher 70/udp # finger 79/tcp www 80/tcp http # WorldWideWeb HTTP www 80/udp # HyperText Transfer Protocol # pop-2 109/tcp postoffice # POP version 2 # pop-2 109/udp # pop-3 110/tcp # POP version 3 # pop-3 110/udp imap2 143/tcp imap # Interim Mail Access Proto v2 imap2 143/udp imap https 443/tcp # MCom https 443/udp # Mcom
Auszug aus der Konfigurationsdatei
/etc/inetd.conf:
# inetd.conf This file describes the services that will be available
# through the INETD TCP/IP super server. To re-configure
# the running INETD process, edit this file, then send the
# INETD process a SIGHUP signal.
#
# Version: @(#)/etc/inetd.conf 3.10 05/27/93
#
# Authors: Original taken from BSD UNIX 4.3/TAHOE.
# Fred N. van Kempen,<waltje@uwalt.nl.mugnet.org>
# To re-read this file after changes, just do a 'killall -HUP inetd'
#
# <service_name> <sock_type> <proto> <flags> <user>
<server_path> <args>
# #echo stream tcp nowait root internal #echo dgram udp wait root internal #discard stream tcp nowait root internal #discard dgram udp wait root internal #daytime stream tcp nowait root internal #daytime dgram udp wait root internal #chargen stream tcp nowait root internal #chargen dgram udp wait root internal #time stream tcp nowait root internal #time dgram udp wait root internal ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a # telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd shell stream tcp nowait root /usr/sbin/tcpd in.rshd login stream tcp nowait root /usr/sbin/tcpd in.rlogind #exec stream tcp nowait root /usr/sbin/tcpd in.rexecd #talk dgram udp wait nobody.tty /usr/sbin/tcpd in.talkd #ntalk dgram udp wait nobody.tty /usr/sbin/tcpd in.ntalkd #pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d #pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d #imap stream tcp nowait root /usr/sbin/tcpd imapd #uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l # auth stream tcp wait root /usr/sbin/in.identd in.identd -e -o #bootps dgram udp wait root /usr/sbin/tcpd bootpd ## Finger, systat and netstat give out userinformation which may be
Einem sicheren Paßwortsystem kommt deshalb eine große Bedeutung
zu.
Linux Systeme sollten mit dem shadow System betrieben werden. Dies
ist heute bei allen gängigen Linuxdistributionen der Fall.3
Früher wurden Benutzerdaten und Paßwörter in den Datei /etc/passwd gespeichert. Es war systembedingt jedoch nötig, daß alle Benutzer diese Datei lesen konnten. Die Paßwörter liegen hier zwar verschlüsselt vor, leider gibt es aber Programme, die diese Verschlüsselung in kurzer Zeit knacken können.
Das shadow Paßwortsystem geht einen anderen Weg. Hier sind sämtliche Benutzerdaten weiterhin in der Datei /etc/passwd gespeichert, das Paßwort wurde jedoch in eine separate Datei, /etc/shadow, ausgegliedert. Diese Datei ist nur vom Superuser root lesbar. Es ist erheblich schwerer für diese Datei Lesezugriff zu erlangen.
Paßwörter eines Systems mit vielen Benutzern sollten regelmäßig mit dem Programm Crack überprüft werden, um schwache Paßwörter ausfindig zu machen, und die Benutzer erneut zur Paßwortvergabe aufzufordern.4
Bei Crack handelt es sich um ein Programm, das mit unterschiedlichen Ratetechniken versucht, Paßwörter herauszufinden. Findet Crack ein Paßwort innerhalb kurzer Zeit heraus, so kann davon ausgegangen werden, daß Angreifer dies auch tun werden 5
Ein wirklich gutes Paßwort läßt sich mit der folgenden Eselsbrücke kreieren:
Man nehme einen beliebigen Satz, in dem auch Zahlen enthalten sind,
also z.B.
"Eine Fußballmannschaft
besteht aus
10 Spielern und einem
Torwart". Von
diesem Satz nimmt man nun immer nur den Anfangsbuchstaben eines jeden Worts.
Die Zahlen werden einfach übernommen. Das sich daraus ergebende Paßwort
lautet dann
Efba10Su1T
Es existieren zwei unterschiedliche Typen von IDS:
Bei den regelbasierten Systemen gibt es zwei unterschiedliche Ansätze:
Im Folgenden sollen einige Intrusion Detection Tools kurz vorgestellt,
sowie auf deren Funktion und Konfiguration eingegangen werden.
Portsentry überwacht die TCP/UDP Ports eines Systems. Es erkennt Portscans, die gegen das System gerichtet sind. Dabei spürt es mit verschiedenen Betriebsarten (Classic Mode, Enhanced Stealth Mode, Advanced Stealth Mode) unterschiedliche Arten von Stealth-Scans, wie z.B. SYN/half-open, FIN, NULL und X-MAS auf. Portsentry arbeitet sehr ressourcensparend. Es muß nur einmal gestartet werden und überwacht beliebig viele Ports. Alle Angriffsversuche werden in den Systemlogdateien mitprotokolliert.
Portsentry antwortet auf versuchte Portscans, in dem es den angreifenden Computer blockt:
Die meisten Angriffe werden so im Keim erstickt.
Portsentry sollte in eine der Startdateien (z.B. /etc/rc.d/rc.local) eingetragen werden, um nach dem Booten automatisch seinen Dienst zu verrichten.
Portsentry Konfiguration:
Portsentry wird über die Datei /usr/local/psionic/portsentry/portsentry.conf konfiguriert.
Einige wichtige Abschnitte der Konfigurationsdatei:
Logcheck überprüft die Systemlogs auf ungewöhnliche Aktivitäten. Es durchsucht die verschiedenen Logdateien unter dem Verzeichnis /var/log/ und informiert den Systemadministrator per Mail, wenn verdächtige Einträge gefunden wurden.
Logcheck bedient sich dazu mehrerer Konfigurationsdateien, die Schlüsselwörter enthalten. Dadurch unterscheidet Logcheck was als harmloser Eintrag gilt, und ignoriert werden kann, und welche Einträge auf einen Angriff oder einen verdächtigen Vorgang hinweisen, und gemeldet werden müssen.
Logcheck besteht aus den folgenden Dateien:10
tftpd.*: refused connect from .*
Hier wurde versucht, mit TFTP, Trivial File Transfer Protocol auf den
Computer zuzugreifen. Der Name von TFTP ist Programm: Es handelt sich um
einen sehr unsicheren Netzwerkdienst. Ein blinder Versuch, mit diesem auf
die Firewall r zu verbinden, kann als eindeutiger Angriff gerechnet werden.13
Wird in den zu überprüfenden Logs eines dieser Schlüsselworte
gefunden, erhält der Administrator eine Mail mit dem Header "ACTIVE
SYSTEM ATTACK".
Die Mail enthält die von Logcheck beanstandeten Logeinträge.
Logcheck.hacking sollten nur dann eigene Schlüsselbegriffe hinzugefügt werden, wenn bekannt ist, wie sich ein Angriff in den Logfiles niederschlägt. So führt z.B. ein Jolt Angriff14 zu folgendem Logeintrag:
kernel: Oversized packet received from <IP Adresse>
Ein kleiner Auszug aus logcheck.hacking:
LOGIN root REFUSED
rlogind.*: Connection from .* on illegal port
rshd.*: Connection from .* on illegal port
sendmail.*: user .* attempted to run daemon
uucico.*: refused connect from .*
tftpd.*: refused connect from .*
login.*: .*LOGIN FAILURE.* FROM .*root
login.*: .*LOGIN FAILURE.* FROM .*guest
login.*: .*LOGIN FAILURE.* FROM .*bin
login.*: .*LOGIN FAILURE.* FROM .*uucp
login.*: .*LOGIN FAILURE.* FROM .*adm
login.*: .*LOGIN FAILURE.* FROM .*bbs
login.*: .*LOGIN FAILURE.* FROM .*games
login.*: .*LOGIN FAILURE.* FROM .*sync
login.*: .*LOGIN FAILURE.* FROM .*oracle
login.*: .*LOGIN FAILURE.* FROM .*sybase
kernel: Oversized packet received from
attackalert
In dieser Datei stehen Schlüsselbegriffe, die auf ungewöhnliche, nicht gern gesehene Vorgänge hinweisen, z.B. eine Mißlungene Anmeldung eines Benutzers am System.
Ein Auszug aus logcheck.violations
LOGIN FAILURE
LOGIN REFUSED
PERMITTED
REFUSED
RETR group
RETR passwd
RETR pwd.db
ROOT LOGIN
SITE EXEC
VRFY
"WIZ"
admin
alias database
debug
denied
deny
deny host
expn
failed
Logeinträge, die mit Schlüsselbegriffen dieser Datei übereinstimmen, werden mit dem Header "Security Violation" an den Administrator gesandt.
Es ist beispielsweise möglich, daß in einem Logeintrag der Suchbegriff "refused" gefunden wurde. Logcheck meldet dem Administrator den Vorfall als Security Violation. Beim nährern Betrachten der Mail und der Logs stellt sich nun heraus, daß der Eintrag vollkommen harmlos ist, obwohl er das Wort "refused" enthält. Durch Eintrag dieses Logabschnitts in die Datei logcheck.violations.ignore wird das System angewiesen, entsprechende Logeinträge zukünftig nicht mehr als bedrohliche Vorfälle zu melden. Auf andere Einträge mit dem Inhalt "refused" hat es keine Auswirkungen.
Auszug aus der Datei:
authsrv.*AUTHENTICATE
cron.*CMD
cron.*RELOAD
cron.*STARTUP
ftp-gw.*: exit host
ftp-gw.*: permit host
ftpd.*ANONYMOUS FTP LOGIN
ftpd.*FTP LOGIN FROM
ftpd.*retrieved
ftpd.*stored
http-gw.*: exit host
http-gw.*: permit host
mail.local
named.*Lame delegation
named.*Response from
named.*answer queries
named.*points to a CNAME
named.*reloading
Logcheck Installation:
Die Installation von Logcheck gestaltet sich einfach. Die wichtigen Daten sollten in ein eigenes Verzeichnis kopiert werden, z.B. /usr/local/logcheck/
Ein neuer Eintrag in /etc/crontab startet das Programm zu den eingestellten Zeiten.
00,15,30,45 * * * * /usr/local/logcheck/logcheck.sh
Logcheck wird alle 15 Minuten durch den cron-Daemon ausgeführt.
Hier setzt LIDS17, das Linux Intrusion Detection System, an. Die Sicherheit des Kernels wird durch LIDS erweitert. Einmal in Betrieb kann LIDS Dateizugriff, Administration und Zugriff auf Ein- und Ausgabegeräte verbieten. Auch root unterliegt diesen Einschränkungen.
LIDS Installation:
Für den Installation von LIDS muß ein neuer Kernel kompiliert werden, dem man LIDS per Kernelpatch hinzufügen muß:
cd <Pfadangabe zum Linux Quellcode>
patch -p0 lids-0.9.6a-2.2.16.patch
Nun stehen beim kompilieren des Kernels neue Optionen bereit. Für die einzelnen Optionen ist eine Hilfe vorhanden, so daß man mühelos feststellen kann, welche für das System aktiviert werden sollten und welchen weniger Bedeutung zukommt.
Anmerkung: Für den neuen Kernel muß ein spezielles Paßwort erstellt werden, mit dem man später die Funktion von LIDS ausschalten kann:
Lidsadm -P <Paßwort>
Das Paßwort wird verschlüsselt ausgegeben, und muß
bei den LIDS Kerneloptionen unter "RipeMD-160 encrypted password" eingetragen
werden.
Abbildung 2, LIDS Kerneloptionen
Ist der neue Kernel kompiliert und im System eingebunden, kann mit der Konfiguration von LIDS begonnen werden.18 Unter /etc/lids.conf findet man die Konfigurationsdatei. Sie sollte nie von Hand editiert werden ,sondern nur mit Hilfe des Programms lidsadm.
Eine mögliche Konfiguration könnte so aussehen:
lidsadm -Z
lidsadm -A -r /usr/bin
lidsadm -A -r /bin
lidsadm -A -r /usr/bin
lidsadm -A -r /sbin
lidsadm -A -r /usr/X11R6/bin
lidsadm -A -r /etc/rc.d
lidsadm -A -r /etc/sysconfig
lidsadm -A a /var/log
Die erste Zeile löscht alle alten Einträge. In den weiteren Zeilen wird der Schreibschutz für einzelne Verzeichnisse aktiviert. Dieser Schreibschutz läßt sich nur durch das Stoppen von LIDS wieder aufheben. Die letzte Zeile aktiviert den Appendmode für das Verzeichnis /var/log, d.h. an diese Dateien können Daten nur noch angefügt werden. Dies ist für die Pflege der Logs notwendig.
In eine der Startdateien muß lidsadm aufgerufen werden, um die Schutzfunktionen zu aktivieren:
lidsadm -I
LIDS ist nun aktiv und kann nur noch mit dem im vorherigen Abschnitt vergebenen Paßwort wieder gestoppt werden:
lidsadm -S
Ziel muß es deshalb sein, einem Angreifer möglichst viele
Steine in den Weg zu legen. Wird ein Angriff für den Hacker zu aufwendig,
verliert er das Interesse und sucht sich ein schwächeres Opfer.
Bernard, Frank. Brandschutz 2.2: Firewalls einrichten mit dem neuen
Linux Kernel.
Linux-Magazin Nr.06 (2000): S.86-95
Diedrich, Oliver/ Lubitz, Holger. Sichere Reise: Ein Firewall mit Linux.
c't Nr.3
(1999): S.154-159
Emmrich, Henning. Netzwerk in Ketten: Linux 2.2 als Internet-Gateway,
Router und
Firewall. c't Nr.17 (1999): S.194-203
Grennan, Mark. Firewall and Proxy Server HOWTO. v0.80. Februar 2000.
http://www.linuxdoc.org
Huagang, Xie. Build A Security System With LIDS. 2000. http://www.lids.org
Kofler, Michael. Linux: Installation Konfiguration Anwendung. 4.Auflage. Bonn: Addison Wesley Longman Verlag GmbH, 1999
Schmidt, Jürgen. Dasein oder Nicht-Sein: Analyse der Ausfallzeiten
von
Web-Servern. c't Nr.8 (2000): S.174-179
Stähle, Samuel. Firewalling unter Linux. v1.4. 2000.http://www.pro-linux.de
Ziegler, Robert. Linux Firewalls. Indianapolis, Indiana: New Riders
Publishing, 1999
Verweise im Text
1
Eine Liste gängiger Netzwerkdienste nebst Einschätzung, ob zum
Betrieb auf einer Firewall
geeignet, findet sich in:Ziegler, Robert. Linux Firewalls.
S.43-54. Siehe Literaturverzeichnis.
2
Vgl. Ziegler, Robert. Linux Firewalls, S.54ff.
3
Das shadow-Paket steht unter ftp://piast.t19.ds.pwr.wroc.pl/pub/linux/shadow/
zum Download zur Verfügung
4
Crack steht auf folgender Webseite zum Download bereit: http://www.users.dircon.co.uk/~crypto/
5
Mehr Informationen zu Crack finden sich unter http://alloy.net/writings/funny/crack_readme.txt
6
Vgl. Anonymous, Maximum Linux Security, s.538ff.
7
Portsentry steht unter http://www.psionic.com/abacus/portsentry
zum Download bereit.
8
Mehr Informationen zum Abacus Projekt finden sich unter http://www.psionic.com/abacus
9
Die Logcheck Homepage ist unter http://www.psionic.com/abacus/logcheck/
zu finden.
10
Es gibt noch ein paar andere Dateien, die für den Programmablauf jedoch
keine Bedeutung haben.
11
grep ist ein Linux Kommando, mit dem in Dateien nach Zeichenstrings gesucht
werden kann.
12
cron ist ein Daemon, der Programme zu vorgegebenen Zeiten (u.a. stündlich,
täglich, monatlich)
automatisch ausführt.
13
Natürlich läuft dieser Dienst nicht auf unserem System, da wir
in Kapitel 5.1 und 5.2 sämtliche
unsicheren und nicht genutzten Dienste von unserer Firewall
verbannt haben, dies ändert aber
nichts an der Brisanz des Logeintrags, nämlich das
versucht wurde diesen Dienst aufzurufen.
14
Siehe Kapitel 3.4 - Hacks und Exploits
15
Vgl. Build A Security System With LIDS. Huagang, Xie
16
Vgl. Anonymous, Maximum Linux Security, S.194ff.
17
LIDS steht unter http://www.lids.org
zum Download zur Verfügung.
Auf der Webseite finden sich auch weitere Informationen
zum System.
18
Eine ausführliche Anleitung zur Konfiguration von LIDS findet sich
im LIDS HOWTO von
Philippe Biond, welches unter http://www.lids.org
zur Verfügung steht.
Feedback ist wichtig für die Verbesserung des Service |
Autor: Felix
Mack
Datum: 22. Januar 2001 - Pro-Linux.de |