如何用 Hooks 保护 Claude Code 中的敏感密钥?

密钥保护 Hook

以下步骤将帮助您设置一个用于密钥保护的 Hook。

  1. 复制 Hook 脚本:

    mkdir -p ~/.claude/hooks
    git clone https://github.com/karanb192/claude-code-hooks.git
    cp hook-scripts/pre-tool-use/protect-secrets.js ~/.claude/hooks/

  2. 在 .claude/settings.json中添加配置:

    {
    "hooks": {
    "PreToolUse": [
    {
    "matcher": "Read|Edit|Write|Bash",
    "hooks": [
    {
    "type": "command",
    "command": "node ~/.claude/hooks/protect-secrets.js"
    }
    ]
    }
    ]
    }
    }

  3. 重启 Claude Code 以激活该 Hook 。
    💡 提示 :可以结合多个 Hooks 使用,例如 block-dangerous-commands 和 protect-secrets,以实现更全面的安全防护。

保护机密

此 Hook 可防止 Claude Code 读取、修改或窃取敏感文件,包括但不限于:

  • .env 文件

  • SSH 密钥(如 ~/.ssh/id_*)

  • AWS 凭证(如 ~/.aws/credentials)

  • Kubernetes 配置文件(如 ~/.kube/config)

  • 匹配常见密钥模式的任意文件
    此外,它还会阻止可能泄露密钥的 Bash 命令,例如:

  • cat .env

  • echo $API_KEY

  • curl -d @.env (数据窃取)

  • printenv (环境信息导出)
    通过上述配置,您可以有效增强 Claude Code 的安全性,确保敏感信息不被未经授权地访问或篡改。

    {
    "hooks": {
    "PreToolUse": [{
    "matcher": "Read|Edit|Write|Bash",
    "hooks": [{
    "type": "command",
    "command": "node ~/.claude/hooks/protect-secrets.js"
    }]
    }]
    }
    }

根据"实际拦截功能"对以下内容进行分类整理:

1. 文件访问控制

当尝试读取、修改或写入下列敏感文件时,系统将直接拒绝访问:

  • 关键级别(默认包含高风险)
    • 环境配置文件:.env 及其变体如 .env.*, .envrc
    • SSH 相关密钥及认证文件:位于 ~/.ssh/ 目录下的 id_* 文件(例如 id_rsa, id_ed25519等),以及 authorized_keys
    • 云服务凭证:包括但不限于 ~/.aws/credentials, ~/.aws/config, ~/.kube/config
    • 各类证书与密钥:.pem, .key, .p12/.pfx 扩展名的文件
  • 高风险(当前 SAFETY_LEVEL 设置为 'high' 时启用)
    • 认证信息存储:credentials.json
    • 密码管理文件:扩展名为 .yaml, .json, 或 .toml 的 secrets 和 credentials 文件
    • 特定于 GCP, Azure, GCloud 的认证文件
    • Docker 配置文件:~/.docker/config.json(可能包含注册表认证信息)
    • 其他开发工具相关的认证文件:.netrc, .npmrc, .pypirc, .gem/credentials, .vault-token
    • Java 应用程序密钥库:*.keystore, *.jks
    • Web 服务器和数据库密码文件:.htpasswd, .pgpass, .my.cnf
  • 严格模式(尚未启用)
    • 数据库配置文件:database.json/yaml
    • 已知主机列表:.ssh/known_hosts
    • Git 客户端配置:.gitconfig
    • Curl 客户端配置:.curlrc

注释 :模板或示例环境变量文件如 .env.example, .sample, .template 等被加入白名单,默认允许访问。

2. Bash 命令拦截

对于可能引起数据泄露或系统破坏的行为,系统将阻止执行以下命令:

  • 直接查看敏感信息
    • 使用 cat, less, head, tail 查看 .env 文件
    • 读取私有密钥文件(如 id_rsa, .pem, .key)
    • 显示 AWS 凭据
  • 环境变量暴露
    • 列出所有环境变量:printenv, env
    • 显示特定环境变量值:echo $TOKEN, printf $PASSWORD
    • 加载环境变量:source .env, . .env
    • 导出环境变量:export $(cat .env ...)
  • 数据外泄
    • 通过 curl 上传或 POST 敏感文件
    • 利用 wget --post-file 发送敏感信息
    • 使用 scp 或 rsync 将敏感文件传输到远程位置
    • 采用 nc < .env 方式进行 netcat 外传
  • 敏感文件操作
    • 复制或移动 .env 文件
    • 删除重要密钥文件,如 .env, id_rsa, .aws/credentials
    • 清空敏感文件内容:truncate
  • 进程环境读取
    • 访问 /proc/*/environ 获取进程环境变量
    • 使用 find ... -exec cat ... 或 xargs cat ... 读取 .env 文件
  • 仅在严格模式下启用
    • 对关键词如 password, token, apikey 进行递归搜索
    • 对秘密信息执行 Base64 编码

3. 适用场景概述

本脚本旨在保护如下应用场景:

  1. 防止意外读取:避免 AI 或脚本无意中读取本地或项目中的敏感凭据。
  2. 防止误修改/删除:禁止对关键密钥文件进行未经授权的写入、移动或删除操作。
  3. 防止数据外泄 :阻止使用 curl, scp, wget, nc 等工具将敏感信息发送出去。
  4. 防止环境变量泄漏 :限制 env, printenv, echo $TOKEN 等命令的使用以避免泄露环境变量。
  5. 可追溯性 :任何触发规则的行为都将记录至 ~/.claude/hooks-logs/ 中,便于后续审计。

补充说明

增加对 .zshrc, .bashrc 等用户配置文件的安全检查与拦截。

相关推荐
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
1点东西3 天前
做了近两年的Agent开发,其实真正要学的就是这五件事
llm·agent·ai编程
七牛云行业应用3 天前
Qwen-Image-2.1 开源部署完整指南:Diffusers、ComfyUI 与推理服务
ai编程
福如意如我心意3 天前
TencentDB Agent Memory和其他开源memory
ai编程
小虎AI生活3 天前
腾讯开源了一个项目,让 AI 直接用你已经登录好的浏览器
aigc·ai编程
瑶山3 天前
开源编程Agent-OpenCode完整使用教程
开源·agent·ai编程·opencode
技术民工之路3 天前
文生视频 vs 传统视频制作:核心优势
ai编程
plainGeekDev3 天前
Harness 实战:用 Android 登录模块搭一套可靠的 Agent 开发环境
aigc·ai编程·claude
黄昏回响3 天前
从标准化到智能化:信息化的一场“地基革命”——兼论AI如何重新定义“标准化”
ai编程