Linux 内核签名(签名内核模块)、linux 驱动签名

本文详细介绍了Linux内核签名的原理和步骤,包括公钥生成、模块签名、内核配置等。同时,讨论了如何判断内核是否启用签名机制以及如何禁用签名。此外,还探讨了Linux驱动签名的两种思路,并提供了处理insmod签名问题的方法和禁用UEFI Secure Boot的解决方案。
摘要由CSDN通过智能技术生成

一、Linux 内核签名

1. 什么是linux 内核签名

内核对于可信计算支持的越来越完善,linux发行版在这个基础上也逐渐默认使能一些它的安全功能,其中一项就是内核module签名。

内核在模块加载时使用加密签名验证,校验签名是否与已编译的内核公钥匹配。目前只支持RSA X.509验证。

签名验证在通过CONFIG_MODULE_SIG使能。打开签名同时还会强制做模块ELF元数据检查,然后再做签名验证。

linux内核从3.7 开始加入模块签名检查机制,如果内核选项CONFIG_MODULE_SIG和CONFIG_MODULE_SIG_FORCE打开的话,当加载模块时内核会检查模块的签名, 如果签名不存在或者签名内容不一致,会强制退出模块的加载。

内核在模块模块加载时使用加密签名验证,校验签名是否与已编译的内核公钥匹配

2. 公钥生成

内核编译时可以指定一系列的公钥。x509.genkey文件用来生成X509密钥。如果没有该文件,系统会自动提供一个默认的配置。Makefile会根据x509.genkey规则在内核编译根目录生成默认配置,用户可以手动更改该文件。
由此在内核编译过程中分别生成私钥和公钥文件分别为./signing_key.priv和./signing_key.x509。

默认配置是使用/dev/random生成的。如果/dev/random没有足够数据,在后台运行以下命令可以生成更多的数据:rngd -r /dev/urandom。

3. 模块签名

设置了CONFIG_MODULE_SIG_ALL,所有模块将会自动添加签名。如果没有设置,需要手动添加:
scripts/sign-file $(MODSECKEY) $(MODPUBKEY) modules.ko
哈希算法必须为sha1, sha224, sha256, sha384, sha512。对应的加密算法必须是使能的。CONFIG_MODULE_SIG_HASH

  • MODSECKEY=
  • 加密私钥文件,默认是./signing_key.priv
  • MODPUBKEY=
  • 加密公钥文件,默认为./signing_key.x509
  • module.ko是需要签名的模块。

4. 如何判断是否开始内核签名

去boot目录下查看config文件

cd /boot/

[root@centOS8 boot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值