嵌入式安全第一关:Secure Boot是怎么保护你的设备的?

你有没有想过一个问题:如果攻击者直接拿编程器夹住你的Flash芯片,把固件全部读出来,你的加密算法就算再强,又有什么用?

这不是假设。我们团队之前做过一个测试------市面上售价百元以内的几款物联网终端设备,超过六成没有做任何物理层面的安全防护。一把夹子、一条杜邦线、一个半小时,固件就能完整dump出来。

很多人把嵌入式安全简单等同于"在代码里用AES加密数据",但在这个连Flash都可以热风枪吹下来放在编程器上读的物理世界里,代码加密的前提是------别人读不到你的代码。

所以要理解嵌入式安全,首先得理解一个概念:信任根。

先看一段典型的MCU启动流程:

c 复制代码
void boot_sequence(void) {
    uint32_t *app_entry = (uint32_t *)APP_START_ADDR;

    // 1. 读取复位向量
    if (*app_entry != 0xFFFFFFFF) {
        // 2. 计算当前固件哈希
        uint8_t hash[32];
        sha256_calculate(APP_START_ADDR, APP_SIZE, hash);

        // 3. 与存储在OTP区域的签名对比
        if (memcmp(hash, (void *)OTP_HASH_ADDR, 32) == 0) {
            // 4. 签名验证通过,正常启动
            jump_to_app(app_entry);
        } else {
            // 固件被篡改,进入安全模式
            enter_safe_mode();
        }
    }
}

这段代码呈现的是一个典型的Secure Boot流程,但关键不在于代码怎么写,而在于"OTP区域的签名"是怎么来的。

OTP,全称One Time Programmable,是信任链的第一环。

芯片出厂时,厂商在OTP区域烧录一个公钥哈希或者设备证书。这个区域只能写一次,且物理上无法被外部接口读取。信任从这里开始------如果连OTP的内容都可以被篡改,那么整个安全体系就崩塌了。

真正的问题是:OTP里的根密钥怎么保证安全?

一个有意思的设计是,很多MCU厂商在芯片内部集成了一个硬件不可克隆函数,英文叫Physically Unclonable Function,简称PUF。PUF利用芯片制造过程中硅片掺杂浓度的微小差异来生成一个唯一的、不可复制的"指纹"。这个指纹被用来派生加密密钥,密钥从不出芯片,只在需要时由PUF实时生成。

绕了一圈,本质逻辑其实是:与其拼命保护一把密钥,不如让这把密钥根本就不存在。不存在的东西,自然偷不走。

再往上一层看,即使Secure Boot和无密钥存储都做好了,还有另一个常被忽视的环节------固件更新通道。

c 复制代码
/* 不安全的固件更新 */
if (receive_packet(&pkt) == SUCCESS) {
    write_flash(UPDATE_ADDR, pkt.data, pkt.len);
    reboot();
}

/* 稍微可靠的版本 */
if (receive_packet(&pkt) == SUCCESS) {
    if (verify_signature(pkt.data, pkt.len, pkt.sig) == VALID) {
        if (decrypt_in_place(pkt.data, pkt.len, session_key) == OK) {
            write_flash(UPDATE_ADDR, pkt.data, pkt.len);
            reboot();
        }
    }
}

两种实现的差别不只是多几行if判断。前一种在OTA升级时,任何人只要在无线信号范围内发送一个伪造的固件包,就能让所有设备变砖------更糟糕的是,如果攻击者植入一个恶意固件,设备就成了别人手里的僵尸。

后一种实现多做了两件事:签名验证保证固件来源可信,会话密钥解密保证传输过程中不会被窃听。这里使用session_key而不是固定密钥的原因是------如果设备所有者的通信都用同一把对称密钥加密,密钥在设备出厂后就无法更换,一旦泄漏就全盘皆输。

从信任根出发,到Secure Boot验证,再到安全固件更新,这三层构成了一条完整的信任链。但有个容易被忽略的细节:信任链的强度取决于最弱的一环。如果生产环节中固件烧录器可以直接跳过签名验证,那前面所有工作都白做了。

生产安全本身就是一个不小的课题。

相关推荐
笨鸟先飞,勤能补拙3 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
加密狗复制模拟3 小时前
使用x64dbg进行超级狗super dog 加密狗逆向分析复制 超级狗克隆备份
安全·软件工程·个人开发·同态加密
ZeroNews内网穿透4 小时前
内网部署企业知识库,通过 HTTPS 隧道实现异地安全访问
安全·内网穿透
笨鸟先飞,勤能补拙5 小时前
AI 赋能网络安全领域深度剖析
网络·人工智能·windows·安全·web安全·网络安全·github
HackTwoHub6 小时前
轻量化AI渗透武器库|ARTEX自主攻防系统、资产梳理、漏洞挖掘、链路分析全流程智能化落地
人工智能·安全·web安全·网络安全·系统安全·网络攻击模型·安全架构
流浪法师126 小时前
GA/T 2380-2026《信息安全技术 网络安全等级保护数据安全基本要求》深度解读
安全
老k一步步来8 小时前
STM32 HAL库CAN通信核心函数详解,参数以及作用
stm32·单片机·嵌入式硬件
gwf2168 小时前
SSD读写速度深度解析:顺序读写vs随机读写、IOPS、延迟,你的硬盘性能到底怎么看?
git·嵌入式硬件·缓存·github·智能硬件
BEOL贝尔科技9 小时前
样本安全存储中还有哪些重要因素需要考虑?如何设置样本安全?
人工智能·安全·数据分析
卓豪终端管理9 小时前
零信任落地,终端是「最后一公里」也是「最难一公里」
安全