linux核心模組簽名

2021-06-20 07:55:25 字數 1482 閱讀 3550

linux核心模組簽名

核心在模組模組載入時使用加密簽名驗證,校驗簽名是否與已編譯的核心公鑰匹配。目前只支援rsa x.509驗證。

簽名驗證在通過config_module_sig使能。開啟簽名同時還會強制做模組elf元資料檢查,然後再做簽名驗證。

公鑰生成

核心編譯時可以指定一系列的公鑰。x509.genkey檔案用來生成x509金鑰。如果沒有該檔案,系統會自動提供乙個預設的配置。makefile會根據x509.genkey規則在核心編譯根目錄生成預設配置,使用者可以手動更改該檔案。

由此在核心編譯過程中分別生成私鑰和公鑰檔案分別為./signing_key.priv和./signing_key.x509。

預設配置是使用/dev/random生成的。如果/dev/random沒有足夠資料,在後台執行以下命令可以生成更多的資料:rngd -r /dev/urandom。

模組簽名

設定了config_module_sig_all,所有模組將會自動新增簽名。如果沒有設定,需要手動新增:

scripts/sign-file $(modseckey) $(modpubkey) modules.ko

雜湊演算法必須為sha1, sha224, sha256, sha384, sha512。對應的加密演算法必須是使能的。config_module_sig_hash設定sign-file使用的預設演算法。

modseckey=

加密私鑰檔案,預設是./signing_key.priv

modpubkey=

加密公鑰檔案,預設為./signing_key.x509

module.ko是需要簽名的模組。

簽名模組裁減

簽名模組裁減就是去除簽名部分,在重新簽名之前需要先裁減之前的簽名。在打包核心模組發布時,並沒有自動裁減。

載入簽名模組

模組是通過insmod來載入的,模組載入時通過檢查模組的簽名部分來驗證。

不合法簽名和沒有簽名的模組

如果設定了config_module_sig_force或者在核心啟動命令列設定了module.sig_enforce,核心將只載入帶有公鑰的合法簽名模組。如果都沒有設定則會載入沒有簽名的模組。如果核心有金鑰,但模組沒有提供合法的簽名就會被拒絕載入。下表說明了各種情況:

模組狀態            許可模式    強制檢查

未簽名               通過          ekeyrejected

簽名,沒有公鑰   enokey     enokey

簽名,公鑰         通過          通過

非法簽名,公鑰   ekeyrejected ekeyrejected

簽名,過期金鑰   ekeyexpired   ekeyexpired

破壞的簽名         ebadmsg    ebadmsg

破壞的elf           enoexec    enoexec

英文:documentation/module_signing.txt

Linux核心模組

核心模組 在整個啟動的過程中,是否能成功的驅動我們主句的硬體裝置,是核心完成的工作,而核心一般都是壓縮文件,在使用之前核心之前必須要將核心減壓到的記憶體中。為了應對日新月異的硬體,目前核心都具有可讀取模組化驅動程式的功能,也就是所謂的 modules模組化 所謂模組化。核心與核心模組放在 核心 bo...

Linux核心模組

1 核心模組註冊登出 塊載入函式有返回值,模組解除安裝函式無返回值。兩者都是無參函式,載入函式用 init修飾,解除安裝函式用 exit修飾。define init attribute section init.text define exit atrribute section exit,text...

Linux 核心模組

linux 核心模組程式結構 1 模組載入函式 2 模組解除安裝函式 3 模組許可證宣告 4 模組引數 5 模組匯出符號 6 模組作者等資訊宣告 模組載入函式 一般以 init 標識 在 linux 中,所有標識為 init 的函式如果直接編譯進核心,成為核心映象的一部分,在連線的時候都會放在 in...