Módulos de kernel assinados - “não assinados com chave confiável”

1

Problema:

Estou tentando usar módulos de kernel assinados, mas recebendo uma falha para o comando insmod :

PKCS#7 signature not signed with a trusted key

Existe uma mensagem de erro potencialmente relacionada durante a inicialização do Linux:

[    3.342888] Loading compiled-in X.509 certificates
[    3.391774] Problem loading in-kernel X.509 certificate (-129)

O comando cat /proc/keys mostra .builtin_trusted_keys: empty

Configuração:

O kernel 4.9.x foi compilado com as seguintes opções de defconfig:

...
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODVERSIONS=y
CONFIG_MODULE_SRCVERSION_ALL=y
CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_ALL=y
CONFIG_MODULE_SIG_FORCE=y
CONFIG_MODULE_SIG_SHA256=y
CONFIG_MODULE_SIG_HASH="sha256"
CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_KEYS_DEBUG_PROC_KEYS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_ENCRYPTED_KEYS=y
CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITY=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_PATH=y
CONFIG_HARDENED_USERCOPY=y
CONFIG_SECURITY_SMACK=y
CONFIG_SECURITY_SMACK_BRINGUP=y
CONFIG_DEFAULT_SECURITY_DAC=y
...

Os módulos foram assinados com um comando: sign-file sha256 certs/signing_key.pem certs/signing_key.x509 <.ko>

Comentários:

Suponho que preciso consertar o erro de carregamento de certificado X.509 no kernel, mas não encontrei como fazer isso. Eu pensei que o arquivo certs/signing_key.pem gerado durante a compilação do kernel seria empacotado no kernel, mas ele não é baseado no /proc/keys . Eu não quero desabilitar a assinatura ou permitir módulos não assinados, só quero assiná-los corretamente com uma chave confiável. Se alguém tiver conselhos, isso seria muito apreciado.

As postagens que eu encontrei sobre drivers nvidia e Ubuntu / Fedora ainda não renderam nenhum progresso. Exemplo: assinatura do PKCS # 7 não assinada com uma chave confiável

    
por bornruffians 28.09.2018 / 15:49

1 resposta

0

Acho que a compilação do kernel espera os arquivos signing_key. * no diretório base da árvore de origem do kernel e não sob um subdiretório "certs". O processo de compilação deve assinar automaticamente os módulos padrão para você; somente módulos de terceiros devem precisar de assinatura manual.

Além disso, meu script antigo para compilar um kernel 4.9. * com módulos assinados tinha o arquivo de certificado no formato DER. Talvez tenha sido necessário?

Nos kernels 4.14 e mais recentes, o procedimento é um pouco diferente: existe uma opção de configuração do kernel para especificar o nome do caminho do arquivo de certificado.

    
por 01.10.2018 / 02:25