🚀 教程总览:《21天实战 Splunk AI 威胁狩猎插件开发》
课程目标:指引零基础或有一定 Python 基础的安全运营人员,跨越 Splunk 底层架构的壁垒,开发出一款具备依据PEAK威胁狩猎原理,多轮自主推导、API成本追踪、极简高管大屏的企业级 AI 安全应用,并最终将其开源至 GitHub 及提交至 Splunkbase 官方插件商店。
🟢 第一阶段:环境初始化与大模型接入 (第 1-5 天)
本阶段目标:搭建开发环境,打通 Splunk 与大模型的“任督二脉”,完成插件的骨架建设。
-
Day 1:兵马未动,粮草先行 —— 搭建极客开发环境
-
安装 WSL (Windows Subsystem for Linux) 或 Linux 虚拟机。
-
在 Linux 下通过命令行安装并启动 Splunk Enterprise 开发者环境。
-
*注册 Splunk 开发者账号并导入License。
-
达成目标:本地浏览器成功访问 Splunk Web 界面。
-
Day 2:神器降临 —— 掌握 Splunk Add-on Builder (AOB)
-
下载并安装 AOB,理解 Splunk 插件的目录结构 (
defaultvslocal)。 -
创建你的第一个插件项目,设定版本与基本信息。
-
达成目标:AOB 中成功生成插件的底层架构骨架。
-
Day 3:打通 AI 经脉 —— 大模型 API 基础与测试
-
获取大模型 API Key(OpenAI、Ollama 或国内模型代理)。
-
在外部编写 Python 脚本,测试请求大模型 API 的连通性。
-
达成目标:熟悉大模型的入参 (messages) 与出参 (JSON) 结构。
-
Day 4:安全第一 —— 配置插件全局凭证 (Setup Parameters)
-
学习 AOB 的 UI 坑点:如何在 Data Input 界面正确切换到 Setup 页面。
-
配置
base_url,model_name和加密的api_key输入框。 -
达成目标:掌握 Splunk 底层的加密密码保险箱机制。
-
Day 5:任务调度器 —— 建立后台数据输入流 (Data Inputs)
-
精简前端 UI:去掉多余字段,巧妙“劫持”系统默认的
Index作为日志查询源。 -
配置时间窗口 (Interval)、目标写入索引 (Target Index) 等核心调度参数。
-
达成目标:配置出清爽且符合原生逻辑的用户操作界面。
🔵 第二阶段:注入安全灵魂与多轮迭代逻辑 (第 6-10 天)
本阶段目标:将安全狩猎方法论转化为可执行的 Python 代码,让 AI 具备“思考与查询”的能力。
-
Day 6:连接数据之源 —— Splunk SDK for Python 实战
-
通过 Context 获取
session_key。 -
编写 SPL,利用
jobs.oneshot接口在特定时间窗口内拉取真实日志的随机样本。 -
达成目标:Python 脚本成功读取出作为基线的 5 条 Raw Log。
-
Day 7:植入顶级大脑 —— PEAK 框架与 ABLE 假设提示词工程
-
设定严酷的 System Prompt(专家人设,强制输出格式)。
-
编写 Prepare 阶段的 Prompt,引导大模型基于样本生成 ABLE 假设和初始 SPL。
-
达成目标:大模型首次能够独立编写出符合规范的探索性 SPL。
-
Day 8:自主狩猎循环 —— Execute 阶段代码编写
-
编写 For 循环,解析大模型生成的 SPL 并扔回给 Splunk 执行。
-
将查询结果截取后喂给大模型,让其验证假设并生成下一条 SPL。
-
达成目标:跑通 AI 智能体的“查询-分析-再查询”飞轮。
-
Day 9:成果落地 —— Act 阶段最终报告生成
-
编写最后一轮跳出逻辑,强制大模型总结战果。
-
产出包含执行摘要、风险打分 (Score: XX/100) 和检测工程建议的威胁狩猎报告。
-
达成目标:AI 具备给出确定性结论和高价值安全交付物的能力。
-
Day 10:初次落盘与痛点遭遇 —— 直面 JSON 截断问题
-
使用
helper.new_event将大模型的完整分析过程打包成复杂 JSON 写入 Splunk。 -
排坑实战:发现长文本导致大模型触发字数上限,JSON 结尾括号丢失导致无法解析。
-
达成目标:定位长文本嵌套 JSON 的致命缺陷,为重构埋下伏笔。
🟣 第三阶段:企业级重构与极致优化 (第 11-15 天)
本阶段目标:解决截断痛点,优化数据结构,追踪成本,打造坚不可摧的底层逻辑。
-
Day 11:对症下药 —— 强制约束与
max_tokens优化 -
在 requests 参数中加入
max_tokens: 2048提供安全冗余。 -
重构 Prompt,加入极简指令 (Max 50 words, Bullet points max)。
-
达成目标:有效压榨大模型水分,提升运行速度与格式稳定性。
-
Day 12:重塑数据模型 —— 扁平化日志 (Flat Events) 革命
-
抛弃巨大嵌套的 JSON 数组。
-
引入
uuid生成session_id,将每一次查询和最终报告拆分为独立的 Event 落盘。 -
达成目标:彻底解决截断问题,使数据天生适配 Splunk 检索和高亮。
-
Day 13:成本追踪 —— 提取大模型 API Token 消耗
-
解析大模型返回头中的
usage.total_tokens。 -
编写兼容各种大模型(官方与本地)的 Token 提取函数。
-
达成目标:将每轮 Token 和总会话 Token 消耗量永久记录进日志中。
-
Day 14:打造“防弹衣” —— 极限容错与异常处理
-
拦截非 200 HTTP 响应和
list index out of range错误。 -
编写中途崩溃时的补救逻辑,确保必定生成带有错误信息的最终报告。
-
达成目标:面对网络断流或 API 限流,任务也能优雅退出并保留现场。
-
Day 15:底层大一统 —— 代码 Review 与数据校验
-
确保所有写入日志指定
sourcetype="_json"以激活 Splunk 语法高亮。 -
在 Search 界面对最新产生的一批数据进行跨阶段的结构验证。
-
达成目标:后台核心引擎达到完美封版状态。
🟠 第四阶段:极客大屏开发与自动化运维 (第 16-18 天)
本阶段目标:绕过可视化局限,为管理层打造直观的战报大屏,建立一键恢复机制。
-
Day 16:降维打击 —— 管理层视角 Dashboard 设计
-
利用 Subsearch 和 rex 提取分数,抛弃繁杂的中间 SPL 细节。
-
构建“最近 3 次威胁狩猎报告汇总”表格面板,突出分数、耗时与成本。
-
达成目标:完成符合 SOC 负责人审美的 Dashboard XML 代码编写。
-
Day 17:绕过 AOB 前端霸权 —— 底层文件注入术
-
理解为什么 AOB 会覆盖 UI 文件。
-
学习在 WSL 环境中使用
vi编辑器的:set paste模式安全粘贴 XML,避免转义错误。 -
达成目标:成功将大屏和顶层导航栏 (Nav) 强行注入系统。
-
Day 18:从开发者到运维人 —— Shell 自动化脚本
-
编写
backup_ui.sh将配置文件备份出系统目录。 -
编写
restore_ui.sh脚本,实现一键覆盖并带鉴权刷新_reload缓存。 -
达成目标:实现 UI 环境配置的秒级“满血复活”。
🔴 第五阶段:开源、打包与官方发布 (第 19-21 天)
本阶段目标:将个人资产转化为公共资产,推向开源社区与官方插件商店。
-
Day 19:安全第一的纯净打包法
-
解析 AOB 打包报错
could not connect to App Certification的网络原因。 -
使用 Linux
tar命令,严格--exclude掉包含密钥的local目录和隐藏文件。 -
达成目标:手动产出无毒无害、干净标准的
TA-llm_analyzer-1.0.0.spl安装包。 -
Day 20:拥抱开源 —— GitHub 仓库建设与发布
-
在本地初始化 Git 仓库,编写
.gitignore忽略无用文件。 -
撰写极具专业度的
README.md(包含架构图、安装指引、功能特性)。 -
达成目标:推送代码至 GitHub,发布 v1.0 Release 版本供全球开发者下载。
-
Day 21:进军殿堂 —— Splunkbase 上架与 AppInspect 认证
-
学习使用 Splunk 官方的 AppInspect 工具(CLI版)在本地进行合规性扫描。
-
在 Splunkbase 填写插件元数据、上传图标,并提交官方安全与代码质量审核。
-
达成目标:完成所有上架流程,等待插件在官方应用商店正式上线!