第一章 安全威胁建模:识别剃须刀嵌入式系统的资产、威胁与攻击面
大家好,我是你们的嵌入式安全讲师。今天咱们聊聊安全威胁建模。说实话,很多人觉得剃须刀嘛,能有多大的安全风险?我在项目里见过太多这样的想法了,结果呢?出问题的时候往往措手不及。
安全威胁建模,说白了就是提前想清楚:谁会攻击我的设备?他们想干什么?怎么干?我刚开始做嵌入式安全时,总觉得这是大公司才需要操心的事。直到有一次,我负责的一个智能家居产品被爆出存在远程控制漏洞...嗯,从那以后,我再也不敢跳过威胁建模了。
1.1 剃须刀嵌入式系统的资产识别
先问个问题:你的剃须刀里,哪些东西是值钱的?
我个人习惯把资产分成三类:
- 用户数据资产:比如用户的剃须习惯、皮肤敏感度设置、使用时长统计。这些数据看似普通,但一旦泄露,用户隐私就没了。
- 设备功能资产:电机控制逻辑、刀头寿命算法、充电管理策略。这些是产品的核心竞争力。
- 通信与认证资产:蓝牙配对密钥、固件更新签名、设备唯一标识。这些一旦被破解,整个设备就相当于裸奔了。
重要提醒: 我在项目中遇到过,有些团队只关注用户数据,忽略了固件本身的资产价值。结果攻击者通过逆向固件,直接拿到了蓝牙通信的密钥。所以,资产识别一定要全面。
1.2 威胁识别:谁会盯上你的剃须刀?
你可能会想,一个剃须刀能有什么威胁?其实不然。我总结了几类常见的威胁来源:
| 威胁来源 | 动机 | 典型攻击方式 |
|---|---|---|
| 普通用户 | 破解付费功能、绕过限制 | 固件修改、参数篡改 |
| 竞争对手 | 窃取核心技术、逆向工程 | 固件提取、通信协议分析 |
| 恶意攻击者 | 制造混乱、勒索、数据窃取 | 远程控制、固件植入后门 |
| 供应链攻击 | 批量植入恶意代码 | 固件更新劫持、芯片后门 |
这里我想多说一句:别小看普通用户。我曾经见过一个用户,为了省下买替换刀头的钱,硬是通过串口把固件里的刀头寿命计数器给改了。你说这算不算安全威胁?当然算!
1.3 攻击面分析:攻击者从哪里下手?
攻击面,就是攻击者能接触到设备的所有入口。剃须刀虽然小,但攻击面可不少:
- 物理接口:USB充电口、调试串口、JTAG/SWD调试接口。这些是硬件攻击的经典入口。
- 无线通信:蓝牙、NFC、Wi-Fi(如果有)。无线攻击可以远程进行,风险更高。
- 固件更新通道:OTA更新、本地升级。这是植入恶意代码的绝佳途径。
- 传感器输入:压力传感器、温度传感器、霍尔传感器。攻击者可以通过伪造传感器数据来欺骗系统。
- 用户界面:按键、触摸屏、LED指示灯。虽然看起来无害,但有些攻击可以通过按键序列触发隐藏功能。
我的经验: 很多团队只关注无线通信的攻击面,却忽略了物理接口。我建议你在设计初期就把所有接口列出来,然后逐个评估风险。别等到产品量产了才发现调试接口没锁住,那就晚了。
1.4 STRIDE威胁模型实战应用
STRIDE是微软提出的一种威胁建模方法,每个字母代表一种威胁类型。咱们拿剃须刀来套一套:
| 威胁类型 | 含义 | 剃须刀实例 |
|---|---|---|
| S - Spoofing(欺骗) | 冒充合法实体 | 伪造蓝牙配对请求,冒充手机APP |
| T - Tampering(篡改) | 非法修改数据或代码 | 篡改固件中的电机控制参数 |
| R - Repudiation(抵赖) | 否认做过某操作 | 用户否认发送过某个指令 |
| I - Information Disclosure(信息泄露) | 敏感信息被未授权访问 | 通过调试接口读取用户数据 |
| D - Denial of Service(拒绝服务) | 系统不可用 | 发送大量无效蓝牙包导致系统崩溃 |
| E - Elevation of Privilege(权限提升) | 获得更高权限 | 从普通用户模式提权到管理员模式 |
为什么要用STRIDE?说白了,它帮你把威胁分类了,这样你就能针对性地设计防御措施。比如,针对Spoofing,你可以加双向认证;针对Tampering,你可以加固件签名校验。
注意: STRIDE不是万能的。我在项目中遇到过,有些威胁是跨类别的,比如一个攻击可能同时涉及Tampering和Information Disclosure。这时候别死板,灵活处理就好。
1.5 实战案例:一个真实的剃须刀威胁建模过程
我记得有一次,帮一个客户做剃须刀的安全评估。他们的产品支持蓝牙连接手机APP,可以记录用户的剃须习惯。我们做了这么几步:
- 画数据流图:把设备、手机APP、云端服务器之间的数据流向画清楚。
- 标出信任边界:比如蓝牙通信链路就是一条信任边界,数据从手机传到设备,中间可能被截获。
- 逐项应用STRIDE:对每个数据流节点,问自己:这里会不会被欺骗?会不会被篡改?等等。
- 记录威胁清单:把发现的所有威胁记录下来,并评估风险等级。
结果我们发现了一个严重问题:固件更新时,设备没有校验签名。这意味着攻击者可以伪造一个恶意固件,通过OTA通道推送给所有用户。嗯,这个漏洞后来被我们修复了,但想想都后怕。
1.6 本章小结
威胁建模不是一次性的工作。我建议你在产品开发的每个阶段都做一次:需求阶段、设计阶段、测试阶段、甚至量产之后。因为威胁是会变的,新的攻击手段层出不穷。
最后送大家一句话:安全不是功能,而是属性。你没法在最后关头给产品加上安全,它必须从一开始就融入设计。好了,这一章就到这里,下一章咱们聊聊固件安全启动的具体实现。