
shim ist eine triviale EFI-Anwendung, die beim Ausführen versucht, eine andere
Anwendung zu öffnen und auszuführen. Zunächst versucht es, dies über die
standardmäßigen EFI-Aufrufe LoadImage() und StartImage() zu tun. Wenn diese
fehlschlagen (weil Secure Boot aktiviert ist und die Binärdatei beispielsweise
nicht mit einem geeigneten Schlüssel signiert ist), validiert shim die Binärdatei
anschließend gegen ein integriertes Zertifikat. Wenn dies gelingt und weder die
Binärdatei noch der Signaturschlüssel gesperrt sind, verschiebt und führt shim
die Binärdatei aus.
shim installiert außerdem ein Protokoll, das es dem Bootloader der zweiten Stufe ermöglicht, eine ähnliche Binärvalidierung durchzuführen. Dieses Protokoll hat eine GUID, wie in der Header-Datei shim.h beschrieben, und stellt einen einzelnen Einstiegspunkt bereit. Auf 64-Bit-Systemen erwartet dieser Einstiegspunkt, mit der SysV-ABI statt der MSABI aufgerufen zu werden, daher sollten Aufrufe daran nicht gekapselt werden.
Seit Version 16.1 überschreibt shim die Systemtabelle und installiert eine eigene Version der Funktionen LoadImage()/StartImage()/UnloadImage()/Exit(), sodass zweite Stufen sie einfach aus der Systemtabelle aufrufen können. Dies funktioniert unabhängig davon, ob shim die erste Stufe ist oder nicht, ohne dass shim-spezifischer Code in den zweiten Stufen erforderlich ist.
Wenn dieses Protokoll installiert ist, können signierte UKIs Unified Kernel Images geladen werden, selbst wenn der verschachtelte Kernel nicht signiert ist. Nachdem das UKI geladen und validiert wurde, erstellt shim eine interne Allowlist aller Abschnitte, die im UKI enthalten sind. Wenn ein Image aus einem solchen Abschnitt geladen wird, wird es gegen Denylists (derzeit DBX/MOKX/SBAT) validiert, aber nicht gegen Allowlists (DB/MOK-Hashes/ Signaturen) geprüft, da das äußere Image bereits validiert wurde und das innere Image somit durch diese Signaturen oder Hashes abgedeckt ist. Darüber hinaus wird das innere Image nicht im TPM gemessen, um Doppelmessungen zu vermeiden.
Auf Systemen mit einem TPM-Chip, der aktiviert und von der System-Firmware unterstützt wird, erweitert shim verschiedene PCRs um die Digests der Ziele, die es lädt. Eine vollständige Liste ist in der Datei README.tpm .
Um shim zu verwenden, platzieren Sie einfach ein DER-kodiertes öffentliches
Zertifikat in einer Datei wie pub.cer und bauen Sie mit
make VENDOR_CERT_FILE=pub.cer.
Es gibt einige Build-Optionen und einige Möglichkeiten, den Build anzupassen, die in BUILDING beschrieben werden.
Siehe den Testplan, und reichen Sie ein Ticket ein, falls etwas fehlschlägt!
Falls die Entwickler im Zusammenhang mit einem Sicherheitsvorfall oder einer Sicherheitslücke kontaktiert werden müssen, senden Sie bitte eine E-Mail an [email protected].