prapachaiuea/ai-alert-triage

GitHub: prapachaiuea/ai-alert-triage

面向 SOC 分析师的 CLI 工具,利用 LLM 与威胁情报对安全告警进行自动化初步分诊并生成 Markdown 报告,内置提示词注入防护与反幻觉校验。

Stars: 0 | Forks: 0

# AI 辅助警报分诊工具 这是一款 CLI 工具,它接收一条安全警报,针对威胁情报丰富其指标,将活动映射到 MITRE ATT&CK,并使用 LLM 生成一份可供分析师直接使用的 Markdown 分诊报告 —— 专为 SOC 分析师的初步分诊而设计,并非为了替代人工审查。 ![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg) ## 它的功能 ``` alert (JSON or raw log) -> parse -> extract IOCs (IPs, domains, URLs, hashes; handles defanged indicators) -> enrich against VirusTotal + AbuseIPDB -> validate a suggested MITRE ATT&CK technique against the real dataset -> LLM analysis (guarded against prompt injection) -> anti-hallucination validation -> Markdown triage report ``` ## 要求 — API 密钥 此工具旨在调用三个外部服务。**为了获得真实、预期的体验(真实的 LLM 分析和实际的威胁情报查询),您需要自己的 API 密钥**,均为免费层级: | 密钥 | 用于 | 获取地址 | |---|---|---| | `ANTHROPIC_API_KEY` | 实际的 LLM 分诊分析 —— 若无此项,您将得到基于规则的替代结果,而非真正的 AI 分析 | https://console.anthropic.com/ | | `VIRUSTOTAL_API_KEY` | 实际的 IP/域名/URL/文件哈希声誉查询 | https://www.virustotal.com/gui/my-apikey | | `ABUSEIPDB_API_KEY` | 实际的 IP 滥用置信度评分 | https://www.abuseipdb.com/account/api | 将 `.env.example` 复制到 `.env` 并填入这些密钥 —— 具体请参阅下方的设置说明。在免费层级中,它们均不产生任何费用。 **还没有密钥?** 即使没有任何密钥,该工具仍能进行端到端运行 —— 每个外部依赖项都会降级为清晰标记的 `unavailable`/`offline_fallback` 状态,而不是崩溃或伪造结果(详情请参阅下文的“还没有 API 密钥?”)。这种韧性是一个刻意的设计选择,但它只是在缺少密钥时的后备方案,并非项目的核心目的 —— 真正的核心是由这三个服务驱动的 AI 辅助分析。 ## 设置 ``` python -m venv .venv .venv\Scripts\python.exe -m pip install -r requirements.txt .venv\Scripts\python.exe -m pip install -e . # installs the `triage` command cp .env.example .env # optional - fill in real keys, or leave blank python scripts/fetch_attack_data.py # optional - ~50MB, enables real ATT&CK validation ``` ## 运行它 ``` triage --input data/samples/01_suspicious_outbound_connection.json triage --raw "Jul 24 14:32:10 host sshd[123]: Failed password for admin from 198.51.100.23" triage --input data/samples/02_malware_hash_detection.json --output report.md ``` `data/samples/` 中包含了五个经过脱敏处理的示例警报:一个可疑的出站连接、一个恶意软件哈希检测(真实的 EICAR 测试签名 —— 安全、符合行业标准)、一次暴力破解登录、一个 DNS 信标模式,以及一个在日志字段中嵌入了实时提示词注入载荷的警报,用于演示防护机制。 ## 还没有 API 密钥?它仍然可以运行 —— 但这只是后备方案,而非目标 如果您完全跳过 `.env`,该工具仍会进行端到端运行,而不会崩溃: - **没有 `VIRUSTOTAL_API_KEY` / `ABUSEIPDB_API_KEY`** → 富化表格会针对每个指标显示 `unavailable (no API key configured)`,而不是虚假的分数。 - **没有 `ANTHROPIC_API_KEY`** → CLI 会自动使用 `OfflineAnalyzer`,这是一个小型的确定性、基于规则的替代方案,而不是真正调用 LLM。它在设计上偏于保守:当其简单的规则不够确信时,它会返回 `needs_review`,并且绝不会猜测 ATT&CK 技术 ID,也不会编造看似合理的答案。通过这种方式生成的每份报告都会明确标记为 `analysis_source: offline_fallback` —— 绝不会被当作 LLM 分析来呈现。 - **没有缓存的 ATT&CK 数据集**(尚未运行 `python scripts/fetch_attack_data.py`)→ 技术验证将报告 `unavailable`,而不会崩溃。 此机制的存在是为了让该工具在不花费任何费用或等待密钥批准的情况下,依然可供检查和测试 —— **而**不是建议您跳过获取真实密钥的步骤。真正的集成已完全实现,并在 `.env` 中存在真实密钥的那一刻即刻激活,无需更改任何代码。 ## 安全设计 **提示词注入防御**(这项突出的特性,位于 `llm/guard.py`):警报内容由攻击者控制,因此它被视为不受信任的数据,绝不会被当作指令 —— 共有三层防御:(1) 不受信任的内容被包裹在明确的分隔符中,系统提示词指示模型绝不要服从其中的任何内容;(2) 无论模型如何处理这些内容,启发式扫描都会在报告中标记出已知的注入措辞;(3) 随后 `validate.py` 会将模型的输出与实际数据进行交叉核对。**这属于缓解措施,而非绝对的保证** —— 提示词注入是一个尚未解决的问题,坦白陈述这一点比暗示它已被解决要诚实得多。 **反幻觉检查**(`validate.py`):模型的摘要不能引用实际上并未从警报中提取的指标,并且建议的 ATT&CK 技术 ID 会根据真实的 MITRE 数据集进行验证 —— 无效的 ID 会被丢弃并标记,绝不会被静默信任。 ## 测试 ``` pytest -v # 49 tests, fully offline - no API keys or network needed ruff check . ``` 富化和 LLM 客户端是基于模拟响应进行测试的,绝不会调用真实服务(`tests/test_enrichment.py`、`tests/test_llm_client.py`)。MITRE 验证是根据从官方数据集中提取的一个小型真实 STIX 固件(`tests/fixtures/attack_fixture.json`,25KB)进行测试的,而不是使用完整的约 50MB 文件。 ## `docs/examples/` — 等待真实的 API 密钥 离线后备方案是确定性的,因此它实际上无法被劫持 —— 仅对其进行测试永远无法证明注入防护机制能对真实模型起作用。一旦获得了真实的 `ANTHROPIC_API_KEY`,此处应包含两份实时捕获的报告:正常警报的真实 LLM 分诊,以及展示防护机制在实际模型面前依然生效的注入载荷示例。目前尚未构建;这是最真实的现状说明,绝非被静默跳过的步骤。 ## 路线图(第二阶段 — 尚未构建) - 针对警报文件夹的批处理模式 - 专属的误报可能性评分 - 可选的 Streamlit Web UI ## 许可证 MIT
标签:DLL 劫持, 告警分诊, 大语言模型, 威胁情报, 安全运营, 开发者工具, 扫描框架, 自动化分析, 跨站脚本, 逆向工具