关于 threat-hunting
threat-hunting 是用于主动发现潜伏攻击者的安全狩猎技能,面向有权调查相关环境的安全人员。它采用假设驱动的方法,并要求把调查结果转化为检测规则、记录或覆盖改进。
主要功能
- 01制定具体、可测试且有范围的假设
- 02按指标、技术或异常执行狩猎
- 03涵盖端点、网络、云和身份线索
- 04将结果转为规则、记录或覆盖改进
适用场景
- 01搜索特定 ATT&CK 技术对应的行为
- 02追踪主机或用户是否接触可疑指标
- 03调查服务账户登录地理位置异常
- 04将确认的恶意活动移交事件响应
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ briiirussell/ cybersecurity-skills --skill threat-hunting安装后在 Claude Code 中输入/threat-hunting确认已加载。
详细介绍
威胁狩猎 — 主动检测对手
狩猎已经潜入内部、但尚未触发警报的对手。这不同于 incident-triage(响应式,警报正在触发),也不同于 siem-detection(编写规则,让未来触发警报)。这项技能属于主动层面——假定有东西漏过了检测,并设法找出它。
狩猎应以假设为导向,而非漫无目的地浏览。“我们来看看 SIEM 里有什么”不算狩猎;“我们来检查是否存在 Office 进程启动 T1059.001(PowerShell)这一特定模式”才算。
交叉参考:siem-detection(在此编写的查询经常会发展为检测规则)、incident-triage(狩猎确认发现后该怎么做)、breach-patterns(丰富的狩猎假设来源)、disk-forensics(对确认命中的对象进行更深入分析)、agent-supply-chain-audit(在开发者机器上狩猎恶意或被撤下的 AI 编码 Agent 扩展)、secrets-audit(其中的外传收集器域名列表可直接用于出口流量狩猎:检查服务器或 CI 运行器是否有指向 webhook.site、requestbin、ngrok 或聊天 Webhook 的 DNS / 代理命中)。
授权
仅在用户拥有或获准调查的环境中开展狩猎,并仅使用用户授权你访问的日志和遥测数据。狩猎只读取,不处置。如果狩猎发现已确认的恶意活动,请立即停止,并转交给 incident-triage,不要对主机或账户采取行动。对员工活动开展狩猎时,须严格遵守人力资源部门和法务部门的授权范围。
方法论 — PEAK 框架
PEAK(Prepare、Execute、Act、Knowledge,准备、执行、行动、知识)框架来自 Splunk SURGe,是我见过最具可操作性的狩猎方法论。
步骤 1:准备
形成假设。强有力的假设具备三个特点:
- 具体 — 指明技术、日志来源和预期痕迹
- 可测试 — 描述哪些证据可以证实或否定假设
- 范围明确 — 设定明确的时间窗口和范围
不好的假设:“在 SIEM 中查找异常”
好的假设:“在过去 30 天内,任何服务账户都不应使用 -encodedCommand 标志运行交互式 PowerShell(T1059.001 + T1027)。搜索 Sysmon 事件 1,查找父进程为服务账户启动的计划任务、子进程为 powershell.exe,且命令行包含 -enc 或 -encodedcommand 的事件。”
狩猎假设来源,按产出率排序:
| 来源 | 产出率 | 所需精力 |
|---|---|---|
| 近期事件(你方或同行的事件) | 高 | 低 — 模式具体明确 |
breach-patterns 技能目录 | 高 | 低 — 从公开泄露事件中提炼出普遍模式 |
| 尚未配置检测的 MITRE ATT&CK 技术 | 中 | 中 — 阅读该技术说明并设计狩猎方案 |
| 威胁情报报告(CrowdStrike、Mandiant、供应商报告) | 中 | 中 — 当前模式 |
| 异常:“这个数字上升了——为什么” | 低 | 低 — 通常是误报,偶尔也能发现有价值的线索 |
步骤 2:执行
运行狩猎。三种执行模式:
模式 A — 从指标切入。 从特定 IOC(IP、哈希、域名)开始,查找接触过它的任何主机或用户。
// Sentinel — pivot from a suspicious IP across all log sources
union *
| where TimeGenerated > ago(90d)
| where contains("198.51.100.42")
| project TimeGenerated, Type, Computer, _ResourceId
模式 B — 从技术切入。 从某种 ATT&CK 技术开始,查找使用该技术的任何主机。
// Splunk — T1547.001 Registry Run Keys persistence
index=sysmon EventCode=13
TargetObject="*\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\*"
| stats values(Details) by Computer, User
| where len(values(Details)) > 1
模式 C — 异常狩猎。 建立基线,查找离群值。
// Sentinel — service accounts authenticating from new geographies
SigninLogs
| where TimeGenerated > ago(30d)
| where UserType == "Service"
| summarize Countries = make_set(Location) by UserPrincipalName
| where array_length(Countries) > 1
步骤 3:行动
对每个命中,都有三种可能的结果:
| 结果 | 行动 |
|---|---|
| 确认恶意 | 立即升级并转交给 incident-triage |
| 确认无害 | 记录并继续 |
| 未知 / 无法确认 | 深入调查(主机痕迹、网络流量、用户访谈) |
不要让命中停留在“未知”状态。要么查明结果,要么记录后续步骤并转交。
步骤 4:知识
狩猎的价值不在于一次命中,而在于产出的成果。
每次狩猎后:
- 如果发现了问题,编写检测规则,让以后出现同类情况时自动触发(参见
siem-detection) - 如果没有发现问题,记录此次狩猎——查询、范围、时间窗口和结论。后续狩猎人员就不用重复调查
- 如果狩猎因日志覆盖不足而困难,记录这一缺口,并创建待办事项以修复日志接入
没有产出成果的狩猎,只是无法带来持续收益的工作。这套方法的核心,是让每次狩猎最终都能产出规则、记录一条已排除的线索,或改进日志覆盖。
高收益狩猎目录
持久化
- 在业务时间以外创建计划任务——来自 Sysmon 事件 1 的
schtasks.exe /create+ Windows 安全日志中的 EventCode 4698 - Run 键持久化——对
HKCU\...\Run、HKLM\...\Run、HKCU\...\RunOnce的注册表写入 - 在已知软件安装时间段以外安装服务——EventCode 7045
- WMI 持久化——
__EventFilter和CommandLineEventConsumer订阅 - 登录项 / 启动守护进程(macOS)——
/Library/LaunchDaemons/*.plist、~/Library/LaunchAgents/*.plist - Cron / systemd 计时器(Linux)——
/etc/cron.*、/etc/systemd/system/*.timer、用户 crontab
防御规避
- 使用
-EncodedCommand的 PowerShell——base64 编码的脚本有 80% 的可能用于规避检测 certutil.exe -decode——用于解码投放器载荷的 LOLBin- 针对非标准路径中的已知恶意 DLL 的 Sysmon EventCode 7(映像已加载)
- 从
%TEMP%、%APPDATA%、\Users\Public执行进程——非标准执行路径 - 命令行混淆模式——大量使用
^、反引号、cmd /c echo y | ...
凭据访问
- 意外进程访问 LSASS——Sysmon EventCode 10 中,TargetImage =
lsass.exe且 SourceImage 不在[mssense.exe, NisSrv.exe, ...]中 - 使用
procdump.exe或comsvcs.dll——用于转储进程的 LOLBin - 在备份时间段以外访问 NTDS.dit——域控制器数据库
- 来自新 IP 的 AWS
GetSessionToken或AssumeRole——凭据窃取后的转移操作 - 高权限范围应用的 OAuth 同意授权——参见
iam-audit
发现
net group "Domain Admins"或同类枚举命令- 针对高价值 SPN 的 AD 服务票证请求(Kerberoasting 准备)——使用 RC4 加密的 EventCode 4769
- 服务账户运行
whoami /all、quser、nltest /domain_trusts等命令——这些态势感知命令很少由人工运行 - 云 API 列举操作——来自异常主体的
ListBuckets、ListUsers、DescribeInstances
横向移动
- 通过 WMI 在远程主机上执行命令——包含
wmic.exe或Invoke-WmiMethod的 Sysmon EventCode 1 - PsExec / 远程服务创建模式——服务名称随机的 EventCode 7045
- 连接到异常主机的远程注册表连接
- SSH 密钥复用——同一个私钥在短时间内对多台主机进行身份验证
- 跨账户的 AWS / GCP
AssumeRole链——检测转移操作
收集 / 暂存 / 外传
- 单个主体大量读取云存储数据——异常的 S3 / GCS 访问模式
- 创建归档文件的模式——
Compress-Archive、7z.exe、tar、zip在用户主目录以外的目录中运行 - 查询最近注册的域名——通过 DNS 外传数据或解析 C2 信标
- 向高风险地区发起出站 TLS 连接——具体取决于组织的正常模式
- 信标模式——数小时内定期(每 N 秒 ± 抖动)连接同一目标
云平台特定
- IAM 凭证外泄模式 — 来自异常主体的
GetCredentialReport、GenerateCredentialReport - 来自异常进程 / 容器的 IMDS 访问 — 任何访问
169.254.169.254、但并非云 SDK 的行为 - 篡改 CloudTrail / 审计日志的尝试 —
StopLogging、DeleteTrail、非日志记录主体访问日志存储桶 - 短时间内由单个主体跨区域创建资源 — 横向转移或挖矿币配置
身份提供商特定
- OAuth 应用授予高范围权限(Google Workspace、M365)— 攻击者在用户密码之外实现持久化的手段
- 从新设备注册 MFA 方法 — 攻击者窃取会话后注册自己的 MFA
- 来自不可能地理位置的登录 — 超出旅行时间所能达到的地理位置跳转
- 服务账户从新的客户端 / 新 IP 进行身份验证 — 服务账户的行为应当可预测
工具
- SIEM — Splunk、Sentinel、Elastic、Chronicle、Sumo、Wazuh
- EDR — CrowdStrike(RTR)、SentinelOne(深度可见性)、Microsoft Defender(高级搜寻)、Carbon Black
- Sysmon — Windows 上的开源端点日志记录,输出到 SIEM
- osquery — 使用 SQL 查询端点状态(跨平台)
- Velociraptor — 开源实时响应和威胁搜寻框架(能力远超免费 EDR)
- Zeek — 用于流量分析的网络元数据
- MITRE ATT&CK Navigator — 覆盖范围可视化
- Hunt-Evil — 威胁搜寻手册内容(开源)
- MaxMind GeoIP — 用于基于 IP 的搜寻的地理位置查询
输出格式
# Threat Hunt Report
## Hunt name: [descriptive — e.g., "Office process → encoded PowerShell"]
## Hypothesis: [specific, testable, bounded]
## Date range: [from - to]
## Hunter: [name]
### Methodology
- ATT&CK technique(s): [TXXXX.NNN]
- Data sources queried: [list]
- Query / queries:
[the actual SIEM query]
### Findings
| Hit ID | Host / User / Resource | Outcome | Notes |
|--------|------------------------|---------|-------|
### Conclusion
- [Confirmed malicious / All benign / Inconclusive]
- [Confidence level — Low / Medium / High]
### Artifacts produced
- [ ] Detection rule added (link)
- [ ] Coverage gap documented (link)
- [ ] Negative-result documentation filed (link)
### Recommended follow-up
[Anything that needs deeper investigation, escalation, or future hunts]
边界
- 仅在用户有权访问的环境中进行威胁搜寻
- 切勿查询超出用户权限范围的 SIEM / EDR 数据——即使数据集可用,也必须遵守范围限制
- 对于确认恶意的发现,立即升级至
incident-triage——不要继续搜寻,以免惊动攻击者 - 实时响应操作(隔离主机、禁用账户)属于事件响应,而非威胁搜寻——应升级处理
- 拒绝使用威胁搜寻技术监视超出 HR / 法律授权范围的员工
- 未发现问题的搜寻结果也是有价值的证据,并非失败——应据实记录并予以认可
参考资料
- PEAK 威胁搜寻框架(Splunk SURGe)
- TaHiTI(整合威胁情报的定向搜寻)— 荷兰模型
- MITRE ATT&CK
- 《The ThreatHunter Playbook》(Cyb3rWard0g)— 开源内容
- Sigma 规则仓库 — 许多规则都可以转化为搜寻查询
- 《Practical Threat Intelligence and Data-Driven Threat Hunting》— Valentina Costa-Gazcón
- David Bianco 的《Pyramid of Pain》— IOC 价值层级
- SANS FOR508 / FOR578 课程材料
- Velociraptor 社区威胁搜寻内容