
shim é um aplicativo EFI trivial que, quando executado, tenta abrir e executar outro aplicativo. Ele inicialmente tenta fazer isso por meio das chamadas padrão da EFI LoadImage() e StartImage(). Se estas falharem (porque o Secure Boot está habilitado e o binário não está assinado com uma chave apropriada, por exemplo), ele então validará o binário contra um certificado embutido. Se isso for bem-sucedido e se o binário ou a chave de assinatura não forem proibidos, o shim realocará e executará o binário.
O shim também instalará um protocolo que permite ao bootloader de segundo estágio realizar validação binária semelhante. Este protocolo tem um GUID conforme descrito no arquivo de cabeçalho shim.h e fornece um único ponto de entrada. Em sistemas de 64 bits, esse ponto de entrada espera ser chamado com SysV ABI em vez de MSABI, portanto, as chamadas a ele não devem ser encapsuladas.
Desde a versão 16.1, o shim substitui a tabela do sistema e instala sua própria versão das funções LoadImage()/StartImage()/UnloadImage()/Exit(), para que os segundos estágios possam simplesmente chamá-las a partir da tabela do sistema, e isso funcionará quer o shim seja o primeiro estágio ou não, sem exigir código específico do shim nos segundos estágios.
Quando este protocolo está instalado, UKIs assinados Unified Kernel Images podem ser carregados mesmo que o kernel aninhado não seja assinado, pois após o UKI ser carregado e validado, o shim constrói uma lista de permissões interna de todas as seções contidas no UKI. Quando uma imagem é carregada de uma dessas seções, ela é validada contra listas de bloqueio (DBX/MOKX/SBAT no momento em que este texto foi escrito), mas não é verificada contra listas de permissões (hashes/assinaturas de DB/MOK), já que a imagem externa já foi validada e a imagem interna está, portanto, coberta por essas assinaturas ou hashes. Além disso, a imagem interna não é medida na TPM, para evitar medições duplicadas.
Em sistemas com um chip TPM habilitado e suportado pelo firmware do sistema, o shim estenderá várias PCRs com os digests dos alvos que está carregando. Uma lista completa está no arquivo README.tpm .
Para usar o shim, basta colocar um certificado público codificado em DER em um arquivo como pub.cer e compilar com make VENDOR_CERT_FILE=pub.cer.
Há algumas opções de compilação e algumas maneiras de personalizar a compilação, descritas em BUILDING.
Consulte o plano de teste e abra um chamado se algo falhar!
Caso os desenvolvedores precisem ser contatados em relação a um incidente de segurança ou vulnerabilidade, envie um e-mail para [email protected].