linux kvm:模块验证失败:缺少签名和/或所需的密钥-污染内核

ghg1uchk  于 2023-11-17  发布在  Linux
关注(0)|答案(4)|浏览(345)

我使用的是Ubuntu 14.04 LTS和内核版本3.13.11.4
我尝试加载已修补的KVM模块kvmkvm-intel,但收到以下错误
kvm: module verification failed: signature and/or required key missing - tainting kernel
kvm: module has bad taint, not creating trace events的元素。
使用的源与创建当前运行的映像的源相同。
我已经检查了符号,并确保错误不是由于在导出函数的修补文件中没有包含EXPORT_SYMBOL_GPL()而导致的。
我也看到过一些关于不同内核版本导致这个错误的东西,但是我构建的内核是用我用来创建补丁kvm模块的同一个源代码引导的。
一切编译没有警告。任何帮助是感谢!

bpzcxfmw

bpzcxfmw1#

不需要重新配置内核,这个错误(module verification failed)可以通过在模块本身的Makefile的顶部添加一行CONFIG_MODULE_SIG=n来解决:

CONFIG_MODULE_SIG=n

# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
    obj-m := hello.o

# Otherwise we were called directly from the command
# line; invoke the kernel build system.
else
    KERNELDIR ?= /lib/modules/$(shell uname -r)/build
    PWD := $(shell pwd)

default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif

字符串

ghhaqwfi

ghhaqwfi2#

转到内核源目录并执行以下操作(例如):

./scripts/sign-file sha512 ./signing_key.priv ./signing_key.x509 /lib/modules/3.10.1/kernel/drivers/char/my_module.ko

字符串

  • 对于内核4.4.,密钥位置应该如下:
./scripts/sign-file sha512 ./certs/signing_key.pem ./certs/signing_key.x509 path/to/your/kernel/module.ko


通过打开.config并在CONFIG_MODULE_SIG配置值中阅读它来检查内核正在使用的摘要算法。

CONFIG_MODULE_SIG=y CONFIG_MODULE_SIG_ALL=y CONFIG_MODULE_SIG_SHA512=y CONFIG_MODULE_SIG_HASH="sha512"


注意事项:如果你正在使用一个你没有构建的现有内核,请通过查看相应的配置文件来检查内核正在使用的摘要算法,主要是在/proc/*/boot/*中。对于Ubuntu,在/boot/config-$(uname -r)中。

7vux5j2d

7vux5j2d3#

看起来你的系统供应商已经在你的内核上启用了kernel module signature verification,这意味着它不会加载任何供应商没有签名的模块。换句话说,你的补丁模块没有签名(正确),内核将拒绝加载它。
这样做的目的是防止恶意软件和rootkit加载恶意内核模块。
我建议您联系您的供应商。您的平台上可能有一个选项可以禁用签名检查。否则,您的供应商可能能够为您签名模块。您甚至可能拥有密钥和签名验证算法的详细信息,并且可以自己签名。
如果不知道你在什么平台上运行,就很难给出给予更具体的建议。

guykilcj

guykilcj4#

一般来说,如果您正在构建自定义内核并使用make oldconfig。这将从/ Boot 复制现有的config-* 文件。现在大多数内核模块都需要由Linux供应商签名。因此,在编译内核之前,请编辑.config并禁用CONFIG_MONIC_SIG_ALL和CONFIG_MONIC_SIG。

CONFIG_MODULE_SIG=n
CONFIG_MODULE_SIG_ALL=n
# CONFIG_MODULE_SIG_FORCE is not set 
# CONFIG_MODULE_SIG_SHA1 is not set
# CONFIG_MODULE_SIG_SHA224 is not set
# CONFIG_MODULE_SIG_SHA256 is not set
# CONFIG_MODULE_SIG_SHA384 is not set

字符串

相关问题