sunir/bashguard

GitHub: sunir/bashguard

基于 tree-sitter AST 解析的 Bash 命令安全拦截器,为 LLM Agent 沙箱提供结构化裁决和可插拔规则引擎。

Stars: 0 | Forks: 0

# bashguard 用于 LLM agent 沙箱的 Bash 命令安全拦截器。通过 tree-sitter 将命令解析为 AST,运行可插拔的安全规则,并返回结构化裁决 (ALLOW/BLOCK/CONFIRM/REDIRECT)。 ## 架构 三阶段流水线 —— 检测与响应正交: ``` bash string → parse() → audit() → decide() → Verdict [CST] [Findings] [ALLOW/BLOCK/CONFIRM/REDIRECT] ``` ## 安装 ``` uv pip install -e ".[dev]" ``` ## 用法 ### Hook 模式 (Claude Code 集成) ``` echo "$CLAUDE_HOOK_INPUT" | bashguard hook ``` ### Analyze 模式 (调试) ``` bashguard analyze --command 'git push --force origin main' ``` ### 审计日志 ``` bashguard log --verdict block --rule network.unknown_host -n 20 --json bashguard stats --days 7 ``` ## 规则 (342 个测试,70 个语料库条目) | 规则 | 检测内容 | ActionType | |------|---------|------------| | `parse.error_node` | 格式错误/混淆命令 | OBFUSCATED | | `credentials.privileged_path` | ~/.ssh, ~/.aws, /etc, .env | CREDENTIAL_ACCESS | | `network.unknown_host` | curl/wget/nc 到未知主机 | NETWORK_OUTBOUND | | `network.dev_tcp` | /dev/tcp bash 技巧 | NETWORK_OUTBOUND | | `destructive.irreversible` | rm -rf, dd, mkfs, shred | FILESYSTEM_DELETE | | `package_install.global` | brew/apt/npm -g | PACKAGE_INSTALL | | `git.destructive` | force push, reset --hard, branch -D | GIT_DESTRUCTIVE | | `paths.protected_write` | 重定向写入到 /etc /usr /sys | SYSTEM_CONFIG | | `content.secret_in_args` | 参数中的 API keys/PEM/tokens | CREDENTIAL_ACCESS | | `content.exfiltration_pattern` | 敏感文件通过管道传输到网络 | NETWORK_OUTBOUND | | `content.outside_boundary` | 访问工作区 (worktree) 外的文件 | FILESYSTEM_READ | | `self_protection.*` | 试图修改 bashguard 本身 | SYSTEM_CONFIG | | `comms.*` | email/SMS/webhook 发送 | NETWORK_OUTBOUND | | 13 条 `evasion.*` 规则 | eval, shell-in-shell, decode pipelines, IFS 等 | OBFUSCATED/ENV_MUTATION | ### Strict 模式 (可选) 仅允许白名单:阻止任何不在安全词汇表中的命令。默认不注册。 ``` from bashguard.strict_mode import StrictModeRule ``` ## 配置 ### `.bashguard.yaml` (项目本地,棘轮机制) 只能收紧策略 (allow→block),绝不放宽 (block→allow): ``` policy: severity: medium: block rules: - rule_id: git.destructive verdict: block context: allowed_hosts: - internal.corp.com ``` ### LLM 后备 (可选) 针对 CONFIRM 裁决的可选 LLM 第二意见: ``` export BASHGUARD_LLM_FALLBACK=1 export BASHGUARD_LLM_KEY=sk-... ``` ## Python API ``` from bashguard.auditor import audit from bashguard.context import make_context from bashguard.policy import PolicyConfig, decide ctx = make_context() findings = audit("rm -rf /", ctx) verdict = decide(findings, ctx, PolicyConfig.default()) ``` ## 测试 ``` .venv/bin/pytest tests/ -q ```
标签:Agent 安全, AST 抽象语法树, Bash 命令拦截, DevSecOps, DNS 反向解析, Force Push 防护, LLM 安全, Obfuscation Detection, StruQ, TCP/UDP协议, Tree-sitter, UV Python, 上游代理, 代码安全分析, 凭证泄露防护, 命令行审计, 子域名变形, 恶意命令识别, 提示词注入防御, 文件系统保护, 无线安全, 服务器监控, 沙箱隔离, 网络信息收集, 网络安全审计, 网络安全拦截, 逆向工具, 风险检测