tallcyberguy/eksir

GitHub: tallcyberguy/eksir

一款自托管的多租户 AI SOC 工作台,通过确定性分诊与 LLM 多角色调查辅助分析师处理安全告警,所有判定与响应操作须经人类批准。

Stars: 0 | Forks: 0

# EKSIR **分析师级别的 SOC 工作台:确定性分诊与富化,agent-persona LLM 调查,以及作为唯一被允许提交判定或触发响应操作的人类批准关口。** Screenshot 2026-07-20 at 12 40 29 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/tallcyberguy/eksir/actions/workflows/ci.yml) [![安全扫描](https://static.pigsec.cn/wp-content/uploads/repos/cas/11/116530ae2b0dfb0390d7e5d43e4b803c1d427fbd70342e6f6fee028ad54a6dac.svg)](https://github.com/tallcyberguy/eksir/actions/workflows/security.yml) [![许可证:Apache-2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](./LICENSE) [![Python 3.12](https://img.shields.io/badge/python-3.12-blue.svg)](https://www.python.org/) [![Next.js 15](https://img.shields.io/badge/Next.js-15-black.svg)](https://nextjs.org/) EKSIR 自动化警报分诊中确定性的部分(解析、威胁情报富化、相似案例召回、自动关闭),然后运行一系列 LLM 分析师角色(L1 分类 → L2 深度分析 → 可选的追踪 / 取证 → 管理者),并**驻留于人类批准关口**。AI 提出建议;分析师的 **批准**是写入判定或触发实时 遏制操作的唯一动作。它可以在单台机器上自托管,支持 MSSP 使用的多租户,并且 LLM 后端是可替换的(托管 API(如 Claude),或通过 Ollama / vLLM 的完全本地 模型)。 Screenshot 2026-07-20 at 13 21 04 ## 目录 - [为何选择 EKSIR](#why-eksir) - [架构](#architecture) - [功能亮点](#feature-highlights) - [快速开始](#quick-start) - [配置](#configuration) - [升级](#upgrading) - [文档](#documentation) - [设计原则:分析师关口](#design-principle-the-analyst-gate) - [关于动态恶意软件分析的说明](#a-note-on-dynamic-malware-analysis) - [贡献](#contributing) - [安全](#security) - [许可证](#license) ## 为何选择 EKSIR 大多数“AI SOC”工具要么将分析师淹没在原始警报中,要么悄悄地 自动解决它们。EKSIR 采取了一条深思熟虑的中间路线: - **确定性优先,LLM 其次。** 富化是通过纯代码完成的(威胁情报, WHOIS/rDNS,向量相似度,本地 IOC 源,排除项)。一个高置信度关口 (精确匹配 / 多方一致 / 自动关闭规则)直接短路,**完全不调用 LLM**。只有在真正需要人类级别的判断时,LLM 才会运行。 - **AI 建议,分析师提交。** 角色和对话式 管理者只负责构建*提案*。在分析师于关口批准之前,不会写入任何判定,也不会触发任何 EDR 动作。这是在代码中强制执行的, 而不是依靠约定。 - **本地优先且可替换。** 在一台机器上运行。将其指向 Claude,任何 兼容 OpenAI 的 endpoint,或本地模型。Embeddings(bge-m3)与 chat 模型是解耦的。 - **专为 MSSP 打造。** 全面支持多租户,具备每租户凭证 隔离、RBAC、MSSP 汇总仪表板和带有品牌的客户报告。 ## 架构 ![EKSIR 架构概述](https://static.pigsec.cn/wp-content/uploads/repos/cas/02/02fcaef370fa0f5871729541c82d0987fece2794bfef45f748f92d1eddfc19da.png) 单台主机,单次 `docker compose`: ``` Browser ──▶ Caddy ──▶ Next.js 15 (UI) ──▶ FastAPI orchestrator (:8000) ──▶ ARQ worker │ │ Postgres · Redis · Qdrant · LiteLLM (:4000) REMnux (docker exec, forensics profile) ``` - **前端** — Next.js 15 (App Router), Tailwind, 三种主题。 - **后端** — FastAPI 协调器 + 一个运行 pipeline 的 ARQ worker。 - **数据** — Postgres(状态),Redis(队列/缓存),Qdrant(向量: `alerts_v2`, `iocs_v2`, `knowledge_base_v2`)。 - **LLM** — 通过 LiteLLM 代理路由;通过 OpenAI SDK 实现与提供商无关。默认将深度层级路由到 Claude Sonnet,将快速层级路由到 Claude Haiku;只需在一个配置文件中替换即可切换至本地模型。 - **取证(可选 profile)** — 一个网络隔离的 REMnux 容器,内置 YARA-Forge 规则,仅由 worker 通过 `docker exec` 驱动。 有关完整状态机,请参阅 [`docs/PIPELINE.md`](docs/PIPELINE.md); 有关设计原理,请参阅 [`docs/DESIGN.md`](docs/DESIGN.md)。 ## 功能亮点 | 领域 | 作用 | |---|---| | **接入** | OCSF 标准化连接器(Microsoft Defender, Trend Micro Vision One)以及 HMAC 签名的 webhook 和粘贴文本;每租户路由;定时拉取接入和批量/历史导入 | | **Pipeline** | 确定性解析 → 自动关闭 → 去重 → 富化 → OCSF 实体解析 → 关联 → 决策关口,具有不使用 LLM 的高置信度短路功能 | | **Agent-persona 综合** | L1 分类 → L2 深度分析(Markdown 报告 + 结构化判定) → 可选的威胁追踪 → 可选的取证推理 → 确定性管理者,停泊在关口 | | **人类批准关口** | 批准操作提交判定(索引至向量数据库)并仅运行经过分析师检查的响应操作;拒绝操作将重新排队或丢弃;对话式管理者可在批准前修改提案 | | **富化** | MalwareBazaar / ThreatFox / URLhaus / VirusTotal / AbuseIPDB / OTX, WHOIS, rDNS, 向量相似案例召回 (bge-m3), KB 命中, 分级本地威胁情报评分 | | **置信度 + 威胁评分** | 每个事件两个融合的 0–100 评分(判定置信度,以及有效威胁 = 固有威胁 × P(恶意))显示在列表和详细视图中 | | **响应操作** | 感知提供商、分析师把关:**Microsoft Defender**(隔离 / AV 扫描 / 添加指标 / 禁用用户)和 **Trend Micro Vision One**(隔离 / 恢复 / 黑名单 / 收集文件),以及向源警报回写判定 | | **威胁 IOC** | 每日公共 OSINT 源同步(Emerging Threats, Tor exits, abuse.ch URLhaus / MalwareBazaar / ThreatFox / SSLBL),具有管理员 UI 的排除数据库 | | **客户案例** | 将事件升级为案例,生成感知区域设置的客户摘要(EN/TR),附加相关事件,预览并通过 SMTP 发送,展示“我们采取的行动” | | **品牌报告** | 定时或按需生成的每租户 SOC 报告,渲染为 HTML + PDF (WeasyPrint);cron 仅负责草拟,分析师把关的发送操作是唯一的对外步骤 | | **取证** | 感知文件类型的**静态**分析(PE / Office / PDF / ELF / Mach-O / 脚本 / 归档),结合 YARA-Forge + capa MITRE 映射和 LLM 综合判定 | | **威胁追踪** | 纯文本 → S1QL / KQL / Sigma 转换,实时 Defender 高级追踪(受把关),已保存的追踪任务 | | **攻击面 (EASM)** | 外部资产登记 + DNS / SPF-DKIM-DMARC / TLS / WHOIS / nmap 侦测 | | **MITRE ATT&CK** | 来自确认判定的覆盖热力图 + 每个事件的攻击路径视图 | | **MSSP / 多租户** | 每租户汇总,一切范围限定于租户,RBAC,每租户 EDR/LLM 凭证隔离(`STRICT_TENANT_CREDS`),BYOK,交接班 | | **运营** | 调查队列(可认领,按 SLA 排序),SLA 跟踪,团队分析,LLM 成本仪表板,通知,MFA,每事件的 LLM 记录审计 | ## 快速开始 要求:Docker + Docker Compose。对于 RAG 相似案例召回,您还需要主机上的 [Ollama](https://ollama.com);对于本地 GPU 推理,需要 NVIDIA Container Toolkit。 ``` git clone https://github.com/tallcyberguy/eksir.git cd eksir/deploy cp .env.example .env $EDITOR .env # set POSTGRES_PASSWORD, JWT_SECRET, LITELLM_MASTER_KEY, # INGEST_HMAC_SECRET, a provider key (e.g. ANTHROPIC_API_KEY), # and SETTINGS_ENCRYPTION_KEY. See "Configuration" below. # 核心 stack(无 GPU,无 forensics) docker compose up -d # 可选:启用 RAG 相似案例 recall(主机端,一次性) ollama pull bge-m3 # OLLAMA_URL defaults to host.docker.internal:11434 # 可选:+ forensics(REMnux 配合 YARA-Forge — 首次 build 较大) docker compose --profile forensics up -d --build # 可选:+ 通过 vLLM 使用本地 GPU 模型 docker compose --profile gpu up -d ``` 然后: - **UI:** http://localhost (Caddy 默认提供 80 端口服务) - **API 文档 (Swagger):** http://localhost/docs - **首次登录:** 如果不存在用户,首次启动时将创建引导管理员(`ISOC_BOOTSTRAP_ADMIN_EMAIL` / `ISOC_BOOTSTRAP_ADMIN_PASSWORD`)。 请立即更改密码。 Postgres 表在启动时自动创建(幂等);公共威胁情报 源将自动填充。 ## 配置 所有配置均通过 `deploy/.env` 中的环境变量进行(模板: [`deploy/.env.example`](deploy/.env.example) 记录了每个选项)。 基本配置: | 变量 | 内容 | 备注 | |---|---|---| | `ISOC_ENV` | `dev` / `staging` / `prod` | `prod`/`staging` 启用失败即关闭的秘密防护 + CORS 锁定 | | `POSTGRES_PASSWORD`, `DATABASE_URL` | Postgres | 保持两者同步 | | `JWT_SECRET` | 认证签名密钥 | 使用 `openssl rand -hex 64` 生成 | | `INGEST_HMAC_SECRET` | Webhook 签名密钥 | `openssl rand -hex 32` | | `LITELLM_MASTER_KEY` | LiteLLM 管理员密钥 | 即使绑定到环回接口,也要设置强密钥值 | | `SETTINGS_ENCRYPTION_KEY` | 用于存储 LLM/集成密钥的 Fernet 密钥 | 在生产环境中推荐使用 | | `ANTHROPIC_API_KEY` (或 `OPENAI_*`) | LLM 提供商密钥 | 至少需要一个提供商(或本地模型) | | `ISOC_MODEL_DEEP` / `_FAST` | 由 LiteLLM 路由的虚拟模型名称 | `isoc-deep` / `isoc-fast` — 在 `config/litellm.config.yaml` 中更改映射 | | `OLLAMA_URL` | bge-m3 embeddings endpoint | 主机端;留空则禁用相似案例召回 | | `VIRUSTOTAL_API_KEY`, `ABUSECH_AUTH_KEY`, ... | TI 富化 | 可选 | | `V1_*`, `DEFENDER_TOOLS_ENABLED`, `STRICT_TENANT_CREDS` | EDR/XDR 集成 | 可选;默认关闭 | **将 EKSIR 指向 LLM 的两种方法:** 1. **LiteLLM 代理(默认)。** 编辑 `config/litellm.config.yaml` 以将 虚拟的 `isoc-deep` / `isoc-fast` 名称映射到任何提供商(Claude, OpenAI, Azure, vLLM)。模型替换只需修改一次 YAML 并重启 LiteLLM。 2. **管理员 → 设置(运行时覆盖)。** 在 UI 中设置 endpoint / 密钥 / 模型;它将在约 60 秒内生效,无需重启(例如本地 Ollama 模型)。 密钥在静态存储时通过 Fernet 加密。 ## 升级 **从源码(默认 compose):** ``` cd eksir git pull cd deploy docker compose build backend worker frontend # source is baked into images docker compose up -d ``` Schema 更改在后端启动时自动应用(幂等的 ALTERs; 版本化更改作为 Alembic 迁移发布在 `backend/migrations/versions/` 下)。更改取证工具后,重新构建 REMnux 镜像:`docker compose --profile forensics build remnux`。 **从固定镜像(`docker-compose.prod.yml`):** 在 `.env` 中设置 `IMAGE_OWNER` 和 `EKSIR_VERSION`,然后 `docker compose -f docker-compose.prod.yml pull && docker compose -f docker-compose.prod.yml up -d`。有关 完整的生产环境升级 + 回滚流程,请参阅 [`DEPLOY.md`](DEPLOY.md)。 ## 文档 | 文档 | 内容 | |---|---| | [`docs/PIPELINE.md`](docs/PIPELINE.md) | 警报状态机、agent personas 和人类关口(权威指南) | | [`docs/DESIGN.md`](docs/DESIGN.md) | 高级设计和原理 | | [`docs/DATA-MODEL.md`](docs/DATA-MODEL.md) | 核心数据库表和向量集合 | | [`docs/API.md`](docs/API.md) | 精选 HTTP API 接口(完整接口请见 `/docs`) | | [`docs/`](docs/) ADR-0001 … ADR-0008 | 架构决策记录(技术栈,本地 LLM,EDR 集成,连接器框架等) | | [`DEPLOY.md`](DEPLOY.md) | 生产环境部署、升级和回滚操作手册 | | [`CHANGELOG.md`](CHANGELOG.md) | 发布历史(Keep a Changelog) | | [`CONTRIBUTING.md`](
标签:AI风险缓解, DLL 劫持, Python, SOC工作台, 告警分诊, 大语言模型, 威胁情报, 安全运营, 开发者工具, 扫描框架, 搜索引擎查询, 无后门, 版权保护