Secure Boot unter Linux einrichten

  • Sofern es jemanden interessiert, hier ein kleines Howto, um Secure Boot einzurichten.
    Ich gehe davon aus, dass euer System bereits mit UEFI lauffähig ist.

    Vorbereitungen
    Ihr müsst die efitools und efibootmgr installieren.
    Im Regelfall sollte eure Distribution diese mitbringen oder als Paket anbieten.

    Sicherung
    Im ersten Schritt sollten die aktuellen Keys gesichert werden.

    Code
    mkdir -p /etc/efi
    chmod 700 /etc/efi
    efi-readvar -v PK -o /etc/efi/old_PK.esl
    efi-readvar -v KEK -o /etc/efi/old_KEK.esl
    efi-readvar -v db -o /etc/efi/old_db.esl
    efi-readvar -v dbx -o /etc/efi/old_dbx.esl
    chmod 400 /etc/efi/*.key

    Eigene Schlüssel erzeugen
    Im nächsten Schritt erzeugen wir unsere eigenen Schlüssel. Der Text innerhalb subj für CN kann frei angepasst werden.

    Code
    openssl req -new -x509 -newkey rsa:4096 -subj "/CN=My New Platform Key/" -keyout /etc/efi/PK.key -out /etc/efi/PK.crt -days 3650 -nodes -sha512
    openssl req -new -x509 -newkey rsa:4096 -subj "/CN=My New Key-Exchange-Key/" -keyout /etc/efi/KEK.key -out /etc/efi/KEK.crt -days 3650 -nodes -sha512
    openssl req -new -x509 -newkey rsa:4096 -subj "/CN=My New Kernel-Signing Key/" -keyout /etc/efi/db.key -out /etc/efi/db.crt -days 3650 -nodes -sha512

    Secure Boot Schlüssel löschen
    Jetzt müsst ihr den Rechner neustarten und im UEFI-Setup die Einstellungen für Secure Boot aufrufen.
    Dort sollte es eine Option geben, mit welcher die vorhandenen Schlüssel gelöscht werden.
    Bei mir hieß die Option Clear Secure Boot Keys, Secure Boot ist dannach automatisch deaktiviert und sollte sich im Setup-Mode befinden.

    Eigene Secure Boot Schlüssel importieren
    Startet wieder euere Linux-Distribution und beginnt mit dem Import der alten Schlüssel.

    Code
    efi-updatevar -e -f /etc/efi/old_KEK.esl KEK
    efi-updatevar -e -f /etc/efi/old_db.esl db
    efi-updatevar -e -f /etc/efi/old_dbx.esl dbx

    Danach kommen die eigenen Schlüssel:

    Code
    cert-to-efi-sig-list -g "$(uuidgen)" /etc/efi/PK.crt /etc/efi/PK.esl
    sign-efi-sig-list -k /etc/efi/PK.key -c /etc/efi/PK.crt PK /etc/efi/PK.esl /etc/efi/PK.auth
    efi-updatevar -a -c /etc/efi/KEK.crt KEK
    efi-updatevar -a -c /etc/efi/db.crt db
    efi-updatevar -f /etc/efi/PK.auth PK

    Wenn Ihr efi-readvar ohne weitere Argumente aufruft, solltet Ihr eine Auflistung aller Schlüssel bekommen. Dort muss jetzt auch der neue Schlüssel sichtbar sein.
    Nach dem Einspielen der Schlüssel ist Secure Boot wieder im User-Modus und automatisch aktiv!

    Kernel signieren
    Im letzten Schritt wird jetzt der Kernel mit eurem Schlüssel signiert, damit dieser bei aktivierten Secure Boot validiert werden kann.
    sbsign --key /etc/efi/db.key --cert /etc/efi/db.crt --output /Pfad/zum/signierten/bzImage.signed /Pfad/zum/aktuellen/nicht/siginierten/bzImage

    Prüft mit efibootmgr -v, wo aktuell eurer Kernel-Eintrag liegt (Die *.efi-Datei). Die *.efi-Datei wird durch das neue bzImage.signed ersetzt.
    Nach einem Reboot sollte mit aktivierten Secure Boot der Kernel starten.

    Backup
    Es wäre ratsam, wenn Ihr nach dem erfolgreichen Test ein Dump der neuen Schlüssel zieht, sollte im Falle eines Bios-Updates oder Mainboard-Schadens das Wiederherstellen dieser Schlüssel nötig sein.

    Code
    efi-readvar -v PK -o /etc/efi/new_PK.esl
    efi-readvar -v KEK -o /etc/efi/new_KEK.esl
    efi-readvar -v db -o /etc/efi/new_db.esl
    efi-readvar -v dbx -o /etc/efi/new_dbx.esl

    Mark IV Style Motherfucker!

    Einmal editiert, zuletzt von Alpha (11. Februar 2016 um 13:28)

  • Danke für die Anleitung, kann man eventuell mal gebrauchen.

    Man sieht hier schön, wie kompliziert es Microsoft dem Nutzer systematisch macht, seinen PC mit Linux einzurichten. Zum Glück kann man das noch im BIOS abschalten, die Frage ist halt wie lange noch. Wenn es die Abschaltoption in Zukunft nicht mehr gibt, kann dieses Tutorial durchaus nützlich sein.


  • Zum Glück kann man das noch im BIOS abschalten, die Frage ist halt wie lange noch. Wenn es die Abschaltoption in Zukunft nicht mehr gibt, kann dieses Tutorial durchaus nützlich sein.

    Entscheidend ist, ob man Secure Boot in den Setup-Mode kriegt. Wenn das nicht geht und Secure Boot nicht abschaltbar ist, hat man verloren.
    Worst Case Szenario wäre sonst, dass man sich den signierten GRUB von Ubuntu klaut, der ist mit einem Microsoft Key signiert.. aber das ist ziemlich unschön, finde ich..

    Mark IV Style Motherfucker!

    Einmal editiert, zuletzt von Alpha (11. Februar 2016 um 09:57)

  • Wir werden zeigen was die Zukunft bringt. Ich stehe dem eher kritisch gegenüber, PCs wie Smartphones zu verdongeln und Enduser faktisch komplett davon abzuhalten, Linux zu installieren.


  • Wir werden zeigen was die Zukunft bringt. Ich stehe dem eher kritisch gegenüber, PCs wie Smartphones zu verdongeln und Enduser faktisch komplett davon abzuhalten, Linux zu installieren.

    Der Witz is halt, dass es 99% der Enduser sonst wo vorbeigeht. Es interessiert sie schlicht und ergreifend nicht. Ich geb dir allerdings Recht, dass wir warten müssen, was die Zukunft bringt. Harren wir der Dinge, die da kommen.

    Alpha

    Danke für die Anleitung, kann man bestimmt mal gebrauchen.

    BTW: Wir brauchen ne Kategorie "Tutorials"


    Meine Beiträge stehen unter der MIT-Lizenz:D


    externe HDD am Router? Klar ich tausch mein Auto gegen nen Tretroller mit Bremsklotz.

    Einmal editiert, zuletzt von tk1908 (11. Februar 2016 um 10:06)

  • On-Topic: Wie machst du das mit der Initramdisk?


    Man sieht hier schön, wie kompliziert es Microsoft dem Nutzer systematisch macht, seinen PC mit Linux einzurichten. Zum Glück kann man das noch im BIOS abschalten, die Frage ist halt wie lange noch. Wenn es die Abschaltoption in Zukunft nicht mehr gibt, kann dieses Tutorial durchaus nützlich sein.


    Off-Topic: Ich finde, Microsoft verdient hier eher Lob. Es ist Microsoft zu verdanken, dass man auf ausnahmsweise jedem UEFI die Microsoft-Schlüssel löschen und eigene einbauen kann. Damit man Geräte mit Windows-Aufkleber verkaufen darf, muss man dem User erlauben, seine eigenen Secureboot-Zertifikate zu installieren.

    Jede Wette, dass wenn Microsoft diese Klausel nicht hätte, dass viele Hersteller solche Funktionen selber gar nicht einbauen würden. Und würde Microsoft Secureboot nicht erzwingen, glaube ich hätten wir das auch nicht.

    Kurzum: Würde Microsoft die Secureboot-Regeln den Herstellern überlassen, wäre die Situation vermutlich noch viel schlimmer.

    Einmal editiert, zuletzt von gandro (11. Februar 2016 um 13:20)


  • On-Topic: Wie machst du das mit der Initramdisk?

    Wie genau meinst du das? Ich habe eine initramfs im Einsatz, weil LUKS. Gibt zwei Optionen. Entweder direkt in den Kernel miteinkompilieren oder im UEFI mitübergeben. Ich mache ersteres.. zweiteres sollte aber kein Problem sein. Mit efibootmgr einfach diese angeben:

    Code
    efibootmgr --create --disk sda --part 1 --label "Gentoo Linux" --loader '\efi\gentoo\boot\kernel.efi' -u initrd='\efi\gentoo\boot\initramfs.img'


    Oder worauf willst du hinaus?


    Off-Topic: Ich finde, Microsoft verdient hier eher Lob. Es ist Microsoft zu verdanken, dass man auf ausnahmsweise jedem UEFI die Microsoft-Schlüssel löschen und eigene einbauen kann. Damit man Geräte mit Windows-Aufkleber verkaufen darf, muss man dem User erlauben, seine eigenen Secureboot-Zertifikate zu installieren.

    Jede Wette, dass wenn Microsoft diese Klausel nicht hätte, dass viele Hersteller solche Funktionen selber gar nicht einbauen würden. Und würde Microsoft Secureboot nicht erzwingen, glaube ich hätten wir das auch nicht.

    Kurzum: Würde Microsoft die Secureboot-Regeln den Herstellern überlassen, wäre die Situation vermutlich noch viel schlimmer.

    Leider (nicht mehr) so ganz richtig :( Bis Windows 8.1 stand das genauso drin, wie du es schreibst. Mit Windows 10 ist es nur noch optional seitens Microsoft und damit ist man vom Hersteller abhängig..

    Mark IV Style Motherfucker!

    Einmal editiert, zuletzt von Alpha (11. Februar 2016 um 13:29)


  • Worst Case Szenario wäre sonst, dass man sich den signierten GRUB von Ubuntu klaut, der ist mit einem Microsoft Key signiert.. aber das ist ziemlich unschön, finde ich..

    Aber in dem Falle wohl die einzige Lösung, wenn man sowohl Linux als auch Windows mit Secure Boot parallel booten möchte? Was natürlich kontraproduktiv ist, weil weder Kernel noch Initramfs mehr signiert sein müssen.

  • Aber in dem Falle wohl die einzige Lösung, wenn man sowohl Linux als auch Windows mit Secure Boot parallel booten möchte?

    Warum?
    UEFI ist dein Boot Manager. Dort hinterlegst du den "Windows Boot Manager" (bzw. macht das Windows-Setup) und deinen "Linux Kernel" (mittels efibootmgr) als Booteinträge, welche gestartet werden.
    So handhabe ich es hier. Mit F12 kann ich beim Starten vom PC mein Bootmenu vom UEFI aufrufen und Linux alternativ starten, da Windows als erstes eingetragen ist.

    GRUB ist absolut nicht notwendig, bzw. braucht man im Prinzip mit UEFI überhaupt nicht mehr..

    [EDIT]
    Ubuntu ist ein Sonderfall. Deren siginierter GRUB2 ist gepatched! Wenn der GRUB2 keinen signierten Kernel von Canonical bekommt, kann er nichts booten! Damit wird Secure Boot sogesehen nicht ausgebelt.. Das könnte man sicher patchen, dass eigene Schlüssel siginiert werden.

    Mark IV Style Motherfucker!

    Einmal editiert, zuletzt von Alpha (11. Februar 2016 um 13:36)


  • Wie genau meinst du das? Ich habe eine initramfs im Einsatz, weil LUKS. Gibt zwei Optionen. Entweder direkt in den Kernel miteinkompilieren oder im UEFI mitübergeben. Ich mache ersteres.. zweiteres sollte aber kein Problem sein. Mit efibootmgr einfach diese angeben:

    Code
    efibootmgr --create --disk sda --part 1 --label "Gentoo Linux" --loader '\efi\gentoo\boot\kernel.efi' -u initrd='\efi\gentoo\boot\initramfs.img'


    Oder worauf willst du hinaus?


    Ah okay, wusste nicht dass UEFI auch die initramfs laden kann, danke für die Info.

    Stellt sich aber die Frage, wie das mit dem Signieren der initramfs aussieht, und wer die Signatur davon prüft..?

    Weil in der initramfs eine Backdoor einzubauen ist vermutlich der einfachste Angriffsvektor überhaupt. Einfach ein Shellscript rein was den den Passwort-Prompt von LUKS simuliert und schon hab ich dein Passwort, ich brauch deinen signierten Kernel nicht mal anfassen (abgesehen davon, dass Backdoor im Kernel einbauen auch etwas mehr Können und Aufwand benötigt).

    Nachtrag: Die imho einfachste Alternative, wenn man auf einem System mit Microsoft-Keys was booten will ist HashTool. http://blog.hansenpartnership.com/linux-foundati…ystem-released/

    Einmal editiert, zuletzt von gandro (11. Februar 2016 um 14:28)


  • Ah okay, wusste nicht dass UEFI auch die initramfs laden kann, danke für die Info.

    Kann es nicht, das macht der EFISTUB-Loader im Kernel. Der parst auch argv und lädt das, was in initrd= angegeben wird. Das UEFI lädt auch streng genommen nicht den Kernel, sondern EFISTUB. Liegt halt rein zufällig in der selben Datei.

    PGP-Key E384 009D 3B54 DCD3 21BF  9532 95EE 94A4 3258 3DB1 | S/MIME-Key 0x1A33706DAD44DA
    G d-@ s+:- a--- C+++ UB+L++ P--- L++@ E-@>++ W+ N o? K? w>++ !O !M !V PS+++ PE-- Y+>++ PGP++>+++ !t 5? X? !R tv b+++>++++ DI !D G>+ e>+++ h !r>++ !z
    „Die Aachener gelten als Erfinder des 4. Hauptsatzes der Thermodynamik: ‚Thermo schreibt man zweimal.“‘
    “Saying that Java is good because it works on all platforms is like saying oral sex is good because it works on all sexes.”
    „Es gibt 10 Sorten von Leuten: Die einen verstehen das Binärsystem, die anderen nicht.“
    „Manche Männer lieben Männer, Manche Frauen eben Frauen; Da gibt's nix zu bedauern und nichts zu staunen; Das ist genau so normal wie Kaugummi kauen; Doch die meisten werden sich das niemals trauen“

  • Offenbar lassen sich eigene Keys nicht einrichten im X260 :<
    Sobald ich das erste Set an Keys einspiele (Egal, ob die MS Keys oder meine eigenen), kann ich das zweite Set (Dann entweder MS oder meine eigenen) nicht mehr einspielen..

    Cannot write to KEK, wrong filesystem permissions

    Jemand ne Idee dazu? Erlaubt das ThinkPad etwa nicht mehr mehrere Keys?
    Aufm Desktop im UEFI klappts einwandfrei.

    Mark IV Style Motherfucker!

    Einmal editiert, zuletzt von Alpha (24. April 2016 um 18:10)

  • T460p tut, und ich kann mir eigentlich nicht vorstellen, dass die Plattformen so anders sind.

    PGP-Key E384 009D 3B54 DCD3 21BF  9532 95EE 94A4 3258 3DB1 | S/MIME-Key 0x1A33706DAD44DA
    G d-@ s+:- a--- C+++ UB+L++ P--- L++@ E-@>++ W+ N o? K? w>++ !O !M !V PS+++ PE-- Y+>++ PGP++>+++ !t 5? X? !R tv b+++>++++ DI !D G>+ e>+++ h !r>++ !z
    „Die Aachener gelten als Erfinder des 4. Hauptsatzes der Thermodynamik: ‚Thermo schreibt man zweimal.“‘
    “Saying that Java is good because it works on all platforms is like saying oral sex is good because it works on all sexes.”
    „Es gibt 10 Sorten von Leuten: Die einen verstehen das Binärsystem, die anderen nicht.“
    „Manche Männer lieben Männer, Manche Frauen eben Frauen; Da gibt's nix zu bedauern und nichts zu staunen; Das ist genau so normal wie Kaugummi kauen; Doch die meisten werden sich das niemals trauen“

  • Code
    [I] app-crypt/efitools
         Available versions:  (~)1.4.1 (~)1.4.1-r1 (~)1.4.1-r2 (~)1.4.2 (~)1.4.2-r1 (~)1.7.0[1]
         Installed versions:  1.7.0[1](11:34:31 21.04.2016)
         Homepage:            https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git
         Description:         Tools for manipulating UEFI secure boot platforms
    
    
    [1] "local" /usr/local/portage

    PGP-Key E384 009D 3B54 DCD3 21BF  9532 95EE 94A4 3258 3DB1 | S/MIME-Key 0x1A33706DAD44DA
    G d-@ s+:- a--- C+++ UB+L++ P--- L++@ E-@>++ W+ N o? K? w>++ !O !M !V PS+++ PE-- Y+>++ PGP++>+++ !t 5? X? !R tv b+++>++++ DI !D G>+ e>+++ h !r>++ !z
    „Die Aachener gelten als Erfinder des 4. Hauptsatzes der Thermodynamik: ‚Thermo schreibt man zweimal.“‘
    “Saying that Java is good because it works on all platforms is like saying oral sex is good because it works on all sexes.”
    „Es gibt 10 Sorten von Leuten: Die einen verstehen das Binärsystem, die anderen nicht.“
    „Manche Männer lieben Männer, Manche Frauen eben Frauen; Da gibt's nix zu bedauern und nichts zu staunen; Das ist genau so normal wie Kaugummi kauen; Doch die meisten werden sich das niemals trauen“


  • Hm, also wie ich, habe auch lokal 1.7.0..

    Eingespielt nach dem Tut hier oder anders?

    Das hier sieht ziemlich nach sakaki’s Guide aus, dem bin ich im Wesentlichen gefolgt.



    Mach mal lsattr /sys/firmware/efi/efivars/{PK,KEK,db,dbx}-*.

    PGP-Key E384 009D 3B54 DCD3 21BF  9532 95EE 94A4 3258 3DB1 | S/MIME-Key 0x1A33706DAD44DA
    G d-@ s+:- a--- C+++ UB+L++ P--- L++@ E-@>++ W+ N o? K? w>++ !O !M !V PS+++ PE-- Y+>++ PGP++>+++ !t 5? X? !R tv b+++>++++ DI !D G>+ e>+++ h !r>++ !z
    „Die Aachener gelten als Erfinder des 4. Hauptsatzes der Thermodynamik: ‚Thermo schreibt man zweimal.“‘
    “Saying that Java is good because it works on all platforms is like saying oral sex is good because it works on all sexes.”
    „Es gibt 10 Sorten von Leuten: Die einen verstehen das Binärsystem, die anderen nicht.“
    „Manche Männer lieben Männer, Manche Frauen eben Frauen; Da gibt's nix zu bedauern und nichts zu staunen; Das ist genau so normal wie Kaugummi kauen; Doch die meisten werden sich das niemals trauen“

    Einmal editiert, zuletzt von thosch97 (24. April 2016 um 18:28)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!