GainSec/DigitalAlly-ThermoVu-Uniview-Security-Research
GitHub: GainSec/DigitalAlly-ThermoVu-Uniview-Security-Research
针对 Digital Ally ThermoVu DTM-600 面部识别门禁设备的公开安全研究包,涵盖漏洞发现、完整入侵链演示、证据材料和专用测试工具。
Stars: 0 | Forks: 0
# Digital Ally ThermoVu DTM-600 安全研究发布
针对 Digital Ally ThermoVu DTM-600 面部识别与热成像门禁设备进行独立安全研究的公开发布包。本发布中分析的设备是运行 HiSilicon 固件的 Uniview/OEM OET-213H-NB 系列目标,暴露了 LAPI、ONVIF/SOAP、RTSP、PACS/门禁以及本地人脸模板存储等攻击面。
本仓库保留了有用的文档、发现、证据摘要、源码工具、生成的测试产物以及经过筛选的设备派生证据;同时排除了本地工作流状态、原始的超大固件/软件归档文件、私有代理指令、虚拟环境、Burp 项目数据库以及个人生物特征源图像。
## 目标
| 字段 | 值 |
|-------|-------|
| 研究目标 | Digital Ally ThermoVu DTM-600 |
| OEM / 平台系列 | Uniview OET-213H-NB / OET-213H-NB-WH |
| 设备类别 | 面部识别与热成像门禁终端 |
| OEM 厂商 | Zhejiang Uniview Technologies |
| SoC | HiSilicon Hi3516DV300 级别 ARMv7 平台 |
| 架构 | 双核 ARM Cortex-A7, ARMv7 |
| 观察到的内核 | Linux 4.9.37 |
| 观察到的主要固件分支 | `QPTS-B2209.3.70.CEN001.200707` |
| 主应用程序 | `mwareserver` |
| Web/API 攻击面 | HTTP Web UI,Uniview LAPI REST endpoint,81 端口上的 ONVIF/SOAP |
| 媒体/控制攻击面 | RTSP,SDK/专有服务,PACS/面部识别 API |
| 研究重点 | 远程入侵链、暴露的管理服务、硬编码凭据、ONVIF/LAPI 暴露以及人脸模板认证弱点 |
## 仓库结构
| 路径 | 包含内容 |
|------|------------------|
| `NOTES/` | 发现、线索、运行时笔记、LAPI 参考、人脸模板研究、shell 逃逸笔记以及 PoC 支持文件。 |
| `docs/` | 顶层报告、漏洞利用链摘要、U-Boot/网络计划以及生成的发现文本。 |
| `evidence/` | 精选的诊断提取、ONVIF 响应、选定的固件文件系统内容、配置、日志以及设备派生的证明材料。 |
| `test-artifacts/` | 生成的模糊测试语料库、合成图像候选、模板候选、提取的 embedding 分析输出以及经过脱敏处理的导入 CSV。 |
| `tools/` | 随本次研究发布保留的、专针对 DTM-600 的辅助工具。 |
| `standalone/uniview-lapi-toolkit/` | 可单独发布的 Uniview/OEM LAPI endpoint 浏览器和请求客户端。 |
| `SCRIPTS/` | 用于图像、变形、对抗、运行时和模板分析工作流的研究脚本。 |
| `vendor-docs/` | 复制到发布中以提供背景的公开产品文档。 |
| `remote-cve-snapshot/` | 来自相关 `digitalally-facialrec` 仓库快照的独特小型产物。 |
| `RELEASE_INVENTORY.txt` | 本公开发布树的文件清单。 |
| `SHA256SUMS.txt` | 发布产物的 SHA-256 哈希值。 |
## 漏洞摘要
| ID | 标题 | 严重程度 / CVSS | CWE / 类别 | 简要描述 |
|----|-------|-----------------|-------------|-------------------|
| VULN-001 | 通过 UDP/7788 的预认证 RCE | 严重, 9.8 | CWE-120 / 内存损坏 | 端口 7788 上未记录的 UDP 服务可被滥用于生成 Telnet 服务并获得 root 级别的访问权限。 |
| VULN-002 | 默认 Telnet root 凭据 | 严重, 9.8 | CWE-798 | 暴露后,Telnet 接受静态 root 凭据,从而导致 root shell 访问。 |
| VULN-003 | 通过 `updatecpld` 逃逸受限 shell | 高危, 8.8 | CWE-78 / 不安全的命令路径 | 受限的 `uvsh` 访问可以通过 FTP 获取的可执行内容升级为不受限制的 root shell。 |
| VULN-004 | 硬编码的 Web/管理员和服务凭据 | 高危, 7.4-8.8 | CWE-798 / CWE-522 | 设备配置包含默认的 Web、PPPoE、Wi-Fi、PTZ、NAS 和服务凭据材料。 |
| VULN-005 | `/etc/passwd` 中脆弱的 DES 密码哈希 | 高危, 7.8 | CWE-328 | Root 凭据材料使用遗留的 DES crypt 行为存储,而不是现代的 shadow 密码存储。 |
| VULN-006 | 硬编码的超级密码 / 恢复凭据 | 高危, 8.8 | CWE-798 / 认证绕过 | 配置包含静态超级密码机制,可解锁特权/调试行为。 |
| VULN-007 | 共享的过期 TLS 证书和私钥 | 高危, 8.6 | CWE-321 / CWE-295 | 设备派生证据包含过期的 Uniview 证书,并捆绑了私钥材料。 |
| VULN-008 | Web API 可远程启用 Telnet | 高危, 8.8 | CWE-284 | LAPI 暴露了 Telnet/调试服务控制,将凭据泄露转化为持久的 shell 暴露。 |
| VULN-009 | 庞大的 LAPI 管理攻击面 | 中危到严重(取决于认证绕过) | API 授权 / 攻击面 | 超过 200 个 LAPI endpoint 涵盖恢复出厂设置、固件更新、用户管理、调试控制、媒体、人脸和 PACS 操作。 |
| VULN-010 | ActiveX Web 插件暴露 | 高危, 7.5 | 客户端攻击面 | 遗留的 Web UI 组件引用了 ActiveX/插件安装程序以及用于浏览器端视频控件的硬编码 CLSID。 |
| VULN-011 | 包含硬编码外部 IP 引用的调试页面 | 中危, 4.0 | 信息泄露 | 调试 HTML 包含硬编码的外部地址和远程标志,这些不应存在于生产固件中。 |
| VULN-012 | 人脸模板注入 / 身份不匹配 | 获取文件系统访问权限后为高危 | 认证设计缺陷 | 存储的照片和匹配模板是独立的产物,导致显示的身份与用于匹配的生物特征模板不一致。 |
| VULN-013 | 零模板人脸识别绕过 | 获取文件系统访问权限后为高危 | 输入验证 / 数值边界情况 | 在测试中,用零值 embedding 替换模板向量导致了人脸匹配成功,这与缺少向量幅度验证的情况一致。 |
详细的漏洞发现位于:
- `NOTES/findingslist.md`
- `NOTES/telnet-findings.md`
- `docs/full-chain.md`
- `NOTES/shell-escape.md`
- `NOTES/LAPI.md`
- `NOTES/template-injection-bypass.md`
- `NOTES/CVE-zero-template-bypass.md`
- `NOTES/runtime-enumeration.md`
## 已确认的攻击链
主要演示的入侵路径结合了网络 RCE 和受限 shell 逃逸:
1. 访问存在漏洞的 UDP/7788 维护服务。
2. 通过已知的 Uniview 维护溢出路径触发 Telnet 暴露。
3. 通过默认/root 访问权限向受限的厂商 shell 进行认证。
4. 使用 `updatecpld` FTP 执行路径运行攻击者控制的内容。
5. 获得不受限制的 root shell 和对设备的完全控制。
详细的攻击链和清理记录记录在 `docs/full-chain.md`、`NOTES/telnet-findings.md` 和 `NOTES/shell-escape.md` 中。
## 攻击面
| 攻击面 | 详情 |
|---------|---------|
| UDP 维护服务 | 与已知的 Uniview 维护溢出路径相关联的 UDP/7788 服务。 |
| Telnet | Telnet 服务可能通过漏洞利用链或调试控制被暴露,并根据路径导致受限或不受限制的 shell 访问。 |
| HTTP Web UI | 由 `mwareserver` 提供的 Web 管理界面;包括基于 LAPI 的配置和遗留的浏览器/插件行为。 |
| LAPI REST API | 系统、认证、网络、固件、调试、媒体、智能分析、人脸识别、PACS、I/O 以及交通/智能 endpoint。 |
| ONVIF/SOAP | 端口 81 上的 ONVIF 服务和响应捕获,包括设备、媒体、网络、用户、作用域、配置文件、快照和系统备份调用。 |
| RTSP/媒体 | 设备固件暴露的 RTSP 流媒体和快照/媒体路径。 |
| SDK/专有服务 | 运行时枚举识别出位于高端 TCP 端口上的专有服务,用于厂商/客户端集成。 |
| PACS/门禁控制 | 门/闸门、Wiegand、QR 码、温度、验证模板和控制器状态功能。 |
| 人脸模板存储 | 人脸照片和二进制匹配模板分开存储在 `/data/WorkLibFile/...` 下。 |
| 本地固件/配置存储 | `/config`、`/program`、`/data`、诊断包、Web 资产、证书和运行时日志。 |
## 工具套件
| 工具 / 领域 | 路径 | 用途 |
|-------------|------|---------|
| DTM-600 LAPI 辅助工具 | `tools/lapi_cli.py`, `tools/lapi_interactive.py` | 针对性的 DTM-600 目标 LAPI endpoint 测试和浏览。 |
| 独立 LAPI 工具包 | `standalone/uniview-lapi-toolkit/` | 通用的 Uniview/OEM LAPI endpoint 浏览器和请求客户端,适合单独发布。 |
| ONVIF 重放/执行辅助工具 | `evidence/dtm-600/run_onvif_requests.py`, `evidence/dtm-600/run_onvif_from_markdown.py` | 重放精选的 ONVIF/SOAP 请求并收集响应。 |
| UDP/7788 支持材料 | `evidence/dtm-600/exploit_udp_7788.py`, `NOTES/reqs/poc_udp_7788_overflow.py` | 维护服务 RCE 链的研究 PoC 和支持脚本。 |
| Shell 逃逸支持 | `NOTES/reqs/cpldload`, `NOTES/reqs/cpldload_telnetd.sh`, `NOTES/reqs/poc_uvsh_escape.sh` | 受控实验室 payload 和 `updatecpld` 行为的复现支持。 |
| 人脸/模板研究脚本 | `SCRIPTS/`, `remote-cve-snapshot/SCRIPTS/` | 模板分析、模糊测试语料库生成、图像突变以及对抗/研究工作流。 |
| 生成的测试产物 | `test-artifacts/` | 候选图像、模板 payload、模糊测试语料库、embedding 分析输出和导入 CSV。 |
## 独立 Uniview LAPI 工具包
`standalone/uniview-lapi-toolkit/` 旨在能够独立于本 DTM-600 证据包发布。它包括:
- 通用的 `lapi_toolkit.py` 客户端
- `generic-uniview` 和 `dtm600-validated` endpoint 配置
- 独立的 README
- 离线测试
- 无硬编码的目标地址
- 无硬编码的默认凭据
- 默认为只读行为,需要显式标志才能进行写入操作
将其作为对暴露 `/LAPI/...` endpoint 的 Uniview 和 OEM 设备进行授权测试的起点。Endpoint 的可用性因型号、固件分支、功能授权和 OEM 品牌而异。
## 证据和报告
| 路径 | 用途 |
|------|-----|
| `evidence/dtm-600/onvif_responses/` | 从目标捕获的 ONVIF/SOAP 响应。 |
| `evidence/dtm-600/onvif_responses_markdown/` | 从 markdown ONVIF playbook 生成的响应。 |
| `evidence/dtm-600/diag_*` | 诊断配置、日志、ACS 数据和运行时材料。 |
| `evidence/dtm-600/program_factory/` | 为可追溯性和 endpoint 分析提取的选定固件/Web 文件。 |
| `NOTES/reqs/` | 复现支持文件、哈希、脚本、证书材料和受实验室 payload。 |
| `test-artifacts/EXTRACTED_TEMPLATES/` | 移除原始的逐人模板目录后保留的已脱敏 embedding 分析输出。 |
| `test-artifacts/CANDIDATE_TEMPLATES/` | 用于健壮性测试的合成模板 payload。 |
| `test-artifacts/FUZZ_CORPUS/` | JPEG 和元数据模糊测试语料库产物。 |
| `vendor-docs/` | 产品手册和安装指南。 |
## 排除项
公开树故意排除了:
- 原始的超大固件转储和安装程序/归档输入。
- 本地 `.work/`、虚拟环境、编辑器状态和私有自动化文件。
- `AGENTS.MD`、`CLAUDE.md` 和私有代理工作流指令。
- 个人生物特征源图像和本地派生的个人人脸图像。
- Burp 项目数据库和私有本地捕获工作区。
- 公开审查不需要的超大原始产物。
- API 密钥、个人机密、`.env` 文件、私有本地密钥以及特定于本地机器的凭据。
作为被研究产品或固件一部分的、源自目标的证据(包括配置、哈希、证书、passwd 类文件和设备派生的凭据材料)均予以保留。包含这些产物是为了保证可复现性,应将其视为敏感的研究证据。
有关主要排除的类别,请参见 `EXCLUDED_FROM_RELEASE.md`。
## 快速检查
在仓库根目录下,执行这些检查时不应列出私有工作流文件、原始的超大输入或已移除的标记/人员模板目录:
```
find . -name AGENTS.md -o -name AGENTS.MD -o -name CLAUDE.md -o -name '.env'
find . -type d \( -name '.work' -o -name '.venv' -o -name 'venv' \) -print
find . -type d \( -name 'MARKER_BYPASS' -o -name 'PersonID_*' \) -print
find . -type f \( -name '*.img' -o -name '*.iso' -o -name '*.qcow2' -o -name '*.vmdk' \) -print
shasum -a 256 -c SHA256SUMS.txt
```
## 完整性
`RELEASE_INVENTORY.txt` 列出了本公开树中包含的文件。`SHA256SUMS.txt` 包含发布产物的 SHA-256 哈希值。发布树的结构经过精心设计,使审查者能够明确识别出包含了什么、故意排除了什么,以及每项主要发现的记录位置。
## 研究边界
本软件包用于授权的安全研究、厂商披露、可复现性评估和防御性审查。它不是通用的漏洞利用工具包,未经许可,不得将其用于攻击设备或网络。
标签:IoT安全研究, LAPI协议, ONVIF协议, XXE攻击, 人脸识别设备, 后端开发, 情报收集, 漏洞研究, 硬件逆向分析, 逆向工具