mitre-attack/attack-navigator
GitHub: mitre-attack/attack-navigator
MITRE ATT&CK Navigator 是一个用于对 ATT&CK 矩阵进行交互式导航、可视化注释和自定义图层管理的 Web 应用。
Stars: 2403 | Forks: 693
# ATT&CK® Navigator
ATT&CK Navigator 旨在提供对 [ATT&CK](https://attack.mitre.org) 矩阵的基本导航和注释功能,这正是人们如今使用 Excel 等工具所做的事情。我们将其设计得简单且通用——你可以使用 Navigator 来可视化你的防御覆盖率、红/蓝队规划、检测到的技术的频率或任何其他你想做的事情。Navigator 不受限制——它只允许你操作矩阵中的单元格(颜色编码、添加注释、分配数值等)。我们认为拥有一个简单易用的矩阵可视化工具将有助于更轻松地使用 ATT&CK。
Navigator 的主要功能是允许用户定义 layer(图层)——即 ATT&CK 知识库的自定义视图——例如,仅显示特定平台的技术,或突出显示已知特定对手会使用的技术。Layer 可以在 Navigator 中以交互方式创建,也可以通过编程方式生成,然后通过 Navigator 进行可视化。
## 用法
ATT&CK Navigator 通过 GitHub Pages 实时托管。[你可以在此处找到当前版本的 Navigator 实时实例](https://mitre-attack.github.io/attack-navigator)。你可以在 [USAGE](/USAGE.md) 文档中阅读更多关于如何使用该应用程序本身的信息(该文档在应用程序的帮助页面中也有镜像)。
ATT&CK Navigator 4.0 及以上版本在单个应用程序实例中支持所有 ATT&CK 域,而不需要每个域使用不同的实例。此外,旧版本的 ATT&CK 也可以加载到应用程序中。ATT&CK Navigator 支持 ATT&CK 4 及以上版本。由于数据模型过于陈旧,旧版本无法在应用程序中运行。
为了满足想要更经典体验的用户,Navigator 应用程序的过往版本也通过 GitHub Pages 进行了托管:
| ATT&CK 版本 | Navigator 版本 | 域 | |
|:---------------|:------------------|:--------|-|
| [ATT&CK v7.2](https://attack.mitre.org/resources/versions/) | [Navigator v3.1](https://github.com/mitre-attack/attack-navigator/releases/tag/v3.1) | [Enterprise](https://mitre-attack.github.io/attack-navigator/v3/enterprise/) | [Mobile](https://mitre-attack.github.io/attack-navigator/v3/mobile/) |
| [ATT&CK v6.3](https://attack.mitre.org/resources/versions/) | [Navigator v2.3.2](https://github.com/mitre-attack/attack-navigator/releases/tag/v2.3.2) | [Enterprise](https://mitre-attack.github.io/attack-navigator/v2/enterprise/) | [Mobile](https://mitre-attack.github.io/attack-navigator/v2/mobile/) |
有关如何在本地设置 ATT&CK Navigator 的信息,请参阅[安装并运行](#Install-and-Run)。
**重要提示:** 访问我们托管在 GitHub Pages 上的 Navigator 实例时上传的 layer 文件**不会**被存储在服务器端,因为 Navigator 是一个仅限客户端的应用程序。但是,如果你的 layer 文件包含任何敏感内容,我们仍然建议你安装并运行自己的 ATT&CK Navigator 实例。
请使用我们的 [GitHub Issue Tracker](https://github.com/mitre-attack/attack-navigator/issues) 让我们了解你遇到的任何 bug 或其他问题。如果你以一种很酷的方式扩展了 Navigator 并希望回馈社区,我们也鼓励你提交 pull request!
## 环境要求
* [Node.js v22](https://nodejs.org)
* [AngularCLI v19](https://cli.angular.io)
## 支持的浏览器
* Chrome
* Firefox
* Internet Explorer 11[1]
* Edge
* Opera
* Safari[2]
**[1]** 在 Internet Explorer 上,SVG 导出功能存在一个已知问题。由于该浏览器中的 SVGElements [缺少某项功能](https://developer.mozilla.org/en-US/docs/Web/API/ParentNode/children),在该浏览器中导出的 SVG 中,文本将无法正确地垂直居中。为了获得最佳效果,我们建议切换到更现代的浏览器。
**[2]** ATT&CK Navigator 仅支持 Safari 14 及以上版本,因为旧版本的浏览器在选择 layer 选项卡时可能会出现无法修复的冻结现象。在打开应用程序时,不受支持的浏览器版本用户将收到关于此可能性的警告。
## 安装并运行
### 初始设置
1. 导航到 **nav-app** 目录:
```
cd nav-app/
```
2. 安装依赖项:
```
npm install
```
### 开发
#### 本地
启动 Angular 开发服务器:
```
ng serve
```
在浏览器中打开 。
#### 使用 Docker
构建并运行开发环境的 Docker 容器:
```
docker build -f Dockerfile.dev -t nav-app-dev .
docker run -p 4200:4200 nav-app-dev
```
在浏览器中打开 。
### 部署
#### 为部署而构建
编译应用程序:
```
ng build --configuration production
```
输出文件将位于 `nav-app/dist/browser/`。
#### 使用 Docker 运行
构建并运行 Docker 容器:
```
docker build -t nav-app-prod .
docker run -p 8080:80 nav-app-prod
```
在浏览器中打开 。
### 离线运行
使用上述任一选项安装或构建 Navigator。然后,将其配置为从本地文件加载内容(请参阅[从本地文件加载内容](#loading-content-from-local-files))。最新的 MITRE ATT&CK 数据文件可以在这里找到:
* [Enterprise ATT&CK](https://github.com/mitre-attack/attack-stix-data/raw/master/enterprise-attack/enterprise-attack.json)
* [Mobile ATT&CK](https://github.com/mitre-attack/attack-stix-data/raw/master/mobile-attack/mobile-attack.json)
* [ICS ATT&CK](https://github.com/mitre-attack/attack-stix-data/raw/master/ics-attack/ics-attack.json)
## 文档
在浏览器中查看 Navigator 时,点击右上角的 **?** 图标以查看应用程序内文档。
## Layers 文件夹
**layers** 文件夹包含 layer 格式的规范,以及示例 layer 和一个演示以编程方式生成 layer 的脚本。随着新脚本的实现,我们将继续向此 repository 添加内容。此外,如果你想在这里添加新功能,欢迎随时创建 pull request!
有关如何使用和开发 layer 的更多信息,可以在 ATT&CK Navigator 文档中找到(在浏览器中运行应用程序时点击 **?** 即可查看),以及 **layers** 文件夹中的 README 中找到。
## 添加自定义右键菜单选项
要使用 Navigator 中的数据为 **ATT&CK® Navigator** 右键菜单创建自定义选项,必须将对象添加到 `nav-app/src/assets/config.json` 中标记为 `custom_context_menu_options` 的数组中。每个对象必须具有 **label** 属性(即在右键菜单中显示的文本)和 **url** 属性(即用户导航到的地址)。
要在 url 中利用右键单击的技术的数据,可以在字符串中添加由双花括号包围的参数。例如:如果右键单击的技术的 attackID 是 T1098,则在自定义选项中使用 `http://www.someurl.com/{{technique_attackID}}}` 作为 url 将导向 `http://www.someurl.com/T1098`。
将解析以下数据替换:
* `{{technique_attackID}}` 将被替换为该技术的 ATT&CK ID,例如 `T1234`
* `{{technique_stixID}}` 将被替换为该技术的 STIX ID,例如 `attack-pattern--12345678-1234-1234-1234-123456789123`
* `{{technique_name}}` 将被替换为小写且空格替换为连字符的技术名称,例如 `example-technique-name`
* `{{tactic_attackID}}` 将被替换为该战术的 ATT&CK ID,例如 `TA1234`
* `{{tactic_stixID}}` 将被替换为该战术的 STIX ID,例如 `x-mitre-tactic--12345678-1234-1234-1234-123456789123`
* `{{tactic_name}}` 将被替换为小写且空格替换为连字符的战术名称,例如 `example-tactic`。这也相当于该战术的 x_mitre_shortname 属性。
或者,可以在自定义选项中添加 `subtechnique_url` 字段。当该选项用于子技术时,将解析此字段,而不是用于技术的常规 URL。如果不使用 `subtechnique_url`,则上面定义的 `technique_` 替换将指向子技术对象本身。
对于子技术,将解析以下替换:
* `{{parent_technique_attackID}}` 将被替换为该子技术父级的 ATT&CK ID,例如 `T1234`
* `{{parent_technique_stixID}}` 将被替换为该子技术父级的 STIX ID,例如 `attack-pattern--12345678-1234-1234-1234-123456789123`
* `{{parent_technique_name}}` 将被替换为小写且空格替换为连字符的子技术父级名称,例如 `example-technique-name`
* `{{subtechnique_attackID}}` 将被替换为该子技术的 ATT&CK ID,例如 `T1234.001`
* `{{subtechnique_attackID_suffix}}` 将被替换为该子技术 ATT&CK ID 中位于分隔点之后的部分,例如 `001`
* `{{subtechnique_stixID}}` 将被替换为该子技术的 STIX ID,例如 `attack-pattern--98765432-9876-9876-9876-987654321987`
* `{{subtechnique_name}}` 将被替换为小写且空格替换为连字符的子技术名称,例如 `example-subtechnique-name`
* `{{tactic_attackID}}` 将被替换为该战术的 ATT&CK ID,例如 `TA1234`
* `{{tactic_stixID}}` 将被替换为该战术的 STIX ID,例如 `x-mitre-tactic--12345678-1234-1234-1234-123456789123`
* `{{tactic_name}}` 将被替换为小写且空格替换为连字符的战术名称,例如 `example-tactic`。这也相当于该战术的 x_mitre_shortname 属性。
自定义右键菜单对象示例:
```
{
"label": "view technique on ATT&CK website",
"url": "https://attack.mitre.org/techniques/{{technique_attackID}}",
"subtechnique_url": "https://attack.mitre.org/techniques/{{parent_technique_attackID}}/{{subtechnique_attackID_suffix}}"
}
```
```
{
"label": "view tactic on ATT&CK website",
"url": "https://attack.mitre.org/tactics/{{tactic_attackID}}"
}
```
## 加载内容的方法
### 从 Collection Index 加载内容
默认情况下,Navigator 从托管在 [ATT&CK STIX Data repository](#related-mitre-work) 上的 ATT&CK Collection Index 加载内容。有关 Collection Index 的更多信息可以在[这里](https://github.com/mitre-attack/attack-stix-data?tab=readme-ov-file#collection-indexes)找到。
1. 修改位于 `src/assets` 目录中的 `config.json` 文件。
2. 将 `collection_index_url` 属性设置为你的 Collection Index 的 URL(例如,`"collection_index_url": "https://raw.githubusercontent.com/mitre-attack/attack-stix-data/master/index.json"`)
*注意:要使 Navigator 成功加载,必须定义 `collection_index_url` 属性、`versions` 属性,或者同时定义两者。如果同时定义了 `collection_index_url` 和 `versions` 属性,Navigator 将在“Create New Layer”界面的“More Options”下拉菜单下显示这些版本的并集。如果两者均未定义,将触发警报提示 Navigator 加载失败。*
### 从 TAXII 服务器加载内容
目前支持 TAXII 2.0 和 TAXII 2.1。对 TAXII 2.0 的支持将于 2024 年 12 月废弃。有关 TAXII 2.1 服务器的更多信息可以在[这里](https://github.com/mitre-attack/attack-workbench-taxii-server/tree/main)找到。
1. 修改位于 `src/assets` 目录中的 `config.json` 文件。
2. 在 `versions` 部分,将 `enabled` 属性设置为 `true`。
3. 在域列表中定义 `taxii_url` 属性,代替域的 `data` 属性,并将其值设置为 TAXII 服务器的 URL。
4. 定义 `taxii_collection` 属性,并将其值设置为由 TAXII 服务器确定的 collection UUID。
#### 从 TAXII 2.0 服务器加载内容的示例:
```
"versions": {
"enabled": true,
"entries": [
{
"name": "Enterprise TAXII 2.0 Data",
"version": "14",
"domains": [
{
"name": "Enterprise",
"taxii_url": "https://cti-taxii.mitre.org/",
"taxii_collection": "95ecc380-afe9-11e4-9b6c-751b66dd541e"
}
]
}
]
},
```
#### 从 TAXII 2.1 服务器加载内容的示例:
```
"versions": {
"enabled": true,
"entries": [
{
"name": "Enterprise TAXII 2.1 Data",
"version": "14",
"domains": [
{
"name": "Enterprise",
"taxii_url": "https://attack-taxii.mitre.org/",
"taxii_collection": "x-mitre-collection--1f5f1533-f617-4ca8-9ab4-6a02367fa019"
}
]
}
]
},
```
### 从本地文件加载内容
可以使用由 STIX 对象的 bundle 组成的文件来填充 Navigator,其格式类似于[此示例](https://raw.githubusercontent.com/mitre/cti/master/enterprise-attack/enterprise-attack.json)。支持 STIX 2.0 和 STIX 2.1 bundle。
1. 将 STIX bundle 放在 `src/assets` 目录中。这允许托管 Navigator 的服务器也托管该数据。
2. 修改位于 `src/assets` 目录中的 `config.json` 文件。
3. 在 `versions` 部分,将 `enabled` 属性设置为 `true`。
4. 将 `data` 数组中指定的 URL 更新为 STIX bundle 的路径(例如,`assets/enterprise-attack.json`)。可以向 `data` 数组中添加多个路径,以便在单个实例中显示多个 STIX bundle。
#### 从本地文件加载内容的示例:
```
"versions": {
"enabled": true,
"entries": [
{
"name": "Local Enterprise STIX Data",
"version": "14",
"domains": [
{
"name": "Enterprise",
"identifier": "enterprise-attack",
"data": ["assets/enterprise-attack.json"]
}
]
}
]
},
```
## 初始化时加载默认 Layer
可以对 Navigator 进行配置,以便在初始化时加载一组 layer。这些 layer 可以来自网络和/或来自本地文件。
要加载的本地文件应放在 `nav-app/src/assets/` 目录中。
1. 将 `src/assets/config.json` 中 `default_layers` 的 `enabled` 属性设置为 `true`
2. 将所需默认 layer 的路径添加到 `default_layers` 中的 `urls` 数组里。例如,
"default_layers": {
"enabled": true,
"urls": [
"assets/example.json",
"https://raw.githubusercontent.com/mitre-attack/attack-navigator/master/layers/samples/Bear_APT.json"
]
}
将会从本地 assets 目录加载 `example.json`,并从此 repo 在 Github 上的示例 layer 文件夹加载 `Bear_APT.json`。
3. 加载/重新加载 Navigator
也可以使用 Navigator URL 中的查询字符串来设置网络的默认 layer。有关更多详细信息,请参阅应用程序内帮助页面的“Customizing the Navigator”部分。
如果默认 layer 已过时,将不会提示用户将其升级到当前版本的 ATT&CK。
## 在 Navigator 中启用 Banner
`nav-app/src/assets/config.json` 中的 `banner` 设置默认为空字符串 `"""`(并且不可见),可以将其设置为任何你希望在 Navigator 网页顶部的 banner 中显示的内容。banner 支持在内容中使用 HTML 和超链接。
## 禁用 Navigator 功能
`nav-app/src/assets/config.json` 中的 `features` 数组列出了你可能想要禁用的 Navigator 功能。在配置文件中将某个功能的 `enabled` 字段设置后将隐藏所有与该功能相关的控件元素。
但是,如果上传的 layer 包含与该功能相关的注释或配置,它将不会被隐藏。例如,如果禁用了 `comments`,添加新评论注释的功能将被移除,但是如果上传的 layer 中包含评论,它们仍然会在工具提示中显示,并以带有下划线的方式标记。
也可以使用 _create customized Navigator_ 功能来禁用相关功能。有关更多详细信息,请参阅应用程序内帮助页面的“Customizing the Navigator”部分。
## 在网页中嵌入 Navigator
如果你想将 Navigator 嵌入到网页中,请使用 iframe:
```
```
如果你想嵌入一个移除了特定功能(例如选项卡、添加注释)或带有默认 layer 的 Navigator 版本,我们建议使用 _create customized Navigator_ 功能。我们强烈建议在嵌入 Navigator 时通过这种方式禁用“leave site dialog”,否则每次尝试离开嵌入页面时你都会收到警告。有关更多详细信息,请参阅应用程序内帮助页面的“Customizing the Navigator”部分。
以下是一个 iframe 示例,它嵌入了我们带有移除选项卡和添加注释功能的 [*Bear APTs](layers/samples/Bear_APT.json) layer:
```
```
## 相关的 MITRE 项目
### CTI
以 STIX 2.0 JSON 格式表示的 ATT&CK 目录的 [Cyber Threat Intelligence repository](https://github.com/mitre/cti)。
### ATT&CK STIX 数据
以 STIX 2.1 JSON 格式表示的 ATT&CK 目录的 [ATT&CK STIX Data repository](https://github.com/mitre-attack/attack-stix-data)。
### ATT&CK
ATT&CK® 是一个经过精心策划的网络对手行为知识库和模型,反映了对手生命周期的各个阶段以及已知他们会针对的平台。ATT&CK 可用于了解针对已知对手行为的安全风险、规划安全改进,并验证防御措施是否按预期工作。
### STIX
Structured Threat Information Expression (STIX™) 是一种用于交换网络威胁情报 (CTI) 的语言和序列化格式。
STIX 使组织能够以一致且机器可读的方式彼此共享 CTI,从而使安全社区能够更好地了解他们最有可能遇到的基于计算机的攻击,并更快、更有效地预测和/或响应这些攻击。
STIX 旨在改善许多不同的能力,例如协作威胁分析、自动化威胁交换、自动化检测和响应等。
## 声明
版权所有 2024 The MITRE Corporation
获批公开发行;分发不受限制。案件编号 18-0128。
根据 Apache License, Version 2.0(“许可证”)获得许可;
除非遵守该许可证,否则你不得使用此文件。
你可以在以下网址获取许可证副本:
除非适用法律要求或书面同意,否则根据该许可证分发的软件均按“原样”基础分发,
不附带任何明示或暗示的保证或条件。
请参阅该许可证以了解管辖该许可证下的权限和限制的具体语言。
本项目使用了 ATT&CK®
[ATT&CK® Terms of Use](https://attack.mitre.org/resources/terms-of-use/)
标签:MITM代理, 可视化工具, 威胁建模, 安全管理, 自动化攻击, 请求拦截