← 返回博客

自托管 AI 智能体的安全风险:以 OpenClaw 为例的分析与防护指南

自托管 AI 智能体的安全风险:以 OpenClaw 为例的分析与防护指南

自托管的智能体运行时将不受信任的代码和不受信任的指令结合到一个以有效凭证运行的执行循环中。这就是核心风险。


01 摘要:OpenClaw 安全现状

像 OpenClaw 这样的自托管智能体运行时正在迅速出现在企业试点中,它们引入了一个严峻的现实:OpenClaw 包含的内置安全控制非常有限

该运行时可以:

  • 摄取不受信任的文本
  • 从外部来源下载并执行技能(即代码)
  • 使用分配给它的凭证执行操作

这实际上将执行边界从静态应用程序代码转移到了动态提供的内容和第三方能力上,而没有围绕身份、输入处理或权限范围设置等效的控制。

三个主要风险

风险描述
凭证与数据暴露凭证和可访问的数据可能被暴露或外传
持久状态篡改智能体的持久状态或”记忆”可被修改,导致其长期遵循攻击者提供的指令
主机环境受损如果智能体被诱导检索并执行恶意代码,主机环境可能被攻陷

核心结论

OpenClaw 应被视为带有持久凭证的不受信任代码执行环境。

  • ❌ 不适合在标准个人或企业工作站上运行
  • ✅ 如果必须评估,应仅在完全隔离的环境中部署(专用虚拟机或独立物理系统)
  • ✅ 运行时应使用专用的、非特权凭证,且仅访问非敏感数据
  • 持续监控重建计划应是运营模式的一部分

02 安全边界解析:运行时 vs 平台

为了合理分析控制措施并避免在错误的地方应用错误的缓解措施,区分代码在哪里执行指令在哪里传播非常重要。

OpenClaw(运行时)

属性说明
是什么自托管智能体运行时,运行于工作站、VM 或容器上
能力加载技能,与本地和云资源交互
关键安全点继承所在机器的信任(和风险)以及它可以使用的身份。安装技能基本等同于安装特权代码
技能来源通常通过 ClawHub(公开技能注册表)发现和安装
Defender 建议仅在隔离环境中使用,该环境不能访问任何非专用凭证或不得泄露的数据

Moltbook(平台)

属性说明
是什么以智能体为核心的平台和身份层,智能体通过 API 发布、读取和认证
关键安全点可能成为智能体按计划摄取的大量攻击者可影响内容的流。单个恶意帖子可能影响多个智能体

两者结合的风险

在实践中,OpenClaw 扩展了环境内的代码执行边界,而 Moltbook 大规模扩展了指令影响面。当这两者在没有适当防护的情况下交互时,单个恶意输入可能导致持久的、带凭证的执行


03 智能体如何改变安全边界

大多数安全团队已经知道如何保护自动化。智能体改变风险的原因在于:决定做什么的实体并不总是执行操作的实体。

在运行时,智能体:

  1. 加载第三方代码
  2. 读取不受信任的输入
  3. 使用持久凭证执行操作

这使得运行时环境成为新的安全边界

边界的三个组成部分

组件描述示例
身份智能体用于执行工作的令牌SaaS API、代码仓库、邮件、云控制平面
执行它可以运行的、能改变状态的工具文件、shell、基础设施、消息
持久性它跨运行保持更改的方式任务、配置、计划任务

两类安全问题

  1. 间接提示词注入(Indirect Prompt Injection)

    • 攻击者可以将恶意指令隐藏在智能体读取的内容中
    • 可以引导工具使用或修改其记忆以影响长期行为
  2. 技能恶意软件(Skill Malware)

    • 智能体从各种来源获取技能
    • 本质上是从互联网下载并运行代码
    • 可能包含恶意代码

04 托管平台 vs 自托管运行时

托管平台(如托管助手)

特点说明
安全控制中心身份范围、连接器治理、数据边界
原因运行时和更新由平台集中管理

自托管运行时(如 OpenClaw)

特点说明
安全责任转移到组织
信任边界内包含主机系统、插件表面、本地状态
风险特点运行时通常在敏感开发者凭证附近操作
核心责任你负责爆炸半径

如果智能体能够浏览外部内容并安装扩展,应该假设它最终会处理恶意输入。控制措施应优先考虑隔离和可恢复性,而不是仅仅依赖预防。


05 端到端攻击场景:被投毒的技能

这是一个在开放智能体生态系统中可行的入侵链场景,直接映射到防御者可以影响的控制点:安装了什么东西、运行时能访问什么、以及持久性如何建立

公开报告已记录公开注册表中出现恶意技能的情况。

攻击链五步骤

步骤1: 分发 → 步骤2: 安装 → 步骤3: 状态访问 → 步骤4: 权限复用 → 步骤5: 持久化

步骤 1:分发

  • 攻击者向 ClawHub 发布恶意技能
  • 有时伪装成实用工具,有时公开恶意
  • 通过社区渠道推广
  • 生态系统发展迅速,低摩擦安装鼓励实验

步骤 2:安装

  • 开发者或智能体因技能看起来与任务相关而发起安装
  • 在宽松部署中,运行时可能被允许无需人工审批执行安装流程
  • 在受控环境中,安装应被视为明确的审批事件,等同于执行第三方代码

步骤 3:状态访问

攻击者的目标是访问智能体状态,包括:

  • 令牌
  • 缓存的凭证
  • 配置数据
  • 对话记录
  • 影响未来运行的持久指令渠道(任务文件、计划操作、智能体配置)

如果可以通过正常交互修改持久指令,一次注入就可以跨多次执行持久化。

步骤 4:通过合法 API 复用权限

使用有效的身份材料,攻击者可以通过标准 API 和工具执行操作。除非有强大的监控和日志控制,否则此活动通常看起来像合法的自动化。

步骤 5:通过配置持久化

持久化通常表现为持久配置更改

  • 新的 OAuth 授权
  • 计划执行
  • 修改的智能体任务
  • 保持永久批准的工具

目标:不一定是部署恶意软件,而是保持对自动化路径的长期控制。

变体:通过共享数据源的间接提示词注入

如果智能体被配置为轮询共享数据源:

  1. 攻击者可以将恶意指令放入智能体摄取的内容中
  2. 有效载荷搭载在指令供应链中,嵌入外部内容而非来自受信任操作者
  3. 在多智能体环境中,单个恶意线程可以同时影响多个智能体

实际风险是:在那些具有高权限和弱门控的智能体子集中,引导工具使用或触发敏感信息泄露。


06 Microsoft 安全控制:自托管智能体的最低安全操作基线

最重要的建议

最安全的指导是:避免使用主要工作或个人账户安装和运行 OpenClaw,避免在包含敏感数据的设备上运行。

在当前形式下,假设:

  • 运行时可以被不受信任的输入影响
  • 其状态可以被修改
  • 主机系统可以通过智能体暴露

如果必须评估 OpenClaw,以下防护措施应作为基线

1️⃣ 仅在隔离环境中运行

  • 使用专用虚拟机或单独的物理设备
  • 不用于日常工作
  • 将环境视为可丢弃的

2️⃣ 使用专用凭证和非敏感数据

  • 创建仅为智能体目的而存在的账户、令牌和数据集
  • 假设入侵是可能的,计划定期轮换

3️⃣ 监控状态或记忆篡改

  • 定期审查智能体保存的指令和状态
  • 寻找意外持久规则、新信任源、或跨运行的行为变化

4️⃣ 备份状态以支持快速重建

OpenClaw 支持状态快照和恢复:

备份范围包含内容说明
.openclaw/workspace/智能体工作状态不包含凭证
整个 .openclaw/ 目录工作状态 + 令牌和凭证简化恢复,但增加备份敏感性;如怀疑凭证受损可能不合适

5️⃣ 将重建视为预期控制措施

  • 定期重新安装
  • 观察到异常行为时立即重建
  • 持久性可能表现为微妙的配置更改,而非明显的恶意软件部署

07 Microsoft 安全控制映射表

做什么使用 Microsoft 控制的方法
身份使用专用身份,最小化权限,优先使用短期令牌,对高权限使用受控授权。Microsoft Entra ID:最小权限、条件访问、管理审批工作流。Defender for Cloud Apps:OAuth 应用清单、监控同意漂移、警报风险发布者/权限级别
端点和主机将智能体主机视为特权资产,隔离试点与生产,计划快速隔离和令牌撤销。Defender for Endpoint:载入智能体主机,使用设备组实施更严格策略。Defender XDR:关联端点、身份和云事件
供应链(技能/扩展/插件)限制安装源和发布者,对批准的能力固定版本,审查更新。Defender for Endpoint:检测可疑扩展安装和远程访问工具
网络和出口限制智能体主机的出站访问到已知业务目的地,除非有合理理由,否则阻止或隔离高风险外部数据源。Defender for Endpoint Web 内容过滤:限制类别和访问
数据保护减少敏感数据被摄入智能体提示词的机会,减少敏感数据被智能体工具外传的机会。Microsoft Purity:敏感度标签、Endpoint DLP,审计或阻止标记数据的移动
监控与响应记录智能体操作,将异常工具使用视为事件信号,为智能体身份入侵准备 playbook。Microsoft Defender XDR:威胁狩猎和事件关联。Microsoft Sentinel:深度保留、富化和自动化

08 威胁狩猎查询(Microsoft Defender XDR)

狩猎 1:发现智能体运行时和相关工具

用途:盘点环境中存在智能体运行时的位置,以及它们运行的命令行动和身份。

DeviceProcessEvents 
| where Timestamp > ago(30d) 
| where ProcessCommandLine has_any ("openclaw","moltbot","clawdbot") 
   or FileName has_any ("openclaw","moltbot","clawdbot") 
| project Timestamp, DeviceName, AccountName=InitiatingProcessAccountName, 
          FileName, FolderPath, ProcessCommandLine 
| order by Timestamp desc

分流:确认设备属于批准的试点,验证控制界面暴露受限,如意外出现则审查近期安装。

狩猎 1b:云工作负载变体(CloudProcessEvents)

用途:将盘点扩展到通过 Defender for Cloud 集成报告进程遥测的容器和 Kubernetes 工作负载。

CloudProcessEvents 
| where Timestamp > ago(30d) 
| where ProcessCommandLine has_any ("openclaw","moltbot","clawdbot") 
   or ProcessName has_any ("openclaw","moltbot","clawdbot") 
   or FileName has_any ("openclaw","moltbot","clawdbot") 
| extend WorkloadId = coalesce(AzureResourceId, AwsResourceName, GcpFullResourceName) 
| project Timestamp, WorkloadId, KubernetesNamespace, KubernetesPodName, 
          ContainerName, AccountName, ProcessName, Filenames, FolderPath, ProcessCommandLine 
| order by Timestamp desc

狩猎 1c:ClawHub 技能安装和低出现率技能标识

用途:识别 ClawHub 技能安装,并挖掘环境中罕见的技能标识。

DeviceProcessEvents 
| where Timestamp > ago(30d) 
| where ProcessCommandLine has "clawhub install" 
| extend SkillSlug = extract(@"\bclawhub\s+install\s+([^\s]+)", 1, ProcessCommandLine) 
| where isnotempty(SkillSlug) 
| summarize InstallEvents=count(), Devices=dcount(DeviceName), 
            Accounts=dcount(InitiatingProcessAccountName) by SkillSlug 
| order by Devices asc, InstallEvents desc

狩猎 2:开发者端点上的扩展安装

DeviceFileEvents 
| where Timestamp > ago(30d) 
| where FolderPath has_any (@"\.vscode\extensions\", @"/.vscode/extensions/") 
| where ActionType in ("FileCreated","FileModified","FolderCreated") 
| summarize FirstSeen=min(Timestamp), LastSeen=max(Timestamp), FileCount=count() 
  by DeviceName, InitiatingProcessAccountName, FolderPath 
| order by LastSeen desc

狩猎 3:高权限 OAuth 应用和同意漂移

OAuthAppInfo 
| where Timestamp > ago(30d) 
| where PrivilegeLevel =~ "High" 
| project Timestamp, AppName, VerifiedPublisher, AppOrigin, 
          IsAdminConsented, ConsentedUsersCount, AppStatus, Permissions 
| order by Timestamp desc

狩猎 4:智能体进程创建的意外监听服务

DeviceNetworkEvents 
| where Timestamp > ago(30d) 
| where ActionType == "ListeningConnectionCreated" 
| where InitiatingProcessCommandLine has_any ("openclaw","moltbot","clawdbot") 
   or InitiatingProcessFileName has_any ("openclaw","moltbot","clawdbot") 
| summarize FirstSeen=min(Timestamp), LastSeen=max(Timestamp), 
            Ports=make_set(LocalPort) by DeviceName, 
            InitiatingProcessFileName, InitiatingProcessAccountName, LocalIP 
| order by Timestamp desc

狩猎 5:智能体运行时生成意外的 shell 或下载工具

DeviceProcessEvents 
| where Timestamp > ago(30d) 
| where InitiatingProcessFileName has_any ("openclaw","moltbot","clawdbot") 
   or InitiatingProcessCommandLine has_any ("openclaw","moltbot","clawdbot") 
| where FileName in ("cmd.exe","powershell.exe","pwsh.exe","bash","sh","curl","wget") 
| project Timestamp, DeviceName, AccountName=InitiatingProcessAccountName, 
          Parent=InitiatingProcessFileName, FileName, ProcessCommandLine 
| order by Timestamp desc

09 最终结论

自托管的智能体将不受信任的代码不受信任的指令结合到一个以有效凭证运行的执行循环中。这就是核心风险。

运行 OpenClaw 不仅仅是一个配置选择。它是一个关于你准备将哪些机器、身份和数据暴露给处理不受信任输入的智能体的信任决策。

对大多数环境

适当的决策可能是不部署它

如果团队继续推进

防御性姿态应假设入侵是可能的:

  • ✅ 隔离运行时
  • ✅ 约束其可访问的内容
  • ✅ 持续监控
  • ✅ 准备立即重建

应立即采取的三项行动

  1. 盘点运行时部署的位置
  2. 验证它使用的身份及其关联的权限
  3. 识别哪些输入可以影响工具执行

收紧控制,端到端监控活动。使用提供的威胁狩猎查询作为起点,将每个发现视为在被利用前减少爆炸半径的机会。


10 参考资料



开始使用:openclaw.ai

加入社区:Discord

GitHub:github.com/openclaw/openclaw

技能市场:0z0z.com

—— OpenClaw 社区

P.S. 听说有人用它自动写周报了。我什么都没说。🦞