Anleitung zum Absichern von Debian

Transcription

Anleitung zum Absichern von Debian
Anleitung zum Absichern von Debian
Javier Fernández-Sanguino Peña <jfs@computer.org>
2.5 (beta) 28 diciembre 2003Sat, 17 Aug 2002 12:23:36 +0200
Zusammenfassung
Dieses Dokument berscheibt den Prozess eine Debian-Standard-Installation abzusichern
und abzuhärten. Es deckt die alltägliche Arbeit, ein sichere Netz-Umgebung mit Debian
GNU/Linux zu schaffen ab, und gibt zusätzlich Informationen über verfügbare SicherheitsTools und die Arbeit des Debian Sicherheit-Teams.
Copyright Hinweis
Copyright © 2002 Javier Fernández-Sanguino Peña
Copyright © 2001 Alexander Reelsen, Javier Fernández-Sanguino Peña
Copyright © 2000 Alexander Reelsen
Dieses Dokument unterliegt der GNU Free Documentation License. Es wird in der Hofnung,
dass es sich als nützlich erweisen könnte, aber OHNE JEDE GEWÄHRLEISTUNG.
i
Inhaltsverzeichnis
1
Introduction
1
1.1
Herunterladen dieser Anleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.2
Organisatorisches / Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.3
Vorwissen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.4
Dinge, die noch geschrieben werden müssen (FIXME/TODO) . . . . . . . . . . .
3
1.5
Changelog/History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.5.1
Version 2.5 (august 2002) . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.5.2
Version 2.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.5.3
Version 2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.5.4
Version 2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
1.5.5
Version 2.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
1.5.6
Version 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
1.5.7
Version 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
1.5.8
Version 1.99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5.9
Version 1.98 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5.10 Version 1.97 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5.11 Version 1.96 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5.12 Version 1.95 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5.13 Version 1.94 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5.14 Version 1.93 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5.15 Version 1.92 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5.16 Version 1.91 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.5.17 Version 1.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
INHALTSVERZEICHNIS
ii
1.5.18 Version 1.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.5.19 Version 1.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5.20 Version 1.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5.21 Version 1.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5.22 Version 1.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5.23 Version 1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5.24 Version 1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5.25 Version 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5.26 Version 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.6
2
3
Danksagung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Bevor Sie beginnen . . .
17
2.1
Für was möchten Sie dieses System benutzen? . . . . . . . . . . . . . . . . . . . . 17
2.2
Seien Sie Wachsam gegenüber generellen Sicherheitsproblemen! . . . . . . . . . . 17
2.3
Wie geht Debian mit der Sicherheit um? . . . . . . . . . . . . . . . . . . . . . . . . 20
Vor und während der Installation
23
3.1
Setzen Sie ein Passwort im BIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2
Partitionieren des Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.1
Wählen Sie ein intelligentes Partitions-Schemata . . . . . . . . . . . . . . . 23
3.3
Gehen Sie nicht ins Nezt, bevor Sie nicht bereit sind . . . . . . . . . . . . . . . . . 25
3.4
Setzen Sie ein Passwort für root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.5
Aktivieren sie “shadow passwords” und “MD5 passwords” . . . . . . . . . . . . 26
3.6
lassen Sie so wenig Services wie möglich laufen . . . . . . . . . . . . . . . . . . . 26
3.7
3.6.1
Daemon-Services abschalten . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.6.2
Abschalten von inetd-Servicen . . . . . . . . . . . . . . . . . . . . . . . . . 28
Installieren Sie möglichst wenig Software, nur die benötigte . . . . . . . . . . . . 28
3.7.1
3.8
Entfernen von Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Lesen Sie Debians Sicherheits-Mailinglisten . . . . . . . . . . . . . . . . . . . . . . 31
INHALTSVERZEICHNIS
iii
4
33
Nach der Installation
4.1
Änderungen im BIOS (noch einmal) . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2
Ein Passwort für LILO oder GRUB einstellen . . . . . . . . . . . . . . . . . . . . . 34
4.3
Entfernen des root Promptes aus dem Kernel . . . . . . . . . . . . . . . . . . . . . 35
4.4
Booten von Diskette verbieten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.5
einschränkender Konsolen zugang . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.6
Systemneustart auf der Konsole einschränken . . . . . . . . . . . . . . . . . . . . 37
4.7
Partitionen auf die richtige Art einbinden . . . . . . . . . . . . . . . . . . . . . . . 37
4.7.1
/tmp noexec setzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.7.2
Setzen von /usr auf nur-lesen . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.8
Ausführen von Sicherheitsupdates . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.9
Den Benutzern einen Sicheren Zugang bereitstellen . . . . . . . . . . . . . . . . . 40
4.9.1
User Authentifizierung: PAM . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.9.2
Resourcen-Nutzung limitieren: Die limits.conf Datei . . . . . . . . . . . . 43
4.9.3
User Login Actionen: Editieren von /etc/login.defs . . . . . . . . . . . . . 43
4.9.4
ftp Einschränken: Editieren von /etc/ftpusers . . . . . . . . . . . . . . . . 44
4.9.5
su benutzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.9.6
sudo benutzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.9.7
verweigern von administrativen Fernzugriff . . . . . . . . . . . . . . . . . 45
4.9.8
Nutzer einschränken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.9.9
prüfen der Nutzer von Hand . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.9.10 Komplettieren von Nutzer Überwachung . . . . . . . . . . . . . . . . . . . 49
4.9.11 Nutzer Profil nachprüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.9.12 umasks der Nutzer einstellen . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.9.13 Nutzer Sicht/Zugriff limitieren . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.10 Die Nutzung von tcpwrappers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.11 Die Wichtigkeit von Logs und Alarmen . . . . . . . . . . . . . . . . . . . . . . . . 52
4.11.1 Nutzen und anpassen von logcheck . . . . . . . . . . . . . . . . . . . . . . 52
4.11.2 Konfigurieren, wohin Alarmmeldungen geschickt werden sollen . . . . . 53
4.11.3 Nutzen eines loghosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.11.4 Zugriffsrechte auf Log-Dateien . . . . . . . . . . . . . . . . . . . . . . . . . 55
INHALTSVERZEICHNIS
iv
4.12 Benutzen von chroot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.12.1 Kernel configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.12.2 Konfigurieren der Netzwerk-Fähigkeiten des Kernels . . . . . . . . . . . . 56
4.12.3 Konfigurieren der Firewall . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.13 Den Kernel patchen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.14 Schutz vor Speicher-Überläufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.15 sichere Datei-Übertragungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.16 Dateisystem Einschränken und konrollieren . . . . . . . . . . . . . . . . . . . . . . 61
4.16.1 Benutzung von Quotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.16.2 chattr/lsattr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.16.3 Prüfen der Integrität des Dateisystems . . . . . . . . . . . . . . . . . . . . . 63
4.16.4 Aufsetzen von setuid-Check . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.17 Einen Schnappschuss des Systems erstellen . . . . . . . . . . . . . . . . . . . . . . 64
4.18 Andere Empfehlungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.18.1 Benutzen Sie keine Software, die von svgalib abhängt . . . . . . . . . . . . 65
5
Absichern von Servicem die auf Ihrem System laufen
67
5.1
Absichern der Secure-Shell (ssh) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.2
Absicher von Squid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.3
Absichern von FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.4
Zugriff auf das X-Window-System absichern . . . . . . . . . . . . . . . . . . . . . 71
5.4.1
Überprüfen Ihres Display-Managers . . . . . . . . . . . . . . . . . . . . . . 72
5.5
Absichern des Drucker-Zugriffs (Die lpd und lprng Sache) . . . . . . . . . . . . . 72
5.6
Absichern des Mail-Daemon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.7
sicherer Empfang von Mails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.8
Sichern von BIND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.9
5.8.1
Ändern von BIND User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.8.2
Chrooten des Name-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Absichern von Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.10 Absichern von finger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.11 Allgemeine chroot und suid Paranoia . . . . . . . . . . . . . . . . . . . . . . . . . 83
INHALTSVERZEICHNIS
v
5.12 Allgemeine Klartextpasswort Paranoia . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.13 NIS deaktivieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.14 Abschalten von RPC-Servicen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.15 Hinzufügen von Firewall Fähigkeiten . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.15.1 Firewallen des lokalen Systems . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.15.2 Schützen andere Systeme durch eine Firewall . . . . . . . . . . . . . . . . 85
5.15.3 Konfigurieren der Firewall . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6
7
8
9
Automatishen Abhärten eines Debian Systems
89
6.1
Harden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.2
Bastille Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Paket signierung unter Debian
93
7.1
Der vorgeschlagene Plan zur Prüfung von Paket Signierungen . . . . . . . . . . . 93
7.2
Alternative Einzel-Paket-Signierungs Schemata . . . . . . . . . . . . . . . . . . . . 94
7.3
Prüfen veröffentlichter Pakaete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Sicherheits Tools in Debian
101
8.1
Tools zur Fern-Prüfung der Verwundbarkeit . . . . . . . . . . . . . . . . . . . . . 101
8.2
Netzwerk-Scan Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
8.3
Interne Prüfungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
8.4
Testen von Quellcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
8.5
Virtual Private Networks (virtuelle, private Netzwerke) . . . . . . . . . . . . . . . 103
8.6
Öffentliche Schlüssel Infrastrukturen (Public Key Infraestructure (PKI)) . . . . . . 104
8.7
SSL Infrastruktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
8.8
Anti-Viren Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Vor einer Komprimitierung
9.1
107
Aufsetzen einer Eindringlingserkennung . . . . . . . . . . . . . . . . . . . . . . . 107
9.1.1
Netzwerk basierende Eindringlings Erkennung . . . . . . . . . . . . . . . 107
9.1.2
Host basierende Erkennung . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
9.2
nützliche Kernel-Patches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
9.3
Vermeiden von Root-Kits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
INHALTSVERZEICHNIS
9.4
vi
9.3.1
LKM - Ladbare Kernel-Module . . . . . . . . . . . . . . . . . . . . . . . . . 109
9.3.2
Erkennen von Root-Kits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
geniale/paranoide Ideen — was Sie tun können . . . . . . . . . . . . . . . . . . . 111
9.4.1
Aufstellen eines Honigtopfes (honeypot) . . . . . . . . . . . . . . . . . . . 113
10 Nach einer Komprimitierung
115
10.1 Allgemeines Verhalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
10.2 Anlegen von Sicherheitskopien Ihres Systems . . . . . . . . . . . . . . . . . . . . . 115
10.3 forensische Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
11 Frequently asked Questions (FAQ)
117
11.1 Sicherheit im Debian Betriebssystem . . . . . . . . . . . . . . . . . . . . . . . . . . 117
11.1.1 Ist Debian sicherer als X? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
11.1.2 In bugtray gibt es viele Debian-Fehler. Heisst das, es ist sehr gefährdet? . 117
11.1.3 Hat Debian irgendein Zertifikat für Sicherheit? . . . . . . . . . . . . . . . . 118
11.1.4 Gibt es irgendein Absicherungsprogramm für Debian? . . . . . . . . . . . 118
11.1.5 Ich möchte eine XYZ-Service laufen lassen. Welchen sollte ich benutzen? . 118
11.1.6 Wie mach ich den Service XYZ unter Debian sicherer? . . . . . . . . . . . 119
11.1.7 Sind alle Debian Pakete sicher? . . . . . . . . . . . . . . . . . . . . . . . . . 119
11.1.8 Betriebssystem User und Gruppen . . . . . . . . . . . . . . . . . . . . . . . 119
11.1.9 Fragen über Services und offene Ports . . . . . . . . . . . . . . . . . . . . . 123
11.1.10 Allgemeine Sicherheits Fragen . . . . . . . . . . . . . . . . . . . . . . . . . 124
11.1.11 Ich möchte meinen Usern einen Service anbieten, Ihnen aber keinen
Shell-Account geben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
11.2 Mein System ist angreifbar (sicher?) . . . . . . . . . . . . . . . . . . . . . . . . . . 126
11.2.1 Ich habe in meinen Logs einen Angriff gesen: Bin ich kompromitiert? . . . 126
11.2.2 Ich habe in meinen Logs merkwürdige “MARK”-Einträge gefunden, bin
ich kompromitiert? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
11.2.3 Ich habe User gefunden, die laut meinen Logs su benutzen: Bin ich kompromitiert? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
11.2.4 Ich bin Opfer eines Einbruchs - was soll ich jetzt tun? . . . . . . . . . . . . 127
11.2.5 Wie kann ich Angriffe aufsprüren? . . . . . . . . . . . . . . . . . . . . . . . 127
11.2.6 Das Programm X ist in Debian angreifbar - was soll ich machen? . . . . . 128
INHALTSVERZEICHNIS
vii
11.2.7 Laut der Versions-Nummer eines Paketes, läuft bei mir immernoch eine
angreifbare Version! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
11.2.8 spezielle Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
11.3 Fragen über Debians Sicherheitsteam . . . . . . . . . . . . . . . . . . . . . . . . . . 128
11.3.1 Was ist ein Debian Sicherheitsgutachten (Debian Security Advisory, DSA) 128
11.3.2 Die digitale Signatur eines Debian Gutachtens kann nicht korrekt verifiziert werden! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
11.3.3 Wie werden Sicherheits-Ereignisse in Debian behandelt? . . . . . . . . . . 129
11.3.4 Wieviel Zeit wird Debian brauchen, um die Angriffsmöglichkeit XXXX
zu reparieren? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
11.3.5 Wie wird Sicherheit für testing und unstable gehandhabt? . . . . . . 130
11.3.6 Warum gibt es keine offiziellen Spiegel für security.debian.org? . . . . . . 130
11.3.7 Ich habe DSA 100 und DSA 102 gesehen, wo ist aber DSA 101? . . . . . . 130
11.3.8 Wie kann ich das Sicherheits-Team erreichen? . . . . . . . . . . . . . . . . 130
11.3.9 Was ist der Unterschied zwischen security@debian.org und debiansecurity@lists.debian.org? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
11.3.10 Wie kann ich Debians Sicherheit-Team unterstützen? . . . . . . . . . . . . 131
11.3.11 Aus wem setzt sich das Sicherheits-Team zusammen? . . . . . . . . . . . . 131
11.3.12 Prüft Debians Sicherheit Team jedes Paket in Debian? . . . . . . . . . . . . 131
11.3.13 Ich habe eine ältere Version von Debian. Wird sie in Bezug auf Sicherheit
noch unterstützt? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
A Der Abhärtungsprozess Schritt für Schritt
133
B Konfigurations Checkliste
137
C Aufsetzen eines autonomen IDS
141
D Aufsetzen einer Überbrückenden Firewall (bridge Firewall)
147
D.1 Eine Bridge mit NAT- und Firewall-Fähigkeiten . . . . . . . . . . . . . . . . . . . 148
D.2 Eine Bridge mit Firewall Fähigkeiten . . . . . . . . . . . . . . . . . . . . . . . . . . 149
D.3 grundlegende Iptables-Regeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
E Beispiel Skript, um die standard Installation von Bind zu ändern
153
F Sicherheits-Update geschützt durch eine Firewall
159
INHALTSVERZEICHNIS
viii
1
Kapitel 1
Introduction
Wenn etwas über Sicherheit schreibt, ist es eines der schwierigsten Dinge, dass jeder Fall einzigartig ist. Sie müssen zwei Dinge beachten: Die Gefahr aus der Umgebung und das Bedürfniss
an Sicherheit ihrer Seite, ihres Hosts oder ihres Netzwerkes. So unterscheiden sich zum Beispiel
die Sicherheitsbedürfnisse eines Heimanwenders kompltett von denen Sicherheitsbedürfnisses des Netzwerkes einer Bank. Während die Hauptgefahr eines Heimanwender von “SciptKiddies” ausgeht, muss sich das Netzwerk einer Bank um direkte Angriffe sorgen. Zusätzlich muss eine Bank die Daten ihrer Kunden mit mathematischer Präzission beschützen. Um
es kurz zu machen: Jeder Nutzer muss selbst zwischen Benutzerfreundlichkeit und Sicherheit/Paranoia abwägen.
Beachten sie bitte, dass diese Anleitung nur Software-Themen behandelt. Die beste Software
der Welt kann sie nicht schützen, wenn jemand direkten Zugang zu ihrem Rechner hat. Sie können ihn unter ihren Schreibtisch stellen, oder sie können ihn in einem starken Bunker mit einer
ganzen Armee davor stellen. Trotzdem kann der Rechner unter ihrem Schreibtisch weitaus
sicherer sein - von der Software-Seite aus gesehen - als der eingebunkerte, wenn ihr Schreibtischrechner richtig konfiguriert ist und die Software des eingebunkerten Rechners voller Sicherheitslöcher ist. Sie müssen beide Möglichkeiten betrachten.
Dieses Dokument gibt ihne lediglich eine kleine Überblick, was sie tun können, um die Sicherheit ihres Debian GNU/Linux Systems zu ergöhen. Wenn sie bereits andere Dokumente über
Sicherheit unter Linux gelesen haben, werden sie feststellen, dass es einige Überscheidungen
geben wird. Wie auch immer: Dieses Dokument versucht nicht die ultimative Informationsquelle zu sein, es versucht nur die gleichen Informationen so zu adaptieren, dass sie gut
auf ein Debian GNU/Linux System passen. Unterschiedliche Distributionen erledigen manche
Dinge auf unterschiedliche Art (zum Beispiel der Aufruf von Daemons); hier finden sie Material, dass zu Debians Prozeduren und Tools passt.
Wenn sie Kommentare, Ergänzungen oder andere Anregunden haben, mailen sie sie bitte
an Javier Fernández-Sanguino (mailto:jfs@computer.org) (oder jfs@debian.org) und sie
werden in diese Anleitung eingearbeitet werden.
Bei Fehlern in dieser Übersetzung wenden sie sich bitte Alexander Schmehl (mailto:
schmehl@cs.uni-frankfurt.de)
Kapitel 1. Introduction
1.1
2
Herunterladen dieser Anleitung
Sie können sich die neuste Version der "Anleitung zum Absichern von Debian"
beim Debian Documentation Project (http://www.debian.org/doc/manuals/
securing-debian-howto/) herunterladen oder anschauen. Sie können auch gerne die
unterschiedlichen Versionen im CVS server (http://cvs.debian.org/ddp/manuals.
sgml/securing-howto/?cvsroot=debian-doc) durchforsten.
Sie können ausserdem eine reine Text-Version (http://www.debian.org/doc/manuals/
securing-debian-howto/securing-debian-howto.txt) von der Seite des Debian
Dokumentations Projektes bekommen. Andere Formate, wie zum Beispiel PDF, stehen (noch)
nicht zur Verfügung, sie können aber das Paket harden-doc (http://packages.debian.
org/harden-doc), in welchem das gleiche Dokument in den Formaten HTML, txt und PDF
enthalten ist, herunterladen und installieren.
1.2
Organisatorisches / Feedback
Nun kommt der offizielle Teil. Derzeit sind die meisten Teile dieser Anleitung noch von mir
(Alexander Reelsen) geschrieben, aber meiner Meinung nach sollte dies nicht so bleiben. Ich
wuchs mit Freier Software auf und lebe mit ihr, sie ist ein Teil meiner alltäglichen Arbeiten und
ich denke auch von ihrer. Ich ermutige jedermann mir Feedback, Tips für Ergänzungen oder
andere Vorschläge, die sie haben könnten, zuzuschicken.
Wenn sie denken, dass sie eine bestimmte Sektion oder Abschnitt besser pflegen können, dann
schreiben sie dem Dokumenten-Betreuer, und sie dürfen es gerne erledigen. Insbesondere,
wenn sie eine Stellen finden, die mit "FIXME" markiert wurde - was bedeutet, dass der Autor noch nicht die Zeit hatte oder sich noch Wissen über das Thema aneignen muss - schicken
sie ihm sofort eine Mail.
Für diese Anleitung ist es natürlich äusserts wichtig, dass sie weiter gepflegt und auf dem
neusten Stand gehalten wird. Auch sie können ihren Teil dazu beitragen. Bitte unterstützen sie
uns.
1.3
Vorwissen
Die Installation von Debian GNU/Linux ist nicht wirklich schwer, und sie sollten in der Lage
gewesen sein, es zu installieren. Wenn sie ihnen andere Linux Distributionen, Unixe oder die
grundsätzlichen Sicherheitskonzepte ein wenig vertraut sind, wird ihnen leichter fallen, diese
Anleitung zu verstehen, da nicht auf jedes winzige Detail eingegangen werden kann (oder
dies wäre ein Buch geworden, und keine Anleitung). Wenn sie jedoch mit diesen Dingen noch
nicht so vertraut sind, sollten sie vielleicht einen Blick in die ‘Seien Sie Wachsam gegenüber
generellen Sicherheitsproblemen!’ auf Seite 17 für tiefer gehende Informationen werfen.
Kapitel 1. Introduction
1.4
3
Dinge, die noch geschrieben werden müssen (FIXME/TODO)
• Informationen, wie man unter Debian GNU/Linux eine Firewall aufsetzt. Der Firewalls
betreffende Abschnitt orientiert sich derzeit an Einzelplatz-Systemem (die keine anderen
System schützen müssen); auch auf das Testen des Setups eingehen
• Wie man eine Proxy-Firewall unter Debian GNU/Linux aufsetzt, unter angabe, welche
Pakete Proxy-Services anbieten (zum Beispiel xfwp, xproxy, ftp-proxy, redir,
smtpd, nntp-cache, dnrd, jftpgw,oops,pnsd, perdition,transproxy, tsocks).
Sollte zu einer Anleitung mit weiteren Informations verweisen. Erwähnenswert dass
zorp (noch) nicht Teil von Debian ist, aber es ist eine Proxy-Firewall (und der Programmautor stellt Debian-Pakete zur Verfügung)
• Informationen über die Service-Konfiguration mit file-rc
• Alle Referenzen und URLs prüfen und die nicht mehr Vorhanden aktualisieren oder entfernen
• Informationen über vorhandenen Ersatz (unter Debian) für häufig eingesetzte Server, die
bei eingeschränktem Funktionsumfang, nützlich sind. Beispiele:
– lokaler lpr mit cups (Paket)?
– remote lrp mit lpr
– bind mit dnrd/maradns
– apache mit dhttpd/thttpd/wn (tux?)
– exim/sendmail mit ssmtpd/smtpd/postfix
– squid mit tinyproxy
– ftpd mit oftpd/vsftp
– ...
• Mehr Informationen über die Sicherheits relevanten Patches des Kernels unter Debian,
einschliesslich den unten aufgeführten und insbesondere wie man diese Patches unter
einem Debian System benutzt.
– Eindringlings Erkennung (Linux Intrusion Detection lids-2.2.19)
– Linux Trustees (im Paket trustees)
– NSA Enhanced Linux (http://www.coker.com.au/selinux/)
– kernel-patch-2.2.18-openwall
kernel-patch-2.2.18-openwall)
(http://packages.debian.org/
– kernel-patch-2.2.19-harden
– Linux capabilities (im Paket lcap
– kernel-patch-freeswan,kernel-patch-int
Kapitel 1. Introduction
4
• Details, wie man unnötige Services übers Netzwerk deaktiviert (abgesehen von inetd),
dies ist teilweise Teil des abhärtungs Prozesses, könnte aber etwas ausgeweitet werden.
• Informationen über Passwort-Rotation, was sehr nah an grundsätzliche Regeln (Policies)
herankommt
• Policies, und die Aufklärung der Nutzer über die Policy
• Mehr über tcpwrapper, und wrapper im allgemeinen?
• hosts.equiv und andere wichtige Sicherheitslöcher
• Angelegenheiten von Datei Freigabe, wie Samva und NFS?
• suidmanager/dpkg-statoverrides.
• lpr und lprng.
• Abschalten der gnome IP-Dinge.
• Erwähnen
von
pam_chroot
(siehe
http://http://lists.debian.org/
debian-security/2002/debian-security-200205/msg00011.html)
und
seine Nützlichkeit um Nutzer einzuschränlen. Einfphrende Informationen in
Verbindung mit http://online.securityfocus.com/infocus/1575. Pdmenu
ist zum Beispiel bereits unter Debian verfügbar (while as flash is not).
• Darüber reden, Services zu chroot’en, mehr Informationen dazu unter http:
//www.linuxfocus.org/English/January2002/aritcle225.shtml, http:
//www.networkdweebs.com/chroot.html und http://www.linuxsecurity.
com/feature_stories/feature_story-99.html
• Programme erwähnen die Chroot Einbettungen (chroot jails) machen. Compartment
und chrootuid warten noch in incoming. Einige andere (makejail, jailer) könnten ebenfalls eingeführt werden.
• Die Informationen von Karl Hegbloom regarding über das einbetten (chrooting)
von Bind 9 (siehe http://people.pdxlinux.org/~karlheg/Secure_Bind9_
uHOWTO/Secure_Bind_9_uHOWTO.xhtml) hinzufügen.
• Die Informationen von Pedro Zornenon über das chrooten von Bind 8, aber leider nur für
potato :(, see http://people.debian.org/~pzn/howto/chroot-bind.sh.txt
(include the whole script?).
• Mehr Informationen über Software zur Analyse von Protokoll-Dateien (log-Dateien, logs;
zum Beispiel logcheck und logcolorise) and logcolorise).
• "fortgeschrittenes" Routing (Traffic-Regelungen sind Sicherheitsrelevant)
• Zugang über ssh so einschränken, dass man nur bestimmte Kommandos ausführen kann
• Die Benutzung von dpkg-statoverride.
Kapitel 1. Introduction
5
• sichere Wege, mehreren Nutzern den Zugriff auf CD-Brenner zu erlauben
• sichere Wege, um Sound zusammen mit einem Displey über ein Netzwerk zu leiten (so
dass die Sounds einen X Clients über die Hardware eines X Servers abgespielt werden)
• Abscihern von Web-Browsern
• Aufsetzen von ftp über ssh
• Die Benutzung von verschlüsselten Loopback-Dateisystemen
• Verschlüsselung eines ganzen Dateisystems
• Steganographie-Tools
• Aufsetzen eines PKA für eine Organisation
• LDAP benutzen zur Verwaltung der User. Es gibt eine HOWTO zu ldap+kerberos für
Debian auf www.bayour.com von Turbo Fredrikson.
1.5
1.5.1
Changelog/History
Version 2.5 (august 2002)
Changes by Javier Fernández-Sanguino Peña (me). There were many things waiting on my
inbox (as far back as february) to be included, so I’m going to tag this the back from honeymoon
release :)
• Added some information on how to setup the Xscreensaver to lock automatically the
screen after the configured timeout.
• Add a note related to the utilities you should not install in the system. Including a note regarding Perl and why it cannot be easily removed in Debian. The idea came after reading
Intersect’s documents regarding Linux hardening.
• Added information on lvm and journaling filesystems, ext3 recommended. The information there might be too generic, however.
• Added a link to the online text version (check).
• Added some more stuff to the information on firewalling the local system triggered by a
comment made by Hubert Chan in the mailing list.
• Added more information on PAM limits and pointers to Kurt Seifried’s documents (related to a post by him to bugtraq on April 4th 2002 answering a person that had “discovered” a vulnerability in Debian GNU/Linux related to resource starvation)
• As suggested by Julián Muñoz, provided more information on the default Debian umask
and what a user can access if he has been given a shell in the system (scary, huh?)
Kapitel 1. Introduction
6
• Included a note in the BIOS password section due to a comment from from Andreas
Wohlfeld.
• Included patches provided by Alfred E. Heggestad fixing many of the typos still present
in the document.
• Added a pointer to the changelog in the Credits section since most people who contribute
are listed here (and not there)
• Added a few more notes to the chattr section and a new section after installation talking
about system snapshots. Both ideas were contributed by Kurt Pomeroy.
• Added a new section after installation just to remember users to change the boot-up
sequence.
• Added some more TODO items provided by Korn Andras.
• Added a pointer to the NIST’s guidelines on how to secure DNS provided by Daniel
Quinlan.
• Added a small paragraph regarding Debian’s SSL certificates infraestructure.
• Added Daniel Quinlan’s suggestions regarding ssh authentication and exim’s relay configuration.
• Added more information regarding securing bind including changes suggested by
Daniel Quinlan and an appendix with a scrip to make some of the changes commented on that section.
• Added a pointer to another item regarding Bind chrooting (needs to be merged)
• Added a one liner contributed by Cristian Ionescu-Idbohrn to retrieve packages with
tcpwrappers support.
• Added a little bit more info on Debian’s default PAM setup.
• Included a FAQ question about using PAM to give services w/o shell accounts.
• Moved two FAQ items to another section and added a new FAQ regarding attack detection (and compromised systems).
• Included information on how to setup a bridge firewall (including a sample Appendix).
Thanks go to Francois Bayar who sent me this on march.
• Added a FAQ regarding the syslogd’s MARK heartbeat from a question answered by
Noah Meyerhans and Alain Tesio on December 2001.
• Included information on buffer overflow protection as well as some information on kernel patches.
• Added more information (and reorganised) the firewall section. Updated the information
regarding the iptables package and the firewall generators available.
Kapitel 1. Introduction
7
• Reorganized the information regarding logchecking, moved logcheck information from
host intrusion detection to that section.
• Added some information on how to prepare a static package for bind for chrooting
(untested).
• Added a FAQ item (could be expanded with some of the recomendations from the
debian-security list regarding some specific servers/services).
• Added some information on RPC services (and when it’s necessary).
• Added some more information on capabilities (and what lcap does). Is there any good
documentation on this? I haven’t found any on my 2.4 kernel.
• Fixed some typos.
1.5.2
Version 2.4
Changes by Javier Fernández-Sanguino Peña.
• Rewritten part of the BIOS section.
1.5.3
Version 2.3
Changes by Javier Fernández-Sanguino Peña.
• Wrapped most file locations with the file tag.
• Fixed typo noticed by Edi Stojicevi.
• Slightly changed the remote audit tools section.
• Added some todo items.
• Added more information regarding printers and cups config file (taken from a thread on
debian-security).
• Added a patch submitted by Jesus Climent regarding access of valid system users to
Proftpd when configured as anonymous server.
• Small change on partition schemes for the special case of mail servers.
• Added Hacking Linux Exposed to the books section.
• Fixed directory typo noticed by Eduardo Pérez Ureta.
• Fixed /etc/ssh typo in checklist noticed by Edi Stojicevi.
Kapitel 1. Introduction
1.5.4
8
Version 2.3
Changes by Javier Fernández-Sanguino Peña.
• Fixed location of dpkg conffile.
• Remove Alexander from contact information.
• Added alternate mail address.
• Fixed Alexander mail address (even if commented out).
• Fixed location of release keys (thanks to Pedro Zorzenon for pointing this out).
1.5.5
Version 2.2
Changes by Javier Fernández-Sanguino Peña.
• Fixed typos, thanks to Jamin W. Collins.
• Added
a
reference
to
APT::ExtractTemplate config).
apt-extracttemplate
manpage
(documents
the
• Added section about restricted SSH. Information based on that posted by Mark Janssen,
Christian G. Warden and Emmanuel Lacour on the debian-security mailing list.
• Added information on anti-virus software.
• Added a FAQ: su logs due to the cron running as root.
1.5.6
Version 2.1
Changes by Javier Fernández-Sanguino Peña.
• Changed FIXME from lshell thanks to Oohara Yuuma.
• Added package to sXid and removed comment since it *is* available.
• Fixed a number of typos discovered by Oohara Yuuma.
• ACID is now available in Debian (in the acidlab package) thanks to Oohara Yuuma for
noticing.
• Fixed LinuxSecurity links (thanks to Dave Wreski for telling).
Kapitel 1. Introduction
1.5.7
9
Version 2.0
Changes by Javier Fernández-Sanguino Peña. I wanted to change to 2.0 when all the FIXMEs
were, er, fixed but I run out of 1.9X numbers :(
• Converted the HOWTO into a Manual (now I can properly say RTFM)
• Added more information regarding tcp wrappers and Debian (now many services are
compiled with support for them so it’s no longer an inetd issue).
• Clarified the information on disabling services to make it more consistent (rpc info still
referred to update-rc.d)
• Added small note on lprng.
• Added some more info on compromised servers (still very rough)
• Fixed typos reported by Mark Bucciarelli.
• Added some more steps in password recovery to cover the cases when the admin has set
paranoid-mode=on.
• Added some information to set paranoid-mode=on when login in console.
• New paragraph to introduce service configuration.
• Reorganised the After installation section so it is more broken up into several issues and
it’s easier to read.
• Written information on howto setup firewalls with the standard Debian 3.0 setup (iptables package).
• Small paragraph explaining why installing connected to the Internet is not a good idea
and how to avoid this using Debian tools.
• Small paragraph on timely patching referencing to IEEE paper.
• Appendix on how to setup a Debian snort box, based on what Vladimir sent to the
debian-security mailing list (September 3rd 2001)
• Information on how logcheck is setup in Debian and how it can be used to setup HIDS.
• Information on user accounting and profile analysis.
• Included apt.conf configuration for read-only /usr copied from Olaf Meeuwissen’s post
to the debian-security mailing list
• New section on VPN with some pointers and the packages available in Debian (needs
content on how to setup the VPNs and Debian-specific issues), based on Jaroslaw Tabor’s
and Samuli Suonpaa’s post to debian-security.
• Small note regarding some programs to automatically build chroot jails
Kapitel 1. Introduction
10
• New FAQ item regarding identd based on a discussion in the debian-security mailing list
(February 2002, started by Johannes Weiss).
• New FAQ item regarding inetd based on a discussion in the debian-security mailing list
(February 2002).
• Introduced note on rcconf in the “disabling services” section.
• Varied the approach regarding LKM, thanks to Philipe Gaspar
• Added pointers to CERT documents and Counterpane resources
1.5.8
Version 1.99
Changes by Javier Fernández-Sanguino Peña.
• Added a new FAQ item regarding time to fix security vulnerabilities.
• Reorganised FAQ sections.
• Started writing a section regarding firewalling in Debian GNU/Linux (could be broadened a bit)
• Fixed typos sent by Matt Kraai
• Fixed DNS information
• Added information on whisker and nbtscan to the auditing section.
• Fixed some wrong URLs
1.5.9
Version 1.98
Changes by Javier Fernández-Sanguino Peña.
• Added a new section regarding auditing using Debian GNU/Linux.
• Added info regarding finger daemon taken from the security mailing list.
1.5.10
Version 1.97
Changes by Javier Fernández-Sanguino Peña.
• Fixed link for Linux Trustees
• Fixed typos (patches from Oohara Yuuma and Pedro Zorzenon)
Kapitel 1. Introduction
1.5.11
Version 1.96
Changes by Javier Fernández-Sanguino Peña.
• Reorganized service installation and removal and added some new notes.
• Added some notes regarding using integrity checkers as intrusion detection tools.
• Added a chapter regarding package signatures.
1.5.12
Version 1.95
Changes by Javier Fernández-Sanguino Peña.
• Added notes regarding Squid security sent by Philipe Gaspar.
• Fixed rootkit links thanks to Philipe Gaspar.
1.5.13
Version 1.94
Changes by Javier Fernández-Sanguino Peña.
• Added some notes regarding Apache and Lpr/lpng.
• Added some information regarding noexec and read-only partitions.
• Rewritten how can users help in Debian security issues (FAQ item).
1.5.14
Version 1.93
Changes by Javier Fernández-Sanguino Peña.
• Fixed location of mail program.
• Added some new items to the FAQ.
1.5.15
Version 1.92
Changes by Javier Fernández-Sanguino Peña.
• Added a small section on how Debian handles security
• Clarified MD5 passwords (thanks to ‘rocky’)
• Added some more information regarding harden-X from Stephen van Egmond
• Added some new items to the FAQ
11
Kapitel 1. Introduction
1.5.16
12
Version 1.91
Changes by Javier Fernández-Sanguino Peña.
• Added some forensics information sent by Yotam Rubin.
• Added information on how to build a honeynet using Debian GNU/Linux.
• Added some more TODOS.
• Fixed more typos (thanks Yotam!)
1.5.17
Version 1.9
Changes by Javier Fernández-Sanguino Peña.
• Added patch to fix misspellings and some new information (contributed by Yotam Rubin)
• Added references to other online (and offline) documentation both in a section (see ‘Seien
Sie Wachsam gegenüber generellen Sicherheitsproblemen!’ auf Seite 17) by itself and inline in some sections.
• Added some information on configuring Bind options to restrict access to the DNS server.
• Added information on how to automatically harden a Debian system (regarding the
harden package and bastille).
• Removed some done TODOs and added some new ones.
1.5.18
Version 1.8
Changes by Javier Fernández-Sanguino Peña.
• Added the default user/group list provided by Joey Hess to the debian-security mailing
list.
• Added information on LKM root-kits (‘LKM - Ladbare Kernel-Module’ auf Seite 109)
contributed by Philipe Gaspar.
• Added information on Proftp contributed by Emmanuel Lacour.
• Recovered the checklist Appendix from Era Eriksson.
• Added some new TODO items and removed other fixed ones.
• Manually included Era’s patches since they were not all included in the previous version.
Kapitel 1. Introduction
1.5.19
13
Version 1.7
Changes by Era Eriksson.
• Typo fixes and wording changes
Changes by Javier Fernández-Sanguino Peña.
• Minor changes to tags in order to keep on removing the tt tags and substitute them for
prgn/package tags.
1.5.20
Version 1.6
Changes by Javier Fernández-Sanguino Peña.
• Added pointer to document as published in the DDP (should supersede the original in
the near future)
• Started a mini-FAQ (should be expanded) with some questions recovered from my mailbox.
• Added general information to consider while securing.
• Added a paragraph regarding local (incoming) mail delivery.
• Added some pointers to more information.
• Added information regarding the printing service.
• Added a security hardening checklist.
• Reorganized NIS and RPC information.
• Added some notes taken while reading this document on my new Visor :)
• Fixed some badly formatted lines.
• Fixed some typos.
• Added a Genius/Paranoia idea contributed by Gaby Schilders.
1.5.21
Version 1.5
Changes by Josip Rodin and Javier Fernández-Sanguino Peña.
• Added paragraphs related to BIND and some FIXMEs.
Kapitel 1. Introduction
1.5.22
14
Version 1.4
• Small setuid check paragraph
• Various minor cleanups
• Found out how to use sgml2txt -f for the txt version
1.5.23
Version 1.3
• Added a security update after installation paragraph
• Added a proftpd paragraph
• This time really wrote something about XDM, sorry for last time
1.5.24
Version 1.2
• Lots of grammar corrections by James Treacy, new XDM paragraph
1.5.25
Version 1.1
• Typo fixes, miscellaneous additions
1.5.26
Version 1.0
• Initial release
1.6
Danksagung
• Alexander Reelsen schrieb die ursprüngliche Version.
• Javier Fernández-Sanguino fügte der orginal Version einiges an Informationen hinzu.
• Robert van der Meulen stellte den Abschnitt über Quota und viele seiner guten Ideen zur
Verfügung.
• Ethan Benson korrigierte den PAM-Abschnitt und hatte einige gute Ideen.
• Dariusz Puchalak trug Information zu verschiedenen Kapiteln bei.
• Gaby Schilders trug eine nette Genius/Paranoia Idee bei.
• Era Eriksson gab dem ganzen an vielen Stellen den sprachlichen Feinschliff und trug zur
Checkliste im Anhang bei.
Kapitel 1. Introduction
15
• Philipe Gaspar schrieb die LKM-Informationen.
• Yotam Rubin trug sowohl Korrekturen für viele Tippfehler bei als auch Informationen
über die Versionen von Bind und md5-Passwörter.
• All den Leuten, die Verbesserungen Vorschlugen, die (letzten Endes) eingeflossen sind
(siege ‘Changelog/History’ auf Seite 5).
• (Alexander) All den Leuten, die mich ermutigten diese HOWTO zu schreiben (die später
zu einer ganzen Anleitung wurde).
• Dem ganzen Debian Projekt.
Kapitel 1. Introduction
16
17
Kapitel 2
Bevor Sie beginnen . . .
2.1
Für was möchten Sie dieses System benutzen?
Das Absichern von Debian ist nicht viel anders, als das Absichern von irgendeinem anderen
System; um es richtig zu machen, müssen Sie zunächst entscheiden, was Sie damit machen
möchten. Anschliessend müssen Sie sich klarmachen, dass die folgenden Schritte sorgfälltig
ausführen mü:ssen, um ein wirklich sicheres System zu bekommen.
Sie werden feststellen, dass diese Anleitung von der Pike auf geschrieben ist - Sie werden
die Informationen zu einer Aufgabe die sie vor während und nach der Debian Installation
ausführen sollten in der entsprechenden Reihenfolge lesen. Die einzelnen einzelnen Aufgaben
können wie folgt beschrieben werden:
• Entscheiden Sie, welche Services sie benötigen, und beschränken Sie Ihr System auf selbige. Dies schliesst das Deaktivieren / Deinstallieren von nicht benötigten Servicen und
das installieren von Firewall-ähnlichen Filtern oder TCP-Wrapper ein.
• Einschränken der Nutzer und Zugriffsrechte auf Ihrem System.
• Abhärten der angeboteten Services derart, dass der Einfluss auf Ihr System im Falle einer
Komprimitierung möglichst gerung ist.
• Benutzen Sie die passenden Tools, um Sicher zu stellen, dass ein unautorisierter Zugriff
auf Ihr System entdeckt wird, so dass Sie geeignete Massnahmen ergreifen können.
2.2
Seien Sie Wachsam gegenüber generellen Sicherheitsproblemen!
Diese Anleitung geht (normalerweise) nicht auf Details ein, warum bestimmte Sache als Sicherheitsrisiko betrachtet werden. Vielleicht möchten Sie aber ein mehr Hintergrundwissen über
generelle Unix- und (bestimmte) Linux-Sicherheit. Nehmen Sie sich dei Zeit, um Sicherheits
Kapitel 2. Bevor Sie beginnen . . .
18
relevante Dokumente zu lesen, um Entscheidungen informiert treffen zu können, wenn Sie
eine Auswahl treffen müssen. Debian GNU/Linux basiert auf dem Linux-Kernel, so dass
viele Informationen über Linux, und sogar über andere Distributionen und allgemeine UNIXSicherehit, auch hierauf zutreffen (sogar wenn sich die benutzten Werkzeuge oder die verfügbaren PRogramme unterscheiden).
Ein Paar nützliche Dokumente sind: <– TODO: Gibt es davon Uebersetzungen? –>
• Die
Linux
Security
HOWTO
(http://www.linuxdoc.org/HOWTO/
Security-HOWTO.html) (auch unterLinuxSecurity (http://www.linuxsecurity.
com/docs/LDP/Security-HOWTO.html) verfügbar) ist eine der besten Referenzen
über allgemeine Linux-Sicherheit.
• Die Security Quick-Start HOWTO for Linux (http://www.linuxsecurity.com/
docs/LDP/Security-Quickstart-HOWTO/) ist ein sehr guter Anfang, für unerfahrene Nutzer (sowohl von Linux als auch zum Theme Sicherheit)
• Die Linux Security Administrator’s Guide (http://seifried.org/lasg/) (wird
unter Debian durch das Paket lasg zur Verfügung gestellt) ist eine komplette Anleitung,
die alle Sicherheitsangelegenheiten zu Linux behandelt, von Sicherehit im Kernel bis hin
zu VPNs. Es ist ein wenig veraltet (seit 1999 nicht mehr aktualisiert) und wurde durch die
Linux Security Knowledge Base (http://seifried.org/lskb) ersetzt. Dieses Dokument stellt Debian Ihnen mit dem Paket lskb zur Verfügung.
• Kurt Seifried’s Securing Linux Step by Step (http://seifried.org/security/os/
linux/20020324-securing-linux-step-by-step.html).
• In Securing and Optimizing Linux: RedHat Edition (http://www.linuxdoc.org/
links/p_books.html#securing_linux) finden Sie eine Dokumentation ähnlich zu
dieser bezogen auf RedHat. Manche behandelten Sachen sind nicht Distributions spezifisch, passen also auch auf Debian.
• IntersectAlliance hat einige Dokumente veröffentlicht, die als Referenz benutzt werden
können, wie man einen Linux-Server (und seine Services) abhärtet. Diese Dokumente
sind auf ihrer Seite (http://www.intersectalliance.com/projects/index.
html) verfügbar.
• Für Netzwerk-Administratoren ist die Securing your Domain HOWTO (http://www.
linuxsecurity.com/docs/LDP/Securing-Domain-HOWTO/) eine gutes Handbuch, wie man sein Netzwerk absichert.
• Wenn Sie die Programme, die Sie benutzen möchten (oder die Sie neu schreiben wollen),
bezüglich Sicherheit auswerten wollen, sollten Sie die Secure Programs HOWTO (http:
//www.linuxdoc.org/HOWTO/Secure-Programs-HOWTO.html) durchlesen.
• Wenn Sie es in Betracht ziehen, eien Firewall zu installieren, sollten Sie die Firewall HOWTO (http://www.linuxdoc.org/HOWTO/Firewall-HOWTO.html) und
die IPCHAINS HOWTO (http://www.linuxdoc.org/HOWTO/IPCHAINS-HOWTO.
html) (bei Kerneln vor Version 2.4) lesen.
Kapitel 2. Bevor Sie beginnen . . .
19
• Schliesslich ist die Linux Security RefenceCard (http://www.linuxsecurity.com/
docs/QuickRefCard.pdf) eine gute Kartei, um in Sachen Sicherheit auf dem aktuellen Stand zu bleiben.
In jedem Fall gibt es mehr Informationen über die Services (NFS, NIS, SMB. . . ) in den vielen
HOWTOs, die sie beim Linuxdoc Project (http://www.linuxdoc.org/) finden. Manche
dieser Dokumente gehen auf die Sicherheitsaspekte von bestimmten Services ein. Gehen Sie
Sicher, dass auch hierrauf einen Blick werfen.
Die HOWTO-Dokumente des Linux Dokomentation Projektes sind unter Debian GNU/Linux
duch Installation des Paketes doc-linux-text (Text-Version) oder doc-linux-html
(HTML-Version) verfügbar. Nach der Installation sind diese Dokumente in den Verezichnissen
/usr/share/doc/HOWTO/en-txt beziehungsweise /usr/share/doc/HOWTO/en-html
vorhanden.
Andere empfohlene Linux Bücher:
• Maximum Linux Security : A Hacker’s Guide to Protecting Your Linux Server and Network. Anonymous. Paperback - 829 pages. Sams Publishing. ISBN: 0672313413. July 1999.
• Linux Security By John S. Flowers. New Riders; ISBN: 0735700354. March 1999
• Hacking Linux Exposed (http://www.linux.org/books/ISBN_0072127732.
html) By Brian Hatch. McGraw-Hill Higher Education. ISBN 0072127732. April, 2001
Andere Bücher (auch über allgemeine Aspekte von Sicherheit unter Unix, nicht nur Linux
spezifisch):
• Practical Unix and Internet Security (2nd Edition) (http://www.ora.com/catalog/
puis/noframes.html) Garfinkel, Simpson, and Spafford, Gene; O’Reilly Associates;
ISBN 0-56592-148-8; 1004pp; 1996.
• Firewalls and Internet Security Cheswick, William R. and Bellovin, Steven M.; AddisonWesley; 1994; ISBN 0-201-63357-4; 320pp.
Some useful Web sites to keep uptodate regarding security:
• NIST Security Guidelines (http://csrc.nist.gov/fasp/index.html).
• Security Focus (http://www.securityfocus.com) the server that hosts the Bugtraq
vulnerability database and list, and provides general security information, news and reports.
• Linux Security (http://www.linuxsecurity.com/). General information regarding
Linux security (tools, news. . . ). Most useful is the main documentation (http://www.
linuxsecurity.com/resources/documentation-1.html) page.
• Linux firewall and security site (http://www.linux-firewall-tools.com/
linux/). General information regarding Linux firewalls and tools to control and administrate them.
Kapitel 2. Bevor Sie beginnen . . .
2.3
20
Wie geht Debian mit der Sicherheit um?
Um einen allgemeinen Überblick über die Sicherheit unter Debian GNU/Linux sollten Sie zur
Kenntnis nehmen, was Debian tut, um ein sicheres System zu gewährleisten.
• Debians Probleme werden immer öffentlich behandelt, sogar wenn sie die Sicherheit betreffen. Wie der Debian Gesellschafter Vertrag (http://www.debian.org/social_
contract) sagt: Wir werden Probleme nicht verbergen Wir werden unsere Fehlerdatenbank für
alle Zeiten öffentlich betreiben. Fehlermeldungen, die von Anwendern online abgeschickt werden,
werden augenblicklich für andere sichtbar. Aspekte der Sicherheit werden öggentlich auf der
debian-security Mailing-Liste diskutiert. Debians Sicherheit Gutachten werden über eine
öffentliche Mailing-Liste gesendet (sowohl innerhalb als auch ausserhalb) und auf einem
öfentlichen Server veröffentlicht.
• Debian verfolgt Sicherheitsangelegenheiten sehr aufmerksam. Das Sicherheits-Team
prüft viele Sicherheits relevante Quellen, die wichtigste davon Bugtraq (http://www.
securityfocus.com/cgi-bin/vulns.pl), während sie Pakete mit SicherheitsProblemen suchen, die ein Teil von Debian sein können.
• Sicherheits-Updates geniessen höchste Priorität. Wenn ein Sicherheits Problem in einem
Debian Paket erscheint, wird ein Sicherheits-Update so schnell wie möglich vorbereotet
und für die stabile und instabile Release, einschliesslich aller Architecturen, veröffentlicht.
• Alle Informationen über Sicherheit sind an einer zentralen Stelle zu finden: http://
security.debian.org/.
• Debian versucht immer die gesamte Sicherheit seiner Distribution zu verbessern,
beispielsweise durch eine automatische Paket Signierungs- und VerifikationsMechanismen.
• Debian versucht eine nützliche Zahl von Sicherheits relevanten Werkzeugen für SystemAdministratoren und zur Überwachung zur verfügung zu stellen. Entwickler versuchen
diese Werkzeuge fest mit der Distribution zu verbinden, um sie angepasster für zur
Durchsetzung lokaler Sicherheits-Regelungen zu machen. Diese Werkzeuge schliessen
folgendes mit ein: Prüfer der Integrität, allgemeine Prüfungs Werkzeuge, Werkzeuge
zum abhärten, Werkzeuge für Firewalls, Eindringling-Erkennungs-Tools, und vieles andere.
• Paket-Betreuer sind sich der Sicherheits-Probleme bewusst. Dies führt oft zu EINER “voreingestellt sicheren” Installation von Servicen, die Sie manchmal in ihrer normalen Benutzung etwas einschränken. Dennoch versucht Debian Sicherheitsaspekte und einfache
Administration abzuwägen, zum Beispiel werden Services nicht deaktiviert installiert,
wie es bei den Distributionen der BSD-Familie üblich ist. Auf jedem Fall sind spezielle
Sicherheits-Aspekte, wie zum Beispiele setuid-Programme, sind Teil der Debian Policy
(http://www.debian.org/doc/debian-policy/).
Kapitel 2. Bevor Sie beginnen . . .
21
This same document tries to enforce, as well a better distribution security-wise, by publishing
security information specific to Debian which complements other information-security documents related to the tools used by Debian or the operating system itself (see ‘Seien Sie Wachsam
gegenüber generellen Sicherheitsproblemen!’ auf Seite 17.
Kapitel 2. Bevor Sie beginnen . . .
22
23
Kapitel 3
Vor und während der Installation
3.1
Setzen Sie ein Passwort im BIOS
Bevor Sie irgendein Betriebssystem auf Ihrem Computer installieren, setzen Sie ein Passwort
im BIOS. Nach der Installation (sobald Sie von der Festplatte booten können) sollten Sie zurück
ins BIOS gehen, und die Boot-Reihenfolge ändern, so dass sie nicht von Diskette, CDROM
oder sonstigen Geräten booten können, von denen dies nicht gehen sollte. Andernfalls benötigt
ein Cracker nur physischen Zugang und eien Bootdiskete um Zugriff auf Ihr ganzes System
zugreifen zu können.
Das Abschalten von booten ohne Passwort ist sogar noch besser! Dies kann sehr effektiv sein,
wenn Sie einen Server laufen lassen, da er nicht sehr oft neu gebootet werden wird. Der
Nachteil dieser Taktik ist, dass das Neustarten einen menschlichen Eingriff benötigt, was zu
Problemen führen kann, wenn die Maschinen nicht leicht zugänglich ist.
Beachten Sie: Viele BIOSe haben wohl bekannte Master-Passwörter, und es gibt sogar Applikationen, um Passwörter aus dem BIOS wieder zu gewinnen. Folglich können Sie sich nicht auf
diese Massnahme verlassen, um den Zugriff auf das Systems abzusichern.
3.2
3.2.1
Partitionieren des Systems
Wählen Sie ein intelligentes Partitions-Schemata
Was ein Inteligentes Partiotions-Schemata ist, hängt davon ab, wie die Maschine benutzt wird.
Eine gute Faustregel ist, mit Ihren Partitionen eher grosszügig zu sein und die folgenden Faktoren zu berücksichtigen:
• Jeder Verzeichnissbaum, auf den ein Nutzer Schreibzugriff hat, wie zum Beispiel /home
und /tmp sollte auf einer separaten Partition liegen. Dies reduziert das Risiko eines DoS
durch einen Nutzer, indem er Ihren “/”-Mountpoint auffüllt und so das gesamte System
unbenutzbar macht. (Eigentlich ist das so nicht ganz richtig, da immer etwas Platz für
den Superuser root reserviert wird, den ein normaler Nutzer nicht belegen kann.)
Kapitel 3. Vor und während der Installation
24
• Auch sollte jeder Verzeichnisbaum, der schwanken kann, zum Beispiel /var (insbesondere /var/log) eine seperate Partition bekommen. Auf einem Debian System sollten
Sie /var ein wenig grösser als normal erstellen, da herunter geladene Pakete (der Zwischenspeicher von apt) unter /var/cache/apt/archives gespeichert wird.
• Jeder Teil, in dem Sie nicht-Distributions-Software installieren wolle, soltle eine separate
Partition sein. Nach dem File Hierarchy Standard wären dies /opt oder /usr/local.
Wenn diese separate Partitionen sind, werden Sie nicht gelöscht, wenn Sie einmal Ihr
Debian neu installieren (müssen).
• Vom Standpunkt der Sicherheit aus ist es sinnvoll zu versuchen, statische Daten auf seine
eigene Daten zu verschieben, und diese Partition dann ohne Schreibzugriff einzuhängen
(mounten). Oder noch besser: Legen Sie diese Daten auf ein nicht beschreibbares Medium
ab. Lesen Sie weiter unten für weitere Details.
Im Falle eines Mailservers ist es wichtig eine seperate Partition für den Mail-Pool. NichtLokale Nutzer können (wissentlich oder unwissentlich) den Mail-Pool (/var/mail oder /var
/spool/mail überfüllen. Wenn der Poll eine separate Partition ist, wird diese Situation das
System nicht in einen unnutzbaren Zustand führen. Anderenfalls (wenn das Pool-Verezichniss
denselben Platz belegt, wie /var) hat das System ein schwerwiegendes Problem: ProtokollEinträge (log’s) können nicht erstellt werden, Pakete können nicht installiert werden, und es
könnten sogar ein paar Programme Probleme mit dem Starten haben (wenn sie /var/run
benutzen).
Ausserdem sollten Sie für Partitionen, deren Platzbedarf Sie noch nicht abschätzen können,
Logical Volume Manager (lvm-common und die benötigten ausführbaren Programme (binaries), entweder lvm10, lvm6, oder lvm5) installieren. Durch benutzen von lvm können Sie
Datenträger-Gruppen erstellen, die mehrere physische Datenträger erweitern.
Auswahl eines passenden Dateisystems
Während der Partitionierung des Systems müssen Sie sich ebenfalls entscheiden, welche
Dateisysteme Sie benutzen möchten. Als standard Dateisystem wird während der Debian Installation für Linux Partitionen ext2 ausgewählt. Dennoch ist es ratsam, auf ein “journaling filesystem” (ein Dateisystem, dass Änderungen mitprotokolliert) zu wechseln, wie zum
Beispiel ext3, reiserfs, jfs oder xfs. Dadurch verkleinern Sie Probleme, die durch einen
Absturz des Systems
• Auf Laptops auf allen Dateisystemen. Auf diese Art reduzieren Sie die Wahrscheinlichkeit eines Datenverlustes, wenn beispielsweise unerwartet Ihr Akku leer wird oder
das System aufgrund einer Hardware-Sache neu booten (eine irgendwie komische XKonfiguration zum Beispiel) mussten.
• Auf Produktiv-Systemen, die grosse Mengen von Daten Speichern (zum Beispiel MailServer, FTP-Server, Netzwerk Dateisystemen. . . ) ist es empfohlen, ein journaling Filesystem auf diesen Partitionen einzusetzen. Wenn ein System-Crash auftritt, benötigt der
Kapitel 3. Vor und während der Installation
25
Server so weniger Zeit, um das Dateisystem wieder herzustellen und durchzu prüfen,
und Sie verringern die Wahrscheinlichkeit eines Datenverlustes.
Lassen wir mal die Betrachtung der Leistung von journaling Filesystemen beiseite (da sich
dies oft zu quasi religioösen Glaubenskriegen ausartet). Im Regelfall ist es besser, das ext3
Dateisystem zu benutzen. Der Grund dafür ist die Abwärtskompatibilität zu ext2, so können
Sie, wenn es Probleme mit dem Journal gibt, dieses einfach abschalten, und haben immernoch
ein funktionierendes Dateisystem. Ausserdem können Sie, wenn Sie das System mal mit einer
Boot-Diskette (oder CDROM) wiederherstellen müssen, keinen speziellen Kernel benutzen.
Wenn es sich um einen 2.4er Kernel handelt, ist Unterstützung für etx3 bereits vorhanden,
wenn es sich um einen 2.2er Kernel handelt, können Sie trotzdem Ihr Dateisystem booten, auch
wenn Sie die journaling-Fähigkeiten einbüssen. Wenn Sie ein anderes journaling Filesystem
benutzen werden Sie feststellen, dass Ihnen eine Widerherstellung nicht möglich ist, bis Sie
einen 2.4er Kernel, mit den benötigten Modulen einkompiliert, haben. Wenn Sie mit einem
2.2er Kernel der Rettungs-Diskette festhängen, kann es sich als ziemlich schwer erweisen, auf
reiserfs pder xfs zuzugreifen.
In jedem Fall könnten mit ext3 weniger Daten-Verluste auftreten, da es auch Datei-Daten
protokolliert, während lediglich Meta-Daten protokollieren, siehe auch http://lwn.net/
2001/0802/a/ext3-modes.php3.
3.3
Gehen Sie nicht ins Nezt, bevor Sie nicht bereit sind
Das Sytem, das Sie installieren wollen, sollten Sie nicht sofort währen der Installation mit dem
Internet verbinden. Dies hörrt sich vielleicht doof an, wird aber gewöhnlich so getan. Da das
System Services installieren und sofort installieren wird, können Sie, wenn das System mit
dem Internet verbunden ist und sie nicht geeignet konfiguriert sind, Ihr System für Angriffe
öffnen.
Ausserdem sollten Sie beachten, dass Services neuere Sicherheits-Löcher haben lönnte, die
noch nicht in den Paketen, die Sie zur Installation benutzen, korrigiert worden sind. Dies ist
für gewöhnlich dann der Fall, wenn Sie von älteren Medien (wie CD-ROMs) installieren. In
diesem Fall wäre Ihr System bereits kompromitiert, bevor Sie mit der Installation fertig sind!
Da die Debian Installation und Upgrades über das Internet durchgeführt werden können,
denken Sie vielleicht, es ist eine gute Idee, dies gleich während der Installation zu nutzen.
Wenn das System direct mit dem Internet Verbunden ist (und nicht von einer Firwall oder
NAT beschützt wird), ist es besser ohne Internet Verbindung zu installieren und Lokale-PaketSpiegel (Mirror) sowohl von den Paket-Quellen als auch von den Sicherheits-Updates. Sie können einen Paket-Mirror aufsetzen, indem Sie ein anderes System nutzen, dass mit dem Internet
verbunden ist und Debian-Spezifische Tools (wenn es sich um ein Debian System handelt) wie
apt-move oder apt-proxy oder andere der üblichen Werkzeuge zum spiegel benutzen, um
ein Archiv für das zu installierende System zur Verfügung zu stellen. Wenn Sie dies nicht
tun können, sollten Sie Firewall-Regeln aufsetzen, die den Zugriff auf Ihr System eingrenzen,
währen Sie das Update durchführen (siehe id=“fw-security-update”>).
Kapitel 3. Vor und während der Installation
3.4
26
Setzen Sie ein Passwort für root
Das Setzen eines guten Root-Passworts ist die wichtigiste, grundlegende Anforderung an ein
sicheres System.
3.5
Aktivieren sie “shadow passwords” und “MD5 passwords”
Am Ende der Installation werden Sie gefragt werden, ob “shadow passwords” eingeschaltet
werden sollen. Beantworten Sie diese Frage mit “yes”, dann werden Passwörter in der Datei
/etc/shadow. Nur Root und die Gruppe shadow haben lese Zugriff auf diese Datei, so ist es
keinem Nutzer möglich, sich eine Kopie dieser Datei zu erstellen, um einen Passwort-Cracker
auf sie laufen zu lassen. Sie können mit dem Befehl shadowconfig jederseit zwischen “shadow passwords” und normalen Passwörtern wechseln. Desweiteren werden Sie während der
Installation gefragt, ob Sie mit MD5 gehashte Passwörter benutzen möchten. Dies ist im allgemeinen eine gute Idee, da es längere Passwörter und bessere Verschlüsselung erlaubt.
Mehr über “shadow passwords” lesen Sie unter Shadow Password (http://www.
linuxdoc.org/HOWTO/Shadow-Password-HOWTO.html)
(/usr/share/doc/HOWTO
/en-txt/Shadow-Password.txt.gz).
3.6
lassen Sie so wenig Services wie möglich laufen
Service sind Programme wie FTP- und Web-Server. Da sie eingehende Verbindungen, die den
Service anfordernm entgegen nehmen und ihnen zuhören müssen, können sich externe Computer mit Ihrem verbinden. Services sind manchmal verwundbar (zum Beispiel durch eine bestimmte Attacke kompromitierbar) und sind dadurch ein Sicherheits Risiko.
Sie sollten keine Services installieren, die Sie nicht unbedingt auf der Machine brauchen. Jeder Installierter Service könnte neue, vielleicht nicht auf der Hand liegende (oder bekannte)
Sicherheits-Löcher auf Ihrem Computer.
Wie Sie vielleicht schon wissen, ist ein bestimmter Service, den Sie installieren, ist er standardmässig aktiviert. In der der default Debian Installation, ohne jeden installierten Service,
sind die Fussspuren der laufenden Services sind ziemlich gering und noch geringer, wenn
man nur von Servicen spricht, die zu einem Netzwerk hin angeboten werden. Die Fussspuren
von Debian 2.1 waren nicht so tief wie die von Debian 2.2 (ein paar inetd-Services wurden
standard-mässig eingeschaltet) und in Debian 2.2 sind die rpc-Portmapper nach der Installation eingeschaltet. Rpc ist standardmässig installiert, da er für vueke Services benötigt wird.
Er kann sehr leicht entfernt werden, sehen sie ‘Daemon-Services abschalten’ auf der nächsten
Seite, um zu erfahren, wie man Ihn abschaltet.
Wenn Sie einen neuen Netzwerk nutzenden Service (daemon) auf Ihrem Debian GNU/Linux
System instalieren, kann er auf zwei Arten eingeschaltet werden: Durch den inetd Superdaemon (was heisst: Eine Zeile wird /etc/inetd.conf hinzugefügt) oder durch ein alleinstehendes Programm, dass sich selbst an die Netzwerk-Schnittstelle bindet. Alleinstehende
Kapitel 3. Vor und während der Installation
27
Programme werden durch /etc/init.d kontrolliert, diese werden beim starten durch den
SysV-Mechanismus (oder einen alternativen= gestartet, indem die symbolischen Verknüpfungen (Links) in /etc/rc?.d/* benutzt werden (Mehr Informationen wie dies geschieht finden
Sie in /usr/share/doc/sysvinit/README.runlevels.gz).
Wenn Sie trotzdem Services installieren wollen, diese aber selten benutzen, entfernen Sie sie
mittels den update-Befehlen, wie ’update-inetd’ und ’update-rc.d’.
3.6.1
Daemon-Services abschalten
Das Abschalten eines Daemon-Service ist sehr einfach. Es gibt verschiedene Methoden:
• Entferned der Links von /etc/rc${runlevel}.d/ oder umbenennen der Links (so
dass sie nicht mit einem ’S’ anfangen)
• Umbenennen der Skript-Dateien (/etc/init.d/_service_name_), zum Beispiel in
/etc/init.d/OFF._service_name_
• Entfernen des Ausführbar-Bis (execution bit, x-bit) von der Datei /etc/init.d
/_service_name_
• Editieren der Datei /etc/init.d/_service_name_, so dass sich das Skript sofort
beendet.
Sie können die Links manuell aus /etc/rc${runlevel}.d/ entfernen oder Sie benutzen
update-rc.d (siehe auch update-rc.d(8)). So können sie zum Beispiel einen Service in
den multi-User Runleveln abschalten:
update-rc.d stop XX 2 3 4 5 .
Bitte beachten Sie, dass wenn Sie nicht file-rc benutzen, update-rc.d -f _service_
remove nicht korrekt arbeiten wird, da alle Verknüpfungen entfernt werden, nach einer reinstallation oder einem Upgrade dieses Paketes werden diese Verknüpfungen neu angelegt
(was Sie vermutlich nicht wollen). Wenn Sie denken, dass dies wenig intuitiv ist, liegen Sie
wohl richtig (siehe Bug 67095 (http://bugs.debian.org/67095)). Aus der Handbuchseite:
If any files /etc/rcrunlevel.d/[SK]??name already exist then
update-rc.d does nothing. This is so that the system administrator
can rearrange the links, provided that they leave at least one
link remaining, without having their configuration overwritten.
Wenn Sie file-rc benutzen, werden alle Informatione über das Starten von Services durch
eine gemeinsame Konfigurations-Datei verarbeitet und werden sogar nach der Deinstallation
eines Services von dem System beibehalten.
Kapitel 3. Vor und während der Installation
28
Sie können das TUI (Text User Interface, textuelle Benutzeroberfläche) des Paketes rcconf
benutzen, um all diese Änderungen einfach zu erledigen (rcconf arbeitet sohwohl mit file-rc
als auch mit normallen System V Runleveln).
Andere (nicht empfohlene) Methoden zum abschalten eines Services sind: chmod 644
/etc/init.d/daemon (aber das erzeugt eine Fehlermeldung beim booten) oder das ändern des /etc/init.d/daemon-Skriptes (hinzufügen von exit 0 als allererste Zeile oder
auskommentieren des start-stop-daemon Teils). Da es sich bei allen init.d-Dateien um
Konfigurations-Dateien handel, werden Sie bei einem Upgrade nicht überschrieben.
Leider können Sie, im Gegensatz zu anderen (UNIX) Betriebssystemen, Services unter Debian nicht abschalten, indem Sie die Dateien unter /etc/default/_servicename_ modifizieren.
FIXME: Add more information on handling daemons using file-rc
3.6.2
Abschalten von inetd-Servicen
Abschalten sollten Sie alle nicht benötigten Services, wie zum Beispiel echo, chargen, discard,
daytime, time, talk, ntalk und die r-Services (rsh, rlogin und rcp), die als SEHR unsicher gelten
(benutzen Sie stattdessen ssh). Nachdem Sie diese abgeschaltet haben, sollten Sie überprüfen,
ob Sie überhaupt den inetd-Daemon brauchen. Viele Leute ziehen es vor einzelne Daemonen
zu benutzen, anstatt einen Service über inetd aufzurufen. Wenn Sie dann immernoch einen
inetd-Service laufen lassen wollen, wechseln Sie zu einem konfigurierbarerem inet-Daemon,
wie xinietd oder lrinetd.
Sie können Services abschalten, indem Sie direkt /etc/inetd.conf editieren, aber Debian
stellt Ihnen eine besseren Weg zur Verfügung das zu tun: update-inetd (was die Services
auf eine Art auskommentiert, so dass sie leicht wieder eingeschaltet werden können). Sie können den telnet daemon sehr leicht mit dem folgenden Kommando abschalten, so dass die
Konfigurations-Dateien angepasst und der Daemon neu gestartet wird:
/usr/sbin/update-inetd --disable telnet
Wenn Sie Services lauschen lassen wollen, aber Sie nicht auf alle IP-Adressen Ihres Hosts hören
sollen, möchten Sie vielleicht eine undokumentierte Fähigkeit von inetd benutzen. Oder Sie
benutzen einen anderen inetd-Daemon wie xinetd.
3.7
Installieren Sie möglichst wenig Software, nur die benötigte
Debian kommt mit sehr viel Software, zum Beispiel kommt die Release Debian 3.0 woody auf
7 CD-ROMs, mit tausenden von Software Paketen. Bei so viel Software, und sogar wenn Sie
die Installation auf das Basis-System reduzieren 1 könnten Sie auf Abwege geraten und mehr
1
Unter Debian Woody ist das Basis-System etwa 40MB gross. Probieren Sie folgendes:
Kapitel 3. Vor und während der Installation
29
installieren als Sie wirklich benötigen. 2
Da Sie you bereits wissen, was Sie mit Ihrem System machen wollen (oder etwa nicht?) sollten
Sie nur Software installieren, die Sie wirklich zum arbeiten benötigen. Jedes unnötige Tool,
dass Sie installieren könnte von einem Nutzer, der Ihr System kompromitieren will genutzt
werden, oder von einem externen Eindringling, der Shell-Zugriff bekommen hat (oder der
Code von ausserhalb durch einen ausnutzbaren Service ausführen kann).
Zum Beispiel kann das Vorhandensein von Entwickler-Tolls (einem C-Compiler) oder Interpretern (wie Perl - sehen Sie weter unten -, python, tcl..) einem Angreifer helfen, dass System
weiter zu kompromitieren:
• dem Angreifer erlauben Privilegien auszuweiten. Es ist zum Beispiel leichter eine Lokale
Sichereheitslücke des Systems auszunutzen, wenn man einen Debugger und Compiler
zur verfügung hat, um den eigenen Exploit (Programm, dass eine Sicherheitslücke ausnutzt) zu kompilieren und zu testen.
• dem Angreifer Tools zur Verfügung stellen, die ihm helfen können, das kompromitierte
Syste als Basis für Angriffe auf andere Systeme zu benutzen. 3
Natürlich kann ein Eindringling mit lokalem Shell-Zugriff seine eigenen Tolls herunterladen
und ausfphren, und sogar die Shell selbst kann benutzt werden, um komplexere Programme
zu schreiben. Das entfernen unnötiger Programme wird also nicht helfen, das Problem zu verhindern, aber das Problem wird dadurch ein wenig schwerer für den Angreifer (und manchmal wird er in dieser Situation aufgeben und sich ein leichteres Ziel suchen). Wenn Sie also
auf einem produktivem System Tools lassen, die benutzt werden können, um andere Systeme
anzugreifen (siehe ‘Tools zur Fern-Prüfung der Verwundbarkeit’ auf Seite 101), müssen Sie
auch davon ausgehen, dass ein Angreifer sie benutzen wird.
3.7.1
Entfernen von Perl
Sie müssen Berücksichtigen, dass sich das Entfernen von perl von einem Debian-System als
nicht so einfach erweisen könnte (in der Tat kann es ziemlich schwer sein), da es von vielen Dienstprogeammen des Systems benutzt wird. perl-base hat ausserdem Priority: required (und
dass sagt eigentlich schon alles). Es ist aber trotzdem machbar, Sie müssen nur bedenken, dass
$ size=0 $ for i in ‘grep -A 1 -B 1 "^Section: base"/var/lib/dpkg/available
| grep -A 2 "^Priority: requiredgrep "^Installed-Sizecut -d : -f 2 ‘; do
size=$(($size+$i)); done $ echo $size 34234
2
Unter Debian Woody ist das Basis-System etwa 40MB gross. Probieren Sie folgendes:
$ size=0 $ for i in ‘grep -A 1 -B 1 "^Section: base"/var/lib/dpkg/available
| grep -A 2 "^Priority: requiredgrep "^Installed-Sizecut -d : -f 2 ‘; do
size=$(($size+$i)); done $ echo $size 34234
3
Viele “intrusions” (Eindringen auf fremde Systeme) werden eher gemacht, um an die Resourcen für illegitime
Aktitiväten zu kommen (denial of service Attacken, Spam, geheime FTP-Server , dns Verunreinigung. . . ), als nur
um irgendwelche vertraulichen Daten auf dem kompromitierten System zu kommen.
Kapitel 3. Vor und während der Installation
30
Sie auf diesem System keine Perl-Anwendung mehr laufen lassen können, und Sie müssen
auch das Paket-Managment-System hereinlegen, damit es weiterhin denkt, dass perl-base
installiert ist, auch wenn es das nicht mehr ist. 4
Welche Dienstprogramme benutzen Perl? Sie können es selbst herausfinden:
$ for i in /bin/* /sbin/* /usr/bin/* /usr/sbin/*; do [ -f $i ] && {
type=‘file $i | grep -il perl‘; [ -n "$type" ] && echo $i; }; done
Diese Liste schliesst die Folgenden Dienstprogramme mit der Priorität required oder important
mit ein:
• /usr/bin/chkdupexe aus dem Paket util-linux.
• /usr/bin/replay aus dem Paket bsdutils.
• /usr/sbin/cleanup-info aus dem Paket dpkg.
• /usr/sbin/dpkg-divert aus dem Paket dpkg.
• /usr/sbin/dpkg-statoverride aus dem Paket dpkg.
• /usr/sbin/install-info aus dem Paket dpkg.
• /usr/sbin/update-alternatives aus dem Paket dpkg.
• /usr/sbin/update-rc.d aus dem Paket sysvinit.
• /usr/bin/grog aus dem Paket groff-base.
• /usr/sbin/adduser aus dem Paket adduser.
• /usr/sbin/debconf-show aus dem Paket debconf.
• /usr/sbin/deluser aus dem Paket adduser.
• /usr/sbin/dpkg-preconfigure aus dem Paket debconf.
• /usr/sbin/dpkg-reconfigure aus dem Paket debconf.
• /usr/sbin/exigrep aus dem Paket exim.
• /usr/sbin/eximconfig aus dem Paket exim.
• /usr/sbin/eximstats aus dem Paket exim.
• /usr/sbin/exim-upgrade-to-r3 aus dem Paket exim.
• /usr/sbin/exiqsumm aus dem Paket exim.
• /usr/sbin/keytab-lilo aus dem Paket lilo.
4
Sie können (auf einem anderen System) eine Paket-Attrappe mit equivs erstellen.
Kapitel 3. Vor und während der Installation
31
• /usr/sbin/liloconfig aus dem Paket lilo.
• /usr/sbin/lilo_find_mbr aus dem Paket lilo.
• /usr/sbin/syslogd-listfiles aus dem Paket sysklogd.
• /usr/sbin/syslog-facility aus dem Paket sysklogd.
• /usr/sbin/update-inetd aus dem Paket netbase.
Also, ohne Perl udn solange Sie diese Dienstprogramme nicht in einem Shell-Skript
neuschreiben, werden Sie wahrscheinlich keine Pakete mehr verwalten klnnen (und so das
System nicht upgraden können, und das ist keine gute Idee).
Wenn Sie sich dazu entschlossen haben, Perl aus dem Debian-Basis-System zu entfernen und
ein wenig Freizeit haben, schicken Sie uns doch Bug-Reports zu den aufgezählten Paketen, die
(als ein Patch) einen Ersatz dieser Dienstprogramme als Shell-Skript enthält.
3.8
Lesen Sie Debians Sicherheits-Mailinglisten
Es ist niemals falsch einen Blick entweder in die debian-security-announce Mailing-Liste, wo
Sicherheitsgutachten und Problemlösungen durch das Debian-Team für Sicherheit bekannt
gemacht werden, oder auf die debian-security@lists.debian.org Liste, wo Sie an den Diskussionen zu allen Sicherheits relevanten Dinge teilnehmen könen, zu werfen.
Um wichtige Warnungen zu Sicherheits-Update zu erhalten, senden Sie
eine
Email
an
debian-security-announce-request@lists.debian.org
(mailto:
debian-security-announce-request@lists.debian.org)
mit
dem
Wort
“subscribe” in der Betreff-Zeile. Sie können diese moderierte Email-Liste unter
http://www.debian.org/MailingLists/subscribe über das Web abonnieren.
Diese Mailingliste hat ein sehr geringes Aufkommen, und indem Sie sie abonnieren, werden Sie sofort über Sicherheits-Updates der Debian-Distribution informiert. Dies erlaubt Ihnen sehr schnell neue Pakete mit Sicherheits-Fixes herunterzuladen, was sehr wichtig ist, um
ein sicheres System zu verwalten (Siehe ‘Ausführen von Sicherheitsupdates’ auf Seite 39 für
weitere Details, wie Sie dies machen)
Kapitel 3. Vor und während der Installation
32
33
Kapitel 4
Nach der Installation
Wenn das System installiert ist, können sie es noch weiter absichern, indem sie einige der in
diesem Kapitel beschriebenen Schritte ausführen. Natürlich hängt dies vor allem von ihrem
Setup up, aber um physischen Zugriff zu verhindern. sollten sie ‘Änderungen im BIOS (noch
einmal)’ auf dieser Seite, ‘Ein Passwort für LILO oder GRUB einstellen’ auf der nächsten Seite,
‘Entfernen des root Promptes aus dem Kernel’ auf Seite 35, ‘Booten von Diskette verbieten’ auf
Seite 35, ‘einschränkender Konsolen zugang’ auf Seite 36, und ‘Systemneustart auf der Konsole
einschränken’ auf Seite 37 lesen.
Bevor sie sich mit einem Netzwerk verbinden, insbesondere wenn es sich um ein öffentliches
Netzwerk handelt, sollten sie wenigstens ein securezty update (siehe ‘Ausführen von Sicherheitsupdates’ auf Seite 39) durchführen. Optional können sie sie sich einen Snapshot ihres
Systems machen (siehe ‘Einen Schnappschuss des Systems erstellen’ auf Seite 64).
4.1
Änderungen im BIOS (noch einmal)
Erinnern sie sich an ‘Setzen Sie ein Passwort im BIOS’ auf Seite 23? Nun, jetzt sollten sie, nachdem sie nicht mehr von austauschbaren Datenträgern booten müssen, die standard BIOS Einstellung so umändern, dass es auschliesslich von der Festplatte bootet. Gehen sie sicher, dass
sie ihr BIOS Passwort nicht verlieren, oder sie werden, im Falle eines Festplattenfehlers, nicht
mehr ins BIOS zurückkehren können, um die Einstellung wieder zu ändern, so dass sie ihr
System wiederherstellen können, indem sie zum Beispiel eine CD-ROM benutzen.
Eine andere, weniger sicher, aber bequemere Möglichkeit ist es, das BIOS so einzustellen, dass
es von von der Festplatte bootet, und nur falls dies fehlschlägt versucht von austauschbaren
Datenträgern zu booten. Übrigens wird dies oft so gemacht, weil nur wenige ein BIOS Passwort benutzen, dass oft zu leicht vergessen wird.
Kapitel 4. Nach der Installation
4.2
34
Ein Passwort für LILO oder GRUB einstellen
Jeder kann sehr einfach eine roor Shell auf ihrem System bekommen, indem er einfach
“<Name-ihres-Bootimages> init=/bin/sh” am Bootprompt eingibt. Nachdem die Passwörter
geändert und das System neu gestartet wurde, hat die Person uneingeschränkten Root Zugang
and kann alles auf ihrem System machen, das sie will. Nach dieser Prozedur haben sie keinen
Root Zugang mehr zu ihrem System, weil sie das Root Passwort nicht kennen.
Um sicher zu stellen, dass dies nicht passieren kann, sollten sie den boot loader mit einem Passwort schützen. Sie können zwischem einem globalen Passwort und Passwörtern für bestimmte
Images wählen.
Für LILO müssen sie die Konfigurationsdatei /etc/lilo.conf editieren und eine “password” und “restricted” Zeile, wie im folgenden Beispiel, einfügen:
image=/boot/2.2.14-vmlinuz
label=Linux
read-only
password=hackmich
restricted
Haben sie dies getan, rufen sie lilo auf. Wenn sie die “restricted” Zeile weglassen, wird lilo
immmer nach dem Passwort fragen, egal ob LILO parameter übergeben wurden oder nicht.
Die vorgabe Zugriffsrechte auf /etc/lilo.conf erlauben root das lesen und schreiben, und
der Gruppe von lilo.conf, ebenfalls root, das Lesen.
Wenn sie GRUB anstelle von LILO verwenden, editieren sie /boot/grub/menu.lst und fügen die folgenden zwei Zeilen am Anfang an (dabei ersetzen sie natürlich ’hackmich’ mit dem
vorgesehenen Passwort). Dies verhindert, dass Benutzer die Booteinträge verändern können.
’timeout 3’ legt eine Wartedauer von 3 Sekunden fest, bevor grub den Standard Eintrag bootet.
timeout 3
password hackmich
Um die Integrität ihres Passwortes zusätzlich abzusichern, sollten sie ihr Passwort verschlüsselt ablegen. Das Utility grub-md5-crypt generierd ein gehashtes Passwort, das kompatibel
mit grub’s Verschlüsselungsalgorithmus (md5) ist. Um grub mitzuteilen, dass verschlüsselte
Passwörter benutzt werden, benutzen sie die folgende Anweisung:
timeout 3
password --md5 $1$arPydhOM$bIgEKjMW5kxeEuvE1Rah4/
Der –md5 Parameter wurde hinzugefügt, um bei grub einen md5 Authentifizierungsprozess
zu erzwingen. Das angegeben Passwort ist die md5 verschlüsselte Version von hackmich. Es
ist vorzuziehen md5- statt Klartextpasswörter zu verwenden. Weitere Informationen über grub
Passwörter können sie im grub-doc Packet finden.
Kapitel 4. Nach der Installation
4.3
35
Entfernen des root Promptes aus dem Kernel
Linux 2.4 Kernel bieten kurz nach dem Laden des cramfs einen Weg Zugriff auf eine Root Shell
zu bekommen, also während das System bootet. Es erscheint eine Meldung, die dem Administrator erlaubt, eine auszuführende Shell mit Root Privilegien zu betreten, diese Shell kann dazu
benutzt werden, manuell Module zu laden, falls die automatische Erkennung fehlschlägt. Dies
ist das standard Verhalten bei initrd’s Linuxrc. Die folgende Meldung wird erscheinen:
Press ENTER to obtain a shell (waits 5 seconds)
Um dieses Verhalten zu entfernen, müssen sie /etc/mkinitrd/mkinitrd.conf editieren
und den Eintrag
# DELAY Anzahl Sekunden, die das linuxrc Skript warten soll,
# um den Nutzer eingriffe zu erlauben, befor das System hochgefahren
# wird
DELAY=0
setzen.
Generieren sie ihr ramdisk image anschliessend neu. Dies können sie zum Beispiel so tun:
# cd /boot
# mkinitrd -o initrd.img-2.4.18-k7 /lib/modules/2.4.18-k7
oder machen sie (vorzugsweise):
# dpkg-reconfigure kernel-image-2.4.x-yz
Beachten sie, dass Debian 3.0 woody den Benutzern erlaubt 2.4er Kernel zu installieren (indem
sie flavors wählen), aber der standard Kernel ist 2.2 (von einigen Architekturen abgesehen, auf
die der Kenel 2.2 nicht portiert wurde). Wenn sie dies als Bug ansehen, beachten sie Bug 145244
(http://bugs.debian.org/145244) bevor sie ihn einsenden.
4.4
Booten von Diskette verbieten
Der standard MBR von Debian vor Version 2.2 verhielt sich nicht wie ein normaler Master Boot
Record und lies eine Methode offen, einfach in ein System einzubrechen:
• Drücken sie während des Bootens shift, und der MBR prompt erscheint
• Drücken sie dann F, und ihr System wird von Diskette booten. Dies kann man ausnutzen,
um root Privilegien auf dem System zu erlangen.
Kapitel 4. Nach der Installation
36
Dieses Verhalten können sie ändern, indem sie
lilo -b /dev/hda
eingeben.
Nun ist LILO in den MBR geschoben worden. Dies können sie auch erreichen, indem sie
“boot=/dev/hda” zu lilo.conf hinzufügen. Es gibt noch eine Möglichkeit, die den MBR komplett abschalten wird:
install-mbr -i n /dev/hda
Auf der anderen Seite, könnte diese “Hintertür”, die viele Leute nicht kennen, ihnen einmal
die Haut retten, wenn sie in grosse Schwierigkeiten mit ihren Installations aus irgendwelchen
Gründen geraten.
FIXME überprüfen, ob das für 2.2 wirklich stimmt, oder war es 2.1? INFO: Die Boot Disketten
von Debian 2.2 installieren KEINEN mbr, sondern nur LILO
4.5
einschränkender Konsolen zugang
Manche Sicherheits Policies könntem Administratoren dazu zwingen, sich erst als als User
mit ihrem Passwort auf dem System einzulogen, und dann Superuser zu werden (mit su
oder sudo). Solche eine Policy ist in Debian in der Datei /etc/login.defs oder /etc
/securetty (falls sie PAM verwenden) implementiert. In:
• login.defs, ändern sie die CONSOLE Variable, die eine Datei oder eine Liste von Terminals definiert, an denen sich root einloggen darf
• securetty entfernen sie oder fügen sie Terminals hinzu, bei denen Root Zugriff erhalten darf
Wenn sie PAM benutzen können sie auch andere Änderungen am Login Prozess, die auch
Einschränkungen für einzelne Benutzer oder Gruppen zu bestimmten Zeiten enthalten können, durch konfigurieren der Datei /etc/pam.d/login vornehmen. Eine interessante Eigenschaft, die man auch abschalten kann, ist die Möglichkeit, sich mit einem leeren Passwort (null
Passwort) einzulogen. Diese Eigenschaft kann eingeschränkt werden, indem sie nullok aus der
Zeile
auth
entfernen.
required
pam_unix.so nullok
Kapitel 4. Nach der Installation
4.6
37
Systemneustart auf der Konsole einschränken
Wenn an ihr System eine Tastatur angeschlossen ist, kann jeder (ja wirklich jeder) ihr System
neu starten, ohne sich in ihr System einlogen zu müssen. Dies könnte oder könnte nicht gegen
ihre Sicherheits Richtlinie verstoßen. Wenn sie dies einschränken wollen, müssen sie in /etc
/inittab prüfen, ob die Zeile, die enthält, dass ctrlaltdel shutdown aufruft, den -a
Schalter enthält (vergessen sie nicht, init q auszuführen, nachdem sie diese Datei irgendwie
verändert haben). Der standardmässig enthält Debian diesen Schalter:
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
Jetzt müssen sie, um es manchen Benutzern zu erlauben, ihr System neu zu starten, eine Datei
/etc/shutdown.allow erstellen, wie es in der Manual Seite shutdown(8) beschreibt. Dort
müssen die Namen der Benutzer, die das System neu booten dürfen, aufgeführt sein. Wenn der
drei Finger Salut (auch bekannt als Strg+Alt+Entf ) ausgeführt wird, wird geprüft, ob irgendeiner der Benutzer, die in der Datei aufgelistet sind, eingeloggt sind. Wenn es keiner von ihnen
ist, wird shutdown das System nicht neu starten.
4.7
Partitionen auf die richtige Art einbinden
Wenn sie eine ext2 Partition einbinden, können sie verschiedene Optionen mit dem mountBefehl oder in /etc/fstab verwenden. Dies zum Beispiel, ist mein fstab Eintrag für meine
/tmp Partition:
/dev/hda7
/tmp
ext2
defaults,nosuid,noexec,nodev
0
2
Sie sehen den Unterschied in der Spalte mit den Optionen. Die Option nosuid ignoriert alle
setuid und setgid Bits komplett, während noexec das ausführen irgendwelcher Programme
unterhalb des mount Points verbietet und nodev Geräte ignoriert. Das hört sich toll an, aber
es
• ist nur auf ext2 Dateisysteme anwendbar
• kann leicht umgangen werden
Die noexec option, die verhindert, dass Binaries ausgeführt werden können, lässte sich leicht
umgehen:
alex@joker:/tmp# mount | grep tmp
/dev/hda7 on /tmp type ext2 (rw,noexec,nosuid,nodev)
alex@joker:/tmp# ./date
bash: ./date: Permission denied
alex@joker:/tmp# /lib/ld-linux.so.2 ./date
Sun Dec 3 17:49:23 CET 2000
Kapitel 4. Nach der Installation
38
Wie auch immer, viele Skriptkiddies haben Exploits, die versuchen eine ausführbare Datei in
/tmp zu erstellen. Wenn sie keine Ahnung haben, werden sie in dieser Grube hängenbleiben.
Mit anderen Worten: Ein Benutzer kann nicht dazu getrickts werden, einen ausführbaren Trojaner in /tmp auszuführen, zum Beispiel indem er zufällig /tmp in seine Suchpfad aufnimmt.
Seien sie auch gewarnt, dass manche Skripts darauf aufbauen, dass /tmp ausführbare Rechte
hat. Bemerkenswerter weise hatte (oder hat?) Debconf Probleme bei dieser Sache, weitere Informationen enthält Bug 116448 (http://bugs.debian.org/116448).
Nachfolgend ist ein gründlichereres Beispiel. Dazu: /var könnte auch noexec enthalten, aber
manche Software, wie zum Beispiel Smartlist, behält seine Programme unterhalb von /var.
Das selbe gillt für die nosuid Option.
/dev/sda6
/dev/sda12
/dev/sda7
/dev/sda8
/dev/sda9
/dev/sda10
/dev/sda11
/dev/sda13
/dev/fd0
/dev/fd0
/dev/hda
4.7.1
/usr
/usr/share
/var
/tmp
/var/tmp
/var/log
/var/account
/home
/mnt/fd0
/mnt/floppy
/mnt/cdrom
ext2
ext2
ext2
ext2
ext2
ext2
ext2
ext2
ext2
vfat
iso9660
defaults,ro,nodev
0
2
defaults,ro,nodev,nosuid
0
defaults,nodev,usrquota,grpquota
defaults,nodev,nosuid,noexec,usrquota,
defaults,nodev,nosuid,noexec,usrquota,
defaults,nodev,nosuid,noexec
0
defaults,nodev,nosuid,noexec
0
rw,nosuid,nodev,exec,auto,nouser,async
defaults,users,nodev,nosuid,noexec
defaults,users,nodev.nosuid,noexec
ro,users,nodev.nosuid,noexec
/tmp noexec setzen
Seien sie vorsichtig, wenn sie /tmp noexec setzen und neue software installieren wollen, da
manche Software es während der Installation benutzt. Apt ist ein solches Programm (siehe
http://bugs.debian.org/116448), wenn nicht APT::ExtractTemplates::TempDir
(siehe apt-extracttemplates(1)) passend konfiguriert wurde. Sie können diese Variable
in /etc/apt/apt.conf auf ein anderes Verzeichnis als /tmp mit exec Privilegien setzen.
Was noexec betrifft, seien sie sich bitte bewusst, dass es ihnen nicht sehr viel Sicherheit bietet.
Regarding noexec, please be aware that it might not offer you that much security. Berücksichtigen sie dies:
$ cp /bin/date /tmp
$ /tmp/date
(wird aufgrund des noexec nicht ausgeführt)
$/lib/ld-linux.so.2 /tmp/date
(funktioniert, da date nicht direkt ausgeführt wird)
4.7.2
Setzen von /usr auf nur-lesen
Wenn sie auf /usr nur lesenden Zugriff erlauben, werden sie nicht in der Lage sein, neue
Pakete auf ihrem Debian GNU/Linux System installieren können. Sie werden es erst wieder
Kapitel 4. Nach der Installation
39
mit Schreibzugriff neumounten müssen, die Pakete installieren, und dann wieder read-only
mounten. Die neuste Version von apt (in Debian 3.0 ’woody’) kann konfiguriert werden Befehle
vor und nach dem installiern von Paketen auszuführen, also möchten sie es vielleicht passend
konfigurieren.
To do this modify /etc/apt/apt.conf and add:
DPkg
{
Pre-Invoke { "mount /usr -o remount,rw" };
Post-Invoke { "mount /usr -o remount,ro" };
};
Beachten sie sie, dass das Post-Invoke mit einer “/usr busy” Fehlermeldung scheitern wird.
Dies passiert vorwiegend, wenn sie eine Datei während des Updates benutzen. Ärgerlich,
aber kein grosses Problem. Gehen sie einfach sicher, dass sie nicht länger benutzt werden,
und führen sie das Post-Invoke manuell aus.
4.8
Ausführen von Sicherheitsupdates
Sobald neue Sicherheitslöcher in einem Paket entdeckt wurden reparieren sie Debian PaketBetreuer und ursprüngliche Autoren im allgemein innerhalb von Tagen oder sogar Stunden.
Nachdem das Loch gestopft wurde, werden neue Pakete unter http://security.debian.
org bereit gestellt.
Wenn sie eine Debian Release installieren müssen sie berücksichtigen, dass es, seitdem der
Releas gemacht wurde, Sicherheitsupdates geben könnte, nachdem entdeckt wurde, dass ein
bestimmtes Paket verwundbar ist. Ebenso könnte es kleinere Releases gegeben haben (es gab
acht kleinere Releases von Debian 2.2 potato), die diese Paktet-Updates enthalten.
Sie müssen sich das Erstellungsdatum ihres CD Sets (wenn sie ein solches benutzen) notieren,
und auf der Sicherheitsseite prüfen, ob es Sicherheits-Updates gegeben hat. Wenn es solche
gibt, und sie sie die Pakete nicht von der Sicherheits-Seite herunterladen können (Ihr System
ist noch nicht mit dem Internet verbunden, oder?), könnten sie es in erwähgung ziehen (falls
sie nicht, beispielsweise durch eine Firewall, geschützt sind), Firewall-Regeln zu aktivieren,
so dass ihr System ausschliesslich mit securety-debian.org Verbindung aufnehmen kann und
dann ein update Ausführen. Eine Beispiel-Konfiguration finden sie unter ‘Sicherheits-Update
geschützt durch eine Firewall’ auf Seite 159.
Um ihr System upzudaten, fügen sie die folgende Zeile in ihre /etc/apt/sources.list,
und sie werden Sicherheits-Updates automatisch erhalten, wann immer sie ihr System updaten.
deb http://security.debian.org/debian-security stable/updates main contrib non
Kapitel 4. Nach der Installation
40
Die meisten Leute, die nicht in einem Land leben, das den import oder die Nutzung starker
Kryptographie verbietet, sollte auch diese Zeile hinzufügen:
deb http://security.debian.org/debian-non-US stable/non-US main contrib non-fr
Wenn sie möchten, können sie ebenfalls eine deb-src Zeile hinzufügen. Weitere Details finden
sie unter apt(8).
Sie sollten regelmässig Sicherheits-Updates durchführen, die meisten Sicherheitsprobleme resultieren aus bekannten Sicherheitslücken heraus, die nicht rechtzeitig gestopft wurden, wie
auch http://www.cs.umd.edu/~waa/vulnerability.html name=“paper by Bill Arbaugh”> (vorgetrafen auf dem 2001 IEEE Symposium on Security and Privacy) erklärt.
FIXME: Add info on how the signature of packages is done so that this can be done automatically through a cron job (big warning: DNS spoofing).
4.9
4.9.1
Den Benutzern einen Sicheren Zugang bereitstellen
User Authentifizierung: PAM
PAM (Pluggable Authentication Modules) erlauben dem System Administrator auszuwählen,
wie eine Anwendung, Benutzer authentifiziert. Beachten sie, dass PAM nichts machen kann,
solange die Anwendung nicht mit Unterstützung für PAM kompiliert wurde. Die meisten Anwendungen, die mit Debian 2.2 geliefert werden, habend diese Unterstützung eingebaut. Weiterhin hatte Debian keine Unterstützung für PAM vor Version 2.2. Die derzeitige StandardKonfiguration für jedweden PAM benutzenden Service, ist es, UNIX Authentifizierung
zu emulieren (lessen sie /usr/share/doc/libpam0g/Debian-PAM-MiniPolicy.gz um
mehr darüber zu erfahren, wie PAM Services unter Debian arbeiten sollten).
Jede Anwendung mit PAM Unterstützung bietet eine Konfiguratiosn Datei unter /etc/pam.d
/ in welche sie ihr Verhalten einstellen können:
• welches Verfahren zur Authentifizierung benutzt wird.
• welches Verfahren innerhalb einer Sitzung benutzt wird.
• wie Passwörter überprüft werden.
Die folgende Beschreibung ist weit davon entfernt komplett zu sein, für weitere Informationen möchten sie vielleicht The Linux-PAM System Administrator’s Guide (http://
www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/pam.html) (auf der PAM
Hauptseite (http://www.kernel.org/pub/linux/libs/pam/)), diese Dokumentation
ist auch in dem Paket libpam-doc enthalten.
PAM bieten ihnen die Möglichkeit durch mehrere Authentifizierungs Schritte auf einmal zu
gehen, ohne das der Benutzer es weiß. Sie können gegen eine Berkeley Datenbank und gegen
Kapitel 4. Nach der Installation
41
die normale passwd Datei authentifizieren, und der Benutzer kann sich nur einloggen, wenn er
beide Male korrekt authentifiziert wurde. Sie können viel einschränken mit PAM, genauso wie
sie ihr System weit öffnen können. Seien sie also vorsichtig. Eine typische Konfigurationszeile
hat ein Kontrollfeld als sein zweites Element. Generell sollte es auch “requisite” gesetzt werden, so wird ein login Feger erzeugt, wenn eines der Module versagt.
Die erste Sache, die ich gerne mache, ist es, MD5 Unterstützung zu den PAM Anwendungen
hinzuzufügen, da dies gegen lexikalische Attacken hilft (da Passwörter länger sein können,
wenn sie MD5 benutzen). Die folgenden zwei Zeilen sollten sie in allen Dateien unterhalb von
/etc/pam.d/ zufügen die Zugriff auf ihre Maschine gewähren, wie zum Beispiel login und
ssh.
# Gehen sie sicher, dass sie libpam-cracklib zuerst installiert haben,
# sonst werden sie sich nicht einloggen koennen
password
required
pam_cracklib.so retry=3 minlen=12 difok=3
password
required
pam_unix.so use_authtok nullok md5
Also, was macht diese Beschwörungsformel nun genau? Die erste Zeile lädt das cracklib PAM
Modul, welches einen Passwort-Sicherheits-check bereitstellt; es fragt nach einem neuen Passwort mit einem Minimum von 12 Zeichen, einer Differenz von mindestens 3 Zeichen zum alten
Passwort, und erlaubt 3 Versuche. Die zweite Zeile führt das standard authentifizierungs Modul mit MD5 Passwörtern ein und erlaubt Passwörter mit einer Länge von Null. Die use_authtok
Direktive ist notwendig, um das Passwort von dem vorherigen Modul übergeben zu bekommen.
Um sicher zu stellen, dass sich der Benutzer root nur von lokalen Terminals einloggen kann,
sollten sie die folgende Zeile in /etc/pam.d/login eingefügt werden:
auth
requisite
pam_securetty.so
Nun sollten sie alle Terminals, von denen sich der Benutzer Root einloggen können sollte,
in /etc/security/acces.conf eintragen. Nicht zuletzt sollten sie die folgende Zeile aktivieren, wenn sie ihrem Benutzern Limits setzen wollen:
session
required
pam_limits.so
Dies schränkt die System die ein User nutzen darf ein (siehe unter in ‘Resourcen-Nutzung
limitieren: Die limits.conf Datei’ auf Seite 43). Sie können zum beispiel die Anzahl der Logins,
die man haben kann, einschänken (für eine Gruppe von Nutzern oder Systemweit), die Anzahl
der Prozesse, den belegten Speicher. . .
Editieren sie nun /etc/pam.d/passwd und ändern sie die erste Zeile. Si sollten die Option
“md5” zufügen, um MD5-Passwörter zu benitzen, ändern sie die minimale Passwort-Länge
von 4 auf 6 (oder mehr) und setzen sie eine Maximallänge, wenn sie möchten. Die resultierende
Zeile wird in etwa so aussehen:
Kapitel 4. Nach der Installation
password
required
42
pam_unix.so nullok obscure min=6 max=11 md5
Wenn sie su schützen möchten, so dass nur manche Leute es benutzen können, um root auf
ihrem System zu werden, müssen sie eine neue Gruppe “wheel” zu ihrem System hinzufügen
(das ist der sauberste Weg, da keine Datei solche Gruppenrechte bisher benutzt). Fügen sie
root und die anderen Benutzer, die zu root suen können sollen, zu dieser Gruppe. Fügen sie
anschliessend die folgene Zeile zu /etc/pam.d/su/ hinzu:
auth
requisite
pam_wheel.so group=wheel debug
Dies stellt sicher, dass nur Personen aus der Gruppe wheel su benutzen können, um root zu
werden. Andere Benutzer wird es nicht möglich sein, root zu werden. Tatsächlich werden sie
eine ablehnende Nachricht bekommen, wenn sie versuchen root zu werden.
Wenn sie es nur bestimmten Nutzern erlauben wollen, sich bei einem PAM Service zu authentifizieren, ist dies sehr leicht zu erreichen, indem sie Dateien benutzen, in denen die Nutzer, denen es erlaubt ist sich einzulogen (oder nicht), gespeichert sind. Stellen sie sich vor, sie möchten
lediglich dem Nutzer ’ref’ erlauben, sich via ssh einzuloggen. Sie schreiben in also in eine Datei
/etc/ssh-users-allowed und schreiben das folgende in /ect/pam.d/ssh:
auth
required
pam_listfile.so item=user sense=allow file=/etc/sshuse
Zuletzt, aber nicht am unwichtigsten, erstellen sie /etc/pam.d/other mit den folgenden
Zeilen:
auth
auth
auth
auth
account
account
account
password
password
password
session
session
session
required
required
required
required
required
required
required
required
required
required
required
required
required
pam_securetty.so
pam_unix_auth.so
pam_warn.so
pam_deny.so
pam_unix_acct.so
pam_warn.so
pam_deny.so
pam_unix_passwd.so
pam_warn.so
pam_deny.so
pam_unix_session.so
pam_warn.so
pam_deny.so
Diese Zeilen stellen für alle Anwendungen, die PAM unterstützen, eine gute StandardKonfiguration dar (Zugriff wird standardmässig verweigert).
Kapitel 4. Nach der Installation
4.9.2
43
Resourcen-Nutzung limitieren: Die limits.conf Datei
Sie sollten sich wirklich ernsthaft mit dieser Datei beschäfftigen. Hier können sie ihren
Benutzern Resourcen-Limits definieren. Wenn sie PAM benutzen, wird die Date /etc
/limits.conf ignoriert und sie sollten /etc/security/limits.conf stattdessen benutzen.
Wenn sie die Resourcen Nutzung nicht einschränken, kann jeder Nutzer mit einem einer gültigen Shell auf ihrem System (or sogar ein Einbrecher, der das System durch einen Service
kompomotierte) so viel CPU, Speicher, Stack etc. benutzen, wie das System zur verfügung
stellen kann. Dieses Problem der Resourcen Überbeanspruchung kann nur mit der Nutzung von
PAM gelöst werden. Beachten sie, dass es einen Weg gibt, Resourcen Limits zu manchen Shells
hinzuzufügen (zum Beispiel hat bash ulimit, siehe bash(1)), aber da nicht alle die gleichen
Limits zur verfügung stellen und da der Nutzer seine Shell ändern kann (siehe chsh(1)), ist
es besser, die Limits in den PAM Modulen zu plazieren.
Für mehr Informationen hierzu lesen sie:
• PAM
configuration
article
sam0009a/0009a.htm).
(http://www.samag.com/documents/s=1161/
• Seifried’s Securing Linux Step by Step (http://seifried.org/security/os/
linux/20020324-securing-linux-step-by-step.html) in dem Limiting users
overview Abschnitt.
• LASG (http://seifried.org/lasg/users/) in dem Limiting and monitoring users
Abschnitt.
FIXME: Get a good limits.conf up here
4.9.3
User Login Actionen: Editieren von /etc/login.defs
Der nächste Schritt ist es, die grundlegende Konfiguration und die Actionen bei User Login zu
editieren.
FAIL_DELAY
10
Diese Variable sollte auf einen höheren Wert gesetzt werden, um es schwerer zu machen, mittels Brute Force (roher Gewalt, sturres Durchprobieren, Anm. d. Übers.) auf einem Terminal
einzuloggen. Wenn ein falsches Passwort eingegeben wird, muss der potentielle Angreifer
(aber auch der normale Benutzer!) 10 Sekunden warten, um einen neuen login Prompt zu
bekommen, was auf die Dauer viel Zeit kostet, wenn sie Passwörter durchtesten. Beachten sie
jedoch die Tatsache, dass diese Einstellung nutzlost ist, wenn sie ein anderes Programm als
getty benutzen, wie zum Beispiel mingetty.
FAILLOG_ENAB
yes
Kapitel 4. Nach der Installation
44
Wenn sie diese Variable einschalten werden fehlgeschlagene Logins protokoliert. Es ist wichtig
hier auf dem laufendem zu bleiben, um jemanden zu fassen, der eine Brute Force Attacke
versucht.
LOG_UNKFAIL_ENAB
yes
Wenn sie die Varible “FAILLOG_ENAB” auf yes gesetzt haben, dann sollten sie auch diese
Variable auf yes setzen. Dies wird auch unbekannte Nutzernamen protokolieren. Wenn sie dies
tun, gehen sie auch sicher, dass die Protokolle sinnvolle Zugriffsrechte haben (Zum Beispiel
640, mit einer angemessenen Gruppenzugehörigkeit, wie adm), weil Nutzer oft versehentlich
ihr Passwort als Usernamen eingeben und dies anderen nicht zugänglich machen wollen.
SYSLOG_SU_ENAB
yes
Dies schaltet das Mitprotokollieren von su Versuchen im Syslog ein. Sehr wichtig auf ernsthaften Maschinen, aber beachten sie, dass dies auch die Privatsphähre verletzen kann.
SYSLOG_SG_ENAB
yes
Dasgleiche wie bei SYSLOG_SU_ENAB, jedoch für das Programm sg.
MD5_CRYPT_ENAB
yes
Wie bereits erklärt, reduzieren MD5-Summen-Passwörter grossartig das Problem lexikalischer Attacken, da sie längere Passwörter benutzen können. Wenn sie slink benutzen, lesen sie
die Dokumentation zu MD5 bevor sie diese Option einschalten. Ansonsten wird dies in PAM
gesetzt.
PASS_MAX_LEN
50
Wenn sie MD5-Passwörter in ihrer PAM Konfiguration aktiviert haben, dann sollten sie diese
Variable auf denselben Wert setzen, den sie dort benutzt haben.
4.9.4
ftp Einschränken: Editieren von /etc/ftpusers
Die Datei /etc/ftpusers enthält eine Liste von allen Nutzern, denen es nicht erlaubt ist, sich
auf dem host mit ftp einzuloggen. Benutzen sie diese Datei nur, wenn sie wirklicht ftp erlauben
wollen (wozu im allgemmeinen nicht geraten wird, da es Klartext Passwörter benutzt). Wenn
ihr ftp Daemon PAM unterstützt, können sie dies ebenfalls benutzen, um Nutzern bestimmte
Services zu erlauben oder zu verbieten.
FIXME (BUG): Is it a bug that the default ftpusers in Debian does not include all the administrative users (in base-passwd).
Kapitel 4. Nach der Installation
4.9.5
45
su benutzen
Wenn es wirklich benötigt wird, dass Nutzer Super User auf ihrem System werden, zum
Beispiel um Pakete zu installieren oder neue Benutzer anzulegen, können sie das Programm
su benutzen, um ihre Identität zu wechseln. Sie sollten jeden Login als Nutzer Root vermeiden
und stattdessen ddas Programm su benutzen. Eigentlich ist es die betste Lösung su zu entfernen, und zu sudo zu wechseln, da es mehr Möglichkeiten bietet als su. Wie auch immer, su
ist allgemeiner und wird auf vielen Unices benutzt.
4.9.6
sudo benutzen
Das sudo erlaubt es dem Benutzer, ein definiertes Kommando unter einer anderen NutzerIdentität auszuführen, sogar als Root. Wenn der Nutzer zu /etc/sudoers hinzugefüft ist
und sich korrekt authentifiziert ist er in der Lage, Kommandos, die in /etc/sudoers definiert
wurde. Sicherheitsverletzungen, wie ein inkorrektes Passwort oder der Versuch ein Programm
auszuführen, für das ihre Rechte nicht ausreichen, werden protokolliert und an root gemailt.
4.9.7
verweigern von administrativen Fernzugriff
Sie sollten /etc/security/access.conf ebenfalls so modifizieren, dass ein administrativer Login aus der Ferne nicht erlaubt ist. Auf diese Weise müssen die Nutzer das Programm
su (oder sudo) benutzen, so dass es immer eine prüfbare Spur gibt, wann immer ein Nutzer
administrative Möglichkeiten nutzen möchte.
Sie müssen die folgende Zeile zu ihrer /etc/security/access.conf hinzufügen, die Debians Standard-Konfigurations Datei hat ein Beispiel auskommentiert:
-:wheel:ALL EXCEPT LOCAL
4.9.8
Nutzer einschränken
Manchmal werden sie vielleicht denken, dass sie einen Nutzer auf ihrem System erstellen
müssen, um einen bestimmten Service (pop3 Email Server oder ftp) anzubieten. Bevor sie dies
tun, erinnern sie sich zuerst darad, dass die PAM Implementierung in Debian GNU/Linux ihnen erlaubt, Nutzer mit einer breiten Auswahl von externen Verzeichnisdiensten (radius, ldap,
etc.) zu bestätigen. Dies wird vom libpam Paket bewerkstelligt.
Wenn sie einen Nutzer anlegen müssen, und auf ihr System aus der Ferne zugegeriffen werden
kann, beachten sie, dass es Nutzern möglich sein wird, sich einzuloggen. Sie können dies behebeben, indem sie diesen Nutzer eine Null (/dev/null) als Shell (sie müsste in /etc/shells
gelistet sein) zuweisen. Wenn sie den Nutzern erlauben wollen, auf das System zuzugreifen,
aber ihre Bewegungen einschränken wollen, können sie /bin/rbash benutzen, als ob sie die
-r Option der Bash (RESTRICTED SHELL, siehe bash(1)) verwendet hätten. Beachten sie
Kapitel 4. Nach der Installation
46
bitte, dass sogar mit einer restricted Shell ein Nutzer, ein Nutzer, der auf ein interaktives Programm zugreifen kann (dass es ihm erlauben würde, eine subshell auszuführen), diese Limitierung der Shell umgehen kann.
Debian bietet zur Zeit in seiner unstable Release (und wird es vielleicht der nächste stable
Release hinzufügen) das pam_chroot Modul. Eine Alternative hierzu ist es, den Service, der
einen Fern-Login anbietet (ssh, telnet), in einer chroot-Umgebung laufen zu lassen.
Wenn sie einschränken wollen, wann ein Nutzer auf das System zugreifen kann, müssen sie
/etc/security/access.conf an ihre Bedürfnisse anpassen.
ssh für Nutzer einschränken
Debian’s sshd wird ihnen nicht erlauben, die Bewegungen eines Nutzer durch den Server
einzuschränken, da er die Chroot Funktionalität, die das kommerzielle Programm (sshd2) hat
(benutzen sie ’ChrootGroups’ oder ’ChrootUsers’, siehe dazu sshd2_config(5)). Wie auch
immer, es gibt einen Patch, der ihnen erlaubt dies zu tun, den Patch erhalten sie von Bug
Report 139047 (http://bugs.debian.org/139047) oder von http://www.cag.lcs.
mit.edu/~raoul/ (und er wird wohl in der Zukunft auf das OpenSSH Paket angewendet
werden). Emanuel Lacour hat ssh Paktete mit diesen Fähigkeiten unter http://debian.
home-dn.net/woody/ssh/, allerdings wird empfohlen durch die Compilierungs-Schritte
zu gehen. Eine Beschreibung von den notwendigen Schritten finden sie unter http://mail.
incredimail.com/howto/openssh/ (so ziemlich alles trifft dort auch auf Debian zu, auch
wenn von RedHat 7.2 die rede ist). Nachdem sie den Patch angewendet haben, müssen sie
die /etc/passwd anpassen, indem sie das Heimat-Verzeichnis des Nutzers ändern (in den
speziellen /./ Token).
joeuser:x:1099:1099:Joe Random User:/home/joe/./:/bin/bash
Dies wird beides einschränken, sowohl remote Zugriff auf die Shell als auch remote Copy über
einen ssh Kanal.
Gehen sie sicher, dass sie alle benötigten Binaries in den Chroot-Pfaden für den Nutzer haben.
Diese Dateien sollte Root besiutzen, um Einmischungen durch den Nutzer zu verhinern (zum
Beispiel die chrooted Sandbox zu verlassen). Ein Beispiel könnte so aussehen:
./bin:
total 660
drwxr-xr-x
drwxr-xr-x
-r-xr-xr-x
-r-xr-xr-x
-r-xr-xr-x
-rwxr-xr-x
-r-xr-xr-x
-r-xr-xr-x
2
8
1
1
1
1
1
1
root
guest
root
root
root
root
root
root
root
guest
root
root
root
root
root
root
4096
4096
531160
43916
16684
23960
9916
24780
Mar
Mar
Feb
Nov
Nov
Mar
Jul
Nov
18
15
6
29
29
18
26
29
13:36
16:53
22:36
13:19
13:19
13:36
2001
13:19
.
..
bash
ls
mkdir
more
pwd
rm
Kapitel 4. Nach der Installation
47
lrwxrwxrwx
1 root
root
./etc:
total 24
drwxr-xr-x
drwxr-xr-x
-rw-r--r--rw-r--r--rw-r--r--rw-r--r--
2
8
1
1
1
1
root
guest
root
root
root
root
4096
4096
54
428
44
52
Mar
Mar
Mar
Mar
Mar
Mar
15
15
15
15
15
15
16:13
16:53
13:23
15:56
15:53
13:23
.
..
group
hosts
passwd
shells
root
guest
root
root
root
root
root
root
root
4096
4096
92511
1170812
20900
9436
248132
71332
34144
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
18
15
15
15
15
15
15
15
15
13:37
16:53
12:49
12:49
13:01
12:49
12:48
13:00
16:10
.
..
ld-linux.so.2
libc.so.6
libcrypt.so.1
libdl.so.2
libncurses.so.5
libnsl.so.1
root
root
root
root
root
29420
105498
25596
7760
24328
Mar
Mar
Mar
Mar
Mar
15
15
15
15
15
12:57
12:51
12:51
12:59
12:57
libpam.so.0
libpthread.so.0
librt.so.1
libutil.so.1
libwrap.so.0
4096
4096
4096
4096
Mar
Mar
Mar
Mar
15
15
15
15
13:00
16:53
15:55
15:37
.
..
bin
lib
4096
4096
10332
13052
25432
43768
218456
9692
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
15
15
15
15
15
15
15
15
15:55
13:00
15:55
13:13
12:40
15:15
12:40
13:17
.
..
env
id
scp
sftp
ssh
tty
root
guest
root
root
root
root
./lib:
total 1848
drwxr-xr-x
2 root
drwxr-xr-x
8 guest
-rwxr-xr-x
1 root
-rwxr-xr-x
1 root
-rw-r--r-1 root
-rw-r--r-1 root
-rw-r--r-1 root
-rw-r--r-1 root
-rw-r--r-1 root
libnss_files.so.2
-rw-r--r-1 root
-rw-r--r-1 root
-rw-r--r-1 root
-rw-r--r-1 root
-rw-r--r-1 root
./usr:
total 16
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
4
8
2
2
root
guest
root
root
root
guest
root
root
./usr/bin:
total 340
drwxr-xr-x
drwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-r-xr-xr-x
-rwxr-xr-x
-r-sr-xr-x
-rwxr-xr-x
2
4
1
1
1
1
1
1
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
4 Mar 30 16:29 sh -> bash
Kapitel 4. Nach der Installation
./usr/lib:
total 852
drwxr-xr-x
2 root
drwxr-xr-x
4 root
-rw-r--r-1 root
libcrypto.so.0.9.6
-rw-r--r-1 root
-rwxr-xr-x
1 root
4.9.9
48
root
root
root
4096 Mar 15 15:37 .
4096 Mar 15 13:00 ..
771088 Mar 15 13:01
root
root
54548 Mar 15 13:00 libz.so.1
23096 Mar 15 15:37 sftp-server
prüfen der Nutzer von Hand
Wenn sie paranoid sind, dann möchten sie den Nutzern vielleicht eine definierte .profile
aufzwingen, das die Environments so setzt, dass sie die Überwachungsmöglichkeiten der Shell
nicht entfernen können (Kommandos werden auf $HISTFILE ausgegeben). Die .profile
könnte so gesetzt werden:
HISTFILE=/home/_user_/.bash_history
HISTSIZE=100000000000000000
HISTFILESIZE=10000000000000000
set -o HISTFILE
set -o HISTSIZE
set -o HISTFILESIZE
export HISTFILE HISTSIZE HISTFILESIZE
Beachten sie: Das -o-Attribut erlaubt nur lesenden Zugriff auf die Variable.
Damit dies funktioniert darf der Nutzer .profile oder .bash_history nicht modifizieren,
aber er muss ersteres lesen und letzteres schreiben können. Sie können dies leicht tun, indem
sie die Dateien und das Verzeichnis, indem sich diese Dateien befinden, so dass sie einem anderen Benutzer gehören (root), und For this to work the user cannot modify the .profile,
und der Gruppe des Nutzers auf die History-Datei Schreibzugriff gewähren. Eine andere
Möglichkeit ist es, dass Programm chattr zu benutzen.
Wenn sie wirklich paranoid sind und jedes Kommando des Nutzers protokollieren wollen,
könnten sie den Quellcode der Bash nehmen, ihn ändern und sie alles, das der Nutzer
eingibt in einer anderen Datei ausgibt. Oder sie lassen ttysnoop konstant jedes neue tty
überwachen und die Ausgaben in einer Datei ausgeben. Ein anderes nützliches Programm
ist Snoopy (http://sourceforge.net/project/?group_id=2091). Dies ist ein für den
Nutzer transparentes Programm, dass sich als eine Bibliothek zwischen hängt, und eine Hülle
um execve() Aufrufe bildet, jedes ausgeführte Kommando wird im syslogd aufgezeichnet,
indem die authpriv-Möglichkeit benutzt wird (üblicherweise wird dies unter /var/log
/auth.log gespeichert).
Beachten sie, dass sie hierfür nicht das script Kommando benutzen können, da sies nicht als
Shell funktionert (auch nicht, wenn sie es zu /etc/shells hinzufügen).
Kapitel 4. Nach der Installation
4.9.10
49
Komplettieren von Nutzer Überwachung
Die vorherigen Beispiele sind ein einfacher Weg, um Nutzer Überwachung zu konfigurieren,
eignet sich aber nicht unbedingt für komplexe Systeme. Sollte dies der Fall sein, schauen
sie sich das Paket acct, die accounting Utilities, an. Diese werden alle Kommandos, die ein
Nutzer oder ein Prozess auf dem System ausführt, auf die Kosten von Plattenplatz aufzeichnen.
Wenn sie diese ’Buchführung’ aktivieren, werden alle Informationen über Prozesse und Nutzer
unter /var/account/ gehalten. Das Accounting-Paket schließt Werkzeuge (sa und ac) zur
Analyse dieser Daten ein.
4.9.11
Nutzer Profil nachprüfen
Wenn sie sehen wollen, was Nutzer normalerweise tun, wenn sie sich verbinden, können sie
die wtmp Datenbank benutzen, die alle Login-Informationen enthält. Diese Datei kann mit
verschiedenen Werkzeugen weiterverarbeitet werden, unter ihnen sac, das ein Profil für jeden
Nutzer ausgeben kann, dass zeigt, in welchem Zeitfenster sie sich für gewöhnlich auf dem
System einloggen.
Für den Fall, dass sie accounting aktiviert haben, können sie auch die mitgelieferten
Werkzeuge verwenden, um festzustellen, wann Nutzer auf das System zugreifen und was sie
ausführen.
4.9.12
umasks der Nutzer einstellen
Abhängig von ihrer Richtlinien möchten sie vielleicht ändern, wie Nutzer Informationen teilen
können, was die Standardrechte von neu erstellten Dateien sind. Dies ändern sie, indem sie
eine passende umask f¨r alle Nutzer einstellen. Sie können sie UMASK-Einstellung in /etc
/limits.conf, /etc/profile, /etc/csh.cshrc, /etc/csh.login, /etc/zshrc und
wahrscheinlich auch noch andere (abhängig von den Shells, die sie auf ihrem System installiert haben). Von all diesen hat die zuletzt geladene Vorrang: PAM’s limits.conf, die standard
System Konfiguration für die Shell des Nutzers, die Shell des Nutzers (sein ~/.profile), ~
/.bash_profile. . . )
Debian’s default umask Einsztellung is 022, d.h., dass Dateien (und Verzeichnisse) von Nutzer
aus der Gruppe und jedem anderen Nutzer des Systems lesbar und zugreifbar sind. Wenn dies
zu grosszügig für ihr System ist, müssen sie die umask Einstellung für alle Shells (und für
PAM) ändern. Vergessen sie nicht die Dateien unter /etc/skel/ anzupassen, da dort die die
Standards für Nutzer werden, wenn sie mit dem adduser Kommando erstellt werden.
Beachten sie, dass ein Nutzer immernoch seine umask Einstellung abändern kann, wenn sie es
möchten, um sie grosszügiger oder einschränkender zu machen.
Kapitel 4. Nach der Installation
4.9.13
50
Nutzer Sicht/Zugriff limitieren
FIXME: Content needed. Tell of consequences of changing packages permissiones when upgrading (and admin this paranoid should chroot his users BTW).
Wenn sie einem Nutzer Zugriff auf das System mit einer Shell gewähren müssen, bedenken
sie es vorsichtig. Ein Nutzer kann normalerweise, wenn er nicht in eine streng abgeschirmte
Umgebung (wie chroot) gesetzt wird, ziemlich viel Informationen von ihrem System sammeln, darunter:
• Din paar Konfigurationsdateien unter /etc. Jedoch werden Debian’s Standard Rechte
auf sensitive Dateien (die zum Beispiel Passwörter enthalten könnten) den Zugriff auf
kritische Informationen verhindern. Um zu sehen, auf welche Dateien nur der root
Nutzer zugreifen kann, führen sie zum Beispiel find /etc -type f -a -perm 600
-a -uid 0 als superuser aus.
• Ihre installierten Pakete, entweder durch ansehen der Paket-Datenbank, des /usr
/share/doc Verzeichnisses oder durch raten, indem man die Binaries und Bibliotheken
durchsieht, die auf ihrem System installiert sind.
• Ein paar Protokolle unter /var/log. Beachten sie, das auf einige Protokolle nu root und
die adm Gruppe zugreifen kann (versuchen sie find /var/log -type f -a -perm
640) und manche sind sogar ausschliesslich für root verfügbar (versuchen sie some logfiles at /var/log. Note also that some find /var/log -type f -a -perm 600
-a -uid 0).
Was kann ein Nutzer von ihrem System sehen? Wahrscheinlich ziemlich viele Sachen, versuchen sie mal folgendes (und jetzt tief durchatmen):
find / -type f -a -perm +006 2>/dev/null
find / -type d -a -perm +007 2>/dev/null
Was sie sehen ist eine Liste von allen Dateien, die ein Nutzer einsehen, und die Verzeichnisse,
auf die er Zugriff hat.
4.10
Die Nutzung von tcpwrappers
TCP-Wrapper (Schurtzumschläge für TCP) wurden entwickelt, als es noch keine echten PaketFilter gab, aber Zugsngskontrollen notwendig waren. Ein TCP-Wrapper erlaubt ihnen, einem
Host oder einer Domain einen Service zu erlauben oder zu verweigern und default-mässig
Zugriff zu erlauben oder zu verweigern. Wenn sie mehr Informationen haben möchten, sehen
sie sich hosts_access(5) an.
Viele der unter Debian installierten Services
Kapitel 4. Nach der Installation
51
• werden entweder durch den TCP-Wrapper service (tcpd) aufgerufen
• oder wurden mit libwrapper (Bibltiothek für TCP-Wrapper) Unterstützung kompiliert
Einerseits werde manche Services, einschliesslich telnet, ftp, netbios, swat und finger in
/etc/inetd.conf konfiguriert. Sie sehen es daran, dass die Konfigurations-Datei zuerst
/usr/sbin/tcpd aufruft. Andererseits, selbst wenn ein Service nicht über den inetdSuperdaemon ausgeführt wird, kann es in jedem Fall, den TCP-Wrapper-Regeln unterworfen werden, indem man die Unterstützung dafür einkompiliert. Services, die unter Debian
mit TCP-Wrappern compiliert wurden, schliessen ssh, portmap, in.talk, roc.statd, rpc.mountd,
gdm, oaf (der GNOME-Aktivierungs daemon), nessus und viele andere ein.
Um herauszufinden, welche Pakete TCP-Wrapper benutzen, versuchen sie folgendes:
$ apt-cache showpkg libwrap0 | egrep ’^[[:space:]]’ | sort -u | \
sed ’s/,libwrap0$//;s/^[[:space:]]\+//’
Beachten sie bitte folgendes, wenn sie tcpchk laufen lassen: Sie können Services, die gegen
dei Wrapper-Bibliothek kompiliert wurden, der host.deny oder host.allow Datei hinzufügen, aber aber tcpchk wird sie warnen, dass er sie nicht finden kann, da er sie in /etc
/inetd.conf sucht (die Manual-Seite ist an dieser Stelle nicht sehr genau).
Jetzt kommt ein kleiner Trick, und vielleicht die kleinste Alarmanlage zur Erkennung von Eindringlingen: Im allgemeinen sollten sie eine anständige Firewall als erste und TCP-Wrapper
als zweite Verteidigungslinie haben. Der Trick besteht nun darin ein SPAWN 1 Kommando in
/etc/hosts.deny einzutragen, das immer dann eine Mail an root schickt, wenn der Wrapper eines abgewiesenden Services ausgelöst wurde:
ALL: ALL: SPAWN ( \
echo -e "\n\
TCP Wrappers\: Verbindungsaufbau abgelehnt\n\
By\: $(uname -n)\n\
Prozess\: %d (pid %p)\n\
Nutzer\: %u\n\
Host\: %c\n\
Datum\: $(date)\n\
" | /usr/bin/mail -s "Verbinung zu %d blockiert" root) &
Beachten Sie: Das obige Beispiel kann sehr leicht geDoSet (Denial of Service, Verbindungsaufbau abgelehnt) werden, indem man versucht, sehr viele Verbindungen in kurzer Zeit
aufzubauen. Viele Emails bedeuten viel Datei-Aktivitöt, lediglich erreicht durch das Senden
von ein paar Paketen.
1
Vermeiden Sie den Fall hier, da spawn nicht funktionieren wird
Kapitel 4. Nach der Installation
4.11
52
Die Wichtigkeit von Logs und Alarmen
Wie Logs (Protokolldateien) und Alarme in einem sicheren System behandelt werden ist eine
wichtige Angelegenheit. Es ist leicht zu verstehen, dass selbst wenn ein System angeblich perfekt konfiguriert und zu 99% sicher ist, es immer noch 1% Restrisiko gibt, für die keine Sichereheitsmaßnamen greifen. Als erstes gillt es, Angriffe auf diese 1% zu erkennen und als zweites
Alarm auszuölösen, oder das System ist in keinster Weise sicher.
Debian GNU/Linux stellt Tools zur Verfügung, die die Analyse von Log-Dateien übernehmen,
am beachtenswertesten logcheck oder loganalysis (beide Pakete werden ein wenig Anpassung benötigen, um unnötige Dinge aus den Reports zu entfernen). Wenn sich das System
in der Nähe befindet, könnte es nützlich sein, das System-Log auf einer virtuellen Konsole
auszugeben. Die ist nützlich, da Sie so (auch von weiter weg oder im vorbeigehen) sehen
können, ob sich das System richtig verhält. Debians /etc/syslog.conf kommt mit einer
kommentierten Standard-Konfiguration. Um diese Ausgabe einzuschalten, unkommentieren
Sie die entsprechenden Zeilen und starten syslog neu (/etc/init.d/syslogd restart):
daemon,mail.*;\
news.=crit;news.=err;news.=notice;\
*.=debug;*.=info;\
*.=notice;*.=warn
/dev/tty8
Es gibt da noch einiges über Log-Analyse, das hier nicht behandelt werden kann. Eine gute
Quelle für weiter Informationen ist Counterpane’s Log Analysis Resources (http://www.
counterpane.com/log-analysis.html). In jedem Fall sind selbst automatische Tools
dem besten Tool nicht gewachsen: Ihrem Gehirn.
4.11.1
Nutzen und anpassen von logcheck
Das Programm logcheck ist in Debian in zwei Pakete aufgeteilt: logcheck (das HauptProgramm) und logcheck-database (eine Datenbank regulärer Ausdrücke für das Programm). Der Standard unter Debian (unter /etc/cron.d/logcheck) ist, dass logcheck
jeweils um 14:00 Uhr und nach jedem Neustart ausgeführt wird.
Dieses Tool kann sehr nützlich sein, wenn es geeignet angepasst wurde, um den Administrator zu alarmieren, wenn etwas ungewöhnliches auf dem System passiert. Logcheck
kann vollständig angepasst werden, so dass es Mails über Ereignisse aus den Logs sendet,
die Ihrer Aufmerksamkeit bedürfen. Die Standard-Installation umfasst Profile zum ignorieren von Ereignissen und Regelwidrigkeiten für drei unterschiedliche Setups (Workstation,
Server und paranoid). Das Debian-Paket umfasst eine Konfigurations-Datei /etc/logcheck
/logcheck.conf, die vom Program eingelesen wird, die definiert, an welchen Nutzer die
Testergebnisse geschickt werden sollen. Es stellt ausserdem einen Weg für Pakete zur Verfügung, um neue Regeln in den Verzeichnissen zu realisieren: /etc/logcheck/hacking.d
/_packagename_, /etc/logcheck/violations.d/_packagename_, /etc/logcheck
/violations.ignore.d/_packagename_,
/etc/logcheck/ignore.d.paranoid
Kapitel 4. Nach der Installation
53
/_packagename_, /etc/logcheck/ignore.d.server/_packagename_, und /etc
/logcheck/ignore.d.workstation/_packagename_. Leider benutzen das noch nicht
viele Pakete. Wenn Sie ein Regelwerk entwickelt haben, dass für andere Nutzer nützlich sein
könnte, senden Sie bitte einen Bug-Report für das ensprechende Paket (als ein wishlist-Bug).
Mehr Informationen finden Sie unter /usr/share/doc/logcheck/README.Debian.
Der beste Weg logcheck zu konfigurieren ist es, es einfach zu installieren (Sie werden
gefragt werden, an welchen Nutzer die Mail-Reports geschickt werden soll, und ob aus
den Einträgen im Syslog wird ein /etc/logcheck/logcheck.logfiles generiert werden soll). Wenn Sie andere Logfiles hinzufügen möchten, ändern Sie einfach /etc/logcheck
/logcheck.logfiles indem Sie sie hinzufügen. Die Paket-Abhängigkeiten werden dafür
sorgen, dass logcheck-database auch installiert wird. Während der Installation werden Sie gefragt, welches Sicherheits-Niveau benötigt wird: workstation, server oder paranoid. Dadurch wird /etc/logcheck/ignore.d (durch einen symbolischen Link) auf die
richtigen Verzeichnisse zeigen. Um dies zu ändern führen Sie dpkg-reconfigure -plow
logcheck-database aus. Erstellen Sie dann eine Datei /etc/ignore.d/local; diese
Datei enthält alle Regeln, Meldungen auszuschliessen, die nicht gemeldet werden sollen.
Lassen Sie es für den Anfang leer (ein einfaches cp /dev/null /etc/ignore.d/local
sollte reichen).
Wenn Sie dies einmal geschafft haben, sollten Sie die nächtsen Tage/Wochen/Monate die
verschickten Mails prüfen, ob Sie Meldungen geschickt bekommen, die Sie nicht erhalten
wollen. Fügen Sie dann einen entsprechenden regulären Ausdruck (siehe regex(7)) zu /etc
/ignore.d/local. Die ist ein andauernder Tuning-Pozess. Wenn nur noch relevante Meldungen verschickt werden, können Sie davon ausgehen, dass dieser Prozess beendet ist.
Beachten Sie, dass Logcheck Ihnen keine Mail schickt, wenn es nichts relevantes auf Ihrem
System findet, selbst wenn es läuft (so bekommen Sie höchstens eine Mail pro Woche, wenn
Sie Glück haben).
4.11.2
Konfigurieren, wohin Alarmmeldungen geschickt werden sollen
Debian kommt mit einer Standard-Konfiguration für Syslog (in /etc/syslog.conf), so dass Meldungen je nach System in die passenden Dateien geschrieben werden. Das sollte Ihnen bereits
bekannt sein, werfen Sie einen Blick auf die Datei syslog.conf und deren Dokumentation,
falls nicht. Wenn Sie ein sicheres System pflegen wollen, sollten Ihnen bekannt sein, wohin
Log-Meldungen geschickt werden, so dass Sie nicht unbeachtet bleiben.
Zum Beispiel ist es für viele produktiv Systeme sinnvoll Meldungen auch auf der Konsole
auszugeben, aber bei vielen solcher Systeme ist es sehr wichtig, auch eine neue Maschine zu
nehmen, die für die anderen als ein Loghost fungieren wird (d.h. sie empfängt die Logs aller
anderen Systeme).
Sie sollten auch an Mails für Root denken, da viele Sicherheits-Kontrollen (wie snort) ihre
Alarme an die mailbos von root senden. Diese Mailbos zeigt normalerweise an den ersten
Nutzer, der auf dem System erstellt wurde (prüfen Sie dazu /etc/aliases). Sorgen Sie dafür,
dass roots Mails irgendwo hin geschickt wird, wo sie auch gelesen werden (entweder lokal
oder ferngesteuert).
Kapitel 4. Nach der Installation
54
Es gibt noch andere Accounts besonderer Funktion und andere Aliase auf Ihrem System. Auf
einem kleinen System ist es wohl am einfachtes, sicherzustellen, dass alle Alias auf den RootAccount zeigen, und dass Mails an root in das persönliche Postfach des System-Administrator
weiter geleitet werden.
FIXME: it would be interesting to tell how a Debian system can send/receive SNMP traps
related to security problems (jfs). Check: snmptraglogd, snmp and snmpd.
4.11.3
Nutzen eines loghosts
Ein Loghost ist ein host der die syslog-Daten über ein Netzwerk sammelt. Wenn eine Ihrer
Maschinen gecracked wird, kann der Eindringling seine Spuren nicht verwischen, solange
er den Loghost nicht ebenfalls gecracked hat. Demzufolge muss der Loghost also besonders
sicher sein. Aus einer Maschinen einen Loghost zu machen ist relativ einfach: Starten Sie den
syslogd einfach mit ’syslogd -r’, und ein neuer Loghost ist geboren. Um dies unter Debian
permanent zu machen, editieren Sie /etc/init.d/sysklogd und änder Sie die Zeile
SYSLOGD=""
in
SYSLOGD="-r"
Als nächstes konfigurieren Sie die anderen Machinen, ihre Daten an den Loghost zu senden.
Fügen Sie einen Eintrag, ähnlich dem folgenden zu der /etc/syslog.conf hinzu:
facility.level
@Ihr_Loghost
Schauen Sie in die Dokumentation um zu erfahren, wodurch Sie facility und level ersetzen können (Sie sollten nicht wörtlich übernommen werden). Wenn Sie alles fern mitloggen wollen,
schreiben sie einfach:
*.*
@Ihr_Loghost
in Ihre syslog.conf. Sowohl lokal als auch entfernt mitzuloggen ist die beste Lösung (ein
Angreifer könnte davon ausgehen, dass er seine Spuren verwischt hat, nachdem er die lokale
Logdatei gelöscht hat). Sehen Sie für weitere Informationen die Handbuch-Seiten syslog(3),
syslogd(8) und syslog.conf(5).
Kapitel 4. Nach der Installation
4.11.4
55
Zugriffsrechte auf Log-Dateien
Es ist nicht nur wichtig zu entscheiden, wie Warnungen genutzt werden, sondern auch, wer
hierauf zugriff hat, d.h. wer Log-Dateien (fall Sie nicht einen Log-Host verwenden) lesen
oder verändern kann. Sichereheits-Alarme, die ein Attacker verändern oder abschalten kann,
sind im Falle eines Eindringens nicht viel wert. Ausserdem sollten Sie berücksichtigen, dass
Log-Dateien einem Eindringling sehr viel Informationen über Ihr System enthüllen kann und
welche normalen (und annormalen) Operationen er ausführen kann, wenn er darauf Zugriff
hat.
Ein Paar Zugriffsrechte auf Log-Dateien sind nach der Installation nicht gerade perfekt (aber
das hängt natürlich von Ihrer lokalen Sicherheits-Policy ab). Zuerst einmal müssen /var/log
/lastlog und /var/log/faillog nicht für normalen Nutzer lesbar sein. In der lastlogDatei können Sie sehen, wer sich zuletzt eingeloggt hat, und in faillog eine Zusammenfassung
fehlgeschlagener Logins. Der Author empfiehlt beides auf 660 zu chmod’en. Werfen Sie einen
kurzen Blick auf Ihre Log-Dateien, und entscheiden Sie sehr vorsichtig, welche Log-Dateien sie
les- oder schreibbar für einen Nutzer mit einer anderen UID als 0 und einer anderen Gruppe
als ’adm’ oder ’root’ machen. Sie können dies sehr leicht auf Ihrem System überprüfen:
# find /var/log -type f -exec ls -l {} \; | cut -c 17-35 |sort -u
(zeigt zu welchen Nutzern /var/log gehört)
# find /var/log -type f -exec ls -l {} \; | cut -c 26-34 |sort -u
(zeigt zu welchen Gruppen /var/log gehört)
# find /var/log -perm +004
(zeigt, welche Dateien von jedem Nutzer gelesen werden können)
# find /var/log \! -group root \! -group adm -exec ls -ld {} \;
(zeigt, welche Dateien zu anderen Gruppen als root oder adm gehört)
Um anzupassen, wie neue Log-Dateien erstellt werden, müssen Sie wahrscheinlich das Programm anpassen, dass sie erstellt. Wenn die Log-Dateien rotiert werden, können Sie das Verhalten bei der Erstellung und Rotation anpassen.
4.12
Benutzen von chroot
chroot chroot ist eine der mächtigsten Möglichkeiten einen Daemon, einen Nutzer oder
einen anderen Service einzuschränken. Stellen Sie sich einfach ein Gefängnis um Ihr Ziel vor,
aus dem Ihr Ziel nicht ausbrechen kann (Normalerweise, aber es gibt immernoch ein paar Bedinungen, unter denen es erlaubt es, aus einem solchen Gefängnis auszubrechen). Wenn Sie
einem Nutzer nicht trauen können Sie ihm eine Change-Root-Umgebung erstellen. Dies kann
zwar einiges an Platten-Platz verbrauchen, da Sie alles benötigte Ausführbare in das Geföngnis kopieren müssen, ebenso wie alle Bibliotheken. Sogar wenn der Nutzer etwas boshaftes
anstellt, ist der Schadensrahmen auf das Gefängnis beschränkt.
Ein gutes Beispiel für diesen Fall ist es, wenn Sie nicht mit /etc/passwd authentifizieren,
sondern stattdessen LDAP oder MySQL verwenden. So benötigt Ihr ftp-Daemon lediglich ein
Kapitel 4. Nach der Installation
56
Binary und vielleicht ein paar Bibliotheken. Ein ge-chroot-ete Umgebung wäre eine exzellente
Sicherheits-Umgegung; wenn ein neuer Exploit für diesen ftp-Daemon bekannt wird kann ein
Angreifer nur die Nutzer-ID (User-ID, UID) des internen ftp-Daemon-Nutzers ausnutzen und
nichts anderes.
Natürlich kann auch die Sicherheit ander Daemonen von einem solchen Arrangement profitieren.
Seien Sie jedoch vorgewarnt, dass man auch aus einem chroot-Gefängnis ausbrechen kann,
wenn der Nutzer, der es laufen lässt der Superuser ist. Also ist es notwendig, dass Sie den
Service als nicht privilegierter Nutzer laufen lassen. Indem Sie die Umgebung einschränken,
schränken Sie die für alle les- / ausführbaren Dateien, auf die das System Zugriff hat, und so
verkleinern Sie die Möglichkeit einer Ausweitung der System-Privilegien indem lokale Verwundbarkeiten der Systemsicherheit ausgenutzt werden. Aber sogar in dieser Situation können Sie nicht wirklich sicher sein, dass es für einen cleveren Angreifer keinen Weg gibt, irgendwie aus dem Gefängnis auszubrechen. Es ist eine zusätzliche Sicherheitsmassnahme nur
Server-Programme zu benutzen, die einen gewisse Reputation in Sachen Sicherheit haben. Sogar die kleinste Lücke, wie eine offene Behandlung von Dateien kann von einem geschickten
Angreifer genutzt werden, um in das System einzubrechen. Schliesslich wurde chroot nicht
als Sicherheits-Werkzeug designed, sondern als Test-Werkzeug.
Eine zusätzliche Anmerkung: BIND (Berkeley Internet Name Domain) ist standardmässig
unter Debian nicht ge-chroot-et. Tatsächlich ist dies bei keinem Daemon der Fall.
Es gibt übrigens Software (derzeit nicht unter Debian, aber in der Zukunft sollte sie paketiert
sein), die helfen Kann, eine chroot-Umgebung einzurichten. Zum Beispiel kann makejail mit
sehr kleinen Konfigurations-Dateien chroot-Gefängnisse erstellen und aktualisieren. Es versucht ausserdem alle für den Daemon benötigten Dateien zu erraten und in dem Gefängis
zu installieren. Mehr Informationen finden Sie unter http://www.floc.net/makejail/.
Jailer ist ein ähnliches Werkzeug, dass Sie unter http://www.balabit.hu/downloads/
jailer/ erhalten.
Für das erstellen von chroots (oder Gefänsnissen) ist ausserden deb.pl, ein Skript das die
Abhängigkeiten ein oder mehrerer Dateien analysiert.
4.12.1
Kernel configuration
4.12.2
Konfigurieren der Netzwerk-Fähigkeiten des Kernels
FIXME: Content missing
Viele Fähigkeiten des Kernels können im laufenden Betrieb verändert werden, indem man
etwas in das /proc-Datei-System echo-t oder indem man sysctl benutzt. Geben Sie sysctl
-A ein, um zu sehen, was Sie konfigurieren können und wie die Optionen hierfür sind. Nur in
selten Fällen müssen Sie hier etwas verstellen, aber Sie können auf diese Art auch die Sicherheit
erhöhen.
net/ipv4/icmp_echo_ignore_broadcasts = 1
Kapitel 4. Nach der Installation
57
Dies ist ein «Windows Emulator», weil es sich wie Windows bei Rundrufen (Broadcast-Ping)
verhält, wenn es auf 1 gesetzt wird. Anderenfalls macht es gar nichts.
net/ipv4/icmp_echo_ignore_all = 0
Wenn Sie kein ICMP auf Ihrer Firewall blockieren wollen, schalten Sie dies ein.
net/ipv4/tcp_syncookies = 1
Diese Option ist ein zweischneidiges Schwert. Auf der einen Seite schützt es Ihr System gegen
überfluten von syn-Paketen, auf der anderen Seite verletzt es definierte Standards (RFCs).
Diese Option ist recht dumm , da es die Gegenseite ebenso flutet wie Sie, so dass die Gegenseite auch beschäfftigt ist. Wenn Sie diese Option ändern wollen, können Sie es auch in /etc
/network/options ändern, indem Sie syncookies=yes setzten.
/proc/sys/net/ipv4/conf/all/log_martians = 1
Packete mit unmöglichen Adressen (erzeugt durch falsche Routen) in Ihrem Netzwerk werden
protokolliert.
Hier ist ein Beispiel wie man dies und andere nützliche Sachen setzen kann. Sie sollten diese
Informationen zu einem Skript /etc/network/interface-secure (der Name kommt aus
einem Beispiel) hinzufügen , und es durch /etc/network/interfaces wie nachfolgend
gezeigt aufrufen lassen:
auto eth0
iface eth0 inet static
address xxx.xxx.xxx.xxx
netmask 255.255.255.xxx
broadcast xxx.xxx.xxx.xxx
gateway xxx.xxx.xxx.xxx
pre-up /etc/network/interface-secure
# Skript-Name: /etc/network/interface-secure
# Modifiziert das normale Verhalten um uns gegen manche TCP/IP Attacken
# und Manipulationen zu schützen
#
# beigetragen von Dariusz Puchalak
#
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Rundruf-Antwort-Schutz
# einscahlten
echo 0 > /proc/sys/net/ipv4/ip_forward
# ip-Weiterleutung abschalten
echo 1 > /proc/sys/net/ipv4/tcp_syncookies # TCP-Syn-Cookie Schutz einschalten
Kapitel 4. Nach der Installation
58
echo 1 >/proc/sys/net/ipv4/conf/all/log_martians
# Packete mit unmöglichen
# Adressen logen, seien Sie
# hiermit auf ausgelasteten
# Webservern vorsichtig
echo 1 > /proc/sys/net/ipv4/ip_always_defrag
# Defragmentierungs-Schutz
# immer einschalten
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Schutz vor schlechten
# Fehlermeldungen einschalten
# Jetzt kommt Schutz vor ip-Spoofing
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f
done
# und schliesslich noch ein paar andere Sachen:
# Akzeptieren von umgeleitetet ICMP abschalten
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
echo 0 > $f
done
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do
echo 0 > $f
done
# Abschalten von Source Routed Packets
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
echo 0 > $f
done
# Logen von gespooften Paketen, Source Routed Paketen und Redirect
# Paketen
for f in /proc/sys/net/ipv4/conf/*/log_martians; do
echo 1 > $f
done
4.12.3
Konfigurieren der Firewall
Um die Möglichkeiten einer Firewall zu haben, um entweder das lokale System oder andere
dahinter zu beschützen, muss der Kernel mit Firewall-Unterstützung compiliert worden sein.
Der standard Debian 2.2 Kernel (also der Kernel-Version 2.2) stellt die Paket-Filter-Firewall
ipchains zur Verfügung, der Debian 3.0 Standard Kernel (Version 2.4) stellt die stateful
Oaket-Filter iptables (netfilter) Firewall zur Verfügung. Ältere Debian Distributionen wür-
Kapitel 4. Nach der Installation
59
den einen passenden Kernel-Patch (Debian 2.1 nutzte Kernel 2.0.34) benötigen.
In jedem Fall ist es recht einfach einen anderen, als den von Debian installierten Kernelzu
benutzen. Sie finden vor-compilierte Kernel als Pakete, die Sie leicht auf Ihrem Debian System
installieren können. Sie können auch die Kernel-Quellen downloaden, indem Sie das Paket
kernel-source-X installieren, und Ihren eigens angepassten Kernel compilieren, indem Sie
make-kpkg benutzen.
Auf das Aufsetzen einer Firewall unter Debian wird unter ‘Hinzufügen von Firewall Fähigkeiten’ auf Seite 84 ausführlich eingegangen.
4.13
Den Kernel patchen
FIXME: More content
Debian GNU/Linux stell verschiedene Patches für den Linux-Kernel zur Vergügung, die die
Sicherheit erhöhen:
• Linux Eindringling-Erkennung (Linux Intrusion Detection, im Paket lids-2.2.19)
• Linux Capabilities (im Paket lcap)
• Linux Trustees (im Paket trustees)
• NSA Enhanced Linux (im Paket selinux, auch verfügbar von der Seite des PaketBetreuers (http://www.coker.com.au/selinux/))
• kernel-patch-2.2.18-openwall (http://packages.debian.org/kernel-patch-2.
2.18-openwall).
• kernel-patch-2.2.19-harden
• Kernel-Unterstützung von IPSEC (im Paket kernel-patch-freeswan)
• kernel-patch-int
Wie auch immer, einige Patches werden von Debian noch nicht zur Verfügung gestellt. Wenn
Sie denken, dass manche von Ihnen hinzugefügt werden sollten, fragen Sie auf Work Needing
and Prospective Packages (http://wnpp.debian.org) nach ihnen. Ein paar von Ihnen sind:
• PaX patch (http://pageexec.virtualave.net/)
• HAP patch (http://www.theaimsgroup.com/~hlein/hap-linux/)
• Stealth patch (http://www.energymech.net/madcamel/fm/)
Kapitel 4. Nach der Installation
4.14
60
Schutz vor Speicher-Überläufen
Speicher-Überlauf werde die Attacken über Software genannt, die unzureichende Überprüfung von Eingabegrenzen (ein häufiger Programmierfehler) ausnutzen, um durch ProgrammEingaben Befehle auf der Maschine auszuführen. Diese Attacken über Server, die auf
Verbindungen warten, oder über lokal installierte Software, die einem Nutzer grössere Privilegien gewährt (setuid oder setgid) kann zu einem kompromitierten System führen.
Es gibt hauptsächlich vier Methoden, um sich gegen Speicher-Überläufe zu schützen:
• patchen des Kernels, um Ausführen des Stapel-Speichers zu verhindern
• Nutzung einer Bibliothek wie libsafe, um verwundbare Funktionen zu überschreiben
und ordentliche Prüfungen einzuführen (Informationen wie man libsafe installiert finden
Sie hier (http://www.Linux-Sec.net/harden/libsafe.uhow2.txt)).
• Neucompilieren des Quellcodes, um vernünftige Prüfungen einzuführen, um Überläufe
zu berhinden, in dem man zum Beispiel stackguard benutzt.
• Nutzen von Werkzeugen um Stellen im Quellcode zu finden, die derart verwundbar
sind, und reparieren derselben.
Debian GNU/Linux liefert bis einschliesslich der Release 3.0 lediglich Software um die erste und die letzte dieser Methoden zu implementieren (Kernel-Patch und Werkzeuge um
mögliche Speicher-Überläufe zu finden). Zur Nutzung dieser Werkzeuge zum aufsprühren
von Speicher-Überläufen benötigen Sie in jedem Fall Programmier-Erfahrung, um den
Quellcode zu reparieren (und neu zu compilieren). Debian stell beispielsweise bfbtester
(einen Überlauf-Tester, der Programe per brute-force (durchtesten aller Möglichkeiten) auf
Kommado-Zeile und Umgebungs-Variablen durchtestet) und njamd zur Verfügung.
Was Kernel-Patches (beschrieben im Abschnitt ‘Den Kernel patchen’ auf der vorherigen Seite) betrifft, so stellt der Openwall-Patch Schutz gegen Speicher-Überläufe in 2.2er
Linux-Kerneln zur verfügung, während Sie für 2.4er Kernel den Grsecureity-Patch (im
Paket kernel-patch-2.4-grsecurity enthält neben vielen anderen Sachen (ACLs,
Zufälligkeiten im Netzwerk, und es zu erschweren das Betriebssystem zu erraten)
auch den Openwall-Patch, siehe features (http://www.grsecurity.net/features.
htm)) oder die Linux-Sicherheits-Module (in den Paketen kernel-patch-2.4-lsm und
kernel-patch-2.5-lsm) benutzen müssen.
Seien Sie in jedem Fall gewarnt, dass selbst diese Problemumgehungen nicht vor SpeicherÜberläufen schützen lännen, da es wiederum Möglichkeiten gibt diese zu umgehen, wie es
in Ausgabe 58 (http://packetstorm.linuxsecurity.com/mag/phrack/phrack58.
tar.gz) des phrack-Magazins beschrieben wurde.
Kapitel 4. Nach der Installation
4.15
61
sichere Datei-Übertragungen
Während der normalen System-Administration müssen Sie immer mal wieder Dateien auf
Ihr System spielen oder von diesem holen. Auf sichere Art und Weise Dateien von einem
Host zu einem anderen zu wird duch die Benutzung des Paketes sshd erreicht. Eine andere
Möglichkeit ist die Nutzung von ftpd-ssl, einem ftp-Server der Secure Socket Layer benutzt,
um transmissionen zu verschlüsseln.
Jede dieser Methoden benötigt natürlich einen speziellen Client. Debian stellt Ihnen solche
zur Verfügung, zum Beispiel enthält das Paket ssh das Programm scp. Es arbeitet wie rcp
aber komplett verschlüsselt, so dass die bösen Jungs nocht nicht einmal herausbekommen können, WAS Sie kopieren. Wie es den Server gibt, so gibt es natürlich auch ein ftp-ssl ClientPaket. Sie können Clients für diese Software sogar für andere (nicht-UNIXoide) Betriebssysteme finden. putty und winscp stellen eine secure-copy-Implementierung für jede Version
von Microsoft-Betriebssystemen zur Verfügung.
4.16
Dateisystem Einschränken und konrollieren
4.16.1
Benutzung von Quotas
Es ist wichtig eine gute Quota-Regelung zu haben, da es die Nutzer daran hindert, die Festplatten zu füllen.
Sie können zwei Arten von Quota-Systemen benutzen: Nutzer-Quota und Gruppen-Quota.
Wie Sie sicher denken können, limitiert User-Quota den Plattenplatz, den ein Nutzer belegen
kann, und Gruppen-Quota macht dasselbe für ganze Gruppen. Beachten Sie dies, wenn Sie die
Grössen der Quotas festlegen.
Es ein paar wichtige Punkte, über die Sie nachdenken sollten, wenn Sie ein Quota-System
aufsetzen:
• Halten Sie die Quotas klein genug, so dass die Nutzer Ihre Festplatte nicht aufzehren
können.
• Halten Sie die Quotas gross genug, so dass Nutzer sich nicht beschweren oder dass Ihr
Mail-Quota Sie daran hindert nach eine Weile Mails anzunehmen.
• Nutzen Sie Quotas auf allen Bereichen, die Nutzer beschreiben können, auf /home ebenso wie auf /tmp.
Auf jeder Partition/jedem Verzeichniss, auf dass Nutzer Schreibzugriff haben, sollten quotiert
sein. Finden Sie diese Partitionen udn Verzeichnisse und schätzen Sie eine sinnvolle QuotaGrösse, die Nutzbarkeit und Sicherheit kombiniert.
So, nun wollen Sie Quotas benutzen. Zuerst müssen Sie prüfen, ob Ihr Kernel Quota unterstützt. Wenn nicht müssen Sie ihn neu compilieren. Prüfen Sie anschliessen, ob das Paket
quota isntalliert ist. Wenn nicht, installieren Sie es.
Kapitel 4. Nach der Installation
62
Um Quota für die entsprechenden Dateisysteme einzuschalten müssen Sie nur die Einstellung defaults in Ihrer Datei /etc/fstab zu defaults,usrquota ändern. Wenn Sie
Gruppen-Quotas benötigen, ersetzen sie usrquota durch grpquota. Sie können auch beides verwenden. Erstellen Sie dann lere Dateien quota.user und quota.group in den
Hauptverzeichnissen der Dateisysteme, auf denen Sie quotas einführen möchten (d.h. touch
/home/quota.user /home/quota.group für das Dateisystem /home).
Starten Sie quota neu, indem Sie ein /etc/init.d/quota stop;/etc/init.d/quota
start ausführen. Nun sollte quota laufen, und die Grössen können festgelegt werden.
Bearbeiten der Quotas eines bestimmten Nutzer (sagen wir mal “ref”) wir mit edquota -u
ref gemacht. Gruppen-Quotas können mit edquota -g <group> geändert werden. Setzen
Sie dann die weiche und die harte Grenze und/oder inode-Quotas, wenn Sie es benötigen.
Mehr Informationen über Quotas finden Sie in der Manual-Seite von quota, und der quota
Mini-Howto (/usr/share/doc/HOWTO/en-html/mini/Quota.html).
Sie könnten auch lshell mögen, oder auch nicht, da es den FHS verletzt. Beachten Sie ausserdem dass pam_limits.so diegleiche Funktionalität zur Verfügung stellen kann und das lshell
Paket zur Zeit verwaist (http://bugs.debian.org/93894) ist.
4.16.2
chattr/lsattr
Diesen beiden Befehle sind sehr nützlich, aber Sie arbeiten nur auf ext2 Dateisystemen. Mit
’lsattr’ können Sie die Attributen einer Datei anzeigen lassen und mit ’chattr’ können Sie sie
ändern. Beachten Sie, dass Attribute nicht dasselbe sind, wie Zugriffsrechte. Es gibt viele Attribute, aber nur die wichtigsten, die die Sicherheit erhöhen, werden hier erwähnt. Es gibt zwei
Kennzeichnungen (flags), die nur der Superuser setzen kann.
Zunächst gibt es das ’a’ Flag. Wenn dieses bei einer Datei gesetzt ist, dann kann an diese Datei
nur angehängt werden. Dieses Attribut ist für einige Dateien in /var/log/ nützlich, beachten
Sie aber, dass durch Log-Rotations-Skripte Dateien manchmal verschoben werden.
Das zweite Flag ist das ’i’-Flag, kurz für immutable also unveränderlich. Wenn Sie eine Datei so
behandeln, kann Sie weder modifiziert, noch gelöscht, noch umbenannt werden, oder verlinkt
werden. Wenn Sie nicht möchten, dass Nutzer einen Blick auf Ihre Konfigurations-Dateien
werfen können, setzen Sie dieses Flag, und entfernen Sie die Lesbarkeit. Zusätzlich bietet es
Ihnen etwas mehr Sicherheit gegen Eindringlinge, da ein Cracker dadurch verwirrt werden
könnte, wenn er eine Datei nicht verschieben kann. Dennoch sollten Sie nicht davon ausgehen,
dass ein Cracker von Blindheit geschlagen ist, immerhin ist er in Ihr System eingedrungen.
Zusätzlich können Sie die Programme chattr und lsattr von Ihrem System entfernen, so
dass ein Eindringling mit root-Zugang diese Attribute nicht verändern (oder auflisten) kann.
Da Sie Teil von e2fsprogs sind und dieses die Priorität required hat, können Sie das Paket
nicht einfach entfernen. Sie können jedoch diese beiden Applikationen (und wahrscheinlich
noch andere) einfach läschen. Kopieren Sie sie vorher auf einen auswechselbaren Datenträger
(Diskette?) zusammen mit ihrem md5-Summen.
Ein Eindringling auf ihrem System müsste so erst eigene Kopien dieser Programme herunterladen (wahrscheinlich sogar selbst compilieren), so dass Sie etwas mehr Zeit bekommen, den
Kapitel 4. Nach der Installation
63
Angriff zu erkennen und die Komprimitierungen rückgängig zu machen, bevor das gesamte
System überrannt wird.
FIXME: This is a bug that could be reported, are any of the binaries provided by the program
useful in production systems? If not, and since the libraries are needed by many packages a
new package e2fsprogs-utils could be included with less than Required priority.
Vergessen Sie nicht: chattr und lsattr sind nur für das Dateisystem ext verfügbar.
4.16.3
Prüfen der Integrität des Dateisystems
Sind Sie sicher, dass /bin/login auf Ihrer Festplatte immernoch dasselbe Programm ist, dass
Sie vor ein paar Monaten installiert haben? Was wenn es sich um eine gehackte Version handelt, die eingegebene Passwörter in einer versteckten Datei ablegt oder Sie als Klartext im
ganzen Internet herummailt?
Die einzige Methode einen gewissen Schutz dafür zu haben ist es die Dateien jede(n)
Stunde/Tag/Monat (ich ziehe täglich vor) zu prüfen, indem man deren aktuelle und alte md5Summe vergleicht. Zwei unterschiedliche Dateien können keine gleichen md5-Summen haben
(Die md5-Summe umfasst 128 Bits, so ist die Wahrscheinlichkeit, dass zwei unterschiedliche
Dateien eine gleiche md5-Summe haben eta 1 zu 3,4e3803), so sind Sie sicher, solange niemand
den Algorithmus gehackt hat, der die md5-Summen auf Ihrer Maschine erstellt. Dies ist, nunja, extrem schwer und sehr unwahrscheinlich. Sie sollten diese Überprüfung Ihrer Programme
als sehr wichtig ansehen. Weit verbreitete Tools hierfür sind sXid, AIDE (Advanced Intrusion
Detection Environment, fortgeschrittene Eindringlings Erkennungs Umgebung), TripWire
(non-free; die neue Version wird GPL lizensiert), integrit und samhain.
Das installieren von debsums wird Ihnen helfen, die Integrität des Dateisystems zu überprüfen, indem Sie die md5-Summen jeder Datei gegen die md5-Summe aus dem DebianArchiv-Paket vergleichen. Seien Sie aber gewarnt, dass diese Dateien sehr leicht geändert werden können.
Weiterhin können Sie locate durch slocate ersetzen. slocate ist eine um Sicherheit erweiterte Version von GNU locate. Wenn Sie slocate benutzen, sieht ein Benutzer nur Dateien, auf
die er auch zugriff hat, während Sie alle Dateien und Verzeichnisse des gesamten Systems
ausschliessen können.
FIXME: put references to the snapshot taken after installation.
FIXME: Add a note regarding packages not providing debsums for all apps installed (not
mandatory).
4.16.4
Aufsetzen von setuid-Check
Debian liefert einen täglich ausgeführten Cron-Job /etc/cron.daily/standard. Dieser
Cron-Job führt das Skript /usr/sbin/checksecurity, das Informationen über Änderungen sichert.
Kapitel 4. Nach der Installation
64
Damit dieser Check ausgeführt wird, müssen Sie in /etc/checksecurity.conf
CHECKSECURITY_DISABLE=“FALSE” setzen. Dies ist bereits der Standardwert, so dass diese
Option bereits aktiviert sein sollte, solange Sie nichts geändert haben.
Das Standard-Verhalten sendet diese Informationen nicht an den Superuser, stattdessen hält
es eine tägliche Kopie dieser Änderungen unter /var/log/setuid.changes. Sie sollten CHECKSECURITY_EMAIL (in /etc/checksecurity.conf) auf ’root’ setzen, damit
diese Informationen an ihn gemailt werden. Sehen Sie auch checksecurity(8) für weitere
Konfigurations-Informationen.
4.17
Einen Schnappschuss des Systems erstellen
Bevor Sie das System in eine produktive Umgebung stellen, können Sie einen Schnappschuss
des gesamten Systems machen. Diesen Schnappschuss können Sie im Falle einer Kompromitierung (siehe ‘Nach einer Komprimitierung’ auf Seite 115) benutzen. Sie sollten so einen
Schnappschuss immer dann erneuern, wenn Sie das System upgraden, insbesondere wenn Sie
auf eine neue Debian Release upgraden.
Hierfür können Sie beschreibbare, austauschbare Datenträger benutzen, die Sie schreibschützen können. Dies kann eine Diskette sein (die nach der Benutzung schreibgeschützt wird)
oder eine CD in einem CD-ROM Laufwerk (sie können auch wieder beschreibbare CD-ROMs
benutzen, so können Sie sogar alte Sicherheitskopien Ihrer md5-Summen behalten).
Das folgende Skript erstellt einen solchen Schnappschuss:
#!/bin/bash
/bin/mount /dev/fd0 /mnt/floppy
/bin/cp /usr/bin/md5sum /mnt/floppy
echo "Erstelle md5 Datenbank"
>/mnt/floppy/md5checksums.txt
for dir in /bin/ /sbin/ /usr/bin/ /usr/sbin/ /lib/ /usr/lib/
do
find $dir -type f | xargs /usr/bin/md5sum >>/mnt/floppy/md5checksums-lib.tx
done
/bin/umout /dev/fd0
echo "md5 Datenbank (nach der Installation) erstellt"
Beachten Sie, dass das Programm md5sum auch auf der Diskette gesichert wird, so dass Sie
es später benutzen können, um die anderen Programme Ihres Systems zu prüfen (gesetz dem
Fall das md5sum einen Trojaner enthält).
Dieser Schnappschuss enthält nicht die Dateien unterhalb von /var/lib/dpkg/info, wo
md5-Summen installierter Pakete enthalten sind (die Dateien enden mit .md5sums). Sie können diese Informationen zusätzlich kopieren, aber Sie sollten folgendes beachten:
Kapitel 4. Nach der Installation
65
• die md5sums der Debian Pakete enthalten alle md5-Summen der Dateien, die ein Paket
enthält, so dass die Datenbank viel grösser wird (5 MB statt 600 KB auf einem Debian
GNU/Linux System mit graphischen Subsystem und etwa 2.5 GB Software installiert).
• nicht alle Debian Pakete stellen md5-Summen der installierten Dateien zur Verfügung,
da es (derzeit) nicht der Policy nicht verlangt wird.
Sobald der Schnappschuss erstellt wurde sollten Sie sicherstellen, dass das entsprechende
Medium schreibgeschützt ist. Sie können dann eine Sicherheitskopie erstellen, oder es jede
Nacht benutzen, um die md5-Summen Ihres Systems gegen Ihren Schnappschuss vergleichen.
4.18
Andere Empfehlungen
4.18.1
Benutzen Sie keine Software, die von svgalib abhängt
SVGAlib ist ganz nett für Konsolen-Liebhaber wie mich, aber in der Vergangenheit wurde
mehrfach gezeigt, dass es ziemlich unsicher ist. Exploits durch zgv wurden veröffentlicht, und
es war einfach root zu werden. Versuchen Sie die Nutzung von SVGAlib Programmen wann
immer nur möglich zu verhindern.
Kapitel 4. Nach der Installation
66
67
Kapitel 5
Absichern von Servicem die auf Ihrem
System laufen
Services können auf zwei Arten abgesichert werden:
• sie so einstellen, dass auf sie nur von Zugangspunkten (Interfaces) auf sie zugegriffen
werden kann, von denen es nötig ist.
• sie so konfigurieren, dass sie nur von legitimierten Nutzer auf autorisierte Art und Weise
benutzt werden können.
Einschränken der Services, so dass auf Sie nur von bestimmten Orten zugegriffen werden
kann, kann durch Zugriffs-Beschränkungen auf Kernel-Ebene (durch eine Firewall) passieren.
Konfigurieren Sie sie, so dass sie nur auf ein bestimmtes Interface horchen (einige Services bieten diese Fähigkeiten vielleicht nicht) oder durch eine andere Methode, zum Beispiel kann der
Linux vserver Patch (für 2.4.16) dazu benutzt werden, Prozesse auf ein bestimmtes Interface
zu binden.
Was die Services angeht, die von inetd aufgerufen werden (telnet, ftp, finger, pop3. . . ), so ist
es nichts Wert, dass inetd nicht so konfiguriert werden kann, dass er nur auf ein bestimmtes
Interface reagiert. Wie auch immer, sein Ersatz, der xinetd Meta-Daemon kennt ein bind für
diesen zweck. Lesen Sie dazu bitte xinetd.conf(5).
service nntp
{
socket_type
protocol
wait
user
group
server
server_args
=
=
=
=
=
=
=
stream
tcp
no
news
news
/usr/bin/env
POSTING_OK=1 PATH=/usr/sbin/:/usr/bin:/sbin/:/bin
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
68
+/usr/sbin/snntpd logger -p news.info
bind
= 127.0.0.1
}
Die folgenden Abschnitte gehen detailierter darauf ein, wie bestimmte Services abhängig von
der beabsichtigten Benutzung passend konfiguriert werden.
5.1
Absichern der Secure-Shell (ssh)
Wenn Sie immernoch telnet statt ssh benutzen sollten Sie dieses Handbuch kurz beiseite legen,
und dies ändern. Ssh sollte anstelle von telnet für alle Fern-Logins benutzt werden. In einer
Zeit, in der es leicht ist, Internet-Verkehr mit zu schnüffeln und an klartext Passwörter heranzukommen, sollten Sie lediglich Protokolle verwenden, die Kryptographie benutzen. Also,
führen Sie sofort ein apt-get install ssh auf Ihren System aus.
Ermuntern Sie alle Nutzer Ihres Systems ssh anstelle von telnet zu benutzen, oder noch
bessern: Deinstallieren sie telnet/telnetd. Zusätzlich sollten Sie es vermeiden, sich mit ssh
als root einzuloggen und lieber andere Methoden benutzen, um root zu werden. Wie zum
Beispiel su oder sudo. Schliesslich sollte Sie noch die Datei /etc/ssh/sshd_config für
mehr Sicherheit modifizieren:
• ListenAddress 192.168.0.1
Lassen Sie ssh nur auf ein bestimmtes Interface hören, falls Sie mehrere Netzwerkkarten
haben (und ssh nicht auf allen verfügbar sein soll) oder Sie in Zukunft eine neue Netzwerkkarte einbauen werden (und keine ssh-Verbindungen auf ihr erlauben wollen).
• PermitRootLogin No
Versuchen wo immer möglich keinen Login als Root zu erlauben. Wenn nun jemand
Root werden will, benötigt er zwei logins, und dass Root-Passwort kann nicht so leicht
ausgetestet werden.
• Listen 666
Verändern Sie den Listen-Port, so dass ein Eindringling nicht wirklich sicher sein kann,
ob ein sshd-Daemon läuft (aber beachten Sie, dass dies lediglich “Sicherheit durch Verschleierung” ist).
• PermitEmptyPasswords no
Leer Passwörter verspotten jegliche System-Sicherheit.
• AllowUsers alex ref
Erlauben Sie nur bestimmten Users sich vie ssh auf der Maschine einzuloggen.
• AllowGroups wheel admin
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
69
Erlauben Sie nur bestimmten Gruppen-Mitgliedern sich via ssh auf der Maschine einzuloggen. AllowGroups und AllowUsers haben entsprechende Direktiven um den Zugang
zu der Maschine zu verwehren. Es wird nicht überraschen, dass es sich hierbei um
“DenyUsers” und “DenyGroups” handelt.
• PasswordAuthentication yes
Es ist Ihre Wahl, was Sie hier eintragen. Es ist sicherer Zugriff nur Nutzern zu erlauben,
die ssh-Schlüssel in der ~/.ssh/authorized_keys haben. Wenn Sie dies wollen, setzen Sie
dies auf “no”.
• Schalten Sie jedwede Art der Authentifizierung ab, die Sie nicht wirklich benötigen, zum Beispiel RhostsRSAAuthentication, HostbasedAuthenticatio,
KerberosAuthentication oder RhostsAuthentication. Sie sollten sie abschalten, auch wenn sie es standardmässig bereits sind (Siehe dazu die Handbuch-Seite
sshd_config(5)).
Abschliessend beachten Sie bitte, dass diese Direktiven von einer OpenSSH KonfigurationsDatei sind. Derzeit gibt es drei weitverbreitete SSH-Daemonen: ssh1, ssh2 und OpenSSH von
den OpenBSD Leuten. Ssh1 war der erste verfügbare ssh-Daemon und er ist noch der weit
verbreiteste (Gerüchten zufolge, gibt es sogar eine Windows-Version). Ssh2 hat gegebüber ssh2
Vorteile, abgesehen davon, dass er unter einen unfreien Lizens veröffentlicht wurde. OpenSSH
ist ein wirklich freier ssh-Daemon, der sowohl ssh1 als auch ssh2 unterstützt. OpenSSH ist die
Version, die installiert wird, wenn Sie auf Debian das Paket ’ssh’ auswählen.
Mehr Informationen wie Sie SSH mit Unterstützung für PAM aufsetzen finden sie hier:
security mailing list archives (http://lists.debian.org/debian-security/2001/
debian-security-200111/msg00395.html).
5.2
Absicher von Squid
Squid ist eine der verbreitesten Proxy/Cache Server, und es gibt ein paar Sicherheitsaspekte, die Sie beachten sollten. Squid’s standard Konfiguration lehnt alle Abfragen von Nutzern
ab.Sie sollten Squid so konfigurieren, dass er Zugriffe von vertrauenswürdigen Nutzern,
Computern oder Netzwerken erlaubt, indem Sie eine Zugriffs-Kontroll-Liste (ACL, Acces
Control List) on /etc/squid.conf. Mehr Informationen, wie Sie ACLs definieren, finden
Sie in der Squid User’s Guide (http://squid-docs.sourceforge.net/latest/html/
book1.htm).
Ebenso kann bei ungeeigneter Konfiguration vorkommen, dass jemand eine Mail über Squid
weiterleitet, da die Protokolle HTTP und SMTP ein ähnliches Design habven. Squid’s standard
Konfiguration verweigert Zugriffe auf Port 25. Wenn Sie Verbindungen an Port 25 erlauben
wollen, fügen Sie ihn einfach in der Safe_ports-Liste hinzu. Aber dies ist NICHT empfohlen.
Passendes Aufsetzen und Konfigurieren des Proxy/Cache-Servers ist nur ein Teil des Absichern Ihrer Seite. Eine andere notwendige Aufgabe ist es, Squid’s Log-Dateien zu analysieren,
um sicher zu gehen, dass alles so arbeitet, wie es sollte. Es gibt ein paar Pakete in Debian
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
70
GNU/Linux, die einem Administrator hierbei helfen können. Die folgenden Pakete sind in
Woody (Debian 3.0) verfügbar:
• calamaris - Log analyzer for Squid or Oops proxy log files.
• modlogan - A modular logfile analyzer.
• sarg - Squid Analysis Report Generator.
FIXME: Add more information about security on Squid Accelerator Mode
5.3
Absichern von FTP
Wenn Sie wirklich FTP benutzen müssen (ohne Ihn mit sslwrap zu umhüllen oder innerhalb
eines SSL- oder SSH-Tunnels), sollten Sie ftp in das Heimatverzeichnis des FTP-Nutzer chrooten, so dass ein Nutzer nichts anderes sehen kann, als sein Verzeichniss. Anderfalls können
sie Ihr Dateisystem durchlaufen, als hätten Sie Shell-Zugriff. Sie können die folgende Zeile in
Ihre proftpd.conf im globalen Abschnitt hinzufügen, um die chroot-Fähigkeiten zu nutzen:
DefaultRoot ~
Starten Sie proftpd neu, indem Sie /etc/init.d/proftpd restart eingebe, und prüfen
Sie, ob Sie noch aus ihrem Heimatverzeichnis heraus kommen können.
Um Proftp-DoS Attacken durch ../../../ zu verhinden, fügen Sie die folgende Zeile Ihrer /etc
/proftpd.conf hinzu: DenyFilter \*.*/
Vergessen Sie nicht, dass FTP Logind und athentifizierungs Passwort als Klartext sendet
(dies ist kein Problem, wenn Sie einen anonymen, öffentlichen Dienst anbieten) und es gibt
bessere Alternativen in Debian hierzu. Zum Beispiel sftp (aus dem Paket ssh). Es gibt
natürlich auch freue Implentierungen von SSH für andere Betriebssysteme, zum Beispiel putty (http://www.chiark.greenend.org.uk/~sgtatham/putty/) oder cygwin (http:
//www.cygwin.com).
Wenn Sie dennoch einen FTP Server verwalten wollen, während Sie den Nutzern Zugriff via
SSH gewähren, könnten Sie auf ein typisches Problem tressen. Nutzer die innerhalb eines
mit SSH abesicherten Systems auf einen anonymen FTP-Server zugreifen wollen, können versuchen Sich auf dem FTP server einzuloggen. Während der Zugriff verweigert werden wird,
wird das Passwort trotzdem als Klartext über das Netz gesendet. Um dies zu verhindern hat
der ProFTPd Entwickler TJ Saunders einen Patch erstellt, der verhindert, dass Nutzer dem
anonymen FTP-Server mit gültigen SSH-Zugangsdaten schicken. Mehr Informationen und der
Patch sind finden Sie unter; ProFTPD Patches (http://www.castaglia.org/proftpd/
#Patches).
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
5.4
71
Zugriff auf das X-Window-System absichern
Heutzutage werden X-Terminals bei mehr und mehr Firmen benutzt, so dass ein Server für
viele Arbeitsplätze zuständig ist. Dies kann gefährlich sein, weil Sie dem Datei-Server erlauben
müssen sich mit den X-Clients zu verbinden (X Server aus Sicht von X. X vertauscht die Definition von Client und Server). Wenn Sie dem (sehr schlechten) Vorschlag von vielen Dokumentationen folgen, geben Sie auf Ihrer Maschine xhost + ein. Dies erlaubt jedem X-Client
sich mit Ihrem System zu verbinden. Für etwas bessere Sicherheit, sollten Sie stattdessen das
Kommando xhost +Rechnername verwenden, um den Zugriff auf Bestimmte Rechner zu
begrenzen.
Allerdings ist es eine viel sicherere Lösung, ssh zu benutzen, um X zu tunneln und die gesamte
Sitzung zu verschlüsseln. Dies kann automatisch geschehen, wenn Sie sich auf eine andere
Maschine ssh-en. Sie müssen es nur in der /etc/ssh/ssh_config einschalten, indem Sie
X11Forwarding auf yes setzen. In den zeiten von SSH sollten Sie die xhost-basierte Zugriffskontrolle komplett über Bord werfen.
Zur besten Sicherheit, wenn Sie keinen X-Zugriff von anderen Maschinen benötigen, ist es, die
Bindung auf Port 6000 abzuschalten, indem Sie einfach folgendes eingeben:
$ startx -- -nolisten tcp
Dies ist das Standard-Verhalten unter Xfree 4.1.0 (der Xserver aus Debian 3.0). Wenn Sie
Xfree 3.3.6 laufen lassen (d.h. wenn Sie Debian 2.2 benutzen) können Sie /etc/X11/xinit
/xserverrcc editieren, damit Sie etwas erhalten wie:
#!/bin/sh
exec /usr/bin/X11/X -dpi 100 -nolisten tcp
Wenn Sie XDM benutzen, setzen Sie in /etc/X11/xdm/Xservers auf :0 local
/usr/bin/X11/X vt7 -dpi 100 -nolisten tcp. Wenn Sie Gdm benutzen, stellen Sie
sicher, dass die Option -nolisten tcp in der /etc/gdm/gdm.conf gesetzt ist (was in der
standardmässig unter Debian der Fall sein sollte), wie hier:
[server-Standard]
name=Standard Server
command=/usr/bin/X11/X -nolisten tcp
Sie können ausserdem die standard Zeitgrenze für xscreensaver Sperrungen setzen.
Auch wenn der Nutzern sie aufheben kann, sollten Sie Konfigurationsdatei /etc/X11
/app-defaults/XScreenSaver editieren, und die lock-Zeile von
*lock:
False
(das ist der standardwert unter Debian) auf
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
*lock:
72
True
ändern.
FIXME: add information on how to disable the screensavers which show the user desktop
(which might have sensitive information).
Lesen Sie mehr zur Sicherheit von X Window in XWindow-User-HOWTO (http:
//www.linuxdoc.org/HOWTO/XWindow-User-HOWTO.html)
(/usr/share/doc
/HOWTO/en-txt/XWindow-User-HOWTO.txt.gz).
FIXME: Add info on thread of debian-security on how to change config files of XFree 3.3.6 to
do this.
5.4.1
Überprüfen Ihres Display-Managers
Wenn Sie einen Display-Manager lediglichen zur lokalen Nutzung (um einen schönen graphischen Login zu haben) haben wollen, gehen Sie sicher, dass der XDMCP (X Display Manager
Control Protocol) Krempel abgeschaltet ist. Unter XDM können Sie dies mit der folgenden
Zeile in /etc/X11/xdm/xdm-config:
DisplayManager.requestPort:
0
Normalerweise sind unter Debian alle Display-Manager so konfiguriert, dass sie standardmässig keine XDMCP-Services starten.
5.5
Absichern des Drucker-Zugriffs (Die lpd und lprng Sache)
Stellen Sie sich vor, Sie kommen zur Arbeit, und der Drucker spuckt entlose Mengen von Papier aus, weil jemand Ihren Drucker-Daemon DoS-et. Unangenehm, oder?
In jeder Unix Druck-Architektur muss es einen Weg geben, um die Daten des Client auf
den Druck-Server zu bekommen. Traditionell machen dies lpr und lp so, dass das ClientKommando die Daten in das Spool-Verzeichnis kopiert oder symlinkt (weshalb diese Programme normalerweise SUID oder SGID sind).
Um jede Gefahr zu vermeiden sollen Sie Ihren Druck-Server besonders sicher halten. Dies
heisst, dass Sie Ihren Druck-Service so konfigurieren müssen, dass er nur Aufträge von vertauenswürdigen Rechnern annimmt. Hierzu müssen Sie die Rechner, von denen Sie Druckaufträge entgegennehmen möchten in die Datei /etc/hosts.lpd ein.
Allerdings akzeptier der lpr-Daemon auch wenn Sie dies getan haben Verbindungen auf
Port 515 auf jeder Schnittstelle. Sie sollten sich überlegen, ob Sie Verbindungen von Netzwerken/Rechner, die nicht drucken dürfen, mittels Firewall abblocken wollen (Der lpr-Daemon
kann nicht so konfiguriert werden, dass er nur auf eine bestimmte IP-Adresse hört.)
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
73
Sie sollten Lprng gegenüber lpr vorziehen, da er so konfiguriert werden kann, dass er Zugangkontrolle über IP kann. Und Sie können spezifizieren, auf welche Schnittstelle er sich
binden soll (wenn auch etwas sonderbar).
Wenn Sie Ihren Drucker nur Lokal auf ihrem System benutzen, werden Sie ihn nicht über Netzwerk teilen wollen. Sie sollten dann überlegen ein anderes Druck-System, wie zum Beispiel
das aus dem Paket cups oder PDQ (http://pdq.sourceforge.net/), das auf den Zugriffsrechten des Gerätes /dev/lp0 beruht, einzusetzen.
Bei cups werden die Druckaufträge mit dem http-Protokoll zum Server übertragen. Dadurch
muss der Client nicht über spezielle Privilegien verfügen, aber der Server muss auf irgendeinen Port hören.
Wie auch immer: Wenn Sie cups nur Lokal benutzen möchten, können Sie es So konfigurieren,
dass er nur auf die lokale Schleife (loopback interface) hört, indem Sie folgendes in Ihrer /etc
/cups/cupsd.conf ändern:
Listen 127.0.0.1:631
Es gibt noch andere Sicherheits-Optionen in diese Konfigurations-Datei, wie zum Beispiel
das Erlauben oder Verweigern von Netzwerken oder Rechnern. Wenn Sie sie allerdings nicht
benötigen, belassen Sie es am besten dabei, einfach nur den Port, auf den gehört wird,
einzuschränken. Cups liefert auch Dokumentation über den HTTP-Port. Wen Sie diese potentiell nützlichen Informationen einen Angreifer ausserhalb nicht enthüllen wollen (und der
Port offen ist), fügen Sie ausserdem folgendes hinzu:
<Location />
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
</Locationi>
Die Konfigurations-Datei kann auch so angepasset werden, dass zusätzliche Fähigkeiten, einschliessliche SSL- und TLS-Zertifikate oder Verschlüsselung, möglich werden. Die Handbücher finden Sie unter http://localhost:631/ oder http://cups.org.
FIXME: Add more content (the article on Amateur Fortress Building (http://www.
rootprompt.org) provides some very interesting views).
FIXME: Check if PDG is available in Debian, and if so, suggest this as the preferred printing
system.
FIXME: Check if Farmer/Wietse has a replacement for printer daemon and if it’s available in
Debian.
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
5.6
74
Absichern des Mail-Daemon
Wenn Ihr Server kein Mail-System ist, müssen Sie wirklich keinen Mail-Daemon haben, der
auf eingehende Verbindungen reagiert, aber Sie wollen lokale Mails ausliefern, damit beispielsweise Mails an den Root-User von irgendwelchen Alarm-System erhalten.
Um dies auf einem Debian System zu erreichen, entfernen Sie den smtp-Daemon auf dem
inetd:
$ update-inetd --disable smtp
und konfigurieren Sie den Mailer-Daemon so, dass er nur auf die Lokale Schleife achtet. In
exim (dem standard Mail Transport Agent (MTA) unter Debian) tun Sie dies, indem Sie die in
der Datei /etc/exim.conf die Zeile
local_interfaces = "127.0.0.1"
Hinzufügen.
Starten Sie beide Daemonen neu (inetd und exim) und exim wird lediglich auf den Socket
127.0.0.1:25 reagieren. Seien Sie vorsichtig und deaktivieren Sie erst inetd, oder exim wird nicht
neu starten, da ider inetd bereits eingehende Verbindungen behandelt.
Bei postfix editeren Sie /etc/postfix/main.conf:
inet_interfaces = localhost
Wenn Mails lediglich lokal entgegennehmen wollen ist dieses Herangehen besser als MailerDaemon in einen tcp-Wrapper zu hüllen oder Firewall-Regeln einzufügen, die den Zugang für
alle limitieren sollen. Wenn Sie jedoch auch auf andere Schnittstellen reagieren müssen sollten
Sie überlegen, ihn vom inetd aufrufen zu lassen und einen tcp-Wrapper einzusetzen, so dass
eingehende Verbindungen gegen /etc/hosts.allow und /etc/hosts.deny geprüft werden. Ausserdem werden Sie von unautorisierte Zugriffsversuche gegen Ihren Mail-Daemon
durch angemessenes Protokollieren gewarnt werden wollen.
In jedem Fall können Sie Mail-Relais-Versuche auf SMTP-Level ablehnen, indem Sie die /etc
/exim/exim.conf abändern, damit Sie folgendes enthält:
receiver_verify = true
Auch wenn Ihr Mail-Server keine mails relayen wird ist diese Konfiguration für den Relay-Test
auf http://www.abuse.net/relay.html nötig, um festzustellen, dass Ihr Server nicht
Relais-fähig ist.
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
5.7
75
sicherer Empfang von Mails
Das lesen und empfangen von Mails ist das gebräuchlichste Klartext-Protokoll. Wenn Sie POP3
oder IMAP benutzen, um Ihre Mails zu erhalten, senden Sie ein Klartext-Passwort über das
gesamte Netz, so dass ziemlich jeder Ihre Mails von nun an lesen kann. Benutzen Sie statt
dessen SSL (Secure Sockets Layer) um Ihre Mails zu empfangen. Wenn Sie einen Shell-Account
auf dem Rechner, der als POP oder IMAP-Server agiert, haben, ist die andere alternative ssh.
Hier ist eine beispielhafte fetchmailrc um dies zu zeigen:
poll mein-imap-mailserver.org via "localhost"
with proto IMAP port 1236
user "ref" there with password "hackmich" is alex here warnings 3600
folders
.Mail/debian
preconnect ’ssh -f -P -C -L 1236:my-imap-mailserver.org:143 -l ref
mein-imap-mailserver.org sleep 15 </dev/null > /dev/null’
Die wichtige Zeile ist die preconnect-Zeile. Sie startet eine ssh-Verbindung und erstellt den
notwendigen Tunnel, duch den automatisch alle Verbindungen zum lokalen Port 1236 verschlüsselt an den IMAP-Mail-Server weitergeleitet werden. Eine andere Möglichkeit wäre es
fetchmail mit SSL-Unterstützung zu benutzen.
Wenn Sie verschlüsselte Mail-Services wie POP oder IMAP anbieten möchten, apt-get
install stunnel und starten Sie Ihren Daemon auf diese Weise:
stunnel -p /etc/ssl/certs/stunnel.pem -d pop3s -l /usr/sbin/popd
Dieses Kommando umhüllt den angegeben Daemon (-l) an den Port (-d) und nutzt ein bestimmtes Zertifikat (-p).
5.8
Sichern von BIND
Es gibt verschiedene Dinge mit denen Sie sich auseinandersetzen sollen, um einen DomainServer-Daemon abzusichern, die ähnlich zu den Überlegungen sind, wie man einen anderen
Service absichert:
• Konfigurieren Sie den Daemon selbst so dass er von aussen nicht missbraucht werden
kann. Dies schliesst das einschränken von Abfragen durch Clients ein: Zonen-Transfers
und rekursive Abfragen.
• Einschränken des Zugriffs auf des Daemon auf den Server selbst, so dass dem Schaden
auf das System im Falle eines Einbruchs Grenzen gesetzt sind. Hierzu gehört auch, den
Daemon als nicht-privilegierten User laufen zu lassen und ihn zu chrooten.
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
76
Sie sollten einige Informationen, die von aussen abgefragt werden können, zurückhalten, so
dass man nicht wertvolle Informationen über Ihre Organisation, die Sie nicht herausgeben
wollen, abfragen kann. Dies schliesst die folgenden Optionen mit ein: allow-transfer, allowquery, allow-recursive und version. Sie können dies in dem global Abschnitt tun (so wird es
auf alle Zonen angewandt) oder jeweils pro Zone. Dies ist im Paket bind-doc dokumentiert, sobald das Paket installiert ist können Sie hierzu mehr in /usr/share/doc/bind/html
/index.html lesen.
Stellen Sie sich vor, Ihr Server ist mit dem Internet und ihrem internen Neztwerk (Ihre interne IP ist 192.168.1.2) verbunden . Sie möchten keinen Service im Internet anbieten und
DNS-Abfragen lediglich ihren internen Host erlauben. Sie sollten dies einschränken, indem
Sie folgendes in ihre /etc/bind/named.conf aufnehmen:
options {
allow-query { 192.168.1/24; } ;
allow-transfer { none; } ;
allow-recursive { 192.168.1/24; } ;
listen-on { 192.168.1.2; } ;
forward { only; } ;
forwarders { A.B.C.D; } ;
};
Die liste-on Option bewirkt, dass sich DNS nur auf die Schnittstelle bindet, die internen Zugang hat, aber, sogar wenn diese Schnittstelle verbindung zum Internet hat (zum Beispiel weil
Sie NAT benutzen), werden Abfragen nur akzeptiert, wenn Sie von internen Hosts kommen.
Wenn das System mehrere Schnittstellen hat und Sie kein listen-on gesetzt haben, könnten zwar
nur interne Nutzer Abfragen starten, aber, da der Port für Angreifer von aussen ansprechbar ist, könnten Sie versuchen den DNS abzustürzen (oder durch Speicher-Überlauf-Attacken
auszunutzen). Sie könnten ihn sogar dazu bringen, lediglich auf 127.0.0.1 zu hören, wenn Sie
den DN-Service nicht für ein anderes System anbieten wollen.
Der version.bind Eintrag in der chaos class enthält die Version des derzeit laufenden BindProzesses. Diese Information wird oft von automatischen Scannern und bösartigen Individuen
dazu verwendet, heraus zu finden, ob ein Bind für eine bestimmt Atacke verwundbar ist. Indem Sie falsche oder gar keine Informationen im version.bind Eintrag zur Verfügung stellen,
minimieren Sie die Wahrscheinlichkeit, dass jemand Ihren Server aufgrund der publizierten
Version attackieren wird. Um Ihre eigene Version anzugeben, benutzen Sie die version Direktive in der folgenden Art:
options {
... verschiedene andere Optionen ...
version "Nicht verfuegbar.";
};
Das ändern des version.bind Eintrages schützt eigentlich nicht gegen Attacken, aber Sie könntes es als sinnvolle Schutzvorrichtung ansehen.
Eine beispielhafte named.conf Konfigurations-Datei könnte so aussehen:
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
acl internal {
127.0.0.1/32;
10.0.0.0/8;
aa.bb.cc.dd;
};
// localhost
// intern
// eth0 IP
acl friendly {
ee.ff.gg.hh;
aa.bb.cc.dd;
127.0.0.1/32;
10.0.0.0/8;
};
//
//
//
//
77
slave DNS
eth0 IP
localhost
intern
options {
directory "/var/cache/bind";
allow-query { internal; };
allow-recursive { internal; };
allow-transfer { none; };
};
// Ab hier bis zur meineseite.bogus Zone
// ist alles im Grunde die unveränderte Debian Standard Einstellung
logging {
category lame-servers { null; };
category cname { null; };
};
zone "." {
type hint;
file "/etc/bind/db.root";
};
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
78
zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};
// Zone, die ich selbst hinzugefuegt habe
zone "meineseite.bogus" {
type master;
file "/etc/bind/named.meineseite";
allow-query { any; };
allow-transfer { friendly; };
};
Bitte prüfen Sie (erneut) die Debian Fehler Datenbank bezüglich Bind, insbesondere Bug
#94760 (regarding ACLs on zone transfers) (http://bugs.debian.org/94760). Fühlen Sie
sich ruhig ermutigt zu diesem Bug beizutragen, wenn Sie glauben, Sie können nützliceh Informationen beitragen.
5.8.1
Ändern von BIND User
Bezüglich der beschränkung von BINDs Privilegien müssen Sie beachten, dass wenn Sie BIND
als nicht-root User laufen lassen, BIND neue Netzwerk-Schnittstellen entdecken kann. Zum
Beispiel, wenn Sie eine PCMCIA-Karte in ihr Notebook stecken. Lesen Sie README.Debian in
Ihrer Dokumentation (/usr/share/doc/bind/README.Debian) für mehr Informationen
hierzu. Es gab in letzter Zeit Sicherheits-Probleme mit BIND, so dass es nützlich ist, den User
zu wechseln, wenn es möglich ist. Wie werden die Schritte, die dazu nötig sind, detailiert listen,
wenn Sie dies automatisch machen lassen wollen, probieren Sie das Skript in ‘Beispiel Skript,
um die standard Installation von Bind zu ändern’ auf Seite 153 aus.
Um BIND als ein anderer User laufen zu lassen müssen Sie zunächst einen separaten User und
eine separate Gruppe dafür erstellen (es ist keine gute Idee für alle Services, die sie nicht als root
laufen lasse, den User nobody und die Gruppe nogroup zu benutezn). In diesem Beispiel wird
der User und die Gruppe named benutzt. Sie können diese anlegen, indem Sie die folgenden
Kommandos eingeben:
addgroup named
adduser --system --home /home/named --no-create-home --ingroup named \
--disabled-password --disabled-login named
Beachten Sie, dass der User named sehr eingeschränlt ist. Wenn Sie - aus welchen Gründen
auch immer - ein weniger eingeschränktes Setup haben möchten, benutzen Sie:
adduser --system --ingroup named named
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
79
Editieren Sie nun /etc/init.d/bind mit Ihrem Lieblings-Editor und änder Sie die Zeile,
die mit
start-stop-daemon --start
anfängt zu:
start-stop-daemon --start --quiet --exec /usr/sbin/named -- -g named -u named
Ausserdem müssen Sie, um zu verhindern, dass irgendetwas als root läuft, die reload-Zeile
auskommentieren:
reload)
/usr/sbin/ndc reload
und in folgendes ändern:
reload)
$0 stop
sleep 1
$0 start
Beachten Sie: Abhängig von Ihrer Debian Version, müssen Sie vielleicht auch die restartZeile ändern. Dies wurde in der Version 1:8.3.1-2 von Debians BIND-Paket repariert.
Alles was Sie jetzt noch tun müssen, ist bind durch ’/etc/init.d/bind restart’ neu zu starten,
und dann Ihr Syslog auf zwei Einträge. wie die folgenden, prüfen:
Sep
Sep
4 15:11:08 nexus named[13439]: group = named
4 15:11:08 nexus named[13439]: user = named
Voilá! Ihr named läft nicht mehr als root. Wenn Sie mehr Informationen darüber lesen wollen,
warum BIND normalerweise nicht als nicht-root User auf Debian Systemen läuft, sehen Sie
bitte in der Fehlerdatenbank zu Bind nach, insbesondere Bug #50013: bind should not run
as root (http://bugs.debian.org/50013) und Bug #132582: Default install is potentially insecure (http://bugs.debian.org/132582), Bug #53550 (http://bugs.debian.
org/53550), Bug #128120 (http://bugs.debian.org/52745), und Bug #128120 (http:
//bugs.debian.org/128129). Fühlen sie sich ruhig dazu ermuntert, etwas zu den Fehlermeldungen beizutragen, wenn Sie denken, Sie können nützliche Informationen beitragen.
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
5.8.2
80
Chrooten des Name-Server
Um die grösstmögliche BIND Sicherheit zu erreichen, müssen Sie nun ein Chroot-Käfig (siehe
‘Benutzen von chroot’ auf Seite 55) um Ihren Daemon herum bauen. Es gibt da einen sehr einfachen Weg dies zu erreichen: Die -t Option (siehe die Handbuchseite named(8)). Dies wird
Bind selbst in ein bestimmtes Verzeichniss chrooten lassen, ohne dass Sie einen eigenen ChrootKäfig aussetzen müssen, oder sich sorgen um dynamische Bibliotheken machen müssen. Die
einzigen Dateien, die Sie in diesem Chroot-Käfig benötigen, sind:
dev/null
etc/bind/
- sollte die named.conf und alle Server-Zonen enthalten
sbin/named-xfer - wenn Sie Namen transferieren
var/run/named/ - sollte die pid und den Cache des Name-server (falls es
ihn gibt) enthalten. Dieses Verzeichniss muss für
den named-User schreibbar sein.
var/log/named
- Wenn Sie in einer Datei protokollieren, muss dies
für den names User schreibbar sein.
dev/log
- syslogd sollte hierrauf hören, wenn named so
konfiguriert ist, dass er hierrüber protokolliert.
Damit Ihr Bind Daemon vernünftig läuft, braucht er bestimmt Zugriffsrechte auch die
named-Dateien. Dies ist eine einfache Angelegenheit, da die Konfigurations-Dateie immer in
/etc/named/ liegen. Beachten Sie, dass er lediglich lese-Zugriff benötigt, es sei denn, es handelt sich um einen sekundären oder zwischenspeichernden Name-Server. Wenn dies der fall
ist, müssen Sie ihm lese- und schreibzugriff auf die notwendigen Zonen gewähren (so dass
Zonen-Transfers vom primären Server funktionieren).
Mehr Informationen über das Chrooten von Bind finden Sie unter Chroot-BIND-HOWTO
(http://www.linuxdoc.org/HOWTO/Chroot-BIND-HOWTO.html) (betrifft Bind 9) und
Chroot-BIND8-HOWTO (http://www.linuxdoc.org/HOWTO/Chroot-BIND8-HOWTO.
html) (betrifft Bind 8). Diese Dokumente sollten auch nach der Installations des
Paketes doc-linux-text (Text-Version) oder doc-linux-html (HTML-Version) verfügbar sein. Ein anderes nützliches Dokument ist http://www.psionic.com/papers/dns/
dns-linux.
Wenn Sie für Bind 8.2.3 (aus Debian potato) einen kompletten Chroot-Käfig ausetzen (d.h. Sie
benutzen nicht nur -t) , stellen Sie sicher, dass Sie die folgenden Zeilen benutzen:
dev/log - syslogd sollte hierrauf hören
dev/null
etc/bind/named.conf
etc/localtime
etc/group - mit einer einzigen Zeile: "named:x:GID:"
etc/ld.so.cache - mit ldconfig erstellt
lib/ld-2.1.3.so
lib/libc-2.1.3.so
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
81
lib/ld-linux.so.2 - symbolischer Lin auf ld-2.1.3.so
lib/libc.so.6 - symbolischer Lin auf libc-2.1.3.so
sbin/ldconfig - kann gelöscht werden, nachdem Chroot aufgesetzt wurde
sbin/named-xfer - wenn Sie Namen transferieren
var/run/
Sorgen Sie auch dafür, dass syslogd auf $CHROOT/dev/log achtet, so dass der Name-Server
seine syslog-Einträge in das lokale System Protokoll schreiben lassen kann.
Wenn Sie Probleme mit dynamischen Bibliotheken vermeiden wollen, können Sie Bind statisch
compilieren. Sie können hierzu apt-get mit der source Option benutzen. Es kann sogar die
Pakete herunterladen, die Sie zum Compilieren benötigen. Sie müssten etwas ähnlich wie das
hier tun:
$ apt-get --download-only source bind build-dep bind
$ cd bind-8.2.5-2
(ändern Sie das Makefile.in , so dass CFLAGS die Option ’-static’
beinhaltet befor die @CFLOAGS@ Definition von autoconf verwendet wird)
$ dpkg-buildpackage -rfakeroot
$ cd ..
$ dpkg -i bind-8.2.5-2*deb
Nach der Installation werden Sie die Dateien im chroot-Gefängniss verschieben müssen 1 . Sie
können die init.d Skripte in /etc/init.d lassen, so dass das System automatisch den
Name Server starten wird, aber editieren Sie sie in dem Sie bei den start-stop-daemon
Aufrufen in diesen Skripts --chroot /location_of_chroot hinzufügen.
FIXME, merge info from http://people.debian.org/~pzn/howto/chroot-bind.
sh.txt, http://people.pdxlinux.org/~karlheg/ (Bind9 on Debian), http:
//www.cryptio.net/~ferlatte/config/
(Debian-specific),
http://www.
psionic.com/papers/whitep01.html, http://csrc.nist.gov/fasp/FASPDocs/
NISTSecuringDNS.htm and http://www.acmebw.com/papers/securing.pdf.
5.9
Absichern von Apache
FIXME: Add content.
Sie können den Zugriff auf Ihren Apache Server einschränken, wenn Sie ihn nur intern benutzen wollen (zum Beispiel zu Test Zwecken, oder um auf die doc-central Archive zuzugreifen, etc.) und nicht wollen, dass von aussen auf ihn zugegriffen werden kann. Um dies
zu tun benutzen Sie die Listen oder BindAddress Direktiven in der Datei /etc/apache
/http.conf.
Benutzen von Listen:
1
es sei denn, Sie benutzen die instdir Option, wenn Sie dpkg aufrufen, aber dann wird das chroot-Gefängniss
etwas komplizierter
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
82
Listen 127.0.0.1:80
Benutzen von BindAddress:
BindAddress 127.0.0.1
Starten Sie anschliessen den Apache mit /etc/init.d/apache restart neu, und Sie werden sehen, dass er nur auf die lokale Schleife achtet.
In jedem Fall solten Sie, wenn Sie nicht die ganze Funktionalität die Apache zur Verfügung
stellt benutzen wollen, mal einen Blick auf die anderen Web-Server aus Debian werfen, zum
Beispiel dhttpd.
Die Apache Documentation (http://httpd.apache.org/docs/misc/security_
tips.html) stellt viele Informationen zu Sicherheitsmassnahmen, die Sie auf einem Apache
Webserver anwenden können, bereit (die gleichen Informationen erhalten Sie unter Debian
auch durch das Paket apache-doc).
5.10
Absichern von finger
Wenn Sie einen Finger-Service laufen lassen wollen, fragen Sie sich bitte zuerst, ob Sie ihn
das auch tun müssen. Wenn Sie müssen, werden Sie feststellen, dass Debian viele FingerDaemonen zur Verfügung stellt (hier die Ausgabe von apt-cache search fingerd):
• cfingerd - Configurable finger daemon
• efingerd - Ein weiterer Unix-finger-Dämon mit anpassbarer Ausgabe
• ffingerd - Ein sicherer finger Daemon
• fingerd - Remote-User Informationsserver
• xfingerd - BSD-ähnlicher finger daemon mit qmail Unterstützung
ffingerd ist der empfohlene finger Daemon, wenn Sie vorhaben, einen öffentlichen Service
anzubieten. In jedem Fall sind Sie dazu angespornt, ihn über inetd, xinetd oder tcpserver
laufend aufzusetzen: Schränken Sie die Anzahl der Prozesse die gleichzeitig laufen dürfen
ein, schränken Sie den Zugriff auf den Finger-Daemon von bestimmten Hosts ein (indem sie
tcp-wrapper benutzen) und lassen Sei ihn nur auf die Schnittstellen achten, auf die er achten
muss.
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
5.11
83
Allgemeine chroot und suid Paranoia
Wahrscheinlich ist es nur fair zu sagen, dass die Kompexität von BIND der Grund dafür ist,
warum er in den letzten Jahren so oft für Attacken verwundbar war.
Dies trifft auch auf andere Programme mit Komplexen Funktionen und grösserer Nutzergemeinde zu, einschliesslich sendmail und einige ftp-Daemonen (z.B. WUftpd). (Natürlich kann
auch ein Programm ohne viele Funktionen, das seine Nutzer nicht zufriedenstellt, unsicher
sein, abgesehen dass es nutzlos ist.)
In jedem Fall sollten Sie, wenn Sie diese laufen lassen, ähnliche Arragements für Sie in Erwägung ziehen — entziehen von root-Privilegien, einsperren in ein chroot-Gefängniss — oder
ersetzen durch ein sichereres Äquivalent.
5.12
Allgemeine Klartextpasswort Paranoia
Sie sollten versuchen, jeden Netzwerk Service, der seine Passworte als Klartext über das Netz
sendet oder empfängt, wie zum Beispiel FTP/Telnet/NIS/RPC, vermeiden. Der empfiehlt jedem ssh anstelle von telnet und ftp zu verwenden.
Vergessen Sie jedoch nicht, dass die Migration von telnet zu ssh die Sicherheit in keinster Weise
erhöt, wenn Sie weiterhin klartext Protokolle verwenden. Am besten wäre es ftp, telnet, pop,
imap und http zu entfernen und durch Ihre entsprechenden verschlüsselten Services zu ersetzen. Sie sollten in Erwägung ziehen von diesen Services zu Ihren SSL-Versionen zu wechseln:
ftp-ssl, telnet-ssl, pop-ssl, https . . .
Die meisten der oben aufgelisteten Tips gelten für jedes Unixoide-System (Sie werden sie in
jedem anderen Sicherheits-Relevanten Dokument, das sie jemals lesen, wiederfinden, wenn es
sich auf Linux und andere Unices bezieht).
5.13
NIS deaktivieren
Sie sollten, wenn möglich, nicht NIS, den Network Information Service, benutzen, da er das
teilen von Passworten erlaubt. Dies kann sehr unsicher sein, wenn Ihr Setup kaputt geht.
Wenn Sie Passwörter zwischen verschiedenen Maschinen teilen müssen, sollten Sie andere
alternativen in Erwägung ziehen. Zum Beispiel können Sie einen LDAP Server aufsetzen,
und PAM auf Ihren System so konfigurieren, dass es den LDAP Server zur User Authentifizierung kontaktiert. Sie finden ein detailiertes Setup in der LDAP-HOWTO (http:
//www.linuxdoc.org/HOWTO/LDAP-HOWTO.html) (/usr/share/doc/HOWTO/en-txt
/LDAP-HOWTO.txt.gz).
Lesen Sie mehr zu Sicherheit und NIS in der NIS-HOWTO (http://www.linuxdoc.org/
HOWTO/NIS-HOWTO.html) (/usr/share/doc/HOWTO/en-txt/NIS-HOWTO.txt.gz).
FIXME (jfs): Add info on how to setup this in Debian
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
5.14
84
Abschalten von RPC-Servicen
Sie sollten RPC wannimmer nur möglich abschalten, dass ist dann der Fall, wenn Sie ihn
nicht benötigen. 2 Es sind viele Sicherheits-Löcher sowohl für den Portmapper-Service als
auch für RPC-basierende Services bekannt und könnten sehr leicht ausgenutzt werden. Andererseits können NFS-Service in manchen netzwerken sehr wichtig sein, also versuchen Sie
in Ihrem Netzwerk die Balance zwischen Sicherheit und Nutzbarkeit zu waren. Einige DDoS
(distributed denial of service) Angriffe benutzen rpc-Löcher, um in das System einzudringen und als sogennanter Agent/Handler zu fungieren. Lesen Sie mehr zu Sicherheit in NFS
in NFS-HOWTO (http://www.linuxdoc.org/HOWTO/NFS-HOWTO.html) (/usr/share
/doc/HOWTO/en-txt/NFS-HOWTO.txt.gz).
Das Abschalten von Portmap ist relativ einfach. Es gibt aber verschiedene Methoden. Die einfachste is es auf einem Debian 3.0 System einfach das Paket portmap zu deinstallieren. Wenn
Sie eine eine andere Version laufen haben, werden Sie den Service, wie in ‘Daemon-Services
abschalten’ auf Seite 27 beschrieben, abschalten müssen, dies liegt daran, dass das Programm
Teil des Pakets net-base (das nicht deinstalliert werden kann, ohne das System kaputt zu
machen) sein kann.
Dies entfernt in der Tat jeden symbolischen Link der etwas mit Portmap zu tun hat unterhalb von /etc/rc${runlevel}.d/, was Sie auch manuell erledigen können. Eine andere
Möglichkeit ist chmod 644 /etc/init.d/portmap, das erzeugt aber eine Fehlermeldung
während des Bootens. Sie können auch den start-stop-daemon Teil im /etc/init.d
/portmap Shell-Skript auskommentieren.
5.15
Hinzufügen von Firewall Fähigkeiten
Das Debian GNU/Linux Betriebssystem hat die eingebauten Fähigkeiten des Linux Kernels.
Dies heisst, dass Sie, wenn Sie ein Potato (Debian 2.2) System installiert haben (mit dem default Kernel 2.2) werden Sie ipchains Firewall-Unterstützung im Kernel haben. Sie müssen
dann das Paket ipchains installieren, was (durch seine Priorität) sicherlich bereits der Fall
ist. Wenn Sie ein Woody-System (Debian 3.0) installiert haben (mit dem standard 2.4er Kernel)
unterstützt der Kernel Ihr iptables (neftfilter). Der Hauptunterschied zwischen ipchains
und iptables ist, dass letzeres auf stateful packet inspection (zustandsbehaftete Paket Untersuchung), so dass Ihnen sicherere (und einfacher zu wartende) Filter-Konfigurationen zur Verfügung stehen.
5.15.1
Firewallen des lokalen Systems
Sie können eine Firewall dazu benutzen, den Zugriff auf Ihr lokales System und sogar die
Kommunikation von ihm nach aus absicher. Firewall-Regeln lönnen dazu benutzt werden,
2
Sie werden es wahrscheinlich brauchen, wenn Sie NFS (Network FileSystem) oder NIS (Network Information
System) oder andere RPC-basierende Services benutzen.
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
85
Prozesse, die nicht vernünftigt konfiguriert werden können, zu schützen, aber nicht um Services für Netzwerke, IP-Adressen, etc. zur Verfügung zu stellen.
Dieser Schritt ist aber hauptsächlich deshalb als letztes in dieser Anleitung, weil es viel besser
ist, sich nicht alleine auf die Fähigkeiten der Firewall zu verlassen, um ein System zu schützen.
Die Sicherheit eines Systems setzt sich auf mehreren Ebenen zusammen; eine Firewall sollte
die letzte sein, wenn alle Services abgehärtet worden sind. Sie können sich sicherleich leicht eine Konfiguration vorstellen, bei der ein System lediglich von einere ingebauten Firewall geschützt, und der Admistrator glückseelige Administrator die Firewall-Regeln aus irgendwelchen Gründen (Probleme mit dem Setup, Verdruss, Denkfehler) entfernt. Dieses System wäre weit geöffnet für Angriffe, wenn es keine andere Schutzmassnahmen auf dem System
gibt.
Andererseits können Firewall-Regeln auf dem lokalem System dafür sorgen, dass böse Dinge
nicht passieren. Sogar wenn die bereitgestellten Services sicher konfiguriert sind, kann eine
Firewall vor Misskonfigurationen oder frisch installierten Services, die noch nicht passend
konfiguriert sind, schützen. Ausserdem wird eine enge Konfiguration nach Hause telefonierende
Trojaner am Funktionieren hindern, es sei denn, der Firewall-Code wurde entfernt. Beachten
Sie, dass ein Eindringling keinen Superuser-Zugriff benötigt, um fernkontrollierbaren Trojaner zu installieren (da das erlaubt ist, sich an Ports zu binden, wenn es sich nicht um einen
privilegierten Port handelt und die Fähigkeiten noch vorhanden sind).
Demzufolge wäre ein passendes Firewall-Setup, eines mit einer default deny policy (also alles
ablehnt, dass nicht ausdrücklich erlaubt ist), und weiterhin:
• eingehende Verbindungen werden nur zu lokalen Servicen von erlaubten Maschinen gestatten
• ausgehende Verbindungen werden nur von Servicen erlaubt, die auf Ihrem System benutzt werden (DNS, Web-Surfen, pop, email, . . . ) 3
• die forward-Regel verbietet alles (es sei denn, Sie beschützen andere System, siehe unten)
• alle anderen eingehenden und ausgehenden Verbindungen werden abgelehnt.
5.15.2
Schützen andere Systeme durch eine Firewall
Eine Debian Firewall kann auch so installiert werden, dass Sie, mit Firewall-Regeln, Systeme
hinter ihr beschützt, indem es die Angriffsfläche zum Internet hin einschränkt. Die Firewall
kann so konfiguriert werden, dass sie verhindert dass System von ausserhalb des lokalen Netzwerks Zugriff auf nicht öffentliche Services (Ports) verhindert. Zum Beispiel muss auf einem
Mail-Server lediglich Port 25 (auf den der Mail-Service aufsetzt) von aussen zugänglich sein.
Eine Firewall kann so konfiguriert werden, dass sogar wenn es öffentlich zugängliche Services
gibt, direkt gesendete Pakete verwirft (dies nennt man filtern).
3
Im Gegensatz zu anderen persönlichen Firewalls für andere Betriebssysteme, stellt Debian GNU/Linux (noch)
nicht eine Firewall-Erstellungs-Schnittstele zur Verfügung, die Regeln erstellen können, die einzelne Prozesse oder
User einschränken. Jedoch kann der iptables-Code so konfiguriert werden, dass er dies kann (siehe dazu das “owner” Modul in der Manualseite iptables(8) manpage)
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
86
Sie können eine Debian GNU/Linux Maschine sogar so konfigurieren, dass er als BridgeFirewall (überbrückender Schutzwall) fungiert, d.h. eine filternde Firewall, die komplett transparent zum gesamten Netzwerk erscheint, und ohne IP-Adresse auskommt, und daher nicht
direkt attackiert werden kann. Abhängig von dem installierten Kernel müssen Sie vielleicht
den bridge-Firewall Patch installieren, und dann 802.1d Ethernet Bridging in der Kernel Konfiguration und der neuen Option netfilter ( firewalling ) suport auswählen. Sehen Sie dazu ‘Aufsetzen einer Überbrückenden Firewall (bridge Firewall)’ auf Seite 147, um zu erfahren, wie man
dies auf einem Debian GNU/Linux System aufsetzt.
5.15.3
Konfigurieren der Firewall
Natürlich hängt die Konfiguration einer Firewall immer vom System und dem Netzwerk
abhängig. Ein Administrator muss vorher das Netzwerk Layout und die Systeme, die er
beschützen will, kennen, und ob andere netzwerkspezifischen Erwägungen (wie NAT oder
Routing) berücksichtigt werden müssen. Seien vorsichtig, wenn Sie Ihre Firewall konfigurieren. Wie Laurence J. Lane im iptables Paket sagt:
The tools can easily be misused, causing enormous amounts of grief by completely cripple network access
to a computer system. It is not terribly uncommon for a remote system administrator to accidentally lock
himself out of a system hundreds or thousands of miles away. One can even manage to lock himself out
of a computer who’s keyboard is under his fingers. Please, use due caution.
Vergessen Sie nicht: Das einfache installieren von iptables (oder älterem Firewall Coe) gibt
Ihnen keine Sicherehit, es stellt lediglich die Software zur Verfügung. Um eine Firewall zu
haben, müssen Sie sie konfigurieren.
Wenn Sie nicht viel über Firewalls wissen, lesen Sie die Firewalling-HOWTO, die Sie im Paket
doc-linux-text finden (andere Formate gibt es auch). Sehen Sie auch ‘Seien Sie Wachsam
gegenüber generellen Sicherheitsproblemen!’ auf Seite 17 für weitere (allgemeinere) Verweise.
Machen Sie’s auf die Debian Art
Wenn Sie Debian 3.0 benutzen, werden Sie feststellen, dass Sie bereits das Paket iptables
installiert haben. Dies ist die Unterstützung für die Netfilter-Implementation in 2.4.4+ Keneln.
Da das System nach der Installation aber keine Firewall-Regeln kennen kann (Firewall-Regeln
sind zu System spezifisch), müssen Sie die iptables einschalten. Wie auch immer: Die Skripte
wurden so konfiguriert, dass der Administrator Firewall-Regeln aufsetzen kann und die initSkripte Sie dann lernen können und so immer als das Setup der Firewall fungieren.
Hierzu müssen Sie folgendes tun:
• Konfigurieren Sie das Paket so, dass es mit dem System gestartet wird. Bei neueren Versionen (sei 1.2.6a-1) werden Sie während der Installation hiernach gefragt. Sie können es
hinterher wieder mit dpkg-reconfigure -plow iptables ändern. Wichtig: Bei älteren Versionen geschah dies noch durch editieren von /etc/default/iptables, so
dass die Variable enable_iptables_initd auf true gesetzt wird.
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
87
• Erstellen Sie Ihr ein Firewall-Setup mit iptables, benutzen Sie dazu die Kommandozeile
(siehe iptables(8)) oder ander der Tolls aus Debians Firewall-Paket (siehe ‘Nutzen
von Firewall-Paketen’ auf dieser Seite). Sie müssen einen Satz von Firewall-Regeln erstellen die benutzt werden sollen, wenn die Firewall aktiv ist und einen anderen, wenn
die Firewall inaktiv (dies können auch nur leere Regeln sein) ist.
• Sicher Sie die erstellten Regeln mit den Skripts /etc/init.d/iptables
save_active und /etc/init.d/iptables save_inactive.
Sobald dies geschehen ist, ist Ihr Firewall-Setup im Verezichnis /var/lib/iptables/ gespeichert und wird beim System-Boot ausgeführt (oder wenn das initd Skript mit start und stop
gestartet wird). Beachten Sie, dass standard Einstellung unter Debian vorsehen, den FirewallCode in den Multiuser Runleveln (2 bis 5) sehr früh (10) zu starten. Ausserdem wird er im
singleuser Runlevel (1) gestoppt. Ändern Sie dies, wenn es nicht Ihren lokalen Richtlinien
entspricht.
Wenn Sie keine Ahnung haben, wie Sie Ihre Firewall-Rules manuell aufsetzen sollen, sehen Sie in der Packet Filtering HOWTO und NAT HOWTO aus dem Paket iptables, zu
browsen unter /usr/share/doc/iptables/html/. Zudem stellt die Konfigurationsdatei
/etc/default/iptables noch weitere Informationen zu diesem Paket zur Verfügung.
Nutzen von Firewall-Paketen
Das manuelle Aufsetzen einer Firewall kann für neue (und manchmal auch für erfahrene) Administratoren kompliziert sein. Hierfür hat die Freie-Software Gemeinschaft eine grosse Zahl
von Tools erstellt, die zur einfachen Konfiguration einer Lokalen Firewall benutzt werden können. Seien Sie vorgewarnt, dass einige Dieser Tools sich mehr auf lokalen Schutz konzentrieren
(auch personal firewall genannt), während andere vielseitiger, und lönnen dazu benutzt werden,
komplexere Regelwerke zum Schutz ganzer Netzwerke zu erstellen.
Einige Programme, die unter Debian zum aufsetzen von Firewall-Regeln benutzt werden können, sind:
• firestarter
• knetfilter
• fwbuilder
• shorewall
• mason, das basierend auf dem Netzwerk-Verkehr, denn Ihr System “sieht”, FirewallRegeln vorschlagen kann
• bastille (among the hardening steps that can make new versions of bastille is the
possibility of adding firewall rules to the system to be executed on startup)
• ferm
Kapitel 5. Absichern von Servicem die auf Ihrem System laufen
88
• fwctl
• easyfw
• firewall-easy
• ipac-ng
• gfcc
• lokkit oder gnome-lokkit
Die Pakete gfcc,firestarter und knetfilter sind graphische Administrations-Schnittstellen die
entweder GNOME (die ersten beiden) oder KDE (das letzte) benutzen, die eher Nutzer orientiert sind (z.B. für Heimanwender) als die andere Pakete in der Liste, die sich eher an Administratioren richten.
Seien Sie vorgewarnt, dass manche der zuvor skizzierten Pakete eigene Firewall-Skripte einführen, die beim System-Start ausgeführt werden sollen, die zweifelsohne mit dem allgemeinen Setup (wenn es erfolgte) mit unerwünschten Nebeneffekten kollidieren wird. Das
Firewall-Skript, das zuletzt ausgeführt wird, wird das das System konfigueren (was Sie so
vielleicht nicht vorhatten). Sehen Sie hierzu in der Paket-Dokumentation nach und benutzen
Sie nur eines dieser Setups. Allgemeiner: Andere Programme, die helfen die Firewall-Regeln
aufzusetzen, können anderen Konfigurations-Dateien beissen.
FIXME: Add more info regarding this packages
FIXME: Check Information on Debian firewalling and what/how does it change from other
distributions.
FIXME: Where should the custom firewalling code be enabled (common FAQ in debianfirewall?)
89
Kapitel 6
Automatishen Abhärten eines Debian
Systems
Nachdem Sie nun all die Informationen aus den vorherigen Kapiteln gelesen haben, fragen
Sie sich vielleicht: “Ich habe sehr Ding zu erledigen um mein System abzusichen; könnte man
das nicht automatisieren?” Die Antwort ist: “Ja, aber seien Sie vorsichtig mit automatischen
Tools.” Manche Leute denken, dass ein Absicherungstool nicht die Notwendigkeit für gute
Systemadministration abschafft. Legen Sie sich also nicht selbst herein, indem Sie denken, dass
Sie all die Prozesse automatisieren könnten, und sich alle betreffenden Angelegenheiten von
selbst erledigen würden. Sicherheit ist ein andauernder Prozess, an dem der Administrator
teilnehmem muss und nicht wegbleiben kann, damit irgendwelche Tools die Arbeit erledigen,
weil kein einzelnes Tool mit den möglichen regelkonformen Sicherheits-Implementierungen,
all den Attacken und all den Umgebungen bewältigen kann.
Seit Woody (Debian 3.0) gibt es zwei unterschiedliche Pakete, die nützlich für die Erhöhung
der Sicherheit sind. Das Paket harden versucht auf Basis der Paket-Abhängigkeiten schnell
wertvolle Sicherheits-Pakete zu installieren und Pakete mit Mängeln zu entfernen. Die Konfiguration der Pakete muss der Administrator erledigen. Das Paket bastille implementiert
gegebene Sicherheits-Regeln für das lokale System bassierend auf einer vorhergehenden Konfiguration durch den Administrator (Sie können auch mit einfache Ja/Nein Fragen durch die
Konfiguration geführt werden).
6.1
Harden
Das Paket harden versucht es einfacher zu machen Rechner, die gute Sicherehit benötigen,
zu installieren und zu administrieren. Dieses Paket sollte von Leuten benutzt werden, die
eine schnelle Hilfe zur Erhöhing System-Sicherheit haben wollen. Hierzu entfernt es Pakete
mit bekannten Mängeln, einschliesslich (aber nicht beschränkt auf); Pakete mit bekannten
Sicherheits-Fehlern (zum Beispiel Speicher-Überläufe), Pakete die Klartext-Passwörter verwenden, fehlende Zuganskontrolle, usw. Es installiert ausserdem automatisch einige Tools,
die die Sicherheit auf unterschiedliche Art und Weise erhöhen: Werkzeuge zur Eindrin-
Kapitel 6. Automatishen Abhärten eines Debian Systems
90
glingserkennung, Tools zur Sicherheits-Analyse, und mehr. harden installiert die folgenden
virtuellen Pakete (d.H. sie enthalten nichts, hängen aber von anderen Paketen ab).
• harden-tools: Tools, die die System-Sicherheit erhöhen (Integritäts-Überprüfer, Eindringlingserkennung, Kernel-Patches. . . )
• harden-doc: Stellt diese und andere Sicherheits-relevanten Dokumente zur Verfügung
• harden-environment: Hilft eine abgesicherte Umgebung zu konfigurieren (derzeit
leer)
• harden-servers: entfernt Server, die aus irgendeinem Grund als unsicher gelten
• harden-clients: entfernt Clients, die aus irgendeinem Grund als unsicher gelten
• harden-remoteflaws: Entfernt Pakete mit bekannten Sicherheits-Lücken, die von
einem entfernten Angreifer genutzt werden können, um das System zu komprimitieren
(benutzt versionierte Conflicts:)
• harden-localflaws: Entfernt Pakete mit bekannten Sicherheits-Lücken, die von
einem lokalen Angreifer genutzt werden können, um das System zu komprimitieren (benutzt versionierte Conflicts:)
• harden-remoteaudit: Tools um Systeme aus der ferne zu überprüfen
Seien Sie wachsam, wenn Sie Software installiert haben, die Sie brauchen (und aus bestimmten
Gründen nicht deinstalliert haben wollen) und Sie Aufgrund des Conflicts nicht mit einem der
oben aufgeführten Pakete installiert werden kann. In diesem Fall können Sie harden nicht
vollständig nutzen.
Die harden Pakete machen eigentlich gar nichts. Zumindest nicht direkt. Sie haben jedoch
absichtliche Paket-Konflikte mit bekannten, unsicheren Paketen. Auf diese Art wird die PaketVerwaltung von Debian die Installation von diesen Paketen nicht erlauben. Wenn Sie zum
Beispiel bei installiertem harden-servers versuchen, mit apt einen telnet-Daemon zu installieren, werden Sie folgendes sehen:
# apt-get install telnetd
The following packages will be REMOVED:
harden-servers
The following NEW packages will be installed:
telnetd
Do you want to continue (Y/n)
Dies sollte im Kopf des Administrators eine Alarmsirene auslösen, so dass er seine Aktion
überdenken kann.
Kapitel 6. Automatishen Abhärten eines Debian Systems
6.2
91
Bastille Linux
Bastille Linux (http://www.bastille-linux.org) ist ein automatisches Abhärtungs
Tools, das ursprünglich für die RedHat und Mandrake Linux Distributionen gedacht war. Wie
auch immer: Das Paket bastille aus Debian (seit Woody) ist angepasst, um dieselbe Funktionalität unter Debian GNU/Linux Systemen zur Verfügung zu stellen.
Bastille kann mit verschiedenen Oberflächen bedient werden (Alle sind in ihrer eigenen
Handbuch-Seite dokumentiert), die dem Administrator erlauben:
• Schritt für Schritt Fragen zur erwünschten Sicherheit Ihres Systems beantworten (siehe
InteractiveBastille(8))
• standard Einstellungen zur Sicherheit (zwischen Lau, moderat und paranoid) in
einem bestimmten Setup (Server oder Arbeitsplatzrechner) zu benutzen, und Bastille
entscheiden zu lassen, welche Sicherheits-Regelungen eingeführt werden sollen (siehe
BastilleChooser(8))
• eine vorgefertigte Konfigurations Datei (von Bastille oder von einem Administator
geliefert) zu nehmen und eine vorgegeben Sicherheits-Regelung zu benutzen (siehe
AutomatedBastille(8))
Kapitel 6. Automatishen Abhärten eines Debian Systems
92
93
Kapitel 7
Paket signierung unter Debian
Dieses Kapitel könnte auch mit “Wie man sein Debian GNU/Linux System sicher upgraded/updated” überschrieben werden, und es verdient hauptsächlich deshalb ein eigenes Kapitel, weil es in kein anderes passt.
Derzeit (Stand Dezember 2001) stellt Debian keine signierten Pakete für die Distribution zur
Verfügung und der Woody Release (3.0) wird diese Fähigkeiten nicht integrieren. Es gibt eine
Lösung für signierte Pakete, die - hoffentlich - in der nächsten release (sarge) integriert wird.
7.1
Der vorgeschlagene Plan zur Prüfung von Paket Signierungen
Der derzeitige (unimplementierte) Plan zur Prüfung von Paket Signaturen mit apt ist:
• Die Release-Datei enthält die md5-Summe von Packages.gz (die die md5-Sumemn der
Pakete enthält) und wird signiert. Die Signatur stammt aus einer vertrauenswürdigen
Quelle.
• Diese signierte Release-Datei wird beim “apt-get update” herunter geladen und auf der
Festplatte mit Packages.gz gespeichert.
• Wenn ein Paket installiert werden soll, wird es zuerst herunter geladen, und dann wird
die md5-Summe erstellt.
• Die signierte Release-Datei wird überprüft (ob die Signature okay ist) und doe md5Sumem der Packages.gz Datei extraiert. Die md5-Summe der Pakcages.gz-Datei wird
erstellt und geprüft, und - wenn Sie übereinstimmt - wird die md5-Summe des herunter
geladenen Paketes aus ihr extraiert.#
• Wenn die md5-Summe des heruntergeladenen Paketes die gleiche ist, wie in der
Packages.gz-Datei, wird das Paket installiert, andernfalls wird der Administrator
alarmiert, und das Paket wird im Zwischenspeicher gehalten (so dass der Administrator entscheiden kann, ob es installiert werden soll, oder nicht). Wenn das Paket nicht in
Kapitel 7. Paket signierung unter Debian
94
Packages.gz enthalten ist und der Administrator das System so konfiguriert hat, dass nur
geprüfte Pakete installiert werden können, wird das Paket ebenfalls nicht installiert.
Durch diese Kette von md5-Summen ist apt in der Lage, zu verifizieren, dass ein Paket aus
einer bestimmten Release stammt. Dies ist zwar unflexibler als jedes Paket einzeln zu signieren,
kann aber auch mit den unten aufgeführten Plänen kombiniert werden.
Die Signierung von Paketen wurde innerhalb des Debian Projektes ausführlich diskutiert.
Mehr Informationen hierzu finden Sie unter http://www.debian.org/News/weekly/
2001/8/ und http://www.debian.org/News/weekly/2000/11/.
7.2
Alternative Einzel-Paket-Signierungs Schemata
Dieses zusätzliche Schemata jedes paket einzeln zu signieren erlaubt es, Pakete zu prüfen,
selbst wenn sie nicht mehr in irgendeiner Packages-Datei erwähnt werden, und auch Pakete
von Dritten, für die es keine Packages-Datei gibt, können unter Debian installiert werden.
Dieses Paket-Signierungs Schemata kann durch debsig-verify und debsigs implementiert werden. Diese beiden Pakete können in der .deb-Datei selbst eingebettete Signaturen erstellen und prüfen. Debian hat bereits jetzt die Möglichkeiten dies zu tun, aber das Regelwerk
und die Werkzeuge hierfür werden erst nach dem Woody Release eingeführt (um den ReleaseZyklus nicht zu verlangsamen).
Beachten Sie: Derzeit wird enthält /etc/dpkg/dpkg.cfg derzeit standardmässig die Option
“no-debsig”.
7.3
Prüfen veröffentlichter Pakaete
Für den Fall, dass Sie nun zusätzliche Sicherheits Prüfungen einführen wollen, können Sie das
folgende Skript von Anthony Towns benutzen. Dieses Skript kann automatisch neue Sicherheits Checks durchführen, damit ein Nutzer sicher gehen kann, dass die Software, die er/sie
herunterlädt, die gleiche ist, wie die, die von Debian bereitgestellt wird. This stops Debian
developers from hacking into someone’s system without the accountability provided by uploading to the main archive, or mirrors mirroring something almost, but not quite like Debian,
or mirrors providing out of date copies of unstable with known security problems.
Dieser Beispiel-Code, umbenannt nach apt-release-check, sollte auf die folgende Art benutzt werden: used in the following way:
# apt-get update
# apt-release-check
(... Ergebnisse ...)
# apt-get dist-upgrade
Zuerst müssen Sie jedoch:
Kapitel 7. Paket signierung unter Debian
95
• Holen Sie sich den Schlüssel, den die Archiv-Software verwendet, um Release-Dateien zu
signieren, http://ftp-master.debian.org/ziyi_key_2002.asc und fügen Sie
ihn ~/.gnupg/trustedkeys.gpg hinzu (was standardmässig von von gpgv benutzt
wird)
• Entfernen Sie alle Zeilen aus /etc/apt/sources.list, die nicht die “dists”-Struktur
benutezn, oder ändern Sie das Skript, so dass es mit denen auch funktioniert
• Ignorieren Sie die Tatsache, dass Sicherheits-Updates von Debian keine signierten
Release-Dateien haben, und das Sources-Dateien (noch) keine richtigen Prüfsummen in
der Release-Datei anbieten.
• Bereiten Sie sich darauf vor, zu prüfen, dass die richtigen sources durch den richtigen
Schlüssel signiert wurden.
#!/bin/bash
# This script is copyright (c) 2001, Anthony Towns
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
rm -rf /tmp/apt-release-check
mkdir /tmp/apt-release-check || exit 1
cd /tmp/apt-release-check
>OK
>MISSING
>NOCHECK
>BAD
arch=‘dpkg --print-installation-architecture‘
am_root () {
[ ‘id -u‘ -eq 0 ]
}
get_md5sumsize () {
cat "$1" | awk ’/^MD5Sum:/,/^SHA1:/’ |
MYARG="$2" perl -ne ’@f = split /\s+/; if ($f[3] eq $ENV{"MYARG"}) {
}
Kapitel 7. Paket signierung unter Debian
96
checkit () {
local FILE="$1"
local LOOKUP="$2"
Y="‘get_md5sumsize Release "$LOOKUP"‘"
Y="‘echo "$Y" | sed ’s/^ *//;s/ */ /g’‘"
if [ ! -e "/var/lib/apt/lists/$FILE" ]; then
if [ "$Y" = "" ]; then
# No file, but not needed anyway
echo "OK"
return
fi
echo "$FILE" >>MISSING
echo "MISSING $Y"
return
fi
if [ "$Y" = "" ]; then
echo "$FILE" >>NOCHECK
echo "NOCHECK"
return
fi
X="‘md5sum < /var/lib/apt/lists/$FILE‘ ‘wc -c < /var/lib/apt/lists/$FI
X="‘echo "$X" | sed ’s/^ *//;s/ */ /g’‘"
if [ "$X" != "$Y" ]; then
echo "$FILE" >>BAD
echo "BAD"
return
fi
echo "$FILE" >>OK
echo "OK"
}
echo
echo "Checking sources in /etc/apt/sources.list:"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo
(echo "You should take care to ensure that the distributions you’re downloadin
echo "are the ones you think you are downloading, and that they are as up to"
echo "date as you would expect (testing and unstable should be no more than"
echo "two or three days out of date, stable-updates no more than a few weeks"
echo "or a month)."
) | fmt
echo
cat /etc/apt/sources.list |
Kapitel 7. Paket signierung unter Debian
97
sed ’s/^ *//’ | grep ’^[^#]’ |
while read ty url dist comps; do
if [ "${url%%:*}" = "http" -o "${url%%:*}" = "ftp" ]; then
baseurl="${url#*://}"
else
continue
fi
echo "Source: ${ty} ${url} ${dist} ${comps}"
rm -f Release Release.gpg
wget -q -O Release "${url}/dists/${dist}/Release"
if ! grep -q ’^’ Release; then
echo " * NO TOP-LEVEL Release FILE"
else
origline=‘sed -n ’s/^Origin: *//p’ Release | head -1‘
lablline=‘sed -n ’s/^Label: *//p’ Release | head -1‘
suitline=‘sed -n ’s/^Suite: *//p’ Release | head -1‘
codeline=‘sed -n ’s/^Codename: *//p’ Release | head -1‘
dateline=‘grep "^Date:" Release | head -1‘
dscrline=‘grep "^Description:" Release | head -1‘
echo " o Origin: $origline/$lablline"
echo " o Suite: $suitline/$codeline"
echo " o $dateline"
echo " o $dscrline"
if [ "${dist%%/*}" != "$suitline" -a "${dist%%/*}" != "$codeli
echo " * WARNING: asked for $dist, got $suitline/$cod
fi
wget -q -O Release.gpg "${url}/dists/${dist}/Release.gpg"
sigline="‘gpgv --status-fd 3 Release.gpg Release 3>&1 >/dev/nu
if [ "$sigline" ]; then
echo " o Signed by: $sigline"
else
echo " * NO VALID SIGNATURE"
>Release
fi
fi
okaycomps=""
for comp in $comps; do
if [ "$ty" = "deb" ]; then
X=$(checkit "‘echo "${baseurl}/dists/${dist}/${comp}/b
Y=$(checkit "‘echo "${baseurl}/dists/${dist}/${comp}/b
if [ "$X $Y" = "OK OK" ]; then
okaycomps="$okaycomps $comp"
Kapitel 7. Paket signierung unter Debian
98
else
echo "
* PROBLEMS WITH $comp ($X, $Y)"
fi
elif [ "$ty" = "deb-src" ]; then
X=$(checkit "‘echo "${baseurl}/dists/${dist}/${comp}/s
Y=$(checkit "‘echo "${baseurl}/dists/${dist}/${comp}/s
if [ "$X $Y" = "OK OK" ]; then
okaycomps="$okaycomps $comp"
else
echo " * PROBLEMS WITH component $comp ($X, $
fi
fi
done
[ "$okaycomps" = "" ] || echo "
echo
o Okay:$okaycomps"
done
echo "Results"
echo "~~~~~~~"
echo
allokay=true
cd /tmp/apt-release-check
diff <(cat BAD MISSING NOCHECK OK | sort) <(cd /var/lib/apt/lists && find . -t
cd /tmp/apt-release-check
if grep -q ^ UNVALIDATED; then
allokay=false
(echo "The following files in /var/lib/apt/lists have not been validated."
echo "This could turn out to be a harmless indication that this script"
echo "is buggy or out of date, or it could let trojaned packages get onto"
echo "your system."
) | fmt
echo
sed ’s/^/
/’ < UNVALIDATED
echo
fi
if grep -q ^ BAD; then
allokay=false
(echo "The contents of the following files in /var/lib/apt/lists does not"
echo "match what was expected. This may mean these sources are out of date
echo "that the archive is having problems, or that someone is actively"
echo "using your mirror to distribute trojans."
if am_root; then
Kapitel 7. Paket signierung unter Debian
99
echo "The files have been renamed to have the extension .FAILED and"
echo "will be ignored by apt."
cat BAD | while read a; do
mv /var/lib/apt/lists/$a /var/lib/apt/lists/${a}.FAILED
done
fi) | fmt
echo
sed ’s/^/
/’ < BAD
echo
fi
if grep -q ^ MISSING; then
allokay=false
(echo "The following files from /var/lib/apt/lists were missing. This"
echo "may cause you to miss out on updates to some vulnerable packages."
) | fmt
echo
sed ’s/^/
/’ < MISSING
echo
fi
if grep -q ^ NOCHECK; then
allokay=false
(echo "The contents of the following files in /var/lib/apt/lists could not
echo "be validated due to the lack of a signed Release file, or the lack"
echo "of an appropriate entry in a signed Release file. This probably"
echo "means that the maintainers of these sources are slack, but may mean"
echo "these sources are being actively used to distribute trojans."
if am_root; then
echo "The files have been renamed to have the extension .FAILED and"
echo "will be ignored by apt."
cat NOCHECK | while read a; do
mv /var/lib/apt/lists/$a /var/lib/apt/lists/${a}.FAILED
done
fi) | fmt
echo
sed ’s/^/
/’ < NOCHECK
echo
fi
if $allokay; then
echo ’Everything seems okay!’
echo
fi
rm -rf /tmp/apt-release-check
Kapitel 7. Paket signierung unter Debian
100
101
Kapitel 8
Sicherheits Tools in Debian
FIXME: More content needed.
Debian stellt ausserdem einige Sicherheits Tools zur Verfügung, die eine Debian Maschine
passend zu Test-Zwecken erweitern. Manche von Ihnen werden zur Verfügung gestellt, wenn
Sie das Paket harden-remoteaudit installieren.
8.1
Tools zur Fern-Prüfung der Verwundbarkeit
Die Werkzeuge um Fern-Prüfungen der Verwundbarkeit durchzuführen unter Debian sind:
• nessus
• raccess
• whisker
• nikto (whisker Ersatz)
• bass (non-free)
• satan (non-free)
Das weitaus vollständigste und aktuellste Tool ist nessus, welcehs aus einem Client
(nessus), als graphische Benutzungsschnittstelle, und einem Server (nessusd), der die programmierten Attacken startet, besteht. Nessus kennt verschiedene Fern-Verwundbarkeiten für
einige Systeme, einschliesslich Netzwerk Geräten, FTP-Servern, WWW-Server, usw. Die letzte
Releases sind sogar in der Lage, eine Web-Seite zu analysieren und zu versuchen, interaktive
Inhalte, die zu einem Angriff genutzt werden können, zu entdecken. Es gibt auch Java und
Win32 Clients (die nicht in Debian enthalten sind), die benutzt werden können, den Server zu
kontrollieren.
Kapitel 8. Sicherheits Tools in Debian
102
Whisker ist ein Web-Basierender Gefährungs-Abschätzungs Scanner, der auch einige antiIDS Taktiken kennt (die meisten davon sind keine Anti-IDS Taktiken mehr). Es ist einer der
besten cgi-Scanner verfügbar, der WWW-Server erkennen und nur bestimmte Angriffe gegen
Ihn starten kann. Die Datenbank die zum scannen benutzt wird, kann sehr leicht geändert
werden, um neue Informationen einzufügen.
Bass (Bulk Auditing Security Scanner) und Satan (Security Auditing Tool for Analysing Networks) müssen eher als “Beweis des Konzeptes” Programme gesehen werden, statt als Tools,
die Sie während einer Prüfung nutzen sollten. Beide sind eher veraltet und werden nicht
auf dem aktuellen Stand gehalten. Wie auch immer: SATAN war das erste Tool, dass eine
Gefahrenabschätzung auf eine einfache Art (GUI) zur Verfügung stellte, und Bass ist immer
noch ein hoch performantes Prüf-Werkzeug.
8.2
Netzwerk-Scan Tools
Debian bietet Ihnen einige Tools zum scannen von Hosts (aber nicht zur Gefahrenabschätzung). Diese Tools sind werden in manchen Fällen von Gefahrenabschätzungs-Scanner
zu einem ersten “Angriff” gegen entfernte Rechner genutzt, um festzustellen, welche Services
angeboten werden. Debian bietet derzeit:
• nmap
• xprobe
• queso
• knocker
• hping2
• isic
• icmpush
• nbtscan
Während queso und xprobe lediglich aus der Ferne das Betriebssystem erkennen können
(indem Sie TCP/IP Fingerabdrücke benutzen), machen nmap und knocker beides: Das Betriebssystem erkennen und die Ports eines entfernt stehenden Rechners scannen. Andererseits
können hping2 und icmpush für ICMP Angriffs Techniken benutzt werden.
Speziell für Netbios Netzwerke entworfen kann nbtscan benutzt werden, um IP-Netzwerke
zu scannen und diverse Informationen von SMB Servern zu ermitteln, einschliesslich: Usernamen, Netzwerknamen, MAC-Adressen. . .
Kapitel 8. Sicherheits Tools in Debian
8.3
103
Interne Prüfungen
Derzeit kann man lediglich das tiger Tool benutzt werden, um interne Prüfungen (auch
“white box” genannt) eines Rechners vorzunehmen, um festzustellen, ob das Dateisystem
richtig aufgesetzt ist, welche Prozesse auf dem Rechner horchen, usw.
8.4
Testen von Quellcode
Debian bietet zwei Pakete, die C/C++ Quellcode prüfen und Programmierfehler, die zu
möglichen Sicherheits-Mängeln führen können, findet:
• flawfinder
• rats
8.5
Virtual Private Networks (virtuelle, private Netzwerke)
FIXME: Content needed
Debian bietet einige Pakete, die zum aufsetzen von verschlüsselten, virtuellen, privaten Netzwerken benutzt werden können:
• vtun
• tunnelv
• cipe
• vpnd
• tinc
• secvpn
• pptp
• freeswan
Das FreeSWAN Paket ist wahrscheinlich die beste Wahl, da es mit so ziemlich allen zusammenarbeiten kann, dass das IP security protocol (IPsec RFC 2411) benutzt, aber die anderen Pakete
können Ihnen helfen, auf die Schnelle einen Tunnel aufzusetzen. PPTP iste in Microsoft Protokoll für VPN. Es wird unter Linux unterstützt, aber es einige schwere Sicherheits Probleme
sind bekannt.
Für mehr Informationen lesen Sie VPN-Masquerade HOWTO (http://www.linuxdoc.
org/HOWTO/VPN-Masquerade-HOWTO.html) (über IPsec und PPTP) VPN HOWTO
Kapitel 8. Sicherheits Tools in Debian
104
(http://www.linuxdoc.org/HOWTO/VPN-HOWTO.html) (über PPP über SSH), und Cipe
mini-HOWTO (http://www.linuxdoc.org/HOWTO/mini/Cipe+Masq.html), PPP and
SSH mini-HOWTO (http://www.linuxdoc.org/HOWTO/mini/ppp-ssh/index.html).
8.6
Öffentliche Schlüssel Infrastrukturen (Public Key Infraestructure (PKI))
Wenn Sie über eine PKI nachdenken, sehen Sie sich mit einer breiten Pallete von Tools konfrontiert:
• Eine Zertifikat Autorität (CA), die Zertifikate ausgeben und unter einer bestimmten Hierarchie arbeiten kann
• Ein Verzeichnis. dass die öffentlichen Zertifikate enthält
• Eine Datenbank, um die Zertifikat Widerrufe zu verwalten
• Geräte, die mit der CA zusammenarbeiten, um smarcards/usb Token/wasauchimmer
zu erzeugen, um Zertifikate sicher zu speichern
• Applikationen, die von einer CA ausgegeben Zertifikate benutzen können, um verschlüsselte Kommikation zu etablieren, und bestimmte Zertifikate gegen Widerruflisten prüfen
können (zur authentifikation und full Single Sign On solutions)
• Eine Zeitstempel Autorität, um Dokumente digital zu signieren
• Eine Verwaltungs-Konsole, von der aus dies alles vernünftig benutzt werden kann (Erstellung von Zertifikaten, Kontrollieren von Widerruflisten, usw. . . )
Sie können einige Software aus Debian GNU/Linux hierfür benutzen, einschliesslich openSSL
(zur Zertifikat Erstellung), OpenLDAP (für ein Verzeichnis um die Zertifikate zu speichern), gnupg und freeswan (mit X.509 Unterstützung). Jedoch stellt dieses Betriebssystem (zur
Woody Release 3.0) keine der frei verfügbaren Certificate Authorities wie zum Beispiel pyCA
OpenCA (http://www.openca.org) oder die CA Beispiele von OpenSSL zur Verfügung.
Für mehr Informationen lesen Sie Open PKI book (http://ospkibook.sourceforge.
net/).
8.7
SSL Infrastruktur
Debian stellt einige SSL-Zertifikate innerhalb der Distribution zur Verfügung, so dass Sie sie
lokal installieren können. SSL Zertifikate werden in ca-certificates weiter verteilt. Diese
Paket stellt eine zentrale Sammelstelle für Zertifikate dar, die an Debian übermittelt und vom
Paket Verwalter gebilligt (das heisst, verifiziert) wurden.
FIXME: read debian-devel to see if there was something added to this.
Kapitel 8. Sicherheits Tools in Debian
8.8
105
Anti-Viren Tools
Es gibt nicht sehr viele Anti-Viren Tools in Debian, wahrscheinlich weil GNU/Linux User
zur Zeit nicht so sehr von Viren belästigt werden. Es gab dennoch Würmer und Viren für
GNU/Linux, auch wenn es (bisher) keinen Virus gab, der sich im freien weit über irgendeine
Debian Distribution verbreitet hat. In jedem Fall möchten Administratoren vielleich Anti-Viren
Gateways aufbauen, oder sich selbst gegen Viren schützen.
Debian bietet derzeit die folgenden Tools zum erstellen von Anti-Viren Umgebungen:
• sanitizer (http://packages.debian.org/sanitizer), ein Tool, das dazu benutzt
werden Emails von Procmail zu filtern und Viren zu entfernen
• amavis-postfix (http://packages.debian.org/amavis-postfix), ein Skript, das
eine Schnittstelle vom Mail-Transport-Agent zu einem oder mehreren Viren-Scannern
anbieten (dieses Paket enthält die Postfix Version).
Wie Sie sehen enthält Debian selbst derzeit keine Anti-Viren Software. Es gibt jedoch
freie Anti-Viren Projekte, die (in der Zukunft) in Debian einfliessen könnten: openantivirus (http://sourceforge.net/projects/openantivirus/) und jvirus (http://
sourceforge.net/projects/jvirus/) (dies ist weniger Wahrscheinlich, da es komplett auf Java basiert) Ausserdem wird Debian nie kommerzielle Anti-Viren Software enthalten, wie die folgende: Panda Antivirus (http://www.pandasoftware.com/
com/linux/linux.asp), NAI Netshield (uvscan) (http://www.nai.com/naicommon/
buy-try/try/products-evals.asp), Sophos Sweep (http://www.sophos.com/),
TrendMicro Interscan (http://www.antivirus.com/products/), RAV (http://www.
ravantivirus.com). . . . Mehr Links finden Sie unter Linux anti-virus software mini-FAQ
(http://www.computer-networking.de/~link/security/av-linux_e.txt).
Mehr Informationen über das Ausetzen eines Viren Erkennungs Systems finden Sie in dem
Artikel von Dave Jones Building an E-mail Virus Detection System for Your Network (http:
//www.linuxjournal.com/article.php?sid=4882).
Kapitel 8. Sicherheits Tools in Debian
106
107
Kapitel 9
Vor einer Komprimitierung
9.1
Aufsetzen einer Eindringlingserkennung
Debian enthält verschiedene Tools zur Erkennung von Eindringlingen, die Sie vielleicht dazu
benutzen wollen, Ihr lokales System zu verteidigen (wenn Sie wirklich paranoid sind oder Ihr
System wirklich kritische ist) or um andere Systeme im gleichen Netzwerk zu verteidigen.
Beachten Sie immer, dass Sie, um Ihre System-Sicherheit mit einerm dieser Tools wirklich
zu verbessern, einen Alarm-und-Antwort-Mechanismus brauchen, also benutzen Sie keinen
Eindringlings-Erkennung, wenn Sie niemanden akarmieren werden (d.H. verschwenden Sie
nicht Ihre Zeit damit, Dinge zu konfigurieren, die Sie später nicht benutzen werden).
Die meisten Eindringlings Erkennungs Tolls werden entweder auf Syslog protokollieren oder
Emails, über einen bestimmten erkannten Angriff, an den Root-User senden (die meisten können umkonfiguriert werden, um stattdessen einem anderen User Emails zu schicken). Ein Administrator muss sie passend konfigurieren, so dass falsche Positivmeldungen keinen Alarme
auslösen, und so diesen Alarmen die notwendige Aufmerksamkeit geschenkt wird. Alarme
können auf einen laufenden Angriff hindeuten und wären - sagen wir mal einen Tag - später
nicht mehr nützlich, da der Angriff dann bereits erfolgreich beendet worden sein kann. Stellen
Sie also sicher, dass es eine passende Regelung über die Behandlung von Alarmen gibt, und
das technische Masnahmen zur Handhabung statt finden.
Eine Interessante Quelle für Information ist CERT’s Intrusion Detection Checklist (http://
www.cert.org/tech_tips/intruder_detection_checklist.html)
9.1.1
Netzwerk basierende Eindringlings Erkennung
Snort ist ein flexibler Packet Schnüffler oder logger, der Angriffe durch nutzen einer AngriffsSignatur-Bibliothek erkennt. Es erkennt eine breite Pallete von Angriffen und Tests, wie zum
Beispiel Speicher-Überläufe, stealth Port scans, CGI Angriffe, SMB Tests und vieles mehr. Dies
iste in Tool, das auf jedem Router installiert werden sollte, um ein Auge auf Ihrem Netzwerk
zu haben. Installieren Sie es einfach mit apt-get install snort, folgen Sie den Fragen
und beobachten Sie die logs.
Kapitel 9. Vor einer Komprimitierung
108
Debians Snort kommt mit vielen eingeschalteten Sicherheits Checks, die Sie vielleicht haben
möchten, jedoch sollten Sie das Setup anpassen, um bestimmte Services auf Ihrem System zu
berücksichten. Sie möchten vielleicht auch zusätzliche Teste speziell für Ihre Services nutzen.
Sie können snort sowohl dazu benutzen, eine Netzwerk-Eindringlings-Erkennung für viele
Hosts in Ihrem Netzwerk zu etablieren, als auch um Angriffe gegen Ihren eigenen Host zu
erkennen.
Es gibt noch andere Tools, die dazu benutzt werden können, Netzwerk Angriffe zu erkennen
(sogar einfacherere). Portsentry ist ein anderes interessantes Paket, dass Sie warnen kann,
wenn jemand Ihre Seite scannt. Andere Tools, wie ippl oder iplogger erkennen ausserdem
bestimmte IP (TCP und ICMP) Angriffe, auch wenn sie keine fortgeschrittenen Techniken zur
Erkennung von Netzwerk Angriffen haben (was snort kann).
Sie können jedes dieser Tools mit dem idswakeup Programm testen. Hierbei handelt es sich
um einen Falsch-Positv Generator, der NIDS mit einer Auswahl der üblichen unter Debian
verfügbaren Angriffs-Signaturen alarmiert.
9.1.2
Host basierende Erkennung
Tiger ist ein bewährtes Eindringlings Erkennungs Toools, dass seit der Woody Distribution
auf Debian portiert wurde. Tiger bietet Tests von allgemein üblichen Dingen, in bezug auf Einbrüche, Tests der Passwort-Stärje, Dateisystem Probleme, kommunizierende Prozesse. . . . Die
Debian Version umfasst neue, Debian spezifische Tests: md5-Summen von vorhandenen binaries, und Test auf installierte und verwundbare Pakete. Die standard Installation lässt tiger
jeden Tag einmal laufen und einen Report erstellen, der an den Superuser geschickt wird. Die
erstellten Reports können Informationen zu einer geglückten Komprimitierung geben.
Protokoll-Analyse Tools, wie zum Beispiel logcheck können zusätzliche benutzt werden,
wenn sie angepasst wurden, um Eindring-Versuche zu erkennen. Siehe ‘Nutzen und anpassen
von logcheck’ auf Seite 52.
Ausserdem kann jeder der Dateisystem-Integritäts-Checker (siehe ‘Prüfen der Integrität des
Dateisystems’ auf Seite 63) können sehr nützlich sein, um Anomalien in einer abgesicherten
Umgebung zu erkennen. Ein erfolgreicher Eindringling wird mit höchster Sicherheit Dateien
auf dem lokalen Dateisystem veröndern, um die lokalen Sicherheits Regelungen zu umgehen,
Trojaner zu installieren, eigene User zu erstellen. . . solche Sachen können mit ihnen erkannt
werden.
9.2
nützliche Kernel-Patches
FIXME: This section needs to cover how these specific patches can be installed in Debian using
the kernel-2.x.x-patch-XXX packages.
Es gibt einige Kernel-Patches, die die System-Sicherheit signifikant erhöhen. Hier sind einige
davon aufgezählt:
Kapitel 9. Vor einer Komprimitierung
109
• OpenWall Patch von Solar Designer. Sinnvoll für Einschränkungen auf Kernel-Ebene,
zum Beispiel bei Links, FIFOs in /tmp, Einschränkungen von /proc, die Behandlung
spezieller Datei Deskriptoren, nicht-ausführbarer Teil des User-Stack und noch mehr.
Homepage: http://www.openwall.com/linux/
• LIDS — Linux intrusion detection system von Huagang Xie & Philippe Biondi. Dieser Patch
macht es einfacher, ein sicheres Linux System zu erstellen. Sie können jeden Prozess
einschränken, ihm bestimmte Rechte zum lesen und Schreiben von Dateien gewägren,
oder die Fähigkeit Dateien zu lesen ganz entfernen. Weiterhin können Sie bestimmte
einem Prozess auf Ressourcen beschränken. Auch wenn er sich noch in der Beta-Phase
befindet, ist er fast schon ein Muss für den paranoiden System-Administrator. Homepage: http://www.lids.org
• POSIX Access Control Lists (ACLs) for Linux Dieser Patch führt Listen zur Zugangs Konrtolle (Access Control Lists (ACLs)), eine fortgeschrittene Methoden die Zugriffe auf
Dateien zu beschränken, in den Linux Kernel ein. Homepage: http://acl.bestbits.
at/
• Linux trustees Dieser Patch bringt ein anständig erweitertes Rechte-System für Ihrem Linux Kernel. All die Objekte werden im Kernel-Speicher abgelegt, was eine schnelles nachschlagen aller Zugriffsrechte erlaubt. Homepage: http://trustees.sourceforge.
net/
• International kernel patch Dies ist ein Kryptographie-Patch für den Kernel, demzufolge
müssen Sie die jeweiligen Richtlinien des Landes über Verschlüsselung beachten. Er stellt
die grundlegenden Funktionen für verschlüsselte Dateisysteme zur Verfügung. Homepage: http://www.kerneli.org
• SubDomain Eine Kernel Erweiterung um sicherere und einfacher bedienbare ChrootUmgebungen aufzusetzen. Sie können alle Dateien, die ein gechrooteter Service benlötigt, manuell angeben, und müssen so die Services nicht statisch compilieren. Homepage: http://www.immunix.org/subdomain.html
• UserIPAcct Eigentlich nicht wirklich Sicherheits relevant erlaubt dieser Patch es Ihnen, Quotas für den Traffic auf Ihrem Server pro User einzuführen. Zusätzlich können Sie Statistiken über den Traffic eines Users erstellen. Homepage: http://ramses.
smeyers.be/useripacct.
• FreeS/WAN Wenn Sie unter Linux IPSec benutzen wollen, benötigen Sie diesen Patch. Sie
können dann leicht VPNs erstellen, sogar zu Windows-Machinen, da IPSec ein gemeinsamer Standard ist. Homepage: http://www.freeswan.org
9.3
9.3.1
Vermeiden von Root-Kits
LKM - Ladbare Kernel-Module
LKM (Loadable Kernel Modules) sind Dateien, die nachladbare Teile des Kernels enthalten.
Sie werden dynamisch in den Kernel geladen und führen bestimmte Aufgaben aus. Unter
Kapitel 9. Vor einer Komprimitierung
110
GNU/Linux werden sie dazu benutzt, die funktionalität des Kernels zu erweitern. Wenn Sie
LKMs benutzen, geniesen Sie einige Vorteile. Wie wir gesehen haben können Sie dynamisch
nachgeladen werden, ohne dass der Kernel neu compiliert werden muss, Sie können bestimmte Geräte-Treiber (oder Dateisysteme) und Treiber für andere Hardware, wie Sound- oder
Netzwerkkarten, enthalten. Aber manche Cracker können LKMs für Root-Kits (knark oder
adore) benutzen, um auf GNU/Linux Systemen Hintertüren zu installieren.
LKM Root-Kits können Prozesse, Dateien, Verzeichnisse und sogar Verbindungen verstecken,
ohne den Quellcode irgendeines Binaries verändern zu müssen. Zum Beispiel kann ps Prozess
Informationen aus /proc beziehen, ein bösartiges LKW kann den Kernel untergraben, so dass
er einen bestimmten Prozess vor dem procfs veheimlicht. So kann noch nicht einmal eine selbsterstellte, unangetastete Kopie des ps Binary alle Prozess Informationen korrekt auflisten.
9.3.2
Erkennen von Root-Kits
Die Sucharbeit kann einfach und schmerzloss sein, oder schwierig und ermüdend, ganz abhängig von der Massnahme, die Sie benutzen. Es gibt zwei Verteidigungsmassnahmen zur
Sicherheit bei LKMs, die proaktive, und die reaktive.
Proaktive Verteidigung
Der Vorteil dieser Verteidigung ist, dass hier verhindert wird, dass einige LKM Root-Kits dem
System schaden. Die meist genutzte proaktive Verteidigung ist es, das Ziel zuerst zu erreichen,
also ein LKM zu laden, das dazu da ist, das System vor Schaden durch ein bösswilliges LKM
zu schützen. Eine andere Massnahme ist es, dem Kernel Fähigkeiten zu entziehen, und so
das System sicherer zu machen. Zum Beispiel können Sie dem Kernel die Fähigkeit entziehen,
Kernel-Module zu laden oder zu entfernen.
Sie können auf Debian Systeme einige Pakete finden, die Proaktive-Tools enthaölten:
• kernel-patch-2.4-lsm - LSM ist das Linux Security Modules framework
• lcap - Eine Benutzerfreundliche Schnittstelle, um dem Kernel Fähigkeiten zu entziehen
(Kernel-basierte Zugriffs-Kontrolle), um das System sicherer zu machen. Führen Sie
lcap CAP_SYS_MODULE 1 aus, um sogar als Root-User keine Module mehr laden zu
können. 2
1
Es gibt über 28 Fähigkeiten einschliesslich: CAP_BSET, CAP_CHOWN, CAP_FOWNER, CAP_FSETID,
CAP_FS_MASK,
CAP_FULL_SET,
CAP_INIT_EFF_SET,
CAP_INIT_INH_SET,
CAP_IPC_LOCK,
CAP_IPC_OWNER, CAP_KILL, CAP_LEASE, CAP_LINUX_IMMUTABLE, CAP_MKNOD, CAP_NET_ADMIN,
CAP_NET_BIND_SERVICE, CAP_NET_RAW, CAP_SETGID, CAP_SETPCAP, CAP_SETUID, CAP_SYS_ADMIN,
CAP_SYS_BOOT, CAP_SYS_CHROOT, CAP_SYS_MODULE, CAP_SYS_NICE, CAP_SYS_PACCT, CAP_SYS_PTRACE,
CAP_SYS_RAWIO, CAP_SYS_RESOURCE, CAP_SYS_TIME, and CAP_SYS_TTY_CONFIG. Alle können aktiviert
oder deaktiviert werden, um Ihren Kernel abzusichern.
2
Um dies tun zu können, müssen Sie nicht lcap installieren, aber es ist so einfacher, als mit der Hand /proc
/sys/kernel/cap-bound anzupassen.
Kapitel 9. Vor einer Komprimitierung
111
Wenn Sie diese vielen Möglichkeiten auf Ihrem GNU/Linux System nicht brauche, möchten
Sie vielleicht die Unterstützung für ladbare Module während der Kernel Konfiguration abschalten. So werden LKM Root-Kits vermieden, aber Sie können nicht mehr modulare Kernel
benutzen. Beachten Sie auch, dass durchd as abschalten der nachladbaren Module der Kernel
überladen werden kann. Manchmal ist dies nicht notwendig.
Um die Unterstützung für nachladbare Module abzuschalten, setzen Sie einfach CONFIG_MODULES=n in .config.
Reaktive Verteidigung
Der Vorteil reaktiver Verteidigung ist, dass is die System Resourcen weniger überlädt. Sie funktioniert durch vergleichen Tabelle für System-Aufrufe mit einer bekanntermassen sauberen
Kopie in einer Date (System.map). Der augenscheinliche Nachteil ist, dass der Systemadministrator erst davon erfährt, wenn das System bereits kompromitiert wurde.
Die Entdeckung von Root-Kits vollbringt unter Debian chkrootkit. Das Programm Chkrootkit (http://www.chkrootkit.org) prüft Anzeichen von Root-Kits auf dem lokalen
System, und stellt fest ob der Computer mit einem Root-Kit infiziert ist.
Sie können auch KSTAT (http://www.s0ftpj.org/en/site.html) (Kernel Security
Therapy Anti Trolls) von S0ftproject group benutzen. KSTAT prüft den Bereich des KernelSpeichers (/dev/kmem) auf Informationen über den Ziel Host, einschliesslich der Installation
von ladbaren Kernel-Modulen.
FIXME: Add info on how to compile the kernel w/o lkm support?
9.4
geniale/paranoide Ideen — was Sie tun können
Dies ist wahrscheinlich der instabilste und lustigste Abschnitt, da ich hoffe, dass manche der
“Wow, das klingt verrückt” Ideen realisiert werden. Nachfolgend einer Liste von ein paar Ideen
— abhängig von Ihrem Standpunkt aus können Sie sie für genial, paranoid, verrückt oder
sicher halten — um Ihre Sicherheit schnell zu erhöhen. Unbeschädigt werden Sie sie aber nicht
überstehen.
• Mit PAM herumspielen. Wie in einem phrack 56 Artikel geschrieben: Das schöne an PAM
ist, dass “Ihrer Fantasie keine Grenzen gesetzt sind.” Das stimmt. Stellen Sie sich vor,
Root kann sich nur mit einen Fingerabdruck, oder Augenscan oder einer Kryptocard
einloggen (Warum habe ich hier nur “oder” und nicht “und” gesagt?) and not AND
here?).
• Faschistisches Logging. Ich würde sagen, dass alles, was wir bisher über Logging besprochen haben, unter “weiches Loggen” fällt. Wenn Sie echtes Logging betreiben
wollen, besorgen Sie sich einen Drucker mit Endlos-Papier, und loggen Sie alles dauerhaft, indem Sie es drucken. Hört sich lustig an, ist aber zuverlässig und kann nicht entfernt werden.
Kapitel 9. Vor einer Komprimitierung
112
• CD Distribution. Diese Idee ist sehr leicht zu realisieren und bewirkt ganz gute Sicherheit. Erstellen Sie eine abgesicherte Debian Distribution, mit passenden Firewall-Regeln,
erstellen Sie ein ISO-Image und brennen Sie es auf CD. Machen Sie die CD bootbar. Dies
ist eine nur lesbare Distribution mit etwa 600 MB Platz für Services, und es ist unmöglich
für einen Eindringling Schreibzugriff auf dieses System zu erhalten. Stellen Sie lediglich
Sicher, dass alle Daten, die geschrieben werden sollen, über Netz gesichert werden. So
kann der Eindringling jedenfalls nicht die Firewall-Regeln oder Routing-Einträge ändern, oder eigene Daemonen starten (natürlich kann er es, aber booten Sie neu, und er
muss sich erneut in Ihr System hacken, um die Änderungen vorzunehmen).
• Schalten Sie die Modul-Fähigkeiten des Kernels ab. Wenn Sie die Nutzung von KernelModulen während der Kernel-Kompilierung abschalten, werden viele Kernel basierende
Hintertüren nicht einsetzbar, da die meisten von ihnen darauf basieren, ein modifiziertes
Kernel Modul zu installieren.
• Loggen über ein serielles Kabel (von Gaby Schilders). So lange Server immernoch serielle
Schnittstellen haben: Stellen Sie sich vor, Sie hätten eien Maschine als Log-Maschine, vom
Netz abgeschnitten. In der Mitte einen Multiplexer für serielle Schnittstellen (zyklisch
oder so). Jetzt sollen alle Ihre Server über ihre seriellen Schnittstellen loggen. Einfach
nur hinschreiben. Die Log-Maschine akzeptiert nur einfachen Text als Eingabe auf seiner seriellen Schnittstelle und schreibt es lediglich in eine Log-Datei. Schliessen Sie einen
CD- oder DVD-Brenner an. Wenn die Log-Datei 600MB erreicht wird sie auf CD-ROM
geschrieben. Wenn es jetzt nur noch CD-Brenner mit automatischem Medien-Wechsel
gäbe. . . Nicht so dauerhaft gespeichert wie ein Ausdruck, aber man kann grössere Mengen hanghaben, und die CDs nehmen nicht so viel Platz weg.
• Setzen Sie den ganzen Kram auf “immutable” (der Tips-HOWTO von Jim Dennis entnommen). Gerade nachdem Sie Ihr System installiert und konfiguriert haben, gehen
Sie durch /bin, /sbin/, /usr/bin, /usr/sbin und /usr/lib (und ein paar andere
von den üblichen Verdächtigen) und gehen Sie freizügig mit chattr +i command um.
Machen Sie dies auch mit den Kernel Dateien. Nun mkdir /etc/.dist/, und kopieren
Sie alles von /etc/ an abwärts dort hinein (ich mach das in zwei Schitten, indem ich
ein /tmp/etcdist.tar benutze um Rekursionen zu verweiden). (Optional können Sie
auch einfach nur ein /etc/.dist.tar.gz erstellen) – und markieren sie alles als “immutable”.
Der Grund für all dies ist den Schaden zu begrenzen, den Sie anrichten können, wenn
Sie als root eingeloggt sind. Sie können keine Dateien mit einer fehlgeleiteten Umleitung
überschreiben, und Sie werden Ihr System nicht durch ein fehlplaziertes Leerzeichen
im rm -fr Kommando unbenutzbar machen (Sie können aber Ihren Daten immernoch
einigen Schaden zufügen — aber Ihre Bibliotheken und Programme sind sicherer).
Dies macht auch verschiedene Sicherheits- und Denial-of-Service Exploits entweder unmöglich oder weitaus schwieriger (da viele von Ihnen darauf beruhen, Dateien durch
die Aktionen von SUID Programmen, die isn’t providing an arbitrary shell command, zu
überschreiben).
Die einzige Unbequemlichkeit dabei ist es, wenn sie irgendetwas bauen und ein make
install auf verschiedene System-Binaries machen. Auf der anderen Seite verhindert
Kapitel 9. Vor einer Komprimitierung
113
dies auch das make install Dateien überschreibt. Wenn Sie vergessen, das Makefile
zu lesen und die Datein, die überschrieben werden sollen mit chattr -i zu behandeln (und
die Verezichnisse, in denen Sie neue Dateien erstellen wollen) - schlägt das make fehl, Sie
müssen nur das chattr Kommando ausführen und make neu aufrufen. Sie können diese
Gelegenheit gleich dazu benutzen, Ihre alten bin’s, libs oder was-auch-immer in ein .oldVerzeichniss zu sichern, oder unzubennenen, oder sie zu taren, oder sowas.
Beachten Sie, dass dies Sie auch daran hindert, die Pakete Ihres Systems upzugraden.
Da die Dateien aus den Paketen nicht überschrieben werden können. Also möchten
Sie veilleicht einen Mechanismus, der das immutable-Flag auf allen Dateien deaktiviert,
bevor Sie ein apt-get update ausführen.
9.4.1
Aufstellen eines Honigtopfes (honeypot)
FIXME: More Content specific to Debian needed.
Wenn Sie wollen (und es implementieren können und ihm Zeit widmen können) können
Sie einen vollen Honeypot mit einem Debian GNU/Linux System aufsetzen. Sie haben alle
benötigten Werkzeuge, um einen allumfassendes Honeynet aufzubauen (d.h. das Netzwerk,
der Honeypot ist lediglich ein falsche Server): Die Firewall, das Netzwerk EindringlingsErkennungssystem, und den falschen Server. Seien Sie aber vorsichtig, Sie müssen ziemlich
sicher sein, dass Sie rechtzeitig alarmiert werden (siehe ‘Die Wichtigkeit von Logs und Alarmen’ auf Seite 52), so dass sie geeignete Massnahmen einleiten können und die Komprimitierung sobald Sie genug gesehen haben beenden können.
• Die Notwendige Firewall-Technologie (durch den Linux-Kernel verfügbar)
• syslog-ng um die Logs des Honeypot zu dem fern-Syslog einer Server-Maschine zu
schicken.
• snort um allen eingehenden Netzwerk Verkehr auf den Honeypot mitzuscheiden und
Angriffe zu erkennen
• osh das Sie dazu benutzen können, um eine eingeschränkte Shell mit Protokoll zu bauen
(siehe den Artikel von Lance Spitzner weiter unten)
• Natürlich alle Server die Ihnen einfallen für die falschen Server des Honeypots (aber
sichern Sie nicht den Honeypot).
• und falsche Services, verfügbar duch dtk, wenn Sie das Honeynet auch als
Eindringlings-Erkennungs-Service benutzen wollen.
• Integritäts Prüfer (siehe ‘Prüfen der Integrität des Dateisystems’ auf Seite 63) und The
Coroner’s Toolkit (tct) um nach dem Angriff eine Analyse durchzuführen.
Sie können mehr über das aufstellen von Honeypots in Lanze Spitzners exzellentem Artikel To Build a Honeypot (http://www.net-security.org/text/articles/
spitzner/honeypot.shtml) (aus der Know your Enemy Serie) oder David Raikow’s
Kapitel 9. Vor einer Komprimitierung
114
Building your own honeypot (http://www.zdnetindia.com/techzone/resources/
security/stories/7601.htm) lesen. Ausserdem ist das Honeynet Project (http://
project.honeynet.org/) dem Aufstellen von Honeypots und der Analyse von Angriffen auf Sie gewidmet. Dort gibt es wertvolle Informationen über das aufsetzen von Honeypots
und die Analyse der Resultate eines Angriffs (sehen Sie sich den Contest an).
115
Kapitel 10
Nach einer Komprimitierung
10.1
Allgemeines Verhalten
Wenn Sie während eines Angriffs physisch present sind, wird es sich nicht dauerhaft nachteilig
auf Ihre Geschäffte auswirken, wenn Sie einfach das Kabel aus der Netzwerkkarte ziehen, bis
Sie herausbekommen, was der Eindringling tat und die Kiste gesichert wurde. Das Netzwerk
auf der untersten Ebenen abzuschalten ist der einzig sichere Weg, um den Angreifer daran zu
hindern, den Rechner zu komprimitieren (Phillip Hofmeisters weiser Ratschlag).
Wenn Sie eine Komprimitierung wirklich schnell reparieren wollen, sollten Sie den komprimitierten Rechner aus dem Netzwerk entfernen, und das Betriebssystem von Grund auf neu
Installieren. Dies könnte natürlich gar nichts bewirken, wenn Sie nicht wissen, wie der Eindringling root-Rechte bekommen hat. In diesem Fall müssen Sie alles prüfen: firewall, Datei
Integrität, Logdateien des Loghost und so weiter. Weitere Informationen was Sie nach einem
Einbruch tun sollten, finden Sie unteer Sans’ Incident Handling Guide (http://www.sans.
org/y2k/DDoS.htm) oder CERT’s Steps for Recovering from a UNIX or NT System Compromise (http://www.cert.org/tech_tips/root_compromise.html).
10.2
Anlegen von Sicherheitskopien Ihres Systems
Vergessen Sie nicht, dass wenn Sie sicher sind, dass das System komprimitiert wurde, Sie weder der installierten Software noch irgendwelchen Informationen, die es an Sie liefert, vertrauen
können. Applikationen könnten von einem Trojaner befallen sein, Kernel Module könnten installiert worden sein, usw.
Das beste das Sie machen können ist eine komplette Sicherheitskopie Ihres Dateisystems
(durch dd) nachdem Sie von einem sicheren Medium gebootet haben. Debian GNU/Linux
CDs können hierzu benutzt werden, da Sie auf Konsole zwei eine Shell anbieten, nachdem die
Installation gestartet ist (mit Alt+2 und Enter aktivieren Sie sie). Die Shell kann zum anlegen
der Sicherheitskopie woanders hin (vielleicht über einen Netzwerk File-Server über NFS/FTP)
benutzt werden, zur Analyse während das System offline ist (oder zu Reinstallation).
Kapitel 10. Nach einer Komprimitierung
116
Wenn Sie sicher sind, dass es sich lediglich um ein trojanisiertes Kernel-Modul handelt, versuchen Sie das Kernel-Image von der CD im rescue Modus zu laden. Stellen Sie ausserdem
sicher, dass Sie im single Modus starten, so dass auch nach dem Kernel keine weiteren trojanisierten Prozesse gestartet werden.
10.3
forensische Analyse
Wenn Sie mehr Informationen sammeln wollen, enthält das Paket tct (The Coroner’s Toolkit
von Dan Farmer und Wietse Venema) Werkzeuge für eine “post mortem” Analyse des Systems. tct erlaubt es dem Benutzer Informationen über gelöschte Dateien, laufende Prozesse
und mehr zu sammeln. Sehen Sie bitte für weiter Informationen in die mitgelieferte Dokumentation.
Forensische Analysen sollten immer auf eine Sicherheitskopie der Daten angewendet werden,
niemals auf die Daten selbst, da Sie durch diese Analyse beeinflusst werden können.
FIXME: This paragraph will hopefully provide more information about forensics in a Debian
system in the coming future.
FIXME: talk on how to do a debsums on a stable system with the md5sums on CD and with
the recovered filesystem restored on a separate partition.
117
Kapitel 11
Frequently asked Questions (FAQ)
Dieses Kapitel führt Sie in ein paar der am häufigsten gestellten Fragen in der SecurityMailing-Liste ein. Sie sollten sie lesen, bevor Sie dort etwas posten, oder die Leute werden
Ihnen lediglich “RTFM!” sagen.
11.1
Sicherheit im Debian Betriebssystem
11.1.1
Ist Debian sicherer als X?
Ein System ist so sicher, wie der Administrator fähig ist, es sicher zu machen. Debian versucht Services auf eine standardmässig sicher-Art zu installieren, und wird nicht versuchen so
paranoid wie andere Betriebssysteme zu sein, die Services auf eine standardmässig abgeschaltetArt installieren. In jedem Fall muss der System-Administrator die Sicherheit des System den
lokalen Sicherheits-Regeln anpassen.
11.1.2
In bugtray gibt es viele Debian-Fehler. Heisst das, es ist sehr gefährdet?
Debian enthält wirklich viele Pakete und unterschiedliche Software, wahrscheinlich sogar
mehr, als mit manch einem propietären Betriebssystem geliefert wird. Die heisst, dass es mehr
potentielle Sicherheits-Angelegenheiten geben kann, als bei einem System mit weniger Software.
Wie auch immer: Es gibt viele Sicherheits-Gutachten in Zusammenhang mit Quell-Code Überprüfungen von grösseren Software-Komponenten, die Debian enthält. Wann immer eine solche
Überprüfung eine grössere Lücke findet, wird er repariert und ein Sicherheitsgutachten wird
al Listen wie bugtraq geschickt.
Fehler, die in der Debian Distribution vorhanden sind, betreffen normalerweise auch andere Lieferanten und andere Distributionen. Prüfen Sie einfach einfach den “Debian specific: yes/no” Eintrag am Anfang jedes Sicherheitsgutachten (DSA, Debian Security Advisory).
Kapitel 11. Frequently asked Questions (FAQ)
118
Wenn dort “yes” steht, betrifft es nur Debian, wenn dort “no” steht, betrifft es wahrscheinlich
auch andere Distributionen.
Debian enthält wirklich viele Pakete, und heutzutage gibt es viele Gruppen die nach
Sicherheits-Problemen in Software suchen (warum auch immer).
11.1.3
Hat Debian irgendein Zertifikat für Sicherheit?
Kurze Antwort: Nein.
Lange Antwort: Zertifikate kosten Geld und niemand hat Resourcen dazu bestimmt, die Debian GNU/Linux Distributionen auf irgendeiner Stufe, beispielsweise der Common Criteria,
zu zertifizieren. Wenn Sie daran interessiert sind, eine zertifizierte GNU/Linux Distribution
zu haben, stellen Sie uns die Resourcen zur Verfügung, um dies Möglich zu machen.
11.1.4
Gibt es irgendein Absicherungsprogramm für Debian?
Ja. Bastille Linux (http://www.bastille-linux.org), ursprünglich an anderen Linux
Distributionen (RedHat und Mandrake) orientiert funktioniert es derzeit auch mit Debian. Es
sind Massnahmen eingeleitet, um die entsprechenden Änderungen auch der ursprünglichen
Version zugute kommen zu lassen. In jedem Fall heisst das Debian-Paket natürlich bastille.
Manche Leute glauben jedoch, dass ein Absicherungsprogramm nicht die Notwendigkeit einer
guten Administration eliminiert.
11.1.5
Ich möchte eine XYZ-Service laufen lassen. Welchen sollte ich benutzen?
Einer der Vorteile von Debian, der die meisten neuen Administratoren verwirren könnte, ist,
dass es eine grosse Zahl von Software, die den gleichen Service anbietet (DNS-Server, MailServer, FTP-Server, Web-Server. . . ) enthält. Wenn Sie wissen wollen, welchen Server Sie installieren sollten, gibt es keine allgemeingültige Antwort. Es hängt wirklich von den benötigten
Fähigkeiten und der benötigten Sicherheit (was eventuell ausbalanciert werden muss) ab.
Dinge, die Sie prüfen sollten:
• Wird es noch vom ursprünglichen Autor gepflegt? (Wann war die letzte Release?)
• Ist er ausgereift? (Die Versions-Nummer sagt nichts aus, versuchen Sie seine Geschichte
nachzuvollziehen)
• Ist er von Fehler durchsetzt? Gab es Sicherheitsgutachten über ihn?
• Stellt er die ganze Funktionalität, die Sie benötigen, zur verfügung? Stellt er mehr zur
Verfügung, als Sie wirklich brauchen? more than you really need?
Kapitel 11. Frequently asked Questions (FAQ)
11.1.6
119
Wie mach ich den Service XYZ unter Debian sicherer?
Sie werden in diesem Dokument Informationen über das Absichern von einigen Servicen
(FTP, Bind) unter Debian GNU/Linux finden. Für Services die hier nicht abgedeckt werden,
prüfen Sie die Programm Dokumentation, oder allgemeine Linux Informationen. Die meisten
Sicherheits-Hinweise für Unix-Systeme sind auch auf Debian anwendbar. So ist das Absichern von Service X unter Debian meistens wie das absichern des Service unter einer anderen
Linux-Distribution (oder Unix, was das betrifft).
11.1.7
Sind alle Debian Pakete sicher?
Das Sicherheits-Team von Debian kann nicht alle Pakete aus Debian auf potentielle SicherheitsLücken hin analysieren, da es einfach nicht genug Resourcen gibt, um allen Quellcode zu
prüfen. Dennoch profitiert Debian von den Quellcode-Prüfungen durch den ursprünglichen
Entwickler oder durch ander Projekte, wie das Linux Kernel Security Audit Project (http:
//kernel-audit.sourceforge.net/) oder das Linux Security-Audit Project (http://
www.lsap.org/).
Tatsächlich könnte ein Debian Developer in einem Paket einen Trojaner verbreiten, und es gibt
keine Möglichkeit das nachzuprüfen. Sogar wenn sie in Debian eingeführt würden, wäre es unmöglich alle möglichen Situationen, in der der Trojaner ausgeführt werden würde, abzudecken.
Dies fällt unter die no guarantees Lizens-Klausel. In jedem Fall können Debian User insofern
Vertrauen fassen, dass der stabile Quellcode eine breite Prüfung hinter sich hat und die meisten Probleme durch Benutzung endeckt worden wären. Es ist in jedem Fall nicht empfohlen
ungetestete Software auf einem wertvollen System zu installeren (wenn Sie nicht die notwendige Code-Prüfung vornehmen können). Und in jedem Fall kann, wenn es zu in die Distribution
eingeführten Sicherheits-Problemen käme, könnte der Prozess zu ihrer Aufnahme (der digitale
Unterschriften benutzt) sicherstelen, dass das Problem letzendlich zu dem Developer zurückgeführt werden kann. Und das Debian Project hat diese Angelegenheiten nie auf die leichte
Schulter genommen.
11.1.8
Betriebssystem User und Gruppen
Sind alle System User notwendig?
Ja und nein. Debian kommt mit einigen für bestimmte Services vordefinierten Usern (ids < 99,
beschrieben in der Debian Policy (http://www.debian.org/doc/debian-policy/)). So
wird das installieren eines neuen Service einfach (das sie dann bereits als ein passender User
laufen). Wenn Sie nicht vorhaben neue Services zu installieren, können Sie die User, denen
keine Dateien gehören und die keine Services auf Ihrem System laufen lassen, entfernen.
Sie können leicht User finden, denen keine Dateien gehören, indem Sie das folgenen Kommando ausführen (stellen Sie sicher, dass Sie es als root ausführen, da ein gemeiner User nicht
genug Zugriffsrechte haben könnte, um ein paar sensitive Verezichnisse zu durchsuchen):
Kapitel 11. Frequently asked Questions (FAQ)
120
cut -f 1 -d : /etc/passwd |
while read i; do find / -user "$i" | grep -q . && echo "$i"; done
Diese User kommen aus dem Paket base-passwd. Sie finden Informationen über die Behandlung dieser User unter Debian in der Dokumentation des Pakets.
Hier folgt nun eine Liste der standard User (mit ihren entsprechenden Gruppen):
• root: Root ist (typischerweise) der Superuser.
• daemon: Ein paar unpriviligierte Daemonen, die ein ein paar Dateien auf die Festplatte
schreiben müssen, laufen als daemon.daemon (portmatp, atd, wahrscheinlich noch andere). Daemonen, die keine eigenen Dateien besitzen mpüssen, können stattdessen als
nobody.nogroup laufen, und komplexere oder Sicherheits-bewusste Daemonen laufen
als eigenständige User. Der daemon User ist wahrscheinlich auch praktisch für lokale
installierte Daemons.
• bin: aus historischen Gründen beibehalten.
• sys: das gleiche wie bei bin. Jedoch gehören /dev/vcs* und /var/spool/cups der
Gruppe sys.
• sync: Die Shell des User syns ist /bin/sync. Wenn das Passwort auf etwas leicht zu
ratendes gesetzt wurde (sum Beispiel “”), kann so jeder das System von der Konsole aus
syncen, auch wenn er keinen Account auf dem System hat.
• games: Viele Spiele sind sgid games, so dass sie ihre Highscores-Dateien schreiben können. Dies wird in der Policy erklärt.
• man: Das Programm man läuft (manchmal) als User man, damit es Cat-Pages nach /var
/cache/man schreiben kann.
• lp: Wird von Druck-Daemonen benutzt.
• mail: Mailboxen unter /var/mail gehören der Gruppe mail, wie in der Policy erklärt
wird. Der User und die Gruppe werden zu verschiedenen anderen Zwecken benutzt und
für verschiedenen MTAs.
• news: Verschiedene News-Server und andere ähnliche Programme (zum Beispiel suck)
benutzen den User und die Gruppe news auf unterschiedliche Weise. Dateien im newsSpool gehören häufig dem User und der Gruppe news. Programme wie inews, die benutzt werden können, um news zu posten, sind normalerweise sgid news.
• uucp: Der uucp User und die uucp Gruppe werdem vom UUCP Subsystem benutzt. Ihnen gehören Spool- und Konfigurations-Dateien. User in der uucp-Gruppe können uucico aufrufen.
• proxy: Wie Daemon wird dieser User und diese Gruppe von manchen Daemonen (insbesondere Proxy-Daemonen) die keinen spezielle User-ID haben und eigene Dateien besitzen müssen. Zum Beispiel wird die Gruppe proxy von pdnsd benutzt, und squid läuft
als User proxy.
Kapitel 11. Frequently asked Questions (FAQ)
121
• majordom: Majordomo hat auf Debian Systemen aus historischen Gründen eine statisch
zugewiesene User-ID.Sie wird auf neuen Systemen nicht installiert.
• postgres: Postgresql Datenbanken gehören diesem User und dieser Gruppe. Alle
Dateien in /var/lib/postgresql gehören diesem User, um anständige Sicherheit zu
gewährleisten.
• www-data: Ein paar Web-Browser laufen als www-data. Web-Inhalte sollten *nicht*
diesem user gehören, oder ein kompromitierter Web-Server wäre in der Lage eine WebSeite zu überschreiben. Daten, die der Web-Server schreibt, einschliesslich Log-Dateien,
gehören www-data.
• backup: So können Backup/Wiederherstellungs Zuständigkeiten lokal an irgendjemanden ohne volle Root-Zugriffe delegiert werden.
• operator: operator ist historisch (und praktisch) der einzige ’user’ Account, der sich ferneinloggen kann, und nicht von NIS/NFS abhängt.
• list: Mailing-Listen-Archive und Daten gehören diesem User und dieser Gruppe. Manche
Mailing-Listen-Programme laufen auch unter diesem User.
• irc: Wird von irc-Daemonen benutzt. Ein statisch zugewiesener User wird nur wegen
eines bugs in ircd benötigt – es setuid sich selbst auf eine bestimmte User-ID beim start.
• gnats.
• nobody, nogroup: Daemonen die keine eigenen Dateien haben laufen als User nobody
und Gruppe nogroup. Demzufolge sollten keine Dateien auf dem gesammten System
diesem User oder zu dieser Gruppe gehören.
Andere Gruppe, die keinen assozierten User haben:
• adm: Die Gruppe adm wird zu Monitor-Zwecken benutzt. Mitglieder dieser Gruppe können viele Dateien in /var/log lesen und die xconsole benutzen. /var/log war früher
einmal /usr/adm (und später /var/adm), daher der Name dieser Gruppe.
• tty: tty-Geräte gehären dieser Gruppe. write und wall benutzen dies, damit sie auf die
ttys anderer Leute schreiben können.
• disk: Roh-Zugriff auf Festplatten. Meistens äquivalent zu Root-Zugriff.
• kmem: /dev/kmem und ähnliche Dateien sind von dieser Gruppe lesbar. Dies ist
grösstenteils ein BSD-Relikt, aber jedes Programm, dass lese Zugriff auf den SystemSpeicher braucht, kann so sgid kmem gemacht werden.
• dialout: Voller und direkter Zugriff auf serielle Schnittstellen. Mitglieder dieser Gruppen
können Modems rekonfigurieren, sich irgendwo einwählen, usw.
• dip: Der Gruppenname steht für “Dialup IP”. In der Gruppe dip zu sein erlaubt Ihnen
Tools wie ppp, dip, wvdial usw. zu benutzen. Die User dieser Gruppe können das Madem nicht konfigurieren, Sie können lediglich Programme aufrufen, die sie benutzen.
Kapitel 11. Frequently asked Questions (FAQ)
122
• fax: Erlaubt es den Mitgliedern Fax-Software zu benutzen um Faxe zu senden und zu
empfangen.
• voice: Voicemail, nützlich für Systeme, die Modems als Anrufbeantworter benutzen.
• cdrom: Diese Gruppe kann dazu benutzt werden, einer bestimmen Menge von User Zugriff auf CDROM-Laufwerke zu geben.
• floppy: Diese Gruppe kann dazu benutzt werden, einer bestimmen Menge von User Zugriff auf Disketten-Laufwerke zu geben.
• tape: Diese Gruppe kann dazu benutzt werden, einer bestimmen Menge von User Zugriff
auf Band-Laufwerke zu geben.
• sudo: Mitglieder dieser Gruppe müssen ihr Passwort eingeben, wenn sie sudo benutzen.
Siehe /usr/share/doc/sudo/OPTIONS.
• audio: Diese Gruppe kann dazu benutzt werden, einer bestimmen Menge von User Zugriff auf jedes Audio-Gerät zu geben.
• src: Dieser Gruppe gehören die Quell-Code, einschliesslich der Dateien in /usr/src. Sie
kann benutzt werden, um einem bestimmten User die Möglichkeit zu bieten, Quell-Code
des Systems zu verwalten.
• shadow: /etc/shadow ist von dieser Gruppe lesbar. Einige Programme, die auf diese
Datei zugreifen müssen, sind sgid shadow.
• utmp: Diese Gruppe kann nach /var/run/utmp und ähnlichen Dateien schreiben. Programme, die darin schreiben können müssen, sind sgid utmp.
• video: Diese Gruppe kann dazu benutzt werden, einer bestimmen Menge von User Zugriff auf ein Vidio-Gerät zu geben.
• staff: Erlaubt Usern lokale Modifikationen zu dem System hinzuzufügen (/usr/local,
/home), ohne dass sie Root-Privilegien bräuchten. Vergleichen Sie mit “adm”, die sich
mehr auf beobachten/absichern bezieht.
• users: Während Debian Systeme standardmässig das User-Gruppen-System (jeder User
hat seine eigene Gruppe) benutzen, ziehen es manche vor, ein traditionelleres Gruppen
System zu benutzen. In diesem System ist jeder User Mitglied der Gruppe “users”.
Was ist der Unterschied zwischen der adm und der staff Gruppe?
’adm’ sind Administratoren und ist meistens nützlich, um ihne zu erlauben, Log-Dateien
zu lesen, ohne su benutzen zu müssen. ’staff’ ist mehr bei den Helpdesk/junior Sysadmins
Leuten nützlich, und gibt ihnen die Möglichkeit, Dinge in /usr/local zu erledigen und
Verzeichnisse in /home anzulegen.
Kapitel 11. Frequently asked Questions (FAQ)
11.1.9
123
Fragen über Services und offene Ports
Warum werden Services während der Installation aktiviert?
Das ist der Annäherung an das Problem auf der einen Seite Sicherheits-Bewusst und auf der
anderen Seite benutzerfreundlich zu sein. Anders als OpenBSD, dass alle Services abschaltet, bis sie vom administrator aktiviert werden, aktiviert Debian GNU/Linux alle installierten
Services, bis sie abgeschaltet werden (siehe dazu ‘Daemon-Services abschalten’ auf Seite 27).
Immerhin haben Sie den Service installiert, oder?
Es gab einige Diskussionen auf Debian Mailing-Listen (sowohl auf debian-devel als auch auf
debian-security), darüber was das standard Setup sein sollte. Jedoch gab es bisher (10. März
2002) keinen Konsens, wie dies behandelt werden sollte.
Kann ich inetd entfernen?
Inetd ist nich leicht zu entfernen, da netbase von dem Paket abhängt, das Inetd enthält
(netkit-inetd). Wenn Sie es entfernen wollen, können Sie es entwerder abschalten (siehe
‘Daemon-Services abschalten’ auf Seite 27) oder das Paket entfernen, indem Sie das Paket
equivs benutzen.
Warum muss ich Port 111 offen haben?
Port 111 ist sunrpcs Portmapper und wird standardmässig bei allen Basis-Installationen eines
Debian Systems, da es keine Möglichkeit gibt, herauszubekommen, wann das Programm eines
Users RPC gebrauchen könnte, um korrekt zu arbeiten. In jedem Fall wird es meistens von NFS
benutzt. Wenn Sie kein NFS benutzen, entfernen Sie es, wie in ‘Abschalten von RPC-Servicen’
auf Seite 84 erklärt.
Wozu ist der identd (Port 113) da?
Identd wird von Administratoren benutzt, um anderen Systemen, die wissen wollen, wer für
eine bestimmte Verbindung verantwortlich ist, zusätzliche Informationen zu einer Userid zur
Verfügung zu stellen. Beachtenswert schliesst dies mail, FTP und IRC Server ein, jedoch kann
es auch dazu benutzt werden, um den User ihrer Systeme zurückzuverfolgen, der einen Angriff gestartet hat.
Es gab ausführliche Diskussionen hierrüber (siehe in den Mailing List Archiven
(http://lists.debian.org/debian-security/2001/debian-security-200108/
msg00297.html). Grundsätzlich gillt: Wenn Sie nicht wissen, was und wozu es ist, aktivieren
Sie es nicht. Aber wenn Sie es firewallen, bitte: Nehmen Sie eine reject-Regel und keine
deny-Regel, oder Kommunikation könnte bis zu einer Zeitüberschreitung hängen (siehe reject
or deny issues (http://logi.cc/linux/reject_or_deny.php3)).
Kapitel 11. Frequently asked Questions (FAQ)
124
Ich habe festgestellt, dass ich den folgenden Port (XYZ) offen habe. Kann ich ihn schliessen?
Natürlich können Sie. Die Ports die Sie offen lassen hängen von Ihrem Regelwerk bezüglich öffentlich zugänglichen Services ab. Prüfen Sie, ob Sie durch inetd (siehe ‘Abschalten von inetdServicen’ auf Seite 28) geöffnet sind, oder durch ein anderes installiertes Paket und leiten Sie
passende Massnahmen ein (konfigurieren von inetd, entfernen des Pakets, vermeiden dass der
Service beim booten gestartet wird. . . )
Ich habe einen Service von /etc/services entfernt, funktioniert das?
Nein, /etc/services zieht einfach nur eine Verbindung zwischen einem virtuellen Namen und einer Port Nummer. Das Entfernen eines Namens wird (meistens) nicht verhindern,
dass ein Service gestartet wird. Manche Daemonen starten vielleicht nicht, wenn Sie /etc
/services ändern, aber das ist nicht die Norm, und es ist nicht der empfohlene Weg einen
Service abzuschalten, siehe ‘Daemon-Services abschalten’ auf Seite 27.
11.1.10
Allgemeine Sicherheits Fragen
Ich habe meine Passwort vergessen und kann auf das System nicht mehr zugreifen!!
Die Schritte, die nötig sind, damit Sie wider Zugriff erhalten, hängen davon ab, ob Sie die
vorgeschlagene Prozedur zum Absichern von Lilo und dem Bios durchgeführt haben oder
nicht.
Wenn Sie beides eingeschränkt haben, müssen Sie im BIOS erlauben, von anderen Medien als
der Festplatte zu booten, bevor Sie weitermachen können. Wenn Sie auch Ihr BIOS-Passwort
vergessen haben, müssen Sie Ihr Gehäuse öfnen, und die Batterie des Bios entfernen.
Wenn Sie von CD-ROM oder Diskette booten können, können Sie:
• von eine Rescue-Disk booten und den Kernel starten
• auf eine virtuelle Konsole wechseln (Alt+F2)
• Die Partition mounten, auf der sich Ihr / befindet
• editieren Sie (die Debian 2.2 Rescue-Disk kommt mit ae, Debian 3.0 kommt mit
nano-tiny, der vi etwas ähnelt) die Datei /etc/shadow und ändern Sie die Zeile:
root:asdfjl290341274075:XXXX:X:XXXX:X::: (X=irgendeien Ziffer)
nach:
root::XXXX:X:XXXX:X:::
Kapitel 11. Frequently asked Questions (FAQ)
125
Dies entfernt das Root-Passwort. Sie können das System starten und sich beim login: Prompt
als Root mit einem leeren Passwort einloggen. Dies funktioniert, es sei denn, Sie haben Ihr
System etwas sicherer eingestellt, d.h. User mit leeren Passwort dürfen sich nicht einloggen
und Root kann sich nicht auf einer Konsole einloggen.
Wenn Sie diese Massnahmen getroffen haben, müssen Sie im singe-Modus starten. Wenn Sie
LILO eingeschränkt haben, müssen LILO erneut ausfrühren, nachdem Sie das Root-Passwort
zurückgesetzt haben. Das ist trickreich, da Ihre /etc/lilo.conf nicht gefunden iwrd, und
Ihr /-Dateisystem eine ramdisk und keine echte Festplatte ist.
Sobald LILO nicht mehr eingeschränkt ist, können Sie:
• Drücken Sie Alt, Shift oder Control, gerade befor das BIOS fertig wird, Sie sollten einen
LILO-Prompt erhalten.
• Geben Sie ’linux single’, ’linux init=/bin/sh’ oder ’linux 1’ am Prompt ein.
• Sie werden einen Shell-Prompt im Single-User-Modus bekommen (Sie werden nach dem
Passwort gefragt werden, aber das kennen Sie jetzt ja)
• Binden Sie die /-Partition im schreib/lese Modus neu ein:
mount -o remount,rw /
• Ändern Sie das Superuser Password mit passwd (da Sie der Superuser sind, werden Sie
nicht nach Ihrem alten Passwort gefragt werden).
11.1.11
Ich möchte meinen Usern einen Service anbieten, Ihnen aber keinen ShellAccount geben.
Wenn Sie einen zum Beispiel einen POP-Service anbieten wollen, müssen Sie nicht für jeden zugreifenden User einen Account anlegen. Am besten setzen Sie hierzu eine Verezichnis-basierte
Authentifizierung durch einen externen Service (wie Radius, LDAP oder eine SQL-Datenbank)
auf. Installieren Sie einfach die gewünschte PAM-Bibliothek (libpam-radius-auth,
libpam-ldap, libpam-pgsql oder libpam-mysql), lesen Sie die Dokumentation (Einsteiger sehen bitte unter ‘User Authentifizierung: PAM’ auf Seite 40 nach), und konfigurieren
Sie den PAM-nutzenden Service, so dass er Ihr Backend benutzt. Dies tun Sie, indem Sie die
dem Service entsprechedne Datei unter /etc/pam.d/ editieren, und die folgendende Zeile
von
auth
required
pam_unix_auth.so shadow nullok use_first_pass
beispielsweise nach ldap ändern:
auth
required
pam_ldap.so
Kapitel 11. Frequently asked Questions (FAQ)
126
Im Fall von LDAP-Verzeichnissen, liefern manche Services LDAP-Schemata mit, die Sie ihrem
Verzeichnis hinzufügen können, um LDAP-Authentifizierung mit Ihnen zu benutzen. Wenn
Sie relationale Datenbanken benutzen, gibt es einen nützlichen Trick: Benutzen Sie die where
Klausel, wenn Sie die PAM-Module konfigurieren. Wenn Sie beispielsweise eine Datenbank
mit der folgenden Tabelle haben:
(user_id,user_name,realname,shell,password,uid,gid,homedir,sys,pop,imap,ftp)
Können Sie die letzen (bool’schen) Werte dazu benutzen, denn Zugriff auf die verschiedenen
Services entweder zu erlauben oder zu verbieten, indem Sie einfach die folgenden Zeilen in
die Dateien hinzufügen:
• /etc/pam.d/imap:where=imap=1.
• /etc/pam.d/qpopper:where=pop=1.
• /etc/nss-mysql*.conf:users.where_clause = user.sys = 1;.
• /etc/proftpd.conf:SQLWhereClause “ftp=1”.
11.2
Mein System ist angreifbar (sicher?)
11.2.1
Ich habe in meinen Logs einen Angriff gesen: Bin ich kompromitiert?
Ein Hinweis auf einen Angriff heistt nicht notwendigerweise, dass Sie gehackt worden sind.
Sie sollten die üblichen Schritte einleiten, um festzustellen, ob das System kompromitiert
wurde (siehe ‘Nach einer Komprimitierung’ auf Seite 115). Beachten Sie auch, dass manchmal
die Tatsache, dass Sie einen Angriff in den Logs sehen, heissen kann, dass sie hierfür angreifbar
sind (ein bestimmter Angreifer könnte übrigens auch andere Angriffe, als die, die Sie gesehen
haben, durchgeführt haben).
11.2.2
Ich habe in meinen Logs merkwürdige “MARK”-Einträge gefunden, bin ich
kompromitiert?
Wenn Ihr System keine hohe Last (und Services) hat, finden Sie vielleicht die folgenden Zeilen
in Ihren System-Logs:
Dec 30 07:33:36 debian -- MARK -Dec 30 07:53:36 debian -- MARK -Dec 30 08:13:36 debian -- MARK -Dies zeigt keine Art der Komprimitierung, und User, die von einer Debian release wechseln,
werden es merkwürdig finden. Es ist in der Tat ein ein Indiz dafür, dass syslogd vernünftig
läuft. Aus syslogd(8):
Kapitel 11. Frequently asked Questions (FAQ)
127
-m interval
The syslogd logs a mark timestamp regularly.
The
default interval between two -- MARK -- lines is 20
minutes. This can be changed with this option.
Setting the interval to zero turns it off entirely.
-m interval
Der Syslogd protokolliert regelmässig einen
Zeitstempel. Der voreingestellte Abstand zwischen zwei -MARK -- Zeilen ist 20 Minuten. Er kann mit dieser Option
geändert werden. Setzen Sie den Abstand auf null, um
die Zeitstempel komplett abzuschalten.
11.2.3
Ich habe User gefunden, die laut meinen Logs su benutzen: Bin ich kompromitiert?
Sie könnten in Ihren Logs Zeilen wie die folgenden finden:
Apr
Apr
1 09:25:01 server su[30315]: + ??? root-nobody
1 09:25:01 server PAM_unix[30315]: (su) session opened for user nobody b
Seien Sie nicht besorgt, und prüfen Sie, ob dies durch eine Job durch Cron entsteht (normalerweise /etc/cron.daily/find oder logrotate):
$ grep 25 /etc/crontab
25 6
* * *
root
test -e /usr/sbin/anacron || run-parts --report
/etc/cron.daily
$ grep nobody /etc/cron.daily/*
find:cd / && updatedb --localuser=nobody 2>/dev/null
11.2.4
Ich bin Opfer eines Einbruchs - was soll ich jetzt tun?
Lesen Sie dieses Dokument und leiten Sie passenden, hier dargestellten massnahmen ein.
Wenn Sie Hilfe benötigen, können Sie auf der debian-security@lists.debian.org Liste Rat suche,
wie Sie Ihr System wiederherstellen/patchen.
11.2.5
Wie kann ich Angriffe aufsprüren?
Durch durchgehen der Logs (wenn Sie nicht geändert wurden), benutzen eines EindringlingErkennungs-Systems (siehe ‘Aufsetzen einer Eindringlingserkennung’ auf Seite 107),
traceroute, whois und ähnliche Tools (einschliesslich forensiche Analyse) können einen
Angriff zu seiner Ursprung zurückverfolgen. Wie Sie auf diese Informationen reagieren hängt
ausschliesslich von Ihren Sicherheits-Regeln ab, und was Sie als Angriff betrachten. Ist ein einfacher Scan ein Angriff? Ist das Prüfen auf eine Verwundbarkeit ein Angriff?
Kapitel 11. Frequently asked Questions (FAQ)
11.2.6
128
Das Programm X ist in Debian angreifbar - was soll ich machen?
Nehmen Sie sich einen Augenblick Zeit, um zu schauen, ob die Angriffsmöglichkeit in
öffentlichen Sicherheits-Mailinglisten (wie Bugtraq) oder anderen Foren bekannt gemacht
wurde. Das Debian-Sicherheits-Team hält sich bei diesen Listen auf dem laufenden, also könnten ihnen dieses Problem bereits bekannt sein. Leiten Sie keine weiteren Massnahmen ein,
wenn Sie schon ein Sicherheits-Gutachten auf http://security.debian.org sehen.
Wenn Sie nichts finden, senden Sie bitte eine Mail mit einer möglichst detailierten Beschreibung des Angriffspunktes (Code, der dies bestätigt ist auch okay) adn security@debian.org.
Dadurch erreichen Sie das Sicherheits-Team.
11.2.7
Laut der Versions-Nummer eines Paketes, läuft bei mir immernoch eine angreifbare Version!
Anstatt auf neue Releases zu aktualisieren, führen wir Sicherheits-Korrekturen auf die Version zurück, die in der stabilen Version enthalten war. Der Grund dafür ist, dass wir sicher
gehen wollen, dass eine stabile Release so wenig wie möglich verändert wird. So werden sich
Dinge nicht unerwartet ändern oder kaputt gehen, als Resultat einer Sicherheits-Korrektur. Sie
können prüfen, ob Sie eine sichere Version eines Paketes benutzen, indem Sie das Changelog
des Paketes durchsehen, oder indem Sie die exakte Versions Nummer (Ursprüngliche Version
-slash- Debian Release) mit der Nummer aus dem Debian Sicherheits-Gutachten vergleichen.
11.2.8
spezielle Software
Proftpd ist für einen “Denial of Service”-Angriff anfällig.
Fügen Sie DenyFilter \*.*/ Ihrer Konfigurations Datei hinzu. Mehr Informationen entnehmen Sie http://www.proftpd.org/critbugs.html.
11.3
Fragen über Debians Sicherheitsteam
11.3.1
Was ist ein Debian Sicherheitsgutachten (Debian Security Advisory, DSA)
Dies sind von Debians Sicherheits Team (siehe Unten) gesendete Informationen über die Verfügbarkeit der Korrektur einer sicherheitsrelevanten Verwundbarkeit für das Debian Betriebs
System. Digital unterschriebene DSAs werden auf eine öffentliche Mailing-Liste gesendet und
auf Debians Web-Seite veröffentlicht (sowohl auf der Hauptseite als auch unter Sicherheitsinformationen (http://www.debian.org/security/)).
DSAs enthalten Informationen über beeinträchtigte Pakete, den entdeckten Fehler und wie
man aktualisierte Pakete bekommt (und ihre md5-Summen).
Kapitel 11. Frequently asked Questions (FAQ)
11.3.2
129
Die digitale Signatur eines Debian Gutachtens kann nicht korrekt verifiziert werden!
Dies ist wahrscheinlich ein Problem an Ihrem Ende. Die debian-security-announce Liste hat
einen Filter vorgeschaltet, der nur Nachrichten durchlässt, die eine korrekte Signatur von
einem Mitglied des Sicherheits Teams enthält.
Wahrscheinlich verändert irgendeine Mail-Software an Ihrem Ende ein wenig und ruiniert
damit die Unterschrift. Stellen Sie sicher, dass Ihre Software keine MIME-Codierung oder Decodierung, oder Tabulatur/Leerzeichen konvertierung durchführt.
Bekannte Schuldige sind fetchmal (mit eingeschalteter mimedecode Option) und formail
(lediglich von procmail 3.14)
11.3.3
Wie werden Sicherheits-Ereignisse in Debian behandelt?
Sobald das Sicherheits-Team eine Notiz über einen Vorfall erhält, prüfen ihn ein oder mehrere
Mitglieder nach, und erwägen, ob Debian/stable angreifbar ist, oder nicht. Wenn unser System angreifbar ist, wird an einer Korrektur für das Problem gearbeitet. Der Paket-Verwalter
wird ebenfalls kontaktiert, wenn er nicht bereits selbst das Sicherheits-Team kontaktiert hat.
Schliesslich wird die Korrektur getestet und ein neues Paket vorbereitet, die dann auf allen
stabilen Architekturen compiliert wird, die dann anschliessend hoch geladen werden. Nachdem all dies getan ist, wird ein Debian Sicherheits Gutachten (DSA) an die öffentliche Mailing
Liste geschickt.
11.3.4
Wieviel Zeit wird Debian brauchen, um die Angriffsmöglichkeit XXXX zu
reparieren?
Eine Analyse der Zeiten, die Debians Sicherheits-Team benötigt, um ein Gutachten zu veröffentlichen und reparierte Pakete zu produzieren nachdem eine Angriffsmöglichkeit bekannt
wird, zeigt, dass es nicht so lange dauert, die Angriffmöglichkeiten in der stabilen Distribution
zu reparieren.
Ein Report in der debian-security Mail-Liste (http://lists.debian.org/
debian-security/2001/debian-security-200112/msg00257.html) zeigt, dass
im Jahr 2001 Debians Sicherheitsteam durchschnittlich 35 Tage benötigte, um eine sicherheitsrelevante Angriffmöglichkeit zu reparieren. Über 50% der Angriffspunkte wurden jedoch
innerhalb eines Zeitrahmens von 10 Tagen beseitigt, und über 15% von ihnen wirden noch am
gleichen Tag repariert.
Dennoch tendieren Leute, die diese Frage stellen, zu vergessen, dass:
• DSAs nicht verschickt werden bis:
– Pakete für alle von Debian unterstützten Architekturen verfügbar sind (dies braucht
etwas Zeit, wenn es Sich um Pakete handelt, die Teil des System-Kerns sind, beson-
Kapitel 11. Frequently asked Questions (FAQ)
130
ders wenn man die Anzahl der in der stabilen Release unterstützten Architekturen
berüksichtigt).
– Neue Pakete gründlich getestet wurden, um sicher zu stellen, dass keine neuen
Fehler eingeführt werden
• Pakete verfügbar sein können, bevor das DSA verschickt wird (in der incomingWarteschlange oder auf den Spiegeln).
• Debian ein Projekt auf freiwilligen Basis ist.
• Es eine “keine Garantie” Klausel gibt, die Teil der Lizens ist, der Debian unterliegt.
11.3.5
Wie wird Sicherheit für testing und unstable gehandhabt?
Die kurze Antwort ist: Gar nicht. Testing und unstable unterliegem einem rapoden Fluss,
und das Sicherheits-Team hat nicht die benötigten Resourcen, die notwendig wären, um diese
richtig zu betreuen. Wenn Sie einen sicheren (und stabilen) Server haben möchten, sind Sie
stark dazu ermutigt, bei stable zu bleiben.
Aber tatsächlich wird unstable normalerweise relativ schnell repariert, da Sicherheitsupdates
für die aktuelle Version durch den ursprünglichen Autor schnell verfügbar sind (während andere Versionen, wie die in stable, normalerweise einen zurück portiert werden müssen).
11.3.6
Warum gibt es keine offiziellen Spiegel für security.debian.org?
Der Zweck von security.debian.org ist es, Sicherheits-Updates möglichst schnell und einfach zur Verfügung zu stellen. Spiegel würden zusätzliche Komplexität einführen, die nicht
benötigt ist, und nur Frustration erzeugt, wenn Sie nicht aktuell gehalten werden.
11.3.7
Ich habe DSA 100 und DSA 102 gesehen, wo ist aber DSA 101?
Verschiedene Distributoren (zumeist von GNU/Linux, aber auch von BSD-Derivaten) koordinieren Sicherheits-Gutachten für verschiedene Vorfälle und haben vereinbart, einen bestimmten Zeitplan einzuhalten, so dass alle Distributoren in der Lage sind, richtig zu prüfen,
ob Sie betroffen sind (oder nicht) und entsprechende Updates erstellen können.
Das Sicherheits-Team von Debian behält in solchen Fällen die Nummer, bevor das Gutachten
freigegeben wird, und so kann es zeitweise passieren, dass die ein andere Nummer fehlt.
11.3.8
Wie kann ich das Sicherheits-Team erreichen?
Sicherheits Informationen können an security@debian.org geschickt werden, damit es von
allen Debian Entwicklern gelesen wird. Wenn Sie sensitive Informationen haben, benutzen
sie bitte team@security.debian.org, damit es nur vom Security-Team gelesen wird. Wenn Sie
es wünschen, kann die Email auch mit dem Debian Security Contact Key (Key-Id 363CCD95)
verschlüsselt werden.
Kapitel 11. Frequently asked Questions (FAQ)
11.3.9
131
Was ist der Unterschied zwischen security@debian.org und debiansecurity@lists.debian.org?
Wenn Sie eine Nachricht an security@debian.org schicken, wird diese an die Developer Mailingliste geschickte (debian-private), die alle Debian Entwickler aboniert haben. Nachrichten an diese Liste werden vertraulich behandelt (d.h. nicht auf einer öffentlichen Webseite
archiviert). debian-security@lists.debian.org ist eine öffentliche Mail-Liste, offen für jeden, der
sie abonieren möchte, und es gibt ein auf den Web-Seiten ein durchsuchbares Archiv.
11.3.10
Wie kann ich Debians Sicherheit-Team unterstützen?
• Indem Sie zu diesem Dokument beitragen, FIXMEs bearbeiten oder neuen Inhalt beisteuern. Dokumentation ist wichtig und reduziert die Überlast durch beantworten allgemeiner Fragen. Übersetzen dieses Dokuments in andere Sprachen ist auch ein grossartiger Beitrag (Anm.d. Übersetzers: Fehlerbereinigen in der Übersetzung auch).
• Indem Sie Apllikationen paketieren, die nützlich ist, um dir Sicherheit eines Debian Systems zu erhöhen / zu prüfen. Wenn Sie kein Entwickler sind, reichen Sie einen WNPP
bug (http://www.debian.org/devel/wnpp/) ein, und fragen Sie nach Software,
von der Sie glauben, dass Sie nützlich wäre, die aber noch nicht zur Verfügung steht.
• Testen Sie Applikationen in Debian oder helfen Sie Sicherheits-Lücken zu schliessen und
teilen Sie Probleme security@debian.org mit. Anderer Projekte Arbeit, wie das Linux Kernel Security Audit Project (http://kernel-audit.sourceforge.net/) oder das
Linux Security-Audit Project (http://www.lsap.org/) erhöhen auch die Sicherheits
von Debian GNU/Linux, da Beitraäge dort, letzten Endes auch hier helfen.
Prüfen Sie bitte in jedem Fall nach, bevor Sie etwas an security@debian.org melden. Wenn
Sie Patches beifügen können, würde das den Prozess natürlich beschleunigen. Leiten Sie nicht
einfach bugtraq Mails weiter, da Sie bereits empfangen werden. Es ist aber eine gute Idee,
zusätzliche Informationen zu schicken.
11.3.11
Aus wem setzt sich das Sicherheits-Team zusammen?
Debians Sicherheit Team besteht derzeit aus fünf Mitgliedern und zwei Sekretären. Das Sicherheits Team lädt Personen selbst ein, beizutreten.
11.3.12
Prüft Debians Sicherheit Team jedes Paket in Debian?
Nein, weder prüft Debians Sicherheit Team jedes neue Paket noch gibt es einen automatischen
(lintian) Test, um böshafte neue Pakete zu entdecken, da solche Dinge praktisch unmöglich
automatisch zu erkennen sind. Paket-Verwalter sind jedoch voll und ganz verantwortlich für
die Software, die in Debian eingeführt wird, und keine Software wird eingeführt, die nicht
zuerst von einem autorisierten Entwickler signiert worden sind. Sie sind dafür verantwortlich
die Software, die sie verwalten, zu analysieren und auf Sicherheit zu achten.
Kapitel 11. Frequently asked Questions (FAQ)
11.3.13
132
Ich habe eine ältere Version von Debian. Wird sie in Bezug auf Sicherheit
noch unterstützt?
Leider nein. Debians Sicherheit-Team kann nicht leider nicht sowohl die stabile Release (inoffiziell also auch unstable) als auch ältere Releases unterstützen. Sie können jedoch SicherheitsUpdates für einen begrenzten Zeitraum (normalerweise mehrere Monate), nachdem eine neue
Debian Distribution veröffentlicht wurde, erwarten.
133
Anhang A
Der Abhärtungsprozess Schritt für
Schritt
Eine Prozedur ist immer nützlich, da Sie Ihnen erlaubt, den gesamten Prozess des Abhärtens
eines Systems zu betrachten und Ihnen erlaubt Entscheidungen zu treffen. Ein möglicher
Versuch für eine solche Prozedur für Debian 2.2 GNU/Linux ist unten aufgeführt. Es ist
eine Nach-Installations Prozedur. Eine Checkliste von Massnahmen, die sie schritt für Schritt
während der Konfiguration durchführen finden Sie unter ‘Konfigurations Checkliste’ auf
Seite 137. Ausserdem ist diese Prozedur (im Augenblick) eher am Absichern von Netzwerk
Servicen orientiert.
• Führen Sie eine Installation auf dem System durch (beachten Sie dabei die Informationen
dieser HowTo bezügliche Partitionierung). Nach der Basis-Installation nehmen Sie eine
angepasste Installation vor, wählen Sie keine Task-Pakete aus, aber aktivieren Sie shadow
passwords.
• Gehen Sie durch dselect und entfernen Sie alle nicht benötigten aber ausgewählten
Pakete bevor sie [I]nstallation wählen. Lassen Sie nur absolut notwendige Software auf
dem Server.
• Aktualisieren Sie alle Software von den aktuellen Paketen auf security.debian.org wie
bereits unter ‘Ausführen von Sicherheitsupdates’ auf Seite 39 beschrieben.
• Implementieren Sie die in dieser Anleitung vorgeschlagenen Massnahmen über User
Quota, Login Definitionen und Lilo.
• Um das abhärten aller Services vorzubereiten, machen Sie eine Liste von allen Servicen,
die derzeit auf Ihrem System arbeiten.
$ ps -aux
$ netstat -pn -l -A inet
# /usr/sbin/lsof -i | grep LISTEN
Kapitel A. Der Abhärtungsprozess Schritt für Schritt
134
Damit das dritte Kommando funktionier werden Sie lsof-2.2 installieren müssen (uns
es als root laufen lassen). Beachten Sie, dass lsof das Wort LISTEN passend zu Ihrer
Lokalisation übersetzen kann.
• Um unnötige Services zu entfernen, stellen Sie zunächst fest, wie er gestartet wird, und
welches Paket ihn zur Verfügung stellt. Sie können dies ganz einfach machen, indem
Sie das Programm prüfen, dass auf einen Socket achtet. Das nachfolgende Beispiel wird
Ihnen zeigen, wie man diese Tolls und dpkg dazu benutzt:
#!/bin/sh
# FIXME: Dies ist nur schnelle und einfache zusammengehackt, und sollte
# durch einen robusteren Skript-Schnipsel ersetzt werden
for i in ‘sudo lsof -i | grep LISTEN | cut -d " " -f 1 |sort -u‘ ; do
pack=‘dpkg -S $i |grep bin |cut -f 1 -d : | uniq‘
echo "Service $i ist durch $pack installiert";
init=‘dpkg -L $pack |grep init.d/ ‘
if [ ! -z "$init" ]; then
echo "und wird durch $init gestartet"
fi
done
• Wenn Sie ungewünschte Services finden, entfernen Sie das Paket (mit dpkg -purge)
oder, wenn er nützlich ist aber nicht beim Starten aktiviert werden soll, benutzen Sie
update-rc.d (siehe ‘Daemon-Services abschalten’ auf Seite 27), um den ihn aus dem
Start-Prozess zu entfernen.
• Für inetd Services (durch den Superdaemon gestartet) können Sie einfach dei aktivierten
Services prüfen, zum Beispiel mit:
$ grep -v "^#" /etc/inetd.conf | sort -u
und deaktivieren Sie diejenigen, die Sie nicht benötigen, indem Sie die Zeile auskommentieren, das Paket entfernen, oder indem Sie update-inetd benutzen.
• Wenn Sie Services eingehüllt haben (und /usr/sbin/tcpd benutzen) prüfen Sie, ob
/etc/hosts.allow und /etc/hosts.deny passend zu Ihrer Service-Regelung konfiguriert sind.
• Wenn möglich, und abhängig von jedem Service, möchten Sie vielleicht die Services
limitieren, wenn Sie mehrere externe Schnittstellen benutzen, damit sie nur auf eines
davon achten. Wenn Sie zum Beispiel internen FTP-Zugriff erlauben, lassen Sie den FTPDaemon nur auf diese Schnittstelle achten, nicht auf alle (d.h. 0.0.0.0:21).
• Booten Sie die Maschine neu, oder wechseln Sie in den Single-User Modus und zurück
in den Multi-User Modus mit:
Kapitel A. Der Abhärtungsprozess Schritt für Schritt
135
$ init 1
(....)
$ init 2
• Prüfen Sie die nun angebotenen Services und wiederholen Sie die letzten Schritte falls
nötig.
• Installieren Sie jetzt die benötigten Services, falls es noch nicht geschehen ist, und konfigurieren Sie sie passend.
• Prüfen Sie, welche User benutzt werden, um angebotenen Services zu starten, zum
Biespiel mit:
$ for i in ‘/usr/sbin/lsof -i |grep LISTEN |cut -d " " -f 1 |sort -u‘;
user=‘ps -ef |grep $i |grep -v grep |cut -f 1 -d " "‘ ; echo "Service $
laeuft als Benutzer $user"; done
und überlegen Sie, ob Sie diese Services zu einem bestimmten User / einer bestimmten
Gruppe ändern wollen und Sie vielleicht auch in eine chroot-Umgebung packer wollen,
um die Sicherheit zu erhöhen. Sie können dies tun, indem Sie die /etc/init.d
Skripte ändern, die den Service starten. Die meisten Services benutzen unter Debian
start-stop-daemon, so dass Sie einfach die –change-uid und –chroot Optionen benutzen können, um diese Services aufzusetzen. Das einpacken eines Services in eine
Chroot-Umgebung würde den Rahmen dieses Dokumentes sprengen, aber ein paar warnende Worte sind nötig: Sie werden wahrscheinlich alle Dateien, die durch das Paket des
Services installiert wurden, unter Benutzung von dpkg -L und der Pakete, von denen es
abhängt, in die Chroot-Umgebung legen müssen.
• Wiederholen Sie die oberen Schritte, um zu prüfen, ob nur die gewünschten Services
laufen und ob sie unter der gewünschten User/Gruppen Kombination laufen.
• Testen Sie die installieren Services, um zu festzustellen, ob Sie wie erwartet arbeiten.
• Checken Sie das System, indem Sie einen Verwundbarkeits-Abschätzungs-Scanner (zum
Beispiel nessus) benutzen, um Angriffmöglichkeiten (Fehlkonfigurationen, alte oder
nicht benötigte Services) zu finden.
• Installieren Sie Netzwerk-Eindringlings-Massnahmen
Massnahmen (wie snort und logsentry).
und
Host-Eindringlings-
• Wiederholen Sie den Netzwerk-Scan und prüfen Sie, ob das Eindringslings-ErkennungsSystem funktioniert.
Dir richtig Paranoiden überlegen sich auch das folgende:
• fügen Sie dem Systen Firewall Fähigkeiten hinzu, die eingehende Verbindungen nur
zu angebotenen Services erlauben und ausgehende Verbindungen auf authorisierte
beschränkt.
Kapitel A. Der Abhärtungsprozess Schritt für Schritt
136
• Überprüfen Sie erneut die Installation auf Angriffspunkte mit einem Netzwerk Scanner.
• Prüfen Sie ausgehende Verbindungen vom System zu Hosts ausserhalb mit einem
Netzwerk-Scanner, um sicherzustellen, dass ungewollte Verbindungen keinen Weg nach
draussen finden.
FIXME: this procedure considers service hardening but not system hardening at the user level,
include information regarding checking user permissions, setuid files and freezing changes in
the system using the ext2 filesystem.
137
Anhang B
Konfigurations Checkliste
Dieser Anhang Anhang wiederholt kurz Punkte aus anderen Abschnitten dieser Anleitung
in einem verdichteten Checklisten Format. Er ist als schnelle Zusammenfassung für Leute
gedacht, die bereits diese Anleitung gelesen haben. Es gibt auch andere Checklisten, Kurt
Seifried hat eine basierend auf dem Kurs Securing Linux Step by Step (http://seifried.
org/security/os/linux/20020324-securing-linux-step-by-step.html) aufgesetzt.
FIXME: This is based on v1.4 of the manual and might need to be updated.
• Schränkgen Sie physischen Zugriff und Boot-Fähigkeiten ein.
– Setzen Sie ein BIOS-Passwort
– Schalten Sie das Booten von Diskette, CD-ROM, . . . ab
– Setzen Sie ein LILO bzw. GRUB Passwort (/etc/lilo.conf bzw. /boot/grub
/menu.lst); prüfen Sie, dass die LILO oder GRUB Konfigurationen nicht einsehbar ist
– Verhindern Sie die Hintertür des Bootens von Diskette durch den MBR, indem Sie
den MBR überschreiben (vielleicht nicht?)
• Parttionierung
– Separieren Sie User-schreibbare Daten, nicht-System Daten und sich ständig ändernde Laufzeit Daten auf ihre eigenen Partitionen
– Setzen Sie nosuid,noexec,nodev Mount-Optionen in die /etc/fstab bei ext2Partitionen, wie zum Beispiel /tmp.
• Passwort-Hygiene und Login-Sicherheit
– Setzen Sie ein gutes Root-Passwort
– Benutzen Sie Shadow- und MD5-Passwords
Kapitel B. Konfigurations Checkliste
138
– Installieren und benutzen Sie PAM
* Fügen Sie PAM MD5 Support hinzu, und stellen Sie sicher (allgemein
gesprochen) dass die Einträge in den /etc/pam.d/ Dateien, die Zugriff auf
die Maschine gewähren, das zweite Feld in der pam.d-Datei auf “requisite”
oder “required” gesetzt haben.
* Ändern Sie /etc/pam.d/login, so dass es nur lokale Root-Logins erlaubt.
* Markieren Sie ausserdem authorisierte ttys in /etc/security
/access.conf und setzen Sie diese Datei überhaupt so auf, dass RootLogins so weit wie möglich eingeschränkt werden.
* Fügen Sie pam_limits.sp hinzu, wenn Sie pro User Einschränkungen
vornehmen wollen.
* Ändern Sie /etc/pam.d/passwd: Setzen Sie die minimum Länge von Passworten hoch (vielleicht sechs Zeichen) und schalten Sie md5 ein.
Wenn
Sie es wünschen, fügen Sie /etc/group die Gruppe wheel hinzu; fügen
*
Sie /etc/pam.d/su pam_whell.so group=wheel hinzu.
* For angepasste pro-User Kontrollen, benutzen Sie pam_listfile.so Einträge, wo
es passt.
* Erstellen Sie eine Datei /etc/pam.d/other und setzen Sie sie mit strenger
Sicherheit auf.
– Setzen Sie in /etc/security/limits.conf Schranken (beachten Sie, dass /etc
/limits nicht benutzt wird, wenn Sie PAM benutzen).
– Festigen Sie /etc/login.defs; wenn Sie MD5 und/oder PAM einschalten
machen Sie auch hier ebenfalls die gleichbedeutenden Änderungen.
– Schalten Sie root FTP-Zugriff in /etc/ftpusers ab.
– Schalten Sie Root-Login übers Netzwerk ab; benutzen Sie su(1) oder sudo(1)
(überlegen Sie die Installation von sudo).
– Benutzen Sie PAM, um zusätzliche Auflagen auf Logins zu ermöglichen.
• Andere Lokale Sicherheits Sachen:
– Kernel Tweaks (siehe ‘Konfigurieren der Netzwerk-Fähigkeiten des Kernels’ auf
Seite 56)
– Kernel Patches (siehe ‘nützliche Kernel-Patches’ auf Seite 108)
– Festigen der Zugriffsrechte auf Log-Dateien (/var/log/{last,fail}log,
Apache Logs)
– Verifizieren Sie, dass in /etc/checksecurity.conf setuid Checks eingeschaltet
sind.
– Überlegen Sie sich, an Log-Dateien nur anhängen zu lassen (append-only) und
Konfigurations-Dateien unveränderbar (immutable) zu machen, indem Sie chattr
benutzen (nur ext2 Dateisystem)
– Setzen Sie Datei-Integritäts-Test aus (siehe ‘Prüfen der Integrität des Dateisystems’
auf Seite 63). Installieren Sie debsums.
Kapitel B. Konfigurations Checkliste
139
– Überlegen Sie, locate durch slocate zu ersetzen.
– Alles auf einem lokalen Drucker mitloggen?
– Brennen Ihrer Konfiguration auf eine bootbare CD und hier von booten?
– Abschalten von Kernel-Modulen?
• Beschränken von Netzwerk Zugriff
– Installieren und konfigurieren Sie ssh (Vorschlag: PermitRootLogin No in /etc
/ssh/sshd_config, PermitEmptyPasswords No; beachten Sie auch die anderen
Vorschläge im Text).
– Überlegen Sie, ob Sie telnetd abschalten (in /etc/inetd.conf, benutzen Sie
update-inetd --disable (oder schalten Sie inetd ganz ab, oder benutzen Sie
einen Ersatz wie xinetd oder rlinetd)) oder entfernen.
– Schalten Sie andere überflüssig Netzwerk Services ab; mail, ftp, DNS, www usw.
sollten nicht laufen, wenn Sie sie nicht brauchen und nicht regelmässig überwachen.
– Bei den Servicen, die Sie brauchen, installieren Sie nicht die weitverbreitesten Programme, sondern schauen Sie für sicherere Versionen, die Debian liefert (oder aus
anderen Quellen). Was auch immer Sie schliesslich benutzen: Gehen Sie sicher, dass
Sie die Risiken verstanden haben.
– Setzen Sie Chroot-Umgebungen für äusswärtige User und Daemonen auf
– Konfigurieren Sie Firewall und tcp-Wrapper (d.h. hosts_access(5)); beachten
Sie den Trick für /etc/hosts.deny im Text.
– Wenn Sie FTP laufen lassen, setzen Sie den ftpd-Server so auf, dass er immer als
chroot im Heimat-Verzeichnis des Users läuft.
– Wenn Sie X laufen lasen, schalten Sie xhost authentifizierung ab und benutzen Sie
stattdessen ssh; oder noch besser. Ignorieren Sie weitergeleitete X komplett, wenn
Sie können (hinzufügen von -nolisten tcp zu der X Kommando-Zeile und schalten
Sie XDMCP in /etc/X11/xdm/xdm-config ab, indem Sie den requestPort auf 0
setzen)
– Schalten Sie Zugriff von Ausserhalb auf den Drucker ab
– Tunneln Sie alle IMAP Oder POP Sitzungen durch SSL oder SSH; installieren Sie
stunnel, wenn Sie diesen Service anderen Mail-Usern anbieten wollen
– Setzen Sie einen Log-Host auf, und konfigurieren Sie andere Maschinen, ihre Logs
an diesen Host zu senden (/etc/syslog.conf)
– Sichern Sie BIND, Sendmail und andere komplexe Daemonen (starten in einer
chroot-Umgebung; starten als nicht-Root pseudo-User)
– Installieren Sie snort oder ein ähnliches Überwachungs Tools)
– Verzichten Sie, falls möglich, auf NIS Und RPC (abschalten von portmap).
• Policy Angelegenheiten
Kapitel B. Konfigurations Checkliste
140
– Klären Sie die User über das Warum und Wie Ihrer Regelungen auf. Wenn Sie etwas
verboten haben, dass auf anderen Systemen normalerweise verfügbar ist, stellen Sie
Dokumentation bereit, die erklärt, wie man gleiche Resultate erreicht, indem man
andere, sichere Mittel anwendet.
– Verbieten Sie die Nutzung von Protokollen, die Klartext Passwörtet benutzen (telnet, rsh und Freunde, ftp, imap, pop, http, . . . ).
– Verbieten Sie Programme, die SVGAlib benutzen.
– Benutzen Sie Disk-Quotas.
• Bleiben Sie über Sicherheits Angelegenheiten informiert
– Abonieren Sie sicherheits relevante Mailing-Listen
– Abonieren Sie sicherheits Updates – fügen Sie /etc/apt/sources.list einen
Eintrag (oder Einträge) für http://security.debian.org/debian-security
– Erinnern Sie sich auch regelmässig apt-get update ; apt-get upgrade
(vielleicht per Cron-Job?) wie unter ‘Ausführen von Sicherheitsupdates’ auf Seite 39
beschrieben laufen zu lassen.
141
Anhang C
Aufsetzen eines autonomen IDS
Sie können sehr leicht eine Debian-Box als eigenständiges Eindringlings-Erkennungs-System
(Intrusion Detection System, IDS) aufsetzen, wen Sie snort benutzen.
Ein paar Richtlinien:
• Installieren Sie ein Debian Basis-System ohne zusätzliche Pakete.
• Laden Sie notwendige Pakete (siehe die Liste der installierten Pakete weiter unten)
manuell herunter und installieren Sie sie (mit dpkg)
• Laden Sie ACID (Analysis Console for Intrusion Databases, Analyse Konsole für Eindringling Datenbanken) herunter und installieren Sie es
ACID wird derzeit mit acidlab für Debian paketiert, und stellt eine graphische WWW
Schnittstelle zur Ausgabe von Snort zur verfügung. Es kann von http://www.cert.
org/kb/acid/, http://acidlab.sourceforge.net oder http://www.andrew.cmu.
edu/~rdanyliw/snort/ heruntergeladen werden. Sie möchten vielleicht die Snort
Statistics HOWTO (http://www.linuxdoc.org/HOWTO/Snort-Statistics-HOWTO/
index.html) lesen.
Dieses System sollte mit wenigstens Zwei Netzwerk-Schnittstellen ausgestatten sein: Eine mit
dem Verwaltungs-LAN verbunden (um die Resultate abzufragen und das System zu verwalten), und eines ohne ip-Adresse, das an mit dem zu beobachtenden Netzwerk-Segment verbunden ist.
Sie können normalerweise nicht die standard Debian Datei /etc/network/interfaces benutzen, um die Netzwerk-Karten zu konfigurieren, da ifup und ifdown mehr Informationen
erwarten, als benötigt werden. Benutzen Sie einfach ifconfig ethX up.
Abgesehen von der standard Debian installation benötigen Sie Apache, MySQL und PHP4
damit ACID funktioniert. Laden Sie die Pakete herunter (Beachten Sie: Die Versionen können
abhängig von der verwendeten Debian Distribution variieren, diese sind von Debian Woody
September 2001):
Kapitel C. Aufsetzen eines autonomen IDS
ACID-0.9.5b9.tar.gz
adduser_3.39_all.deb
apache-common_1.3.20-1_i386.deb
apache_1.3.20-1_i386.deb
debconf_0.9.77_all.deb
dialog_0.9a-20010527-1_i386.deb
fileutils_4.1-2_i386.deb
klogd_1.4.1-2_i386.deb
libbz2-1.0_1.0.1-10_i386.deb
libc6_2.2.3-6_i386.deb
libdb2_2.7.7-8_i386.deb
libdbd-mysql-perl_1.2216-2_i386.deb
libdbi-perl_1.18-1_i386.deb
libexpat1_1.95.1-5_i386.deb
libgdbmg1_1.7.3-27_i386.deb
libmm11_1.1.3-4_i386.deb
libmysqlclient10_3.23.39-3_i386.deb
libncurses5_5.2.20010318-2_i386.deb
libpcap0_0.6.2-1_i386.deb
libpcre3_3.4-1_i386.deb
libreadline4_4.2-3_i386.deb
libstdc++2.10-glibc2.2_2.95.4-0.010703_i386.deb
logrotate_3.5.4-2_i386.deb
mime-support_3.11-1_all.deb
mysql-client_3.23.39-3_i386.deb
mysql-common_3.23.39-3.1_all.deb
mysql-server_3.23.39-3_i386.deb
perl-base_5.6.1-5_i386.deb
perl-modules_5.6.1-5_all.deb
perl_5.6.1-5_i386.deb
php4-mysql_4.0.6-4_i386.deb
php4_4.0.6-1_i386.deb
php4_4.0.6-4_i386.deb
snort_1.7-9_i386.deb
sysklogd_1.4.1-2_i386.deb
zlib1g_1.1.3-15_i386.deb
Installierte Pakete (dpkg -l):
ii
ii
ii
ii
ii
ii
adduser
ae
apache
apache-common
apt
base-config
3.39
962-26
1.3.20-1
1.3.20-1
0.3.19
0.33.2
142
Kapitel C. Aufsetzen eines autonomen IDS
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
base-files
base-passwd
bash
bsdutils
console-data
console-tools
console-toolscron
debconf
debianutils
dialog
diff
dpkg
e2fsprogs
elvis-tiny
fbset
fdflush
fdutils
fileutils
findutils
ftp
gettext-base
grep
gzip
hostname
isapnptools
joe
klogd
ldso
libbz2-1.0
libc6
libdb2
libdbd-mysql-p
libdbi-perl
libexpat1
libgdbmg1
libmm11
libmysqlclient
libncurses5
libnewt0
libpam-modules
libpam-runtime
libpam0g
libpcap0
libpcre3
libpopt0
2.2.0
3.1.10
2.03-6
2.10f-5.1
1999.08.29-11.
0.2.3-10.3
0.2.3-10.3
3.0pl1-57.2
0.9.77
1.13.3
0.9a-200105272.7-21
1.6.15
1.18-3.0
1.4-11
2.1-6
1.0.1-5
5.3-3
4.1-2
4.1-40
0.10-3.1
0.10.35-13
2.4.2-1
1.2.4-33
2.07
1.21-2
2.8-15.2
1.4.1-2
1.9.11-9
1.0.1-10
2.2.3-6
2.7.7-8
1.2216-2
1.18-1
1.95.1-5
1.7.3-27
1.1.3-4
3.23.39-3
5.2.20010318-2
0.50-7
0.72-9
0.72-9
0.72-9
0.6.2-1
3.4-1
1.4-1.1
143
Kapitel C. Aufsetzen eines autonomen IDS
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
ii
libreadline4
libssl09
libstdc++2.10
libstdc++2.10libwrap0
lilo
locales
login
makedev
mawk
mbr
mime-support
modutils
mount
mysql-client
mysql-common
mysql-server
ncurses-base
ncurses-bin
netbase
passwd
pciutils
perl
perl-base
perl-modules
php4
php4-mysql
ppp
pppconfig
procps
psmisc
pump
sed
setserial
shellutils
slang1
snort
ssh
sysklogd
syslinux
sysvinit
tar
tasksel
tcpd
telnet
textutils
4.2-3
0.9.4-5
2.95.2-13
2.95.4-0.01070
7.6-4
21.4.3-2
2.1.3-18
19990827-20
2.3.1-46.2
1.3.3-5
1.1.2-1
3.11-1
2.3.11-13.1
2.10f-5.1
3.23.39-3
3.23.39-3.1
3.23.39-3
5.0-6.0potato1
5.0-6.0potato1
3.18-4
19990827-20
2.1.2-2
5.6.1-5
5.6.1-5
5.6.1-5
4.0.6-4
4.0.6-4
2.3.11-1.4
2.0.5
2.0.6-5
19-2
0.7.3-2
3.02-5
2.17-16
2.0-7
1.3.9-1
1.7-9
1.2.3-9.3
1.4.1-2
1.48-2
2.78-4
1.13.17-2
1.0-10
7.6-4
0.16-4potato.1
2.0-2
144
Kapitel C. Aufsetzen eines autonomen IDS
ii
ii
ii
update
util-linux
zlib1g
2.11-1
2.10f-5.1
1.1.3-15
145
Kapitel C. Aufsetzen eines autonomen IDS
146
147
Anhang D
Aufsetzen einer Überbrückenden
Firewall (bridge Firewall)
Diese Informationen trug Francois Bayart bei, um User zu helfen, eine Linux Bridge / Firewall
mit 2.4.x Kernel und iptables aufzusetzen. Es wird lediglich noch der Bridge-Firewall-Patch
benötigt, den Sie auf der sourceforge download page (http://bridge.sourceforge.
net/download.html) finden.
Wenn Sie zum Beispiel einen 2.4.18er Kernel benutzen, müsen Sie den entsprechenden patch (http://bridge.sourceforge.net/devel/bridge-nf/bridge-nf-0.0.
6-against-2.4.18.diff) herunterladen und anschliessend auf die installierten KernelQuellen anwenden:
Zipowz:/usr/src# apt-get install kernel-source-2.4.18
Zipowz:/usr/src# cd kernel-source-2.4.18
Zipowz:/usr/src/kernel-source-2.4.18# patch -p1 < ../bridge-nf-0.0.6-against-2
patching file include/linux/netfilter.h
patching file include/linux/netfilter_ipv4.h
patching file include/linux/skbuff.h
patching file net/bridge/br.c
patching file net/bridge/br_forward.c
patching file net/bridge/br_input.c
patching file net/bridge/br_netfilter.c
patching file net/bridge/br_private.h
patching file net/bridge/Makefile
patching file net/Config.in
patching file net/core/netfilter.c
patching file net/core/skbuff.c
patching file net/ipv4/ip_output.c
patching file net/ipv4/netfilter/ip_tables.c
patching file net/ipv4/netfilter/ipt_LOG.c
Kapitel D. Aufsetzen einer Überbrückenden Firewall (bridge Firewall)
148
Jetzt rufen Sie die Kernel-Konfiguration auf (mit Ihrer lieblings Methode: make menuconfig,
make xconfig, . . . ). Aktivieren Sie diese Optionen unter Networking option:
[*] Network packet filtering (replaces ipchains)
[ ]
Network packet filtering debugging (NEW)
<*> 802.1d Ethernet Bridging
[*]
netfilter (firewalling) support (NEW)
Passen Sie auf, dass Sie dieses hier deaktiviert haben, wenn Sie Firewall-Regeln anwenden
wollen, oder iptables funktioniert nicht.
[ ]
Network packet filtering debugging (NEW)
Anschliessend müssen Sie die korrekten Optionen im Abschnitt IP: Netfilter Configurationsetzen. Dann kompilieren und installieren Sie den Kernel. Wenn Sie dies auf die Debian
Art machen wollen, installieren Sie kernel-package und benutzen Sie make-kpkg um
ein neues Debian Paket zu erstellen, das Sie auf Ihrem Server installieren können (oder auf
einem anderen System benutzen können). Sobald der neue Kernel kompiliert und installiert
ist, müssen Sie die bridge-utils installieren.
Jetzt können Sie zwei verschiedene Konfigurationen betrachten, die Ihnen zeigen, wie sie das
konfigurieren können, sobald diese Schritte erledigt sind. Beide Konfigurationen sind mit einer
Netzwerk-Karte und den notwendigen Kommandos zur konfiguration der Bridge aufgeführt.
D.1
Eine Bridge mit NAT- und Firewall-Fähigkeiten
Die erste benutzt eine Bridge als Firewall mit Network Address Translation (NAT), die einen
Server und interne LAN-Clienten schützt.
Internet ----- router ( 62.3.3.25 ) ----- bridge ( 62.3.3.26 gw 62.3.3.25 / 19
|
|
|---- WWW-Server ( 62.3.3.27 gw 62
|
|
LAN --- Zipowz ( 192.168.0.2 gw 192
Diese Kommandos zeigen, wie die Bridge konfiguriert werden kann:
# So wird die Schnittstelle br0 erstellt:
/usr/sbin/brctl addbr br0
# Hinzufügen der Ethernet-Schnittstellen, die die Bridge benutzen
Kapitel D. Aufsetzen einer Überbrückenden Firewall (bridge Firewall)
149
# soll
/usr/sbin/brctl addif br0 eth0
/usr/sbin/brctl addif br0 eth1
# Die Schnittstellen einfach starten
/sbin/ifconfig eth0 0.0.0.0
/sbin/ifconfig eth1 0.0.0.0
#
#
#
#
#
#
Konfigurieren der Ethernet-Bridge
Die Bridge wird korrekt und unsichtbar (transparente Firewall) sein.
In einem traceroute ist Sie versteckt, und Sie behalten Ihr echtes
Gateway auf Ihren anderen Computern. Jetzt können Sie ein Gateway
auf Ihrer Bridge konfigurieren und es auf Ihren anderen Computern als
neues Gateway einsetzen
/sbin/ifconfig br0 62.3.3.26 netmask 255.255.255.248 broadcast 62.3.3.32
# Ich habe benutze diese internen IPs für mein NAT
ip addr add 192.168.0.1/24 dev br0
/sbin/route add default gw 62.3.3.25
D.2
Eine Bridge mit Firewall Fähigkeiten
Dieses System ist als transparente Firewall für ein LAN mit öffentlichen IP-Addressen aufgesetzt.
Internet ----- router ( 62.3.3.25 ) ----- bridge ( 62.3.3.26 )
|
|
|---- WWW Server ( 62.3.3.28 gw 62
|
|
|---- Mail Server ( 62.3.3.27 gw 6
Diese Kommandos zeigen, wie die Bridge konfiguriert werden kann:
# So wird die Schnittstelle br0 erstellt:
/usr/sbin/brctl addbr br0
# Hinzufügen der Ethernet-Schnittstellen, die die Bridge benutzen
# soll
/usr/sbin/brctl addif br0 eth0
/usr/sbin/brctl addif br0 eth1
Kapitel D. Aufsetzen einer Überbrückenden Firewall (bridge Firewall)
150
# Die Schnittstellen einfach starten
/sbin/ifconfig eth0 0.0.0.0
/sbin/ifconfig eth1 0.0.0.0
#
#
#
#
#
#
Konfigurieren der Ethernet-Bridge
Die Bridge wird korrekt und unsichtbar (transparente Firewall) sein.
In einem traceroute ist Sie versteckt, und Sie behalten Ihr echtes
Gateway auf Ihren anderen Computern. Jetzt können Sie ein Gateway
auf Ihrer Bridge konfigurieren und es auf Ihren anderen Computern als
neues Gateway einsetzen
/sbin/ifconfig br0 62.3.3.26 netmask 255.255.255.248 broadcast 62.3.3.32
Wenn Sie traceroute auf den Linux-Mail-Server schicken, sehen Sie die Bridge nicht, wenn Sie
mit ssh auf die Bridge zugreifen wollen, müssen Sie ein Gateway haben, oder erst auf einen
anderen Server, wie den “Mail Server”, zugreifen um dann über die interne Netzwerkkarte
auf die Bridge zuzugreifen.
D.3
grundlegende Iptables-Regeln
Dies ist ein Beispiel für grundlegende Regeln, die für beide Beispiele benutzt werden könnten:
iptables
iptables
iptables
iptables
#
#
#
#
#
#
-F
-P
-A
-A
FORWARD
FORWARD DROP
FORWARD -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -m state --state INV
FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
Zwei lustige Regeln, aber nicht bei klassischen Iptables. Sorry ...
Limit ICMP
iptables -A FORWARD -p icmp -m limit --limit 4/s -j ACCEPT
Uebereinstimmende Strings, eine gute, einfache Methode, um Viren sehr
schnell abzublocken
iptables -I FORWARD -j DROP -p tcp -s 0.0.0.0/0 -m string --string "cmd.exe"
# Abblocken aller MySQL Verbindingen, nur um ganz sicher zu gehen
iptables -A FORWARD -p tcp -s 0/0 -d 62.3.3.0/24 --dport 3306 -j DROP
# Regeln für den Linux Mail Server
#
# Erlaube FTP-DATA ( 20 ) , FTP ( 21 ) , SSH ( 22 )
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 62.3.3.27/32 --dport 20:22 -j ACCEP
Kapitel D. Aufsetzen einer Überbrückenden Firewall (bridge Firewall)
151
# Dem Mail-Server erlauben, sich mit der Aussenwelt zu verbinden
# Beachten Sie: Dies ist *nicht* fuer die vorherigen Verbindungen
# notwendig (Erinnern Sie sich: stateful filtering) und koennte entfernt
# werden:
iptables -A FORWARD -p tcp -s 62.3.3.27/32 -d 0/0 -j ACCEPT
# Regeln fuer den WWW-Server
#
# Erlaube HTTP ( 80 ) Verbindungen mit dem WWW-server
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 62.3.3.28/32 --dport 80 -j ACCEPT
# Erlaube HTTPS ( 443 ) Verbindungen mit dem WWW-server
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 62.3.3.28/32 --dport 443 -j ACCEPT
# Dem WWW-Server erlauben, sich mit der Aussenwelt zu verbinden
# Beachten Sie: Dies ist *nicht* fuer die vorherigen Verbindungen
# notwendig (Erinnern Sie sich: stateful filtering) und koennte entfernt
# werden:
iptables -A FORWARD -p tcp -s 62.3.3.28/32 -d 0/0 -j ACCEPT
Kapitel D. Aufsetzen einer Überbrückenden Firewall (bridge Firewall)
152
153
Anhang E
Beispiel Skript, um die standard
Installation von Bind zu ändern
Dieses Skript automatisiert die Prozedur, die standard Installation des Name-Server zu ändern,
so dass er nicht als Superuser läuft. Benutzen Sie es vorsichtig, da es nicht ausreichend getestet
wurde. Dieses Skript wird auch den User und die Gruppe für den Name-Server erstellen.
#!/bin/sh
# Change the default Debian bind configuration to have it run
# with a non-root user and group.
#
# WARN: This script has not been tested throughly, please
# verify the changes made to the INITD script
# (c) 2002 Javier Fernandez-Sanguino Peña
#
#
This program is free software; you can redistribute it and/or modify
#
it under the terms of the GNU General Public License as published by
#
the Free Software Foundation; either version 1, or (at your option)
#
any later version.
#
#
This program is distributed in the hope that it will be useful,
#
but WITHOUT ANY WARRANTY; without even the implied warranty of
#
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#
GNU General Public License for more details.
#
#
Please see the file ‘COPYING’ for the complete copyright notice.
#
restore() {
# Just in case, restore the system if the changes fail
echo "WARN: Restoring to the previous setup since I’m unable to properly chan
Kapitel E. Beispiel Skript, um die standard Installation von Bind zu ändern
154
echo "WARN: Please check the $INITDERR script."
mv $INITD $INITDERR
cp $INITDBAK $INITD
}
USER=named
GROUP=named
INITD=/etc/init.d/bind
INITDBAK=$INITD.preuserchange
INITDERR=$INITD.changeerror
START="start-stop-daemon --start --quiet --exec /usr/sbin/named -- -g $GROUP AWKS="awk ’ /start-stop-daemon --start/ { print \"$START\"; noprint = 1; }; /\
[ ‘id -u‘ -ne 0 ] && {
echo "This program must be run by the root user"
exit 1
}
RUNUSER=‘ps -eo user,fname |grep named |cut -f 1 -d " "‘
if [ "$RUNUSER" = "$USER" ]
then
echo "WARN: The name server running daemon is already running as $USER"
echo "ERR: This script will not many any changes to your setup."
exit 1
fi
if [ ! -f $INITD ]
then
echo "ERR: This system does not have $INITD (which this script tries
RUNNING=‘ps -eo fname |grep named‘
[ -z "$RUNNING" ] && \
echo "ERR: In fact the name server daemon is not even running (is it ins
echo "ERR: No changes will be made to your system"
exit 1
fi
# Check if named group exists
if [ -z "‘grep $GROUP /etc/group‘" ]
then
echo "Creating group $GROUP:"
addgroup $GROUP
else
echo "WARN: Group $GROUP already exists. Will not create it"
fi
# Same for the user
Kapitel E. Beispiel Skript, um die standard Installation von Bind zu ändern
155
if [ -z "‘grep $USER /etc/passwd‘" ]
then
echo "Creating user $USER:"
adduser --system --home /home/$USER \
--no-create-home --ingroup $GROUP \
--disabled-password --disabled-login $USER
else
echo "WARN: The user $USER already exists. Will not create it"
fi
# Change the init.d script
# First make a backup (check that there is not already
# one there first)
if [ ! -f $INITDBAK ]
then
cp $INITD $INITDBAK
fi
# Then use it to change it
cat $INITDBAK |
eval $AWKS > $INITD
echo "WARN: The script $INITD has been changed, trying to test the changes."
echo "Restarting the named daemon (check for errors here)."
$INITD restart
if [ $? -ne 0 ]
then
echo "ERR: Failed to restart the daemon."
restore
exit 1
fi
RUNNING=‘ps -eo fname |grep named‘
if [ -z "$RUNNING" ]
then
echo "ERR: Named is not running, probably due to a problem with the changes.
restore
exit 1
fi
# Check if it’s running as expected
RUNUSER=‘ps -eo user,fname |grep named |cut -f 1 -d " "‘
if [ "$RUNUSER" = "$USER" ]
Kapitel E. Beispiel Skript, um die standard Installation von Bind zu ändern
156
then
echo "All has gone well, named seems to be running now as $USER."
else
echo "ERR: The script failed to automatically change the system."
echo "ERR: Named is currently running as $RUNUSER."
restore
exit 1
fi
exit 0
Dieses Skript, angesetzt auf Woodys (Degbian 3.0) angepassten Bind wird die folgenede initdDatei erstellen, nachdem der User und die Gruppe “named” erstellt wurde:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
test -x /usr/sbin/named || exit 0
start () {
echo -n "Starting domain name service: named"
start-stop-daemon --start --quiet \
--pidfile /var/run/named.pid --exec /usr/sbin/named
echo "."
}
stop () {
echo -n "Stopping domain name service: named"
# --exec doesn’t catch daemons running deleted instances of named,
# as in an upgrade. Fortunately, --pidfile is only going to hit
# things from the pidfile.
start-stop-daemon --stop --quiet \
--pidfile /var/run/named.pid --name named
echo "."
}
case "$1" in
start)
start
;;
stop)
stop
;;
Kapitel E. Beispiel Skript, um die standard Installation von Bind zu ändern
157
restart|force-reload)
stop
sleep 2
start
;;
reload)
/usr/sbin/ndc reload
;;
*)
echo "Usage: /etc/init.d/bind {start|stop|reload|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
Kapitel E. Beispiel Skript, um die standard Installation von Bind zu ändern
158
159
Anhang F
Sicherheits-Update geschützt durch
eine Firewall
Nachdem Sie eine standard Installation auf ein System gebracht haben, könnten immernoch
Sicherheits-Lücken vorhanden sein, falls dem so ist könnte es Updates von Debian für die
Release geben. Jedoch können Sie die Pakete jedoch nicht auf einem anderen System herunterladen können (oder security.debian.org zu lokalen Zwecken spiegeln können), müssen Sie es
mit dem Internet verbinden, um ein Sicherheits Update zu durchzuführen.
Wenn Sie sich jedoch mit dem Internet verbinden, setzen Sie sich selbst aus. Wenn einer
Ihrer lokalen Services angreifbar ist, könnten Sie kompromitiert werden, noch bevor das Update beendet ist! Sie mögen dies paranoid finden, aber eine Analyse vom Honeynet Project
(http://www.honeynet.org) zeigt tatsächlich, dass ein System in weniger als drei Tagen
kompromitiert werden sogar, sogar wenn das System gar nicht der Öffentlichkeit bekannt ist
(d.h. nicht in DNS-Einträgen auftaucht).
Wenn Sie ein update auf dem System durchführen, das nicht von einem externen System (einer
Firewall) geschützt ist, können Sie trotzdem eine lokale Firewall so konfigurieren, dass Sie nur
das Sicherheits-Update selbst erlaubt. Schauen Sie sich das Beispiel untern an, um zu sehen,
wie die lokalen Firewall Fähigkeiten aufgesetzt werden, um ein eingeschränktes Setup zu erreichen, in dem nur Verbindungen zu security.debian.org erlaubt werden, während der Rest
geloggt wird.
FIXME: add IP address for security.debian.org (since otherwise you need DNS up to work) on
/etc/hosts.
FIXME: test this setup to see if it works properly
FIXME: this will only work with http urls since ftp might need the ip_conntrack_ftp module,
or use passive mode.
# iptables -F
# iptables -L
Chain INPUT (policy ACCEPT)
Kapitel F. Sicherheits-Update geschützt durch eine Firewall
target
prot opt source
Chain FORWARD (policy ACCEPT)
target
prot opt source
160
destination
destination
Chain OUTPUT (policy ACCEPT)
target
prot opt source
destination
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT DROP
# iptables -A OUTPUT -d security.debian.org -p 80 -j ACCEPT
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -p icmp -j ACCEPT
# iptables -A INPUT -j LOG
# iptables -A OUTPUT -j LOG
# iptables -L
Chain INPUT (policy DROP)
target
prot opt source
destination
ACCEPT
all -- 0.0.0.0/0
0.0.0.0/0
state RELATED,ESTA
ACCEPT
icmp -- 0.0.0.0/0
0.0.0.0/0
LOG
all -- anywhere
anywhere
LOG level warning
Chain FORWARD (policy DROP)
target
prot opt source
destination
Chain OUTPUT (policy DROP)
target
prot opt source
ACCEPT
80
-- anywhere
LOG
all -- anywhere
destination
security.debian.org
anywhere
LOG level warning