Noctavus/SkillTrap
GitHub: Noctavus/SkillTrap
SkillTrap 是一款基于 Linux 的 AI-agent 技能安全沙箱工具,通过 gVisor 隔离的动态引爆与多维度静态分析,检测不受信任技能的恶意行为并生成证据关联报告。
Stars: 1 | Forks: 0
# SkillTrap
### 在不受信任的 AI-agent 技能进入您的环境之前将其引爆。
这是一个实验性的、基于 Linux 的安全工具,它结合了非执行检查、静态和
指令分析、受控的运行时观察以及证据关联的策略报告。
[](#平台和安全要求)
[](pyproject.toml)
[](#安全边界)
[](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 报告。 |
## 工作原理
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, 动态检测, 安全沙箱, 恶意软件分析, 无后门, 无线安全, 网络信息收集, 逆向工具