
Caricatore shim UEFI
shim è un'applicazione EFI semplice che, quando viene eseguita, tenta di aprire ed eseguire un'altra applicazione. Inizialmente proverà a farlo tramite le chiamate EFI standard LoadImage() e StartImage(). Se queste falliscono (ad esempio perché Secure Boot è abilitato e il binario non è firmato con una chiave appropriata), validerà quindi il binario rispetto a un certificato integrato. Se questa operazione ha successo e se il binario o la chiave di firma non sono vietati, shim rilocherà ed eseguirà il binario.
shim installerà anche un protocollo che consente al bootloader di secondo stadio di eseguire una simile validazione dei binari. Questo protocollo ha un GUID come descritto nel file di intestazione shim.h e fornisce un unico punto di ingresso. Sui sistemi a 64 bit, questo punto di ingresso si aspetta di essere chiamato con l'ABI SysV piuttosto che con MSABI, quindi le chiamate ad esso non dovrebbero essere incapsulate.
Dalla versione 16.1, shim sostituisce la system table e installa una propria versione delle funzioni LoadImage()/StartImage()/UnloadImage()/Exit(), così che i secondi stadi possano semplicemente chiamarle dalla system table, e funzionerà sia che shim sia il primo stadio sia che non lo sia, senza richiedere codice specifico di shim nei secondi stadi.
Quando questo protocollo è installato, gli UKI firmati Unified Kernel Images possono essere caricati anche se il kernel annidato non è firmato, poiché dopo che l'UKI è stato caricato e validato, shim costruisce una allowlist interna di tutte le sezioni contenute nell'UKI. Quando un'immagine viene caricata da una di queste sezioni, viene validata rispetto alle denylist (DBX/MOKX/SBAT al momento della scrittura), ma non viene verificata rispetto alle allowlist (hash/firme DB/MOK), poiché l'immagine esterna era già stata validata e l'immagine interna è quindi coperta da quelle firme o hash. Inoltre, l'immagine interna non viene misurata nel TPM, per evitare doppie misurazioni.
Sui sistemi con un chip TPM abilitato e supportato dal firmware di sistema, shim estenderà vari PCR con i digest dei target che sta caricando. Un elenco completo è nel file README.tpm .
Per usare shim, basta inserire un certificato pubblico con codifica DER in un file come pub.cer e compilare con make VENDOR_CERT_FILE=pub.cer.
Ci sono un paio di opzioni di build e un paio di modi per personalizzare la build, descritti in BUILDING.
Vedi il piano di test e apri un ticket se qualcosa fallisce!
Nel caso in cui sia necessario contattare gli sviluppatori per un incidente di sicurezza o una vulnerabilità, invia un'email a [email protected].