Zaid-Ahmed-Ansari/Argus

GitHub: Zaid-Ahmed-Ansari/Argus

Argus 是一款基于 AI 和 Hybrid RAG 技术的 SOC 分析师助手,将原始安全日志自动转化为包含 MITRE 映射和调查建议的结构化事件分析报告,同时提供可复现的 LLM 分诊评估研究框架。

Stars: 0 | Forks: 0

# Argus — SOC 分析师助手 [![在线演示](https://img.shields.io/badge/demo-live-22c55e?style=for-the-badge&logo=vercel&logoColor=white)](https://argus-gules.vercel.app/) [![Next.js](https://img.shields.io/badge/Next.js-16-black?style=flat-square&logo=next.js)](https://nextjs.org/) [![React](https://img.shields.io/badge/React-19-61DAFB?style=flat-square&logo=react&logoColor=white)](https://react.dev/) [![TypeScript](https://img.shields.io/badge/TypeScript-5-3178C6?style=flat-square&logo=typescript&logoColor=white)](https://www.typescriptlang.org/) [![Prisma](https://img.shields.io/badge/Prisma-7-2D3748?style=flat-square&logo=prisma)](https://www.prisma.io/) [![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16-4169E1?style=flat-square&logo=postgresql&logoColor=white)](https://www.postgresql.org/) [![Gemini](https://img.shields.io/badge/Google_Gemini-API-4285F4?style=flat-square&logo=google&logoColor=white)](https://ai.google.dev/) [![License: MIT](https://img.shields.io/badge/License-MIT-green?style=flat-square)](LICENSE) [![研究](https://img.shields.io/badge/research-15_RQs-8b5cf6?style=flat-square)](https://argus-gules.vercel.app/research) **Argus** 是一个 AI 辅助的安全运营中心 (SOC) 平台,它将嘈杂的身份验证和安全日志转换为结构化的事件记录 —— 包括攻击分类、MITRE ATT&CK 映射、调查时间线以及与 playbook 对齐的建议 —— 并由一个可复现的研究实验室提供支持,用于评估基于 LLM 的分诊。 **在线应用:** [https://argus-gules.vercel.app](https://argus-gules.vercel.app) **源代码:** [github.com/Zaid-Ahmed-Ansari/Argus](https://github.com/Zaid-Ahmed-Ansari/Argus) ## 目录 - [概述](#overview) - [截图](#screenshots) - [核心功能](#key-capabilities) - [架构](#architecture) - [技术栈](#tech-stack) - [研究平台](#research-platform) - [快速开始(本地)](#quick-start-local) - [数据库:Docker 对比 Supabase](#database-docker-vs-supabase) - [环境变量](#environment-variables) - [运行实验](#running-experiments) - [项目结构](#project-structure) - [API 参考](#api-reference) - [部署](#deployment) - [安全](#security) - [文档](#documentation) - [作者](#author) - [许可证](#license) ## 概述 SOC 分析师在归类事件或决定后续步骤之前,会花费大量时间解析原始日志行。Argus 通过统一的工作流解决了这一瓶颈: 1. **上传** SSH、VPN、Web 服务器或 SIEM 日志导出文件(粘贴或文件上传)。 2. **分析** 使用 Google Gemini,可选择性地通过基于 MITRE ATT&CK 和 SOC playbook 知识的 hybrid RAG 进行增强。 3. **调查** 在带有时间线、严重性统计、日志搜索和交互式调查工作区的持久化 dashboard 上进行。 4. **评估** 涵盖 10 个标记攻击场景和 15 个研究问题的可复现基准测试。 Argus 既是一个**生产级分析工具**(包含身份验证、持久化事件、上传 pipeline),也是一个**研究工具**(包含真值数据集、批量实验运行器和公开的 metrics dashboard)。 | 受众 | 获得的功能 | |----------|--------------| | **访客和分析人员** | 在线演示、注册、上传示例日志、查看结构化的分诊输出 | | **开发者** | 可以使用 Docker Postgres 在本地运行或部署到 Vercel + Supabase 的全栈 Next.js 应用 | | **研究人员** | 10 个场景的语料库、4 个活跃实验维度、10 个评估 metrics、位于 `/research` 的基准结果 | ## 截图 ### 产品 | 首页 | 调查工作区 | |----------|-------------------------| | ![Argus 首页 — 带有分析预览的落地页](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/ea4a6ed03a180936.png) | ![调查工作区 — 事件摘要和时间线](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/e6b85df446180940.png) | | 攻击链图 | MITRE ATT&CK 映射 | |--------------------|----------------------| | ![调查工作区中的攻击链可视化](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/c8bd123999180942.png) | ![MITRE 技术映射面板](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/775b455b5f180945.png) | ### 研究实验室 | 研究指挥中心 | 实验对比 | |-------------------------|----------------------| | ![研究实验室概览 — 场景、metrics、覆盖矩阵](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/06d52696e7180949.png) | ![实验对比图表和排行榜](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/0f73fd384d181028.png) | ## 核心功能 ### 分析师工作流 - **AI 事件分析** — 对攻击模式进行分类,分配严重性(`LOW` → `CRITICAL`),并从原始日志行构建事件时间线。 - **Hybrid RAG** — 通过 PostgreSQL 全文搜索、向量相似度(JSONB embeddings)或倒数排名融合(reciprocal-rank fusion,`RAG_RETRIEVER_MODE=hybrid`)检索 MITRE 和 playbook 片段。 - **SOC 就绪输出** — 结构化摘要、MITRE 风格的技术标签以及可操作的调查建议。 - **日志搜索** — 跨存储日志内容和事件历史记录进行全文搜索。 - **持久化记录** — 每次上传和分析都会按账户保存,并附带元数据、时间线和便于审计的存储。 - **PII 脱敏** — 电子邮件、IP、用户名和 token 在存储前以及向 LLM 发送 prompt 之前会被屏蔽(`src/utils/redact-pii.ts`)。 ### 研究与评估 - **10 个标记场景** — 从暴力破解到内部威胁,每个都包含 `sample.log` + `ground-truth.json`。 - **4 个活跃实验** — RAG 对比无 RAG、原始对比结构化输入、跨场景基准测试、2×2 因子矩阵。 - **10 个 metrics** — 准确率、攻击类型/严重性/MITRE 准确率、调查质量、建议质量、幻觉率、延迟等。 - **公开研究 UI** — `/research`(概述)、`/research/questions`、`/research/results`、`/research/datasets`、`/research/experiments`、`/research/reports`。 ## 架构 Argus 是一个**单一的 Next.js 16 应用程序**(App Router)。所有服务端逻辑都在 Route Handlers 中运行 —— 没有独立的 Python 或 FastAPI 服务。 ``` flowchart TB subgraph Client UI[Landing · Dashboard · Investigation · Research] end subgraph NextJS["Next.js 16 (App Router)"] API[API Route Handlers] Auth[Better Auth] Orch[Analysis Orchestrator] RAG[Hybrid RAG Retriever] Eval[Experiment Evaluator] end subgraph Data PG[(PostgreSQL)] UT[UploadThing] end subgraph External Gemini[Google Gemini API] end UI --> API API --> Auth API --> Orch Orch --> RAG Orch --> Gemini RAG --> PG API --> PG API --> UT Eval --> Orch ``` ### 分析 pipeline ``` Upload logs → validate + redact PII → persist LogFile (PostgreSQL FTS indexed) → AnalysisOrchestrator → [optional] Hybrid RAG: FTS + vector retrieval over DocumentChunk → GeminiProvider.complete() → persist Analysis (attackType, severity, timeline, recommendations) → Investigation workspace ``` ### 分层代码库 ``` ┌─────────────────────────────────────────────────────────┐ │ Presentation (src/app, src/components, src/features) │ ├─────────────────────────────────────────────────────────┤ │ API Routes (validate → delegate → respond) │ ├─────────────────────────────────────────────────────────┤ │ Services (AI, RAG, repositories, search, eval) │ ├─────────────────────────────────────────────────────────┤ │ Prisma ORM → PostgreSQL │ └─────────────────────────────────────────────────────────┘ ``` 有关 SOLID 映射、扩展点和提供者抽象,请参阅 [docs/architecture.md](docs/architecture.md)。 ## 技术栈 | 层级 | 技术 | |-------|------------| | 框架 | Next.js 16, React 19, TypeScript 5 | | 样式 | Tailwind CSS 4, shadcn/ui, Framer Motion | | 数据库 | 通过 Prisma 7 的 PostgreSQL 16 | | 身份验证 | Better Auth(Postgres 中的 session) | | AI | Google Gemini (`gemini-2.5-flash`, `gemini-embedding-001`) | | RAG | PostgreSQL FTS + JSONB 向量 embeddings(无需 pgvector) | | 上传 | 本地磁盘(开发)· UploadThing(Vercel 生产环境) | | 状态/数据 | TanStack Query, Zustand, Recharts, React Flow | | 托管 | Vercel(应用)+ Supabase 或 Docker(数据库) | ## 研究平台 Argus 为基于 LLM 的 SOC 分诊提供了一个**可复现的评估框架**。研究人员可以在实时网站上探索结果,或者在本地复现实验。 ### 研究问题 (RQ1–RQ15) | ID | 问题 | |----|----------| | **RQ1** | Hybrid RAG 是否能提高基于 LLM 的 SOC 分诊在多种攻击场景下的准确率? | | **RQ2** | 与原始日志相比,结构化的安全事件是否能改善攻击分类? | | **RQ3** | LLM 能否根据稀疏的日志证据,将事件可靠地映射到 MITRE ATT&CK 技术? | | **RQ4** | 对于建议质量,混合(FTS + 语义)检索是否优于无检索? | | **RQ5** | 幻觉率如何随场景难度变化? | | **RQ6** | LLM 能否仅使用身份验证日志区分密码喷洒和暴力破解? | | **RQ7** | 结合 RAG 和结构化输入是否会产生叠加增益? | | **RQ8** | LLM 生成的调查时间线是否足够完整,可以交给分析师处理? | | **RQ9** | 与 playbook 对齐的建议在真值评估中得分是否更高? | | **RQ10** | 哪些攻击场景产生的攻击类型准确率最低? | | **RQ11** | 严重性分类是否比攻击类型分类更可靠? | | **RQ12** | 在困难场景下,RAG 是否减少了捏造的攻击类型? | | **RQ13** | 每个场景下混合检索的延迟成本是多少? | | **RQ14** | 分析师效用得分能否作为人工评判分诊质量的代理指标? | | **RQ15** | 在相同的测试夹具上重新运行时,跨场景基准测试的稳定性如何? | 实验的完整映射:[`src/lib/research-catalog.ts`](src/lib/research-catalog.ts) · 在线 UI:[/research/questions](https://argus-gules.vercel.app/research/questions) ### 场景语料库(10 个测试夹具) | 场景 | MITRE | 难度 | |----------|-------|------------| | 暴力破解 | T1110.001 | 简单 | | 密码喷洒 | T1110.003 | 简单 | | 撞库 | T1110.004 | 中等 | | 权限提升 | T1548 | 中等 | | 横向移动 | T1021 | 困难 | | 可疑管理员活动 | T1078.004 | 中等 | | 账户接管 | T1078 | 困难 | | 数据渗出 | T1041 | 困难 | | Web Shell 活动 | T1505.003 | 中等 | | 内部威胁 | T1530 | 困难 | 每个场景都位于 `datasets//` 下,包含 `sample.log` 和 `ground-truth.json`(攻击类型、严重性、MITRE ID、必需/禁止的关键词、时间线预期、playbook 主题)。 ### 活跃实验 | ID | 名称 | 对比内容 | |----|------|------------------| | **exp-002** | RAG 对比 无 RAG | `usedRag: false` 对比开启 hybrid RAG | | **exp-003** | 原始对比结构化 | 原始日志行对比解析后的安全事件 | | **exp-004** | 跨场景基准测试 | 在所有 10 个测试夹具上进行 Hybrid RAG | | **exp-005** | RAG × 输入矩阵 | 2×2 因子设计(RAG × 输入格式) | ### 评估 metrics | Metric | 描述 | |--------|-------------| | `accuracy` | 加权综合得分 | | `attack_type_accuracy` | 与标记的攻击类型匹配 | | `severity_accuracy` | 精确的严重性枚举匹配 | | `mitre_mapping_accuracy` | 输出中包含预期的技术 ID | | `investigation_quality` | 时间线深度、关键词、实体召回率 | | `recommendation_quality` | SOC playbook 主题重叠度 | | `triage_completeness` | 所有输出字段均已填充 | | `analyst_utility_score` | 人工代理综合指标 | | `hallucination_rate` | 禁止词条命中数(越低越好) | | `latency_ms` | 分析实际耗时 | 实现:[`src/services/eval/metrics.ts`](src/services/eval/metrics.ts) ### 论文大纲(研究产出) `/research/reports` 部分遵循标准的学术结构:摘要、引言、相关工作、方法论、实验设计、结果、讨论、局限性、未来工作 — 请参阅 [`src/lib/research-catalog.ts`](src/lib/research-catalog.ts)(`PAPER_SECTIONS`)。 ### 生产环境的基准结果 提交在 `experiments/baseline/` 下的基准 JSON 为 Vercel 上的图表提供数据支持(临时的 serverless 文件系统无法持久化批量运行结果)。如需刷新: ``` npm run experiment:all npm run experiment:baseline git add experiments/baseline/ ``` ## 快速开始(本地) ### 前置条件 - **Node.js** 20.x 或 22.x - **npm** 10+ - **PostgreSQL** — 通过 [Docker](#option-a-docker-recommended-for-local-dev) 或本地安装 - **Google AI Studio** API key([在此获取](https://aistudio.google.com/apikey)) ### 1. 克隆并安装 ``` git clone https://github.com/Zaid-Ahmed-Ansari/Argus.git cd Argus npm install ``` ### 2.置环境 ``` cp .env.example .env ``` 编辑 `.env` — 至少设置 `DATABASE_URL`、`DIRECT_URL`、`BETTER_AUTH_SECRET` 和 `GEMINI_API_KEY`。请参阅 [环境变量](#environment-variables)。 ### 3. 启动 PostgreSQL **Docker(推荐):** ``` docker compose up -d ``` **或者**将 `DATABASE_URL` / `DIRECT_URL` 指向现有的 Postgres 实例。 ### 4. 初始化数据库 ``` npm run db:migrate # apply Prisma migrations npm run db:seed:knowledge # seed MITRE + playbook knowledge npm run db:embed # generate Gemini embeddings (requires GEMINI_API_KEY) ``` 或者使用单个命令运行所有生产环境设置步骤: ``` npm run db:setup:prod ``` ### 5. 运行开发服务器 ``` npm run dev ``` 打开 [http://localhost:3000](http://localhost:3000) → **注册** → **上传** → 粘贴或上传 `datasets/brute_force/sample.log` → 运行分析。 ## 数据库:Docker 对比 Supabase Argus **仅使用 PostgreSQL** 进行持久化。身份验证由 **Better Auth** 处理(而不是 Supabase Auth)。你可以使用任何 Postgres 主机。 ### 选项 A:Docker(推荐用于本地开发) 使用附带的 `docker-compose.yml` — 无需云账户。 ``` # 启动 Postgres 16 docker compose up -d # 验证健康状态 docker compose ps ``` 在 `.env` 中将两个 URL 都设置为 Docker 连接字符串: ``` DATABASE_URL="postgresql://postgres:postgres@localhost:5432/argus" DIRECT_URL="postgresql://postgres:postgres@localhost:5432/argus" DATABASE_POOL_MAX=10 UPLOAD_DIR=storage ``` 然后进行迁移并填充种子数据: ``` npm run db:setup:prod npm run dev ``` **停止/重置:** ``` docker compose down # stop container docker compose down -v # stop + delete data volume (full reset) ``` | Docker | Supabase(生产环境) | |--------|------------------------| | `localhost:5432` | 事务池化器(Transaction pooler)端口 **6543** (`?pgbouncer=true`) | | `DATABASE_URL` 和 `DIRECT_URL` 使用相同的 URL | `DIRECT_URL` 使用会话池化器(Session pooler)端口 **5432** 进行迁移 | | 本地文件上传 (`UPLOAD_DIR=storage`) | Vercel 上必须使用 UploadThing | | 不需要 SSL | 默认启用 SSL | ### 选项 B:Supabase(推荐用于生产环境) Supabase 提供带有备份、连接池和 dashboard 的托管 PostgreSQL。Argus **不**使用 Supabase Auth — 仅使用数据库连接字符串。 1. 在 [supabase.com](https://supabase.com) 创建一个项目。 2. 复制 **Transaction pooler** (6543) → 设置为带有 `?pgbouncer=true` 的 `DATABASE_URL`。 3. 复制 **Session pooler** (5432) → 设置为 `DIRECT_URL`。 4. 针对远程数据库运行一次 `npm run db:setup:prod`。 5. 使用 [docs/supabase-setup.md](docs/supabase-setup.md) 中的环境变量部署到 Vercel。 完整的分步指南:**[docs/supabase-setup.md](docs/supabase-setup.md)** ### 为什么使用 Better Auth + Postgres(而不是 Supabase Auth)? Argus 是服务端优先的:Prisma 拥有 schema,API 路由实施访问控制,Gemini 密钥永远不会到达浏览器。Better Auth 将用户和 session 存储在与事件和 RAG 数据相同的 Postgres 数据库中 —— 这与这种架构非常契合。 ## 环境变量 复制 [`.env.example`](.env.example) 并进行配置: | 变量 | 必需 | 描述 | |----------|----------|-------------| | `DATABASE_URL` | 是 | Postgres 连接(应用 runtime) | | `DIRECT_URL` | 是 | Postgres 连接(Prisma 迁移) | | `BETTER_AUTH_SECRET` | 是 | 随机密钥,至少 32 个字符 (`openssl rand -base64 32`) | | `BETTER_AUTH_URL` | 是 | 应用 origin,例如 `http://localhost:3000` | | `NEXT_PUBLIC_APP_URL` | 是 | 与 `BETTER_AUTH_URL` 相同(用于元数据/链接) | | `GEMINI_API_KEY` | 是* | Google Gemini,用于分析和 embeddings | | `UPLOADTHING_TOKEN` | 生产环境 | Vercel 上必需(没有持久化磁盘) | | `UPLOAD_DIR` | 本地 | `storage` — 本地上传目录 | | `RAG_RETRIEVER_MODE` | 否 | `fts` · `vector` · `hybrid`(默认:`hybrid`) | | `GEMINI_MODEL` | 否 | 默认:`gemini-2.5-flash` | | `GEMINI_EMBEDDING_MODEL` | 否 | 默认:`gemini-embedding-001` | | `DATABASE_POOL_MAX` | 否 | 默认:`10` | \*如果没有 `GEMINI_API_KEY`,分析将返回一个占位符 stub。 ## 运行实验 ``` # 单个 scenario (brute_force default) npm run experiment:run # 全部 10 个 scenarios × 所有 experiment configs npm run experiment:all # 特定 scenarios npm run experiment:scenario -- brute_force password_spray # 仅 RAG vs no-RAG (exp-002) npm run experiment:rag # 导出 Vercel /research charts 的 baseline npm run experiment:baseline ``` | 输出 | 位置 | |--------|----------| | 临时运行结果 | `experiments/results/*.json`(gitignored) | | 提交的基准结果 | `experiments/baseline/`(随部署提供) | | 公开 API | `GET /api/experiments/results` | | 研究 UI | [localhost:3000/research](http://localhost:3000/research) | 请参阅 [docs/experiments.md](docs/experiments.md) 和 [datasets/README.md](datasets/README.md)。 ## 项目结构 ``` argus/ ├── src/ │ ├── app/ # Next.js routes (pages + API) │ ├── components/ # Shared UI (layout, shadcn) │ ├── features/ # Feature modules │ │ ├── landing/ # Marketing home page │ │ ├── incidents/ # Incident list & cards │ │ ├── investigation/ # Investigation workspace │ │ ├── research/ # Research lab UI │ │ └── experiments/ # Public experiments page │ ├── services/ # AI, RAG, eval, repositories │ └── lib/ # Auth, metadata, research catalog ├── prisma/ # Schema, migrations, seed scripts ├── datasets/ # 10 labeled attack scenarios + knowledge ├── experiments/ │ ├── configs/ # Experiment JSON configs │ ├── baseline/ # Committed baseline results │ └── results/ # Local run output (gitignored) ├── scripts/ # Batch experiment runner ├── docs/ # Architecture, API, deployment guides ├── public/ │ └── screenshots/ # README screenshots └── docker-compose.yml # Local PostgreSQL ``` ## API 参考 | Endpoint | 身份验证 | 描述 | |----------|------|-------------| | `POST /api/analyze` | 是 | 对上传的日志运行 AI 分析 | | `POST /api/upload` | 是 | 上传日志文件 | | `GET /api/incidents` | 是 | 列出用户的事件 | | `GET /api/search/logs` | 是 | 全文日志搜索 | | `POST /api/evaluate` | 是 | 对预测结果与真值进行评分 | | `GET /api/experiments/results` | 公开 | 汇总实验 metrics | 完整参考:[docs/api.md](docs/api.md) ## 部署 生产技术栈:**GitHub → Vercel (Next.js) → Supabase (PostgreSQL) → Gemini + UploadThing** ``` # Vercel build (自动运行 migrations) npm run vercel-build ``` 清单和环境变量:**[docs/production-deployment.md](docs/production-deployment.md)** 发布前质量保证:**[docs/LAUNCH_CHECKLIST.md](docs/LAUNCH_CHECKLIST.md)** | 生产 URL | 值 | |----------------|-------| | 应用 | `https://argus-gules.vercel.app` | | `BETTER_AUTH_URL` | 相同的 HTTPS origin | | `NEXT_PUBLIC_APP_URL` | 相同的 HTTPS origin | ## 安全 - 通过 Better Auth 进行 session 管理(HTTP-only cookies);受保护的路由位于 `src/proxy.ts` - 对 analyze、upload、search 和 evaluate endpoint 施加速率限制 - middleware 中的安全 header(CSP, `X-Frame-Options`) - 在存储和 LLM prompt 之前进行 PII 脱敏 - 密钥仅存在于环境变量中 — 永不提交到代码库 私下报告漏洞:[SECURITY.md](SECURITY.md) ## 文档 | 文档 | 主题 | |----------|-------| | [docs/architecture.md](docs/architecture.md) | 系统设计、RAG pipeline、扩展点 | | [docs/api.md](docs/api.md) | REST route handlers | | [docs/data-model.md](docs/data-model.md) | Prisma schema 和 enums | | [docs/experiments.md](docs/experiments.md) | 实验方法论 | | [docs/research-roadmap.md](docs/research-roadmap.md) | 研究平台概述 | | [docs/rag-roadmap.md](docs/rag-roadmap.md) | RAG 检索 pipeline | | [docs/supabase-setup.md](docs/supabase-setup.md) | Supabase PostgreSQL 设置 | | [docs/production-deployment.md](docs/production-deployment.md) | Vercel 生产环境部署 | ## 作者 **Zaid Ahmed Ansari** — [GitHub](https://github.com/Zaid-Ahmed-Ansari) · [Argus 代码库](https://github.com/Zaid-Ahmed-Ansari/Argus) 作为一个网络安全研究和作品集项目构建:一个面向分析师的 SOC 助手,并配有一个用于基于 LLM 的日志分诊的可复现评估实验室。 ## 许可证 [MIT](LICENSE) — 详情请参阅 [LICENSE](LICENSE)。
标签:DLL 劫持, LLM评估, Ollama, 大语言模型, 威胁情报, 安全运营, 开发者工具, 扫描框架, 自动化攻击