web-dev-qa-db-ja.com

kvm:モジュールの検証に失敗しました:署名および/または必要なキーがありません-カーネルの汚染

_Ubuntu 14.04 LTS_とカーネルバージョン_3.13.11.4_を使用しています。
パッチを適用しようとしているKVMモジュールkvmおよび_kvm-intel_

_kvm: module verification failed: signature and/or required key missing - tainting kernel_
and _kvm: module has bad taint, not creating trace events_。

使用されるソースは、現在実行しているイメージを作成したソースと同じです。
シンボルをチェックし、関数をエクスポートしたパッチが適用されたファイルにEXPORT_SYMBOL_GPL()を含めないことでエラーが発生しないことを確認しました。

また、このエラーの原因となるさまざまなカーネルバージョンに関するものを見てきましたが、パッチを適用したkvmモジュールの作成に使用したのと同じソースで起動したカーネルを構築しました。
警告なしですべてがコンパイルされます。どんな助けも大歓迎です!

24
user2743

システムのベンダーがカーネルで カーネルモジュール署名の検証 を有効にしているようです。つまり、ベンダーが署名していないモジュールはロードされません。言い換えると、パッチを適用したモジュールは(適切に)署名されておらず、カーネルはそれをロードすることを拒否します。

これのポイントは、マルウェアとルートキットが悪意のあるカーネルモジュールをロードするのを防ぐことです。

ベンダーに連絡することをお勧めします。プラットフォームのどこかに署名チェックを無効にするオプションがある場合があります。そうしないと、ベンダーがモジュールに署名できる可能性があります。鍵と署名検証アルゴリズムの詳細があり、自分で署名することもできます。

実行しているプラ​​ットフォームを知ることなく、より具体的な提案をすることは困難です。

10
tangrs

カーネルを再構成する代わりに、このエラー(module verification failed)1行追加するだけで解決できますCONFIG_MODULE_SIG=nモジュール自体のMakefileの先頭に:

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

カーネルソースディレクトリに移動して、次の操作を行います(例:)

./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"
11
P Royo

一般に、カスタムカーネルを構築してmake oldconfigを使用している場合。これにより、既存のconfig- *ファイルが/ bootからコピーされます。現在、ほとんどのカーネルモジュールはLinuxベンダーによる署名が必要です。したがって、カーネルをコンパイルする前に、.configを編集し、CONFIG_MODULE_SIG_ALLおよびCONFIG_MODULE_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
10
askb