Einige Hinweise für den sicheren Betrieb von Linux Systemen
im Netzwerk:
Alle Hinweise ohne Gewähr! Sie sollten
unbedingt vor der Installation auf einem Live-Systems an einem
Entwicklungssystem getestet werden!
Die standardmäßige Installation einer
Linux-Distribution resultiert meist nicht in einem sehr abgesicherten System.
Deshalb hier einige Tipps, wie eine Linux Installation durch den Einsatz
einfacher Mittel (Zeit und Tools) Linux sicherer gemacht werden kann.
Einfache Tipps zur Härtung des Systems:
Einspielen aller Updates:
Meist ist seit der Pressung der CD einer Distribution bzw. des Download
der Installationsdateien aus dem Internet etwas Zeit vergangen.
Für einige der installierten Programme sind in der Zwischenzeit
möglicherweise Sicherheitslücken bekannt geworden, die in neueren
Versionen der Programme behoben sind.
Deshalb ist dringend zu empfehlen (insbesondere bevor ein Server
aus dem Internet erreichbar ist), alle verfügbaren Updates der
betreffenden Linux Distibution zu installieren.
Red Hat Enterprise Linux Systeme können mit dem Tool
up2date auf den aktuellen Stand gebracht werden.
Dazu brauchen Sie einen "Subscription Contract" und müssen das
System zuerst beim Red Hat Network registrieren:
up2date --register
Ein Update aller RPM Pakete auf die neueste Version geschieht
dann mit:
up2date --update
Die Distributionen Fedora und CentOS setzen für Online Updates das
Programm yum ein. Ein Update aller betroffenen Pakete
auf die neueste Version erfolgt als Benutzer Root mit:
yum update
Bei Debian GNU/Linux können Sie Updates einfach mit den
Kommandzeilen Utilities apt-get oder
aptitude durchführen.
Stellen Sie dazu sicher, dass in der Datei
/etc/apt/sources.list ein entsprechender Eintrag für
die installierte Debian Version (woody, sarge, etch, ...) eingetragen
ist, z.B.:
deb http://security.debian.org/ sarge/updates main
Ein Update aller betroffenen Pakete wird dann, als Benutzer Root,
wie folgt durchgeführt:
apt-get update
apt-get upgrade
Bei Suse Linux kann ein Paketupdate mit Yast
durchgeführt werden.
Einsatz von SecureSHell anstelle von Telnet-Daemon und R-Tools:
Der Einsatz Telnet als Zugang über das Netz und den R-Tools ist
nur in den wenigsten Fällen notwendig:
Verwendung von X-Server auf Hosts, die kein X-Tunneln durch SSH
unterstützen können.
Backup auf Bandlaufwerke via rmt (Remote Magnetic Tape) -
Tunneln durch SSH ist möglich, allerdings wegen der Ver-
und Entschlüsselung des Datenstroms nicht sehr performant.
(gute Geschwindigkeit bei SSH bietet der "arcfour" Cipher)
Falls oben genannte Punkte nicht zum Einsatz kommen, kann der
Telnet-Daemon deaktiviert werden und durch die Installation
von z.B. OpenSSH
ersetzt werden.
Eine Liste mit SSH- Clients für Microsoft Windows Systeme ist
hier
zu finden.
Für einige Anwendungsfälle kann SSH, mit dem sftp-server Subsystem,
auch einen FTP Server ersetzen.
Deaktivieren aller nicht benötigter Internetdienste:
Häufig sind in der Standardinstallation viel mehr Internetdienste
aktiviert, als notwendig sind.
Welche Dienste aktiv sind, zeigen die folgenden Kommando:
-
IPv4-Services: netstat -lnp --ip
-
IPv6-Services: netstat -lnp --inet6
Alle nicht benötigten Dienste können bzw. sollten abgeschaltet werden.
Bei einem direkt gestarteten Daemon durch Deaktivieren des
Runlevel-Scripts (bei Red Hat Linux z.B. mit
chkconfig service off.
Bei Programmen, die vom Superdaemon inetd
gestarteten werden, durch Auskommentieren der entsprechenden
Zeile in der Datei /etc/inetd.conf.
Bei Programmen, die vom Superdaemon xinetd
gestarteten werden, durch Einfügen der Option
disable=yes im jeweiligen Abschnitt in der Datei
/etc/xinetd.conf bzw. in den entprechenden Dateien
im Verzeichnis /etc/xinetd.d/.
Deinstallation nicht benutzter Programme.
Jedes installierte Programm, welches nicht benötigt wird, stellt
ein zusätzliches Sicherheitsrisiko dar, insbesondere, wenn das
SUID (set user id on execution) oder
SGID (set group id on execution) Bit gesetzt ist.
Auflistung aller Dateien mit gesetztem SUID oder SGID Bit:
find / -perm +06000 -type f -ls
Bei RPM ist es relativ einfach, ein Programmpaket zu deinstallieren,
wenn man es nicht benötigt. Eventuell nicht beachtete
Abhängigkeiten werden einem angezeigt. Man kann sich dann
entscheiden, entweder das Paket auf die 'harte Tour'
(--nodeps) oder gleich die Abhängigkeiten
mit zu deinstallieren.
Hilfreiche "Schalter" im Linux-Kernel
Weitere Information finden sich im Quelltext des Kernels:
/usr/src/linux/Documentation/networking/ip-sysctl.txt
| "Schalter" |
Art |
Kernel- version |
Aktivieren (evtl. Kernel neu kompilieren) |
| Syncookie Support |
gegen SYN-Flodding |
2.2.x 2.4.x 2.6.x |
sysctl -w net.ipv4.tcp_syncookies=1 |
| Limitierung der Rate an ausgesendeten speziellen ICMP-Paketen |
gegen DoS-Attacken |
2.2.x |
sysctl -w net.ipv4.icmp_destunreach_rate=100
sysctl -w net.ipv4.icmp_echoreply_rate=100
sysctl -w net.ipv4.icmp_paramprob_rate=100
sysctl -w net.ipv4.icmp_timeexceed_rate=100
Limitiert hier auf 1 pro Sekunde |
2.4.x 2.6.x |
sysctl -w net.ipv4.icmp_ratemask=6169
6169=0x1819
= 1<<ICMP_ECHOREPLY (0)
+ 1<<ICMP_DEST_UNREACH (3)
+ 1<<ICMP_SOURCE_QUENCH (4)
+ 1<<ICMP_TIME_EXCEEDED (11)
+ 1<<ICMP_PARAMETERPROB (12)
sysctl -w net.ipv4.icmp_ratelimit=100 (1/s)
oder
sysctl -w net.ipv4.icmp_ratelimit=10 (10/s) |
| Abschalten von ICMP echo-reply auf Broadcast-Adressen |
gegen Scanning und Smurf Angriffe |
2.2.x 2.4.x 2.6.x |
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 |
| Abschalten von ICMP echo-reply generell |
gegen Scanning |
2.2.x 2.4.x 2.6.x |
sysctl -w net.ipv4.icmp_echo_ignore_all=1 |
| Verwerfen von IP-Paketen mit Source-Route-Option |
gegen Attacken |
2.2.x 2.4.x 2.6.x |
sysctl -w net.ipv4.conf.*.accept_source_route=0 |
| Verwerfen von ICMP redirect Paketen |
gegen Attacken |
2.2.x 2.4.x 2.6.x |
sysctl -w net.ipv4.conf.*.accept_redirects=0 |
| Defragmentiere eingehende IP-Pakete immer |
gegen Attacken |
2.2.x |
sysctl -w net.ipv4.conf.*.ip_always_defrag=1 |
| Loggen von allen Paketen mit unmöglichen IP-Adressen |
gegen Scanning |
2.2.x 2.4.x 2.6.x |
sysctl -w net.ipv4.conf.*.log_martians=1 |
| Abschalten des ICMP Address mask replies |
gegen Scanning |
frühere 2.2.x |
sysctl -w net.ipv4.ip_addrmask_agent=0 |
| Deaktivieren von IPv4-forwarding |
schaltet Routing ab |
2.2.x 2.4.x 2.6.x |
sysctl -w net.ipv4.ip_forward=0 |
Deaktivieren von IPv4-forwarding per Interface
(Entscheidung wird bei "incoming" getroffen!) |
schaltet Routing ab |
2.2.x 2.4.x 2.6.x |
sysctl -w net.ipv4.conf.*.forwarding |
| Abschalten von TCP-Timestamps |
gegen (NMAP's) Uptime Detektion (Info) |
2.2.x 2.4.x 2.6.x |
sysctl -w net.ipv4.tcp_timestamps=0 |
| Verlegen der Source Port Range für abgehende Verbindungen |
für sichere Regelsätze bei stateless Filter |
2.2.x 2.4.x 2.6.x |
sysctl -w net.ipv4.ip_local_port_range="32768 60999" |
Ersetzen von anfälligen Daemons
Achtung, vor dem Ersetzen bitte erst prüfen, ob die
gewünschten (nötigen) Features auch weiterhin zur
Verfügung stehen...
| "Anfälliger" Daemon |
Ersatz |
Informationen zur Umstellung |
Einarbeitung |
Featureverlust |
| inetd |
xinetd |
andere Konfigurationssyntax |
leicht |
keiner |
| inetd |
ucspi-tcp |
anderes Konzept |
mittel |
keiner |
| BIND8/4 |
BIND9 |
Code wurde komplett neu geschrieben, aber nahezu gleiche
Konfiguration wie BIND8 |
leicht |
keiner |
| BIND8/4 |
djbdns |
anderes Konzept |
mittel |
unterstützt keine ACLs |
| sendmail |
postfix |
andere Konfigurationssyntax und -dateien |
mittel |
kaum, je nach bisherigem Einsatzgebiet |
| sendmail |
qmail |
anderes Konzept, unterstützt nur das Maildir-Format (pro
E-Mail eine Datei) |
nicht trivial |
bedingt, je nach bisherigem Einsatzgebiet und Einspielen von Patches |
| syslogd |
syslog-ng |
andere Konfigurationssyntax |
mittel |
keine, im Gegenteil: umfangreiche Filterbeschreibungssyntax |
| wu-ftpd |
proftpd |
andere Konfigurationssyntax |
einfach |
wenig (z.B. keine on-the-fly-compression), dafür viel mehr
dedizierte Optionen, TLS optional möglich |
| wu-ftpd |
publicfile |
nur Kommanozeilenoption |
einfach |
nur anonymes FTP (in chroot-Umgebung) wird unterstützt |
| wu-ftpd |
vsftpd |
andere Konfigurationssyntax |
einfach |
|
Schutzmaßnahmen durch den Kernel
| Tool |
Kernel- version |
Maßnahmen |
Installation |
| Openwall Project |
2.2.x 2.4.x |
- Non-executable user stack area
- Restricted links in /tmp
- Restricted FIFOs in /tmp
- Restricted /proc
- ... |
Kernel patchen und kompilieren,
in OWL (Openwall Linux) bereits integriert |
| PaX |
2.2.x 2.4.x 2.6.x |
- Address space modification protection |
Kernel patchen und kompilieren,
in grsecurity und RSBAC enthalten |
| ExecShield |
2.4.x 2.6.x |
- Ascii Zone
- Address space randomization
- NX data pages |
Kernel patchen und kompilieren,
in Red Hat Enterprise Linux und Fedora Core
standardmäßig integriert |
Zugriffskontrolle / Mandatory Access Control (MAC)
| Tool |
Kernel- version |
Maßnahmen |
Installation |
| AppArmor |
2.6.x |
- obligatorische Kontrolle der Zugriffe von
Programmen auf Resourcen |
Kernel patchen und kompilieren, Konfiguration,
in Suse Linux 10.1 und SLES 10 standardmäßig integriert |
| grsecurity |
2.4.x 2.6.x |
- rollenbasierte Zugriffskontrolle
- chroot Einschränkungen
- Auditing Features
- PaX integriert
- ... |
Kernel patchen und kompilieren, Konfiguration |
| LIDS |
2.2.x 2.4.x 2.6.x |
- obligatorische Kontrolle der Zugriffe von
Programmen auf Resourcen |
Kernel patchen und kompilieren, Konfiguration |
| RSBAC |
2.4.x 2.6.x |
- Rule Set Based Access Control
- modulares Framework
- mehrere verschiedene Sicherheitsmodelle
- chroot Einschränkungen
- PaX integriert
- ... |
Kernel patchen und kompilieren, Konfiguration,
in Adamantix standardmäßig integriert |
| SELinux |
2.4.x 2.6.x |
- rollenbasierte Zugriffskontrolle
- Type Enforcement
- Multi Level Security
- Multi Category Security |
Kernel patchen und kompilieren, Konfiguration,
in Red Hat Enterprise Linux und Fedora Core
standardmäßig integriert |
Schutz des Prozessstacks durch den Compiler
| Tool |
GCC- Version |
Maßnahmen |
Implementierung |
| StackGuard |
2.x |
- Canary schützt Rückkehradressen |
Neukompilieren aller Applikationen mit gepatchtem GCC Compiler |
Stack-Smashing Protector (früher ProPolice) |
2.x 3.x 4.x |
- Canary schützt Rückkehradressen und Stack-Frame-Pointer
- Modifizierte Reihenfolge lokaler Variablen
- Kopien von Funktionsargumenten |
Neukompilieren aller Applikationen mit gepatchtem GCC Compiler
(SSP ist in GCC 4.1 enthalten) |
|