SuperAPI AI 工具集

hunting-threats

安全与审计

查看项目

更新于 10-16 03:32

技能介绍

用途

威胁狩猎从“控制已部署、告警未触发、但对手可能仍在”这一失败假设出发。其产出通常不是确认入侵,而是新的检测规则、遥测缺口或记录在案的阴性结果。仅以“找到东西”为成功标准的狩猎会退化为确认偏误。

适用场景:主动搜索检测遗漏的入侵;测试关于攻击者行为的特定假设;将威胁情报报告落地到自有遥测;验证控制或检测在生产中确实有效;为后续异常值分析建立环境基线。

不适用场景:处理告警队列(应使用 triaging-security-alerts);确认中的事件响应(应使用 responding-to-incidents);为发现编写规则(应使用 engineering-detections);样本分析(应使用 analyzing-malware);分析数据包捕获(应使用 analyzing-network-traffic);已确认的 AWS 入侵调查(应使用 investigating-aws-incidents);指标 pivoting、追踪攻击者或产出情报成品(应使用 producing-threat-intelligence);防御的红队测试(应使用红队技能)。

主要能力

假设先于查询

无结构的日志搜索只是浏览,不是狩猎。每次狩猎都需先写下假设,格式为:具有某访问级别的对手使用某技术达成某目标,将在某数据源中产生某可观测现象,其与正常行为的判别特征是某特征。若无法指出判别特征——即恶意实例与成千上万良性实例的区别——则狩猎尚未就绪,应先研究判别特征。

假设来源:针对本行业的攻击者近期情报、无检测覆盖的 ATT&CK 技术、皇冠珠宝资产及其路径、其他工作中注意到的异常、事件后“该攻击者还会做什么”。

狩猎技术

堆叠计数(频率分析):聚合某字段,升序排序,调查稀有值。恶意活动通常稀有,商品化噪声常见。堆叠正确的字段很关键:堆叠 Image 发现异常二进制;堆叠 ParentImage, Image 发现异常关系,这是就地取材滥用(如 winword.exe → powershell.exe)出现之处。

异常值分析:同一形态,不同轴——某实体的正常是什么。例如从未使用交互式登录的服务账户现在使用了;工作站访问从未接触过的内部子网;用户在历史时段和地理位置之外认证;主机进程数基线在某日期后偏移。

分组与聚类:按共享属性聚类以发现战役,如跨无关主机的相同 JA3/JA4、相同稀有 user agent、相同证书序列号、相同工作时间、相同执行目录。

情报驱动狩猎:从报告中提取 TTP 而非 IOC 进行狩猎。报告中的哈希和 IP 已失效,其描述的行为没有。例如报告称“使用 schtasks 创建通过 rundll32 运行 DLL 的任务”,坏狩猎是搜索报告哈希,好狩猎是查找过去 90 天内所有动作引用 rundll32 的计划任务,按任务名和 DLL 路径堆叠。

高产出狩猎领域

  • 执行 via LOLBins:rundll32、regsvr32、mshta、certutil、bitsadmin、msiexec 带网络或异常参数;Linux 上 curl/wget 管道到 shell
  • 持久化:近期创建的计划任务/cron/systemd 单元;WMI 事件订阅(稀有且几乎总是恶意);run 键;新服务;authorized_keys 修改
  • 凭据访问:LSASS 句柄打开、ntds.dit 复制、卷影副本创建、Kerberos RC4 请求(4769 加密类型 0x17)、DCSync 复制权限使用
  • 横向移动:管理共享写入后跟服务创建、来自非管理主机的 WinRM/WMI、工作站到服务器的 SSH、RDP 链
  • C2:信标定时规律性、长连接、高熵或高子域基数的 DNS、稀有 JA3/JA4 的 TLS
  • 外泄:每主机出站流量异常值、归档创建后上传、来自服务器的云存储域、DNS TXT 量
  • 身份/云:新 OAuth 授权和已同意应用、服务主体凭据添加、邮件转发规则、变更窗口外的角色分配、StopLogging/trail 删除
  • 防御规避:事件日志清除(1102/104)、Sysmon 或 EDR 服务停止、AMSI/ETW 补丁指标、时间戳篡改($SI 与 $FN 不匹配)

狩猎循环

  1. 假设(书面,含判别特征)
  2. 范围(数据源、时间窗口、主机群体——预先决定)
  3. 验证(遥测是否存在并覆盖群体?)
  4. 查询(先宽后窄——预期多次迭代)
  5. 调查(每个候选解决为良性解释或升级)
  6. 结论(发现/未发现/无法确定)
  7. 转化(检测规则、遥测缺口工单或记录基线)
  8. 文档(使下一个人能重跑而非重新推导)

每次狩猎都产出工件,包括未发现任何东西的狩猎。阴性结果在记录范围和限制后即为发现,例如“在 4,200 个终端 90 天内无 X 证据;注意 620 台主机缺少所需遥测”。

范围与时间窗口

窗口应匹配驻留时间现实而非便利。若为驻留时间中位数 60 天的攻击者回看 7 天,干净结果无意义。承诺前确认保留期:90 天狩猎在 30 天保留期上会静默变为 30 天狩猎。记录所用遥测未覆盖的主机群体,下一次入侵将在此处。

狩猎命中时

停止狩猎并切换模式。先保存:在任何人触碰主机前拉取内存和分诊包。然后交给 responding-to-incidents,附上查询、原始结果和首次查看时间戳——响应团队需要知道您触碰了什么以及何时,以免您的活动污染时间线。不要在活跃可疑主机上“再检查一件事”。交互式命令会改变证据并可能惊动操作者。

应拒绝的合理化

  • “没发现,所以我们干净。”您只搜索了一个假设、一个数据集、一个窗口。写下全部三个。
  • “数据太多无法狩猎。”这正是堆叠的用途。先聚合;您找的是稀有,不是读常见。
  • “EDR 会告警。”狩猎的前提是它没有。
  • “那只是噪声。”描述噪声。“只是噪声”是植入物藏身之处,未描述的良性集群是未检验的假设。
  • “我会记得搜过什么。”您不会,您的继任者也不会。未记录的狩猎会被重复而非扩展。
  • “让我登录可疑主机看看。”您现在成了时间线的一部分,可能还是绊线。
  • “有时间才狩猎。”临时狩猎产生临时覆盖。按优先技术积压安排狩猎。

交付物

狩猎文档模板包含:名称、日期(UTC)、分析师、假设、ATT&CK 编号、范围(数据源、主机群体、时间窗口)、遥测验证(存在/部分——指出缺口)、查询(逐字,以便复现)、结果(候选发现及各自解决方式)、结论(发现/未发现/无法确定)、输出(检测规则 ID、遥测缺口工单、基线文档)、限制(本次狩猎无法看到什么)。

ATT&CK 覆盖

由 secskills-core/ttp-index.json 生成——编辑该文件,然后运行 python3 scripts/sync_attack.py --write。在报告中引用前,请对照当前 ATT&CK 版本重新验证 ID。

覆盖技术包括:持久化 TA0003(T1546.003 WMI 事件订阅);防御规避 TA0005(T1036 伪装、T1070.001 清除 Windows 事件日志、T1218 系统二进制代理执行、T1218.011 Rundll32、T1562 削弱防御、T1562.001 禁用或修改工具);收集 TA0009(T1074 数据暂存、T1560 归档收集数据);命令与控制 TA0011(T1071.004 DNS、T1219 远程访问软件、T1568 动态解析、T1572 协议隧道);外泄 TA0010(T1030 数据传输大小限制、T1048 通过替代协议外泄、T1567 通过 Web 服务外泄);影响 TA0040(T1490 抑制系统恢复、T1496 资源劫持)。

阅读外部来源

以 Markdown 获取公开公告、规范和供应商报告:

curl -sL "https://defuddle.md/<url>" # scheme in the path is optional

这剥离页面样板——散文页面约减少 78% token——并返回全文而非摘要,因此可 grep 并信任阴性结果。

三种不适用情况:JSON 和 API 响应应原始获取,因为可读性提取会破坏结构化数据;认证或 JavaScript 渲染页面应直接获取,因为该工具匿名检索;绝不要将对手基础设施(钓鱼链接、C2、恶意软件托管)、客户拥有的主机或交战 URL 路由通过它——请求会离开您的机器到第三方,对于活跃对手基础设施还会惊动操作者。

某些站点阻止提取器并返回错误块而非页面——例如 freedesktop.org 返回 {"error":"Failed to fetch: 418 I'm a teapot"}。这是获取被拒绝,不是来源说该事物不存在。在从中得出任何结论前,直接重新获取 URL。

参考

  • engineering-detections——将成功狩猎转化为经过测试的规则
  • responding-to-incidents——狩猎确认入侵时的交接
  • MITRE ATT&CK 用于假设生成;PEAK 和 TaHiTI 狩猎框架
  • Sysmon、Zeek、osquery、Velociraptor 和云审计日志作为核心遥测