Como consultar a assinatura EFI

3

Parece que o Grub-EFI irá inicializar apenas um kernel Linux "assinado". Existe algum comando que me permita consultar uma determinada imagem do kernel para descobrir quais assinaturas (se houver) estão presentes?

    
por MathematicalOrchid 23.04.2014 / 11:13

2 respostas

5

Depende de que tipo de assinatura você está falando. Se você tiver um sistema EFI, você pode ter assinado executáveis EFI ( *.efi ) e forçar seu firmware EFI a executar somente aqueles com uma assinatura conhecida. Isso é conhecido como Inicialização Segura . Para verificar um binário EFI para uma assinatura, você pode usar a ferramenta sbverify :

$ sbverify --no-verify signed-binary.efi
Signature verification OK
$ sbverify --no-verify unsigned-binary.efi
No signature table present
Unable to read signature data from unsigned-binary.efi
Signature verification failed

Infelizmente, não vi uma maneira fácil de extrair e exibir a assinatura EFI. : (

É mais provável que você esteja procurando a capacidade do GRUB de verificar se seus módulos e kernels foram inicializados para assinaturas válidas (o Secure Boot afeta apenas o próprio binário do GRUB, tudo que o GRUB carrega não precisa necessariamente ser assinado pela EFI) . Essas são (tanto quanto eu entendo) simples assinaturas antigas de GPG (assim, por exemplo, para um kernel chamado vmlinuz-1.2.3 , você teria um arquivo vmlinuz-1.2.3.sig com a assinatura). Aqueles podem simplesmente ser exibidos e verificados com

$ gpg --verify vmlinuz-1.2.3.sig vmlinuz-1.2.3
gpg: Signature made Tue Apr  1 12:34:56 2014 CEST using RSA key ID d3adb33f
gpg: Good signature from "John Doe <[email protected]>"

Se você não tem um arquivo *.sig em seu kernel, obviamente ele não está assinado.

Você pode desabilitar a verificação de assinaturas no GRUB inserindo set check_signature=no no prompt de comando do GRUB. Você pode obter mais informações sobre esse tópico aqui (essa funcionalidade é bastante nova e o site oficial do GRUB tem apenas o manual para a versão 2.00 online, que não possui esse recurso). Isso também explica como assinar seus módulos e kernel com sua própria chave e informar ao GRUB sobre isso.

    
por 23.04.2014 / 11:43
0

Usando as informações fornecidas por Andreas, consegui descobrir o seguinte:

No sistema de trabalho, o próprio Grub-EFI e o kernel do Linux são assinados com a mesma chave. No sistema não funcional, nem o Grub nem o kernel do Linux são assinados. Quando tento copiar o kernel do Linux de um sistema para outro, o Grub reclama que o kernel não está assinado. Não há assinatura GPG detectada; parece que o Grub está procurando a mesma coisa que o Secure Boot está procurando - uma assinatura PE interna.

Agora, se eu puder descobrir como fazer com que o OpenSUSE assine sua versão de 32 bits do kernel Linux ...

    
por 24.04.2014 / 11:47