ScottElastic/elastic-workflows
GitHub: ScottElastic/elastic-workflows
一组面向 Elastic Security 的 SOC 自动化工作流示例集合,利用 ES|QL、AI 代理和 Kibana 案例管理实现警报分诊、事件调查和威胁情报狩猎的自动化编排。
Stars: 0 | Forks: 0
# Elastic Workflows — SOC 自动化示例
一系列用于在 Elastic Security 中自动化 SOC 分诊、调查和威胁情报狩猎的 [Elastic Workflows](https://www.elastic.co/docs/explore-analyze/workflows)(技术预览版,9.x)示例集合。
每个工作流结合了 ES|QL 查询、Kibana 案例管理和 AI 代理(通过 Agent Builder 或 `COMPLETION` 推理),以丰富警报、跨数据源进行狩猎,并生成可供分析师直接使用的案例。
## 仓库结构
```
elastic-workflows/
├── README.md
├── LICENSE
├── CONTRIBUTING.md
├── .gitignore
├── docs/
│ └── workflows-reference.md # YAML schema + Kibana API reference
└── workflows/
├── triage/ # Alert-driven first-response workflows
│ ├── alert-fp-triage-activity-summary.yaml
│ ├── mfa-bombing-triage.yaml
│ └── risky-user-signin-investigation.yaml
├── investigation/ # Deeper, multi-step investigations
│ ├── litellm-trojan-investigation.yaml
│ └── okta-aitm-investigation.yaml
└── threat-intel/ # Feed ingestion + environment hunting
├── elastic-security-labs-feed.yaml
├── threat-intel-feed-monitor.yaml
└── dashboard/ # Index mapping + dashboard for findings
├── findings-index-mapping.json
├── dashboard.json
├── dashboard-export.ndjson
├── deploy-dashboard.sh
└── seed-sample-data.sh
```
## 工作流目录
| 工作流 | 触发器 | 功能说明 |
|----------|---------|--------------|
| [`triage/alert-fp-triage-activity-summary.yaml`](workflows/triage/alert-fp-triage-activity-summary.yaml) | alert / manual | 基于通用 ECS 的误报分诊。拉取警报 IP/用户 15 分钟内的活动记录,运行 ES\|QL `COMPLETION`,然后由安全 AI 代理做出最终的 FP/TP(误报/真正报)判定。自动关闭 FP 并将 TP 升级为案例。 |
| [`triage/mfa-bombing-triage.yaml`](workflows/triage/mfa-bombing-triage.yaml) | alert / manual | 对 Okta MFA 轰炸(MFA-bombing)警报进行分诊:使用登录历史记录进行丰富、AI 评估、Slack 通知并创建案例。 |
| [`triage/risky-user-signin-investigation.yaml`](workflows/triage/risky-user-signin-investigation.yaml) | alert / manual | 跨 `azure.signinlogs`、`azure.auditlogs`、`azure.graphactivitylogs`、`crowdstrike.alert`、`windows.powershell_operational` 和 `system.security` 的全栈 Entra ID 风险登录调查。生成 AI 分诊、仪表板表格、狩猎查询、六个保存的搜索以及一个案例。 |
| [`investigation/litellm-trojan-investigation.yaml`](workflows/investigation/litellm-trojan-investigation.yaml) | alert / manual | LiteLLM 代理入侵调查 —— 涵盖进程树、网络、机密访问暴露以及 AI 综合分析。 |
| [`investigation/okta-aitm-investigation.yaml`](workflows/investigation/okta-aitm-investigation.yaml) | alert / manual | Okta 中间人攻击会话劫持调查。搜索与被攻陷会话相关的会话重用、账户修改以及 OAuth/API 密钥创建行为。 |
| [`threat-intel/elastic-security-labs-feed.yaml`](workflows/threat-intel/elastic-security-labs-feed.yaml) | scheduled (24h) / manual | 拉取 Elastic Security Labs RSS,由 AI 代理提取 IOC 并通过 `platform.core.execute_esql` 在环境中进行狩猎,将结构化发现索引到 `threat-intel-findings` 中,并创建简报案例。 |
| [`threat-intel/threat-intel-feed-monitor.yaml`](workflows/threat-intel/threat-intel-feed-monitor.yaml) | scheduled / manual | 通用的情报源监控模板 —— 可适配于任何 RSS / JSON / TAXII 情报源。 |
## 前置条件
- **Elastic Stack 9.3+**,并启用 Workflows(技术预览版)。
- **Kibana Spaces** —— 工作流存在于某个空间(space)中;请选择合适的导入位置。
- **检测规则**,需通过规则的 *Actions* 设置链接到由警报触发的工作流。
- **推理端点**(用于基于 `COMPLETION` 的步骤) —— 例如 `.anthropic-claude-4.6-opus-completion`。使用 `GET _inference/_all` 进行验证。
- **Agent Builder 代理**(用于 `ai.agent` 步骤) —— 例如 `security.agent_1` 或配备了 ES|QL 执行工具的自定义代理。
- **连接器**,根据各个工作流的需要(如 Slack、OpenAI 等)。在导入时配置连接器 ID。
- **数据视图**,用于 `logs-*`(在创建保存的搜索时使用)。
## 自定义检查清单(导入前)
每个工作流都使用 `consts:` 和 `inputs:` 来配置特定于环境的值。在每个 YAML 中搜索以下占位符并将其替换:
| 占位符 | 替换为 |
|-------------|--------------|
| `YOUR-DEPLOYMENT.kb.REGION.PROVIDER.elastic-cloud.com` | 您的 Kibana 基础 URL(无尾部斜杠) |
| `YOUR-DEPLOYMENT.es.REGION.PROVIDER.elastic-cloud.com` | 您的 Elasticsearch URL |
| `CHANGEME` | Kibana 基础 URL —— 作为运行时的哨兵检查;保持原样可跳过案例链接的渲染 |
| `YOUR-LOGS-DATA-VIEW-ID` | 来自 Stack Management → Data Views 的数据视图 ID |
| `YOUR_BASE64_API_KEY` | Base64 编码的 Elasticsearch API 密钥(用于直接的 `_bulk` 调用) |
| `YOUR_SLACK_WEBHOOK_URL` | Slack 入站 Webhook URL |
| `xoxb-YOUR-SLACK-TOKEN-HERE` | Slack 机器人 token(或改用 Slack 连接器) |
| `security.agent_1` | 您想要使用的 Agent Builder 代理 ID |
连接器 ID(`connector-id: "..."`)通过您空间中的 ID 来引用连接器 —— 请先通过 *Stack Management → Connectors* 创建连接器,然后将其 ID 粘贴到工作流中。
## 导入工作流
```
export KIBANA_URL="https://YOUR-DEPLOYMENT.kb.REGION.PROVIDER.elastic-cloud.com"
export KIBANA_API_KEY=""
cat workflows/triage/risky-user-signin-investigation.yaml \
| jq -Rs '{yaml: .}' \
| curl -sS -X POST "$KIBANA_URL/api/workflows" \
-H "kbn-xsrf: true" \
-H "x-elastic-internal-origin: Kibana" \
-H "Content-Type: application/json" \
-H "Authorization: ApiKey $KIBANA_API_KEY" \
-d @-
```
批量导入:
```
for f in workflows/**/*.yaml; do
echo "Importing: $f"
jq -Rs '{yaml: .}' < "$f" \
| curl -sS -X POST "$KIBANA_URL/api/workflows" \
-H "kbn-xsrf: true" \
-H "x-elastic-internal-origin: Kibana" \
-H "Content-Type: application/json" \
-H "Authorization: ApiKey $KIBANA_API_KEY" \
-d @-
done
```
空间:在路径前加上 `/s/` —— 例如 `POST /s/security/api/workflows`。
完整模式和 API 参考:[`docs/workflows-reference.md`](docs/workflows-reference.md)。
## 威胁情报仪表板
威胁情报工作流会将发现结果索引到 `threat-intel-findings` 索引中。要部署索引映射和仪表板:
```
cd workflows/threat-intel/dashboard
export KIBANA_URL="https://YOUR-DEPLOYMENT.kb.REGION.PROVIDER.elastic-cloud.com"
export KIBANA_API_KEY=""
./deploy-dashboard.sh
# 可选:从之前的运行中提取样本发现
./seed-sample-data.sh
```
## 免责声明
这些是按原样共享的示例工作流。Elastic 不提供官方支持。在对生产数据运行之前,请检查每个 YAML 及其包含的查询。请根据您的环境调整严重性阈值、回溯时间窗口和 AI 提示词。
## 许可证
[Apache 2.0](LICENSE)。
标签:AITM攻击, AI智能体, ECS, Elastic Security, Elastic Stack, Elastic Workflows, ES|QL, MFA轰炸, Okta安全, SOAR, SOC自动化, Terraform, YOSEMITE项目, 告警分诊, 威胁情报, 安全工作流, 安全调查, 安全运营, 开发者工具, 扫描框架, 流量重放, 网络安全, 误报处理, 身份威胁检测, 隐私保护