01 · 狩猎循环操作规范
Sqrrl狩猎循环把威胁狩猎抽象为四阶段闭环,其核心设计思想是:每次狩猎都必须以"自动化"收尾——无论发现威胁与否,狩猎产出的查询逻辑、排除结论都应转化为可复用资产,使下一次狩猎站在更高起点上。
1.0.1 交付物填写示例(教学样板)
以下为一个按假设模板完整填写的示例,展示"一句话假设"如何展开为可执行的四件套(假设、查询、判定、固化):
假设陈述:攻击者可能通过RDP在工作站之间横向移动(ATT&CK T1021.001),
因为M-Trends 2026与CrowdStrike 2026 GTR均记录横向扩散时间窗已压缩至分钟级。
依据来源:情报——M-Trends 2026 / CrowdStrike 2026 GTR;知识库——ATT&CK T1021.001
预期观测:AD安全日志中工作站到工作站、登录类型10(RemoteInteractive)的
4624成功登录,且登录账户为用户账户(非机器账户)、登录源非运维跳板机
检索范围:近90天 × AD安全日志 × 全量工作站(按资产清单排除服务器网段)
证伪条件:查询零命中;或全部命中均可由"开发测试互访清单"解释并登记
处置分支:命中未登记来源 → 证据链归档 → 升级IR(按第5页§03证据包标准);
零命中 → 排除逻辑(为何正常流量无此特征)写入假设库注:本示例为方法论样板,字段取值需按本组织资产清单、命名约定与排除清单替换;事件编号语义以微软官方文档为准。
1.1 每次狩猎的最低交付标准
- 假设文档:一句话假设陈述 + 依据来源 + 预期观测行为 + 证伪条件。
- 查询方案:可复现的查询语句(含时间窗、数据源、过滤条件),入查询库。
- 结论记录:发现(含证据链)或未发现的排除逻辑,均标注置信度。
- 固化动作:发现→转SIGMA规则进入检测工程流程;未发现→排除逻辑写入假设库,避免重复狩猎。
02 · 假设工程方法
假设是狩猎的货币。高质量假设有三个特征:具体(指向明确行为而非"找异常")、可证伪(存在明确的推翻条件)、有依据(来自情报、知识库或环境洞察而非臆测)。
2.1 假设的三个生成来源
| 来源 | 生成方式 | 示例假设 | 适配阶段 |
|---|---|---|---|
| 威胁情报驱动 | 从情报报告、漏洞公告、行业通报中提取TTP,转化为"本组织是否存在相同行为"的假设 | "报告披露某团伙滥用云存储服务做C2——查本组织是否有进程异常连接该类域名" | HM1起步即可 |
| ATT&CK驱动 | 选取矩阵中本组织无检测覆盖或业务高相关的技术,逐项提出假设 | "攻击者可能通过RDP(T1021.001)横向移动——查非常规时段/非常规源的工作站RDP登录" | HM2主力方法 |
| 环境洞察驱动 | 结合资产清单、暴露面、历史事件、业务季节性提出本组织特有假设 | "财务结账期攻击者可能针对财务共享目录——查该目录非常规访问与批量读取" | HM3核心能力 |
2.1.1 情报TTP提取示例(示意)
假设生成的第一道工艺是"从情报文本中剥离攻击行为并翻译为查询目标"。下表展示转化链条(示例行为为领域常见技战术的通用描述,具体组织应以来源报告的原始表述为准):
| 情报观察(报告中看到什么) | 行为抽象 | ATT&CK映射 | 狩猎假设示例 |
|---|---|---|---|
| 某团伙使用PowerShell下载并执行载荷 | 脚本解释器下载执行 | T1059.001 | 是否存在非管理员账户在非工作时段执行带下载参数(-enc/-ep bypass等)的powershell.exe |
| 滥用rundll32/regsvr32执行恶意代码 | 签名系统二进制代理执行 | T1218.011 / T1218.010 | 办公进程(Office/浏览器)的子孙进程中是否出现带脚本协议或异常DLL路径的rundll32/regsvr32调用 |
| 创建服务实现持久化 | 创建或修改系统进程/服务 | T1543.003 | 近90天服务安装事件(7045)是否超出基线——重点核查服务路径指向用户可写目录或临时目录的条目 |
| 通过DNS TXT记录与外联 | 应用层协议滥用做C2 | T1071.004 | 是否存在客户端高频、高熵、长域名(或TXT查询占比异常)的DNS外联模式 |
注:本表为转化方法示意(教学用),ATT&CK技术编号可在attack.mitre.org逐项核验;真实情报消化时应逐条引用报告原文并标注页码,避免二手转述引入偏差。
2.2 假设模板(本课题推荐结构)
假设陈述:攻击者可能通过【行为描述】实现【战术目标】,因为【依据来源】。 依据来源:情报报告名称/ATT&CK技术编号/环境事件编号 预期观测:数据源A中的字段X取值Y;数据源B中的行为模式Z 检索范围:时间窗(建议≥30天回溯)× 数据源 × 资产范围 证伪条件:查询零命中,或命中均可由【已登记的正常行为】解释 处置分支:发现→证据链固化→转检测规则;未现→排除逻辑入库
为什么强调"证伪也是产出":未命中的假设排除了一类风险路径,其排除逻辑(为何正常流量会造成相似特征)是组织最稀缺的防御知识之一。没有排除清单积累的团队会反复狩猎同一假设,成本翻倍而认知不增。
03 · 狩猎执行节奏
狩猎不是一次性项目,而是有节奏的常态运营。本课题推荐"周狩猎"制:每周固定投入狩猎窗口(建议SOC在告警负载之外划出独立时段),按季度轮换战术主题(本季度聚焦横向移动、下季度聚焦凭证访问),使覆盖度沿ATT&CK矩阵均衡推进而非随缘触碰。
- 计划(周初):从假设库挑选2—4个高优先级假设,确定数据源与时间窗。
- 执行(周内):执行查询,对命中做逐条甄别(关联资产属主、业务上下文、历史基线)。
- 验证(周末前):对疑似发现做独立复核(第二人复核或换数据源交叉验证),避免单源误判。
- 固化(周末):按§01交付标准归档,更新假设库与排除清单。
04 · 遥测数据源全景
狩猎的可见性由数据源决定。下表梳理六类遥测源、典型数据内容与狩猎价值,数据质量要求贯穿其中:
| 数据源 | 典型内容 | 高价值狩猎视角 | 关键采集点 |
|---|---|---|---|
| 终端遥测 | 进程创建、命令行、镜像加载、注册表、文件落地 | LOLBins滥用、无文件攻击、持久化机制、凭证转储痕迹 | Windows进程创建审核(事件4688,需开启命令行审核)、Sysmon(进程创建事件1、网络连接3、远程线程创建8等)、EDR全量遥测 |
| 网络遥测 | 网络连接、DNS查询、代理访问、NetFlow、被动DNS | 可疑外联、DNS隧道、罕见目的地、C2心跳周期、数据渗出 | 防火墙/代理日志、DNS解析日志、NDR流量元数据、被动DNS |
| 身份遥测 | 认证事件、票据请求、权限变更、组变更 | 异常登录(非常规时段/来源/频率)、Kerberoasting、特权提升、影子账号 | AD安全事件(4624/4625登录、4672特权指派、4768/4769票据、7045服务安装、4720账号创建)、IdP登录日志(如Microsoft Entra ID) |
| 云平台遥测 | 管理面操作、IAM变更、存储访问、审计日志 | 密钥泄露滥用、权限提升、存储桶异常读取、跨区域异常操作 | AWS CloudTrail、Azure Activity Log、GCP Cloud Audit Logs、Kubernetes审计日志 |
| 应用与邮件 | 邮件网关投递与点击、Web应用访问、办公套件日志 | 钓鱼邮件落地与二次传播、邮箱规则滥用、恶意附件执行 | 邮件网关日志、Web代理、协作平台审计日志 |
| 欺骗层 | 蜜罐/蜜标/金丝雀凭证的触碰记录 | 低误报的早期预警:任何触碰即高度可疑 | 内部蜜罐会话、诱饵文件访问、金丝雀凭据使用告警 |
数据源组合原则:单一数据源只能讲半个故事。进程日志告诉你"做了什么",网络日志告诉你"和谁通信",身份日志告诉你"以谁的身份"。狩猎分析必须跨源关联(如4688进程创建 ↔ Sysmon网络连接3 ↔ DNS查询 ↔ 4624登录链),这也是第3页SIGMA规则设计logsource字段分层的根本原因。
注:Windows事件编号与Sysmon事件编号为微软官方文档定义的事件标识(Sysmon为微软Sysinternals工具,由Mark Russinovich主导开发),具体字段含义以微软官方文档为准。
4.1 数据质量六维检查表
同样的数据源,质量差异可以差出一个数量级的狩猎效率。每次狩猎假设设计前,先按六维核查数据可用性(任何一维不达标都应先走数据整改流程,而非硬写查询):
| 维度 | 检查问题 | 常见缺陷与后果 |
|---|---|---|
| 覆盖度 | 目标行为涉及的每台主机/每个账户是否都产生日志? | 笔记本与服务器策略不一致、分支/并购资产遗漏 → 命中解释时出现"看不见的死角" |
| 粒度 | 关键字段是否齐全(进程命令行、父进程、用户名、源IP)? | 4688未开启命令行审核 → LOLBins狩猎基本失效;代理只记域名不记完整URI → 渗出狩猎受限 |
| 完整性 | 是否存在日志丢失、截断、重复? | 管道缓冲区溢出静默丢日志 → 狩猎"零命中"可能是假阴性;需周期性对账(预期事件量vs实际入库量) |
| 时延 | 事件发生到可查询的间隔是多少? | 时延超过狩猎窗口 → 近实时假设无法执行;批量传输型日志源须在假设中显式声明时间窗边界 |
| 时钟一致性 | 各源时间戳是否可拼接(NTP同步状态)? | 跨源关联(4624×Sysmon×DNS)依赖统一时间轴;时钟漂移几分钟即可斩断登录链重建 |
| 规范化 | 同义字段是否统一映射(主机名大小写、账户格式、IP归属)? | 字段口径不一 → 关联查询漏配;应维护本组织数据字典并随采集变更更新 |
4.2 采集配置参考
- Sysmon配置基线:Sysmon的价值高度依赖XML配置质量。社区有成熟配置可直接研究改造——SwiftOnSecurity维护的sysmon-config仓库与Olaf Hartong维护的sysmon-modular模块化配置(均为GitHub公开项目),覆盖进程、网络、注册表等关键事件的常用裁剪方案;组织应在测试环境验证开销后再推广。
- Windows审核策略:除Sysmon外,原生审核策略需显式开启"审核进程创建"并勾选"在事件日志中包括命令行"(对应4688事件的CommandLine字段),否则进程狩猎将缺失最关键字段。
- 时间同步:所有日志源统一接入组织NTP层级;狩猎工具包中应常备"时间漂移检查脚本",在跨源关联异常时第一时间核查时钟。
- 日志量估算:留存基线落地前应做量级估算(每台Windows终端开启上述采集后,典型量级为每日数百MB至数GB事件日志,视配置裁剪而异;域控制器与DNS服务器通常高出一个量级),据此规划SIEM许可/存储与冷热分层,避免留存策略写在纸上、落地时被成本击穿。
注:Sysmon与Windows审核策略字段语义以微软官方文档为准;上述社区配置仓库以GitHub当期内容为准;日志量数值为工程经验量级,实际以本组织实测为准。
05 · 数据采集与留存基线(工程建议)
M-Trends 2026揭示的122天长驻留间谍案件意味着:回溯能力是狩猎的生死线。若遥测只留存7天,任何慢于一周的入侵对狩猎者都不可见。以下为工程实践建议(属本课题经验基线,非强制标准):
留存不足的真实代价(M-Trends 2026实证):Mandiant在2025年的一线调查中反复确认:多数组织仅保留90天以内的日志,而UNC6201/BRICKSTORM类长驻留边缘设备行动的平均活动周期远超该窗口——攻击者在"日志已删除"的时间带内自由活动,防御方既无法回溯确认入侵起点,也无法评估泄露范围。90天不是安全目标的上限,而是多数攻击行动的"起步窗口"的下限;将90天当作"合规完成线"的组织,等于主动放弃了对最危险攻击者(长驻留、慢速、高价值目标导向)的可见性。
采集合规提示:留存基线的落地须同步完成两件事:一是告知与最小化——终端与身份遥测涉及员工操作行为,采集范围限于安全分析必要字段,遵循最小必要原则;二是访问控制——狩猎查询权限按需授予、全程审计,查询结果按敏感等级管理。
06 · 查询语言组合
狩猎查询需要跨平台可移植。本课题要求每个狩猎假设的查询方案以SIGMA规则(平台无关)为规范载体,同时给出主流平台的落地写法对照:
| 语言 | 平台 | 特点与适用 |
|---|---|---|
| KQL | Microsoft Sentinel / Defender(基于Azure Data Explorer的Kusto引擎) | 强类型、管道式语法、关联分析(join/cluster)表达力强,云原生生态完整 |
| SPL | Splunk平台 | 生态最成熟、检索语言灵活、社区检测内容(如Splunk Security Content)丰富 |
| EQL | Elastic Stack | 事件序列表达能力突出(sequence语法适合描述多步攻击链),端侧代理集成紧密 |
| OSQuery | 跨平台终端SQL式查询 | 以SQL查询终端实时状态(进程、连接、启动项),适合交互式排查与基线核查 |
| EDR原生查询 | 各EDR厂商 hunt 接口 | 语义最接近遥测原始字段,用于厂商平台的深度下钻与响应联动 |
6.1 对照示例:异常RDP登录狩猎查询
假设:攻击者可能通过RDP在工作站之间横向移动(ATT&CK T1021.001)——检索"工作站到工作站的RDP登录"(服务器运维场景除外)。
// KQL(Microsoft Sentinel / Microsoft Defender XDR Advanced Hunting 同义骨架) SecurityEvent | where EventID == 4624 and LogonType == 10 // 4624=登录成功, Type 10=RemoteInteractive(RDP) | where AccountType =~ "User" // 聚焦用户账户(自动排除以$结尾的机器账户) | where Computer !endswith "-SV" // 排除服务器命名约定(按资产清单调整) | summarize dc(TargetLogonId), min(TimeGenerated), max(TimeGenerated) by Account, Computer, IpAddress | where IpAddress !in~ (已登记运维跳板机) // 排除清单:登记的合法来源
# SPL(Splunk,Windows TA 数据模型字段)—— 同义对照 index=wineventlog EventCode=4624 Logon_Type=10 | search NOT Computer="*-SV" | where NOT match(Account_Name, "\$$") // 排除机器账户(名称以$结尾) | stats earliest(_time) as first, latest(_time) as last, count by Account_Name, Computer, Source_Network_Address | search NOT Source_Network_Address IN (已登记运维跳板机)
注:上述查询为方法示意(教学用骨架),实际部署需按本组织资产清单、命名约定与排除清单调整;SecurityEvent表的AccountType字段取值(User/Machine)与Splunk Windows TA字段名以各平台数据字典为准;事件编号与字段语义以微软官方文档为准。
6.2 对照示例:办公进程派生脚本解释器(EQL)
假设:攻击者通过钓鱼文档投递宏或利用漏洞,使Office进程派生脚本解释器执行载荷(对应第3页剧本B、第6页案例D所涉攻击链的通用前置行为)。
// EQL(Elastic Stack)—— 事件序列示例:Office启动后60秒内派生脚本引擎
sequence by process.entity_id with maxspan=60s
[process where event.type == "start" and
(process.name : "winword.exe" or process.name : "excel.exe" or process.name : "outlook.exe")]
[process where event.type == "start" and
process.name in ("powershell.exe", "cmd.exe", "wscript.exe", "mshta.exe", "rundll32.exe")]6.3 对照示例:疑似DNS隧道(KQL骨架)
// KQL 教学骨架:按客户端统计"长域名、高离散"的可疑DNS查询 DnsEvents | where TimeGenerated > ago(30d) | extend NameLength = strlen(Name) | where NameLength > 52 // 隧道型域名通常显著长于常规域名 | summarize QueryCount=count(), DistinctNames=dcount(Name) by ClientIP, bin(TimeGenerated, 1h) | where DistinctNames > 30 // 单位时间内大量离散子域 | order by QueryCount desc // 命中后需人工排除CDN、杀毒云查杀等正常高频源
注:EQL的sequence语法为Elastic官方文档定义的能力;上述查询均为教学骨架,阈值需按本组织DNS基线校准,命中后必须经§07交叉验证流程后方可定性。
07 · 误报与成本控制
- 排除清单先行:任何假设执行前,先加载已登记的正常行为(运维跳板机、备份窗口、扫描器网段),从源头压噪。
- 分层收敛:查询设计遵循"宽检索→聚合→聚焦"三级收敛,先粗筛再下钻,避免逐条检查原始事件。
- 双人复核与交叉验证:疑似发现须经第二数据源独立验证(如身份日志×终端日志×网络日志三方印证),单源命中不得直接进入事件流程。
- 时间盒纪律:单次狩猎设定时间盒(如4—8小时),超时未获决定性证据即归档为"待补充数据"而非无限下钻——控制机会成本是狩猎可持续运营的前提。
本节参考来源(第2页)
以下均为真实可查的权威来源,用于支撑本页事实性表述与技术事实;全部链接经2026年9月终审核验可访问。
Sqrrl《Hunt Evil: Your Practical Guide to Threat Hunting》(狩猎循环与HMM出处):threathunting.net/files/hunt-evil-practical-guide-threat-hunting.pdf
MITRE ATT&CK技术条目T1021.001(远程桌面协议):attack.mitre.org/techniques/T1021/001;T1059(命令与脚本解释器)、T1218(系统二进制代理执行)等家族条目:attack.mitre.org
微软官方文档:审核进程创建事件(事件4688)与Sysmon实用程序说明:learn.microsoft.com/.../event-4688;learn.microsoft.com/.../sysinternals/downloads/sysmon;LogonType字段语义:learn.microsoft.com/.../event-4624
Microsoft Sentinel KQL查询语言官方文档:learn.microsoft.com/azure/data-explorer/kusto/query;Splunk SPL官方文档:docs.splunk.com/Documentation/Splunk/latest/SearchReference;Elastic EQL官方文档:elastic.co/guide/en/elasticsearch/reference/current/eql.html
OSQuery项目:osquery.io;Splunk PEAK狩猎框架:splunk.com/en_us/blog/security/peak-threat-hunting-framework.html;SwiftOnSecurity sysmon-config:github.com/SwiftOnSecurity/sysmon-config;sysmon-modular:github.com/olafhartong/sysmon-modular
Mandiant M-Trends 2026("多数组织仅保留90天以内日志"与BRICKSTORM/UNC6201长驻留观察):cloud.google.com/blog/topics/threat-intelligence/m-trends-2026