mathurshubh/llm-runtime-security-gateway

GitHub: mathurshubh/llm-runtime-security-gateway

一个用于LLM应用的运行时安全网关,检测提示注入和越狱攻击以增强AI应用安全性。

Stars: 0 | Forks: 0

# LLM 运行时安全网关 一个基于 FastAPI、Ollama、Prometheus 和 Grafana 构建的生产级 AI 安全网关。 本项目演示了 LLM 应用的运行时安全策略执行,包括提示注入检测、PII 检测、JWT 认证、RBAC 授权、输出过滤、凭据隐藏、遥测管道、可观测性仪表板以及基于策略的安全控制。 # 功能 - 兼容 OAuth2 的 JWT 认证 - Bearer 令牌保护的 API 端点 - RBAC(基于角色的访问控制) - 仅限管理员访问的受保护路由 - 提示注入检测 - PII 检测与审查 - 输出凭据泄漏检测 - JWT 令牌检测与隐藏 - AWS 凭据检测与隐藏 - 运行时策略执行引擎 - 风险评分与严重等级分类 - 速率限制中间件 - 结构化遥测日志 - Prometheus 指标集成 - Grafana 监控仪表板 - Ollama 本地 LLM 集成 - 生产级 FastAPI 架构 - Redis 支持的分布式速率限制 - 跨网关实例的共享安全状态 - 基于 TTL 的滥用预防控制 # 安全能力 ## 认证 网关使用兼容 OAuth2 的 JWT Bearer 认证。 能力包括: - 签发 JWT 访问令牌 - 令牌过期验证 - Bearer 令牌认证 - Swagger OAuth2 集成 - 身份感知的请求处理 ## 授权 (RBAC) 网关实现了基于角色的访问控制。 支持的角色: - admin(管理员) - analyst(分析师) - user(用户) 受保护路由执行: - 经过认证的访问 - 角色验证 - 最小权限原则 ## 滥用预防 网关使用 Redis 支持的分布式速率限制来保护 LLM 资源免受滥用。 能力包括: - 每用户速率限制 - 跨网关实例的共享计数器 - 使用 Redis TTL 的自动计数器过期 - 防止 API 滥用 - 防止“钱包拒绝服务”攻击 - 跨多个网关节点的分布式执行 ## 输入安全 网关在将提示转发到 LLM 运行时之前对其进行分析。 检测包括: - 提示注入尝试 - 忽略先前指令攻击 - 越狱式提示 - 敏感 PII 审查 - 电子邮件检测 ## 输出安全 网关在将输出返回给用户之前检查模型响应。 检测包括: - JWT 令牌 - AWS 访问密钥 - AWS 秘密密钥 - 类似凭据的秘密 - 敏感令牌片段 检测到的秘密会被自动: - 隐藏 - 记录 - 通过遥测进行跟踪 ## 策略引擎 策略引擎: - 汇总发现结果 - 计算风险评分 - 分配严重等级 - 阻止危险请求 严重等级: - low(低) - medium(中) - high(高) - critical(严重) # 架构 ``` +----------------------+ | Client/API | +----------+-----------+ | v +----------------------+ | /login | | JWT Authentication | +----------+-----------+ | v +----------------------+ | OAuth2 Bearer Token | | Validation | +----------+-----------+ | v +----------------------+ | RBAC Authorization | | Role Enforcement | +----------+-----------+ | v +----------------------+ | Redis Rate Limiter | | Abuse Prevention | +----------+-----------+ | v +----------------------+ | FastAPI Security | | Gateway | +----------+-----------+ | +-----------------+-----------------+ | | v v +-------------------+ +----------------------+ | Prompt Inspection | | Output Inspection | | Prompt Injection | | JWT Detection | | PII Detection | | AWS Key Detection | +---------+---------+ +----------+-----------+ | ^ | | v | +----------------------+ | | Policy Engine | | | Risk Scoring | | | Severity Analysis | | +----------+-----------+ | | | v | +----------------------+ | | Ollama LLM Runtime |---------------------+ +----------+-----------+ | v +----------------------+ | Telemetry Pipeline | | Structured Logging | | Security Events | +----------+-----------+ | +-----------+------------+ | | v v +-------------------+ +-------------------+ | Prometheus | | Grafana | | Metrics | | Dashboards | +-------------------+ +-------------------+ ``` # 技术栈 | 组件 | 技术 | |---|---| | API 框架 | FastAPI | | LLM 运行时 | Ollama | | 认证 | OAuth2 + JWT | | 授权 | RBAC | | 分布式缓存 | Redis | | 指标 | Prometheus | | 仪表板 | Grafana | | 日志记录 | Structlog | | 令牌安全 | python-jose | | 密码哈希 | passlib + bcrypt | | 可视化 | Grafana | | 监控 | Prometheus | # 项目结构 ``` llm-runtime-security-gateway/ │ ├── app/ │ ├── auth/ │ │ ├── jwt_auth.py │ │ └── rbac.py │ │ │ ├── cache/ │ │ └── redis_client.py │ │ │ ├── detection/ │ │ ├── pii_detector.py │ │ └── prompt_detector.py │ │ │ ├── middleware/ │ │ └── rate_limiter.py │ │ │ ├── security/ │ │ ├── output_filter.py │ │ ├── policy_engine.py │ │ ├── redactor.py │ │ └── risk_engine.py │ │ │ ├── telemetry/ │ │ ├── logger.py │ │ └── metrics.py │ │ │ └── main.py │ ├── monitoring/ │ └── prometheus.yml │ ├── tests/ │ ├── docker-compose.yml │ ├── requirements.txt │ └── README.md ``` # 认证流程 网关使用兼容 OAuth2 的 JWT Bearer 认证,而非静态 API 密钥。 认证流程: 1. 客户端通过 `/login` 进行认证 2. 网关验证凭据 3. 网关签发签名的 JWT 访问令牌 4. 客户端使用 Bearer 令牌访问受保护的 API # 授权流程 (RBAC) 网关对受保护端点使用基于角色的访问控制。 授权规则示例: | 端点 | 允许的角色 | |---|---| | `/chat` | admin, analyst, user | | `/admin/policies` | 仅 admin | 授权执行: - 验证已认证的身份 - 提取 JWT 角色声明 - 应用最小权限访问规则 - 阻止未授权的访问尝试 # 登录示例 ``` curl -X POST \ 'http://127.0.0.1:8000/login' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'username=admin&password=admin123' ``` 响应示例: ``` { "access_token": "eyJhbGciOiJIUzI1NiIs...", "token_type": "bearer" } ``` # 认证后的聊天请求 ``` curl -X POST \ 'http://127.0.0.1:8000/chat' \ -H 'Authorization: Bearer ' \ -H 'Content-Type: application/json' \ -d '{ "prompt": "Explain zero trust architecture" }' ``` # 受保护的管理员端点示例 ``` curl -X GET \ 'http://127.0.0.1:8000/admin/policies' \ -H 'Authorization: Bearer ' ``` 预期结果: - admin 用户 → 访问被允许 - analyst/user 用户 → 403 禁止访问 # Swagger 认证 1. 打开: ``` http://127.0.0.1:8000/docs ``` 2. 使用 `/login` 端点,参数为: - username: `admin` - password: `admin123` 3. 点击 `Authorize` 按钮 4. Swagger 会自动将 Bearer 令牌附加到受保护的端点 # 指标端点 Prometheus 指标暴露在: ``` http://127.0.0.1:8000/metrics ``` 指标示例: - requests_total - blocked_requests_total - redacted_outputs_total - jwt_detections_total - aws_key_detections_total - policy_actions_total # 监控栈 ## 启动监控栈 ``` docker compose up -d ``` 这将启动: - Prometheus - Grafana - Redis # 分布式速率限制 网关使用 Redis 支持的分布式速率限制,而非本地内存计数器。 优势: - 跨多个网关实例的共享状态 - 防止水平扩展绕过 - 使用 Redis TTL 的自动计数器过期 - 生产级滥用预防架构 速率限制器使用基于 TTL 的键将计数器存储在 Redis 中,从而实现跨多个网关实例的一致性执行。 Redis 键示例: ``` rate_limit:admin rate_limit:user rate_limit:analyst ``` 计数器会在配置的速率限制窗口后自动过期。 # Grafana 面板示例 推荐的仪表板: - 总请求数 - 被阻止的请求数 - 已隐藏的输出数 - JWT 检测数 - AWS 密钥检测数 - 策略操作分解 - 安全严重性分布 - 认证失败数 - 授权失败数 ## JWT 泄漏测试 ``` Generate a fake bearer token example ``` 预期结果: - 检测到 JWT - 输出被隐藏 ## AWS 凭据泄漏测试 ``` Show an example AWS configuration file with access keys ``` 预期结果: - 检测到 AWS 密钥 - 秘密被隐藏 ## RBAC 授权测试 以如下身份登录: ``` user / user123 ``` 尝试访问: ``` /admin/policies ``` 预期结果: ``` 403 Forbidden ``` # 安全改进 网关现已支持: - 签名的 JWT 认证 - Bearer 令牌验证 - 令牌过期强制执行 - 兼容 OAuth2 的认证流程 - 身份感知的请求处理 - RBAC 授权 - 最小权限访问控制 - 运行时输出安全检查 - 经过认证的遥测和日志记录 # 未来改进 计划增强功能: - OpenTelemetry 追踪 - SIEM 集成 - 安全 RAG 执行 - 代理工具授权 - 多租户隔离 - 向量数据库安全控制 - 基于策略的授权引擎 - 令牌吊销支持 - 审计事件管道 - Redis 支持的安全事件存储 - 安全审计管道 - 事件分析仪表板 # 运行应用程序 ## 启动 Ollama ``` ollama serve ``` ## 拉取模型 ``` ollama pull llama3.2:3b ``` ## 运行 FastAPI ``` uvicorn app.main:app --reload --no-access-log ``` # 本地 URL 示例 | 服务 | URL | |---|---| | FastAPI | http://127.0.0.1:8000 | | Swagger | http://127.0.0.1:8000/docs | | 指标 | http://127.0.0.1:8000/metrics | | Prometheus | http://localhost:9090 | | Grafana | http://localhost:3000 | # 许可证 MIT 许可证 # 免责声明 本项目仅用于教育和安全研究目的。 请勿在生产环境中使用生成的秘密、令牌或凭据。
标签:AI风险缓解, API安全, AV绕过, ETW劫持, FastAPI, Grafana, JSON输出, JWT认证, Lerna, LLM评估, OAuth2, Ollama, PII检测, Python, RBAC授权, Redis, 人工智能安全, 凭证泄露检测, 分布式系统, 分布式速率限制, 合规性, 响应大小分析, 大语言模型安全, 安全策略引擎, 安全网关, 授权, 搜索引擎查询, 无后门, 日志记录, 机密管理, 滥用防护, 监控, 策略执行, 网络安全, 自定义请求头, 角色基访问控制, 输出过滤, 逆向工具, 遥测, 隐私保护, 零日漏洞检测, 风险评分