crimsonpistil/hunt-reference

GitHub: crimsonpistil/hunt-reference

一个自包含的静态威胁狩猎工具包,将 MITRE ATT&CK 映射的网络/主机检测查询与证据驱动的 APT 归因引擎整合在单一源下,帮助分析师快速查找指标并推断幕后威胁组织。

Stars: 0 | Forks: 0

# TONK • 威胁观察与网络杀伤链 TONK 是一个单一、自包含的静态 Web 工具包,在一个落地页背后捆绑了三个威胁狩猎界面,由同一个源提供服务,因此它们共享同一个证据列表: - **NET** (`net`):一个映射了 MITRE ATT&CK 的*网络*检测参考,包含 Arkime / Kibana / Suricata 查询、APT 归因以及全球攻击者/IOC/技术搜索。 - **HOST** (`host`):*主机端*的配套工具,映射了攻击生命周期中的端点检测(Sysmon、Windows 事件、PowerShell、注册表/文件痕迹),具有相同的归因模型和开源检测参考。 - **ATTRIB** (`attribution`):一个由证据驱动的对手归因引擎,它会读取你在 NET 和 HOST 中标记的指标,并跨国家/地区对可能的威胁行为者进行排名,带有连续性保存/加载功能,使得一次狩猎能够在会话重置后存活或在机器之间转移。 因为这三者都位于同一个源下,所以 **My Hunts** 证据列表在它们之间是共享的:在 NET 或 HOST 上标记一个指标,它就会进入同一个列表,然后 ATTRIB 会将所有这些内容一起评分。 ## 概述 TONK 旨在存在于分析人员实际可以访问到的位置:加固的跳板机、实验室虚拟机或物理隔离的设备。NET 是当你在网络传输中发现了某个指标,并且需要查询语句、上下文和威胁行为者关联时,你所要寻找的参考。HOST 是将相同的理念搬到了端点上:对手在机器*内部*做了什么,以及在哪里狩猎它。ATTRIB 是分析层:一旦你在任一界面上获得了证据,它就会从你的发现反向推导谁可能是幕后黑手。它们结合在一起,涵盖了“在网络传输中快速查找”、“在主机上快速查找”以及“弄清楚它是谁”。 一切都是纯粹的 HTML、CSS 和原生 JavaScript。没有转译器、打包器、包管理器或运行时依赖。 ## 仓库结构 ``` hunt-reference/ # served at hunt.6b74.dev (one origin) index.html # landing / chooser (NET · HOST · ATTRIB) CNAME # hunt.6b74.dev .nojekyll # disables Jekyll so js/ folders serve untouched net/ # network detection reference index.html # matrix landing + global actor/keyword search recon.html # one page per ATT&CK tactic initial_access.html discovery.html lateral.html credential.html collection.html c2.html exfil.html css/style.css # shared terminal theme + matrix styles js/ core.js # renders a tactic page, filters, the hunt list/export index.js # landing-page tactic-card filter search.js # global APT/keyword search (alias-aware) actors.js # canonical actor reference: names, MITRE G-IDs, aliases data/ # one DATA file per tactic (techniques + indicators) recon.js initial_access.js discovery.js lateral.js credential.js collection.js c2.js exfil.js host/ # host-side detection reference index.html # host matrix landing execution.html # one page per host ATT&CK tactic persistence.html privilege_escalation.html defense_evasion.html css/style.css js/ core.js index.js data/ # execution.js persistence.js # privilege_escalation.js defense_evasion.js attribution/ index.html # adversary attribution engine — single-file app ``` ## 运行方式 访问实时站点 `hunt.6b74.dev`,或者通过 HTTP 提供仓库根目录服务并打开落地页: ``` cd hunt-reference python3 -m http.server 8000 ``` 然后浏览至 `http://localhost:8000/`。在落地页上,选择 NET、HOST 或 ATTRIB;每个标题栏中的切换器可以在所有这三者之间移动。 通过 HTTP 提供服务很重要:NET 全局搜索使用 `fetch()` 读取战术数据文件,而浏览器会在 `file://` 协议下阻止 `fetch()`。如果你直接从磁盘打开 `index.html`,搜索会显示一个提示来解释这一点,但工具包的其余部分仍然可以工作。ATTRIB 是自包含的,无论哪种方式都可以正常运行。 **同一个源,同一个证据列表。** 从同一个源提供所有三个界面并非偶然——这正是让 My Hunts 得以跨越 NET 和 HOST 的原因。`localStorage` 是按源划分的,因此如果这些界面被拆分到不同的子域中,它们将各自保留自己独立的狩猎列表,而 ATTRIB 永远只能看到其中一个。将它们保留在 `hunt.6b74.dev/...` 下是使共享证据流得以工作的关键。 ## NET(网络狩猎参考) 一个由 MITRE ATT&CK 组织的、基于网络可观测情况的检测矩阵。 **覆盖范围。** 8 种战术,81 种技术,348 个指标。战术包括:侦察、初始访问、发现、横向移动、凭证访问、收集、命令与控制以及数据窃取。 **每个指标的内容。** 每个指标行都提供了通俗易懂的描述、可直接复制使用的 Arkime / Kibana / Suricata 检测规则、分析师注释(狩猎方法、误报指南、补救措施)和引用。归因存在于展开卡片的 APT 选项卡中(不会拥挤地堆在列表行上),并被组织为三个明确区分的部分:**Actors**(具名威胁组织)、**Malware & Tooling**(具名恶意软件/框架,如 Emotet、Cobalt Strike)和 **Activity & Roles**(类别,如 Red Team、Insider、IAB)。将恶意软件和活动排除在 actor 字段之外,意味着蠕虫或红队注释永远不会被误认为是威胁组织的归因。注释会在相关的地方标记物理隔离和脱网触发器。 **数据模型。** 每个指标行都带有三个平行的关联数组:`apt[]`(具名威胁行为者,这是 ATTRIB 引擎进行评分比对的唯一事实来源)、`malware[]`(具名恶意软件和工具)以及 `activity[]`(操作者类别和角色)。只有 `apt[]` 会输入给归因系统;另外两个仅作为上下文参考。 **APT 归因。** Actor 标签按来源进行颜色编码(`apt-cn`、`apt-ru`、`apt-kp`、`apt-ir` 和 `apt-mul` 表示多行为者/常规恶意软件)。覆盖范围强调以基础设施为核心的行为者,网络猎人最有可能抓住这些行为者,包括对 Volt Typhoon 的深入覆盖以及 Salt Typhoon(Cisco Smart Install / CVE-2018-0171、网络设备配置转储、通过设备配置的 GRE 隧道、通过回环地址绕过 ACL 的 SSH,以及 FTP/TFTP 配置外发),此外还有 APT41、APT29、Lazarus、Scattered Spider、APT28、Sandworm、APT10、Charming Kitten、Kimsuky 等等。 **Actor 参考与别名。** 规范的 actor 参考 (`net/js/actors.js`) 将每个被追踪的 actor 映射到其 MITRE ATT&CK 组织 ID (Gxxxx) 及已知别名,这是由 MITRE ATT&CK Groups 导出生成的。当数据对一个组织使用了多个名称时,它们会合并为一个单一的规范实体(因此 APT29 / Cozy Bear / Midnight Blizzard 会解析为一个以 G 编号为锚点的 actor)。这驱动了 NET 搜索和 ATTRIB 中的别名解析。该参考是共享的:ATTRIB 从 `../net/js/actors.js` 加载它。 **全局搜索(NET 落地页)。** NET 落地页可以一次性搜索所有战术数据文件。输入一个 actor(例如 `Salt Typhoon`)即可看到标记有该 actor 的每一个指标,按战术分组,每一个都直接链接到其战术页面上的技术。搜索具有别名感知能力:它通过 `actors.js` 将任何已知的名称或别名解析为其规范的 actor,因此 `Cozy Bear`、`Midnight Blizzard` 和 `APT29` 都会返回相同的指标,而一个从未在数据中出现的报告名称(例如 `Vanguard Panda`)仍然能找到其所属 actor 的行(Volt Typhoon)。非 actor 的查询会退化为对技术 ID/名称、指标文本、注释和引用的关键字匹配(因此 `portproxy`、`GRE`、`T1090`、`TFTP` 都可以被解析)。快捷 actor 芯片会展示被引用次数最多的具名 actor,通过规范名称合并,因此别名不会分裂成重复的芯片。在机制上,搜索将每个数据文件作为文本获取,并在一个隔离的作用域内对其进行评估,从而绕过了每个数据文件都声明自己的 `const DATA` 这一事实,并避免了对数据文件本身的任何更改。 **按战术过滤。** 每个战术页面都有自己的搜索框和 APT 过滤按钮,可就地缩小指标列表的范围。 ## HOST(主机端狩猎参考) NET 的端点伴侣:NET 覆盖对手在网络传输中的行为,而 HOST 覆盖它们在机器内部的行为——进程执行、持久化、权限提升和防御规避。 **覆盖范围。** 4 种战术,69 种技术,129 个指标,横跨 Windows 和 Linux。战术:执行、持久化、权限提升和防御规避。 **每个指标的内容。** 每个主机指标都带有针对端点调整的检测遥测数据:关键 Sysmon / Windows 事件签名、可直接粘贴的 Kibana KQL、PowerShell 狩猎代码片段、注册表和文件痕迹、对手工具归因,以及对开源检测项目(Sigma、Velociraptor、Hayabusa、Falco 等)的引用。每一行都标有其所适用的操作系统(Windows、Linux)。 **相同的归因模型。** HOST 使用与 NET 相同的 `apt[]` / `malware[]` / `activity[]` 关联模型以及相同的来源分类,因此主机指标的 actor 标签与网络指标一样都会输入给 ATTRIB。结合了主机和网络证据的狩猎会被作为一个单一的证据体进行评分。 **关于一致性的说明。** HOST 目前未加载 `actors.js`,因此别名折叠适用于 NET 搜索和 ATTRIB 评分,但尚未适用于 HOST 自身的页面内过滤。将共享的 actor 参考折叠到 HOST 中是一个自然的后续工作。 ## ATTRIB(对手归因) 一个单文件应用 (`attribution/index.html`),回答了一线分析师的工作问题:*根据我发现的线索,谁可能是幕后黑手?* 它是证据驱动的,并且预先不假设有任何对手,同时对网络和主机证据一起进行评分。 **读取你的狩猎证据。** 加载时,ATTRIB 会直接读取你在 NET 和 HOST 中标记的指标(`localStorage` 的键 `hunt_reference_hunts_v1`)。无需重新输入,也无需在工具之间来回切换。因为所有三个界面都共享同一个源,所以这就是狩猎界面写入的同一个列表。来源徽章显示了当前证据的来源(实时狩猎工具、已加载的状态文件或 CSV 导入)。 **评分。** 对于证据集中的每一个指标,引擎都会遍历该指标的 `apt` 归因数组,并对具名 actor 进行排名。Actor 名称会通过 `actors.js` 解析为规范实体,因此别名会折叠为一个排名的 actor(APT29 / Cozy Bear / Midnight Blizzard 会算在一起,而不是作为三个),单个指标上的同组织别名会被去重,因此它们不会被重复计算。评分是跨国界的,没有硬编码的名册:它会对证据指向的任何 actor 进行排名,因此添加新指标(无论网络还是主机,针对任何 actor,任何国家/地区)都会自动丰富归因结果。默认模型是 **distinctiveness + corroboration**:一个只命名了一个 actor 的指标会给该 actor 满分,而一个命名了八个的指标会将分数平分成八份,因此具有显著性的指标会胜过大众标记的指标;一个在多种不同技术中出现的 actor 在此基础上还会获得轻微的佐证奖励。还提供了一个 **FLAT** 评分切换开关以供比较,在该模式下,每个指标中的每个具名 actor 都得分相同。通用/常规标签(`apt-mul`、"Multi"、"Ransomware" 等)将完全排除在具名排名之外,并单独展示。 **置信度差距。** 由于绝对分数是任意的,因此引擎将重点放在前两名候选人之间的**差距** 上,这才是真正的分析产物。这种差距会得到明确的分类:STRONG LEAN、MODERATE LEAN、WEAK LEAN 或 TOSS-UP,因此读数不仅告诉你谁排名第一,还告诉你与第二名的差距有多大。 **对模糊性保持诚实。** 通用/常规归因会作为单独的一行展示,而不是被隐藏起来。当很大一部分证据属于常规攻击手法时,ATTRIB 会坦率地说明(“无法强烈归因于单一具名 actor”),这样微弱的信号就不会被包装成自信的判断。分析师设置的严重性会显示在每个指标旁边,但不会影响分数;分数只看重该技术是否出现。 **视角。** 国家视角(ALL / CHINA / RUSSIA / IRAN / DPRK)将排名过滤到一个来源分类,或者显示所有内容。它是在一个引擎上的视图,而不是相互隔离的独立页面。 **连续性。** 由于仅仅依靠 `localStorage` 是脆弱的(清除浏览器或重置设备都会丢失进行中的狩猎),ATTRIB 将文件视为记录系统: - *Save state* 将完整的证据集下载为带有时间戳、模式版本化的 `.json`(包含每个指标、严重性和时间戳;而不仅仅是 CSV 视图)。 - *Load state* 将保存的 `.json` 恢复到引擎中。加载过程是**受保护的替换**:如果你加载了未保存的证据,它会发出警告,并提议在覆盖之前保存当前状态。 - *CSV import* 摄取 `hunt_package.csv` 导出文件,作为在另一台机器上发生的狩猎的备选方案。CSV 没有归因列,因此 ATTRIB 会尽可能从实时狩猎数据中恢复归因,并在无法做到时如实报告。 - *Autosave checkpoint* 会定期将工作集序列化到 `localStorage` (`attribution_autosave_v1`),并在加载时从中恢复,将最坏情况下的丢失窗口缩短到几分钟。 ## My Hunts(跨 NET + HOST 的共享证据) NET 和 HOST 都允许你将任何指标加星标到运行中的狩猎列表中(每行上有一个星标切换开关)。该列表保存在 `localStorage` 的 `hunt_reference_hunts_v1` 键下,可在打开的标签页之间实时同步,允许你为每个指标设置严重性,并可以出为 TXT 或 CSV,打包成适配 CMS 的格式以便导入 TheHive。每个标星项目都存储了完整的行数据,包括 `apt` 归因数组,这使得后续的归因成为可能,而无需重新输入任何内容。由于 NET、HOST 和 ATTRIB 共享同一个源,因此这是一个跨越这三者的单一列表:在网络和主机上进行加星标,然后将它们一起进行归因。 ## 浏览器和服务说明 - 通过 HTTP 提供服务(例如 `python3 -m http.server`);NET 全局搜索的 `fetch()` 在 `file://` 下会被阻止。 - 目前未设置 Content-Security-Policy。NET 搜索使用 `new Function(...)` 解析数据文件,严格的 CSP 会阻止这一操作。如果以后添加了 CSP,要么允许 `'unsafe-eval'`,要么将解析器切换为注册表方法。 - 仓库根目录下存在 `.nojekyll` 文件,以便 GitHub Pages 原封不动地提供 `js/` 文件夹的服务(否则 Jekyll 可能会破坏它不期望的文件和文件夹)。 - `CNAME` 将仓库绑定到 `hunt.6b74.dev`。在仓库根目录下刚好只有一个。
标签:ATT&CK框架, 多模态安全, 威胁归因, 端点检测, 网络流量分析, 自定义脚本, 静态网页