2018-09-07 23:28:17 -04:00
# Invoke-AtomicRedTeam
2018-09-02 08:32:17 -06:00
2019-02-06 11:52:40 -07:00
## Setup
2018-09-07 23:28:17 -04:00
2019-02-06 11:52:40 -07:00
### Install Atomic Red Team
2018-09-04 09:52:15 -06:00
2019-12-16 15:20:02 -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 )
2020-01-08 12:45:50 -07:00
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
2020-01-08 12:45:50 -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
2020-01-08 12:45:50 -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-12-16 15:20:02 -06:00
2019-11-11 15:26:23 -06:00
`Install-AtomicRedTeam -Force`
2020-01-08 12:45:50 -07:00
### Manual Installation
2019-02-06 11:52:40 -07:00
2020-01-09 07:36:08 -07:00
`set-executionpolicy Unrestricted`
2019-02-06 11:52:40 -07:00
[PowerShell-Yaml ](https://github.com/cloudbase/powershell-yaml ) is required to parse Atomic yaml files:
2018-09-07 23:28:17 -04:00
2020-01-08 12:45:50 -07:00
`Install-Module -Name powershell-yaml -Scope CurrentUser`
2019-02-06 11:52:40 -07:00
2020-01-08 12:45:50 -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
2019-11-08 10:57:08 -07:00
Before you can use the **_Invoke-AtomicTest_ ** function, you must first import the module:
``` powershell
2019-11-22 11:57:30 -07:00
Import-Module C: \ AtomicRedTeam \ execution-frameworks \ Invoke-AtomicRedTeam \ Invoke-AtomicRedTeam \ Invoke-AtomicRedTeam . psm1
2019-11-08 10:57:08 -07:00
```
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
2019-11-22 11:57:30 -07: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
2019-11-08 10:50:31 -07:00
2019-11-11 23:21:34 -08:00
You can override the default path to the atomics folder using the `$PSDefaultParameterValues` preference variable as shown below.
2019-11-08 10:50:31 -07:00
```
$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
2019-08-30 22:05:14 -06:00
``` powershell
2019-11-25 10:28:08 -07:00
Invoke-AtomicTest All -ShowDetails
2019-08-30 22:05:14 -06:00
```
2020-01-09 07:36:08 -07: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-09-06 11:28:13 -06:00
``` powershell
2020-01-09 07:36:08 -07:00
Invoke-AtomicTest T1117
2019-09-06 11:28:13 -06:00
```
2020-01-09 07:36:08 -07:00
#### Execute Specific Attacks (by Attack Number) for a Given Technique
2019-09-06 11:28:13 -06:00
``` powershell
2020-01-09 07:36:08 -07:00
Invoke-AtomicTest T1117 -TestNumbers 1 , 2
2019-09-06 11:28:13 -06:00
```
2020-01-09 07:36:08 -07:00
#### Execute Specific Attacks (by Attack Name) for a Given Technique
2019-02-14 14:13:13 -07:00
2019-08-27 20:32:00 -06:00
``` powershell
2020-01-09 07:36:08 -07:00
Invoke-AtomicTest T1117 -TestNames " Regsvr32 remote COM scriptlet execution " , " Regsvr32 local DLL execution "
2019-08-27 20:32:00 -06:00
```
2019-08-30 12:16:53 -06:00
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'
```
2020-01-09 07:36:08 -07:00
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. Execution is only logged in the execution log when the attack commands are run (not when `-ShowDetails` , `-CheckPrereqs` , `GetPrereqs` , or `-Cleanup` swiches are used). Use the `-NoExecutionLog` switch to not write execution details to disk.
2019-08-30 12:16:53 -06:00
2020-01-09 07:36:08 -07:00
#### Check that Prerequistes for a given test are met
2019-08-30 09:42:44 -06:00
``` powershell
2020-01-09 07:36:08 -07:00
Invoke-AtomicTest T1117 -TestNumber 1 -CheckPrereqs
2019-08-30 09:42:44 -06:00
```
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.
2020-01-09 07:36:08 -07:00
#### Get Prerequistes
2019-08-27 20:32:00 -06:00
``` powershell
2020-01-09 07:36:08 -07:00
Invoke-AtomicTest T1117 -TestNumber 1 -GetPrereqs
2019-08-27 20:32:00 -06:00
```
2020-01-09 07:36:08 -07:00
This will run the "Get Prereq Commands" listed in the Dependencies section for the test.
The execution framework provides a helpful PowerShell function called `Invoke-WebRequestVerifyHash` which only downloads and saves a file to disk if the file hash matches the specified value. Call this method by passing in the url of the file to download, the path where it should be saved, and lastly the expected Sha256 file hash.
The function returns `$true` if the file was saved to disk, `$false` otherwise.
2018-09-07 23:28:17 -04:00
2019-09-04 10:52:24 -06:00
#### 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-04 10:52:24 -06:00
```
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.
2019-09-04 10:52:24 -06:00
2019-08-30 09:42:44 -06:00
#### Run the Cleanup Commands For the Specified Test
``` powershell
Invoke-AtomicTest T1089 -TestNames " Uninstall Sysmon " -Cleanup
```
2018-09-07 23:28:17 -04:00
## Additional Examples
#### Confirm
2018-09-02 08:32:17 -06:00
2018-09-07 23:28:17 -04:00
To run all tests without confirming them run using the Confirm switch to false
2018-09-04 09:36:36 -06:00
2018-09-07 23:28:17 -04:00
``` powershell
2020-01-09 07:36:08 -07:00
Invoke-AtomicTest All -Confirm: $false
2018-09-07 23:28:17 -04:00
```
2018-09-02 08:32:17 -06:00
2018-09-07 23:28:17 -04:00
Or you can set your `$ConfirmPreference` to 'Medium'
2018-09-04 09:28:28 -06:00
2018-09-07 23:28:17 -04:00
``` powershell
$ConfirmPreference = 'Medium'
2020-01-09 07:36:08 -07:00
Invoke-AtomicTest All
2018-09-07 23:28:17 -04:00
```