TM-threemavithana/agentiam

GitHub: TM-threemavithana/agentiam

AgentIAM 是一个用 Go 编写的 PostgreSQL/MySQL 语义防火墙代理,通过 AST 级解析拦截并阻止 LLM 代理生成的破坏性或超载查询。

Stars: 1 | Forks: 0

# AgentIAM **一个在 AST 层面阻止 AI 代理进行 SQL 注入的 PostgreSQL 和 MySQL 网络代理。** 将大型语言模型(LLM)直接连接到您的数据库以实现“Text-to-SQL”功能是非常危险的。AgentIAM 位于您的 LangChain/LlamaIndex 代理和数据库之间,拦截 PostgreSQL 和 MySQL 的网络协议流量,以便在破坏性查询执行之前对其进行解析和阻止。 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/39/39faa54be350a1dab8afd3b2fb8c1c83e4d9cff84abfef2374d19a18053687c4.svg)](https://github.com/tm-threemavithana/agentiam/actions/workflows/ci.yml) [![Go Report Card](https://goreportcard.com/badge/github.com/tm-threemavithana/agentiam)](https://goreportcard.com/report/github.com/tm-threemavithana/agentiam) [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
AgentIAM Demo
## 🛑 存在的问题 如果您给 AI 代理提供一个数据库连接,它最终*一定会*尝试删除数据或使您的数据库超载。 - **Prompt Injection:** 攻击者可以轻易诱骗 LLM 生成 `DELETE FROM users;` 而不是无害的查询。 - **Denial of Service (DoS):** LLM 可能会意外运行 `SELECT * FROM massive_table;`,试图获取数百万行数据并导致您的数据库服务器崩溃。 - **Regex Evasion:** 使用正则表达式的标准 SQL 防火墙可以通过嵌套的 Common Table Expressions (CTE)、子查询或晦涩的格式轻易绕过。 依靠“prompt engineering”或 LLM 安全防护来防止这种情况是行不通的。给 AI 一个只读的数据库用户可以防止删除,但这无法阻止大规模、未分页的查询导致服务器崩溃。 ## 🚀 工作原理 **AgentIAM** 是一个用 Go 编写的专用代理,充当 PostgreSQL 和 MySQL 的严格语义防火墙。 1. **Wire Protocol Interception:** AI 代理连接到 AgentIAM。代理在 Postgres Extended Query 或 MySQL 协议层面拦截传入的数据包。 2. **AST Parsing:** 使用 `pg_query_go`(针对 PostgreSQL)或 `pingcap/tidb` 解析器(针对 MySQL)将 SQL 解析为抽象语法树(AST)。 3. **Deterministic Enforcement:** AgentIAM 使用递归 Visitor 模式遍历 AST。如果检测到被阻止的节点(如 `DeleteStmt`)——即使它深藏在 CTE 或子查询中——代理也会立即丢弃该查询,并向 AI 返回协议错误。 4. **Policy Fetching via HTTP Polling:** 代理根据通过 HTTP 轮询机制从远程控制平面获取的策略来执行规则。这取代了基于 Redis 的传统架构,以减少外部基础设施依赖(例如在代理旁边部署 Redis 集群),尽管这会引入轮询开销。 5. **AST Rewriting:** 如果允许的 `SelectStmt` 缺少 limit,AgentIAM 会重写 AST 以强制执行硬性 `LIMIT 100`,将其重新解析回 SQL,并将其转发到真实数据库。 ## 🏃 快速开始(5 分钟) 您可以使用 Docker Compose 在本地尝试完整的 Go-To-Market 演示。它会启动一个测试数据库、AgentIAM,以及一个 Python LangChain 脚本,该脚本会尝试安全、恶意和 prompt injected 的 SQL 生成。 ``` cd demo/ docker-compose up --build ``` *注意:该演示默认在 `AGENTIAM_DEMO_MOCK=true` 模式下运行,因此您不需要 OpenAI API 密钥即可看到它的工作效果。要使用真实的 LLM,请在运行之前执行 `export OPENAI_API_KEY="sk-..."`。* ## ⚙️ 配置说明 AgentIAM 的策略会通过 HTTP 轮询定期从远程控制平面获取。该代理需要一个 API endpoint 和一个长期的访问 token 来引导配置。 ``` version: "1" control_plane: endpoint: "https://api.agentiam.io/v1/policies" token: "secret-token-here" poll_interval: "30s" ``` 当您的 AI 连接时,它使用 `langchain-bot` 作为数据库用户。代理拦截握手,根据缓存策略验证密码,并建立会话。 ## 🏗️ 架构与限制 AgentIAM 针对特定类别的攻击提供了强大的缓解措施,但了解其边界也很重要。 ### ⚠️ 拓扑警告:PgBouncer AgentIAM 不池化上游连接;它在传入的客户端连接和上游数据库连接之间维护 1:1 的映射。为了防止在高并发环境中使您的数据库超载,您应该在 AgentIAM 的*下游*部署 **PgBouncer**: `AI Agent -> AgentIAM Proxy -> PgBouncer -> Postgres` ### 安全边界 - **Authentication:** 该代理支持本地连接的 `AuthenticationCleartextPassword`,但现在非常强调使用 **mutual TLS (mTLS)** 进行安全身份验证。有效的 mTLS 证书可以配置为绕过标准密码检查。 - **Timing Oracles:** 该代理在身份验证或策略评估期间不会混淆延迟。同一子网上的攻击者理论上可以通过测量 `bcrypt` 比较时间来推断有效的代理密钥,并且可以检测策略查找中 SQLite 命中与未命中的延迟。 - **Parameterized LIMITs:** 虽然代理会自动为无界的 `SELECT` 语句注入 `LIMIT` 子句,但它故意拒绝参数化限制(例如 `LIMIT $1`)。默认使用参数化限制的应用程序或 ORM 必须禁用它们以符合代理要求。 - **Semantic Logic:** 该代理可防止查询未授权的表,但目前不强制执行行级安全(RLS)或注入租户隔离限制。 - **Policy Configuration:** AgentIAM 会严格执行您配置的内容。配置错误的策略仍然是配置错误的策略。如果您将敏感表或函数列入白名单,代理将允许访问它们。 - **Concurrency & DDoS Protection:** 该代理利用严格的 `AGENTIAM_MAX_CONNECTIONS` 并发信号量,并保证在极端负载下处理连接断开时不会发生 goroutine 泄漏。 ## 🤝 贡献 有关设置开发环境、运行 `testcontainers-go` 集成测试以及提交 Pull Requests 的说明,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
标签:CISA项目, EVTX分析, Go语言, PostgreSQL, SQL注入防护, 数据库代理, 日志审计, 版权保护, 程序破解, 请求拦截