webentwicklung-frage-antwort-db.com.de

kvm: Überprüfung des Moduls fehlgeschlagen: Signatur und / oder erforderlicher Schlüssel fehlen - Tainting-Kernel

Ich verwende Ubuntu 14.04 LTS Und die Kernelversion 3.13.11.4.
Ich versuche gepatchte KVM= Module kvm und kvm-intel Zu laden und erhalte die folgenden Fehlermeldungen

kvm: module verification failed: signature and/or required key missing - tainting kernel
und kvm: module has bad taint, not creating trace events.

Die verwendete Quelle ist die gleiche, aus der das aktuell ausgeführte Image erstellt wurde.
Ich habe die Symbole überprüft und sichergestellt, dass der Fehler nicht durch das Nichteinschließen von EXPORT_SYMBOL_GPL() in den gepatchten Dateien verursacht wird, in die ich Funktionen exportiert habe.

Ich habe auch einige Dinge über verschiedene Kernelversionen gesehen, die diesen Fehler verursacht haben, aber ich habe den Kernel, in dem ich gebootet habe, mit der gleichen Quelle erstellt, die ich zum Erstellen der gepatchten kvm-Module verwendet habe.
Alles ohne Vorwarnung kompilieren. Jede Hilfe wird geschätzt!

24
user2743

Anscheinend hat der Hersteller Ihres Systems Überprüfung der Kernel-Modulsignatur auf Ihrem Kernel aktiviert, was bedeutet, dass kein Modul geladen wird, das der Hersteller nicht signiert hat. Mit anderen Worten, Ihr gepatchtes Modul ist nicht (ordnungsgemäß) signiert und der Kernel lehnt es ab, es zu laden.

Damit soll verhindert werden, dass Malware und Rootkits schädliche Kernelmodule laden.

Ich schlage vor, Sie wenden sich an Ihren Händler. Möglicherweise gibt es irgendwo auf Ihrer Plattform eine Option zum Deaktivieren der Signaturprüfung. Andernfalls kann Ihr Händler das Modul möglicherweise für Sie signieren. Möglicherweise haben Sie sogar den Schlüssel und die Details des Signaturprüfungsalgorithmus und können diesen selbst signieren.

Ohne zu wissen, auf welcher Plattform Sie ausgeführt werden, ist es schwierig, spezifischere Vorschläge zu machen.

10
tangrs

Anstatt den Kernel neu zu konfigurieren, wird dieser Fehler (module verification failed) kann durch Hinzufügen einer Zeile CONFIG_MODULE_SIG=n zum Anfang des Makefile für das Modul selbst:

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
21
artm

Wechseln Sie in das Kernel-Quellverzeichnis und führen Sie (z. B.) Folgendes aus:

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

Für Kernel 4.4. * sollte der Speicherort der Schlüssel wie folgt lauten:

./scripts/sign-file sha512 ./certs/signing_key.pem ./certs/signing_key.x509 path/to/your/kernel/module.ko 

Überprüfen Sie, welchen Digest-Algorithmus Ihr Kernel verwendet, indem Sie .config Öffnen und in den Konfigurationswerten CONFIG_MODULE_SIG Lesen.

CONFIG_MODULE_SIG=y CONFIG_MODULE_SIG_ALL=y CONFIG_MODULE_SIG_SHA512=y CONFIG_MODULE_SIG_HASH="sha512"
11
P Royo

Im Allgemeinen, wenn Sie einen benutzerdefinierten Kernel erstellen und make oldconfig Verwenden. Dies kopiert die bestehende * Konfigurationsdatei aus/boot. Heute müssen die meisten Kernelmodule vom Linux-Hersteller signiert werden. Bearbeiten Sie also die .config und deaktivieren Sie CONFIG_MODULE_SIG_ALL und CONFIG_MODULE_SIG, bevor Sie den Kernel kompilieren.

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
10
askb