Parapet-Tech/parapet

GitHub: Parapet-Tech/parapet

Parapet 是一个部署在应用与 LLM 之间的本地代理防火墙,通过分层检查机制防御 prompt 注入攻击并管控工具调用风险。

Stars: 2 | Forks: 1

# Parapet Parapet 是一个用于防御 prompt 注入的本地 LLM 代理防火墙。它位于您的应用程序和模型提供商之间,对请求和响应应用分层检查,可以作为透明本地代理或由 SDK 管理的 sidecar 运行。 **[parapet.tech](https://parapet.tech)** | **[GitHub](https://github.com/Parapet-Tech/parapet)** ## 它是什么 Parapet 的核心理念很简单:在模型调用前放置一个可检查的安全层,而不是将安全逻辑埋没在应用程序代码中。 目前该项目包含: - 一个 Rust 引擎 - 一个 Python SDK - 一个 TypeScript SDK - 一个用于分类器语料库的数据整理包 - 一个用于可重复训练和评估的实验运行器 如果您只需要了解高级模型,请求路径如下: ``` L0 normalize -> L1 deterministic pattern gate -> L2 lightweight lexical classifier -> L3 orthogonal sensors / router -> L4 multi-turn risk scoring -> upstream model -> L5 outbound tool constraints -> L6 output redaction ``` 实现名称仍在过渡中。有关规范的目标分类法和当前的实现映射,请参阅 [strategy/layers.md](strategy/layers.md)。 ## 快速开始 ### 1. 安装 ``` # Python SDK pip install parapet # TypeScript SDK npm install @parapet-tech/parapet # 或者直接构建 Rust engine cd parapet && cargo build --release ``` ### 2. 编写策略 ``` parapet: v1 ``` 这将启用默认的保护栈。您可以通过添加配置来自定义行为,而不是通过它来开启核心层。 包含工具策略和自定义模式的示例: ``` parapet: v1 tools: _default: allowed: false read_file: allowed: true constraints: path: type: string starts_with: "${PROJECT_ROOT}" not_contains: ["../", "..\\"] canary_tokens: - "{{CANARY_a8f3e9b1}}" sensitive_patterns: - "CEREBRAS_API_KEY" ``` ### 3. 运行 Python SDK: ``` import parapet parapet.init("parapet.yaml") with parapet.session(user_id="u_1", role="admin"): response = client.chat.completions.create(...) ``` 仅代理模式: ``` parapet-engine --config parapet.yaml --port 9800 ``` 然后将兼容 OpenAI 的客户端指向 `http://127.0.0.1:9800`。 ### 4. 验证行为 Prompt 注入尝试应该被拦截。普通流量应该顺利通过。 ## 它能捕获什么 | 威胁 | 层 | 动作 | |--------|-------|--------| | 编码技巧(Unicode、零宽字符、HTML 实体) | L0 标准化 | 扫描前剥离 | | Prompt 注入模式(DAN、越狱、提取) | L1 模式门控 | 拦截 (403) | | Prompt 注入(广泛的词法信号) | L2 词法分类器 | 拦截 (403) | | 混淆、结构、熵、大小异常 | L3 正交传感器 | 根据策略拦截或路由 | | 多轮攻击(植入、角色混淆、升级) | L4 多轮 | 拦截 | | 未经授权的工具调用 | L5 出站约束 | 拦截 | | 危险的工具参数(路径遍历、shell 注入) | L5 出站约束 | 拦截 | | LLM 输出中的 API 密钥 / 机密 | L6 脱敏 | 替换为 `[REDACTED]` | | 系统提示词泄露 | L6 金丝雀 | 通过金丝雀 token 检测 | ## 部署模式 ### SDK sidecar SDK 会为您启动并与本地引擎进程通信。 优点: - 最简单的集成 - 无需应用级代理配置 权衡: - 如果 sidecar 不可用,您的 fail-open 或 fail-closed 行为将至关重要 ### 本地代理 直接运行 `parapet-engine` 并让客户端流量通过它。 优点: - 最清晰的安全边界 - 运维上最容易推理的模式 如果您需要强制执行,请首选代理路径,并结合网络规则强制模型流量通过 Parapet。 ## 故障行为 Parapet 支持 fail-open 和 fail-closed 行为,具体取决于故障发生的位置以及您如何配置引擎。 实际要点: - 在 sidecar 模式下,如果引擎不可用,如果您有意允许 fail-open 行为,则可以绕过扫描 - 超时和策略行为应被视为部署决策,而不是可忽略的默认值 如果您正在认真评估 Parapet,在假设流量在发生故障时总是被拦截之前,请先阅读引擎和 SDK 的行为。 ## 仓库地图 该仓库包含几个不同的部分: - [parapet/](parapet) - Rust 引擎和评估二进制文件 - [parapet-py/](parapet-py) - Python SDK - [parapet-ts/](parapet-ts) - TypeScript SDK - [parapet-data/](parapet-data) - 语料库暂存和整理 - [parapet-runner/](parapet-runner) - 实验编排 - [strategy/](strategy) - 分层文档和研发方向 ## 数据与实验 使用这些入口点: - [parapet-data/README.md](parapet-data/README.md) - 源数据如何暂存并整理为训练集、验证集和留存集 - [parapet-runner/README.md](parapet-runner/README.md) - 训练和评估运行如何从整理好的清单中进行编排 - [schema/README.md](schema/README.md) - schema 布局、暂存工件和数据集契约说明 简而言之: - `parapet-data` 构建可重复的数据集 - `parapet-runner` 负责训练、校准、评估并记录实验凭证 ## 集成 LiteLLM 链式调用在 [use/litellm.md](use/litellm.md) 中单独记录。 ## 研究笔记 Parapet 包含在多轮攻击检测、词法分类器和确定性正交传感器方面的持续工作。 当前论文: - [publications/mirror/paper.pdf](publications/mirror/paper.pdf) 更广泛的研究和分层笔记位于 [strategy/](strategy) 下。 有关当前的检测方向,包括关闭内联 semantic-transformer 热路径槽位,请参阅 [strategy/current_direction.md](strategy/current_direction.md)。 ## 从源码构建 ``` # Rust engine cd parapet && cargo build --release && cargo test # 带有可选的 legacy L2a 支持 cd parapet && cargo build --features l2a --release # Python SDK cd parapet-py && pip install -e ".[dev]" && pytest tests/ -v # TypeScript SDK cd parapet-ts && npm install && npm test && npm run build ``` ## 许可证 Apache 2.0
标签:AI安全, Chat Copilot, DLL 劫持, Python, Rust, TypeScript, 代理防火墙, 可视化界面, 大语言模型, 安全插件, 无后门, 网络流量审计, 逆向工具