周末一个人躺在沙发上,看着我的电脑它在自己写代码、自己修Bug、自己逆向分析、自己调用GDB动态调试,忽然之间觉得有点像灵异事件:好像是有一个你看不见的人在操作你的电脑。
突然想起来一个老段子:单位里有个人去世了,但他工位上的电脑一直没关。
有一天晚上,其他同事远程控制着他的电脑干活。恰好有个人晚上去单位取东西,路过那个工位,发现电脑屏幕亮着,鼠标指针自己在动,甚至还在操作/写代码,但工位上根本没人。
他当时以为……闹鬼了。
后来才知道,是有人在远程控制那台电脑。
和这个段子唯一不同的是,现在并没有人在远程控制我的电脑。
最近出现AI中转站被恶意投毒、执行窃取Token key 凭证数据的新闻:
a22K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6^5i4K6u0W2j5$3!0E0i4K6u0r3M7$3S2G2N6h3y4U0j5$3y4Q4x3V1k6K6N6r3q4@1N6i4y4Q4x3V1j5J5x3o6V1^5x3e0j5&6y4K6R3J5y4e0b7I4y4U0x3I4z5o6M7I4
001K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6^5i4K6u0W2j5$3!0E0i4K6u0r3M7$3S2G2N6h3y4U0j5$3y4Q4x3V1k6K6N6r3q4@1N6i4y4Q4x3V1j5J5x3o6b7J5y4o6t1K6y4K6p5K6x3o6p5&6y4o6p5J5z5e0b7I4
5c2K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2M7Y4S2A6N6W2)9J5k6h3!0J5k6#2)9J5c8X3q4T1M7#2)9J5c8U0t1$3x3o6c8Q4x3X3f1H3z5o6b7H3y4H3`.`.
鉴于最近大模型中转站被注入恶意工具调用并窃取凭证的攻击事件频繁发生,审计AI在电脑里面读了什么内容,修改了哪些代码以及执行了哪些操作这种措施就必不可少了,趁周末有空,写了个工具插件,可以监测Claude Code在电脑上所有的操作和行为.
效果图如下:
目前可以识别Claude Code发起的行为包括:
这些是对 Bash 命令文本做的行为分类,用于首页统计卡片,本身不产生 block/confirm 决策:
监测对象:Claude Code 在本机执行的所有可能影响系统安全或数据安全的操作——文件读写、命令执行、网络访问、以及其它 Claude Code 工具能触发的操作。
目标:
对应 Claude Code 的操作可归纳为四类:
需要重点防范的两类结果:破坏系统 (删文件、改配置、执行危险命令)和泄露数据 (读取凭据/密钥后通过网络外发)。
单纯依赖 Claude Code 自身上报(hooks)有一个根本问题:如果 Claude Code 进程被绕过、hooks 配置被篡改,或者攻击者通过其它路径(比如诱导用户直接改配置)关闭监测,监测就形同虚设。因此设计上采用 应用层 + 系统层 两道防线:
应用层(主力,语义丰富) :利用 Claude Code 内置的 Hooks 机制(PreToolUse / PostToolUse 等),在每次工具调用前后拦截,拿到结构化信息(工具名、参数、cwd、session_id)。优点是信息语义清晰("Bash 执行了 rm -rf /tmp/x"),成本低(几个 shell/Python 脚本即可跨平台)。缺点是这一层运行在被监测对象自己的框架内,理论上可被篡改配置绕过。
系统层(兜底,防绕过) :在 OS 层面对 Claude Code 进程树做审计/沙箱化,独立于 Claude Code 是否配合。即使应用层被绕过,系统层依然能看到真实的 execve/open/connect 系统调用,作为最后一道防线。
两层各自独立上报到同一个本地 Agent,互为校验(比如系统层看到了一次文件写入,但应用层没有对应事件,就说明监测被绕过,本身就是一个高危信号)。
进程树识别方式 :子进程 fork 出来、真正 exec 新程序之前,comm 还没变,仍然继承自父进程 ("claude");一旦这个子进程 execve 到别的程序,就是它是 Claude Code 派生进程的证据,用sched_process_fork 把这层派生关系持续传播给后续所有子进程,实测能干净地把 Claude Code 自己 的操作和桌面上其它进程(conky、gnome-shell 等)的噪音分开。
交叉验证 :CC-Monitor-probe 把观测到的顶层 shell 调用(bash -c "..." 之类)跟最近的hook_pre Bash 记录做模糊比对(时间窗口 + 去除引号后的子串匹配,因为 Claude Code 的 Bash 工具 经常会把原始命令包一层 eval '<command>' 的 shell 快照脚本再执行)。对不上的会标记成hook_bypass_suspected,典型场景是"被批准执行的命令本身很短,但运行时自己又 exec 了一个完全 没被审查过的命令"——用 CC-Monitor verify 查看。
Linux 上需要 root 权限运行(bpftrace 需要 CAP_BPF/CAP_PERFMON 或直接 root);macOS 上的nettop 网络探针不需要 root 。两个平台目前都是手动启动,还没有做成开机自启的常驻服务 (要不要装成 systemd/launchd service 属于运维决定,MVP 阶段先手动跑)。
MVP 阶段建议:系统层先只做审计 (不强制阻断,成本低、无需内核扩展/签名),文件与命令的拦截 主要靠应用层 Hook 完成;网络层用本地代理统一管控(这个方案 Linux/macOS 完全一致,性价比最高)。系统层的强制沙箱(Landlock/sandbox-exec/容器化)作为 Phase 2 的"高安全模式"可选开启。
规则示例(可配置,YAML/JSON 存放):
匹配方式:命令用规则+关键词/正则,必要时结合一个轻量本地模型做语义判断(比如把命令块解释一下"这条命令的意图是什么,是否匹配已知破坏性模式"),文件路径用 glob 黑白名单。
双层监测架构 (核心设计):
项目地址:623K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6U0L8U0m8^5M7X3!0G2N6q4)9J5c8V1y4o6i4K6u0V1e0h3!0F1K9i4c8G2M7R3`.`.
欢迎大家体验使用,反馈Bug和意见建议~ 感谢
规则 id
动作
检测效果
dangerous_delete
拦截
rm -rf/rm -fr 对根目录、~、$HOME、.. 的删除
disk_overwrite
拦截
dd/mkfs/fdisk/parted 磁盘级覆写/分区操作
fork_bomb
拦截
`:(){ :
db_destructive_command
确认
mysql/psql/redis-cli/mongo/sqlite3 直接执行 DROP/DELETE/TRUNCATE/FLUSHALL/FLUSHDB
git_hard_reset_clean
确认
git reset --hard/git clean -f
history_tampering
确认
清空/删除/重定向覆盖 .bash_history/.zsh_history
规则 id
动作
检测效果
curl_pipe_shell
拦截
curl/wget | sh/bash/zsh 下载直接管道执行
curl_download_then_exec
确认
先下载脚本文件再单独执行(非管道,两步走)
reverse_shell_pattern
拦截
/dev/tcp 反弹、nc -e/ncat/netcat 各变体、socat exec:、mkfifo 命名管道拼接反弹 shell
shell_escape_via_utility
拦截
GTFOBins 式"借道"逃逸:find -exec sh、awk system()、perl exec、Python pty.spawn/os.system、tar --checkpoint-action=exec=、vim -c :!sh、zip --unzip-command=、script -qc、ssh ProxyCommand=
encoded_payload_exec
拦截
base64 -d/xxd -r 解码后直接管道给 shell/python 执行
dynamic_exec_in_write
记录
写入内容里出现 eval()/exec()/os.system()/subprocess(shell=True) 等动态执行
规则 id
动作
检测效果
c2_framework_execution
确认
Metasploit(msfconsole/msfvenom)、Cobalt Strike、PowerShell Empire、Sliver、Pacu 等 C2 框架
post_exploitation_tool_execution
确认
LinPEAS、NetExec、BloodHound/SharpHound、smbmap、rpcclient、enum4linux 等后渗透枚举工具
pentest_recon_tool_execution
记录
nmap/masscan/sqlmap/hydra/nikto/gobuster/wpscan/hashcat 等侦察/爆破工具(18+ 覆盖,纯记录不拦截)
mcp_suspicious_tool_name
确认
MCP 工具名本身包含 reverse_shell/c2server/beacon/backdoor 等可疑字样
ssh_tunnel_reverse_proxy
确认
ssh -R/-D/-L 隧道转发、socat、chisel client/server
covert_tunnel_tool_execution
确认
dnscat2/iodine/dns2tcp/ptunnel/icmptunnel/pingtunnel 等隐蔽隧道(DNS/ICMP tunneling)
crypto_miner_pool_domain_command / _write
确认
命令或写入内容中出现矿池域名/stratum+tcp:// 协议
规则 id
动作
检测效果
chmod_world_writable_recursive
拦截
chmod -R 777 作用于根目录/家目录
chown_root_recursive / chgrp_root_recursive
拦截
递归改属主/属组到根目录/家目录
setuid_setgid_bit
确认
chmod u+s/g+s/4xxx/2xxx 设置 SUID/SGID 位
chmod_recursive_generic
确认
任意 chmod -R(不限 777)
chmod_777_single_file
确认
单文件 chmod 777(非递归,相对路径也覆盖)
sudo_usage
确认
命令行首/管道后出现 sudo
su_pkexec_privilege_escalation
确认
su/pkexec 提权
sudo_pip_install
拦截
sudo pip install(系统级 Python 环境风险)
规则 id
动作
检测效果
ssh_authorized_keys_bash_write
拦截
追加写入 authorized_keys/id_*/SSH config
crontab_persistence
确认
crontab -e/-r/-l 或写 /etc/cron*
systemd_persistence
确认
systemctl enable/start 新建持久化服务
git_hooks_persistence
确认
git config core.hooksPath/url.insteadOf、直接写 .git/hooks/
git_hooks_file_write
确认
Write/Edit 工具直接改 .git/hooks/ 下的文件
user_account_management
确认
useradd/userdel/usermod/passwd 账号管理
规则 id
动作
检测效果
disable_security_controls
拦截
setenforce 0、ufw disable、iptables -F、停用防火墙/SELinux 等安全控制
kill_monitoring_process
确认
kill/pkill/killall 目标是 CC-Monitor 自己的探针/hook 进程
process_kill
记录
通用 kill/pkill/killall(非监测进程,兜底记录避免警报疲劳)
claude_config_tamper
确认
改 .claude/settings.json/.claude/hooks//CLAUDE.md/.mcp.json(比杀进程更隐蔽的绕过手法)
规则 id
动作
检测效果
sensitive_file_write
拦截
Write/Edit 直接写 .ssh/、.aws/credentials、.env、私钥文件
sensitive_file_read / sensitive_file_read_bash
记录
Read 或 cat/less/head/strings/xxd 等命令读取同一批敏感文件
browser_credential_read / _bash
确认
读取浏览器 Cookies/Login Data/Web Data(Chrome/Chromium/Brave 等)
credential_grep_scan
确认
grep -r/rg/ag 递归搜索 password/secret 等关键词
cloud_vpn_config_write / _read
确认/记录
OpenVPN/WireGuard/阿里云/腾讯云/kubeconfig 配置读写
proc_env_read
确认
读 /proc/<pid>/environ 或 /cmdline 拿其它进程的环境变量/命令行
env_dump
记录
env/printenv/export -p 打印全部环境变量(已修复对 env VAR=val cmd 场景的误判)
secret_pattern_in_write
确认
写入内容里出现私钥文件头、AWS/GitHub/Anthropic/OpenAI/Slack/Google/npm/Stripe 等平台固定前缀密钥格式
pii_pattern_in_write
记录
写入内容里出现身份证号/手机号/邮箱等 PII 模式
history_read / history_file_read
记录
读 shell/数据库客户端的历史命令文件(可能留有明文凭据)
规则 id
动作
检测效果
webshell_pattern_in_write
拦截
写入内容出现动态执行 $_POST/$_GET/$_REQUEST/$_COOKIE 参数的 PHP webshell 特征
db_arbitrary_file_write / _content
确认
INTO OUTFILE/DUMPFILE、MySQL general_log_file 任意文件写(命令和写入内容两个入口都覆盖)
docker_privileged_or_host_mount
确认
docker run --privileged、挂载 /、挂载 Docker socket(容器逃逸)
规则 id
动作
检测效果
system_package_install
确认
apt/yum/dnf/pacman 等系统包安装/卸载
pip_install_no_venv / pip_install_venv_context
确认/记录
不在虚拟环境下 pip install(有 venv 上下文的降级为记录)
npm_global_install / npm_local_install
确认/记录
npm install -g(全局)vs 本地安装
package_install_other
记录
gem/cargo/go install/composer
npx_pipx_ephemeral_run
确认
npx/pnpm dlx/bunx/pipx run/uvx 临时运行未审计过的第三方包
shell_rc_write
确认
写 .bashrc/.zshrc/.profile 等 shell 启动脚本
system_config_write
确认
写 /etc、/boot、/System、/Library 下的系统配置
git_force_push
确认
git push --force/-f
规则 id
动作
检测效果
outbound_request
记录
WebFetch 访问的每个 URL
web_search
确认
WebSearch 的搜索关键词
user_clarifying_question
通知
Claude Code 发起的 AskUserQuestion 澄清性提问(非风险事件,只做可见性同步)
类别
具体操作
对应 Claude Code 工具
文件读写
读取文件、写入/覆盖文件、编辑(diff)、批量替换
Read / Write / Edit / NotebookEdit
命令执行
Shell 命令、后台进程、脚本
Bash
网络访问
抓取网页、调用外部 API/MCP 服务
WebFetch / WebSearch / MCP 工具
元操作
派生子 Agent、跨会话消息、权限模式切换
Agent / SendMessage / 权限模式变更
能力
Linux 方案
macOS 方案
进程事件审计(execve 级绕过检测)
已实现 :bpftrace 脚本(cc_monitor/probe_linux.bt),跟踪从 claude 进程派生出来的所有子进程的 execve/connect,不依赖 auditd
Endpoint Security Framework(eslogger 可无需自研 System Extension 快速验证;生产版本需签名的 ES 客户端 + 用户授权 Full Disk Access),暂未实现——这一层是 CC-Monitor verify 绕过检测的基础,目前仍是 Linux 独有
强制沙箱(拦截而非只审计)
Landlock LSM(内核 ≥5.13,按路径限制读写)或 bubblewrap/firejail 包一层,限制可写目录、挂载只读根——暂未实现
sandbox-exec(配合自定义 profile)或跑在容器/轻量 VM(OrbStack/Docker Desktop)中——暂未实现
网络监测
已实现 :直接用 eBPF 抓 connect() 系统调用拿目标 IP:port(+ uprobe:libc:getaddrinfo 在应用层解析域名的那一刻记下来,反向 DNS 兜底),再加 tcp_sendmsg/tcp_cleanup_rbuf 两个内核探点统计上传/下载字节数,不解密 TLS、不用装 CA 证书;Web UI 有专门的"网络流量"页做明细表 + IP 归属地(本地 MaxMind/DB-IP Lite 数据库)+ WebGL2 世界地图
已实现 (cc_monitor/probe_darwin.py):用系统自带的 nettop 每 2 秒采样 claude 进程树的连接,拿目标 IP:port 和上传/下载字节增量,写进跟 Linux 一致的 network_traffic 表,不需要 root ;跟 Linux 版的差异是没有 getaddrinfo 域名捕获(域名只能靠反向 DNS 兜底)、也没有 execve 观测(上一行的绕过检测在 macOS 上不成立)
规则 id
动作
检测效果
dangerous_delete
拦截
rm -rf/rm -fr 对根目录、~、$HOME、.. 的删除
disk_overwrite
拦截
dd/mkfs/fdisk/parted 磁盘级覆写/分区操作
fork_bomb
拦截
`:(){ :
db_destructive_command
确认
mysql/psql/redis-cli/mongo/sqlite3 直接执行 DROP/DELETE/TRUNCATE/FLUSHALL/FLUSHDB
git_hard_reset_clean
确认
git reset --hard/git clean -f
history_tampering
确认
清空/删除/重定向覆盖 .bash_history/.zsh_history
规则 id
动作
检测效果
curl_pipe_shell
拦截
curl/wget | sh/bash/zsh 下载直接管道执行
curl_download_then_exec
确认
先下载脚本文件再单独执行(非管道,两步走)
reverse_shell_pattern
拦截
/dev/tcp 反弹、nc -e/ncat/netcat 各变体、socat exec:、mkfifo 命名管道拼接反弹 shell
shell_escape_via_utility
拦截
GTFOBins 式"借道"逃逸:find -exec sh、awk system()、perl exec、Python pty.spawn/os.system、tar --checkpoint-action=exec=、vim -c :!sh、zip --unzip-command=、script -qc、ssh ProxyCommand=
encoded_payload_exec
拦截
base64 -d/xxd -r 解码后直接管道给 shell/python 执行
dynamic_exec_in_write
记录
写入内容里出现 eval()/exec()/os.system()/subprocess(shell=True) 等动态执行
规则 id
动作
检测效果
c2_framework_execution
确认
Metasploit(msfconsole/msfvenom)、Cobalt Strike、PowerShell Empire、Sliver、Pacu 等 C2 框架
post_exploitation_tool_execution
确认
LinPEAS、NetExec、BloodHound/SharpHound、smbmap、rpcclient、enum4linux 等后渗透枚举工具
pentest_recon_tool_execution
记录
nmap/masscan/sqlmap/hydra/nikto/gobuster/wpscan/hashcat 等侦察/爆破工具(18+ 覆盖,纯记录不拦截)
mcp_suspicious_tool_name
确认
MCP 工具名本身包含 reverse_shell/c2server/beacon/backdoor 等可疑字样
ssh_tunnel_reverse_proxy
确认
ssh -R/-D/-L 隧道转发、socat、chisel client/server
covert_tunnel_tool_execution
确认
dnscat2/iodine/dns2tcp/ptunnel/icmptunnel/pingtunnel 等隐蔽隧道(DNS/ICMP tunneling)
crypto_miner_pool_domain_command / _write
确认
命令或写入内容中出现矿池域名/stratum+tcp:// 协议
规则 id
动作
检测效果
chmod_world_writable_recursive
拦截
chmod -R 777 作用于根目录/家目录
chown_root_recursive / chgrp_root_recursive
拦截
递归改属主/属组到根目录/家目录
setuid_setgid_bit
确认
chmod u+s/g+s/4xxx/2xxx 设置 SUID/SGID 位
chmod_recursive_generic
确认
任意 chmod -R(不限 777)
chmod_777_single_file
确认
单文件 chmod 777(非递归,相对路径也覆盖)
sudo_usage
确认
命令行首/管道后出现 sudo
su_pkexec_privilege_escalation
确认
su/pkexec 提权
sudo_pip_install
拦截
sudo pip install(系统级 Python 环境风险)
规则 id
动作
检测效果
ssh_authorized_keys_bash_write
拦截
追加写入 authorized_keys/id_*/SSH config
crontab_persistence
确认
crontab -e/-r/-l 或写 /etc/cron*
systemd_persistence
确认
systemctl enable/start 新建持久化服务
git_hooks_persistence
确认
git config core.hooksPath/url.insteadOf、直接写 .git/hooks/
git_hooks_file_write
确认
Write/Edit 工具直接改 .git/hooks/ 下的文件
user_account_management
确认
useradd/userdel/usermod/passwd 账号管理
规则 id
动作
检测效果
disable_security_controls
拦截
setenforce 0、ufw disable、iptables -F、停用防火墙/SELinux 等安全控制
kill_monitoring_process
确认
kill/pkill/killall 目标是 CC-Monitor 自己的探针/hook 进程
process_kill
记录
通用 kill/pkill/killall(非监测进程,兜底记录避免警报疲劳)
claude_config_tamper
确认
改 .claude/settings.json/.claude/hooks//CLAUDE.md/.mcp.json(比杀进程更隐蔽的绕过手法)
规则 id
动作
检测效果
sensitive_file_write
拦截
Write/Edit 直接写 .ssh/、.aws/credentials、.env、私钥文件
sensitive_file_read / sensitive_file_read_bash
记录
Read 或 cat/less/head/strings/xxd 等命令读取同一批敏感文件
browser_credential_read / _bash
确认
读取浏览器 Cookies/Login Data/Web Data(Chrome/Chromium/Brave 等)
credential_grep_scan
确认
grep -r/rg/ag 递归搜索 password/secret 等关键词
cloud_vpn_config_write / _read
确认/记录
OpenVPN/WireGuard/阿里云/腾讯云/kubeconfig 配置读写
proc_env_read
确认
读 /proc/<pid>/environ 或 /cmdline 拿其它进程的环境变量/命令行
env_dump
记录
env/printenv/export -p 打印全部环境变量(已修复对 env VAR=val cmd 场景的误判)
secret_pattern_in_write
确认
写入内容里出现私钥文件头、AWS/GitHub/Anthropic/OpenAI/Slack/Google/npm/Stripe 等平台固定前缀密钥格式
pii_pattern_in_write
记录
写入内容里出现身份证号/手机号/邮箱等 PII 模式
history_read / history_file_read
记录
读 shell/数据库客户端的历史命令文件(可能留有明文凭据)
规则 id
动作
检测效果
webshell_pattern_in_write
拦截
写入内容出现动态执行 $_POST/$_GET/$_REQUEST/$_COOKIE 参数的 PHP webshell 特征
db_arbitrary_file_write / _content
确认
INTO OUTFILE/DUMPFILE、MySQL general_log_file 任意文件写(命令和写入内容两个入口都覆盖)
docker_privileged_or_host_mount
确认
docker run --privileged、挂载 /、挂载 Docker socket(容器逃逸)