企业每天产生数以亿计的安全日志,但大多数SIEM系统仅能做到存储与简单关联。ATT&CK框架提供了一套标准化的攻击战术分类,例如初始访问、执行、持久化等,让防御方可以用同一套语言描述威胁。将零散的日志事件映射到具体战术,是提升检测能力的第一步。

理解ATT&CK战术与日志数据源的关系
ATT&CK框架当前定义了十四个战术,它们不是具体技术,而是攻击者的阶段性目标。例如“凭据访问”战术下包含哈希转储、票据窃取等多种技术。企业常见的日志源包括Windows安全事件日志、Sysmon、防火墙会话记录、EDR进程树等。不同数据源能覆盖的战术广度差异很大,域控的安全日志对“横向移动”和“凭据访问”覆盖较好,而邮件网关日志更偏向“初始访问”。
在做映射前,需要先给每个数据源建立能力清单。我们可以用一张表格列出数据源名称、典型事件ID、可对应的战术。例如Windows事件ID 4624代表登录成功,结合登录类型3可映射到“横向移动”下的有效账号技术;事件ID 4688配合命令行参数能映射到“执行”战术。这种清单能避免后续规则写得太随意,也方便审计覆盖盲区。
很多团队误以为买了EDR就能自动完成战术映射,实际上EDR厂商的告警分类口径与ATT&CK并不完全一致。某国产EDR把恶意脚本执行标为“威胁拦截”,但ATT&CK中它同时属于“执行”与“防御规避”。如果直接信任设备标签,会导致战术分布图严重扭曲。因此必须回归原始字段,用统一规则重新打标。
基于规则标签的映射实现方式
最直观的映射方法是写静态规则,把某些日志特征直接绑定到战术标签。例如检测到powershell.exe带-enc参数,就打上“执行”与“防御规避”标签。这种方法实现简单,适合初期快速铺开覆盖。我们可以用SIEM的查询语言或者外部脚本完成,下面是一段Python示例,读取JSON格式日志并输出战术列表。
import json
def map_tactic(log):
tactics = []
cmd = log.get('command_line', '')
if 'powershell' in log.get('image', '') and '-enc' in cmd:
tactics.append('Execution')
tactics.append('Defense_Evasion')
if log.get('event_id') == 4624 and log.get('logon_type') == 3:
tactics.append('Lateral_Movement')
return tactics
raw = '{"image":"powershell.exe","command_line":"-enc xxx","event_id":4688}'
log = json.loads(raw)
print(map_tactic(log))
规则标签法的优势是延迟低、解释性强,运维人员一眼能看懂为什么某条日志被归到某个战术。但它依赖人工经验,面对混淆手法容易漏判。比如攻击者用wsl.exe加载Linux二进制,传统规则可能没覆盖,就漏掉了“执行”战术。因此需要定期复盘红蓝对抗结果,把新手法补进规则库。
另一个问题是标签膨胀。如果一条日志同时命中五个规则,就会映射出五个战术,让统计面板失去重点。实践中建议给规则设优先级,只保留置信度最高的两三个战术。可以用权重字段控制,例如进程创建基础权重1,命令行含编码参数权重加2,最终取总分最高的战术写入数据库。
基于行为序列的战术推断思路
当单点日志不足以定性时,可以引入时间窗口内的行为序列来做战术推断。例如某主机在十分钟内出现新服务创建、随后远程注册表连接、再出现计划任务写入,这组组合即使每条单独看都不凶险,但串起来高度符合“持久化”加“横向移动”战术链。我们可以用会话聚合脚本把同一主机资产的相关事件归并。
from collections import defaultdict
events = [
{'host':'A','tactic':'Persistence','time':1},
{'host':'A','tactic':'Lateral_Movement','time':2},
{'host':'B','tactic':'Execution','time':3}
]
group = defaultdict(list)
for e in events:
group[e['host']].append(e['tactic'])
for host, tac in group.items():
print(host, sorted(set(tac)))
行为序列法能发现隐蔽攻击,但对日志时钟同步要求高,且计算开销大。在千节点规模下,用关系型数据库做窗口聚合往往超时,通常要借助流式计算框架。它的输出也不是硬标签,而是战术置信度,例如“持久化0.7,横向移动0.5”,需要结合阈值来生成工单。
对比两种思路,规则标签适合常态化监控,行为序列适合溯源与狩猎。较成熟的运营中心会把两者结合:实时管道用规则打标保证覆盖,离线作业用序列模型找漏网之鱼。这样战术映射既不会漏掉明显信号,也能在事后补全攻击故事线,真正把ATT&CK变成可用的防御地图。
映射结果的验证与覆盖度评估
完成映射逻辑后,必须检验它是否靠谱。最简单的方法是拿历史红队报告,把报告里提到的战术当作标准答案,看系统日志能否还原出来。如果红队明确使用了“凭据访问”中的Kerberoasting,但我们的面板显示为零,就说明相关事件ID 4769的提取规则有缺口。
除了命中率,还要看战术分布是否失衡。有的团队映射完发现“发现”战术占比不到百分之三,这往往不是真的安静,而是网络探测与扫描类日志没接进来。可以用ATT&CK导航工具生成热力图,直观看到哪些战术是冷的。冷战术不一定都要补,但至少要清楚是因为无数据还是无风险。
最后提醒,战术映射不是一次性项目。攻击者战术年年微调,ATT&CK版本也会迭代,企业内部的日志格式随着设备更换而变化。建议每季度做一次映射规则评审,把废弃数据源清掉,把新上线的NDR、蜜罐数据纳入评估,才能维持一张贴近真实战场的技术地图。