用 Claude Code + Elastic AI Agent Builder MCP 实现 Elastic Security Attack Discovery 攻击链分析
2026年5月2日 | by mebius
作者:来自 新智锦绣
环境:Elasticsearch 9.3.3 Kibana 9.3.3 Claude Ctgcodeode (claude-sonnet-4-6) Qwen3.5-plus
一、背景
Elastic Security 的 Attack Discovery 功能通过 LLM 分析多条安全告警,自动识别跨告警的攻击链并生成叙述性报告。传统方式需要在 Kibana UI 中手动操作;借助 Claude Code 的 MCP(Model Context Protocol)能力,可以直接通过对话完成从配置、调试到查询的完整过程。
本文记录了一次完整的实操对话,并附上纯手工 API/ES|QL 操作方式,供希望深入了解底层机制的读者参考。
二、通过对话实现 Attack Discovery(Claude Code 对话实录)
2.1 初始查询:发现索引为空
用户:
在 .aletgcoderts-security.attack.discovery.alerts-default 索引里查最近 24 小时所有 alert_workflow_status 为 open 的攻击发现
Claude Code 执行过程:
# 连接测试(自签名证书,需 INSECURE 模式)
ELASTICSEARCH_INSECURE=truenode scripts/esql.jstest
# ✓ Connected: Elasticsearch 9.3.3
# 查询索引文档数
curl -sk -u'elastic:***'"https://localhost:9200/.../_count"
# → {"count":0}
结论:索引存在但文档数为 0。Attack Discovery 从未运行过。
2.2 排查根因:为何未生成告警
用户:
检查最近 30 天的,我已配置 AI connector,检查为何未生成告警
Task Manager 中 1733 个任务,任务类型分布:

根本原因确认:
✅ Connector qwen 可用 测试返回 “pong”
✅ Enterprise 许可证有效 至 2026-09-09
✅ 安全告警索引有 40 条数据
❌ 从未创建 Attack Discovery 调度任务 这是根本原因
关键认知:Attack Discovery 不是自动运行的后台服务,必须显式创建调度(Schedule)才会触发 LLM 分析。仅在 Kibana UI 配置 Connector 不够——调度是独立的对象。
2.3 创建调度并触发分析
Step 1:创建调度
curl-sk-u 'elastic:***'
-XPOST"http://localhost:5601/api/attack_discovery/schedules"
-H"kbn-xsrf: true"-H"Content-Type: application/json"
-d '{"name":"每日安全攻击分析","enabled":true,
"params":{"alerts_index_pattern":".alerts-security.alerts-default",
"api_config":{"actionTypeId":".gen-ai","connectorId":"f2ee1238-...",
"model":"qwen3.5-plus","provider":"OpenAI"},
"size":100,"start":"now-30d","end":"now"},
"schedule":{"interval":"24h"},"actions":[]}'
Step 2:立即触发执行
curl-sk -u 'elastic:***'
-X POST"http://localhost:5601/internal/alerting/rule/{ID}/_run_soon"
-H"kbn-xsrf: true"-H"x-elastic-internal-origin: Kibana"
# → "Rule is already running"
2.4 查询攻击发现结果
分析完成,发现 4 条攻击链,全部为 open 状态:

2.5 攻击链详情(Ransomware Attack Chain)
LLM 生成的 details_markdown 原文:
- At 2026-04-15T08:36:32Z, WINWORD.EXE spawned powershell.exe with encoded command on host app-staging-03- At 2026-04-15T08:36:50Z, C2 connection established to 203.0.113.42:443 via PowerShell- At 2026-04-15T08:37:08Z, rundll32.exe dumped credentials from LSASS- At 2026-04-15T08:37:26Z, beacon.exe deleted shadow copies via vssadmin- At 2026-04-15T08:37:44Z, mass file encryption detected(.encrypted)- At 2026-04-15T08:38:02Z, ransom note README_RESTORE_FILES.txt dropped
2.6 深度溯源:完整攻击时间线(10 条告警)

进程父子树:
WINWORD.EXE (user: dave)
└── powershell.exe-EncodedCommand ...
├── [C2] →203.0.113.42:443
└── rundll32.exe comsvcs.dll MiniDump
└── beacon.exe
├── vssadmindeleteshadows/all/quiet
├── [batch encrypt]*.encrypted
├── README_RESTORE_FILES.txt
└── bcdedit.exe (禁用 WinRE)
三、底层操作手册:纯手工 API + ES|QL
本节面向希望脱离 Claude Code / Kibana UI、直接通过终端或 HTTP 客户端完成全流程的读者。
3.1 环境准备
exportES_URL="https://localhost:9200"
exportKB_URL="http://localhost:5601"
exportES_AUTH="elastic:YOUR_PASSWORD"
exportCONNECTOR_ID="your-connector-id"
aliascurl_es='curl -sk -u "$ES_AUTH"'
aliascurl_kb='curl -sk -u "$ES_AUTH" -H "kbn-xsrf: true"'
3.2 诊断:检查 Attack Discovery 运行状态
# 1. 检查 AD 索引文档数
curl_es "$ES_URL/.alerts-security.attack.discovery.alerts-default/_count"
# 2. 列出所有 AD 调度
curl_kb "$KB_URL/api/attack_discovery/schedules/_find"
# 3. 检查 Task Manager
curl_es "$ES_URL/.kibana_task_manager_*/_search"
-d '{"query":{"wildcard":{"task.taskType":{"value":"*attack*"}}},"size":5}'
# 4. 测试 Connector
curl_kb "$KB_URL/api/actions/connector/$CONNECTOR_ID/_execute"
-d '{"params":{"subAction":"invokeAI","subActionParams":{"messages":[{"role":"user","content":"ping"}]}}}'
3.3 创建 Attack Discovery 调度
curl_kb "$KB_URL/api/attack_discovery/schedules" -X POST
-H "Content-Type: application/json"
-d '{
"name": "每日安全攻击分析", "enabled": true,
"params": {
"alerts_index_pattern": ".alerts-security.alerts-default",
"api_config": {
"actionTypeId": ".gen-ai",
"connectorId": "$CONNECTOR_ID",
"model": "gpt-4o", "provider": "OpenAI"
},
"size": 100, "start": "now-24h", "end": "now"
},
"schedule": {"interval": "24h"}, "actions": []
}'
export SCHEDULE_ID=""
参数说明:

3.4 手动立即触发
curl_kb "$KB_URL/internal/alerting/rule/$SCHEDULE_ID/_run_soon"
-X POST -H "x-elastic-internal-origin: Kibana"
3.5 查询攻击发现结果
REST API 方式
curl_es "$ES_URL/.alerts-security.attack.discovery.alerts-default/_search"
-H "Content-Type: application/json"
-d '{"query":{"bool":{"mustgcodet":[
{"term":{"kibana.alert.workflow_status":"open"}},
{"range":{"@timestamp":{"gte":"now-24h"}}}
]}},
"_source":["kibana.alert.attack_discovery.title",
"kibana.alert.attack_discovery.summary_markdown",
"kibana.alert.attack_discovery.details_markdown",
"kibana.alert.attack_discovery.mitre_attack_tactics"],
"sort":[{"@timestamp":"desc"}],"size":20}'
ES|QL 等效写法
FROM .alerts-security.attack.discovery.alerts-default METADATA_id
| WHERE `@timestamp` > NOW() - 24 hours
AND `kibana.alert.workflow_status` == "open"
| KEEP _id,
`kibana.alert.attack_discovery.title`,
`kibana.alert.attack_discovery.summary_markdown`,
`kibana.alert.attack_discovery.details_markdown`,
`kibana.alert.attack_discovery.mitre_attack_tactics`
| SORT `@timestamp` DESC | LIMIT 20
3.6 按 ID 查询完整攻击发现详情
curl_es "$ES_URL/.alerts-security.attack.discovery.alerts-default/_doc/$AD_ID"
| python3 -c "
import sys, json
doc = json.load(sys.stdin)['_source']
ad = doc['kibana']['alert']['attack_discovery']
print(ad['title']); print(ad['details_markdown'])
"
3.7 关联原始告警溯源
FROM .alerts-security.alerts-default METADATA_id
| WHERE _id IN(
"D11_kJ0Bb_T067uw3Wd2", "Dl1_kJ0Bb_T067uw3Wd2",
"E11_kJ0Bb_T067uw3Wd2", "EF1_kJ0Bb_T067uw3Wd2",
"EV1_kJ0Bb_T067uw3Wd2", "El1_kJ0Bb_T067uw3Wd2"
)
| KEEP _id, `kibana.alert.original_time`,
`kibana.alert.rule.name`, `kibana.alert.severity`,
`host.name`, `user.name`, `process.name`,
`process.command_line`, `process.parent.name`
| SORT `kibana.alert.original_time` ASC
3.8 Attack Discovery 调度管理 API 速查

四、踩坑总结

五、结语
通过 Claude Code + Elastic AI Agent Builder MCP,整个 Attack Discovery 的配置、排障、触发、查询和溯源过程均通过自然语言对话完成,无需手动翻阅 API 文档或操作 Kibana UI。
核心流程只有三步:
-
POST /api/attack_discovery/schedules ← 创建调度(关键!)
-
POST /internal/alerting/rule/{id}/_run_soon ← 立即触发
-
ES|QL 查询结果 + 溯源原始告警
生产环境建议:
-
设置合理的 schedule.interval(如 1h 或 6h),持续监控
-
size 控制在 100~200,避免超出 LLM Token 限制
-
结合 actions 字段配置告警通知(写入 Elastic Cases 或发送到 Slack)
感谢您关注新智锦绣科技(北京)有限公司!作为 Elastic 的 Elite 合作伙伴及 EnterpriseDB 在国内的唯一代理和服务合作伙伴,我们始终致力于技术创新和优质服务,帮助企业客户实现数据平台的高效构建与智能化管理。无论您是关注 Elastic 生态系统,还是需要 EnterpriseDB 的支持,我们都将为您提供专业的技术支持和量身定制的解决方案。
文章来源于互联网:用 Claude Code + Elastic AI Agent Builder MCP 实现 Elastic Security Attack Discovery 攻击链分析