Security Automation Evolved: From SlackOps to Programmatic SIEM Triage
演进背景:从 SlackOps 到程序化 SIEM
在 2022 年,Sourcegraph 的安全团队创建了名为 SecBot 的 Slack 机器人,旨在解决当时使用的 Elastic Security(SIEM 平台)在处理特定模式警报时的局限性。早期的 SecBot 通过调用 Elastic 或 GCP API 来丰富警报信息,并逐步集成了 Entitle 的即时权限(JIT)数据,使得安全工程师甚至可以通过手机直接查看权限详情并完成告警处置。
然而,随着业务复杂度的增加,这种依赖人工输入命令(如 @SecBot locate user)和手动查询威胁情报的方式,逐渐显露出效率瓶颈。团队意识到,要实现真正的自动化,必须将逻辑从简单的模式匹配(Pattern Matching)升级为基于表达式的程序化决策。
核心突破:基于 expr-lang 的自动化告警关闭
本次更新的核心在于利用 Go 表达式语言(expr-lang),将告警处理逻辑从静态规则迁移至动态表达式评估。这一技术突破允许团队在规则定义中直接编写逻辑判断,而无需修改底层的 SIEM 索引结构。
关键技术指标
- 自动化引擎: 基于 Go 的
expr-lang库,支持在运行时动态评估表达式。 - 数据源集成: 实时查询 GCP 资产描述、内部 HR 系统(员工部门、排班状态)及威胁情报源。
- 自动处置能力: 支持基于多条件组合(如:内部实例变更 + 员工在岗 + 平台团队)自动关闭告警。
实现逻辑示例
团队设计了一套复杂的表达式逻辑,结合 GCP 元数据与 HR 系统数据,实现了对特定场景的自动响应:
// 表达式逻辑示例
getProjectDetails(IncludedFields["cloud.project.id"]).Labels["instance-type"] == "internal"
|| (
isUserOnCall(IncludedFields["user.email"])
&& IncludedFields["enriched_employee.division"] == "Platform"
)
该逻辑能够自动识别并关闭符合以下条件的告警:
- 变更发生在内部实例(通常是 QA 或自测环境)。
- 操作者当前处于待命(On-call)状态。
- 操作者隶属于平台团队。
当满足上述条件时,SecBot 不仅会在 SIEM 中自动关闭告警,还会在 Slack 通道中以 ✅ 表情符号标记该事件,确保流程闭环且可追溯。
实际应用价值
- 降低人工排查成本: 将原本需要人工手动查询多个系统(Okta, GCP, Cloudflare)的繁琐流程,转化为自动化表达式评估,大幅减少了重复性劳动。
- 提升响应速度与准确性: 通过实时获取 GCP 资产描述和员工状态,解决了资产命名随机化导致的难以识别问题,确保告警处置的精准度。
- 构建半自主安全代理: 此次演进为后续引入半自主安全代理(Semi-autonomous Agent)奠定了基础,标志着安全运维从“辅助工具”向“主动防御”的跨越。
未来展望
在 Part 2 中,团队将深入探讨检测栈的进一步演进,包括如何构建半自主安全代理,以及如何利用 AI 技术实现更高级别的自动化决策。这一系列更新展示了 Sourcegraph 在安全工程领域持续创新、致力于通过代码理解平台赋能企业安全运营的决心。
"We decided to implement expr-lang, a Go expression evaluation library... With this in place we can now automatically close alerts that match these criteria." —— Sourcegraph 安全团队