Files
atomic-red-team/execution-frameworks/Invoke-AtomicRedTeam/README.md
T

210 lines
7.0 KiB
Markdown
Raw Normal View History

# Invoke-AtomicRedTeam
2018-09-02 08:32:17 -06:00
2019-02-06 11:52:40 -07:00
## Setup
2019-02-06 11:52:40 -07:00
### Install Atomic Red Team
2018-09-04 09:52:15 -06:00
* Be sure to get permission and necessary approval before conducting tests. Unauthorized testing is a bad decision
2019-08-30 22:05:14 -06:00
and can potentially be a resume-generating event.
* Set up a test machine that would be similar to the build in your environment. Be sure you have your collection/EDR
solution in place, and that the endpoint is checking in and active. It is best to have AV turned off.
We made installing Atomic Red Team extremely easy.
2019-11-11 15:26:23 -06:00
For those running Atomic Red Team on MacOS or Linux download and install PowerShell Core.
[Linux](https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-linux?view=powershell-6)
[MacOS](https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-macos?view=powershell-6)
From a PowerShell prompt run the following command:
2019-02-14 14:13:13 -07:00
2019-11-10 19:43:28 -06:00
`IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/execution-frameworks/Invoke-AtomicRedTeam/install-atomicredteam.ps1'); Install-AtomicRedTeam -verbose`
2019-02-14 14:13:13 -07:00
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](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/) methods and try again. Method 12 is especially promising.
2019-05-10 13:38:02 -06:00
[Source](install-atomicredteam.ps1)
2019-02-14 14:13:13 -07:00
By default, the installer will download and Install Atomic Red Team to `<BASEPATH>\AtomicRedTeam`
2019-11-11 15:26:23 -06:00
Where `<BASEPATH>` is `C:` in Windows or `~` in Linux/MacOS
2019-02-14 14:13:13 -07:00
2019-05-10 13:38:02 -06:00
Running the [Install script](install-atomicredteam.ps1) locally provides three parameters:
2019-02-14 14:13:13 -07:00
InstallPath
2019-03-26 14:13:05 -06:00
- Where ART is to be Installed
2019-02-14 14:13:13 -07:00
2019-09-12 15:02:29 -06:00
`Install-AtomicRedTeam -InstallPath c:\tools\`
2019-02-14 14:13:13 -07:00
DownloadPath
- Where ART is to be downloaded
2019-09-12 15:02:29 -06:00
`Install-AtomicRedTeam -DownloadPath c:\tools\`
2019-02-14 14:13:13 -07:00
2019-11-11 15:26:23 -06:00
Force
- Force the new installation removing any previous installations in -InstallPath. **BE CAREFUL this will delete the entire install path folder**
2019-11-11 15:26:23 -06:00
`Install-AtomicRedTeam -Force`
### Manual Installation
2019-02-06 11:52:40 -07:00
[PowerShell-Yaml](https://github.com/cloudbase/powershell-yaml) is required to parse Atomic yaml files:
`Install-Module -Name powershell-yaml -Scope CurrentUser`
2019-02-06 11:52:40 -07:00
Clone the Atomic Red Team repository and import the Invoke-AtomicRedTeam module.
2019-02-06 11:52:40 -07:00
2019-09-12 15:02:29 -06:00
`import-module .\Invoke-AtomicRedTeam\Invoke-AtomicRedTeam.psm1`
2019-02-06 11:52:40 -07:00
## Getting Started
Before you can use the **_Invoke-AtomicTest_** function, you must first import the module:
```powershell
Import-Module C:\AtomicRedTeam\execution-frameworks\Invoke-AtomicRedTeam\Invoke-AtomicRedTeam\Invoke-AtomicRedTeam.psm1
```
Note: Your path to the **_Invoke-AtomicRedTeam.psm1_** may be different.
2019-02-14 14:13:13 -07:00
#### Execute All Tests
Execute all Atomic tests:
2019-08-30 22:05:14 -06:00
```powershell
Invoke-AtomicTest All
```
2019-09-12 15:02:29 -06:00
This assumes your atomics folder is in the default location of `<BASEPATH>\AtomicRedTeam\atomics`
2019-11-11 15:26:23 -06:00
Where `<BASEPATH>` is `C:` in Windows or `~` in Linux/MacOS
You can override the default path to the atomics folder using the `$PSDefaultParameterValues` preference variable as shown below.
```
$PSDefaultParameterValues = @{"Invoke-AtomicTest:PathToAtomicsFolder"="C:\Users\myuser\Documents\code\atomic-red-team\atomics"}
```
Tip: Add this to your PowerShell profile so it is always set to your preferred default value.
2019-09-12 15:02:29 -06:00
2019-02-14 14:13:13 -07:00
#### Execute All Tests - Specific Directory
Specify a path to atomics folder, example C:\AtomicRedTeam\atomics
2019-08-30 22:05:14 -06:00
```powershell
Invoke-AtomicTest All -PathToAtomicsFolder C:\AtomicRedTeam\atomics
```
2019-02-14 14:13:13 -07:00
2019-09-06 11:28:13 -06:00
#### Display Test Details without Executing the Test
Show the attack commands:
2019-08-30 22:05:14 -06:00
```powershell
Invoke-AtomicTest All -ShowDetails
2019-08-30 22:05:14 -06:00
```
Show the Prereq commands:
2019-09-06 11:28:13 -06:00
```powershell
Invoke-AtomicTest All -CheckPrereqs -ShowDetails
2019-09-06 11:28:13 -06:00
```
Show the Cleanup commands:
2019-09-06 11:28:13 -06:00
```powershell
Invoke-AtomicTest All -Cleanup -ShowDetails
2019-09-06 11:28:13 -06:00
```
Using the `ShowDetails` switch causes the test details to be printed to the screen and allows for easy copy and paste execution.
Note: you may need to change the path where the test definitions are found with the `PathToAtomicsFolder` parameter.
#### Execute All Attacks for a Given Technique
2019-02-14 14:13:13 -07:00
```powershell
Invoke-AtomicTest T1117
```
By default, test execution details are written to `Invoke-AtomicTest-ExecutionLog.csv` in the current directory.
#### Specify an Alternate Path for the Execution Log
```powershell
Invoke-AtomicTest T1117 -ExecutionLogPath 'C:\Temp\mylog.csv'
```
By default, test execution details are written to `Invoke-AtomicTest-ExecutionLog.csv` in the current directory. Use the `-ExecutionLogPath` parameter to write to a different file. Nothing is logged in the execution log when only running pre-requisite checks with `-CheckPrereqs` or cleanup commands with `-Cleanup`. Use the `-NoExecutionLog` switch to not write execution details to disk.
#### Check that Prerequistes for a Given Technique are met
```powershell
Invoke-AtomicTest T1117 -CheckPrereqs
```
2019-11-11 15:26:23 -06:00
For the "command_prompt", "bash", and "sh" executors, if any of the prereq_command's return a non-zero exit code, the pre-requisites are not met. Example: **fltmc.exe filters | findstr #{sysmon_driver}**
2019-09-06 11:28:13 -06:00
2019-08-30 22:05:14 -06:00
For the "powershell" executor, the prereq_command's are run as a script block and the script must return 0 if the pre-requisites are met. Example: **if(Test-Path C:\Windows\System32\cmd.exe) { 0 } else { -1 }**
2019-09-06 11:28:13 -06:00
Pre-requisites will also be reported as not met if the test is defined with `elevation_required: true` but the current context is not elevated. You can still execute an attack even if the pre-requisites are not met but execution may fail.
#### Execute Specific Attacks (by Attack Number) for a Given Technique
```powershell
Invoke-AtomicTest T1117 -TestNumbers 1, 2
```
#### Execute Specific Attacks (by Attack Name) for a Given Technique
```powershell
Invoke-AtomicTest T1117 -TestNames "Regsvr32 remote COM scriptlet execution","Regsvr32 local DLL execution"
```
#### Specify Input Parameters on the Command Line
```powershell
2019-09-06 19:36:02 -06:00
$myArgs = @{ "file_name" = "c:\Temp\myfile.txt"; "ads_filename" = "C:\Temp\ads-file.txt" }
Invoke-AtomicTest T1158 -TestNames "Create ADS command prompt" -InputArgs $myArgs
```
2019-09-06 11:28:13 -06:00
You can specify a subset of the input parameters via the command line. Any input parameters not explicitly defined will maintain their default values from the test definition yaml.
#### Run the Cleanup Commands For the Specified Test
```powershell
Invoke-AtomicTest T1089 -TestNames "Uninstall Sysmon" -Cleanup
```
## Additional Examples
If you would like output when running tests using the following:
#### Informational Stream
```powershell
Invoke-AtomicTest T1117 -InformationAction Continue
```
#### Verbose Stream
```powershell
Invoke-AtomicTest T1117 -Verbose
```
#### Debug Stream
```powershell
Invoke-AtomicTest T1117 -Debug
```
#### Confirm
2018-09-02 08:32:17 -06:00
To run all tests without confirming them run using the Confirm switch to false
2018-09-04 09:36:36 -06:00
```powershell
Invoke-AtomicTest T1117 -Confirm:$false
```
2018-09-02 08:32:17 -06:00
Or you can set your `$ConfirmPreference` to 'Medium'
2018-09-04 09:28:28 -06:00
```powershell
$ConfirmPreference = 'Medium'
Invoke-AtomicTest T1117
```