关于 producing-threat-intelligence
面向安全团队和决策者的威胁情报分析技能,涵盖需求制定、指标丰富、置信度评估和行动导向报告。它强调优先使用被动数据,并依据证据进行归因。
主要功能
- 01制定面向决策的情报需求
- 02通过被动数据关联指标
- 03评估置信度与竞争假设
- 04使用 STIX、MISP 和 OpenCTI 组织数据
- 05提供含建议行动的结论
适用场景
- 01将域名、IP 或哈希关联到基础设施
- 02跟踪威胁行为者与活动
- 03评估外部报告的相关性
- 04为高管或 SOC 负责人撰写情报
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ trilwu/ secskills --skill producing-threat-intelligence安装后在 Claude Code 中输入/producing-threat-intelligence确认已加载。
详细介绍
产出威胁情报
情报不是指标的堆积,而是能够减少决策者不确定性的分析。没有背景、可信度和建议行动的 IOC 只是数据,而非情报。归因是一项必须能够以证据支撑的主张,不是披着威胁行为者名称外衣的猜测。评判成品很简单:是否有人因此做出了不同的决定?
适用场景
- 从域名、IP、哈希、TLS 证书或注册者入手,扩展查询相关基础设施
- 长期跟踪威胁行为者或活动
- 丰富原始指标并补充背景信息,将其转化为可用情报
- 为特定受众产出完整的情报产品
- 评估外部供应商或政府报告是否与组织相关
- 构建并维护与自身真正相关的对手威胁模型
不适用场景
- 搜索你自己的遥测数据以查找相关活动——使用
hunting-threats - 逆向分析特定样本——使用
analyzing-malware - 将 ATT&CK 技术 ID 映射到技能——使用
mapping-attack-techniques - 处理正在发生且已确认的事件——使用
responding-to-incidents - 将情报转化为已部署的检测规则——使用
engineering-detections
情报生命周期
每项产品都遵循同一循环。说明各阶段并非官僚主义,而是帮助你发现导致 CTI 徒劳无功的两种失误。
1. Direction — whose decision, which question (a PIR)
2. Collection — gather against the requirement, not everything reachable
3. Processing — normalize, deduplicate, translate, enrich
4. Analysis — assess, weigh hypotheses, assign confidence
5. Dissemination — deliver in a form the consumer can act on
6. Feedback — did it help; refine the next requirement
造成大部分 CTI 努力浪费的两种失误发生在循环的两端,而非中间:
- 跳过方向制定会产出无人问津的情报。如果没有优先情报需求(PIR)明确指出受众和决策,你就会收集容易获取的内容,报告有趣的内容,最终却无人过问。从问题出发,而不是从信息源出发。
- 跳过传播会导致分析永远无法影响决策。一份出色的评估报告若是放在无人阅读的 wiki 里,就什么也改变不了。产品并非写完就算完成;只有在需要采取行动的人能以所需的形式、在所需的时间看到它,才算完成。
在收集之前先写出 PIR。示例:“哪些勒索软件团伙会攻击我们的行业?它们最初的访问手法是什么?”“上周事件中的行为者可能会再次出现吗?”“这份供应商报告描述的威胁与我们有关吗?”每个问题都明确指出了受众和决策。
指标关联分析
关联分析会将一个可观测指标扩展为一幅基础设施图景。关键是先保持被动——以下每种关联分析都读取第三方数据或历史记录,不会触及对手的实时基础设施。
| 起点 | 通过什么关联 | 可发现内容 |
|---|---|---|
| 域名 / IP | 被动 DNS(PDNS) | 历史解析记录、同一 IP 上的关联域名、某域名曾使用过的 IP |
| 域名 | WHOIS / 注册历史 | 注册人邮箱、注册商、创建日期、名称服务器复用情况 |
| 域名 / IP | 证书透明度(crt.sh) | 同一证书上的其他主机名、SAN 复用情况、签发时间线 |
| IP / 服务 | TLS 指纹 — JARM(服务端)、JA3/JA3S(客户端 / 服务端握手) | 运行相同 C2 或框架默认 TLS 配置的主机 |
| Web 服务 | 网站图标哈希(Shodan http.favicon.hash、Censys) | 提供相同管理面板或登录页面的其他服务器 |
| IP / 主机 | Shodan / Censys 横幅 | 开放端口、产品版本、响应正文、自签名证书 CN |
一个完整的关联链示例:某个钓鱼域名解析(PDNS)到一个 IP;crt.sh 显示该证书的 SAN 涵盖另外四个相似域名;该 IP 的 JARM 与已知的 Cobalt Strike 默认值匹配;Shodan 根据管理面板的网站图标哈希返回另外九个提供相同界面的 IP。一个指标由此扩展为一个包含十个对象的集群,整个过程都无需联系对手。
# Certificate transparency — all certs/SANs seen for a domain
curl -s "https://crt.sh/?q=%25.example.com&output=json" | jq -r '.[].name_value' | sort -u
# Shodan: everything serving an identical favicon
shodan search "http.favicon.hash:-247388890"
# Censys: hosts presenting a given JARM fingerprint.
# Censys Platform (CenQL) prefixes every parsed field with its dataset:
censys search "host.services.jarm.fingerprint: <jarm_hash>"
# Legacy Search used the unprefixed form below. It is deprecated as of
# September 2026, so treat any older query you find as needing conversion:
# services.jarm.fingerprint: <jarm_hash>
不要惊动对手。 不要对实时 C2 执行 curl,不要从可归因于你的网络解析其域名,不要将仍在活跃的样本提交给公共多引擎扫描服务,也不要直接扫描其基础设施——这些行为都会让操作者知道你正在监视,并促使其轮换基础设施或销毁你的可见性。优先使用被动数据集。如果确实需要主动交互,应通过无法归因于你的基础设施进行,并将其作为一项有意且留有记录的决策。
确定跟踪重点的框架
菱形模型
每个入侵事件都有四个相互关联的要素:对手、能力(恶意软件、工具、漏洞利用)、基础设施(C2、暂存服务器、重定向器)和受害者。任一要素都能引出另一个要素——一种能力指向使用它的对手;基础设施则指向其他受害者。关联分析本质上就是沿着菱形的边进行遍历。将发现记录到这四个顶点中,这样零散的信息就能与下一条信息组合起来。
痛苦金字塔
不同指标给对手带来的更改成本并不相同。跟踪层级越高,对手越难受,你的情报也能存续越久。
TTPs ← hardest to change — track these
Tools
Network/Host artifacts
Domain names
IP addresses
Hash values ← trivial to change — useful now, dead tomorrow
哈希和 IP 对对手来说很容易轮换,因此基于它们构建的情报几天内就会失效。工具和 TTP 则迫使对手进行实质性重新开发。优先收集和跟踪金字塔上层的内容;将底层内容视为易过期信息,并相应地标注时间戳。
归因规范
在 CTI 中,归因是最被滥用的词。请严格区分以下两种操作:
- 聚类:根据共享的可观测特征(基础设施模式、工具、TTP、手法、时间)将活动分组。这种做法有证据支撑,也是大多数时候应该采取的做法。
- 命名:断言某个聚类就是一个已知行动者。这样一来,该行动者的历史、动机和地缘政治包袱都会随之而来,而且这种判断经常是错的。
对尚未确认的聚类,使用临时且不带定论的标签:UNC 风格的未分类标识,或你自己的内部 CLUSTER-####。只有在证据支持时,才将聚类提升为具名行动者,并说明依据是什么。“TTP 相同”是薄弱的依据:共享工具、共享漏洞利用套件和公开的作战手法,都可能让两个行动者看起来完全相同。
分析置信度与判断本身是不同的维度。请明确说明:
- 高——来自多个独立来源、彼此一致且相互印证的证据;合理的替代解释很少。
- 中——证据可信,但存在缺口或依赖单一来源,因此仍有其他解释的可能。
- 低——证据零散或缺乏佐证;该评估仍是一个工作假设。
置信度不等于你对此有多笃定。它取决于证据,以及仍然成立的替代解释有多少。
竞争性假设分析(ACH):当归因或意图存在争议时,先列出合理的假设,再列出证据,并根据每条证据与各项假设的一致程度进行评分。目标是找到能够证伪的证据——尝试推翻某项假设后仍然站得住的假设,比你一开始打算证明的假设更有说服力。
需要警惕并抵制的认知偏差陷阱:
- 镜像思维——假设对手会像你一样推理、确定优先级并采取行动。
- 确认偏误——收集并加权支持你已有结论的证据,同时贬低与之矛盾的证据。
- 锚定效应——固守最先提出的归因(通常来自供应商),且在新证据出现后调整不足。
结构化存储与标准
自由文本笔记无法组合、关联或用于自动化。从一开始就使用结构化模型存储情报。
- STIX 2.1——用于交换的语法。对象(SDO)包括
indicator、malware、threat-actor、campaign、intrusion-set、infrastructure、identity和attack-pattern;uses、targets、indicates、attributed-to等关系(SRO)用于连接这些对象。STIXindicator包含模式、有效起止时间和置信度——这些都是单独的 IOC 所不具备的上下文。 - MISP——以事件为中心的共享平台。事件包含带有类型、类别和逐属性 IDS 标志的属性(指标);知识星系附加行动者、工具和 ATT&CK 上下文;跨事件关联可揭示你的数据与合作伙伴数据之间的重叠。
- OpenCTI——知识图谱,可摄取 STIX、关联不同报告中的对象,并让你查询关系(哪些行动计划使用了这种恶意软件、某个行动者重复使用了哪些基础设施),而不必重新推导这些关系。
- TLP——共享分类标记。为每项产物添加标记:TLP:RED(仅限指定接收者)、TLP:AMBER / TLP:AMBER+STRICT(其组织,或仅限其组织)、TLP:GREEN(社区)、TLP:CLEAR(无限制)。标记会随数据一起传递;是否降低标记级别由共享方决定,接收方无权决定。
研判信息来源
信息补充会为原始观测指标添加背景信息和可信度。根据要回答的问题选择来源。
| 来源 | 可回答的问题 |
|---|---|
| VirusTotal | 检测结果、关联关系(联系过的域名、释放的文件、同源对象)、首次 / 最近出现时间、社区背景 |
| 被动 DNS(Farsight/DNSDB、SecurityTrails、Circl) | 解析历史、共托管域名、随时间变化的基础设施复用情况 |
| Shodan / Censys | 暴露的服务、横幅、证书、JARM、favicon 哈希——无需直接接触目标,即可了解面向互联网的一面 |
| GreyNoise | 某个 IP 是在扫描整个互联网(背景噪声),还是针对你发起活动 |
| URLScan | 某个 URL 实际提供的内容——页面内容、重定向、资源、屏幕截图——无需亲自浏览 |
GreyNoise 的价值在于排除干扰。 大多数被标记的 IP 都是互联网上的背景噪声——四处扫描的机会主义扫描器。GreyNoise 能告诉你某个指标是这类噪声,还是针对性的活动,让你不再把分析师的时间浪费在丰富 Shodan 爬虫的信息上,而是专注于针对组织的活动。
产出最终报告
报告才是最终成果;上游的一切都只是信息清单。报告应面向决策者,而不是供分析师欣赏自己的工作。
- 结论先行(BLUF)——在前两句话中给出评估结论和“这意味着什么”。即使读者只看完第一段,也应能得到答案。
- 可信度和来源——说明每项关键判断的分析可信度,并区分观察到的事实与评估结论。为主张标注证据来源;区分单一来源和多方佐证。
- 影响 / 建议行动——将分析与使用者的决策联系起来。他们应该采取什么行动、阻止什么、搜寻什么或优先处理什么,为什么现在就要做?没有建议行动的评估会让读者自己重新推导其影响,而大多数人不会这么做。
面向受众撰写:高管需要了解风险和决策;SOC 负责人需要了解检测结果和调查切入点。同一份底层情报可以转化为两种不同的成果。
CTI 在防御闭环中的作用
威胁情报不是最终交付物,而是防御计划其他环节的燃料,同时也会利用它们的产出。
- 它为检测提供支持:TTP 和工具可通过
engineering-detections转化为已部署的规则。交付行为特征和分级指标,而不是原始信息流。 - 它为威胁搜寻提供支持:情报报告中描述的行为(而不是已失效的 IOC)会成为
hunting-threats中的假设,并用于分析你的遥测数据。 - 它利用 ATT&CK 映射:通过
mapping-attack-techniques解析技术,这样你的产品就能与检测和威胁搜寻使用相同的分类体系,并让覆盖缺口显现出来。
无法用于检测、威胁搜寻或决策的情报,只是研究爱好,而非一种能力。
应当摒弃的合理化说法
- “指标越多,情报就越好。” 不是这样。未经优先级排序的 IOC 只是噪声,会淹没少数真正重要的指标。数量不等于价值;少量经过排序并附有上下文的指标,胜过一万条情报流。
- “这是同一个攻击者——TTP 吻合。” TTP 重叠往往意味着工具共用,并不一定是操作人员相同。公开工具包和泄露的框架会让无关团伙看起来一模一样。根据证据进行聚类;不要妄下定论。
- “供应商报告认定了,所以这就确认无疑。” 供应商的归因只是一个来源,也有自己的偏见和动机。阅读其证据,权衡后自行评估可信度——不要照搬对方的结论。
- “我们应该扫描 C2,了解更多信息。” 你刚刚告诉正在监视的操作人员你在盯着他们,他们会更换基础设施。先使用被动数据集;只有在做出审慎决定后,才从无法追溯到你的基础设施进行主动交互。
- “高可信度——感觉没错。” 可信度必须依据证据和仍然成立的替代解释数量来论证,而不是凭信念。如果你无法展示证据,就不能称为高可信度。
- “报告已经写完,任务也就完成了。” 未传达的情报不会改变任何决策。情报生命周期不会在分析结束时终止;只有在使用者采取行动,或告知你为何没有采取行动后,生命周期才算结束。
- “这份报告讲的是别人的行业,所以与我无关。” 相关性需要根据你自己的威胁模型来判断,而不是想当然。即使目标不同,TTP 也可能适用。
阅读外部来源
将公开公告、规范和供应商报告获取为 Markdown:
curl -sL "https://defuddle.md/<url>" # scheme in the path is optional
这会剔除页面中的冗余内容——在以文字为主的页面上,大约可减少 78% 的令牌——并返回全文而不是摘要,因此你可以搜索内容,并相信搜索无结果确实意味着没有匹配内容。
它不适用于三种情况。获取 JSON 和 API 响应时应直接获取原始内容,因为可读性提取会破坏结构化数据。获取需要身份验证或由 JavaScript 渲染的页面时,也应直接获取,因为它会以匿名方式检索页面。切勿通过它访问对手基础设施(钓鱼链接、C2、恶意软件托管)、客户端所有的主机或约定范围内的 URL——请求会离开你的机器并发送给第三方;对于在线的对手基础设施,这还会向操作人员暴露你的行动。
有些网站会拦截提取器,并返回错误信息而不是页面内容——例如,freedesktop.org 返回的 {"error":"Failed to fetch: 418 I'm a teapot"}。这表示获取请求遭到拒绝,并不表示来源声称该内容不存在。得出任何结论前,请直接重新获取该 URL。
参考资料
hunting-threats— 根据情报推导假设,并在你自己的遥测数据中进行验证analyzing-malware— 从样本中提取配置、能力和 IOC,为情报提供依据engineering-detections— 将跟踪的 TTP 转化为已部署的规则mapping-attack-techniques— 解析并标准化 ATT&CK 参考信息responding-to-incidents— 在事件进行期间担任使用者和来源reporting-security-findings— 完成书面报告所需的结构和措辞- MISP、OpenCTI — 用于结构化存储、关联和共享的平台
- STIX 2.1 — 用于交换的对象与关系模型
- crt.sh — 用于基础设施关联分析的证书透明度搜索
- Shodan、Censys — 面向全网的服务、横幅、JARM 和网站图标搜索
- GreyNoise — 区分互联网背景噪声与针对性活动
- VirusTotal — 提供检测、关系和丰富上下文