AtomicRedTeam 安装使用笔记
2023-05-18 20:53:42 # 安全

基本信息

Atomic Red Team 是一个小型并且便捷的测试框架,与 MITRE ATT&CK Framework 相对应,每种测试用例都对应一种特定的攻击策略。

官网

1
2
3
4
5
atomic-red-team	https://github.com/redcanaryco/atomic-red-team

invoke-atomicredteam https://github.com/redcanaryco/invoke-atomicredteam

invoke-atomicredteam wiki https://github.com/redcanaryco/invoke-atomicredteam/wiki

虚拟机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
192.168.4.218	Windows 10 x64

注:AtomicRedTeam 要求 PowerShell版本最低为 5.0

PS C:\Users\Administrator\Desktop> $PSVersionTable

Name Value
---- -----
PSVersion 5.1.19041.1320
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.19041.1320
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1

离线安装步骤

!!!注意,AtomicRedTeam 要求 PowerShell版本最低为 5.0,建议在 Win10 及以上进行安装测试。

准备工作

  1. 克隆下载 atomic-red-teaminvoke-atomicredteam 项目到本地

  2. 创建 D:\AtomicRedTeam 目录

  3. 复制 atomic-red-team 目录下 atomics 文件夹到此目录下

  4. 复制 invoke-atomicredteam 文件夹到此目录下

  5. Windows 安全中心添加排除项,防止被杀软隔离删除

    image-20230202160727410

PowerShell 安装 powershell-yaml 模块

参考

1
Install Execution Framework Only https://github.com/redcanaryco/invoke-atomicredteam/wiki/Installing-Invoke-AtomicRedTeam

安装

执行安装命令:

1
> Install-Module -Name powershell-yaml -Scope CurrentUser

安装截图:

image-20230202164617081

确认是否安装成功

应该有一个powershell-yaml文件夹在$HOME\Documents\PowerShell\Modules$env:ProgramFiles\PowerShell\Modules,此处为:

1
C:\Users\Administrator\Documents\WindowsPowerShell\Modules

image-20230202164914634

PowerShell 导入 Invoke-AtomicTest 模块

参考

1
https://github.com/redcanaryco/invoke-atomicredteam/wiki/Import-the-Module

临时导入

官方方法

为了使该Invoke-AtomicTest函数可用于您当前的 PowerShell 会话,您必须导入该模块。这是在您安装执行框架的 PowerShell 窗口中自动为您完成的,但是如果您启动一个新的 PowerShell 窗口,您将需要重新导入模块,可以按如下方式完成。

1
> Import-Module "C:\AtomicRedTeam\invoke-atomicredteam\Invoke-AtomicRedTeam.psd1" -Force

注意:如果您将 AtomicRedTeam 安装到不同的路径,则需要相应地调整此命令。

您可以使用 验证模块是否已安装Get-Module

自定义配置Invoke-AtomicTest 路径

此处使用此配置,AtomicRedTeam 放置在 D盘根目录下:

1
2
Import-Module "D:\AtomicRedTeam\invoke-atomicredteam\Invoke-AtomicRedTeam.psd1" -Force
$PSDefaultParameterValues = @{"Invoke-AtomicTest:PathToAtomicsFolder"="D:\AtomicRedTeam\atomics"}

注意:需加 $PSDefaultParameterValues = 命令,否则在执行 Invoke-AtomicTest 命令时会提示 Resolve-Path : 找不到路径“C:\AtomicRedTeam\atomics”,因为该路径不存在。 错误,错误如下:

image-20230202170507661

持久导入

如果您想确保Invoke-AtomicTest功能始终可用,而不必先手动导入模块,您可以将导入语句添加到您的 PowerShell 配置文件中。有关如何使用 PowerShell 配置文件的信息,请参阅 Microsoft 文档。

这是一个示例配置文件,用于在启动时导入模块并设置默认值-PathToAtomicsFolder

1
2
> Import-Module "D:\AtomicRedTeam\invoke-atomicredteam\Invoke-AtomicRedTeam.psd1" -Force
$PSDefaultParameterValues = @{"Invoke-AtomicTest:PathToAtomicsFolder"="D:\AtomicRedTeam\atomics"}

访问配置文件脚本的一种简单方法是在 PowerShell 提示符下执行以下命令。

1
> notepad $profile

在记事本中编辑并保存配置文件后,您可以重新启动 PowerShell 以使配置文件生效或执行以下命令。

1
> . $profile

错误 & 解决方案

临时导入执行命令出现错误
报错

image-20230202165144895

参考
1
Install Execution Framework Only https://github.com/redcanaryco/invoke-atomicredteam/wiki/Installing-Invoke-AtomicRedTeam

If you get an Import-Module error stating that the module “cannot be loaded because running scripts is disabled on this system”, restart powershell using powershell -exec bypass or bypass execution policy with one of these methods and try again. Method 12 is especially promising.

解决方案
1
使用 `powershell -exec bypass` 命令重新打开 PowerShell,再次执行命令。
问题解决image-20230202165705050

确认安装结果

参考

1
List Atomic Tests https://github.com/redcanaryco/invoke-atomicredteam/wiki/List-Atomic-Tests

列出 Atomic 所有用例

现在已经安装了执行框架并导入了模块,您可以开始使用它了。一个好的起点是列出可用于执行的技术编号和测试名称。

显示详情简介

使用-ShowDetailsBrief开关列出给定技术编号可用的测试。

1
Invoke-AtomicTest T1003 -ShowDetailsBrief

如果您想显示所有技术的详细信息,可以使用“全部”作为技术编号。

1
Invoke-AtomicTest All -ShowDetailsBrief

显示简要细节是一种识别与每个测试关联的原子测试编号的简单方法,然后可以使用它来指定要执行的单个测试。

显示详细信息(详细)

使用-ShowDetails开关显示测试详细信息,包括攻击命令、输入参数和给定技术编号的先决条件。

1
Invoke-AtomicTest T1003 -ShowDetails

查看所有用例确认安装结果

1
> Invoke-AtomicTest All -ShowDetailsBrief

image-20230202171430922

如上结果为安装执行成功。

测试执行

执行测试用例(本地)

此项列举不全,具体以官网 Wiki 为准。

参考

1
Execute Atomic Tests (Local) https://github.com/redcanaryco/invoke-atomicredteam/wiki/Execute-Atomic-Tests-(Local)

按用例编号执行特定攻击

执行命令:

1
2
3
Invoke-AtomicTest T1218.010 -TestNumbers 1,2
# or using the short form ..
Invoke-AtomicTest T1218.010-1,2

执行过程:image-20230202172329296

执行结果:

image-20230202172405249

执行给定技术的所有攻击

1
Invoke-AtomicTest T1218.010

执行所有测试(不建议)

1
Invoke-AtomicTest All

一个更好的方法是使用一个小的 PowerShell 脚本来一次运行每个测试,首先获取先决条件并在每个之后清理。以下示例运行所有自动 Windows 原子操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$techniques = gci C:\AtomicRedTeam\atomics\* -Recurse -Include T*.yaml | Get-AtomicTechnique

foreach ($technique in $techniques) {
foreach ($atomic in $technique.atomic_tests) {
if ($atomic.supported_platforms.contains("windows") -and ($atomic.executor -ne "manual")) {
# Get Prereqs for test
Invoke-AtomicTest $technique.attack_technique -TestGuids $atomic.auto_generated_guid -GetPrereqs
# Invoke
Invoke-AtomicTest $technique.attack_technique -TestGuids $atomic.auto_generated_guid
# Sleep then cleanup
Start-Sleep 3
Invoke-AtomicTest $technique.attack_technique -TestGuids $atomic.auto_generated_guid -Cleanup
}
}
}

从特定目录执行所有测试(不建议)

1
Invoke-AtomicTest All -PathToAtomicsFolder C:\AtomicRedTeam\atomics

执行测试用例(远程)

参考

1
Execute Atomic Tests (Remote) https://github.com/redcanaryco/invoke-atomicredteam/wiki/Execute-Atomic-Tests-(Remote)

您可以使用该Invoke-AtomicTest函数在安装了 Atomic Red Team 的系统上(本地)或通过 PowerShell 远程会话(远程)在远程计算机上运行原子测试。这些说明向您展示了如何在远程计算机上执行测试。有关在本地计算机(安装了 Invoke-AtomicTest)上执行测试的说明,请参见此处

先决条件

在安装了 Invoke-AtomicTest 的本地机器上,满足以下先决条件后,您可以在远程机器上执行原子测试。

本地计算机 远程计算机 先决条件
Windows Windows 1) Remote 必须启用 PowerShell Remoting
Windows Linux, macOS 1) 本地必须安装 PowerShell Core 2) 必须为通过 SSH 的 PowerShell 远程处理配置远程
Linux, macOS Windows 1) 本地必须安装 PowerShell Core 2) 必须为通过 SSH 的 PowerShell 远程处理配置远程

。。。

测试清理

参考

1
Cleanup After Executing Atomic Tests https://github.com/redcanaryco/invoke-atomicredteam/wiki/Cleanup-After-Executing-Atomic-Tests

按用例编号清理所有测试

1
Invoke-AtomicTest T1089 -Cleanup

按指定用例测试名称清理

1
Invoke-AtomicTest T1089 -TestNames "Uninstall Sysmon" -Cleanup

Web 页编写 YAML 测试用例

参考

1
The Atomic GUI https://github.com/redcanaryco/invoke-atomicredteam/wiki/The-Atomic-GUI

Atomic GUI 通过提供可填写的 Web 表单来帮助创建新的原子,以便生成 YAML 测试定义。这个 YAML 然后可以通过复制并粘贴到相应技术编号(例如 T1003)的 YAML 中,以便添加新的原子测试。

具体步骤

第 1 步:启动 Atomic GUI

注意:要使用 Atomic GUI,您必须先安装执行框架导入模块

在导入了 Invoke-AtomicRedTeam 模块的 PowerShell 提示符下,运行以下命令以启动 Atomic GUI。

1
Start-AtomicGUI

默认情况下,这将在端口 8487 上启动 Atomic GUI,并启动加载了 GUI 的 Web 浏览器。Web 服务器仅绑定到本地主机接口,无法从网络上的另一台计算机访问它。-Port <portNum>您可以指定与参数一起使用的不同端口号。注意:复制/粘贴功能在 Edge 中无法正常工作,请使用其他网络浏览器(启动 GUI 后,只需在其他浏览器中访问 localhost:8487)。

第一次启动 GUI 时,将根据需要安装 PowerShell 通用仪表板模块。

Stop-AtomicGUI您可以使用以下命令停止服务器运行

第 2 步和第 3 步:填写表格并生成 YAML

使用提供的 Web 表单定义新的原子。如果您不打算使用任何可选组件,则可以留空。填写表格后,单击Generate Test Definition YAML按钮。

图片

步骤 4:调整缩进

YAML 使用每行文本的缩进级别来确定哪些元素属于哪些父元素。因此,您的 YAML 的缩进与您将添加生成的 YAML 的父 YAML 文件的缩进相匹配非常重要。

使用向左和向右箭头按钮根据需要增加和减少缩进。

图片

第 5 步和第 6 步:复制 YAML 并粘贴到父技术 YAML 文件中

使用“复制”按钮将生成的 YAML 复制并粘贴到现有技术的父 YAML 文件中(例如 T1564.004.yaml)。确保新原子的 YAML 缩进与父 YAML 文件中其他原子的缩进相匹配。

卸载

参考

1
Uninstallation https://github.com/redcanaryco/invoke-atomicredteam/wiki/Uninstallation

具体步骤

删除 AtomicRedTeam 目录

手动删除 C:\AtomicRedTeam 或其它 AtomicRedTeam 自定义目录

配置还原

如配置了 PowerShell 持久化导入 Invoke-AtomicTest 模块,删除还原配置项即可。

卸载额外依赖模块

如需卸载powershell-yaml随 Invoke-AtomicRedTeam 安装一起安装的模块,首先,关闭所有 PowerShell 会话,然后从命令提示符 (Windows) 或终端 (macOS/Linux) 运行以下命令:

1
2
powershell -NoProfile -Command "Uninstall-Module powershell-yaml" # this is for Windows
pwsh -NoProfile -Command "Uninstall-Module powershell-yaml" # this is for macOS/Linux