alive-xd/NoCap

GitHub: alive-xd/NoCap

一个可解释的威胁情报分流工作区,通过不可变证据链为每个风险评分提供完整溯源能力,帮助安全分析师高效完成事件研判。

Stars: 0 | Forks: 0

NoCap Shield NoCap Platform

A Traceable, Explainable Threat Intelligence & Triage Workspace

Next.js Supabase PostgreSQL

采用企业级架构模式设计,专为现代安全响应团队打造。

## 🌟 概述 **NoCap** 是一个企业级、有据可查的威胁情报分流工作区。 与传统的“黑盒”信誉扫描仪不同(它们在没有上下文的情况下输出任意的恶意评分),NoCap 建立在严格的**不可变证据链**之上。每一个评分、指标或严重性警告都可以追溯到生成它的原始 JSON 响应和 HTTP 字节。分析师可以检查任何发现结果,点击其评分贡献,并查看警报背后的原始 payload。 ## 🏢 使用场景 * **事件分流台:** 提交 IP、域名、文件哈希或 URL,并在 1.5 秒内接收结构化的、汇总的威胁报告。 * **可疑邮件分流:** 导入原始 EML 头部以验证 SPF/DKIM/DMARC 对齐情况,追踪中继跳数,并检测品牌同形异义词冒充。 * **攻击面画像:** 输入根主机,通过证书透明度日志枚举子域名,指纹识别服务器 stack 响应,并扫描公开的 GitHub 代码泄露。 * **CVE 优先级排序:** 监控产品名称和漏洞 ID,将它们与 CISA KEV(已知被利用漏洞)和 Exploit-DB 向量进行交叉比对。 ## 📊 项目统计 | 组件 | 指标 / 范围 | | :--- | :--- | | **前端布局** | 8 个自定义案件文件视图 | | **摄取 Pipeline** | 解耦的摄取 ➔ 解析 ➔ 分析 | | **数据库表** | 7 个具有级联删除功能的表 | | **情报源** | VirusTotal, AbuseIPDB, ip-api.com, WHOIS, crt.sh, NVD | | **API Endpoints** | 10 个 REST 处理程序 + CVE Cron 调度器 | | **本地缓存速度** | 缓存命中时读取响应 < 50ms | ## ✨ 当前功能 ### ✅ 已完全实现 - **并发摄取:** 使用 `Promise.allSettled` 并发获取情报 API 源,以降低指标查找延迟。 - **基于源的缓存 TTL:** 根据波动性动态缓存原始 API 响应(WHOIS 72小时,IP ASN 48小时,VirusTotal 6小时,AbuseIPDB 6小时)。 - **空白目标验证:** 拒绝空输入或仅含空格的输入,并给出验证警告。 - **并发安全性:** 使用随机退避(50-250ms 的抖动)自动重试序列号更新,以避免数据库插入冲突。 - **CSRF 中间件安全:** 在所有修改数据的 endpoint 上强制执行 origin 和 referer 验证。 - **参数化 PostgREST 过滤器:** 对全局搜索查询构建器中的输入字符串进行清理,以防止语法注入导致崩溃。 - **基于数据库的速率限制:** 强制执行每用户每分钟创建 5 个案件的速率限制,以保护情报 API key 配额。 - **失败即关闭的 Cron 授权:** 强化计划内的 CVE 监控触发 endpoint,如果环境中未设置或无效的 `CRON_SECRET`,则拒绝请求。 - **路由级别的所有权防护:** 在笔记更新 (`PATCH`) 和标签链接移除 (`DELETE`) 时,实施冗余的应用层用户所有权检查。 ### ⚠️ 计划路线图 - **自动化叙述摘要(架构已就绪):** OpenRouter 模型编排,将复杂的发现树转化为结构化的执行摘要。 - **MITRE ATT&CK 技术标记:** 自动根据 ATT&CK 框架对指标进行标记。 - **执行 PDF 导出:** 生成可打印的取证 PDF 简报,用于事件响应交接。 ## 🏗️ 系统架构 NoCap 强制执行严格且解耦的请求生命周期: ``` graph TD Input[Target Input] --> |Auto-detects Type| Orchestrator[Pipeline Orchestrator] Orchestrator --> |Parallel API Requests| Fetchers[API Fetchers] Fetchers --> |Raw JSON Responses| Artifacts[(Artifact Store)] Artifacts --> |Read Raw Data| Parsers[Deterministic Parsers] Parsers --> |Extract Flat Facts| Evidence[(Evidence Store)] Evidence --> |Read Structured Evidence| Analyzers[Stateless Analyzers] Analyzers --> |Generate Claims| Findings[(Findings Store)] Findings --> |Tally Deduplicated Scores| Scoring[Scoring Engine] Scoring --> |Clamped & Scaled Verdict| Final[Final Score & Verdict] classDef store fill:#1C222C,stroke:#4F8F87,stroke-width:2px,color:#E8E4DA; classDef component fill:#14181F,stroke:#C9A227,stroke-width:1px,color:#E8E4DA; class Artifacts,Evidence,Findings store; class Orchestrator,Parsers,Analyzers,Scoring component; ``` ## 🔄 SOC 调查生命周期 以下是目标查询的工作流追踪(例如 `185.190.140.9`): ``` Target Input (185.190.140.9) │ ▼ [Artifact Created] ────► Stores raw VirusTotal and ip-api JSON payloads │ ▼ [Evidence Extracted] ──► Slices facts: malicious_count (14), asn_number (9009) │ ▼ [Findings Generated] ──► ASNReputation rules trigger on M247 Ltd (abusive ASN) │ ▼ [Score Compiled] ─────► Deduplicates claims, tallies final score (42 - Suspicious) ``` ## 🛠️ 技术栈 | 领域 | 技术 | 描述 | | :--- | :--- | :--- | | **前端框架** | Next.js 15 (App Router) | 高性能 React 框架。 | | **数据库层** | PostgreSQL (通过 Supabase 托管) | 主关系型存储。 | | **身份验证** | Supabase SSR Session Cookies | 安全的有状态 cookie 验证。 | | **样式与主题** | Vanilla CSS + IBM Plex Sans/Mono | 机构级、简约的 dashboard 布局。 | | **情报源** | NIST NVD, crt.sh, CISA KEV | 免费的公开威胁情报源。 | ## 🗄️ 数据库 Schema 数据库由带有强制行级安全 (RLS) 策略的级联表组成: ``` erDiagram investigations ||--o{ artifacts : "has" investigations ||--o{ findings : "contains" investigations ||--o{ notes : "manages" artifacts ||--o{ evidence : "yields" findings ||--o{ finding_evidence : "backed_by" evidence ||--o{ finding_evidence : "proves" investigations { uuid id PK uuid user_id FK text case_number text target target_type type investigation_status status int final_score } artifacts { uuid id PK uuid investigation_id FK text source jsonb raw_response timestamptz fetched_at } evidence { uuid id PK uuid artifact_id FK text fact_type jsonb fact_value } ``` ## 🔌 API 规范 ### 创建调查 - **Endpoint:** `POST /api/investigations` - **Payload:** { "target": "malicious-domain.com", "investigationType": "ioc" } - **响应 (201 Created):** { "id": "b6a7b8c9-d0e1-f2a3-b4c5-d6e7f8a9b0c1" } ### 获取案件 JSON 详情 - **Endpoint:** `GET /api/investigations/[id]` - **响应 (200 OK):** { "id": "b6a7b8c9-d0e1-f2a3-b4c5-d6e7f8a9b0c1", "case_number": "NC-2026-00042", "target": "malicious-domain.com", "final_score": 85 } ## 🚀 设置与启动 ### 1. 克隆并安装 ``` git clone https://github.com/alive-xd/NoCap.git cd NoCap/nocap-app npm install ``` ### 2. 配置环境 在 `nocap-app/` 中创建 `.env.local`: ``` NEXT_PUBLIC_SUPABASE_URL=https://your-project-id.supabase.co NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key SUPABASE_SERVICE_ROLE_KEY=your-service-role-key VIRUSTOTAL_API_KEY=your-virustotal-key ABUSEIPDB_API_KEY=your-abuseipdb-key GITHUB_API_TOKEN=your-github-token ``` ### 3. 应用 Schema 迁移 在您的 Supabase SQL 编辑器中执行: 1. 运行 `supabase/migrations/001_initial_schema.sql`(创建基础 schema 和 RLS 规则) 2. 运行 `supabase/migrations/002_add_cve_type.sql`(修改类型以添加 CVE) 3. 运行 `supabase/seed.sql`(填充基础配置和评分配置文件) ### 4. 启动开发服务器 ``` npm run dev ``` ## ❓ 常见问题 **问:我可以离线运行 NoCap 吗?** 答:已分析的案件和缓存的 artifacts 可在离线状态下查看。但是,新的分流扫描需要与外部情报提供商保持活动连接。 **问:如何请求自定义评分权重?** 答:所有基线分数分布都植入在数据库的 `scoring_profiles` 元数据表中。您可以直接通过迁移或 SQL 查询来自定义权重。 ## 🤝 贡献 请查阅我们的贡献指南,了解 pipeline 设计规范、测试规格和 pull request 指南。 ## 📜 许可证 NoCap 是根据 **MIT License** 授权的开源软件 - 详情请参阅 `LICENSE` 文件。
标签:CISA项目, PostgreSQL, Supabase, 威胁情报, 安全运营, 开发者工具, 扫描框架, 测试用例, 自动化攻击