texasbe2trill/AlertSage

GitHub: texasbe2trill/AlertSage

AlertSage 是一个开源 SOC 控制台,将自由文本安全事件自动分类并映射到 MITRE ATT&CK 框架,输出包含严重性、杀伤链和 IOC 的分诊卡,帮助安全分析师快速研判事件。

Stars: 4 | Forks: 2

AlertSage logo # AlertSage ### 开源 SOC 控制台 —— 输入自由文本安全事件,输出 MITRE ATT&CK 分诊卡。 混合 TF-IDF + sentence-transformer 分类器 · 多提供商 LLM 调度器 · IOC 扩充 · 批量处理 · 案例管理。 [![Python 3.12](https://img.shields.io/badge/python-3.12-3776AB.svg?logo=python&logoColor=white)](https://www.python.org/downloads/release/python-3120/) [![Streamlit](https://img.shields.io/badge/streamlit-1.39%2B-FF4B4B.svg?logo=streamlit&logoColor=white)](https://streamlit.io/) [![License: Apache 2.0](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE) [![CI](https://img.shields.io/github/actions/workflow/status/texasbe2trill/AlertSage/tests.yml?branch=main&label=tests)](https://github.com/texasbe2trill/AlertSage/actions/workflows/tests.yml) [![Live Demo](https://img.shields.io/badge/live%20demo-streamlit-brightgreen.svg?logo=streamlit&logoColor=white)](https://alertsage.streamlit.app/) **实时演示:** [alertsage.streamlit.app](https://alertsage.streamlit.app/)
AlertSage SOC console walkthrough
## 它是什么 AlertSage 是一个开源的 SOC 控制台。粘贴一段自由文本的安全事件;在大约 30 秒内,您将获得一张映射到 MITRE ATT&CK 的分诊卡,其中包含严重性、杀伤链、IOC 以及为分析师准备好的研判依据。 ``` free text -> hybrid classifier -> LLM second opinion -> triage card ~1.4s ~5s instant ``` - **混合分类器** — 首先使用 TF-IDF + sentence-transformer 进行初步筛选(约 1.4 秒);然后由 LLM 做出最终判定并编写研判依据 - **多提供商 LLM 调度器** — 支持 OpenAI、Anthropic、Hugging Face Inference Router 或本地 `llama.cpp`;当缺少某个密钥时会在调用链中进行回退,并具有针对每个提供商的速率限制 - **IOC 扩充** — 自动提取指标,并结合 VirusTotal / AbuseIPDB / Shodan / GreyNoise 进行深度透视 - **批量处理** — 支持上传多达 500 行的 CSV 文件,进行逐行分诊,以及导出战术级别的 MITRE 覆盖率和执行摘要 - **案例管理** — 基于 SQLite 的历史记录、书签、分析师备注、四阶段案例工作流(New / Triaging / Contained / Closed)以及每个案例的时间线 - **自带密钥 (BYOK),无泄露** — API 密钥仅存在于 `st.session_state` 中;从不写入磁盘,从不记录日志,也绝不在错误消息中回显 ## 快速开始 ``` git clone https://github.com/texasbe2trill/AlertSage.git cd AlertSage python3.12 -m venv .venv && source .venv/bin/activate pip install -r requirements.txt streamlit run app.py ``` 打开 http://localhost:8501。在您的 Shell 中填入提供商密钥(任选其一即可): ``` export ANTHROPIC_API_KEY=sk-ant-... # 或:export OPENAI_API_KEY=sk-... # 或:export HF_TOKEN=hf_... ``` 如需运行测试套件、无头分诊 CLI,以及可选的用于本地 GGUF 推理的 `llama-cpp-python`: ``` pip install -r requirements-dev.txt pytest tests/ -v ``` ## 自带密钥 调度器会首先尝试指定的提供商,当缺少密钥时会在调用链中回退,并在侧边栏显示当前活跃的后端。 | 提供商 | 默认模型 | 成本 | 延迟 | |---|---|---|---| | **Anthropic** | `claude-haiku-4-5` | 与 OpenAI 相当,生成的研判依据更精准 | 亚秒级 | | **OpenAI** | `gpt-4o-mini` | 约 $0.15 / 1M 输入 token | 亚秒级 | | **Hugging Face Router** | `meta-llama/Llama-3.1-8B-Instruct:cerebras` | 免费额度足够演示使用 | 1-2 秒 | | **Local llama.cpp** | 将 `.gguf` 文件放入 `models/` 目录 | 免费 | 取决于硬件 | 针对每个提供商的滑动窗口速率限制(默认每个会话 5 次请求 / 60 秒)可防止某一个提供商的配额阻塞其他提供商。 ## 六大页面 ### 概述 · 任务控制中心 KPI 磁贴、30 天可刷选时间轴图、分类器置信度直方图、严重性甜甜圈图、MITRE ATT&CK 热力图,以及轮询 SQLite 的实时尾迹。 ### 调查 Investigate page with kill chain 粘贴一段事件叙述,点击 **Triage**。结果卡将展开显示:严重性药丸标签、分类器和 LLM 耗时、四阶段案例步骤器、横跨所有 13 个 ATT&CK 企业战术的杀伤链、结合了 VirusTotal / AbuseIPDB / Shodan / GreyNoise 透视的自动提取 IOC、前 N 个分类概率、LLM 研判依据以及 SOC 剧本提示。 ### 搜寻 Hunt page with filters and saved searches 自由文本查询、多选过滤器、置信度 + 异常值滑块、时间窗口。每行的 **View** 按钮可在调查页面中打开分析结果;每行的 **Bookmark** 按钮可将其保存。将过滤条件集保存为命名搜索后,它会固定在侧边栏。 ### 批量处理 Batch processing with MITRE coverage 上传 CSV 文件(自动检测 `incident_text` / `description` / `narrative` / `alert` / `text` 列),最多 500 行。返回标签分布、战术级别的 MITRE 覆盖率以及三种 CSV 导出(逐行结果、技术覆盖率、执行战术摘要)。 ### 书签 Bookmarks with case status workflow 将已保存的调查以可展开卡片的形式显示。包括严重性药丸标签、案例状态药丸标签、叙述引用、New / Triaging / Contained / Closed 步骤器、分析师备注和完整案例时间线。 ### 设置 Settings panel with BYOK fields 提供商单选按钮。密码掩码的 BYOK 输入框。演示数据生成器。分诊阈值滑块。当宿主机上不存在 `llama-cpp-python` 和 `.gguf` 文件时,本地提供商会自动隐藏。 ## 架构 ``` flowchart LR UI[app.py · Streamlit router + 6 pages] --> CLF[model.py · classifier] UI --> EMB[embeddings.py · sentence-transformer] UI --> LH[llm_helpers.py · dispatcher + MITRE map] UI --> DB[(database.py · SQLite)] CLI[cli.py · nlp-triage] --> CLF CLI --> LH LH --> LC[llm_client.py] LC --> P1[OpenAI] LC --> P2[Anthropic] LC --> P3[Hugging Face Router] LC --> P4[local llama.cpp] ``` `app.py` 是一个轻量级的 Streamlit 路由器。核心逻辑位于 `src/triage/` 中: - `model.py` + `embeddings.py` + `preprocess.py` · TF-IDF + sentence-transformer 特征管道,Logistic Regression 分类器 - `llm_helpers.py` · 与提供商无关的调度器、MITRE 技术映射、回退链、IOC 提取 - `llm_client.py` · 针对 OpenAI、Anthropic、Hugging Face Router、llama.cpp 的轻量级 SDK 包装器 - `database.py` · 用于分析历史、书签、备注、案例状态、时间线的 SQLite 模式 繁重的加载器通过 `@st.cache_resource` 进行缓存,因此它们在每个进程中仅加载一次。这些相同的辅助函数也为用于无头/脚本化分诊的 `nlp-triage` CLI 提供支持。 ## CLI ``` nlp-triage "Multiple users reported a phishing email impersonating IT support." ``` 在标准输出上生成 JSON 分诊记录(标签、MITRE 技术、研判依据、IOC)。适用于通过管道传递给不需要 Streamlit UI 的 SOAR 剧本或批处理作业。 ## 配置 大多数行为是通过环境变量或 `.streamlit/secrets.toml` 控制的。应用按以下顺序发现令牌:会话状态 (BYOK 字段) → 密钥文件 → 环境变量。 | 变量 | 用途 | |---|---| | `ANTHROPIC_API_KEY` | Anthropic Messages API | | `OPENAI_API_KEY` | OpenAI Chat Completions | | `HF_TOKEN` | Hugging Face Inference Router | | `HF_MODEL` | 覆盖默认的 HF 模型 ID | | `IS_HOSTED_DEMO` | 设置为 `1` 时,在首次冷启动时自动生成 30 天的合成事件 | | `VIRUSTOTAL_API_KEY` | 可选,启用实时 IOC 扩充 | ## 部署注意事项
如果不固定版本,Streamlit Cloud 会拉取最新的 Streamlit 本仓库固定使用 `streamlit>=1.39,<1.40`。较新的版本更改了侧边栏内部结构和片段调度机制,足以导致我们在冷启动期间自动挂载的刷新片段失效。在没有进行端到端部署测试的情况下,请勿取消固定。
级联报错 ModuleNotFoundError: torchvision Streamlit 的文件监视器会检查已加载的模块,而 transformers 5.x 会延迟导入需要 torchvision 的图像处理器。我们不附带 torchvision,因为我们只使用文本嵌入。此问题通过 `.streamlit/config.toml` (`fileWatcherType = "none"`) 并固定 `transformers<5` 解决。
概述页面在负载下出现 WebSocket 断开连接 六个自动刷新的片段共享一个 4 秒缓存的 SQLite 快照。如果将缓存 TTL(生存时间)降得太低,WS(WebSocket)心跳就会超时。如果您添加了片段,请共享该快照。
## 路线图 - TAXII / MISP 威胁情报摄取(目前为静态的精选订阅源) - 将分析师的修正作为带标签的训练数据反馈 - 在概述页面固定已保存的搜索 - 从批量处理页面导出 STIX 2.1 / MISP ## 贡献 欢迎提交 Issue 和 Pull Request。 - `pytest tests/` 必须保持通过 - 运行时依赖位于 `requirements.txt` 中,开发工具位于 `requirements-dev.txt` 中 - `main` 分支始终处于可部署状态;在进行较大更改前请先开一个 Issue 讨论 ## 许可证 [Apache License 2.0](LICENSE)。 构建基于 [Streamlit](https://streamlit.io/)、[scikit-learn](https://scikit-learn.org/)、[sentence-transformers](https://sbert.net/) (`all-MiniLM-L6-v2`)、[llama.cpp](https://github.com/ggerganov/llama.cpp)、[OpenAI](https://github.com/openai/openai-python) 和 [Anthropic](https://github.com/anthropics/anthropic-sdk-python) SDKs、[Hugging Face Inference Router](https://huggingface.co/docs/api-inference/index) 以及 [Plotly](https://plotly.com/python/)。 MITRE ATT&CK 在 MITRE 的[使用条款](https://attack.mitre.org/resources/terms-of-use/)下使用。完整署名:[docs/mitre-attribution.md](docs/mitre-attribution.md)。 UI 灵感来自 Splunk Enterprise Security 和 Elastic Security;AlertSage 与这两者均无任何关联。
标签:Anthropic, Apex, Ask搜索, CISA项目, CIS基准, Cloudflare, DLL 劫持, IOC提取, IP 地址批量处理, Kubernetes, llama.cpp, LLM, MITRE ATT&CK, NLP, OpenAI, PE 加载器, Python, Sentence-Transformer, Streamlit, TF-IDF, Unmanaged PE, VirusTotal, 人工智能, 内存规避, 分类器, 大语言模型, 威胁情报, 安全事件分析, 安全告警, 安全态势感知, 安全运营, 安全运营中心, 工单管理, 库, 应急响应, 开发者工具, 开源, 扫描框架, 指标富化, 文本分类, 无后门, 机器学习, 杀伤链, 混合分类器, 用户模式Hook绕过, 网络安全, 网络映射, 自动化分类, 访问控制, 误报分析, 逆向工具, 隐私保护