Noctavus/SkillTrap

GitHub: Noctavus/SkillTrap

SkillTrap 是一款基于 Linux 的 AI-agent 技能安全沙箱工具,通过 gVisor 隔离的动态引爆与多维度静态分析,检测不受信任技能的恶意行为并生成证据关联报告。

Stars: 1 | Forks: 0

# SkillTrap ### 在不受信任的 AI-agent 技能进入您的环境之前将其引爆。 这是一个实验性的、基于 Linux 的安全工具,它结合了非执行检查、静态和 指令分析、受控的运行时观察以及证据关联的策略报告。 [![平台: Linux](https://img.shields.io/badge/platform-Linux-FCC624?logo=linux&logoColor=black)](#平台和安全要求) [![Python: 3.12+](https://img.shields.io/badge/python-3.12%2B-3776AB?logo=python&logoColor=white)](pyproject.toml) [![状态: 实验性](https://img.shields.io/badge/status-experimental-F59E0B)](#安全边界) [![许可证: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-3B82F6)](LICENSE) [快速开始](#quick-start) · [工作原理](#how-it-works) · [安全审计](docs/AUDIT.md) · [专用主机指南](docs/dedicated-host.md)
SkillTrap 报告其观察到的内容;它**不会**证明某个技能是安全的。未发现结果仅 意味着在执行的覆盖范围内未观察到策略违规行为。 ## 为什么使用 SkillTrap? AI-agent 技能可以混合自然语言指令、脚本、捆绑资源、下载的代码, 以及仅在运行时才会出现的行为。审查可见的源代码是有用的,但它无法展示 agent 激活该技能后它将会做的所有事情。 SkillTrap 将每个技能视为不受信任的数据,直到准备好专用的 Linux 引爆主机: | 方法 | 读取源码 | 观察运行时行为 | 隔离执行 | 将发现与证据关联 | | --- | :---: | :---: | :---: | :---: | | 人工审查 | 是 | 否 | 否 | 部分 | | 静态扫描器 | 是 | 否 | 否 | 是 | | 直接执行 | 否 | 是 | 否 | 部分 | | **SkillTrap** | **是** | **是** | **是** | **是** | 其基准是检测证据,而非安全保证。有关分母和局限性,请参见 [检测证据](#detection-evidence)。 ## 快速开始 ### 检查技能而不执行它 加载器是只读的。它接受本地目录、`.zip` 压缩包或受支持的 Git URL,并 在不运行 payload 的情况下返回清单: ``` git clone https://github.com/Noctavus/SkillTrap.git cd SkillTrap uv sync --dev uv run python -m skilltrap.cli load tests/fixtures/benign-hello ``` 该命令返回描述技能元数据、脚本和资源文件的结构化 JSON: ``` { "name": "benign-hello", "payloads": [ { "path": "scripts/format.py", "kind": "script" } ], "source_type": "directory" } ``` 此示例是从真实的 CLI 输出中节选的。 ### 在专用的 Linux 主机上引爆 首先使用[专用主机操作手册](docs/dedicated-host.md)准备并认证一次性主机。 然后在执行不受信任的内容之前,验证每个隔离维度: ``` sudo -E uv run python -m skilltrap.cli doctor sudo -E uv run python -m skilltrap.cli assess \ --network=sinkhole --format=sarif --out=report.sarif ``` 当无法验证主机、gVisor 隔离、网络 namespace 或 cgroup 强制执行时, SkillTrap 会采取失败即停止(fails closed)策略。 ## 核心功能 | 功能 | SkillTrap 的作用 | | --- | --- | | **只读摄取** | 解析目录、ZIP 压缩包和受支持的 Git 源,而不执行技能 payload。 | | **静态分析** | 结合静态特征提取、隐蔽指令恢复以及指令层模型判断。 | | **受控引爆** | 通过 gVisor 执行目标,使用一次性文件系统和 cgroup-v2 限制。 | | **无转发网络** | 在从不转发流量的隔离 sinkhole 中捕获 DNS、TCP、HTTP 和本地终止的 TLS。 | | **来源 Canary** | 植入凭据、文件、metadata 服务和 agent 上下文标记,以检测其向可观察 sinkhole 的移动。 | | **证据优先报告** | 将观察结果与策略结果分开,并导出人类可读、JSON 或 SARIF 2.1.0 报告。 | ## 工作原理 SkillTrap architecture: an untrusted skill branches into read-only Stage-0 analysis and a contained gVisor detonation plane. Static and runtime evidence join in the policy engine and produce human, JSON, and SARIF reports. 1. **不执行加载。** 将技能、frontmatter、脚本和资源作为数据进行清单盘点。 2. **分析包。** 提取静态信号,恢复受支持的隐藏指令通道, 并可选地评估指令层。 3. **验证 Linux 主机。** 除非认证、gVisor、网络隔离和 资源强制执行全部通过,否则拒绝引爆。 4. **在隔离环境中引爆。** 在一次性沙箱内运行直接的 payload 目标或可选的 agent 驱动激活。 5. **收集运行时证据。** 记录文件系统活动、子进程、网络 payload、 植入的 canary、具现的代码以及 agent 记录。 6. **评估和报告。** 应用评分和咨询策略,同时保留证据、 覆盖率以及无安全裁决的免责声明。 受信任的控制平面决定运行什么并解释结果。不受信任的内容仅 在 gVisor 边界内执行。Sinkhole 响应在本地合成;捕获的流量 永远不会转发到公共互联网。 ## 检测结果展示 专用主机集成套件包含一个 HTTP 数据泄露夹具。它验证 sinkhole 包含了连接,在请求体中捕获了植入的 canary,并将 观察结果与策略结果相关联: ``` skill: sim-exfil-http observation: planted canary captured in contained egress payload violated: canary-in-egress-payload advisory: credential-read-then-egress network: contained; no public forwarding ``` canary 的发现是基于来源的:SkillTrap 匹配为该次运行植入的唯一值, 而不是仅从命令名称推断恶意性质。 ## 平台和安全要求 | 操作 | 支持的环境 | 要求 | | --- | --- | --- | | 只读加载 | Linux 和 macOS | Python 3.12+ 和 [`uv`](https://docs.astral.sh/uv/) | | 可移植的分析和测试 | Linux 和 macOS | Python 3.12+、`uv`、开发依赖项 | | 动态引爆 | **仅限专用 Linux 主机** | root,gVisor `runsc`,网络 namespaces,cgroup v2 | 推荐的引爆主机: - 一次性 Linux 虚拟机或云实例 - x86_64 架构,Linux 内核 5.15 或更高版本 - 专用网段,无通往敏感系统的路由 - 使用前进行干净快照;在运行不受信任的内容后还原或销毁 以人类可读或机器可读的形式运行主机检查: ``` sudo -E uv run python -m skilltrap.cli doctor sudo -E uv run python -m skilltrap.cli doctor --json ``` ## 用法 | 命令 | 用途 | 执行技能? | | --- | --- | :---: | | `load ` | 解析并盘点目录、ZIP 或 Git 源 | 否 | | `doctor [--json]` | 验证 Linux 隔离就绪状态 | 否 | | `detonate ` | 执行发现的目标并发出观察结果 | 是 | | `assess ` | 引爆,评估策略,并创建报告 | 是 | | `agent-assess ` | 添加受限的 agent 驱动激活 | 是 | ``` # 仅观察式 detonation sudo -E uv run python -m skilltrap.cli detonate --network=sinkhole # Human-readable policy 评估 sudo -E uv run python -m skilltrap.cli assess \ --network=sinkhole --format=human # 通过本地 Ollama model 进行可选的 hybrid 评估 sudo -E uv run python -m skilltrap.cli agent-assess \ --provider=ollama --model=qwen2.5:7b --network=sinkhole --format=human ``` ## 安全边界 - **主机门禁:** 除非专用 主机和所有隔离维度均已验证,否则在获取或提取之前就会拒绝不受信任的源。 - **执行:** gVisor 提供 syscall 边界,每个目标都会获得一个一次性可写 层。 - **资源:** cgroup v2 强制执行内存、进程数和 CPU 限制。 - **网络:** 默认为无网络。Sinkhole 模式没有公共路由,并且可以本地 模拟 AWS、Azure 和 GCP metadata 端点,使用唯一的 canary。 - **报告:** 观察结果和策略结果保持分开。SkillTrap 永远不会发出 明确的 `safe`(安全)裁决。 [`--force-untrusted-on-this-host`](docs/dedicated-host.md#the-interlock-what-skilltrap-enforces) 标志仅绕过主机认证。它不会禁用隔离检查,也不会使不合适的 主机变得安全。 ## 文档 - [安全审计和待处理问题](docs/AUDIT.md) - [专用 Linux 引爆主机](docs/dedicated-host.md) - [沙箱底层支撑](docs/sandbox-substrate.md) - [无转发 sinkhole](docs/sinkhole.md) - [技能引爆](docs/skill-detonation.md) - [观察 schema](docs/observation-schema.md) - [策略引擎](docs/policy-engine.md) - [人类可读、JSON 和 SARIF 报告](docs/reporting.md) - [受支持的技能格式](docs/skill-format.md) ## 贡献 SkillTrap 是实验性的安全研究。欢迎通过 [GitHub Issues](https://github.com/Noctavus/SkillTrap/issues) 提交错误报告、可重现的检测案例、良性 对照、策略改进和文档修复。 在提出新的检测建议时,尽可能同时包含恶意夹具和良性对照。 发现应与可观察的证据相关联,且文档绝不能将 空结果描述为技能安全的证明。 ## 许可证 Apache-2.0。请参见 [LICENSE](LICENSE)。
标签:AI代理, AI风险缓解, DAST, gVisor, Python, 动态检测, 安全沙箱, 恶意软件分析, 无后门, 无线安全, 网络信息收集, 逆向工具