2018年 KCon 议题解读 | 智能家居安全——身份劫持
字数 2096 2025-08-22 12:22:24

智能家居安全——身份劫持技术分析与防御

一、摘要

本文深入分析了智能家居设备身份劫持的安全问题,通过研究国内主流智能家居产品的身份验证机制和设备交互协议,揭示了身份凭证窃取的技术原理和实现方法。文章详细介绍了账号同步和设备交互两个关键环节的安全漏洞,并提供了具体厂商(厂商A、B、C)的实际案例分析,最后总结了智能家居身份劫持的常见漏洞类型和防御建议。

二、智能家居身份标识与劫持危害

2.1 身份标识类型

智能家居系统中常见的身份标识包括:

  • 账号cookie相关:如身份Token
  • 用户ID:userid
  • 设备ID:deviceid
  • 认证或加密密钥

2.2 身份劫持的危害

  1. 隐私泄露:个人信息、聊天内容等敏感信息被窃取
  2. 设备控制权丧失:智能设备可被攻击者任意控制
  3. 财产损失:通过设备进行支付等操作导致经济损失
  4. 监控风险:设备可能被用于持续监控用户活动

三、账号同步环节的身份劫持

3.1 账号同步流程

智能设备初次激活或更改绑定时,用户身份信息同步给设备的过程。

3.2 常见问题

  1. 设备合法性验证不足:仅验证设备ID或密钥,容易被伪造
  2. 账号Token传输不安全:通过不安全的通道(如蓝牙、AP)传输

3.3 厂商A音箱案例分析

账号同步方式

  1. UDP广播方式:向255.255.255.255:50000发送userid、token和WiFi信息
  2. 语音传输方式:将身份信息转化为语音播放,音箱识别

漏洞利用

  • UDP广播方式:攻击者可监听50000端口获取userid和token
  • 语音传输方式:协议格式固定,可被逆向破解

协议格式

[协议头][userid长度][userid][token长度][token][ssid长度][ssid][密码长度][密码]

四、设备交互环节的身份劫持

4.1 广域网交互

厂商A案例分析

交互流程

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

身份劫持漏洞

  • userid为顺序9位数字,可遍历猜测
  • 服务器仅验证userid,不验证token与userid的绑定关系
  • 设备"分享"功能设计缺陷:宿主无法主动取消分享

劫持危害

  • 查看用户聊天记录
  • 自定义问答设置
  • 设置闹钟、话费充值
  • 智能家居设备控制

4.2 局域网交互

厂商B案例分析(基于miio协议)

交互流程

  1. 广播握手包获取设备token、IP和ID
  2. 发送hello bytes获取设备消息结构体header
  3. 构造控制消息(包含token、ID等)实现设备控制

消息结构体

typedef struct {
    Header,
    cmd,
    checksum
} Msg;

劫持方法

  1. 使用python-miio库发现设备:mirobo discover --handshake 1
  2. 获取设备信息结构体
  3. 伪造控制消息结构体

厂商C案例分析(基于***Link协议)

协议特点

  • 带认证的ECDH密钥协商+对称密钥加密
  • 防御中间人攻击机制

密钥协商流程

  1. 设备预置Ecc-sPubkey
  2. 云端验证设备身份后下发accessKey
  3. 应用使用ECDH协商密钥加密传输accessKey
  4. 局域网通信使用localkey(即accessKey)加解密

消息结构体

  • 协议包头
  • opt字段
  • Payload(使用LocalKey加密)

五、通过应用实现身份劫持

5.1 Webview JS交互接口漏洞

漏洞类型

  1. 通过@JavascriptInterface暴露敏感接口
  2. URL加载限制不严导致远程命令执行或信息泄露

利用方法

  • 调用WebViewActivity定义的交互接口获取账号信息
  • 绕过URL检查逻辑(如仅检查是否包含特定字符串)

5.2 Webview file域远程信息泄露

漏洞条件

  1. 开启WebSettings.setAllowUniversalAccessFromFileURLs(true)
  2. 对加载的URL无严格限制

利用方法

  1. 通过伪协议加载恶意HTML
  2. 下载恶意HTML到本地
  3. 通过file协议加载本地HTML窃取私有目录信息

六、智能家居身份劫持漏洞总结

  1. 配网泄露:配网过程中身份凭证传输不安全
  2. 设备交互劫持
    • 广域网交互:身份凭证可预测或遍历(如厂商A的userid)
    • 局域网交互:
      • 厂商B:miio协议token泄露风险
      • 厂商C:协议设计较为安全
  3. 应用漏洞
    • Webview JS接口远程命令执行
    • Webview file域信息泄露

七、防御建议

  1. 强化身份验证

    • 使用多因素认证
    • 确保userid、token和设备ID的绑定关系验证
    • 避免使用可预测的身份标识
  2. 安全传输设计

    • 使用TLS加密传输身份凭证
    • 实现完善的密钥协商机制(如厂商C的方案)
  3. 协议安全

    • 使用带认证的密钥交换协议
    • 防止重放攻击
  4. 应用安全

    • 严格限制Webview的JS接口暴露
    • 禁用不必要的Webview功能(如file域访问)
    • 实现严格的URL检查机制
  5. 设备安全

    • 实现安全的设备配网流程
    • 提供用户可管理的设备分享机制

八、参考文献

  1. 基于TLS1.3的微信安全通信协议mmtls介绍
  2. python-miio库
  3. 智能设备安全研究
智能家居安全——身份劫持技术分析与防御 一、摘要 本文深入分析了智能家居设备身份劫持的安全问题,通过研究国内主流智能家居产品的身份验证机制和设备交互协议,揭示了身份凭证窃取的技术原理和实现方法。文章详细介绍了账号同步和设备交互两个关键环节的安全漏洞,并提供了具体厂商(厂商A、B、C)的实际案例分析,最后总结了智能家居身份劫持的常见漏洞类型和防御建议。 二、智能家居身份标识与劫持危害 2.1 身份标识类型 智能家居系统中常见的身份标识包括: 账号cookie相关:如身份Token 用户ID:userid 设备ID:deviceid 认证或加密密钥 2.2 身份劫持的危害 隐私泄露 :个人信息、聊天内容等敏感信息被窃取 设备控制权丧失 :智能设备可被攻击者任意控制 财产损失 :通过设备进行支付等操作导致经济损失 监控风险 :设备可能被用于持续监控用户活动 三、账号同步环节的身份劫持 3.1 账号同步流程 智能设备初次激活或更改绑定时,用户身份信息同步给设备的过程。 3.2 常见问题 设备合法性验证不足:仅验证设备ID或密钥,容易被伪造 账号Token传输不安全:通过不安全的通道(如蓝牙、AP)传输 3.3 厂商A音箱案例分析 账号同步方式 : UDP广播方式 :向255.255.255.255:50000发送userid、token和WiFi信息 语音传输方式 :将身份信息转化为语音播放,音箱识别 漏洞利用 : UDP广播方式:攻击者可监听50000端口获取userid和token 语音传输方式:协议格式固定,可被逆向破解 协议格式 : 四、设备交互环节的身份劫持 4.1 广域网交互 厂商A案例分析 交互流程 : 音箱→厂商服务器:携带userid、deviceid、accesstoken和控制指令 厂商服务器→第三方服务器:OAuth授权后的控制请求 第三方服务器→设备:发送控制指令 身份劫持漏洞 : userid为顺序9位数字,可遍历猜测 服务器仅验证userid,不验证token与userid的绑定关系 设备"分享"功能设计缺陷:宿主无法主动取消分享 劫持危害 : 查看用户聊天记录 自定义问答设置 设置闹钟、话费充值 智能家居设备控制 4.2 局域网交互 厂商B案例分析(基于miio协议) 交互流程 : 广播握手包获取设备token、IP和ID 发送hello bytes获取设备消息结构体header 构造控制消息(包含token、ID等)实现设备控制 消息结构体 : 劫持方法 : 使用python-miio库发现设备: mirobo discover --handshake 1 获取设备信息结构体 伪造控制消息结构体 厂商C案例分析(基于*** Link协议) 协议特点 : 带认证的ECDH密钥协商+对称密钥加密 防御中间人攻击机制 密钥协商流程 : 设备预置Ecc-sPubkey 云端验证设备身份后下发accessKey 应用使用ECDH协商密钥加密传输accessKey 局域网通信使用localkey(即accessKey)加解密 消息结构体 : 协议包头 opt字段 Payload(使用LocalKey加密) 五、通过应用实现身份劫持 5.1 Webview JS交互接口漏洞 漏洞类型 : 通过@JavascriptInterface暴露敏感接口 URL加载限制不严导致远程命令执行或信息泄露 利用方法 : 调用WebViewActivity定义的交互接口获取账号信息 绕过URL检查逻辑(如仅检查是否包含特定字符串) 5.2 Webview file域远程信息泄露 漏洞条件 : 开启 WebSettings.setAllowUniversalAccessFromFileURLs(true) 对加载的URL无严格限制 利用方法 : 通过伪协议加载恶意HTML 下载恶意HTML到本地 通过file协议加载本地HTML窃取私有目录信息 六、智能家居身份劫持漏洞总结 配网泄露 :配网过程中身份凭证传输不安全 设备交互劫持 : 广域网交互:身份凭证可预测或遍历(如厂商A的userid) 局域网交互: 厂商B:miio协议token泄露风险 厂商C:协议设计较为安全 应用漏洞 : Webview JS接口远程命令执行 Webview file域信息泄露 七、防御建议 强化身份验证 : 使用多因素认证 确保userid、token和设备ID的绑定关系验证 避免使用可预测的身份标识 安全传输设计 : 使用TLS加密传输身份凭证 实现完善的密钥协商机制(如厂商C的方案) 协议安全 : 使用带认证的密钥交换协议 防止重放攻击 应用安全 : 严格限制Webview的JS接口暴露 禁用不必要的Webview功能(如file域访问) 实现严格的URL检查机制 设备安全 : 实现安全的设备配网流程 提供用户可管理的设备分享机制 八、参考文献 基于TLS1.3的微信安全通信协议mmtls介绍 python-miio库 智能设备安全研究