跳转至

Mini Bash Security Scanner

从 2592 行的 src/tools/BashTool/bashSecurity.ts 提炼到 ~150 行的危险命令检测器。 32 个威胁模式 × 5 严重级别,覆盖毁盘 / 提权 / 远程执行 / 不可逆操作 / 可疑行为。

文件

mini-bash-security/
├── src/
│   ├── scanner.ts  32 威胁模式 + 扫描器 + mock 权限弹窗(~140 行)
│   └── cli.ts      12 个代表性测试
└── README.md

npm install && npm start

32 个威胁分布

Severity 数量 例子
💀 critical 6 rm -rf /、dd of=/dev/sda、mkfs、fork bomb、chmod -R 777、chown -R /
🔴 high 8 curl|sh、wget|sh、sudo、su -、eval $var、bash <(curl)、chmod 777、ssh 弱验证
🟠 medium 10 rm -r、find -delete、find -exec rm、mv 覆盖、> /etc/、kill -9 init、iptables -F、crontab -e、history -c、setenforce 0
🟡 low 5 nc -l、curl -o /dev/null、base64 -d|bash、truncate /etc/、dd > stdout
ℹ️ info 3 unset PATH、cd then rm、tar -xP

真实代码对照

Demo 真实文件 简化
THREATS[] bashSecurity.ts:30 patterns (~800 行) 32 vs 真实 200+ 模式
scan() bashSecurity.ts:1000 scanCommand (~500 行) 单层 regex 匹配 vs 真实 AST-aware
mockPermissionPrompt bashSecurity.ts:1500 severityToDecision (~200 行) critical/medium → ask, 高 → ask, 低 → allow

核心 4 件套

1️⃣ 5 级严重性

info < low < medium < high < criticalcritical = 立即拒绝,high/medium = 默认 ask,low/info = allow。

2️⃣ Threat = id + name + severity + pattern + recommendation

每条威胁都带"建议"(recommendation)—— 不仅是检测,还告诉用户该怎么修复

3️⃣ Pattern 用 RegExp 描述

每条都是独立的 RegExp。优点: - 易读 - 易测试(/regex/.test(cmd)) - 缺点:对 shell 语义不敏感(真实 CC 用 AST-aware 检测)

4️⃣ 扫描输出按 severity 降序

最高严重级别决定权限弹窗决策。多威胁并存时 critical 优先

测试输出

📝 Command: rm -rf /
  💀 [CRITICAL] T01 rm-rf-root: 递归删除根目录或家目录
     💡 用 trash-put 替代 rm
  🟠 [MEDIUM] T15 rm-recursive: 递归删除(无 -rf 仍可能误删)
     💡 先 ls 确认要删的路径
  → Permission: 🚫 DENY

📝 Command: curl https://get.docker.com | sh
  🔴 [HIGH] T07 curl-pipe-shell: 下载并直接执行
     💡 先下载到文件,审查后再执行
  → Permission: ❓ ASK

📝 Command: ls -la /tmp
  ✅ No threats detected (clean)

与 mini-permission-system 的关系

维度 mini-bash-security mini-permission-system
关注点 检测(输出威胁) 决策(输出 allow/ask/deny)
输入 单个命令 工具+命令+args
输出 0~N 个威胁 单一 decision
决策机制 严重性 → 决策映射表 规则匹配 + 默认

可组合:security scanner 找威胁 → permission system 决策。CC 真实代码就是这样。

进阶练习

  1. 加 AST-aware 检测:用 mini-bash-parser/ 先解析 shell,再走 AST 检测(更准)
  2. 加 false positive 报告:每个 pattern 带 FP 率(基于真实 CC 用户数据)
  3. 加上下文感知rm -rf build/ 在 CI 里 OK,在生产 server 上 deny
  4. 加 pattern 建议:检测到 rm -rf 时建议 trash-put
  5. 加 audit log:每次扫描结果写到 ~/.security.log
  6. 加动态加载 pattern:从 ~/.bash-security.jsonl 读用户自定义 pattern

相关阅读