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.
- linux-headers-4.2.6-grsec_4.2.6.grsec.201511282239_amd64.deb
- linux-image-4.2.6-grsec_4.2.6.grsec.201511282239_amd64.deb
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