智能家居安全——身份劫持
字数 2109 2025-08-18 11:37:33

智能家居安全:身份劫持攻击与防御技术详解

1. 智能家居身份标识概述

智能家居系统中,应用、设备和云端交互时携带的身份标识主要包括:

  1. 账号Cookie相关:如身份Token
  2. 用户ID:userid
  3. 设备ID:deviceid
  4. 认证或加密Key

2. 身份劫持的危害

一旦用户或设备身份被劫持,可能导致:

  1. 个人信息、聊天内容等隐私敏感信息泄露
  2. 智能设备被任意控制
  3. 财产损失
  4. 用户被持续监控

3. 账号同步环节的身份劫持

3.1 账号同步流程

智能设备初次激活或更改绑定时,用户将身份信息同步给设备并绑定。关键问题:

  1. 如何验证设备合法性(验证设备ID还是Key?)
  2. 账号Token如何安全传输(蓝牙、AP等方式)

3.2 厂商A音箱的账号同步漏洞

厂商A音箱采用两种账号同步方式:

  1. UDP广播方式:向255.255.255.255:50000发送userid、token、wifi SSID和密码
  2. 语音方式:将上述信息转化为语音播放,音箱进行语音识别

漏洞利用

  • 攻击者可监听UDP 50000端口获取用户userid和token
  • 两种方式都使用固定协议格式,协议格式可被破解

4. 设备交互环节的身份劫持

4.1 广域网交互模式(厂商A为例)

交互流程

  1. 音箱 → 厂商服务器:携带userid、deviceid、accesstoken和操作指令
  2. 厂商服务器 → 第三方服务器:通过OAuth授权
  3. 第三方服务器 → 设备:发送控制指令

身份劫持漏洞

  • userid是顺序可遍历的9位数字(如50123 → 50397)
  • 可通过配网窃取或APP端获取userid
  • 劫持后可查看聊天记录、自定义问答、设置闹钟、话费充值、控制智能家居等
  • "被分享"后宿主无法主动取消分享

4.2 局域网交互模式

4.2.1 厂商B设备(miio协议)

交互流程

  1. 广播发送握手协议包 → 设备回复token、IP和ID
  2. 发送hello bytes获取设备信息结构体"header"
  3. 构造包含token、ID的header和控制消息发送给设备

漏洞利用

  1. 使用python-miio库执行mirobo discover --handshake 1获取设备IP、ID和Token
  2. 发送hello bytes消息到设备54321端口获取header
  3. 伪造控制消息结构体(包含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交互接口漏洞

漏洞场景

  1. 应用为Webview添加@JavascriptInterface自定义函数获取身份信息
  2. 未对加载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. 智能家居身份劫持漏洞总结

  1. 配网泄露:账号同步过程中身份信息泄露
  2. 设备交互控制劫持
    • 厂商A:userid作为身份凭证可被劫持
    • 厂商B:miio协议中token泄露导致劫持
    • 厂商C:协议安全,但共享ECC-sPubKey存在风险
  3. 应用身份穿越漏洞
    • Webview JS交互接口远程命令执行/信息泄露
    • Webview File域远程信息克隆

7. 防御建议

  1. 账号同步安全

    • 避免使用明文广播传输身份信息
    • 实现设备合法性验证机制
    • 使用加密通道传输账号Token
  2. 设备交互安全

    • 避免使用简单可预测的userid
    • 实现严格的身份一致性校验(userid与token绑定)
    • 操作权限分级,防止提权攻击
  3. 局域网协议安全

    • 避免使用固定token或共享密钥
    • 实现完善的设备身份认证机制
    • 使用临时会话密钥
  4. 应用安全

    • 严格限制Webview的JS接口暴露
    • 禁用setAllowUniversalAccessFromFileURLs
    • 实现严格的URL校验机制
  5. 安全开发实践

    • 遵循最小权限原则
    • 实施完善的输入验证
    • 定期安全审计和渗透测试

8. 参考文献

  1. 基于TLS1.3的微信安全通信协议mmtls介绍
  2. python-miio库
  3. 智能家居安全研究
智能家居安全:身份劫持攻击与防御技术详解 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位数字(如50 123 → 50 397) 可通过配网窃取或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) 控制示例 : 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校验机制 安全开发实践 : 遵循最小权限原则 实施完善的输入验证 定期安全审计和渗透测试 8. 参考文献 基于TLS1.3的微信安全通信协议mmtls介绍 python-miio库 智能家居安全研究