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, 代理防火墙, 可视化界面, 大语言模型, 安全插件, 无后门, 网络流量审计, 逆向工具