news 2026/4/14 23:57:12

【实时 Linux 实战系列】实时系统的安全启动与固件升级

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【实时 Linux 实战系列】实时系统的安全启动与固件升级

一、简介:安全启动为什么关乎“实时性”

  • 实时系统(RT Linux)常用于工业控制、车载 ECU、医疗机器人。

  • 若启动链被篡改(恶意内核、Rootkit),攻击者可在 RT 任务开始前注入代码,导致确定性调度失效,甚至人身安全事故。

  • 传统“关防火墙”式防护无法抵御物理接触攻击;安全启动(Secure Boot)+ 固件加密升级是业界主流方案。

掌握本技能 = 让你的 RT 系统同时满足“硬实时”+“高安全”双重要求。


二、核心概念:5 个关键词一次看懂

关键词一句话解释本文出现形式
UEFI Secure Boot固件验证 EFI 可执行文件(bootloader、内核)签名合法性开启/关闭命令
MOK (Machine Owner Key)用户导入的证书,用于签名内核,固件信任mokutil --import
shim微软签名的第一级引导,允许加载用户自定义 grubshim-signed 包
sbupdate自动化内核签名工具,支持 pacman/apt脚本调用
AES-256-CBC对称加密算法,用于固件包加密传输OpenSSL 命令行

三、环境准备:10 分钟搭好实验台

  1. 硬件

    • x86_64 台式机/笔记本(支持 UEFI,可关闭 Secure Boot 做对比实验)

    • 空 U 盘 ≥8 GB(做恢复盘)

  2. 软件

    • OS:Ubuntu 22.04 LTS(实时内核linux-image-5.15.0-rt

    • 包列表:

      sudo apt update sudo apt install -y shim-signed grub-efi-amd64-signed mokutil sbsigntool openssl
  3. 检查当前启动模式

    [ -d /sys/firmware/efi ] && echo "UEFI 模式" || echo "Legacy 模式"

四、实战 1:开启 UEFI Secure Boot

步骤 1:进入固件 Setup
重启按F2/Del→ 找到Secure Boot→ 设为Enabled
(不同主板菜单位置略有差异,可搜索“主板型号 + Secure Boot”)

步骤 2:验证系统是否启用

mokutil --sb-state

输出SecureBoot enabled表示成功。
注意:首次开启后,未签名的内核将无法启动,请先完成后续签名再 reboot


五、实战 2:生成密钥对并签名内核

  1. 生成 2048 位 RSA 私钥 + 证书

    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -out MOK.pem -nodes -days 3650 -subj "/CN=RT Linux Secure Boot/"
  2. 导入证书到固件

    sudo mokutil --import MOK.pem

    提示输入临时密码(如 12345678)→ 重启进入蓝色 MOK 管理界面 → 选择 “Enroll MOK” → 输入刚才的密码 → 完成导入。

  3. 签名内核与 grub

    KVER=$(uname -r) sudo sbsign --key MOK.priv --cert MOK.pem \ /boot/vmlinuz-$KVER --output /boot/vmlinuz-${KVER}.signed sudo sbsign --key MOK.priv --cert MOK.pem \ /boot/efi/EFI/ubuntu/grubx64.efi --output /boot/efi/EFI/ubuntu/grubx64.efi.signed
  4. 更新 grub 配置

    sudo grub-mkconfig -o /boot/grub/grub.cfg sudo cp /boot/vmlinuz-${KVER}.signed /boot/vmlinuz-$KVER sudo cp /boot/efi/EFI/ubuntu/grubx64.efi.signed /boot/efi/EFI/ubuntu/grubx64.efi
  5. 重启验证

    reboot dmesg | grep -i secure

    出现Secure boot enabled即成功。


六、实战 3:签名内核模块(RT 驱动案例)

场景:实时驱动rt_can.ko未被签名,加载失败ERROR: required key not available

  1. 一次签名所有模块(懒人法)

    sudo find /lib/modules/$(uname -r) -name \*.ko -exec \ /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 \ MOK.priv MOK.pem {} \;
  2. 自动化工具(推荐)
    Ubuntu 安装sudo apt install dkms→ 在/etc/dkms/sign_helper.sh调用sign-file,DKMS 每次编译 RT 驱动即自动签名。

  3. 验证

    sudo modprobe rt_can lsmod | grep rt_can

    无错误信息即加载成功。


七、实战 4:加密固件升级(OpenSSL + AES-256-CBC)

目标:通过 HTTP 下发固件,即使被截获也无法解密。

  1. 生成一次性随机密钥

    openssl rand -hex 32 > fw.key openssl rand -hex 16 > fw.iv
  2. 加密固件包

    openssl enc -aes-256-cbc -in firmware.bin -out firmware.bin.enc \ -K $(cat fw.key) -iv $(cat fw.iv)
  3. 用 MOK 公钥加密密钥(PKCS#7)

    openssl smime -encrypt -aes-256-cbc -in fw.key -out fw.key.enc \ -outform DER MOK.pem
  4. 升级脚本(设备端)

    #!/bin/bash # decrypt_key.sh openssl smime -decrypt -in fw.key.enc -inkey MOK.priv -out fw.key openssl enc -d -aes-256-cbc -in firmware.bin.enc -out firmware.bin \ -K $(cat fw.key) -iv $(cat fw.iv) # 刷写固件(示例:MCU 通过 dfu-util) dfu-util -a 0 -D firmware.bin

    密钥只存内存,掉电即失,防止逆向。


八、常见问题与解答

问题现象解决
mokutil 导入后无蓝色界面主板 Fast Boot 开启关闭 Fast Boot,保存重启
签名内核后无法启动未签名 grub需同时签名 grubx64.efi
模块加载仍提示 key rejected模块未重新签名sign-file再签,或检查 MOK 是否导入成功
Secure Boot 开启后 QEMU 无法嵌套OVMF 未含证书使用OVMF_CODE.secboot.fd+ 导入相同 MOK
固件解密失败key/iv 大小写错误确认openssl rand -hex输出 64/32 位 hex

九、实践建议与最佳实践

  1. 双密钥策略:开发密钥(daily)+ 产品密钥(release),后者离线保存。

  2. CI 集成:GitHub Action 调用sbsign+openssl自动签名内核与固件。

  3. 回滚机制:固件升级包携带版本号,失败自动退回上一版本,保证 RT 任务不中断。

  4. 测量启动(Measured Boot):结合 TPM 2.0 将哈希扩展到 PCR,远程证明系统完整性。

  5. 调试技巧

    • 临时关闭 Secure Boot 排错 → 对比签名前后日志差异。

    • dmesg -w实时查看内核验证失败提示。


十、总结与应用场景

  • 安全启动确保 RT 系统从 BIOS→grub→kernel→驱动的完整信任链,防止恶意代码在实时任务启动前插入。

  • 加密固件升级保障远程更新过程机密性+完整性,即使网络被监听也无法还原固件。

  • 适用场景:

    • 工业实时控制器(PLC、运动控制)

    • 车载 ECU(ADAS、底盘控制)

    • 医疗机器人(手术臂、影像实时处理)

把本文脚本纳入你的 Yocto/Buildroot CI 流水线,即可在下次量产烧录时默认开启 Secure Boot,让“硬实时”与“高安全”不再二选一。祝你玩得开心,启动安全到毫秒级!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/9 8:56:28

Docker MCP服务器镜像瘦身实战:从400MB到15MB的蜕变之旅

Docker MCP服务器镜像瘦身实战:从400MB到15MB的蜕变之旅 【免费下载链接】mcp-gateway docker mcp CLI plugin / MCP Gateway 项目地址: https://gitcode.com/GitHub_Trending/mcpgateway/mcp-gateway 你是否曾因庞大的Docker镜像而头疼?启动缓慢…

作者头像 李华
网站建设 2026/4/10 11:07:59

3天变身桌面美化达人:Conky系统监控界面完全定制指南

3天变身桌面美化达人:Conky系统监控界面完全定制指南 【免费下载链接】conky Light-weight system monitor for X, Wayland, and other things, too 项目地址: https://gitcode.com/gh_mirrors/co/conky 还在忍受单调乏味的系统监控界面吗?想要让…

作者头像 李华
网站建设 2026/4/1 11:03:03

如何在iOS应用中快速实现RSA加密解密的完整指南

如何在iOS应用中快速实现RSA加密解密的完整指南 【免费下载链接】Objective-C-RSA Doing RSA encryption and decryption with Objective-C on iOS 项目地址: https://gitcode.com/gh_mirrors/ob/Objective-C-RSA Objective-C-RSA 是一个专为 iOS 平台设计的开源项目&am…

作者头像 李华
网站建设 2026/4/4 13:24:19

Android依赖合并终极解决方案:深入解析Fat AAR技术架构

Android依赖合并终极解决方案:深入解析Fat AAR技术架构 【免费下载链接】android-fat-aar Gradle script that allows you to merge and embed dependencies in generted aar file 项目地址: https://gitcode.com/gh_mirrors/an/android-fat-aar 在现代Andro…

作者头像 李华
网站建设 2026/4/14 7:54:51

6大房产中介客户管理系统评测

在房产中介行业数字化转型加速的背景下,高效的房产中介系统成为优化业务流程、提升成交效率的核心支撑。无论是中小型中介门店还是连锁机构,选择适配自身需求的房产中介软件,都能有效降低运营成本、规范客户管理。本文聚焦6大主流房产中介系统…

作者头像 李华
网站建设 2026/4/2 21:31:06

Buildbot系统升级全攻略:从零开始的安全迁移方案

Buildbot系统升级全攻略:从零开始的安全迁移方案 【免费下载链接】buildbot Buildbot是一个开源的自动化构建系统,用于自动化软件构建、测试和部署过程。它提供了一套工具和库,可以帮助开发者构建和维护持续集成和持续部署(CI/CD)管道。 项…

作者头像 李华