基本信息
Atomic Red Team 是一个小型并且便捷的测试框架,与 MITRE ATT&CK Framework 相对应,每种测试用例都对应一种特定的攻击策略。
官网
1 | atomic-red-team https://github.com/redcanaryco/atomic-red-team |
虚拟机
1 | 192.168.4.218 Windows 10 x64 |
离线安装步骤
!!!注意,AtomicRedTeam 要求 PowerShell版本最低为 5.0,建议在 Win10 及以上进行安装测试。
准备工作
克隆下载 atomic-red-team 和 invoke-atomicredteam 项目到本地
创建
D:\AtomicRedTeam
目录复制 atomic-red-team 目录下 atomics 文件夹到此目录下
复制 invoke-atomicredteam 文件夹到此目录下
Windows 安全中心添加排除项,防止被杀软隔离删除
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 |
安装截图:
确认是否安装成功
应该有一个powershell-yaml
文件夹在$HOME\Documents\PowerShell\Modules
或$env:ProgramFiles\PowerShell\Modules
,此处为:
1 | C:\Users\Administrator\Documents\WindowsPowerShell\Modules |
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 | Import-Module "D:\AtomicRedTeam\invoke-atomicredteam\Invoke-AtomicRedTeam.psd1" -Force |
注意:需加 $PSDefaultParameterValues =
命令,否则在执行 Invoke-AtomicTest 命令时会提示 Resolve-Path : 找不到路径“C:\AtomicRedTeam\atomics”,因为该路径不存在。
错误,错误如下:
持久导入
如果您想确保Invoke-AtomicTest
功能始终可用,而不必先手动导入模块,您可以将导入语句添加到您的 PowerShell 配置文件中。有关如何使用 PowerShell 配置文件的信息,请参阅 Microsoft 文档。
这是一个示例配置文件,用于在启动时导入模块并设置默认值-PathToAtomicsFolder
。
1 | > Import-Module "D:\AtomicRedTeam\invoke-atomicredteam\Invoke-AtomicRedTeam.psd1" -Force |
访问配置文件脚本的一种简单方法是在 PowerShell 提示符下执行以下命令。
1 | > notepad $profile |
在记事本中编辑并保存配置文件后,您可以重新启动 PowerShell 以使配置文件生效或执行以下命令。
1 | > . $profile |
错误 & 解决方案
临时导入执行命令出现错误
报错
参考
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 usingpowershell -exec bypass
or bypass execution policy with one of these methods and try again. Method 12 is especially promising.
解决方案
1 | 使用 `powershell -exec bypass` 命令重新打开 PowerShell,再次执行命令。 |
问题解决
确认安装结果
参考
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 |
如上结果为安装执行成功。
测试执行
执行测试用例(本地)
此项列举不全,具体以官网 Wiki 为准。
参考
1 | Execute Atomic Tests (Local) https://github.com/redcanaryco/invoke-atomicredteam/wiki/Execute-Atomic-Tests-(Local) |
按用例编号执行特定攻击
执行命令:
1 | Invoke-AtomicTest T1218.010 -TestNumbers 1,2 |
执行过程:
执行结果:
执行给定技术的所有攻击
1 | Invoke-AtomicTest T1218.010 |
执行所有测试(不建议)
1 | Invoke-AtomicTest All |
一个更好的方法是使用一个小的 PowerShell 脚本来一次运行每个测试,首先获取先决条件并在每个之后清理。以下示例运行所有自动 Windows 原子操作。
1 | $techniques = gci C:\AtomicRedTeam\atomics\* -Recurse -Include T*.yaml | Get-AtomicTechnique |
从特定目录执行所有测试(不建议)
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 | powershell -NoProfile -Command "Uninstall-Module powershell-yaml" # this is for Windows |