beenuar/AiSOC
摘要
AiSOC 是一个开源、可自托管的 AI 安全运营中心,它接收安全遥测数据,利用大型规则库进行威胁关联分析,通过可审计的 AI 智能体调查事件,并提出需经人工批准的响应方案。
查看缓存全文
缓存时间: 2026/11/01 15:17
beenuar/AiSOC
来源: https://github.com/beenuar/AiSOC
AiSOC
一个开源的、可自托管的 AI 安全运营中心(AI Security Operations Center)。
它接收你的安全遥测数据,检测并关联威胁,用推理过程完全可审计的 AI 智能体进行调查,并提出由人工批准的响应方案。
许可证: MIT (https://opensource.org/licenses/MIT)
版本 · CI (https://github.com/beenuar/AiSOC/actions/workflows/ci.yml) · CodeQL (https://github.com/beenuar/AiSOC/actions/workflows/codeql.yml) · OpenSSF Scorecard (https://securityscorecards.dev/viewer/?uri=github.com/beenuar/AiSOC) · 技术指南
技术指南 (PDF) · 文档 · 架构 · 实际可用的功能 · 讨论区
AiSOC 能做什么
遥测数据从你的安全工具流入。AiSOC 将其规范化,运行其 7015 条规则库中的 2530 条可执行规则,把触发的告警归组为事件,用推理过程的每一次提示词和工具调用都被记录的 AI 智能体调查每个事件,并提出响应操作。新的威胁情报会重新扫描你已经采集的历史数据,而任何内容在发送到厂商之前都必须经过人工批准。
运行起来是什么样
观看完整三分钟演示 —— 在一台服务器上,使用官方发布的镜像,从安装到得出 AI 结论,终端等待时间已缩短并已在画面上标注。以下截图来自在相同规则下运行的 v20.1.0 版本——演示录像的版本早于截图。(分步讲解 · 哪些是真实的)
| 告警 —— 每条都标注了喂入它的连接器。 | 自动分诊 —— 内置本地模型的结论、置信度与推理依据,逐字呈现。 |
| 威胁情报 —— 真实的 CISA KEV 目录,启动后几分钟即可用,无需 API 密钥。 | SOC 运营 —— 在什么都还没接入时,它会如实说明,而不是显示一个占位内容。 |
快速开始
git clone https://github.com/beenuar/AiSOC && cd AiSOC
make up
在 Windows 上,或者在一台什么都没装的机器上,一条命令即可同时安装前置依赖:iwr -useb https://raw.githubusercontent.com/beenuar/AiSOC/main/install.ps1 | iex(Linux 和 macOS 上使用 curl -fsSL https://raw.githubusercontent.com/beenuar/AiSOC/main/install.sh | bash)。
完全不用 Docker,pip install aisoc-sandbox && aisoc-sandbox demo 会在 30 秒内离线走完一条告警的智能体处理流程。
不用自己的机器,在 GitHub Codespaces 中打开本仓库,在其终端运行 make up。
以上四种方式最终都进入同一个控制台;只有前三种会实际安装任何东西。
技术指南对此有深入介绍:服务器规格、模型在哪里运行、每一种故障模式及其原因和解决办法、REST API、MCP,以及每一个控制台界面。
需要 Docker Compose v2,且 Docker 虚拟机需有 8 GB 内存和 20 GB 可用磁盘,另外需要 python3(3.9+)和 bash;make doctor 会检查所有这些,安装文档说明了每个数值的测量依据。
首次运行会下载一个约 2 GB 的模型到一个卷中,只有 make clean 才会清除它。make up 还会创建 .env 并在其中生成十五个密钥——凭据保管库、会话签名密钥、五个服务间凭据和四个数据存储密码——然后创建一个管理员并打印其密码,该密码在你的机器上生成,只显示一次,不存储在任何地方。丢失了?make bootstrap ARGS=--reset-password 可以重新生成一个。
端口被占用不会阻止安装。 AiSOC 会发布在一个空闲端口上,说明是什么占用了旧端口,并把控制台地址一并迁移过去:在一个全新克隆上,5432 和 11434 都被占用时,64 秒即可登录控制台。
然后验证它确实能工作。make smoke 会向接入 API 发送一个真实事件,跟随它穿过 Kafka、检测、关联和 Postgres,然后从公开 API 读回这条告警。每个阶段都会报告 PASS 或 FAIL:
$ make smoke
[PASS] raw telemetry accepted by ingest
[PASS] event traversed the spine and became an alert
PASS: 10/10 stages
在 make up 打印出的地址登录。一个什么都还没接入的租户会进入设置向导,而不是一个全零的仪表盘,其状态读取自你自己的数据,因此如果你通过 API 接入了数据源,它也会保持正确。
规格定义在 docs/openapi.yaml —— 在这套生产级技术栈中,交互式文档是关闭的。
卡住了?运行 make doctor,在一台你还没运行过 make up 的主机上,它会明确指出这一点。
在向导中点击加载示例数据。五个场景走的是真实连接器所使用的同一条接入路径——不是插入数据库行——因此观察它们变成告警,就是在观察流水线真正工作。它们刻意覆盖了从低危到严重,因为首次运行如果一切都是危机,你什么也学不到关于分诊如何把信号与日常事件区分开来的东西。它们在来源列中标注为 AiSOC,拒绝加载到已有真实告警的租户中,并且不会将设置标记为完成。(每一步证明了什么)
对于演示和评测所用的更大规模固定语料,make demo 会加载一个合成数据集——还原流水线形态,绝非基准测试、客户或真实事件。每一行都是 is_synthetic = true,并在控制台中有标注。
接入真实数据
推送方式,使用 make ingest-token 生成的凭据(租户身份来自凭据,而非请求头):
curl -X POST http://localhost:8081/v1/ingest/batch \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $AISOC_INGEST_TOKEN" \
-d '{"connector_id":"edr-1","connector_type":"crowdstrike","events":[{"severity":"high", "title":"Encoded PowerShell from Office","host":"WIN-FIN-01"}]}'
或者拉取方式,在 Settings → Connectors 中配置 87 个点击即连的数据连接器之一——Splunk、Sentinel、Elastic、CrowdStrike、Okta、AWS 和 Kubernetes 审计日志等,其中部分带有厂商专属的规范化配置和设置文档(覆盖范围)。即使没有厂商配置档,连接器也能通过通用映射完成接入,该映射可解析主机、用户和源 IP。
真实的云环境不会通过一次 REST 调用把日志交给你。 四个采集器读取真实云环境会输出的界面:通过 SQS 通知的 S3 上的 CloudTrail 组织跟踪(管理事件、数据事件和 VPC 流日志)、Cloud Logging 汇点上的 GCP Pub/Sub 订阅、Azure Event Hubs 捕获,以及一个 syslog/CEF 监听器。每个采集器都维护一个可续传游标和每次轮询的限额预算,因此积压数据会施加背压,而不是淹没接入层。
要迁移已有的检测规则?packages/aisoc-migrate 可翻译 Splunk SPL、Sentinel KQL 和 Elastic EQL,对于无法承载的内容它会拒绝而非近似处理,因为一条近乎正确的规则比一条缺失的规则更难排查:这里捆绑的 2,005 条 Splunk 规则中有 1,734 条可以翻译,其中 1,711 条是部分翻译。(这意味着什么)
工作原理
接入层将数据规范化为统一形态,并为每个事件打上活动投影(activity projection)——行为者、动作、资源、位置、结果,其中 actor.kind 直接读取各厂商自身文档所定义的字段,而非推断得出——然后由 Kafka 承载传输。
接着,融合引擎运行 2530 条可执行检测规则(磁盘上共 7015 条),外加 76 条滑动窗口规则(73 条跨事件计数;3 条匹配有序序列),在此之上应用你这个租户自己的调优——控制台写入的禁用项、阈值下限和抑制规则,因此你关闭的规则确实会停止触发——并决定什么成为告警。
关联引擎将相关告警归组,一个智能体进行调查并将其推理过程写入调查台账(Investigation Ledger),随后可以由剧本(playbook)基于结果启动。
另外,新的威胁情报会扫描数据湖,查找你已经采集到的可见痕迹,而无需任何人编写查询,一个假设就能变成一次狩猎——模型填充一个封闭模式,所有值都作为参数绑定,因此它根本无法表达任意查询。
被告警触发的剧本在行动前会预览。 三个开关必须一致——部署、租户、剧本——且所有默认值都是关闭的;只要缺少任何一个,就以预览模式运行,并把执行计划附在告警上。审批步骤是一个持久化暂停:运行会挂起到 Postgres,能够在重启后存活,审批通过后恢复,并在超时时带着记录的结果结束,而不会无限挂起。
可执行是挣来的,不是宣称的。 一条规则只有在通过真实连接器和引擎回放一个厂商格式的事件、并被观察到触发后,才能加入已编译的规则集——绝不根据目录或 enabled: 标志推断。这个证明可能失败:--prove-gate 会回退 Windows 连接器,并要求全部 1,687 条 Windows 规则归于沉寂。这说明规则是可达的,并不意味着它能检测到攻击。仍有两条规则无法触发——从 119 条降下来,因为一条本就无法触发的规则不再被计入可执行规则——且这两条都在等待一个行为基线。这个棘轮只会向下。(为什么有 1,362 条被拒绝)
每个回答都附带凭据。 副驾驶(copilot)会把每一条可核查的断言引用到其背后的台账条目,并将其余内容标注为未引用,而不是把它们丢弃;任何调查都可以导出为签名证据包——字节完全一致,提示词以摘要形式呈现,遵循 OCSF 1.9.0。(方式)
docs/architecture/README.md 会一步一步地走完这条路径——十一个步骤、五张图,每个方框都链接到代码——并同步到文档门户。
部署形态
| 形态 | 命令 | 服务数 | 内存 | 你会得到 |
|---|---|---|---|---|
| core | make up | 16 | ~8 GB | 完整的告警流水线:接入 → 检测 → 关联 → 告警 → 分诊 → 控制台,外加 LLM 网关、一个本地模型、CISA KEV 威胁情报源,以及智能体的厂商工具所触达的连接器和响应服务 |
| full | make up-full | 22 | ~12 GB | Core 之外加上事件湖、实体图、全文搜索、数据充实 |
| demo | make up && make demo | 16 | ~8 GB | Core 之外加上带标注的合成数据 |
CORE 是能够接收真实事件并产出真实告警的最小部署形态,而且做到这两点都不需要任何凭据。
模型随网关一同发布。 Ollama 运行一个固定的约 2 GB 的 llama3.2:3b-instruct-q4_K_M 模型,专为纯 CPU 推理而设计,因此 make up 就能在调查台账中产出真实的分诊结论和真实的 token 计数——而非桩实现。它不是前沿模型:在 50 条告警上,约束回复为 JSON 之前它有 44 次给出可用的分诊输出,约束之后为 50 次(方法),护栏会标注是哪条路径给出了回答。你可以用 make up-gpu、make up-host-llm 或在控制台中配置你自己的服务商来加快运行速度(全部四种方式)。
这里从未使用过任何托管服务商——没有付费的密钥,因此各模型对应的行会显示未测量而非零。(ADR-0006)
也内置了一个真实的外部情报源。 services/threatintel 轮询 CISA 已知被利用漏洞(Known Exploited Vulnerabilities)目录——公开、无需 API 密钥——呈现在控制台的威胁情报页面上:这是全新安装中唯一既非合成也非你自己的东西。
评测、反射与回放
发布的数字都带有自身的来源出处。(方法论 · 真实数据与合成数据)
- 每一份结论记分卡都指明实际提供服务的模型——由网关证明或自报,并带有明确的来源状态。缺少归属、零次真实调用或命中确定性回退的一次运行,不能被宣传为某个具名模型的性能;而无法绑定到一次可归属调用的测量结果,不能作为关闭告警的依据。
- 分母会被公开,且不利的方向占优。 全队列召回率把拒答和失败留在恶意类分母中;关闭率声明随附其污染率;告警缩减有三个带标注的数值(75.3% 传统分组、33.3% 生产键值、24.5% 在修正一个缺失标识符之后的检测形态队列上——这次修正让分组收窄而非放宽)。未测量就显示未测量,绝不是
0。 - 反射路径是可观测的——从队列延迟到验证共九个具名阶段,以及一个携带支撑证据、矛盾证据、缺失前置条件和升级原因的决策契约。
- 回放是时间冻结的;重新狩猎是带标注的。 历史回放在检索查询中强制执行证据截止时间(绝不通过提示词),披露模型知识上限,并且无法执行真实操作——变更边界就是写入适配器。将新情报应用于旧遥测是一种独立的、可演练的模式,其发现绝不会被计为原始事件发生时刻的预测。
- 模型适用性是按任务评定的。 该矩阵在相同的锁定证据上,对每个已配置模型相对于一个确定性基线下限(平衡准确率恰好为 0.250)进行评级;未付费的行读作未测量,并可用一条命令在任何本地 OpenAI 兼容端点上复现。
AI 智能体
智能体负责分诊告警和调查事件。它们能做什么、不能做什么:
- 它们会读取告警、其被关联的同源告警、实体上下文,以及同一签名的历史结论。
- 它们调用类型化工具——湖查询、图遍历、充实查询。模型选择工具并传递参数;它从不编写 SQL。
- 一切都会被记录到调查台账——提示词、工具调用、引用、结论、token 成本——并可导出为签名证据包。
- 接地性(grounding)会被检查。 一个引用了证据中从未出现过的指标的结论,会被降级为人工复核,而不是自动关闭。
- 提示词在发送前会被校验。 原始日志、OCSF 负载和形似密钥的值会被拒绝,而不是事后脱敏。
- 没有人工批准就不会触碰任何厂商,除非租户已明确为该动词授予自主权。每个响应步骤在派发时都会对照其自身的能力契约进行校验,因此批准一个剧本绝不会授权其中碰巧包含的内容,且审批人必须持有所需的权限层级,并且不能是发起该操作的人。
项目成熟度
Stable(稳定)是被定义的,并且有门禁强制执行。 在发现有三行描述了并不存在的覆盖能力之前,它还只是一段没有约束的散文。一条能力只有满足以下条件才能标为 Stable:有一个检查在每个拉取请求上运行、无路径过滤、驱动真实的生产路径对抗真实基础设施,并且带有一个通过把东西弄坏、观察它变红来证明的负对照。(标准)
| 能力 | 状态 | 测试 | 生产就绪 |
|---|---|---|---|
| 接入 → 检测 → 关联 → 告警 | Stable | 端到端 + 单元 | 是 |
| 检测引擎(7015 条规则中的 2530 条可执行规则) | Stable | 回放证明 | 是 |
| 告警关联成事件 | Stable | 单元 | 是 |
| REST API + Web 控制台 | Stable | 单元 + 集成 | 是 |
| AI 分诊 + 调查台账 | Stable | 真实 Postgres 台账 + 一个由 PR 门禁保护的本地模型智能体运行。从未使用过托管服务商 | 是,copilot 模式 |
| 事件湖 + |
相似文章
@QingQ77: 开源自托管 AI 安全运营中心,提供告警融合、紫队演练、AI 辅助分诊和 MITRE ATT&CK 调查分析。 https://github.com/beenuar/AiSOC AiSOC 把安全事件采集、关联分析、AI 调查和 SOC …
AiSOC 是一款开源自托管的 AI 安全运营中心工具,基于 LangGraph 构建,集成警报融合、AI 辅助分诊与 MITRE ATT&CK 调查分析功能,支持全链路推理日志回放及多环境灵活部署。
SOC AI Agent
一个专为安全运营中心设计的AI代理,用于自动化威胁检测和响应任务。
OpenObserve 的 AI 可观测性
OpenObserve 推出了一个 AI 原生的开源可观测性平台,旨在追踪 AI 代理和大型语言模型 (LLMs),为开发者提供关于性能、成本和质量的详细洞察。
@DanKornas: 您的SOC工作流程无需从昂贵的SOAR部署开始 Allama是一个开源AI安全自动化平台…
Allama是一个面向SOC团队的开源AI安全自动化平台,提供可视化剧本、AI代理、集成、案例管理以及隔离脚本执行,用于自动化威胁检测与响应。
@0x0SojalSec: Awesome AI Security:每个人都在争相部署AI代理,但几乎很少有人正确保护它们。该仓库汇集了…
一个精心整理的GitHub仓库,汇集了用于保护AI系统的框架、工具、攻击矩阵、红队指南、政策模板、数据集及研究,涵盖提示注入、越狱以及OWASP/NIST标准等主题。