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
跑¶
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 < critical。critical = 立即拒绝,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 真实代码就是这样。
进阶练习¶
- 加 AST-aware 检测:用 mini-bash-parser/ 先解析 shell,再走 AST 检测(更准)
- 加 false positive 报告:每个 pattern 带 FP 率(基于真实 CC 用户数据)
- 加上下文感知:
rm -rf build/在 CI 里 OK,在生产 server 上 deny - 加 pattern 建议:检测到
rm -rf时建议trash-put - 加 audit log:每次扫描结果写到
~/.security.log - 加动态加载 pattern:从
~/.bash-security.jsonl读用户自定义 pattern
相关阅读¶
- topics/deep-dive-bash-security.md —— 2592 行完整分析
- topics/deep-dive-bash-permissions.md —— 决策引擎
- topics/bash-security-model.md —— 安全模型
- docs/SECURITY_MODEL.md —— 官方安全文档
- mini-permission-system/ —— 决策引擎 demo