征程 6X release 版本內核模塊安全加載
01 概述
征程 6X 系統(tǒng)在 release 編譯時支持內核模塊簽名驗證,僅加載使用正確密鑰進行數(shù)字簽名的內核模塊。禁止加載未簽名的內核模塊或使用錯誤密鑰簽名的內核模塊,客戶需要替換成自己的 key 進行簽名。
模塊簽名啟用后,Linux 內核將僅加載使用正確密鑰進行數(shù)字簽名的內核模塊。禁止加載未簽名的內核模塊或使用錯誤密鑰簽名的內核模塊來進一步強化系統(tǒng)安全。
關于內核模塊簽名的介紹請看下文。
02 配置
2.1 內核配置選項
在 menuconfig 中選中 CONFIG_MODULE_SIG,對應生成的 config 就被默認選中相關配置來支持模塊簽名。
2.2 配置說明
項目 | 描述 |
CONFIG_MODULE_SIG_FORCE | 對于嚴格的方法,必須存在有效的簽名 |
CONFIG_MODULE_SIG_ALL | 內核模塊不自動簽名,該選項自動簽名所有模塊 |
用于簽名的\哈希算法\ :SHA-512… code:: textCONFIG_MODULE_SIG_SHA512CONFIG_MODULE_SIG_HASH=“sha512”
03 密鑰簽名
執(zhí)行簽名可執(zhí)行程序,使用密鑰對內核模塊進行簽名。
3.1 Make Module_Install 簽名
將內核配置為對模塊進行簽名,則此簽名將在內核編譯 make modules_install 時進行簽名了。
3.2 手動對 ko 簽名
指定需要的證書(包括公鑰)和私鑰、哈希算法以及內核模塊。
通過 sign-file(可執(zhí)行程序)使用密鑰對要安裝到內核的模塊進行簽名,命令格式如下:
sign-file sha512 module_signature.pem module_signature.x509 xx.ko
手動 ko 簽名實例
SDK 整編時有封裝好的腳本可以用來自動簽名,對于不用 modules_install 進行安裝的模塊,可以用如下腳本:
sign_ko.sh xxx.ko # 傳入驅動 sign_ko.sh dir # 傳入驅動所在目錄
只用 AppSDK 時,需要直接使用下面的命令:
./sign-file sha512 module_signature.pem module_signature.x509 xx.ko
3.3 發(fā)布版本中的簽名
發(fā)布版本中會把簽名密鑰文件放在 AppSDK 中,給發(fā)布版本提供 ko 的時候可以直接用這些簽名文件:
ls AppSDK/module_sig/ module_signature.pem module_signature.x509 sign-file
發(fā)布包里面也有 AppSDK 目錄。
3.4 密鑰
證書 (含公鑰)\ :module_signature.x509 私鑰\ :module_signature.pem
3.5 定制修改簽名機制
要替換固定 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 工具是在支持模塊簽名編譯中生成的。
#. 當 key 替換或者修改簽名機制的時候,需要對工程目錄進行清理:
刪除生成目錄中的內容,rm out/* -rf。
#. 清理完成后,重新編譯系統(tǒng)去燒錄驗證。
#. 通過 strip 命令去去除內核模塊的簽名。
aarch64-linux-gnu-strip -g ~/nfs/module_sig_test.ko
3.6 簽名結果確認
1.dmesg | grep -i x.*509使用新配置的內核重新啟動。在 dmesg 的輸出中,您應該能夠確認加載了正確的證書:
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
內核模塊在末尾附加了數(shù)字簽名。一個簡單的 hexdump 可以確認簽名是否存在。
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 的字樣代表簽名成功。
*博客內容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。