智能家居安全——身份劫持
字数 2109 2025-08-18 11:37:33
智能家居安全:身份劫持攻击与防御技术详解
1. 智能家居身份标识概述
智能家居系统中,应用、设备和云端交互时携带的身份标识主要包括:
- 账号Cookie相关:如身份Token
- 用户ID:userid
- 设备ID:deviceid
- 认证或加密Key
2. 身份劫持的危害
一旦用户或设备身份被劫持,可能导致:
- 个人信息、聊天内容等隐私敏感信息泄露
- 智能设备被任意控制
- 财产损失
- 用户被持续监控
3. 账号同步环节的身份劫持
3.1 账号同步流程
智能设备初次激活或更改绑定时,用户将身份信息同步给设备并绑定。关键问题:
- 如何验证设备合法性(验证设备ID还是Key?)
- 账号Token如何安全传输(蓝牙、AP等方式)
3.2 厂商A音箱的账号同步漏洞
厂商A音箱采用两种账号同步方式:
- UDP广播方式:向255.255.255.255:50000发送userid、token、wifi SSID和密码
- 语音方式:将上述信息转化为语音播放,音箱进行语音识别
漏洞利用:
- 攻击者可监听UDP 50000端口获取用户userid和token
- 两种方式都使用固定协议格式,协议格式可被破解
4. 设备交互环节的身份劫持
4.1 广域网交互模式(厂商A为例)
交互流程:
- 音箱 → 厂商服务器:携带userid、deviceid、accesstoken和操作指令
- 厂商服务器 → 第三方服务器:通过OAuth授权
- 第三方服务器 → 设备:发送控制指令
身份劫持漏洞:
- userid是顺序可遍历的9位数字(如50123 → 50397)
- 可通过配网窃取或APP端获取userid
- 劫持后可查看聊天记录、自定义问答、设置闹钟、话费充值、控制智能家居等
- "被分享"后宿主无法主动取消分享
4.2 局域网交互模式
4.2.1 厂商B设备(miio协议)
交互流程:
- 广播发送握手协议包 → 设备回复token、IP和ID
- 发送hello bytes获取设备信息结构体"header"
- 构造包含token、ID的header和控制消息发送给设备
漏洞利用:
- 使用python-miio库执行
mirobo discover --handshake 1获取设备IP、ID和Token - 发送hello bytes消息到设备54321端口获取header
- 伪造控制消息结构体(包含header、cmd和checksum)
控制示例:
cmd={'id':1,'method':'set_power','params':['on']}
4.2.2 厂商C设备(***Link协议)
安全协议设计:
- 带认证的ECDH密钥协商 + 对称密钥加密
- 设备预置ECC公钥(Ecc-sPubkey)用于身份认证
- 认证后下发accessKey,用于后续通信加密
- 局域网通信使用localkey(即accessKey)加解密
潜在风险:
- 多个设备共享同一ECC-sPubKey,若泄露可伪造设备
5. 通过应用实现身份劫持
5.1 Webview JS交互接口漏洞
漏洞场景:
- 应用为Webview添加@JavascriptInterface自定义函数获取身份信息
- 未对加载URL进行限制,导致身份信息泄露或远程命令执行
厂商C案例:
- 扫描"合法"URL时调用WebViewActivity加载URL
- URL判断逻辑漏洞导致可调用交互接口获取用户账号
5.2 Webview File域远程信息泄露
厂商A案例:
- WVWebViewActivity接收远程URI scheme:
assistant://hsend***Poc5_web_view?direct_address=url - 开启JS和file访问,设置
WebSettings.setAllowUniversalAccessFromFileURLs(true) - 攻击者可加载恶意HTML文件窃取私有目录身份信息
6. 智能家居身份劫持漏洞总结
- 配网泄露:账号同步过程中身份信息泄露
- 设备交互控制劫持:
- 厂商A:userid作为身份凭证可被劫持
- 厂商B:miio协议中token泄露导致劫持
- 厂商C:协议安全,但共享ECC-sPubKey存在风险
- 应用身份穿越漏洞:
- Webview JS交互接口远程命令执行/信息泄露
- Webview File域远程信息克隆
7. 防御建议
-
账号同步安全:
- 避免使用明文广播传输身份信息
- 实现设备合法性验证机制
- 使用加密通道传输账号Token
-
设备交互安全:
- 避免使用简单可预测的userid
- 实现严格的身份一致性校验(userid与token绑定)
- 操作权限分级,防止提权攻击
-
局域网协议安全:
- 避免使用固定token或共享密钥
- 实现完善的设备身份认证机制
- 使用临时会话密钥
-
应用安全:
- 严格限制Webview的JS接口暴露
- 禁用
setAllowUniversalAccessFromFileURLs - 实现严格的URL校验机制
-
安全开发实践:
- 遵循最小权限原则
- 实施完善的输入验证
- 定期安全审计和渗透测试