mcpField
T
threat-hunting

threat-hunting

github.com/briiirussell安全483351 次安装2 天前更新
代码仓库

关于 threat-hunting

threat-hunting 是用于主动发现潜伏攻击者的安全狩猎技能,面向有权调查相关环境的安全人员。它采用假设驱动的方法,并要求把调查结果转化为检测规则、记录或覆盖改进。

主要功能

  1. 01制定具体、可测试且有范围的假设
  2. 02按指标、技术或异常执行狩猎
  3. 03涵盖端点、网络、云和身份线索
  4. 04将结果转为规则、记录或覆盖改进

适用场景

  1. 01搜索特定 ATT&CK 技术对应的行为
  2. 02追踪主机或用户是否接触可疑指标
  3. 03调查服务账户登录地理位置异常
  4. 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:准备

形成假设。强有力的假设具备三个特点:

  1. 具体 — 指明技术、日志来源和预期痕迹
  2. 可测试 — 描述哪些证据可以证实或否定假设
  3. 范围明确 — 设定明确的时间窗口和范围

不好的假设:“在 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 社区威胁搜寻内容

评论

支持 Markdown