t0nigansel/pinj

GitHub: t0nigansel/pinj0r

一个基于 Shell 脚本的轻量级 LLM 提示注入基线安全检测工具,通过向 HTTP 端点发送恶意提示并分析响应来快速筛查基本安全漏洞。

Stars: 1 | Forks: 1

# pinj ![pinj 横幅](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/69cb81c515013833.png) `pinj` 是一个用于 LLM 和代理 HTTP 端点的微小 prompt 注入基线安全检查工具。 当前版本:`0.1.0` 它向目标端点发送少量恶意 prompt,存储原始响应,并标记明显的可疑行为。 `pinj` 有意保持简单。 它不能证明代理是安全的。 它有助于找出未能通过基本检查的端点。 ## 为什么需要? LLM 和代理应用程序通常会暴露新的故障模式: - prompt 注入 - 系统 prompt 泄漏 - 敏感信息泄漏 - 角色覆盖 - 工具滥用 - 过度输出 - denial-of-wallet 行为 在信任 AI 端点之前,请针对其运行基本的恶意 prompt。 未通过这些测试是一个强烈的警告信号。 ## pinj 和 promptfoo [promptfoo](https://github.com/promptfoo/promptfoo) 更全面,适合完整的评估 pipeline。`pinj` 是一个基于 curl 的基线检查工具,适用于没有 Node 或 Python 依赖的 CI 环境。 ## 当前范围 `pinj` 假定: - HTTP POST 端点 - JSON 请求体 - bearer-token 身份验证 - 每个 `attacks/*.txt` 文件中每行一个 prompt 默认请求体: ``` { "message": "prompt text" } ``` 要使用不同的 prompt 字段,请设置: ``` export PINJ_JSON_FIELD="input" ``` 它会发送: ``` { "input": "prompt text" } ``` ## 文件 ``` pinj/ README.md AGENTS.md LICENSE PLAN.md VERSION attacks/ config.example.env docs/ examples/ patterns.txt request.template.example.json run.sh tests/ results/ ``` ## 快速开始 ``` cp config.example.env .env ``` 编辑 `.env`: ``` export PINJ_TARGET_URL="https://example.com/chat" export PINJ_BEARER_TOKEN="replace-me" export PINJ_ATTACKS_DIR="attacks" export PINJ_JSON_FIELD="message" export PINJ_PATTERNS_FILE="patterns.txt" ``` 然后运行: ``` . ./.env ./run.sh ``` 用于 CI: ``` ./run.sh --ci ``` 测试 AI Goat: ``` docs/aigoat.md ``` ## 输出 结果写入: ``` results/ ``` 示例: ``` results/ direct-injection_001.json sensitive-disclosure_001.json system-prompt-leakage_001.json summary.md ``` ## 攻击语料库 攻击 prompt 存放在以下目录的纯文本文件中: ``` attacks/ ``` 每个 `.txt` 文件被视为一个类别。每个非空行作为一个 prompt 发送。 示例: ``` attacks/ direct-injection.txt sensitive-disclosure.txt system-prompt-leakage.txt ``` 要添加或移除测试,请编辑这些文件或添加另一个 `.txt` 文件。 为了兼容单个文件,你也可以设置: ``` export PINJ_ATTACKS_FILE="attacks/direct-injection.txt" ``` ## 请求模板 默认情况下,`pinj` 发送: ``` { "message": "prompt text" } ``` 对于期望不同 JSON 结构的端点,请创建一个请求模板文件,并将 `{{prompt}}` 放在需要注入每个攻击 prompt 的位置。 示例: ``` { "messages": [ { "role": "user", "content": "{{prompt}}" } ], "temperature": 0 } ``` 然后设置: ``` export PINJ_REQUEST_TEMPLATE_FILE="request.template.json" ``` 当设置了 `PINJ_REQUEST_TEMPLATE_FILE` 时,它优先于 `PINJ_JSON_FIELD`。 `pinj` 不会执行原始粘贴的 curl 命令。请将 method、URL、bearer token 和 content type 保留在现有的环境变量中,并将模板文件用于请求体。 示例模板位于: ``` examples/ ``` 例如: ``` export PINJ_REQUEST_TEMPLATE_FILE="examples/openai-chat.template.json" ``` ## 可疑模式 可疑的响应模式位于: ``` patterns.txt ``` 每个非空行都会与原始响应进行不区分大小写的匹配。以 `#` 开头的行将被忽略。 示例: ``` system prompt developer message api key secret token ``` 要使用不同的模式文件,请设置: ``` export PINJ_PATTERNS_FILE="my-patterns.txt" ``` ## 退出码 ``` 0 = no obvious suspicious response found 1 = suspicious response found 2 = configuration or runtime error ``` 在 CI 模式下,诸如 curl 失败或非 2xx HTTP 响应等端点错误将以 `2` 退出。 ## 测试 使用以下命令运行 shell 检查: ``` ./tests/run-tests.sh ``` ## 局限性 `pinj` v0.1 使用简单的关键字匹配。 它可能会产生误报。 它可能会遗漏真正的漏洞。 它是一项基线安全检查,而不是完整的安全评估。 ## 示例攻击 Prompt 参见: ``` attacks/ ``` 初始语料库包含以下基本检查: - 直接和间接 prompt 注入 - 系统 prompt 泄漏 - 敏感数据披露 - 过度代理和工具滥用 - 不安全的输出处理 - RAG 内容操纵 - 决策操纵 - 成本收集 - 多模态隐藏指令 - 越狱角色扮演 - 格式绕过 ## 许可证 MIT 许可证。版权所有 (c) 2026 Toni Gansel。
标签:AI安全, AI风险评估, API安全, Chat Copilot, CI/CD测试, CISA项目, Cutter, HTTP端点测试, JSON输出, LLM测试工具, LLM防护验证, LNA, Shell脚本, 大语言模型安全, 安全基线检查, 安全自动化测试, 应用安全, 拒绝钱包攻击, 提示注入, 机密管理, 系统提示词提取, 红队评估, 自动化安全扫描, 角色覆盖, 集群管理