1、安全威胁概述:嵌入式系统面临的安全风险、常见攻击向量、安全加固的必要性

1.1 为什么嵌入式系统成了“软柿子”?

说实话,我入行那会儿,嵌入式系统还是个“小透明”。大家更关心的是功能能不能跑起来,功耗够不够低。安全?那是什么?能吃吗?

但这些年,情况完全变了。你想想看,现在家里的智能灯泡、门口的摄像头、车上的ECU、工厂里的PLC……这些东西全都连上了网。以前黑客要攻击你,得坐在电脑前敲键盘。现在呢?他可能蹲在你家楼下,用手机就能黑掉你的门锁。

嵌入式系统为什么容易成为目标?我个人总结了几点:

  • 资源受限:CPU跑不动复杂的加密算法,内存装不下完整的安全协议栈。我见过一个项目,MCU只有64KB Flash,连个TLS握手都跑不完。
  • 生命周期长:很多嵌入式设备一用就是十年八年。出厂时的安全补丁,三年后早就过时了。但设备还在跑,漏洞也还在。
  • 物理可接触:服务器锁在机房里,手机揣在兜里。但嵌入式设备呢?可能挂在墙上、埋在墙里、扔在路边。攻击者可以直接拿示波器戳你的PCB板。
  • 更新困难:OTA升级?很多老设备根本不支持。就算支持,用户也不一定愿意升级。我遇到过客户,设备被黑了还怪我们没提前说。

核心观点:嵌入式系统的安全,不是“要不要做”的问题,而是“不做会死”的问题。尤其是物联网设备,一旦被控,后果可能是物理世界的灾难。

1.2 常见攻击向量:黑客是怎么进来的?

攻击嵌入式系统的手段,其实比你想的要多。我按攻击路径分了几类,你看看有没有你熟悉的:

1.2.1 网络攻击

这是最常见的。设备只要联网,就暴露在互联网上。常见的网络攻击包括:

  • 端口扫描与暴力破解:很多设备出厂默认开了Telnet、SSH,密码还是admin/admin。我扫过一次,十分钟能找到上百台这样的设备。
  • 协议漏洞利用:MQTT、CoAP、Modbus TCP……这些协议在设计时就没怎么考虑安全。比如Modbus,连个认证都没有。
  • 中间人攻击:如果通信没有加密,攻击者可以轻松篡改数据。我在项目中遇到过,一个智能电表的数据被篡改,导致计费出错。

1.2.2 物理攻击

这是嵌入式系统特有的风险。攻击者拿到了设备,能做的事情就多了:

  • JTAG/SWD调试接口:很多开发板出厂时没锁调试口。攻击者接上J-Link,直接就能dump出整个Flash。我建议,量产前一定要把调试口锁死。
  • 串口嗅探:UART接口经常被用来输出调试日志。但很多产品出厂后还留着这个口,攻击者接上串口线,就能看到系统启动信息,甚至拿到shell。
  • 侧信道攻击:通过分析功耗、电磁辐射来破解密钥。听起来很玄乎?其实用个便宜的示波器就能做。我在实验室里试过,几分钟就能拿到AES密钥。
  • 故障注入:用激光、电磁脉冲干扰芯片运行,跳过安全检查。嗯,这个门槛有点高,但确实存在。

1.2.3 软件供应链攻击

这个我特别想强调。很多嵌入式系统用了大量的开源软件、第三方库。你想想看,你用的那个uClibc、那个OpenSSL,有没有漏洞?

  • 依赖库漏洞:比如Heartbleed、Shellshock,这些漏洞影响了几亿台设备。我检查过一些客户的BOM,里面用的库版本比最新的落后了五六年。
  • 恶意固件注入:攻击者可能在固件更新包中植入后门。如果更新过程没有签名验证,那基本等于开门揖盗。
  • 开发工具链被污染:这个比较高级,但确实发生过。比如编译器被植入了后门,编译出来的所有程序都带毒。

1.2.4 无线攻击

现在设备都支持Wi-Fi、蓝牙、Zigbee、LoRa……这些无线协议本身就有漏洞:

  • 蓝牙重放攻击:我记得有个项目,蓝牙门锁的通信没做防重放。攻击者抓包后,重复发送一次开锁指令,门就开了。
  • Wi-Fi Deauth攻击:强制断开设备与路由器的连接,然后诱导设备连接恶意热点。
  • Zigbee密钥泄露:很多Zigbee设备的网络密钥是硬编码在固件里的。拿到一个设备,就能解密整个网络。

避坑指南:我曾经帮一个客户做安全审计,发现他们的设备居然用明文存储Wi-Fi密码。攻击者只要拿到设备,就能连上用户家里的路由器。嗯,这个漏洞评级直接给了Critical。

1.3 安全加固的必要性:不做会怎样?

你可能觉得,我的设备就是个温度传感器,谁闲得没事来黑我?

我跟你讲,这种想法很危险。攻击者的动机五花八门:

攻击动机 典型案例 后果
勒索 攻击智能门锁,锁住用户不让进门 用户被迫支付赎金
挖矿 控制IoT设备组建僵尸网络挖矿 设备性能下降,电费飙升
窃取数据 从智能摄像头窃取视频流 用户隐私泄露,企业声誉受损
破坏基础设施 攻击电网、水厂的PLC 物理世界灾难,甚至人员伤亡
商业间谍 从工业设备中窃取生产工艺参数 企业核心竞争力丧失

说白了,安全加固不是成本,而是投资。你花在安全上的每一分钱,都是在避免未来可能发生的灾难性损失。

我个人习惯,在项目启动阶段就把安全需求写进设计文档。而不是等到产品快上市了,才想起来“哦,我们好像没做安全”。那时候再改,成本至少翻十倍。

1.4 我的建议:从Yocto开始构建安全基础

Yocto项目给了我们一个很好的机会。它不是一个“做完就忘”的构建系统,而是一个可以深度定制、持续维护的平台。

在后续的章节中,我会带你一步步实践:

  • 如何裁剪不必要的服务,减少攻击面
  • 如何配置内核安全选项,启用SELinux/AppArmor
  • 如何实现安全启动和固件签名
  • 如何做OTA安全更新
  • ……

记住一句话:安全不是某个功能,而是一种设计理念。从你开始写第一行代码、配置第一个Yocto recipe时,安全就应该在你的脑子里。

警告:不要等到产品被黑了才后悔。我见过太多公司,出事之前觉得安全是“浪费钱”,出事之后才发现,那点安全投入连公关费用的零头都不到。

好了,这一章就到这里。下一章,我们聊聊Yocto的安全架构,看看这个构建系统到底能帮我们做些什么。