1.概述
征程 6X 系统在 release 编译时支持内核模块署名验证,仅加载使用正确密钥进行数字署名的内核模块。禁止加载未署名的内核模块或使用错误密钥署名的内核模块,客户须要更换成自己的 key 进行署名。
模块署名启用后,Linux 内核将仅加载使用正确密钥进行数字署名的内核模块。禁止加载未署名的内核模块或使用错误密钥署名的内核模块来进一步强化系统安全。
关于内核模块署名的先容请看下文:
2.配置
2.1 内核配置选项
在 menuconfig 中选中 CONFIG_MODULE_SIG,对应生成的 config 就被默认选中相干配置来支持模块署名。
2.2 配置说明
项目描述CONFIG_MODULE_SIG_FORCE对于严酷的方法,必须存在有效的署名CONFIG_MODULE_SIG_ALL内核模块不自动署名,该选项自动署名所有模块 用于署名的\ 哈希算法\ :SHA-512
… code:: text
CONFIG_MODULE_SIG_SHA512
CONFIG_MODULE_SIG_HASH=“sha512”
3.密钥署名
实验署名可实验步伐,使用密钥对内核模块进行署名。
3.1 Make Module_Install 署名
将内核配置为对模块进行署名,则此署名将在内核编译 make modules_install 时进行署名了。
3.2 手动对 ko 署名
指定须要的证书(包括公钥)和私钥、哈希算法以及内核模块。
通过 sign-file(可实验步伐)使用密钥对要安装到内核的模块进行署名,命令格式如下:
- 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 发布版本中的署名
发布版本中会把署名密钥文件放在 AppSDK 中,给发布版本提供 ko 的时候可以直接用这些署名文件:
ls AppSDK/module_sig/
module_signature.pem module_signature.x509 sign-file
发布包里面也有 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 创建自己的密钥对。
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。
#. 清算完成后,重新编译系统去烧录验证。
#. 通过 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: 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
内核模块在末尾附加了数字署名。一个简单的 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 的字样代表署名成功。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |