GrSecurity ist bietet seit vielen Jahren Sicherheitspatche für aktuelle Kernel Versionen an, welche die Sicherheit der Standard Kernel verbessern soll. Bis August 2015 wurden diese Patche im stable Zweig kostenlos der Allgemeinheit zur Verfügung gestellt. Da dieser Erweiterung jedoch laut GrSecurity von Namenhaften Unternehmen in ihren kostenpflichtigen Produkten eingesetzt wurde ohne das Projekt zu unterstützen, wurde der stable Zweig für die Öffentlichkeit geschlossen. Nur noch die testing Patche sind frei verfügbar. Dennoch gibt es aktuell Distributionen, welche basierend auf dem testing Patch GrSecurity implementiert haben, wie NetSecL (basierend auf OpenSUSE), Pentoo (basierend auf Gentoo ), Alpine (basierend auf musl und BusyBox) oder Gentoo selber.

    Unter https://store.grsecurity.net/ bietet GrSecurity einen Store an, über welchen vorkompilierte Kernels mit dem stable Patch gegen Bezahlung erworben werden können. Jedoch bin ich mir nicht socher, ob dies auch für Privatpersonen ohne weiteres funktioniert (Beispiel Update plan: No update plan +$0).

    Es ist jedoch auch möglich, sich einen eigenen Kernel mit dem testing GrSecurity Patch zu kompilieren. Eine Vielzahl von GrSecurity Patchen sind im github repository von slashbeast zu finden. Ich würde aber immer die Seite von GrSecurity empfehlen: https://grsecurity.net/download.php.

    Bevor losgelegt wird, sollte sichergestellt sein, dass alle notwendigen Pakete installiert sind..

    Notwendige Pakete installieren

    apt-get --no-install-recommends install kernel-package libncurses5-dev fakeroot gcc-4.9-plugin-dev

    Kernel 4.2.6 mit GrSecurity patchen und kompilieren

    Dateien herunterladen

    wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.2.6.tar.gz --no-check-certificate
    wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.2.6.tar.sign --no-check-certificate
    wget https://grsecurity.net/test/grsecurity-3.1-4.2.6-201511282239.patch --no-check-certificate
    wget https://grsecurity.net/test/grsecurity-3.1-4.2.6-201511282239.patch.sig --no-check-certificate
    wget https://grsecurity.net/spender-gpg-key.asc --no-check-certificate
    

    Signaturen prüfen

    gpg --import spender-gpg-key.asc
    gpg --keyserver hkp://keys.gnupg.net --recv-keys 00411886
    gpg --verify grsecurity-3.1-4.2.6-201511282239.patch.sig
    gpg --verify linux-4.1.tar*

    Kernel patchen

    tar xvf linux-4.2.6.tar.gz
    cd linux-4.2.6
    patch -p1 < ../grsecurity-3.1-4.2.6-201511282239.patch

    Kernel kompilieren

    Am besten ist es, die config des bereits laufenden Zielsystems als Grundlage für den neuen Kernel zu verwenden.

    cp /boot/config-$(uname -r) .config

    Nun noch die GrSecurity Erweiterung aktivieren über menuconfig aktivieren und die Datei als .config speichern.

    enable_grsecurity1 enable_grsecurity2 enable_grsecurity3  

    make menuconfig
    make clean
    fakeroot make-kpkg --initrd --revision=4.2.6.grsec.201511282239 kernel_image kernel_headers

    Anschließend befinden sich im Übergeordneten Ordner der Kernel sowie die Header Dateien als .deb Paket.

    Kernel testen

    Um den Kernel zu testen muss dieser versändlicherweise installiert werden

    cd ..
    dpkg -i *.deb

    Das Risiko bei selbstkompilierten Kernel ist, dass diese nicht sauber laufen. Wer jetzt dazu noch auf einem Remote System arbeitet, wird den Teufel tun, dort einen Kernel zu installieren, von dem man nicht weiß, ob er sauber läuft bzw. das System soweit starten lässt, dass es wieder erreichbar ist.

    Um das Risiko zu reduzieren, habe ich mir ein Bash-Skript gebaut, mit dem der zu bootende Kernel entweder für den Einmal-Boot oder Permanenten-Boot eingetragen werden kann. Der Einmal boot hat zur Folge, dass wenn das System nicht hochfährt und man es remote resettet, wieder der reguläre stabile Kernel gestartet wird. Jetzt wird der ein oder andere sagen "okay, dass hab ich schon woanders gelesen". Ja, aber wer hat das schonmal ausprobiert? Ich habe zumindest einige Zeit gebraucht, bis mir klar wurde, wie ich Sub-Menü-Einträge zum starten hinterlege. Denn die Nummerierung bei Sub-Menüeinträgen ist nicht fortlaufend.

    grub2-submenue

    Beim Aufruf des Skripes werden alle Kernel Images angazeigt und es kann ausgewählt werden, welcher Kernel dauerhaft oder nur einmalig gebootet werden soll.

    Choice  Entry   Name
    0       0       Debian GNU/Linux
    1       1>0     Debian GNU/Linux, mit Linux 4.2.6-grsec
    2       1>1     Debian GNU/Linux, with Linux 4.2.6-grsec (recovery mode)
    3       1>2     Debian GNU/Linux, mit Linux 4.2.0-0.bpo.1-amd64
    4       1>3     Debian GNU/Linux, with Linux 4.2.0-0.bpo.1-amd64 (recovery mode)
    Your choice: 1
    Boot kernel once or permanent? [o/p] o
    next_entry=1>0

     

    Update vom 29.11.2016

    Fehler: Cannot use CONFIG_GCC_PLUGINS: your gcc installation does not support plugins, perhaps the necessary headers are missing?
    Lösung: apt-get install gcc-4.9-plugin-dev

     

    Leave A Reply