IoT 管理接口:后台密码之外还有哪些远程入口
用户关闭路由器上的端口映射后,摄像头仍可能通过厂商中继接受远程控制;用户修改 Web 后台密码后,媒体服务也可能继续接受旧凭据。审计管理接口时,首先要还原所有控制路径,而不是只检查浏览器能看到的登录页。
实操:核对真实管理服务的暴露与授权
无硬件时,先启动QEMU 中的 OpenWrt 官方固件。有样机时使用独立局域网与真实设备地址,并先记录 Web、SSH、RTSP、维修和中继服务分别在哪里监听。
先确定外部看到的服务与设备上的进程
电脑检查自己启动的固件转发端口:
nmap -sT -sV --version-light -p 2222,8080 127.0.0.1
curl -sS -D headers.txt -o login-page.html http://127.0.0.1:8080/
在固件控制台执行 netstat -lnt、ps w 和 cat /etc/config/uhttpd。QEMU 的 2222/8080 是宿主转发端口,设备内通常是 22/80。对真实样机,把扫描限制到指定地址和已确认端口;版本识别依据 Nmap 官方说明。
用真实 ubus 接口建立未登录基线
下面请求使用 OpenWrt 的 JSON-RPC 接口与空会话:
curl -sS -i http://127.0.0.1:8080/ubus \
-H 'Content-Type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"call","params":["00000000000000000000000000000000","system","board",{}]}'
在默认 ACL 下,该未登录调用应被拒绝;要检查 JSON-RPC 的 result 或 error,不能仅看 HTTP 200。若返回 404,先确认镜像含 uhttpd-mod-ubus、服务配置启用对应入口;不要把接口不存在记成鉴权成功。
从拒绝结果回到实际 ACL
在同版本固件控制台查看该镜像的匿名权限文件:
cat /usr/share/rpcd/acl.d/unauthenticated.json
ubus -v list system
ubus -v list session
本样本的匿名 ACL 允许 session 的 access 与 login,不包含 system.board。HTTP 请求中的全零会话表示匿名上下文;ubus 状态 0 表示成功,6 对应 UBUS_STATUS_PERMISSION_DENIED。具体 JSON-RPC 封装以实际响应为准,按 ubus 状态定义核对。
这里的控制台 ubus 调用通过本地系统权限进入,和浏览器携带会话经 uhttpd 调用的路径不同。控制台读取成功、匿名 HTTP 请求被拒绝是合理对照;不能用前者证明 Web 会话已经绕过 ACL。
与登录后的同一请求对照
浏览器打开 LuCI,使用在固件控制台设置的密码登录。开发者工具 Network 中找到页面真实发出的 ubus 请求,保存请求和响应;不同 LuCI 版本可能使用批量或不同路径,以实际请求为准。将请求发送到 Burp Repeater,先不修改,确认登录态可重复读取。
复制请求后只移除会话或认证字段,保留对象、方法与参数,检查业务拒绝及实际数据。若设备支持只读账号,再以其正常登录态调用同一读取请求和一个实际的低风险写入请求,核对是否越过角色权限。凭据放在请求中的哪个位置,需要由真实登录过程确定。
检查维修与媒体入口是否绕开同一权限
对摄像头分别核对媒体预览、录制下载、配置导出和固件升级,不把管理页登录成功视为全部入口已保护。保存每条通道的地址、主体、请求与设备结果。对命令执行或文件读取,沿固件的路由与处理函数确认路径,再使用对应漏洞专题的方法验证。
退出后重放已保存请求,设备重启后再做一次。记录是令牌已失效、仅页面跳转,还是旧请求仍被设备接受。访问失败先排除服务未启动、端口映射和协议不匹配,再判断授权。
成立前提与能力变化
目标服务需要经公网、局域网或厂商中继可达,并在身份、角色或具体操作上缺少有效约束。最小链路是“到达服务 → 通过或绕过认证 → 调用目标操作 → 确认设备状态变化”。仅绕过前端页面、只拿到错误响应,或只能读取公开状态,都不能证明获得管理权限。
先区分连接入口与功能权限
设备上的 Web、SSH、Telnet、RTSP、私有维护协议和云端中继,可能使用不同进程、认证库与账号数据库。一个服务负责视频读取,另一个负责网络设置,第三个执行升级,它们未必继承相同的权限检查。
未授权访问是根本没有建立必要的身份或权限约束;认证绕过是实现中存在可跳过校验的路径;已认证功能滥用则可能需要普通账号,却能够调用本应限于管理员的功能。三者的初始能力与修复位置不同。
端口号也不能直接代表风险。例如 RTSP 可以配置认证,HTTPS 管理服务也可能允许越权;需要观察实际请求是否经过身份、角色和设备资源校验。
后台功能为什么容易扩展到系统权限
网络诊断、日志导出、配置导入和升级上传都与操作系统能力紧密相连。如果诊断参数直接进入命令解释器,普通管理操作就可能变成命令执行。如果导出接口接受任意文件路径,原本只应提供日志的功能可能泄露设备身份或系统配置。
设备为实现方便,可能让多个服务以同一高权限身份运行。此时一个低价值页面的输入缺陷,会跨到摄像头采集、存储、升级或网络转发能力。评估应沿执行身份确认可读文件、可写配置、可用设备节点与网络访问范围,不能停留在“页面已被绕过”。
厂商中继与 P2P 通道还会改变暴露边界:设备主动连接外部服务器,远端客户端经服务转发请求。没有公网监听端口,只能说明一类入口不存在,并不能证明设备完全不可被远程访问。
Mirai 和 Wyze 展示了不同的失效
USENIX Security 2017 的 Mirai 研究解释了低门槛感染如何组成大规模僵尸网络。设备暴露服务与可猜测凭据的组合,使攻击者不必先发现复杂内存漏洞,就能获得运行恶意程序的机会。Understanding the Mirai Botnet
Bitdefender 于 2022 年公开的 Wyze Cam 报告则分别记录了远程连接认证绕过 CVE-2019-9564、栈溢出 CVE-2019-12266,以及 SD 卡内容未授权访问。这三个结果属于不同边界,不应合写成一个笼统的“摄像头漏洞”。报告也区分了不同产品代际的修复状态;它不是对目前所有 Wyze 设备的判断。Wyze Cam 原始技术报告
把角色矩阵落实到每条服务路径
以下矩阵是一种建议的起点,需要产品根据功能调整:
| 操作 | 查看用户 | 设备管理员 | 维修主体 |
|---|---|---|---|
| 读取授权范围内视频 | 按分享范围允许 | 按管理范围允许 | 默认不授予 |
| 修改网络与账号 | 默认拒绝 | 明确授权后允许 | 仅限维修范围 |
| 安装发布固件 | 默认拒绝 | 受发布策略约束 | 受维修与发布策略双重约束 |
| 导出设备身份私钥 | 不应成为普通功能 | 不因管理员身份自动开放 | 不因维修身份自动开放 |
真正的检查是同一操作通过 Web、媒体控制协议、云中继和维护接口进入时,是否保持相同约束。用户界面隐藏按钮,只限制了正常客户端的操作路径,不能代替服务端拒绝请求。
危险配置也可能跨请求生效。例如“修改诊断目标”和“执行诊断”由不同接口处理,第一步保存的参数可能在稍后进入高权限进程。因此,验证不能只看当前请求有没有直接执行命令,还应观察持久化配置被后台任务读取时的行为。
从具体管理请求追到后台任务
在被测产品管理界面发起一次正常网络诊断,把浏览器记录的真实请求送入 Repeater。先保留管理员身份原样重发,确认能够创建任务;再仅替换成实际只读账号的会话,检查任务创建与执行结果。
若当前主体只有查看权限,合理结果是拒绝请求,并且不创建诊断任务。只在前端隐藏按钮、仍返回任务编号,或者返回拒绝却已经入队,都没有切断越权操作。
取得管理员授权后,还应继续跟踪请求中的目标地址如何进入诊断程序。采用固定操作和明确参数传递,可以避免把请求字段当作命令解释器输入;即使完成了角色校验,参数进入危险解释器的路径也需要单独修复。前面的认证缺陷和后面的命令注入可以串联,但不应被合并为一个无法定位的结论。
统一权限语义,不必强行统一所有服务
Web、媒体与维修服务可以使用不同协议,但需要一致地回答谁能读数据、修改配置、增加账号、导出秘密和安装软件。设备更新密码或撤销分享后,各通道应能落实同一撤销意图。
实现上可将敏感操作放到受约束的内部接口,由服务进程明确请求操作类型与目标资源。媒体服务不必拥有升级权限,日志服务不必能读取私钥;限制进程能力,可以在某个入口失陷后缩小影响。
ETSI EN 303 645 V3.1.3 的消费者 IoT 基线涉及默认口令、攻击面和接口管理。它提供的是基线要求,具体产品仍需结合服务路径验证,不能用“改过默认口令”代替完整接口审计。ETSI EN 303 645
验证应以操作结果为准
完成前文请求对照后,再修改密码与撤销远程访问,分别重试已有 Web、媒体、本地及中继连接。重点核对旧连接是否继续操作,以及恢复出厂是否重新开放服务;设备归属变化的完整序列见设备绑定。
上传接口进入设备文件系统的通用边界见任意文件上传,诊断参数进入解释器的机制见命令执行。
关联阅读:App 与云端控制链路、设备绑定与所有权转移。