安全配置

企业环境宏安全策略:从中级到数字签名验证

LibreOffice 支持 LibreOffice Basic 与 Python 宏。在企业部署中,宏是常见的安全风险入口——我们在 AD 实验室模拟钓鱼 ODS(含 Auto_Open 宏)测试拦截效果。本文基于 LibreOffice 25.2.0.3 的「宏安全」面板,给出四级策略模板、数字签名流程与批量部署方法;对照组含 24.8.4.2 与 25.2.0.3 各 30 份宏文档样本。

LibreOffice 宏安全设置面板示意

宏安全面板位置

打开任意组件,进入:

工具 › 选项 › LibreOffice › 安全性 › 宏安全
(macOS:LibreOffice › 偏好设置 › 安全性 › 宏安全)

该面板提供四个安全级别与「可信来源」管理。配置保存在用户目录:

Windows: %APPDATA%\LibreOffice\4\user\registrymodifications.xcu
Linux:   ~/.config/libreoffice/4/user/registrymodifications.xcu
macOS:   ~/Library/Application Support/LibreOffice/4/user/registrymodifications.xcu

全局策略(管理员)可选:
Windows: C:\Program Files\LibreOffice\share\registry\main.xcd 合并片段
Linux:   /usr/lib/libreoffice/share/registry/

我们第一次找宏安全面板走错了路径,进了 工具 › 选项 › 安全性(Internet 安全)而非 LibreOffice › 安全性 › 宏安全,两层「安全性」命名容易混淆。

四级安全策略说明

级别行为适用场景
禁用所有宏,不提示 高安全政府机关、仅文档阅读岗位
中(推荐) 仅执行来自可信文件路径的宏 大多数企业办公环境
执行前弹出确认对话框 开发测试环境、IT 部门
非常低 静默执行所有宏 仅限隔离虚拟机,不推荐生产使用

推荐策略:中级 + 可信路径

在「宏安全」中选择 ,然后配置可信来源:

  1. 点击「可信来源」标签页
  2. 添加企业共享目录,例如 \\fileserver\libreoffice-macros\
  3. 添加 IT 部门签名的模板目录 C:\ProgramData\LibreOffice\trusted\
  4. 取消勾选「执行前确认」以减少干扰弹窗

测试:将含 Basic 宏的 .ods 文件分别放入可信与不可信目录。可信目录中的宏自动执行(打开后 0.8–1.2 秒内运行 Auto_Open);不可信目录弹出阻止提示。我们故意把 UNC 路径写错一个字母(\\fileserver\libreoffice-macro\ vs macros),宏被拦,说明路径匹配严格。

Windows 注册表补充(仅部分 OEM 集成写入,标准 TDF 安装以 xcu 为准):HKCU\Software\LibreOffice\LibreOffice\Common\Security\Scripting 可能出现 MacroSecurityLevel DWORD,但我们更推荐 xcu 便于版本控制。

部署场景对照

场景推荐级别可信路径签名
政府机关只读不要求
一般企业办公IT 共享盘 + ProgramData可选
财务自动化限定子目录必须签名
开发测试开发者本机不要求

数字签名验证

25.2 支持对宏模块进行 OpenPGP 或 X.509 数字签名。签名流程:

  1. 工具 › 宏 › 管理宏 › LibreOffice Basic › 编辑 打开宏编辑器
  2. 工具 › 数字签名 › 签名,选择机构代码签名证书
  3. 签名信息写入文档 meta.xml,另存后分发

在「宏安全 › 可信来源」中勾选「仅执行已签名的宏」,未签名宏即使在可信目录也会被阻止。我们测试了 6 份签名与 6 份未签名的宏文档,拦截率 100%;误拦 0 份。签名验证耗时:25.2 平均 2.8 秒/6 份,24.8.4 为 4.2 秒。

证书过期处理:过期签名文档打开时提示「证书无效」,宏不执行。需 IT 重签并分发;我们测试提前 7 天续签无中断。

签名失败案例

第一次用自签名证书,对方机器未导入根证书,验证失败。解决:域内 GPO 分发企业根 CA,或只用内部 PKI 签宏模块。

批量部署:registrymodifications.xcu

通过组策略或登录脚本分发统一配置。在模板机器上配置好宏安全后,提取以下节点:

<item oor:path="/org.openoffice.Office.Common/Security/Scripting">
  <prop oor:name="MacroSecurityLevel" oor:op="fuse">
    <value>1</value>
  </prop>
</item>

其中 MacroSecurityLevel 值:0=非常低,1=低,2=中,3=高。将修改后的 registrymodifications.xcu 复制到各用户配置目录,或通过 LibreOffice 管理模板(C:\Program Files\LibreOffice\share\registry\)全局推送。

GPO 登录脚本示例(Windows)

@echo off
set SRC=\\fileserver\IT\LibreOffice\registrymodifications.xcu
set DST=%APPDATA%\LibreOffice\4\user\registrymodifications.xcu
if not exist "%APPDATA%\LibreOffice\4\user\" mkdir "%APPDATA%\LibreOffice\4\user\"
copy /Y "%SRC%" "%DST%"
:: 合并而非覆盖时,需用 LO 自带 merge 或 IT 预合并 xcu

我们域内 280 用户推送,首次登录合并 xcu 约 3 秒延迟可接受。注意:若用户本地 xcu 已有个人设置,粗暴 copy 会覆盖——应在模板机生成「策略 xcu」只含安全节点,用脚本 XML 合并(我们用了 PowerShell Merge-LoRegistry 内部工具,非 LibreOffice 内置)。

可信路径批量写入 xcu

<item oor:path="/org.openoffice.Office.Common/Security/Scripting/TrustedSources">
  <node oor:name="TrustedLocations" oor:op="replace">
    <node oor:name="Location0" oor:op="fuse">
      <prop oor:name="Path"><value>file:///\\\\fileserver\\libreoffice-macros\\</value></prop>
    </node>
  </node>
</item>

Python 宏注意事项

除 Basic 外,LibreOffice 25.2 支持 Python 宏(工具 › 宏 › 管理宏 › Python)。Python 宏不受「宏安全」面板的 Basic 限制完全约束,需额外在 工具 › 选项 › LibreOffice › 高级 中控制 Python 路径。我们写了一个 Python 宏调用 os.system,在「中」级 Basic 策略下仍被执行——这是预期行为,必须单独禁用。

企业建议:在 registrymodifications.xcu 中禁用 Python 宏加载:

<item oor:path="/org.openoffice.Office.Common/Security/Scripting">
  <prop oor:name="DisablePython" oor:op="fuse">
    <value>true</value>
  </prop>
</item>

事件日志与审计

LibreOffice 不内置宏执行审计日志。企业可结合以下手段:

  • 监控 registrymodifications.xcu 变更(文件完整性检测,我们 Splunk 监控 hash 变化)
  • 通过 EDR 监控 soffice.bin 的子进程创建(Python 宏可能调用 cmd/powershell)
  • 限制 .ods.odt 中带宏文件的外发(DLP 标记 ODF 包内 mimetypeBasic/Standard/ 模块)
  • 定期扫描共享盘 *.ods 是否含未签名宏(我们 monthly 脚本 unzip ODF 查 Basic)

宏安全 FAQ

「中」级下邮件附件宏能跑吗?

不能,除非附件保存到可信路径后再打开。我们测 Outlook 另存桌面打开,弹窗阻止。

用户私自改回「低」怎么办?

GPO 定期覆盖 xcu;或 MacroSecurityLevel 写全局 registry 并设 xcu 只读(部分用户会投诉个人快捷键丢失,需权衡)。

Java 宏呢?

25.2 默认不启用 Java,工具 › 选项 › LibreOffice › 高级 未勾选 Java 即可。遗留 OpenOffice 扩展才可能需要。

故障排查

现象原因处理
可信路径宏仍被拦UNC 未映射或路径 typofile:/// URI 格式写入 xcu,测试 \\server\share\ 双反斜杠转义
签名宏提示未知发行者根证书未信任域内 GPO 部署 CA;或「仅执行已签名宏」关闭至证书就绪
xcu 推送后设置反复丢失用户正常退出时 LO 重写 xcu合并策略节点而非整文件覆盖;或退出脚本延迟 copy
Python 宏仍能运行未设 DisablePython确认 xcu 节点生效并重启 soffice;检查是否有 --accept 参数远程桥接

与 24.8 的差异

LibreOffice 24.8.4 的宏安全面板 UI 一致,但 25.2 改进了签名验证速度(6 份文档验证从 4.2 秒降至 2.8 秒)并修复了 CVE-2025-11840(恶意宏通过 symlink 绕过可信路径检查)。我们在 24.8.4 复现该 PoC 成功,25.2.0.3 已拦。企业用户建议优先升级至 25.2;暂留 24.8 的单位至少打 24.8.5 安全 backport(若 TDF 发布)或临时设「高」级禁宏。

渗透测试备注:我们构造的钓鱼 ODS 在「中+签名必需」策略下 0/10 执行成功;在「低」级 10/10 用户点击「启用宏」后执行——培训比技术策略同样重要。

升级至安全版本

下载 LibreOffice 25.2

LibreOffice 下载