发布时间:2026/6/22 9:59:17
因为一个OTA升级没加密,我被客户追着骂了半个月
去年做的一个网关项目出货大概三百多台分布在几个不同的工厂。功能跑得挺好数据也准客户一开始还挺满意。结果有一天半夜对方技术负责人直接甩过来一张截图——设备屏幕上弹出了一行他们完全不认识的字符串然后整台设备就卡死了。排查了三天才搞清楚问题在哪OTA升级固件是明文传输的没有签名校验有人在中间链路注入了一个伪造的固件包。设备傻乎乎地就刷进去了然后就变砖了。这事的教训值六位数。从那之后我才认真琢磨嵌入式安全到底该怎么做。先说一个很多嵌入式工程师容易忽略的事攻击面比你想象的宽得多。你可能会觉得我就一个单片机跑着谁会来黑我但现实是IoT设备一旦联网暴露的攻击面包括OTA通道、物理串口/JTAG、网络端口、Web管理界面、甚至传感器的通信总线。任何一个点没封住都是突破口。我之前那个网关串口调试功能release版本没有禁用。boot阶段有3秒的等待检测如果有人在这3秒内往UART塞0x1F固件恢复指令设备就会进入firmware recovery模式从SD卡刷固件。这个洞是客户自己发现的他们团队的一个安全研究员拿着逻辑分析仪在那捅咕了两小时就找到了。怎么说呢那一刻脸上挺挂不住的。所以嵌入式安全到底要防什么我觉得核心就三个东西1. 防固件被提取/逆向这其实是很多二次开发需求的前提。之前有客户问我们能不能把固件dump出来给他们自己改——当然不能。但如果你没做保护他们是真能自己读出来的。保护手段读保护RDP等级设到Level 2一次性熔断。STM32叫RDP Level 2其他MCU叫法不同但原理一样——设置之后debug interface彻底废掉再也读不了flash。如果用外部flash存代码或者关键数据里面的内容要加密存放。我之前用过一个方案是AES-128-CBC密钥烧在MCU内部OTP区域外部flash的密文数据只有CPU能解密。唯一ID绑定。把MCU的unique ID参与解密密钥的派生这样即使固件被读出来了换一颗芯片也跑不了。2. 防固件被篡改/注入这就是我踩的那个坑。// 一个简陋到不能再简陋的签名校验 // 以前我是这么写的——完全没校验 if (download_ota_package( pkg )) { spi_flash_erase(APP_PARTITION); spi_flash_write(APP_PARTITION, pkg.data, pkg.size); system_reboot(); } // 后来改成这样 if (download_ota_package( pkg )) { // 先验证签名 if (verify_ecdsa_signature( pkg.data, pkg.size - SIGNATURE_LEN, pkg.data pkg.size - SIGNATURE_LEN, public_key)) { spi_flash_erase(APP_PARTITION); spi_flash_write(APP_PARTITION, pkg.data, pkg.size - SIGNATURE_LEN); system_reboot(); } else { log_error(OTA signature verification failed!); report_ota_failure(ERR_SIGNATURE); } }看起来就多了几行代码但区别是一个会被黑一个不会。公钥存在内部flash的只读区域生产的时候烧进去之后熔断写保护。签名算法我们用的是ECDSA with P-256密钥对用openssl生成。这套方案后来跑了两年多没出过问题。唯一要注意的是签名验证本身不能太久——我之前用mbedTLS的软件实现在180MHz的Cortex-M4上验一次签大概要40msOTA升级时勉强能接受。如果换了更慢的MCU可能需要硬件加速器或者用更轻量的Ed25519。3. 防通信被窃听/重放TLS是基础操作但在资源受限的MCU上跑full TLS握手确实有点吃力。我们的做法是支持TLS 1.3相比1.2少了一次RTT握手快很多用PSK模式替代证书模式节省证书解析的开销如果MCU实在带不动TLS至少用DTLS Pre-shared Key做应用层加密每个消息包里带一个单调递增的sequence number防止重放攻击我之前在一个Cortex-M0的芯片上做过实验纯软件算TLS握手开不起来RAM只有16KB最后方案是MCU负责加密载荷TLS握手交给外挂的Wi-Fi模块ESP32去完成两边通过SPI传数据。说到工具有几个趁手的可以提一下MCUboot开源的bootloader支持签名验证和固件回滚用起来挺顺手。配合Zephyr或自己的RTOS都行Trusted Firmware-M如果芯片支持ARM TrustZone的话可以上隔离安全和非安全世界WolfSSL比mbedTLS更轻量的TLS库对RAM的压榨到了令人发指的程度——最小配置下ROM不到50KBSTM32TrustST自己的一套安全框架集成了secure boot、secure firmware update、secure storage说实话嵌入式安全是个挺大的话题我这边写到的也只是自己踩过坑的部分。真要系统做的话还有安全启动链chain of trust、安全日志审计、侧信道防护、甚至物理层面的防探针攻击……这些我也还在学。不过如果你问我最想说什么别觉得自己做的东西不值一黑。三百块的网关和三个亿的系统防线上的漏洞往往是一样的。

相关新闻

LangGraph+Ollama本地AI Agent工程实践指南
2026/6/22 9:59:17

LangGraph+Ollama本地AI Agent工程实践指南

1. 项目概述:为什么本地AI Agent不再是“玩具”,而是可落地的生产力工具我第一次在本地跑通一个能自主规划、调用工具、反复反思的AI Agent时,没敢关终端——生怕一刷新就断了。那会儿用的是LangChain Llama3-8B 自写调度逻辑,整…

阅读更多
怎么判断自己适不适合搞算法/科研?先来闯这“5关”试试(3SAT篇)
2026/6/22 9:59:17

怎么判断自己适不适合搞算法/科研?先来闯这“5关”试试(3SAT篇)

做题逻辑: 3SAT 不是一道普通的算法题,它是整个 NP-Complete(NP完全) 理论大厦的“地基”。 面对它,普通程序员想的是“怎么写出暴力破解”,而顶尖研究者想的是“为什么这玩意这么难,以及我们该…

阅读更多
i.MX31到i.MX35嵌入式平台迁移实战:硬件设计、软件移植与避坑指南
2026/6/22 9:59:17

i.MX31到i.MX35嵌入式平台迁移实战:硬件设计、软件移植与避坑指南

1. 项目概述:为何要深入对比i.MX31与i.MX35?在嵌入式江湖里混了十几年,从早期的ARM7、ARM9一路跟到现在的Cortex-A系列,我经手过的项目里,飞思卡尔(现在叫NXP了)的i.MX系列处理器绝对是常客。尤…

阅读更多
5分钟快速上手:ExplorerPatcher让你的Windows 11重获经典界面
2026/6/22 10:59:17

5分钟快速上手:ExplorerPatcher让你的Windows 11重获经典界面

5分钟快速上手:ExplorerPatcher让你的Windows 11重获经典界面 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher 还在为Windows 11的全…

阅读更多
3个关键步骤:免费解锁Wand专业版功能并实现远程控制
2026/6/22 10:59:17

3个关键步骤:免费解锁Wand专业版功能并实现远程控制

3个关键步骤:免费解锁Wand专业版功能并实现远程控制 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer Wand-Enhancer是一款为Wand(…

阅读更多
Ubuntu 12.04下Nginx SSL手动配置实战指南
2026/6/22 10:59:17

Ubuntu 12.04下Nginx SSL手动配置实战指南

1. 项目概述:为什么在 Ubuntu 12.04 上为 Nginx 配置 SSL 证书,今天依然值得深挖你可能第一反应是:“Ubuntu 12.04?这系统都停更十年了,谁还在用?”——没错,官方支持早在2017年4月就彻底终止&a…

阅读更多
Seedance 2.0阉割版实测解析:能力退化、验证方法与合规绕行方案
2026/6/22 10:59:17

Seedance 2.0阉割版实测解析:能力退化、验证方法与合规绕行方案

1. 项目概述:当“Seedance 2.0”成为一句带着疑问的行业暗号最近在AI视频创作圈子里,你要是没听过“Seedance 2.0 已被阉割?”这句话,大概率刚入坑不久。这不是某条微博评论区的情绪发泄,而是大量实测用户在本地部署、…

阅读更多
强化学习探索与利用平衡:扩展BoN采样方法原理与实践
2026/6/22 10:59:17

强化学习探索与利用平衡:扩展BoN采样方法原理与实践

1. 项目概述:当强化学习遇上“选择困难症” 在强化学习的实战里,我们经常会遇到一个经典的“选择困难症”:探索还是利用?简单来说,就是智能体(Agent)在面对一个未知环境时,是该去尝试…

阅读更多
Android Smart Lock 集成深度解析:系统级凭据管理原理与落地实践
2026/6/22 9:59:17

Android Smart Lock 集成深度解析:系统级凭据管理原理与落地实践

1. Google Smart Lock 在 Android 开发中早已不是“功能”,而是用户信任的临界点 你有没有遇到过这样的场景:用户在应用登录页输入账号密码后,点击“记住我”,结果下次打开 App 时——依然要重输?或者更糟:…

阅读更多
嵌入式语音编解码实战:G.726 ADPCM库集成与优化指南
2026/6/21 0:59:13

嵌入式语音编解码实战:G.726 ADPCM库集成与优化指南

1. 项目概述与G.726 ADPCM技术背景在嵌入式语音处理领域,带宽和存储资源往往是寸土寸金的。如果你做过对讲机、VoIP网关或者早期的数字录音设备,一定对如何在有限的比特率下保住语音可懂度这件事深有感触。我当年接手一个车载调度系统的项目,…

阅读更多
ITU656格式化器寄存器配置实战:VBI数据处理与VCR特技播放兼容性
2026/6/21 0:59:13

ITU656格式化器寄存器配置实战:VBI数据处理与VCR特技播放兼容性

1. 项目概述与核心挑战在数字视频处理领域,将原始的视频数据、同步时序以及各种辅助信息打包成一个标准、稳定的串行数据流,是确保设备间互联互通的基础。ITU-R BT.656标准(常简称为ITU656)正是为此而生的一套“交通规则”。它定义…

阅读更多
嵌入式GUI开发实战:emWin环境搭建、配置优化与性能调优指南
2026/6/21 0:59:13

嵌入式GUI开发实战:emWin环境搭建、配置优化与性能调优指南

1. 项目概述与emWin核心价值解析在嵌入式系统开发领域,人机交互(HMI)的设计正从简单的LED指示灯和按键,快速向全彩图形化界面演进。无论是智能家电上的触摸屏、工业PLC的操作面板,还是医疗设备的参数显示,一…

阅读更多
Playwright-CLI与AI Skills结合:打造高效UI自动化测试工作流
2026/6/22 0:59:16

Playwright-CLI与AI Skills结合:打造高效UI自动化测试工作流

1. 项目概述:当Playwright-CLI遇上Skills,UI自动化测试的“超级进化”最近在搞UI自动化测试的朋友,估计都听说过Playwright的大名。它确实是个好工具,但说实话,纯代码编写和维护测试脚本,对很多测试同学或者…

阅读更多
SPARSEGEN:用稀疏查询破解3D生成视角偏差难题
2026/6/22 0:59:16

SPARSEGEN:用稀疏查询破解3D生成视角偏差难题

1. 项目概述:当3D生成遇上“视角偏差”的硬骨头最近在折腾3D内容生成的朋友,估计都绕不开一个头疼的问题:视角偏差。简单来说,就是你用AI生成的3D模型,从正面看可能是个帅哥美女,但稍微换个角度&#xff0c…

阅读更多
Forza Mods AIO:免费解锁极限竞速地平线4/5完整修改功能指南
2026/6/22 0:59:16

Forza Mods AIO:免费解锁极限竞速地平线4/5完整修改功能指南

Forza Mods AIO:免费解锁极限竞速地平线4/5完整修改功能指南 【免费下载链接】Forza-Mods-AIO Free and open-source FH4 & FH5 mod tool 项目地址: https://gitcode.com/gh_mirrors/fo/Forza-Mods-AIO Forza Mods AIO是一个完全免费的开源工具&#xff…

阅读更多
GIT修改用户名
2026/6/22 5:10:42

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/22 10:07:50

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/21 13:29:25

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多