gururajseethur/SentinelMesh_Zero-Trust-CTI-Gateway

GitHub: gururajseethur/SentinelMesh_Zero-Trust-CTI-Gateway

零信任威胁情报平台,实现边缘策略执行和数据验证。

Stars: 0 | Forks: 0

# SentinelMesh

zero-trust keycloak stack frontend capstone

**零信任威胁情报平台** — 每个API请求在接触任何上游服务之前都会与实时JWKS端点进行验证。没有绕过模式,没有对称回退,没有降级状态。要么RS256 JWT有效,要么请求被401拒绝。 基于MISP、OpenCTI、TheHive和Keycloak构建,具有Node.js API密钥库([tisp-proxy](tisp-proxy/)),在启动时和每次请求时强制执行JWT验证。React指挥中心([tisp-command-center](tisp-command-center/))在演示时运行模拟模式,并在设置环境变量时切换到实时Keycloak OIDC身份验证。 该系统包括用于UI演示的模拟模式以及通过Keycloak进行真实OIDC身份验证的完全安全模式。 Spinnaker Analytics / BIA伦理黑客与网络安全硕士-文凭的毕业设计 — *在威胁情报共享平台中实施安全措施*。所有9个项目任务直接映射到存储库工件(请参阅仪表板中的[技术蓝图](#)或`docs/PROJECT_COMPLETION_MATRIX.md`)。 ## 为什么这个项目很重要 威胁情报只有在可以安全地在团队边界之间共享时才有用。该平台解决了CTI共享中最难解决的三个问题: 1. **谁可以看到什么** — Keycloak RBAC按角色数据访问,而不是扁平API密钥 2. **如何信任数据** — STIX 2.1标准化摄取与来源可信度标记 3. **如何采取行动** — TheHive案例管理直接连接到MISP IOC源 安全设计接受了迭代红队审查:代理通过了四次认证后才获得零信任PASS。 ## 架构 ``` ┌──────────────────────────────────────────────────────────┐ │ User (Browser) │ │ React SPA — Vite 8, React 19, Recharts │ └───────────────────┬──────────────────────────────────────┘ │ HTTPS (TLS terminated at Nginx) ▼ ┌──────────────────────────────────────────────────────────┐ │ Nginx Reverse Proxy │ │ • Keycloak SSO redirect (login-required) │ │ • CSP: script-src 'self', frame-ancestors 'none' │ │ • Rate limiting, CORS headers │ └───────┬───────────────────────────────┬──────────────────┘ │ │ ▼ ▼ ┌───────────────┐ ┌─────────────────────┐ │ tisp-proxy │ │ Keycloak 24 (OIDC) │ │ (API Vault) │ │ PKCE S256, RS256 │ │ │◄────JWT─────│ JWKS endpoint │ │ JWKS-backed │ └─────────────────────┘ │ RS256 verify │ │ per-request │ └───────┬───────┘ │ Injects service API keys (server-side only) ├──────────────► MISP (IOC / malware events) ├──────────────► OpenCTI (graph-based CTI) └──────────────► TheHive (case management) ┌──────────────────────────────────────────────────────────┐ │ Supporting Services │ │ n8n (workflow automation) • Grafana (metrics) │ │ Elasticsearch + Kibana • MinIO (object storage) │ │ RabbitMQ (OpenCTI broker) • PostgreSQL (Keycloak DB) │ └──────────────────────────────────────────────────────────┘ ``` ### 认证流程 ``` 1. Browser loads SPA → Keycloak JS adapter detects unauthenticated session 2. Redirect to Keycloak login with PKCE code_challenge (S256) 3. User authenticates → Keycloak issues RS256-signed JWT + refresh token 4. SPA holds JWT in memory (never localStorage, never cookies) 5. Every API call: Authorization: Bearer → tisp-proxy 6. tisp-proxy fetches public key from JWKS endpoint 7. jwt.verify(): algorithm=RS256, iss, aud, exp all enforced 8. On pass: proxy injects upstream API key and forwards request 9. On fail (tampered / expired / wrong issuer): 401, request dropped 10. Refresh timer fires at 55s — proactive token renewal before exp ``` ## 安全模型 ### 零信任执行 - **强制启动验证** — 如果缺少`KEYCLOAK_URL`、`KEYCLOAK_REALM`或`KEYCLOAK_CLIENT_ID`,代理将调用`process.exit(1)`。没有回退模式,没有可选验证,没有降级状态。 - **无条件JWT验证** — 每个对`/proxy/*`的请求都会调用`await verifyJWT(token)`。该调用没有条件守卫;不能跳过。 - **算法锁定** — `algorithms: ['RS256']`是明确的。HS256(对称的,没有私钥就无法伪造)在库级别被拒绝。 - **全面声明执行** — 验证`iss`、`aud`和`exp`。来自正确发行者的过期令牌失败。来自恶意发行者的有效令牌失败。 - **JWKS故障时关闭** — 如果JWKS端点不可达,每个请求都会返回401。没有请求到达上游密钥库。 ### 多层防御 | 层 | 控制 | |---|---| | 网络 | 端口3001未发布到主机NIC;仅内部Docker DNS | | TLS边缘 | Nginx终止HTTPS;服务在内部网络上通信 | | 认证 | Keycloak OIDC、PKCE S256、`login-required`在加载时 | | 授权 | RBAC:领域角色+客户端角色合并,按路由保护器 | | API密钥隔离 | 代理环境中的服务凭证;永远不会在浏览器捆绑包或`VITE_*`变量中 | | 速率限制 | 在任何路由处理程序之前,每15分钟每IP 100个请求 | | 内容安全策略 | `script-src 'self'`、`frame-ancestors 'none'`、脚本上没有`unsafe-inline` | ### 验证攻击面(在CI中自动化) | 攻击 | 结果 | |---|---| | 过期JWT | 401 — `jwt expired` | | 错误发行者 | 401 — `jwt issuer invalid` | | 修改RS256签名 | 401 — `invalid signature` | | HS256算法替换 | 401 — `Malformed JWT: missing kid header` | | 空的/ null /未定义的令牌 | 401 — `Missing bearer token` | | 结构上无效的字符串 | 401 — `Malformed JWT` | | JWKS端点不可达 | 401 — `Unable to retrieve signing key` | ## 存储库结构 ``` tisp-nexus/ ├── tisp-command-center/ # React SPA (dashboard + auth) │ ├── src/auth/ # Keycloak adapter, AuthContext, ProtectedRoute │ ├── src/components/ # Per-service nodes, Sidebar, Overview │ ├── src/lib/ # platformAPI (sim + live modes), adversarial tests │ └── src/state/ # PlatformContext (polling, exponential backoff) │ ├── tisp-proxy/ # Node.js API key vault │ ├── src/server.js # Express, rate limiter, mandatory JWT enforcement │ ├── src/verify-jwt.js # JWKS-backed RS256 verifier factory │ └── src/verify-jwt.test.js # 7 self-contained cryptographic security tests │ ├── tisp-infra/ # Docker Compose stack │ ├── docker-compose.yml # Base: all services, proxy not host-exposed │ ├── docker-compose.prod.yml # Prod overlay: Nginx TLS, port reset │ ├── docker-compose.dev.yml # Dev overlay: 127.0.0.1:3001 only │ └── nginx/ # Reverse proxy config with CSP │ ├── tisp-tools/ # Node.js CTI utilities (zero runtime dependencies) │ └── src/ # IOC normalizer, STIX 2.1 bundler, pattern detector │ ├── docs/ # Architecture docs, runbooks, compliance checklists └── submission/ # Deliverables, screenshots, reports ``` ## 技术栈 | 组件 | 技术 | |---|---| | 前端 | React 19、Vite 8、Tailwind CSS 4、React Router 7、Recharts、Framer Motion | | 认证 | Keycloak 24、keycloak-js、OIDC / PKCE S256 | | API密钥库 | Node.js 22、Express 4、jwks-rsa、jsonwebtoken | | CTI平台 | MISP最新版、OpenCTI 6、TheHive 5 | | 自动化 | n8n(自托管) | | 可观察性 | Grafana、Elasticsearch + Kibana | | 基础设施 | Docker Compose、Nginx、PostgreSQL、MinIO、RabbitMQ | | CI | GitHub Actions — lint、build、25个单元测试、Playwright端到端测试 | ## 设置 ### 先决条件 - Docker Desktop ≥ 4.28与Compose v2 - Node.js 22+ - 16 GB RAM(全栈)/ 8 GB(仪表板演示仅限) ### 仪表板演示(无需Docker) ``` cd tisp-command-center npm ci npm run dev ``` 在模拟模式下打开于`http://localhost:5173` — 所有数据都是合成的,不需要外部服务。演示了完整的UI、RBAC门控路由和带有模拟Keycloak状态的认证流程。 ### 使用真实认证运行 仪表板有两种模式: | 模式 | 工作原理 | 何时使用 | |---|---|---| | **模拟** | 认证上下文是模拟的。所有API数据都是合成的。不需要Keycloak。 | 演示、评分、本地开发 | | **实时(OIDC)** | Keycloak PKCE S256登录流程。JWT由代理通过JWKS按请求验证。 | 全栈、生产 | **要启用真实Keycloak认证,请在启动仪表板之前设置以下变量**: ``` # tisp-command-center/.env.local VITE_KEYCLOAK_URL=http://localhost:8080 VITE_KEYCLOAK_REALM=tisp VITE_KEYCLOAK_CLIENT_ID=tisp-dashboard VITE_API_BASE_URL=http://localhost:3001 ``` 以及启动代理之前: ``` # tisp-proxy 环境(或 tisp-infra/.env) KEYCLOAK_URL=http://keycloak:8080 KEYCLOAK_REALM=tisp KEYCLOAK_CLIENT_ID=tisp-dashboard MISP_URL=https://misp:443 MISP_API_KEY= OPENCTI_URL=http://opencti:4000 OPENCTI_TOKEN= THEHIVE_URL=http://thehive:9000 THEHIVE_API_KEY= ``` 如果缺少`KEYCLOAK_URL`、`KEYCLOAK_REALM`或`KEYCLOAK_CLIENT_ID`,代理将拒绝启动(`process.exit(1)`)——没有不安全的回退。 在模拟模式下,仪表板UI中的`LabWarningBanner`会明确显示模式。侧边栏在用户页脚中显示“模拟模式”。真实模式显示已认证用户的名字和Keycloak角色。 ### 全栈 ``` cd tisp-infra cp .env.example .env # 替换占位符密钥 — 查看 .env.example docker compose --env-file .env up -d ``` ### 运行安全测试 自包含 — 不需要实时Keycloak或网络访问: ``` cd tisp-proxy npm ci && npm test ``` ### 在本地运行所有CI检查 ``` cd tisp-command-center && npm run lint && npm run build && npm test cd ../tisp-proxy && npm test cd ../tisp-tools && npm test ``` ## 已知限制 实验室构建的有意范围决策: | 限制 | 生产路径 | |---|---| | Nginx中的`proxy_ssl_verify off` — 上游服务使用自签名证书 | 私有CA;挂载CA捆绑包;设置`proxy_ssl_trusted_certificate` | | 单实例Keycloak — SPOF | 外部PostgreSQL集群+ KC会话复制 | | 进程内速率限制 — 重置重启,不在副本之间共享 | Redis支持的速率限制(`rate-limit-redis`) | | 没有令牌撤销检查 — 代理只信任`exp` | 在敏感操作上使用Keycloak令牌内省端点 | | Keycloak中可用但未强制执行策略的多因素认证 | 需要OTP的所有领域用户的认证流程 | ## 合规性映射 | 标准 | 实现 | |---|---| | GDPR数据最小化 | 在`tisp-tools/src/anonymize.mjs`中对IOC进行匿名化 | | ISO 27001 A.9 — 访问控制 | Keycloak RBAC与最小权限角色分配 | | NIST CSF保护/检测 | Keycloak会话审计+ Grafana仪表板 | | STIX 2.1 / TAXII | `tisp-tools/src/stix-bundler.mjs`生成符合规范的捆绑包 | 完整文档:`docs/`和`submission/deliverables/`。 ## CI管道 | 作业 | 检查 | |---|---| | `dashboard` | lint、build、25个单元测试、Playwright端到端测试 | | `security` | 7个加密JWT安全测试(自包含,无需KC) | | `tools` | CTI实用程序正确性 — IOC标准化、STIX输出形状 | | `infra` | `docker compose config`用于基本和prod覆盖 | ## 作业覆盖范围 请参阅`docs/PROJECT_COMPLETION_MATRIX.md`,以查看Spinnaker项目任务直接映射到存储库工件。 提交成果(DOCX、证据截图、测试报告)位于`submission/`。
标签:API安全, CIDR查询, GNU通用公共许可证, JSONLines, JSON输出, JWT验证, Keycloak, meg, MITM代理, Node.js, OIDC认证, OpenCTI, React, STIX 2.1, Streamlit, Syscalls, TheHive, Vite, 信息安全, 威胁情报, 威胁情报共享, 安全合规, 安全架构, 安全演示, 安全网关, 安全蓝图, 安全认证, 安全项目, 开发者工具, 政策执行, 数据可信度, 网络代理, 网络安全, 自定义脚本, 角色访问控制, 访问控制, 请求拦截, 边缘安全, 隐私保护, 零信任