h.
loading
← 返回博客

紫队实验台开发复盘:用红队手法验证蓝队检测

做安全运营的人都有一个痛:告警规则一堆,但到底哪些攻击手法能检出、哪些是盲区,心里没数。 于是第二个项目我做了一个「紫队实验台」——purple-team-lab,把「红队攻击 → 蓝队检测」的验证流程做成了一个可控闭环。

这篇文章记录三个关键决策,以及两个被实验”戳出来”的检测缺口。

一、核心思路:红队的思路,蓝队的产出

紫队 = 红队 + 蓝队协作。落到工具上,我设计成四步闭环:

选用例(红队手法)→ 生成模拟告警 → 规则引擎匹配 → 覆盖率/缺口报告

最重要的设计约束是合规:所有”攻击”都是写死的示例数据(演示 IP、示例载荷特征),代码里没有任何端口扫描、发包、真实攻击逻辑,断网也能完整跑通。这既是红线,也恰好是安全从业者应展示的素质。

二、决策 1:不 fork 重框架,自研轻量引擎

调研了 Atomic Red Team(12.4k⭐ 的 ATT&CK 用例库)和 MITRE 的 CALDERA(多步攻击链编排)。两者都很重、且需要真靶机,于是借鉴它们的「用例模型 + 编排思路」,自研了一个 Sigma-lite 规则引擎:

  • 规则 = AND(多个 matcher);matcher 内 values = OR
  • 三种算子:equals(字段等值)/ contains(不区分大小写包含)/ regex
  • 每条约 10 行 JSON,安全分析师看得懂、改得动

告警字段按日常告警池口径来(数据源 / 告警名称 / 告警描述 / 源·目的 IP / 协议 / 时间),让验证结果能直接对应当天工作时看到的告警形态。

三、决策 2:12 个场景横跨 6 大战术

覆盖初始访问、执行、侦察、凭据访问、横向移动、C2:SQL 注入(UNION / 盲注)、XSS(反射 / 编码绕过)、目录爆破、SSH / Web 爆破、Webshell(冰蝎特征)、反弹 Shell、PowerShell 编码执行、PSEXEC 横移、DNS 隧道。

四、决策 3:手工埋了两个”盲区”,让报告有真话讲

如果 12 个场景全部命中,报告就是 100%,没意思。我故意设计两个现有规则检不出的场景:

  1. XSS 双重 URL 编码——规则只做明文 / 单层编码匹配,%253Cscript%253E 直接绕过;
  2. DNS 高熵隧道——规则只有特征模板(”高熵域名”关键词),没有域名熵值 / 频率统计能力。

于是每轮验证的基线是 10/12 命中、83% 覆盖率,报告页会明示缺口 + 整改方向。这比”全绿”的演示有价值得多——它演示的正是检测工程的日常:总有盲区,验证的意义就是找到它。

五、踩的坑

  1. 写规则时图省事加了个 alert( 关键词,结果双重编码样本里 alert(1) 明文还在,把”漏检场景”误判成了命中——规则特征必须精确对应绕过后的形态;
  2. node --test 传目录参数在老版本能用、Node 24 报错,直接 node --test 自动发现最稳。

六、质量与交付

  • 11 个端到端接口测试(node:test,零测试框架),其中固定断言”12 场景 = 10 检出 2 缺口”,防止规则改动悄悄改变基线
  • Vue3 黑金界面三页:场景库(勾选发起)/ 验证任务 / 检测报告(覆盖率环 + 战术条)
  • Docker Compose 一键跑

七、简历话术

独立设计紫队”攻击模拟→检测验证”实验台:12 个 MITRE ATT&CK 场景 + 自研 Sigma-lite 规则引擎(equals/contains/regex 算子、AND/OR 组合),通过受控实验识别出双重编码绕过、DNS 高熵隧道两类检测缺口并给出整改建议;全程离线数据模拟保障合规,11 个端到端测试保障基线可复现。

代码与完整文档:github.com/hedongli1/purple-team-lab。下一个目标:给 DNS 隧道补上”子域熵值统计”检测,把覆盖率从 83% 干到 100%。