征程 6X release 版本內(nèi)核模塊安全加載
01 概述
征程 6X 系統(tǒng)在 release 編譯時(shí)支持內(nèi)核模塊簽名驗(yàn)證,僅加載使用正確密鑰進(jìn)行數(shù)字簽名的內(nèi)核模塊。禁止加載未簽名的內(nèi)核模塊或使用錯(cuò)誤密鑰簽名的內(nèi)核模塊,客戶需要替換成自己的 key 進(jìn)行簽名。
模塊簽名啟用后,Linux 內(nèi)核將僅加載使用正確密鑰進(jìn)行數(shù)字簽名的內(nèi)核模塊。禁止加載未簽名的內(nèi)核模塊或使用錯(cuò)誤密鑰簽名的內(nèi)核模塊來進(jìn)一步強(qiáng)化系統(tǒng)安全。
關(guān)于內(nèi)核模塊簽名的介紹請看下文。
02 配置
2.1 內(nèi)核配置選項(xiàng)
在 menuconfig 中選中 CONFIG_MODULE_SIG,對應(yīng)生成的 config 就被默認(rèn)選中相關(guān)配置來支持模塊簽名。
2.2 配置說明
項(xiàng)目 | 描述 |
CONFIG_MODULE_SIG_FORCE | 對于嚴(yán)格的方法,必須存在有效的簽名 |
CONFIG_MODULE_SIG_ALL | 內(nèi)核模塊不自動簽名,該選項(xiàng)自動簽名所有模塊 |
用于簽名的\哈希算法\ :SHA-512… code:: textCONFIG_MODULE_SIG_SHA512CONFIG_MODULE_SIG_HASH=“sha512”
03 密鑰簽名
執(zhí)行簽名可執(zhí)行程序,使用密鑰對內(nèi)核模塊進(jìn)行簽名。
3.1 Make Module_Install 簽名
將內(nèi)核配置為對模塊進(jìn)行簽名,則此簽名將在內(nèi)核編譯 make modules_install 時(shí)進(jìn)行簽名了。
3.2 手動對 ko 簽名
指定需要的證書(包括公鑰)和私鑰、哈希算法以及內(nèi)核模塊。
通過 sign-file(可執(zhí)行程序)使用密鑰對要安裝到內(nèi)核的模塊進(jìn)行簽名,命令格式如下:
sign-file sha512 module_signature.pem module_signature.x509 xx.ko
手動 ko 簽名實(shí)例
SDK 整編時(shí)有封裝好的腳本可以用來自動簽名,對于不用 modules_install 進(jìn)行安裝的模塊,可以用如下腳本:
sign_ko.sh xxx.ko # 傳入驅(qū)動 sign_ko.sh dir # 傳入驅(qū)動所在目錄
只用 AppSDK 時(shí),需要直接使用下面的命令:
./sign-file sha512 module_signature.pem module_signature.x509 xx.ko
3.3 發(fā)布版本中的簽名
發(fā)布版本中會把簽名密鑰文件放在 AppSDK 中,給發(fā)布版本提供 ko 的時(shí)候可以直接用這些簽名文件:
ls AppSDK/module_sig/ module_signature.pem module_signature.x509 sign-file
發(fā)布包里面也有 AppSDK 目錄。
3.4 密鑰
證書 (含公鑰)\ :module_signature.x509 私鑰\ :module_signature.pem
3.5 定制修改簽名機(jī)制
要替換固定 key,將新的 key 替換源碼目錄中的 build_tools/hobot_tools/keys/下的私鑰和證書即可,如下:
build_tools/hobot_tools/keys$ ls module_signature.*module_signature.pem module_signature.x509
可以通過 openssl 創(chuàng)建自己的密鑰對 .openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform PEM -out module_signature.pem -keyout module_signature.pem${OUTPUT_BUILD_DIR}/kernel/certs/extract-cert module_signature.pem module_signature.x509 # 生成證書
其中 x509.genkey 可以用 linux 下 certs/default_x509.genkey;extract-cert 工具是在支持模塊簽名編譯中生成的。
#. 當(dāng) key 替換或者修改簽名機(jī)制的時(shí)候,需要對工程目錄進(jìn)行清理:
刪除生成目錄中的內(nèi)容,rm out/* -rf。
#. 清理完成后,重新編譯系統(tǒng)去燒錄驗(yàn)證。
#. 通過 strip 命令去去除內(nèi)核模塊的簽名。
aarch64-linux-gnu-strip -g ~/nfs/module_sig_test.ko
3.6 簽名結(jié)果確認(rèn)
1.dmesg | grep -i x.*509使用新配置的內(nèi)核重新啟動。在 dmesg 的輸出中,您應(yīng)該能夠確認(rèn)加載了正確的證書:
root@hobot:~# dmesg | grep -i x.*509 [ 0.333727] Asymmetric key parser ‘x509’ registered [ 2.068923] Loading compiled-in X.509 certificates [ 2.152800] Loaded X.509 cert ‘Build time autogenerated kernel key: 4e24f188419c7e1d5305f1d0ae2339286e1835c2’ [ 39.117796] [I|MIPI|hobot_mipi_csi_stl.c+252]:[RX4][STL]: module 509 reg done
2.cat /proc/keys
如果啟用了 CONFIG_KEYS_DEBUG_PROC_KEYS,那么 root用戶可以在/proc/keys 文件中查看證書:
root@hobot:~# cat /proc/keys … 0c5ec4d5 I------ 1 perm 1f030000 0 0 asymmetri Build time autogenerated kernel key: 4e24f188419c7e1d5305f1d0ae2339286e1835c2: X509.rsa 6e1835c2 []
3.hexdump -C hobot-pcie.ko | tail
內(nèi)核模塊在末尾附加了數(shù)字簽名。一個(gè)簡單的 hexdump 可以確認(rèn)簽名是否存在。
root@hobot:/mnt# hexdump -C hobot-pcie.ko |tail 00014d10 58 df 8f 8e fb 98 2a 76 72 b6 44 8c 97 cb 95 81 |X.....*vr.D.....| 00014d20 d7 1e 8b 8c 48 b8 64 54 13 bc d6 63 78 d3 1b 51 |....H.dT...cx..Q| 00014d30 00 2e 0b 3b 84 6b 35 f2 3b 19 b8 d3 3a 27 be bd |...;.k5.;...:'..| 00014d40 21 08 2c 17 3c e3 3c 76 21 23 fc b4 c0 e7 eb 82 |!.,.<.<v!#......| 00014d50 13 5f 2d 69 b2 f4 45 d8 af 90 34 f2 69 9c fa e2 |._-i..E...4.i...| 00014d60 2e 02 e9 34 ce 46 f1 97 a1 00 00 02 00 00 00 00 |...4.F..........| 00014d70 00 00 00 02 a9 7e 4d 6f 64 75 6c 65 20 73 69 67 |.....~Module sig| 00014d80 6e 61 74 75 72 65 20 61 70 70 65 6e 64 65 64 7e |nature appended~| 00014d90 0a |.|
在 ko 文件的末尾有 module signature appended 的字樣代表簽名成功。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。