Security ist ein stets aktuelles Thema in der IT. Deshalb widmet sich das ADMIN-Magazin 04/2012 speziell Sicherheitsaspekten und gibt Antworten auf die Fragen: ... (mehr)

Zahlenspiele

Wie man einen Kernel übersetzt, hängt von der jeweiligen Distribution ab. Die meisten bringen dafür einen Satz Spezialwerkzeuge mit. Unter Ubuntu installiert der Befehl alles Notwendige:

sudo apt-get install fakeroot build-essential libncurses5 libncurses5-dev kernel-package

Die Grsecurity-Homepage [1] verrät, für welche Kernel-Versionen überhaupt passende Patches bereitstehen. Für einen davon müssen Sie sich entscheiden, im Folgenden soll beispielhaft der Kernel 3.2.19 zum Einsatz kommen. Für ihn laden Sie den passenden Grsecurity-Patch herunter. Zum Redaktionsschluss war die Grsecurity-Version 2.9 erhältlich, die benötigte Datei heißt somit »grsecurity-2.9-3.2.19-...« . Am besten laden Sie sich auch gleich noch das Archiv für »gradm« herunter, das unbedingt dieselbe Versionsnummer wie Grsecurity tragen muss, im Beispiel also die 2.9. Weiter geht es zu kernel.org [5] , wo Sie sich die "Full Source" der passenden Kernel-Version besorgen, im Beispiel also 3.2.19. Alle heruntergeladenen Dateien sollten für die folgenden Schritte im selben Verzeichnis liegen.

Um die Echtheit zu prüfen, laden Sie sich den Schlüssel von der Grsecurity-Homepage herunter (über den etwas unscheinbaren Link »You can download the key used to sign these packages here« ). Anschließend kopieren Sie sich noch die jeweiligen Signaturen über die sig -Links und rufen dann folgende Befehle auf:

gpg --import spender-gpg-key.asc
gpg --verify grsecurity-2.9-3.2.19-201206042135.patch.sig
gpg --verify gradm-2.9-201202232055.tar.gz.sig

Die Ausgaben sollten wie in Abbildung 2 aussehen. Wichtig ist, dass in den Meldungen ein »Korrekte Unterschrift« erscheint. Andernfalls müssen Sie den Patch beziehungsweise das »gradm« -Archiv noch einmal erneut herunterladen. Zusätzlich kann man noch den Haupt-Fingerabdruck prüfen. Für die Grsecurity-Archive steht er auf der Grsecurity-Downloadseite. Da aber alle diese Informationen von derselben Seite stammen, muss man letztlich dieser Quelle mehr oder weniger vertrauen. Das Kernel-Archiv verifiziert man nach dem gleichen Prinzip, alle notwendigen Schritte nennt die Seite [5] .

Abbildung 2: In diesem Fall ist das Archiv mit den Kernel-Patches unversehrt.

Als Nächstes entpacken Sie das Kernel-Archiv:

tar xvfj linux-3.2.19.tar.bz2
cd linux-3.2.19

Bei Bedarf könnnen Sie die Kernel-Konfiguration der Distribution übernehmen, unter Ubuntu etwa mit:

cp /boot/config-`uname -r` .config

Jetzt gilt es, den Kernel mit Grsecurity zu patchen:

patch -p1 < ../grsecurity-2.9-3.2.19-201206042135.patch

und ihn dann zu konfigurieren:

make menuconfig

Stellwerk

Die Einstellungen zu Grsecurity verstecken sich unter den »Securtiy Options | Grsecurity« , wo Sie Grsecurity einschalten. Für jede Sicherheitsfunktion erscheint jetzt ein weiterer Punkt ( Abbildung 3 ). Die Punkte können Sie einzeln nacheinander durchgehen – oder aber einfach hinter »Security Level« eine von drei möglichen Voreinstellungen aktivieren. »High« schaltet einfach sämtliche Sicherheitsfunktionen ein. Es bietet damit die höchste Sicherheit, einige wenige Programme könnten aber später Probleme bereiten.

Abbildung 3: Mit Ausnahme des RBAC-Systems konfiguriert man die Grsecurity-Funktionen vor der Übersetzung des Linux-Kernels.

Für die ersten Schritte mit Grsecurity bietet sich daher zunächst das »Low« -Profil an. Es aktiviert zwar nur einen Teil der Sicherheitsfunktionen, ungewollte Nebeneffekte sind damit jedoch ausgeschlossen. Läuft das System einwandfrei, schalten Sie nach und nach auf das jeweils striktere Profil um. Einen schnellen Überblick über die Sicherheitsfunktionen der einzelnen Profile gibt der Kasten "Profiliert" .

Profiliert

Standardmäßig ist in jedem Profil das RBAC-System aktiv – allerdings mit unterschiedlich strengen Restriktionen. Da einige Programme nicht mit der Trusted Path Execution zurechtkommen, muss man sie im Bereich »Executable Protections« grundsätzlich selbst aktivieren.

Low

In frei beschreibbaren Verzeichnissen wie »/tmp« können Benutzer weder FIFOs anlegen noch (endlos) symbolischen Links folgen. Zudem bleibt es ihnen verwehrt, Hardlinks auf fremde Dateien zu erstellen, unbegrenzt mit »execvs()« Prozesse zu starten und mit dem Kommando »dmesg« das Kernel-Log anzusehen. Wechselt eine Anwendung in eine Chroot-Umgebung, setzt Grsecurity ihr Arbeitsverzeichnis auf das Root-Verzeichnis der Chroot-Umgebung. Damit ist es der Anwendung nicht mehr möglich, doch noch auf ein Verzeichnis außerhalb der Chroot-Umgebung zuzugreifen.

Medium

Dieses Profil dichtet vor allem Chroot-Umgebungen weiter ab. So verwehrt Grsecurity den darin laufenden Prozessen unter anderem das Mounten von Dateisystemen, Zugriffe auf Kernelparameter (via »sysctl« oder über »/proc« ) sowie »mknod« -Aufrufe. Im übrigen System widmet sich Grsecurity verstärkt dem Hauptspeicher. So verbietet es den Zugriff auf »/dev/kmem« , »/dev/mem« und »/dev/port« . Das soll vor allem Rootkits den Weg in den Kernel erschweren.

Zudem landen neu gestartete Programme an einer zufällig gewählten Stelle im Hauptspeicher (Address Space Layout Randomization, ASLR). Das erschwert es Schadcode, die Sicherheitslücke im Programm zu finden. Grsecurity protokolliert mit dieser Einstellung auch fehlgeschlagene »fork()« -Aufrufe, Änderungen der Systemzeit und Abstürze in Form einer Zugriffsverletzung (Segmentation Fault). Einblick in »/proc« bekommen jetzt nur noch Benutzer aus der Gruppe mit der GID 1001. In der Folge sehen Benutzer nur noch ihre eigenen Prozesse. Laut Brad Spengler sollen die im Medium-Profil aktivierten Sicherheitsfunktionen nur bei veralteter, schlecht geschriebener oder spezieller Software Probleme bereiten. Beispielsweise muss man einem »identd« -Daemon die GID 1001 verpassen – sofern man überhaupt diesen Dienst nutzt.

High

Das höchste Sicherheitsprofil verschärft noch einmal alle Maßnahmen. So entfernt Grsecurity alle Adressangaben unter »/proc« . Die Pseudodateisysteme »sysfs« und »debugfs« (in der Regel also das Verzeichnis »/sys« ) darf nur noch der Benutzer Root einsehen. Damit erhalten normale Nutzer keinen Einblick mehr in die Hardware- und Debug-Informationen des Systems. Darüber hinaus versteckt Grsecurity alle Kernelsymbole und randomisiert den Kernel-Stack. Das automatische Laden von Kernelmodulen ist nur noch unter dem Benutzer Root gestattet. Grsecurity protokolliert zudem das Ein- und Aushängen von Dateisystemen. Prozesse in einer Chroot-Umgebung dürfen weder Netzwerkschnittstellen einrichten noch Module laden oder das System neu starten.

Eine ausführliche Beschreibung aller Funktion sowie der drei Profile liefert ein langer Anhang der offiziellen Grsecurity-Dokumentation [6] .

Nach der Wahl des Profils sollten Sie zusätzlich unter »Sysctl support« den »Sysctl support« und »Turn on features by default« aktivieren. Damit können Sie später im laufenden System einige Sicherheitsfunktionen über simple Kommandozeilenbefehle ein- und ausschalten (zu denen später noch mehr). Das ist nicht nur bequem, um schnell eine Funktion zu testen oder eine störende abzuschalten. Sie ersparen sich damit gleichzeitig, den Kernels erneut zu übersetzen.

Ähnliche Artikel

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023