Website-Icon .: blog cscholz.io :.

Linux Kernel 4.2.6 mit GrSecurity patchen

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.

  

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.

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

 

Die mobile Version verlassen