|
System härtenDas Härten eines Systems beginnt schon mit der Betriebssystem-Neuinstallation. Stellen Sie den Rechner in ein isoliertes Netzwerk. Zu keiner Zeit sollte man das ungeschützte System an ein aktives Netz oder gar das Internet anbinden und es so einer möglichen Kompromittierung aussetzen. Der erste Schritt ist die Auswahl der Installationspakete. Es wird nur das Minimum installiert, das man braucht um maximale Effizienz zu behalten. Je weniger Software installiert wird, desto weniger potentielle Sicherheitlücken entstehen. Unabhängig von der Installationsvariante sollte man die man-pages und die HOWTOs mitinstallieren. Während der Installation wird man aufgefordert, sein System zu partitionieren. Man braucht zumindest eine root-Partition und eine separate Partition für /var, wohin die Systemlogs und Mails geschrieben werden. Indem man /var isoliert, verhindert man, das die root-Partition vollgeschrieben wird. Eventuell sprendoert man für dieDatenbereiche des Web- oder FTP-Servers eine weitere Partition.Wenn auf dem System nicht vertrauenswürdige Benutzer existieren, sollte man evtl. eine extra /home-Partition anlegen, damit diese Nutzer nicht die root-Partition vollschreiben können. Dazu kommt dann noch die swap-Partition. Normalerweise nimmt man hier die doppelte RAM-Kapazität. Nachdem das System nach der Installation neu gestartet hat, sollte man unbedingt die empfohlenen Sicherheitspatches einspielen. Diese Patches sind extrem wichtig, um ein System zu härten und sollten immer auf dem aktuellen Stand gehalten werden. Ohne diese Updates ist das System leicht zu kompromittieren. Dienste eliminieren Nach der Installation aller Pakete und Patches und dem Neustart des Systems sind wir jetzt bereit das Betriebssystem zu härten. Härten besteht im wesentlichen darin, Dienste abzuschalten, Logging hinzuzufügen, verschiedene
Dateien zu bearbeiten und TCP-Wrapper zu implementieren.
Linux ist ein mächtiges Betriebssystem, das viele nützliche Dienste anbietet.
Die meisten davon werden aber nicht gebraucht und stellen ein potentielles Risiko.
Der erste Ansatzpunkt ist die Datei /etc/inetd.conf. Diese Datei legt fest,
auf welche Dienste der Daemon lauscht. Im Ursprungszustand ist der inetd
für eine Vielzahl von Diensten konfiguriert. Es werden alle Zeilen auskommentiert,
die nicht benötigte Dienste enthalten ("#" an den Zeilenanfang setzen). Zur Sicherheit
können Sie sich alle noch aktiven Dienste mittels grep -v "^#" /etc/inetd.conf
anzeigen lassen. Danach muß der inetd ein HUP-Signal bekommen. Da aber nach allen
Arbeiten der Rechner sowieso nochmals gebootet wird, kann man sich das an dieser
Stelle sparen.
Der nächste Ansatzpunkt sind die Start-Skripte. Diese Skripte bestimmen, welche
Dienste durch den init-Prozess gestartet werden. Man findet sie je nach Distribution
in /etc/init.d, /sbin/init.d oder /etc/rc.d.
Hier werden alle nicht benötigten Start/Stop-Skripte durch Anhängen von ".inaktiv"
umbenannt. Kritisch sind hier unter anderem:
telnetd (Telnet abschalten, Logins nur per ssh erlauben)
portmap (wird von rpc-Diensten wie NIS oder NFS benötigt)
netfs (Der NFS-Client)
rstatd (Man sollte versuchen, auf alle "r"-Dienste zu verzichten)
rusersd
rwhod
rwalld
bootparamd (Für diskless clients, abschalten)
yppasswdd (Nur bei NIS-Servern, ein extrem verwundbarer Dienst)
ypserv
atd (Wird vom "at"-Dienst benutzt)
snmpd (SNMP daemon, kann detaillierte Informationen über
das System geben)
named (DNS server)
routed (RIP: abschalten!)
lpd (Druckdienste)
nfs (Benötigt für den NFS Server, sonst abschalten)
amd (AutoMount daemon)
gated (für andere Routingprotokolle wie OSPF)
sendmail (man kann dann immer noch E-Mails senden, nur keine empfangen
oder weiterleiten)
ypbind (nötig, wenn man ein NIS-Client ist)
xfs (X font Server)
innd (News Server)
linuxconf (Fernkonfiguration per Browser. Der Traum jedes "bösen Buben")
Nach der Anpassung der Skripte (und einem Reboot), kann man sich mit dem Kommando
ps -aux ansehen, wwelche Prozesse noch laufen. Außerdem sollte man feststellen,
welche Dienste noch laufen: netstat -na --ip
Logging und Tuning
Alle Systemlogs liegen in /var/log. Standardmäßig hat Linux eine
hervorragende Logfunktion, außer für ftp. Man hat zwei Möglichkeiten, ftp mitzuloggen:
entweder man editiert die Datei /etc/ftpaccess oder die Datei
/etc/inetd.conf. Letzteres ist einfacher. Ändern Sie die Date wie folgt:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -L -i -o
Die -l Option sorgt dafür, daß jede ftp-Sitzung im syslog protokolliert wird.
Wird das -L flag gesetzt, werden bei Aufruf des ftp-Servers alle USER-Befehle
mitprotokolliert. Die -i Option bewirkt, daß alle Dateien, die der FTP-Server
empfängt, in der Datei xferlog mitprotokolliert werden und durch die Option -o
werden alle Dateien, die der Server gesendet hat, in der Datei xferlog
mitprotokolliert.
Der nächste Schritt besteht darin, die meisten Systemaccounts aus der Datei
/etc/passwd zu entfernen. Linux stellt diese Accounts für verschiedene
Systemdienste zur Verfügung, die eventuell nicht gebraucht werden. Je mehr Benutzer
es gibt, um so einfacher ist es, Zugriff auf ein System zu bekommen. Ein Beispiel
ist der User "news". Wenn kein Newsserver läuft, ist dieser Benutzer überflüssig
Jetzt wird die Datei /etc/ftpusers angepaßt. Jeder Benutzer, der in dieser
Datei aufgeführt wird, darf sich nicht per FTP anmelden. Diese Anpassung verbietet
es gängigen Systemaccounts wie root oder bin FTP-Sitzungen aufzubauen.
Bei Linux existiert diese Datei standardmäßig. Stellen sie sicher, das root auf
jeden Fall enthalten ist.
Die Datei /etc/securetty listet auf, mit welchen ttys sich root verbinden
darf. Lassen sie nur die Konsol-ttys (tty1, tty2 usw.) in dieser Datei um
Root-Logins auf lokale Terminals zu beschränken.
Kontollieren Sie alle cron-Aufträge (/etc/crontab, /etc/cron.d, die
Crontab von root usw.), ob da nur das enthalten ist, was Sie wirklich wollen.
Verbindungen zum Server
Es ist wichtig, zur Administration oder den Upload von Dateien eine sichere Verbindung
zum Server zu haben. Dafür bieten sich zwei Möglichkeiten, ssh und der TCP-Wrapper.
ssh verschlüsselt jede Kommunikation zwischen Administrator und Server. Ein
TCP-Wrapper wehrt zwar unerwünschte Verbindungen ab, schützt den Netzverkehr nicht
gegen das Abhören. Hacker können immer noch jeden Tastendruck im Netz mitlesen.
Ersetzen Sie telnet und ftp durch ssh und scp.
ssh ähnelt TCP-Wrappern insofern, als es seine eigenen Protokollorierung
besitzt und einschränken kann, welche Systeme sich mit dem Server verbinden können.
Mehr Informationen über ssh sowie das Programm selber findet man unter
(http://www.openssh.com).
Wenn man sich ohne Vorbereitung versucht anzumelden wird man wie gewohnt nach
einem Passwort gefragt. Vorher wird noch sichergestellt, ob man sich mit dem
Rechner überhaupt verbinden will:
$ ssh tralala
The authenticity of host 'tralala (192.168.1.32)' can't be established.
RSA key fingerprint is 69:fd:32:d8:cf:d6:f3:8c:37:41:97:3f:54:25:90:0b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'tralala,192.168.1.32' (RSA) to the list of known hosts.
plate@tralala's password: geheim
...
Ein TCP-Wrapper kann zwar nicht verschlüsseln, ist aber in der Lage
zu protokollieren und zu kontrollieren wer Zugriff auf den Server hat. Es handelt
sich hier um ein Programm, das sich zwischen den inetd und die Dienste wie
telnet und ftp schaltet. Anhand der Dateien /etc/hosts.allow
und /etc/hosts.deny wird die Zugriffsberechtigung überprüft. Wenn der Zugriff
berechtigt erfolgt, übergibt der Wrapper die Verbindung an das entsprechende
Programm. Ansonsten wird die Verbindung gekappt. Die Konfiguration wurde bereits in
Kapitel 11 besprochen. Deshalb hier nur noch zwei
Empfehlungen für den Einsatz von TCP-Wrappern:
- IP-Adressen statt System- oder Domänennamen verwenden
- In der Datei /etc/hosts.deny jeden Zugriff verbieten und dann selektiv
in der Datei /etc/hosts.allow wieder freigeben.
Weitere Maßnahmen
Die oben beschriebenen Maßnahmen sind absolut notwendig. Die folgenden Aktionen
verbessern die Sicherheit weiter.
- Erstellen Sie eine administrative Gruppe (wheel oder staff).
Diese Gruppe besteht aus ausgewählten Personen, die administrative Kommandos wie
z.B. /usr/bin/su ausführen können. Durch Beschränkung der Personengruppe
steigert man die Systemsicherheit. Bei allen kritischen Systemprogrammen ändern
Sie die Gruppe auf wheel und beschränken Sie die Execute-Berechtigungen
auf Eigentümer und Gruppe (Achtung: das SUID- oder GUID-Bit muß unverändert bleiben),
z. B. mit chmod o-x programmname.
- Dann werden die Dateien .rhosts, .netrc und
/etc/hosts.equiv gesperrt, indem alle Rechte entfernt werden
(chmod 0 Dateiname). Die r-Befehle nutzen diese Dateien um auf Systeme
zuzugreifen. Sind die Dateinen nicht vorhanden, legt man sie per touch-Befehl
an.
|
|
|