AryanAngiras31/Sunder

GitHub: AryanAngiras31/Sunder

Sunder 是一个基于 LLM Agent 的零信任沙箱测试框架,通过两阶段状态植入与对抗性模糊测试,在企业代码库中自动发现深层逻辑缺陷和崩溃问题。

Stars: 0 | Forks: 0

# Sunder 一个针对企业级代码库的 agentic 零信任沙箱测试框架。 ## 概述 Sunder 分为两个连续的阶段运行,以确保深度的逻辑渗透,而不会被表面的身份验证或状态要求所阻止。它利用 Baseline Mode 进行状态植入,并利用 Adversarial Mode 进行混沌模糊测试和逻辑断言。 ### 核心功能: Sunder 的构建初衷是将全面的测试覆盖率、绝对的主机保护和语言无关性放在首位,同时避免生产环境受到 LLM 幻觉的影响。 * **零信任 Copy-on-Run 架构:** 将主机代码库严格挂载为只读 (`ro`),并使用内存中的 tar 流将文件提取到临时的 container 工作区中。这保证了主机的安全性,同时模拟了物理项目树。 * **关系型 AST 检索(Blast-Radius 上下文):** 放弃了传统的向量搜索,转而采用 Tree-sitter AST 解析和内存中的 SQLite 数据库。这能即时映射出精确的调用图,为 LLM 提供 Target 函数、其 Children(用于准确的 mocking)以及其 Parents(用于输入模拟)。 * **两阶段状态植入:** 克服了表面的身份验证障碍。Baseline Phase 会明确生成 happy-path 测试以及 setup 代码,以捕获所需的状态(例如,有效的 JWT、mock 数据库 ID),然后再将它们注入到 Adversarial Phase 中进行深度的逻辑模糊测试。 * **Evaluator-Optimizer 循环:** 防止 context-window 臃肿和无休止的幻觉循环。专用的 Evaluator 节点会拦截运行失败时产生的海量原始 Docker stack trace,并将其提炼为简洁、可操作的反馈供 Coder 节点使用。 * **沙箱配置:** 强制执行默认的架构隔离 (`network_mode="none"`),需要通过 TUI 明确由人工选择加入才能配置资源限制(RAM、CPU、执行超时)、注入环境变量或允许外部 API 路由。 ## 高层架构 ![Sunder 架构图](https://static.pigsec.cn/wp-content/uploads/repos/cas/9c/9c12c6dea211e041ec8bd9434d360484b43fae362ba184d59149021954de4603.png) ## 执行流程 1. **状态植入:** 用户定义 target 函数。Knowledge Layer 检索上下文,Baseline Agent 编写“Happy Path”测试。成功退出后,Evaluator 会提取 mock ID 和有效的 JWT 并将其保存到 Environment State。 2. **对抗性攻击:** Orchestrator 注入已植入的状态。Adversary Agent 研究 Parent 上下文(使用模式)并将其武器化,利用变异后的输入对 target 进行模糊测试。 3. **隔离执行:** Sandbox 在指定的约束下运行 payload。 4. **评估:** 如果发生硬崩溃(500/OOM)或隐性逻辑缺陷(AssertionError),Evaluator 就会宣布存在漏洞。否则,它将循环回去生成新的攻击向量,直到达到重试限制。 ## 项目结构 ``` sunder/ ├── src/ │ └── sunder/ │ ├── schema.py # Pydantic models for state management │ ├── client/ # TUI and UX components │ │ ├── app.py # Main Textual application │ │ ├── config_panel.py # Sandbox configuration UI │ │ ├── credentials_modal.py │ │ ├── dashboard.py # Telemetry and reporting │ │ ├── hitl_search.py # Target function search │ │ └── model_picker.py # LLM selection modal │ ├── execution/ # Docker sandbox layer │ │ ├── bootstrapper.py # Docker environment setup │ │ └── sandbox.py # Container execution logic │ ├── knowledge/ # AST parsing and retrieval │ │ ├── context_manager.py │ │ ├── database.py # SQLite AST storage │ │ ├── ingestion.py # Tree-sitter parsing │ │ ├── retrieval.py # Context fetching │ │ └── queries/ # Language-specific AST queries │ │ ├── python/ │ │ ├── typescript/ │ │ ├── rust/ │ │ └── ... (20+ language directories) │ └── orchestration/ # LangGraph agent logic │ ├── orchestrator.py # State machine and nodes │ └── prompts.py # LLM prompt templates ├── tests/ # Test suite │ ├── test_e2e_polyglot.py │ ├── test_execution_layer.py │ ├── test_knowledge_layer.py │ └── test_orchestration_layer.py ├── pyproject.toml # Python project configuration ├── README.md ``` ## 安装与设置 Sunder 通过 pipx 作为独立的 Python 应用程序进行分发。 ``` pipx install sunder-cli ``` ## 前置条件 在使用 Sunder 之前,您必须安装 **Docker**,并且 Docker Daemon 必须在后台持续运行。Sunder 的引导程序依赖本地守护进程来动态构建隔离沙箱。 ## 使用与 API 密钥 (BYOK) Sunder 是一个纯粹的本地工具,基于 Bring Your Own Key (BYOK) 架构运行。 1. **启动应用程序:** 在已配置好的企业级仓库根目录中打开终端,输入 `sunder` 以启动 TUI。 2. **配置凭证:** 首次启动时,按 `[p]` 快捷键打开 Model Picker。在此处,您可以将您的 LLM API 密钥输入到凭证模态框中。这些密钥将被安全地保存在您的本地计算机上。 ## 仓库配置 要在您的企业级仓库中使用 Sunder,您必须在项目的根目录下创建一个配置目录。 1. 在目标仓库的根目录下创建一个 `.sunder/` 文件夹。 2. 在 `.sunder/` 文件夹中添加一个 `Dockerfile` 来定义您的测试环境。 ### 关于 Dockerfile 的重要说明 Dockerfile 不得包含任何用于源代码的 `COPY` 语句。Sunder 采用安全的 copy-on-run 架构;它会自动提取您的仓库,使用您的 `.gitignore` 进行过滤,并在运行时将其安全地解压到 container 中。 ### `.sunder/Dockerfile` 示例 ``` FROM python:3.11-alpine RUN pip install pytest # 不要为你的代码包含 COPY 命令。 # 不要定义 ENTRYPOINT 或 CMD。 ``` ## 许可证 该项目基于 [MIT 许可证](./LICENCE.txt) 授权。
标签:AI智能体, AST解析, 代码安全, 安全规则引擎, 沙箱环境, 漏洞枚举, 请求拦截, 逆向工具