当前位置: 首页 > news >正文

Linux内核模块签名技术

inux 内核运行在系统的最高特权级别(Ring 0)。为了防止恶意代码(如 Rootkit)通过内核模块(.ko文件)直接侵入系统核心,Linux 引入了内核模块签名技术(Kernel Module Signing)
下面为您详细拆解该技术的核心原理、签名流程以及内核运行时的验签过程。

一、 核心技术原理

Linux 内核模块签名其本质是非对称加密算法(如 RSA 或 ECDSA)与散列算法(如 SHA-256)的结合应用

1. 密钥对分工

  • 私钥(Private Key):保留在构建服务器(编译内核的主机)上,用于对生成的内核模块进行数字签名。私钥绝对不能泄露,甚至可以在签名完成后立即销毁。
  • 公钥(Public Key):包装在 X.509 证书中,直接编译进内核镜像(vmlinuz)。内核在运行时只认这个内置的公钥。

2. 追加式签名结构(Appended Signature)

普通的数字签名(如 GPG 签名)通常会生成一个独立的.sig文件,但 Linux 内核模块采用的是追加签名的方式。
  • 签名工具计算完.ko文件的哈希并用私钥加密后,会把这段签名二进制数据(PKCS#7 格式)直接强行追加到.ko文件的末尾。
  • 在文件最末尾,还会追加一个固定的魔法字符串(Magic String)~Module signature appended~以及一个描述签名大小的特殊结构体。这样内核读取文件末尾时,就能瞬间判断该模块是否已被签名。

二、 模块签名过程(编译期 / Build Time)

签名过程发生在内核或模块编译完成之后、发布之前。通常由内核源码树自带的脚本工具sign-file自动化完成。
[编译出的未签名 driver.ko] │ ▼ (使用 SHA-256 计算文件哈希值) [Hash Value] │ ▼ (使用 私钥 MOK.priv 进行加密) [PKCS#7 签名数据] │ ▼ (将签名数据 + 魔法字符串追加到原文件末尾) [已签名的 driver.ko]

详细步骤:

  1. 内核编译系统生成密钥对:如果内核配置了自动签名,编译时会在内核根目录下自动生成signing_key.pem(私钥)和signing_key.x509(包含公钥的证书)。
  2. 提取公钥:编译系统将signing_key.x509证书中的公钥硬编码嵌入到内核镜像的.builtin_trusted_keys密钥环中。
  3. 计算哈希:签名工具(sign-file)读取编译好的.ko文件(不含末尾),使用指定的散列算法(如 SHA-256)计算出整个模块的哈希值。
  4. 生成并追加签名:工具使用私钥对哈希值进行非对称加密,生成符合 PKCS#7 规范的签名数据块,并将其以及魔法字符串~Module signature appended~写入.ko文件的尾部。

三、 模块验签过程(运行期 / Runtime)

当管理员或系统服务执行modprobeinsmod命令加载模块时,系统会发起finit_moduleinit_module系统调用,将模块数据读入内核空间,随后内核展开验签逻辑。

详细步骤:

  1. 检测签名标记:内核模块加载器首先将指针移到读入内存的模块数据末尾,检查是否存在~Module signature appended~魔法字符串。
  • 如果没有:说明这是个未签名模块,内核转入“无签名处理策略”。
  • 如果有:内核根据末尾的结构体解析出签名数据的长度,将签名块和原本的 ELF 模块数据分离。
  1. 提取公钥:内核前往自身的受信任密钥环(Keyring)中查找匹配的公钥证书。
  2. 解密与比对(验签):
  • 内核使用公钥解密签名块,得到由编译期计算的原始哈希值 H_1
  • 内核使用相同的散列算法(如 SHA-256)重新计算当前接收到的 ELF 模块数据的当前哈希值 H_2
  • 比对二者:如果H_1 == H_2,则验签成功,说明模块来源可信且在传输/存储过程中未被篡改;如果H_1 != H_2,则验签失败。

四、 验签失败或无签名时的内核策略

内核验证完签名后,会根据 Linux 内核编译配置文件(.config)中的安全策略以及是否开启了 UEFI 安全启动(Secure Boot)来决定模块的命运:
场景 / 内核配置
策略类型
验签通过
无签名 / 验签失败
CONFIG_MODULE_SIG=y
(未开启强制)
宽松/审计模式
正常加载。
允许加载,但内核会在日志(dmesg)中抛出严重警告,并将内核状态标记为Tainted(受污染)
CONFIG_MODULE_SIG_FORCE=y
(开启强制)
强制锁定模式
正常加载。
直接拒绝加载。系统调用返回错误(通常提示Required key not availableKey was rejected by service)。
开启 UEFI Secure Boot
最高安全模式
正常加载。
此时无论内核如何配置,内核都会强制自动升级为锁定模式,任何签名不对或无签名的模块绝对无法加载。
http://www.rkmt.cn/news/1534546.html

相关文章:

  • 2026绍兴贵金属旧料回收优质实体店精选 5 家 黄金回收铂金白银回收真实探店测评清单 - 中业金奢再生回收中心
  • 2026眉山本地认可的 5 家排污许可废气废水监测机构实地测评汇总 废水废气 + 自行监测 + CMA 检测报告 附电话地址 - 科信检测
  • 2026年最新主流招聘平台排名选型参考与常见问题梳理
  • 2026运城商户高频选择的 5 家公共卫生第三方检测机构实地测评整理 公共场所 + 水质卫生检测 附电话地址 - 鉴安检测
  • 深度拆解:如何将商显电源板厚度压缩40%?3步看懂超薄高功率密度的实现路径
  • 2026德阳本地防雷检测哪家专业?TOP 正规机构榜单 + 防雷装置 + 接地电阻 + SPD 检测 附电话地址 - 中安检测集团
  • 2026杭州西湖萧山钻石 实地探店测评 多家门店比价实测 - 逸程
  • 算法与玄学:当代码遇见哲学,从梯度下降到易经六十四卦的思维跨界
  • 基于OV2640传感器实现工业级全局快门效果的软硬件方案
  • 华为“朋友圈”再添一员!乾崑高阶智驾「杀」至15万?
  • 2026南京黄金回收避坑真相|不懂行业内幕,你的旧黄金大概率卖亏 - 开心测评
  • 2026深圳黄金回收避坑 没有发票也能卖吗 - 逸程
  • 2026蚌埠本地防雷检测哪家专业?TOP 正规机构榜单 + 防雷装置 + 接地电阻 + SPD 检测 附电话地址 - 中安检测集团
  • 2026寿县装修合同签订指南 闭口合同为什么更安心 - 装企自媒体训练营辉哥
  • 2026贵阳贵金属旧料回收优质实体店精选 5 家 黄金回收铂金白银回收真实探店测评清单 - 中业金奢再生回收中心
  • 2026六盘水本地认可的 5 家排污许可废气废水监测机构实地测评汇总 废水废气 + 自行监测 + CMA 检测报告 附电话地址 - 科信检测
  • 天津芬迪葆蝶家包包回收门店推荐|本地靠谱奢品回收机构排名 - 名奢变现站
  • 全国消协智慧315平台投诉信息数据库
  • 2026甘南贵金属旧料回收优质实体店精选 5 家 黄金回收铂金白银回收真实探店测评清单 - 中业金奢再生回收中心
  • ContextMenuManager深度解析:如何安全高效管理Windows右键菜单
  • 2026吉安贵金属旧料回收优质实体店精选 5 家 黄金回收铂金白银回收真实探店测评清单 - 中业金奢再生回收中心
  • 2026 杭州黄金回收 “天花板”|零差评+免费估价+全城上门 - 开心测评
  • 跨境投资合规操作指南:从政策理解到实操落地
  • 腾讯发布WorkBuddy企业版,员工能力或成企业资产(含限时福利)
  • 媞娜团队:持国际旅行社资质的新疆正规旅行社如何做纯玩闺蜜小团 - 老张爱旅游
  • 全媒体广告投放如何量化ROI?一套跨平台归因模型详解
  • 免费微信投票小程序推荐 | 云众评选VS腾讯投票VS问卷星,免费无广告防刷 + 图文视频谁更强? - 微信投票小程序
  • 手机号被运营商回收并分配给另一个人,用户会员数据如何处理?
  • 大模型时代工程师的不可替代性:从执行者到系统定义者
  • 上海羁押必要性审查申请:降低羁押率的法律途径与材料准备 - 品牌2026