当AI智能体的“钥匙”成为黑客的“战利品”,每一次明文存储都是一次沉默的数据泄露

引言:密钥泄露——AI时代的“阿喀琉斯之踵”

2026年3月,安全研究人员发现一款名为 InfoStealer 的恶意软件正在GitHub和钓鱼网站上疯狂传播,专门针对OpenClaw用户。该木马能够精准定位并窃取~/.openclaw/openclaw.json配置文件中的API密钥、Gateway Token以及环境变量文件,导致大量用户的AI服务账户被劫持,数小时内产生数万美元的恶意API调用账单-7

工信部在最新的安全预警中明确指出:OpenClaw默认将API密钥以明文存储在本地配置文件中,一旦实例被入侵,攻击者可直接获取相关AI服务密钥,造成经济损失-4。北京大学计算中心也在安全提醒中强调:“不要在OpenClaw中存储或处理敏感信息,包括统一身份认证账号、银行卡信息、邮箱密码等”-4

本文将从凭证存储规范、敏感信息保护、审计日志建立三个维度,为你构建一套完整的AI智能体密钥生命线防护体系

一、当前风险:InfoStealer恶意软件的攻击链

1.1 攻击原理:专挑“软柿子”

InfoStealer恶意软件的攻击链非常清晰:

  1. 投递阶段:通过伪造的OpenClaw技能插件、钓鱼邮件或伪装成“一键安装脚本”的GitHub仓库传播
  2. 扫描阶段:运行后自动扫描用户目录,查找以下目标文件:
    • ~/.openclaw/openclaw.json(主配置文件,常含明文API Key)
    • ~/.openclaw/.env(环境变量文件)
    • ~/.bashrc、~/.zshrc(shell配置文件,可能含环境变量)
    • ~/.openclaw/agents/*/auth-profiles.json(认证配置文件)
  3. 外传阶段:将窃取的凭证打包发送至攻击者C2服务器
  4. 利用阶段:攻击者使用窃取的API Key调用AI服务,造成经济损失;使用Gateway Token直接控制受害者的OpenClaw实例-7

1.2 风险后果:远不止账单损失

风险类型

具体后果

经济损失

API Key被用于恶意调用,产生巨额账单(有用户一夜损失数千美元)

账户劫持

攻击者获取Gateway Token后,可直接控制OpenClaw执行任意操作

供应链攻击

被控的OpenClaw实例可能向其他系统传播恶意软件

隐私泄露

存储在会话日志中的敏感对话内容被窃取

二、凭证存储规范:从“明文裸奔”到“加密保险”

2.1 核心原则:永远不要明文存储

北京大学计算中心在安全排查清单中明确指出:“OpenClaw默认将API密钥以明文存储在本地配置文件中,一旦实例被入侵,攻击者可直接获取相关AI服务密钥”-4。因此,禁止明文存储是第一铁律。

2.2 使用环境变量引用(${VAR})

OpenClaw原生支持在配置文件中通过${VAR_NAME}语法引用环境变量,这是目前最安全、最简单的凭证管理方式-2

2.2.1 正确配置示例

❌ 错误做法:明文存储

{

  "models": {

    "providers": {

      "bailian": {

        "apiKey": "sk-64e27...cef84eab"  // 明文!危险!

      }

    }

  }

}

✅ 正确做法:环境变量引用

{

  "models": {

    "providers": {

      "bailian": {

        "apiKey": "${BAILIAN_API_KEY}"  // 从环境变量读取

      }

    }

  }

}

2.2.2 环境变量设置方法

临时设置(当前会话有效):

export BAILIAN_API_KEY="sk-64e27...cef84eab"

export OPENCLAW_GATEWAY_TOKEN="a2d22396ef3f8ba21a0e98834fb468d1"

永久设置(推荐):

# 编辑 ~/.bashrc 或 ~/.zshrc

echo 'export BAILIAN_API_KEY="sk-64e27...cef84eab"' >> ~/.bashrc

echo 'export OPENCLAW_GATEWAY_TOKEN="a2d22396ef3f8ba21a0e98834fb468d1"' >> ~/.bashrc

source ~/.bashrc

2.2.3 使用 .env 文件(适合systemd服务)

OpenClaw支持从~/.openclaw/.env自动加载环境变量-2

# 创建 .env 文件

cat > ~/.openclaw/.env << EOF

BAILIAN_API_KEY=sk-64e27...cef84eab

OPENCLAW_GATEWAY_TOKEN=a2d22396ef3f8ba21a0e98834fb468d1

OPENCLAW_DISABLE_BONJOUR=1

EOF

# 设置权限(非常重要!)

chmod 600 ~/.openclaw/.env

环境变量加载优先级(从高到低)-2

  1. 进程已有环境变量(父进程传入)
  2. 当前目录下的 .env 文件
  3. ~/.openclaw/.env 全局环境变量文件
  4. 配置文件中的 env 块(仅当变量缺失时应用)

2.3 使用 SecretRef 对象(进阶)

对于支持SecretRef的字段,可以使用更安全的引用方式-2

{

  "auth": {

    "profiles": {

      "bailian:default": {

        "provider": "bailian",

        "mode": "api_key",

        "apiKey": {

          "source": "env",

          "provider": "default",

          "id": "BAILIAN_API_KEY"

        }

      }

    }

  }

}

2.4 定期更换密钥

安全专家建议:每90天更换一次API密钥和Gateway Token-5

密钥轮换脚本

#!/bin/bash

# rotate-keys.sh - 定期更换OpenClaw凭证

# 1. 生成新的Gateway Token

NEW_TOKEN=$(openssl rand -hex 16)

echo "export OPENCLAW_GATEWAY_TOKEN=\"$NEW_TOKEN\"" >> ~/.openclaw/.env.new

# 2. 在阿里云控制台生成新的API Key(需手动操作)

echo "请登录阿里云百炼控制台生成新的API Key"

read -p "输入新的API Key: " NEW_API_KEY

echo "export BAILIAN_API_KEY=\"$NEW_API_KEY\"" >> ~/.openclaw/.env.new

# 3. 备份旧的.env文件

cp ~/.openclaw/.env ~/.openclaw/.env.backup-$(date +%Y%m%d)

# 4. 启用新配置

mv ~/.openclaw/.env.new ~/.openclaw/.env

chmod 600 ~/.openclaw/.env

# 5. 重启服务

systemctl --user restart openclaw-gateway.service

echo "密钥已更新,请验证服务状态:openclaw gateway status"

2.5 使用专业的密钥管理工具

对于企业级部署,建议使用专业密钥管理工具-5

使用 sops 加密.env文件

# 安装 sops

brew install sops  # macOS

sudo apt install sops  # Linux

# 创建加密的.env文件

sops --encrypt .env > .env.encrypted

# 解密后使用

sops --decrypt .env.encrypted > .env

source .env

使用 1Password CLI

# 从1Password获取密钥

export BAILIAN_API_KEY=$(op read "op://Vault/OpenClaw API Key/credential")

三、敏感信息保护清单:什么不能存?

北京大学计算中心明确列出了禁止在OpenClaw中存储或处理的敏感信息清单-4

3.1 绝对禁止存储的内容

类别

具体内容

风险等级

身份认证凭证

统一身份认证账号及密码

🔴 高危

财务信息

银行卡号、信用卡信息、支付密码

🔴 高危

通信凭证

邮箱账号及密码、社交媒体账号及密码

🔴 高危

基础设施密钥

SSH私钥、数据库密码、云服务SecretKey

🔴 高危

个人隐私

身份证号、家庭住址、医疗记录

🟠 中高危

3.2 为什么不能存?

AI智能体的特性决定了它无法像传统应用那样“守口如瓶”:

  1. 记忆污染:模型可能在训练或对话过程中记忆敏感信息,在后续生成回复时无意透露-9
  2. 日志泄露:OpenClaw的操作日志可能包含敏感数据,如果未加密存储,一旦泄露后果严重-9
  3. 工具调用暴露:敏感信息可能在工具调用参数中被传递给第三方API
  4. 会话历史留存:所有对话记录保存在~/.openclaw/agents/*/sessions/目录下,默认未加密

3.3 必须存储时的防护措施

如果确有必要存储敏感信息,必须采取以下防护:

# 1. 创建加密的存储目录

mkdir -p ~/.openclaw/encrypted

chmod 700 ~/.openclaw/encrypted

# 2. 使用GPG加密存储敏感文件

gpg --symmetric --cipher-algo AES256 ~/.openclaw/encrypted/secrets.txt

# 3. 配置OpenClaw从加密文件中读取(通过自定义脚本)

3.4 日常检查命令

# 扫描配置文件中可能的明文密钥

grep -E "(api[_-]?key|token|secret|password)" ~/.openclaw/openclaw.json

# 检查环境变量文件中是否有明文密钥

grep -E "(api[_-]?key|token|secret|password)" ~/.openclaw/.env 2>/dev/null

# 检查shell配置文件中是否有密钥

grep -E "(API_KEY|TOKEN)" ~/.bashrc ~/.zshrc

四、审计日志:监控凭证使用异常

“受控”至少包含四件事:谁在触发调用、花了多少钱、做了哪些操作(尤其是高危工具)、行为是否可追溯、可审计-3

4.1 OpenClaw的日志体系

OpenClaw的日志分为三类,分别承担不同的审计职能-3

日志类型

路径

核心用途

Session日志(行为审计)

~/.openclaw/agents/*/sessions/*.jsonl

完整还原Agent做了什么、调了哪些工具、花了多少钱

应用日志(运维观测)

/tmp/openclaw/openclaw-*.log

系统健康度与错误排查

Metrics/Traces

diagnostics-otel插件输出

实时监控与链路追踪

4.2 Session日志:行为审计的核心数据源

Session日志以JSONL格式存储,每行是一个JSON对象,通过type字段区分条目类型-3

关键日志条目示例

用户消息:

{

  "type": "message",

  "id": "70f4d0c5",

  "message": {

    "role": "user",

    "content": [{ "type": "text", "text": "读取 /etc/passwd 文件" }]

  }

}

Assistant回复(含工具调用):

{

  "type": "message",

  "id": "3878c644",

  "message": {

    "role": "assistant",

    "content": [

      {

        "type": "toolCall",

        "id": "call_d46c7e2b",

        "name": "read",

        "arguments": { "path": "/etc/passwd" }

      }

    ],

    "usage": { "totalTokens": 2350 }

  }

}

工具执行结果:

{

  "type": "message",

  "id": "81fd9eca",

  "message": {

    "role": "toolResult",

    "toolName": "read",

    "content": [{ "type": "text", "text": "root:x:0:0:root:/root:/bin/bash\n..." }],

    "isError": false

  }

}

4.3 敏感数据外泄检测

通过分析Session日志,可以检测敏感数据是否被AI读取或外泄-3

检测脚本示例(检测工具返回内容中是否包含敏感信息):

#!/bin/bash

# detect-leak.sh - 检测会话日志中的敏感数据泄露

SESSION_DIR="$HOME/.openclaw/agents/main/sessions"

grep -l -E "(BEGIN RSA PRIVATE KEY|password|ACCESS_KEY)" $SESSION_DIR/*.jsonl | while read file; do

  echo "⚠️ 发现潜在敏感数据泄露: $file"

  echo "发生时间: $(stat -c %y $file)"

  echo "请检查以下内容:"

  grep -E "(BEGIN RSA PRIVATE KEY|password|ACCESS_KEY)" $file | head -5

done

4.4 成本异常监控

Session日志中的usage字段记录了每次调用的Token消耗,可用于成本监控-3

# 统计今日Token消耗

cat ~/.openclaw/agents/main/sessions/$(date +%Y-%m-%d)*.jsonl 2>/dev/null |

  grep -o '"totalTokens":[0-9]*' |

  awk -F: '{sum+=$2} END {print "今日总Token消耗: " sum}'

# 找出消耗最大的会话

for f in ~/.openclaw/agents/main/sessions/*.jsonl; do

  tokens=$(grep -o '"totalTokens":[0-9]*' $f | awk -F: '{sum+=$2} END {print sum}')

  echo "$(basename $f): $tokens tokens"

done | sort -t: -k2 -nr | head -10

4.5 接入集中日志系统(企业级)

对于企业部署,建议将OpenClaw日志接入阿里云SLS、腾讯云CLS等集中日志系统-3

Logstash配置示例

input {

  file {

    path => "/home/openclaw/.openclaw/agents/*/sessions/*.jsonl"

    start_position => "beginning"

    sincedb_path => "/dev/null"

    codec => json

  }

}

filter {

  # 脱敏处理

  mutate {

    gsub => [

      "message.content", "(api[_-]?key['\"]?\s*[:=]\s*['\"]?)[a-zA-Z0-9_\-]{20,}", "\1***REDACTED***"

    ]

  }

}

output {

  elasticsearch {

    hosts => ["localhost:9200"]

    index => "openclaw-sessions-%{+YYYY.MM.dd}"

  }

}

五、凭证泄露应急响应流程

当发现凭证可能泄露时,请按以下流程处理-8

5.1 立即响应(第0-30分钟)

# 1. 立即停止OpenClaw服务

systemctl --user stop openclaw-gateway.service

# 2. 隔离网络(通过防火墙)

sudo ufw deny out to any  # 临时阻止所有出站连接

# 3. 旋转所有凭证

# - 在阿里云控制台重新生成API Key

# - 生成新的Gateway Token

NEW_TOKEN=$(openssl rand -hex 16)

echo "export OPENCLAW_GATEWAY_TOKEN=\"$NEW_TOKEN\"" >> ~/.openclaw/.env.new

# 4. 创建磁盘快照(保留证据)

# 云平台控制台操作:创建实例快照

5.2 调查分析(第30-120分钟)

# 1. 查看近期登录记录

last -a | head -20

# 2. 检查异常进程

ps aux | grep -vE "(systemd|kernel)"

# 3. 查看OpenClaw日志中的异常调用

grep -E "(unauthorized|error|fail)" /tmp/openclaw/openclaw-*.log

# 4. 检查技能安装记录

ls -la ~/.openclaw/skills/

5.3 恢复重建(第120-240分钟)

# 1. 备份必要数据(配置模板、非敏感会话)

cp ~/.openclaw/openclaw.json ~/openclaw-config-backup.json

# 编辑备份,移除所有密钥

# 2. 全新部署

# 参考第四篇《部署阶段安全加固》重新部署

# 3. 使用新凭证恢复服务

systemctl --user start openclaw-gateway.service

六、安全基线检查清单

6.1 凭证管理自查清单

检查项

命令/验证

期望结果

无明文API Key

grep -E "(api.?key|token).{0,5}['\"]?[a-zA-Z0-9_\-]{20,}" ~/.openclaw/openclaw.json

无输出

环境变量引用

grep -E "\$\{[A-Z_]+\}" ~/.openclaw/openclaw.json

所有密钥均引用变量

.env文件权限

ls -l ~/.openclaw/.env

-rw-------(600)

无敏感信息存储

grep -E "(password|secret|bank|card|ssh-rsa)" ~/.openclaw/agents/*/sessions/*

无输出

日志轮转

ls -la ~/.openclaw/agents/main/sessions/ | wc -l

合理数量(建议≤30天)

6.2 一键安全扫描脚本

#!/bin/bash

# audit-credentials.sh - OpenClaw凭证安全审计脚本

echo "========================================="

echo "OpenClaw 凭证安全审计脚本"

echo "========================================="

# 1. 检查配置文件中的明文密钥

echo "[1/6] 扫描配置文件明文密钥..."

PLAINTEXT=$(grep -E "(api.?key|token).{0,5}['\"]?[a-zA-Z0-9_\-]{20,}" ~/.openclaw/openclaw.json 2>/dev/null | wc -l)

if [ $PLAINTEXT -gt 0 ]; then

  echo "❌ 发现 $PLAINTEXT 处可能的明文密钥!"

  grep -n -E "(api.?key|token).{0,5}['\"]?[a-zA-Z0-9_\-]{20,}" ~/.openclaw/openclaw.json

else

  echo "✅ 未发现明文密钥"

fi

# 2. 检查环境变量引用

echo "[2/6] 检查环境变量引用..."

REF_COUNT=$(grep -E "\$\{[A-Z_]+\}" ~/.openclaw/openclaw.json 2>/dev/null | wc -l)

if [ $REF_COUNT -gt 0 ]; then

  echo "✅ 发现 $REF_COUNT 处环境变量引用"

else

  echo "⚠️ 未使用环境变量引用,建议配置"

fi

# 3. 检查.env文件权限

echo "[3/6] 检查.env文件权限..."

if [ -f ~/.openclaw/.env ]; then

  PERM=$(stat -c %a ~/.openclaw/.env 2>/dev/null || stat -f %A ~/.openclaw/.env 2>/dev/null)

  if [ "$PERM" = "600" ]; then

    echo "✅ .env权限正确(600)"

  else

    echo "❌ .env权限应为600,当前为$PERM"

    echo "  修复:chmod 600 ~/.openclaw/.env"

  fi

else

  echo "ℹ️ .env文件不存在,如使用环境变量引用则正常"

fi

# 4. 检查会话日志中的敏感信息

echo "[4/6] 扫描会话日志敏感信息..."

LEAKS=$(grep -l -E "(password|secret|ssh-rsa|PRIVATE KEY|bank|card)" ~/.openclaw/agents/main/sessions/*.jsonl 2>/dev/null | wc -l)

if [ $LEAKS -gt 0 ]; then

  echo "❌ 会话日志中可能包含敏感信息,建议检查"

  grep -l -E "(password|secret|ssh-rsa|PRIVATE KEY)" ~/.openclaw/agents/main/sessions/*.jsonl 2>/dev/null | head -5

else

  echo "✅ 会话日志未发现明显敏感信息"

fi

# 5. 检查密钥轮换时间

echo "[5/6] 检查密钥最后修改时间..."

if [ -f ~/.openclaw/.env ]; then

  LAST_MOD=$(stat -c %y ~/.openclaw/.env 2>/dev/null | cut -d. -f1)

  echo "ℹ️ .env文件最后修改:$LAST_MOD"

  echo "   建议每90天轮换一次密钥"

fi

# 6. 检查Gateway Token

echo "[6/6] 检查Gateway Token配置..."

TOKEN_CONFIG=$(grep -A 3 "gateway.*auth" ~/.openclaw/openclaw.json 2>/dev/null | grep token)

if [ -n "$TOKEN_CONFIG" ]; then

  echo "✅ Gateway Token已配置"

else

  echo "❌ Gateway Token未配置,存在安全风险"

fi

echo "========================================="

echo "审计完成!"

echo "参考:第六篇:凭证管理与数据加密"

echo "========================================="

执行脚本

chmod +x audit-credentials.sh

./audit-credentials.sh

七、总结:守住API密钥生命线

OpenClaw的凭证管理,本质上是在回答一个核心问题:“如何让AI拥有能力,却不拥有权力?”

  • 环境变量引用:让密钥存在于“代码之外”,即使配置文件泄露,攻击者也无法直接获取凭证
  • 最小化存储:遵循“不需要的就不存”原则,避免敏感信息落入AI的“记忆陷阱”
  • 持续审计:通过Session日志监控凭证使用行为,及时发现异常
  • 快速响应:建立应急流程,将泄露损失控制在最小范围

正如安全专家所言:“凭证泄露不是‘会不会发生’的问题,而是‘何时发生’的问题。”做好凭证管理与数据加密,就是在AI智能体与黑客之间,筑起一道坚不可摧的防火墙。

(系列文章第六篇,待续。下一篇预告:频道接入安全——严防未授权对话)

参考文献:

  1. 科创中国.工信部提示OpenClaw安全隐患.2026-03-08-1
  2. OpenClaw官方文档.Environment Variables.2026-03-2
  3. 知乎专栏.你的OpenClaw真的在受控运行吗?2026-03-02-3
  4. 北京大学计算中心.关于安全使用OpenClaw开源AI智能体的提醒.2026-03-10-4
  5. Apidog.How to Secure Your OpenClaw Installation.2026-03-09-5
  6. 腾讯云.ADP Claw升级五大防护.2026-03-13-6
  7. Tencent Cloud.OpenClaw Server File Storage and Sharing Configuration.2026-03-02-7
  8. Tencent Cloud.OpenClaw Server Security Incident Response.2026-03-02-8
  9. 阿里云开发者社区.给"AI龙虾"穿上盔甲.2026-03-09-9
  10. Composio.How to secure OpenClaw.2026-01-27

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐