reverse-skills-max: initial public release (restored, redacted, hardened)
This commit is contained in:
120
vendor-new/rev-skills/.claude/skills/re-attribution/SKILL.md
Normal file
120
vendor-new/rev-skills/.claude/skills/re-attribution/SKILL.md
Normal file
@@ -0,0 +1,120 @@
|
||||
---
|
||||
name: re-attribution
|
||||
type: atomic
|
||||
description: >
|
||||
威胁归因方法论:钻石模型、基础设施图谱、置信度分级与归因报告。
|
||||
触发词:归因、APT、attribution、攻击者身份、基础设施图谱、钻石模型、威胁组织。
|
||||
capabilities: [threat-intel]
|
||||
---
|
||||
|
||||
# 威胁归因(APT Attribution)
|
||||
|
||||
## 何时使用 / 何时不用
|
||||
|
||||
- 用:情报归因请求(「谁干的」)、多事件串并(判断几起事件是否同一活动)、基础设施关联分析、样本/能力到攻击者的推理
|
||||
- 用:受害环境的攻击者画像(时间线、TTP、基础设施特征综合)
|
||||
- 用:同组活动排查(一次事件 → 找同基础设施/同能力的其他事件,先关联再定级)
|
||||
- 不用:单个 IOC 查询(转 [[re-ti]]);恶意行为判定(转 [[re-behavior]])
|
||||
- 不用:司法证据链(刑事标准高于情报归因,本技能结论不能直接作为司法证据,见 [[gotchas]])
|
||||
- 不用:只有单角证据时做组织级归因(仅样本或仅域名不支撑归因声明,分支判断见 [[decision-tree]])
|
||||
|
||||
## 工具准备
|
||||
|
||||
### 关联查询工具(Passive DNS / 证书透明 / Whois)
|
||||
|
||||
- whois CLI(注册信息/ASN 归属):Linux `apt install whois` / `dnf install whois`;macOS `brew install whois`;Windows 用 WSL 分支(见 [[re-analyze/platform-tips]])
|
||||
- python-whois(Python 模块):多平台 `pip install python-whois`;验证: `python3 -c "import whois"`
|
||||
- dnsx(DNS 枚举):官方渠道为 Go 二进制——GitHub `projectdiscovery/dnsx` releases 或 `go install github.com/projectdiscovery/dnsx/cmd/dnsx@latest`;验证 `dnsx -version`(PyPI 同名包与官方工具无关,别混用)
|
||||
- 证书透明日志:crt.sh 网页查询(公开服务,按域名/证书指纹检索)
|
||||
- ASN 归属查询:`whois -h whois.cymru.com <IP>` 返回 AS 号与归属(Team Cymru 公开接口)
|
||||
|
||||
### MISP(情报关联与共享)
|
||||
|
||||
- Docker 部署(官方安装脚本/镜像,`apt install misp` 在发行版源不存在)或轻量替代(本地 CSV/图文件)
|
||||
- 验证: 登录 MISP UI 能创建/检索事件(轻量替代用数据导入脚本自检)
|
||||
|
||||
### 图分析(基础设施关系)
|
||||
|
||||
- 多平台: `pip install networkx`(python 图分析);验证: `python3 -c "import networkx"`
|
||||
|
||||
## 操作步骤
|
||||
|
||||
按顺序执行;全部内容脱敏处理(红线:不指向具体组织/受害者身份,只用代号与抽象描述)。
|
||||
|
||||
1. **钻石模型定位**:
|
||||
- 四角:受害者(已明确)/ 基础设施(C2 域名/IP/证书)/ 能力(工具/样本/漏洞利用)/ 对手(待推断)
|
||||
- 活动线:把事件建模为元组(时间、对手、能力、基础设施、受害者),多事件按共享元素连成活动线
|
||||
- 元数据要素:时间窗、受害域、行业属性——用于聚类与时间线(不单独作证据)
|
||||
- 四角信息表字段:每角列(已知项/未知项/来源/查询时间),未知项就是归因缺口
|
||||
- 产出:四角已知信息表 + 缺失角(归因目标)
|
||||
- 规则:只有两角以上才能开始推理;单角(仅样本)不支撑归因声明(判据见 [[decision-tree]])
|
||||
- 单角输出形态:只有 1 角时交付「情报线索」级(IOC 清单 + 特征描述),标注「未进入归因」,不写组织名
|
||||
|
||||
2. **基础设施图谱**:
|
||||
```sh
|
||||
# 域名/IP/证书关联聚类(示例流程,工具可替换)
|
||||
# 1) 收集 C2 域名/IP → whois 注册信息(注册者/邮箱/NS/ASN)
|
||||
# 2) 证书透明日志(crt.sh)查共用证书 → 关联其他域名
|
||||
# 3) dnsx 主动枚举关联子域/NS 记录(被动 DNS 接口看解析历史)
|
||||
# 4) networkx 图聚类:共享注册者/证书/NS/ASN 的节点合并
|
||||
```
|
||||
- 聚类特征按区分度排序:唯一注册邮箱/证书 > 共用 NS/ASN > 同托管商
|
||||
- 被动 DNS 关注点:域名首次解析时间、解析 IP 段切换史、历史 NS 变化(注册人操作习惯特征)
|
||||
- IP 段特征:段内其他域名的用途/注册时间(同类活动聚集是弱线索,需排除托管商批量注册)
|
||||
- Whois 隐私保护:注册信息可能匿名(GDPR 后常见)——注册者字段不可用时降级用证书/NS/行为特征交叉,标注注册信息盲区
|
||||
- 域名相似性(同后缀/typosquat)只作弱线索:注册商与注册时间都可伪造
|
||||
- 跳板/托管商共存不能作为归属证据(见坑 1 与 [[gotchas]])
|
||||
|
||||
3. **能力与样本归因**:
|
||||
- 代码复用:样本间字符串/函数/资源/导入表相似度(唯一性字符串优先)
|
||||
- TTP 对比:行为模式与已知活动对齐(对齐方式参考 [[re-behavior]] 与 ATT&CK 映射)——先粗对齐(技术大类)再细对齐(端口/参数/加密细节)
|
||||
- 时间线:活动窗口对齐(先归一 UTC 核对时区与时间来源,见坑 6)
|
||||
- 唯一性特征优先:独特字符串/编译特征/语言习惯(比通用 TTP 更有区分度)
|
||||
- 样本家族名是分析人员命名,不是归属证据(命名由分析习惯决定,见 [[gotchas]])
|
||||
- 产出:能力证据表(每条证据 → 支持/反对假设,来源可追溯)
|
||||
|
||||
4. **置信度分级**:
|
||||
- 低:单类弱证据(特征泛化,如仅共享托管商)
|
||||
- 中:两类独立证据交叉,或单类强证据(多个唯一性特征)
|
||||
- 高:三类以上 + 时间线一致 + 无矛盾证据
|
||||
- 判定:按证据类型×强度打分,规则与反例见 [[decision-tree]] 证据分级表
|
||||
- 措辞规范:低→「关联活动」;中→「疑似同一活动」;高→「高度疑似归属」;不写绝对断言(见 [[gotchas]] 声明边界)
|
||||
- 规则:无高置信度证据时声明「关联活动」而非「归属组织」;明确列出未解决的反证
|
||||
- 不设「确认」级:情报归因无 100% 断言,最高等级也保留假设前提(如「假设该基础设施未被劫持」)
|
||||
|
||||
5. **报告**:
|
||||
- 结构:结论(分级声明)→ 证据链(每角证据 + 来源)→ 置信度依据 → 反证与未决项 → 方法边界(哪些无法判定)
|
||||
- 模板(脱敏版):
|
||||
```
|
||||
# 归因报告(内部)
|
||||
- 结论:<等级> —— 与 <代号> 活动为同一活动方(置信度:中)
|
||||
- 证据链:1) 唯一注册邮箱(whois,查询时间) 2) 共用证书(crt.sh) 3) 代码唯一字符串(样本对照)
|
||||
- 反证/未决项:时间线缺口;注册信息匿名(GDPR)
|
||||
- 方法边界:未验证 C2 行为;无法判定项清单
|
||||
```
|
||||
- 结论与证据对照 [[re-analyze/analysis-contract]] 复核格式存档(结论/证据/置信度)
|
||||
- 脱敏:不公开受害者身份/真实组织名(用代号),不发表过度归因声明;对外口径与内部结论分开(分层输出)
|
||||
- 脱敏检查清单:受害者身份/组织名/域名/IP 全替换代号;截图中的主机名/用户名打码;引用原始情报前重查一遍
|
||||
|
||||
## 跨域联合
|
||||
|
||||
- [[re-ti]]:情报输入(IOC 查询与背景)
|
||||
- [[re-ioc]]:指标提取(域名/IP/哈希)
|
||||
- [[re-behavior]]:行为证据(TTP 对齐)
|
||||
- [[re-protocol]]:C2 协议分析(基础设施特征)
|
||||
- [[re-hunting]]:归因假设可转狩猎假设(「如果同一活动方进入环境,会在遥测中出现什么」)
|
||||
- [[re-feedback]]:归因案例经验沉淀(脱敏后)
|
||||
- [[re-analyze/analysis-contract]]:结论交付格式
|
||||
|
||||
## 常见坑与陷阱
|
||||
|
||||
- **基础设施重叠导致误归因**:现象——两活动共享 C2 基础设施被并为一组;原因——共用托管/被劫持基础设施;对策——区分「共享」与「控制」证据(注册信息 vs 仅托管),共享类证据降级为弱证据
|
||||
- **跳板机 ≠ 归属**:现象——经第三方跳板的活动归到跳板所有者;原因——混淆路径;对策——只把「控制面证据」(注册/配置/唯一特征)算入归属
|
||||
- **置信度虚高**:现象——单一独特性状(罕见字符串)即高置信度;原因——单证据强但无交叉验证;对策——按步骤 4 分级,单类弱证据最高「低」,单类强证据最高「中」
|
||||
- **能力共享被误读**:现象——两家活动共用工具(公开工具/租赁平台)被归为一家;原因——能力是商品化资源,不唯一;对策——工具类证据只能作弱证据,需叠加基础设施/时间线证据
|
||||
- **无证据 ≠ 排除**:现象——时间线对不齐/查不到记录即判断「无关」;原因——被动数据缺失、证据未公开;对策——标注「未发现」而非「不存在」,时间线缺口列反证
|
||||
- **时间戳/日志反取证**:现象——攻击者伪造时间戳/删除日志使时间线错位;原因——主动混淆;对策——多时间来源交叉(文件时间/日志/流量时间),标注可信度
|
||||
- **脱敏红线**:现象——报告中出现真实受害者/组织身份;原因——复制原始情报未处理;对策——报告前逐项检查(红线强制)
|
||||
- **报告口径外泄**:现象——内部结论被当作对外声明引用;原因——口径不分层;对策——内部报告与对外摘要分开版本,对外摘要只保留分级与证据概览
|
||||
- **推理链不可复核**:现象——结论无法回溯到证据;原因——假设与中间判断未记录;对策——每步假设/证据/分级全程存档(路径+时间),报告附证据索引
|
||||
- 场景分支、证据分级表与更多反例见 [[decision-tree]] / [[gotchas]]
|
||||
@@ -0,0 +1,71 @@
|
||||
# 归因决策树与证据分级
|
||||
|
||||
归因是推理链不是查询:每一步都要能回答「这条证据支持/反对哪个假设,强度多少」。本文档与 SKILL.md 步骤 1-4 配套使用。
|
||||
|
||||
## 场景决策树(输入 → 分支)
|
||||
|
||||
```
|
||||
输入请求
|
||||
├─ 单 IOC / 单个样本背景 → [[re-ti]](查询即可,不进入归因)
|
||||
├─ 行为判定「在干什么」→ [[re-behavior]]
|
||||
├─ 「是不是同一伙」多事件串并 → 归因流程(钻石模型定位)
|
||||
└─ 「谁干的」组织级归因 → 归因流程 + 置信度分级
|
||||
```
|
||||
|
||||
归因流程(钻石模型):
|
||||
|
||||
```
|
||||
四角信息盘点
|
||||
├─ 仅 1 角(只有样本或只有域名)→ 不出归因结论,输出「情报线索」级
|
||||
├─ ≥2 角且无独立证据交叉 → 「关联活动」声明(低置信度)
|
||||
├─ 2 类独立证据交叉 → 「疑似同一活动」(中置信度)
|
||||
└─ ≥3 类 + 时间线一致 + 无反证 → 「高度疑似归属」(高置信度)
|
||||
```
|
||||
|
||||
证据收集子分支(每角都走):
|
||||
|
||||
```
|
||||
证据类型 → 区分「控制」与「共享」
|
||||
├─ 控制面证据(注册邮箱/证书私钥操作/唯一配置/自研工具)→ 可计强证据
|
||||
├─ 共享面证据(托管商/跳板/公共 C2 框架/公开工具)→ 仅弱证据,不可独立归因
|
||||
└─ 时间线(活动窗口/时区校准后对齐)→ 只能佐证,不能独立定案
|
||||
```
|
||||
|
||||
## 分支逻辑说明
|
||||
|
||||
- **入口分流**:归因请求先问「有没有两角以上」,不足则退回情报级输出(单 IOC 查询归 [[re-ti]]),这是防止「一个域名归一个组织」类错误声明的第一道闸
|
||||
- **证据独立性**:两条证据来自同一条数据链(如同一份 whois 记录里的邮箱与注册者)算一类证据,不交叉;交叉 = 不同来源(whois + 证书透明 + 行为分析)
|
||||
- **强证据门槛**:唯一性特征(罕见字符串、自研工具、唯一注册信息)才可作强证据;「共用 C2 框架」等商品化特征一律弱证据
|
||||
- **时间线只作佐证**:时间窗口重叠说明「可能同时活跃」,不说明同一归属(攻击者会复用时段);时间线缺口必须显式标注
|
||||
|
||||
## 证据分级表
|
||||
|
||||
| 证据类型 | 弱 | 中 | 强 | 归因意义 |
|
||||
|---|---|---|---|---|
|
||||
| 基础设施 | 同托管商/同 C2 框架 | 共用 NS/ASN/证书 | 唯一注册邮箱/私钥/证书链 | 强证据可作核心,弱证据只作旁证 |
|
||||
| 能力/样本 | 同家族通用 TTP | 代码片段相似 | 唯一字符串/编译特征/自研模块 | 工具是商品化资源,单独不能定案 |
|
||||
| 行为/TTP | 同大类技术(ATT&CK 一级) | 同技术组合序列 | 罕见流程顺序+参数习惯 | 需要叠加其他角才升档 |
|
||||
| 时间线 | 活跃时段相近 | 时段重叠+节奏一致 | 事件序列交错(互为前置) | 只能佐证,不能独立定案 |
|
||||
| 反证 | 一条矛盾证据 | 多条矛盾证据 | 结构性矛盾(能力与声明不符) | 任何等级都要列出反证 |
|
||||
|
||||
## 置信度判定流程(组合套路)
|
||||
|
||||
1. 把每条证据按上表标档(弱/中/强)
|
||||
2. 合并同类来源(同一数据链只算一次)
|
||||
3. 统计独立证据类数(基础设施/能力/行为/时间线)
|
||||
4. 对照分级:1 类弱 = 低;2 类交叉或 1 类强 = 中;≥3 类 + 无反证 = 高
|
||||
5. 检查反证:有矛盾证据 → 降一级并写进报告「未决项」
|
||||
6. 措辞与置信度严格对应(见 [[gotchas]] 声明边界)
|
||||
|
||||
## 实现教训(内化)
|
||||
|
||||
- 「控制 vs 共享」是第一判断,不是相似度判断——先问这条证据能不能被第三方买到/租到/偷到,再谈强度
|
||||
- 证据要能复现:每条证据标注来源与查询时间(whois 记录会过期,截图存档)
|
||||
- 分级结果不是终点:高置信度声明也要写「假设前提」(如「假设该基础设施未被劫持」)
|
||||
- 归因输出是概率化陈述,报告里禁用绝对化断言
|
||||
|
||||
## 使用注意
|
||||
|
||||
- 全部在授权范围与脱敏要求内执行(不点名真实组织/受害者,见 SKILL.md 红线)
|
||||
- 结论按 [[re-analyze/analysis-contract]] 格式交付;对外报告与内部结论分离
|
||||
- 本技能结论是情报判断,不是司法证据(标准不同,见 [[gotchas]])
|
||||
@@ -0,0 +1,35 @@
|
||||
# 归因方法论坑与边界
|
||||
|
||||
## 基础设施误归因
|
||||
|
||||
- **共享 ≠ 控制**:C2 域名/服务器常被出售、出租、二次利用——「同一 C2 域名」只能说明使用过同一资源,不能说明同一组织;判断标准是注册信息/控制面痕迹(whois 邮箱、证书私钥、管理后台特征),不是 IP 或域名本身
|
||||
- **被劫持基础设施**:已退役或失守的服务器可能被多个活动方复用;若无法证明控制时间窗,证据只能计弱
|
||||
- **托管商聚集**:同一机房/托管商聚集大量恶意活动是常态,不能作为关联证据(同 NS/ASN 可作弱证据,且必须叠加其他角)
|
||||
- **Passive DNS 数据时效**:解析历史可能被缓存/污染,查询时点不同结果不同;取证性结论要标注查询时间与数据源
|
||||
|
||||
## 能力/样本证据坑
|
||||
|
||||
- **工具是商品化资源**:公开工具、框架、租赁服务任何人都能获得——「使用了某框架/公开工具」不能归因;只有自研/定制特征(独特字符串、私有协议实现细节)有区分度
|
||||
- **代码相似 ≠ 同源**:抄代码、借用开源项目、代码生成器都会产生相似;相似度阈值要按「唯一性内容占比」校准,不是整体相似度
|
||||
- **语言/伪装误导**:攻击者会故意使用其他语言/地区的字符串与习惯伪装归属(false flag)——单一语言特征只能作弱证据
|
||||
- **编译特征变化**:同一团队的构建链会变(编译器/打包方式升级),特征缺失不代表不同源;反过来说特征吻合也可能只是「同一构建工具」而非「同一团队」
|
||||
|
||||
## 时间线与反取证
|
||||
|
||||
- **时间戳伪造**:文件时间/日志时间可被改写;多时间来源(文件、日志、流量、第三方被动数据)交叉验证
|
||||
- **时区与时钟偏差**:跨时区/时钟未校准的设备产生的时间要先归一(统一 UTC)再对齐,否则「活动窗口重叠」是假象
|
||||
- **活动缺口 ≠ 活动结束**:攻击者切换基础设施/隐藏期是常态,时间线缺口要标注「未观察到」而非「不存在」
|
||||
|
||||
## 归因声明边界与反例
|
||||
|
||||
- **情报归因 ≠ 司法归因**:情报结论(概率化、分级)不满足刑事证据标准(排除合理怀疑、链式保管)——本技能输出是情报判断,移交司法场景要注明局限
|
||||
- **「无法归因」是合法结论**:证据不足时输出「关联活动」与证据清单,比强行归因更专业;声明「无法判定」并给出原因(缺角/反证/数据盲区)
|
||||
- **组织命名本身会误导**:公开标签(媒体起的代号)可能与实际归属无关;报告用可检验的描述(时间线+TTP+基础设施特征),少依赖标签
|
||||
- **反例**:仅凭「同一域名后缀」归因(域名后缀可注册);仅凭「同一样本家族名」归因(家族名是分析人员起的,不是归属证据)
|
||||
|
||||
## 使用注意
|
||||
|
||||
- 授权与脱敏红线贯穿全程:不点名真实组织/受害者,案例化描述用代号
|
||||
- 每步产物存档(whois/证书/图输出,路径 + 查询时间 + sha256,见 [[re-triage]])
|
||||
- 结论按 [[re-analyze/analysis-contract]] 交付;对外口径与内部结论分离
|
||||
- 证据时效:whois/证书数据会过期,报告标注「截至查询时点」
|
||||
Reference in New Issue
Block a user