{"source_checked_on":"2026-10-19","schema_version":1,"key":"enterprise/T1525","id":"T1525","name":"Implant Internal Image","domain":"enterprise","reviewed_on":"2026-09-28","source_url":"https://attack.mitre.org/techniques/T1525","source_file":{"file":"enterprise.json","url":"https://raw.githubusercontent.com/mitre-attack/attack-stix-data/20664a889568dce884a1dac0ec7b12ae3a199f51/enterprise-attack/enterprise-attack-20.0.json","sha256":"81113ba98afa2928f3dcff62022539f7ce30c315c32e14422f11ff95ce534352","bytes":55271014},"source_object_sha256":"8e73b10894dafff416b972f6b258c592fa666aac1766a2f724109dc7266e5759","description":"Adversaries may implant cloud or container images with malicious code to establish persistence after gaining access to an environment. Amazon Web Services (AWS) Amazon Machine Images (AMIs), Google Cloud Platform (GCP) Images, and Azure Images as well as popular container runtimes such as Docker can be implanted or backdoored. Unlike [Upload Malware](https://attack.mitre.org/techniques/T1608/001), this technique focuses on adversaries implanting an image in a registry within a victim’s environment. Depending on how the infrastructure is provisioned, this could provide persistent access if the infrastructure provisioning tool is instructed to always use the latest image.(Citation: Rhino Labs Cloud Image Backdoor Technique Sept 2019)\n\nA tool has been developed to facilitate planting backdoors in cloud container images.(Citation: Rhino Labs Cloud Backdoor September 2019) If an adversary has access to a compromised AWS instance, and permissions to list the available container images, they may implant a backdoor such as a [Web Shell](https://attack.mitre.org/techniques/T1505/003).(Citation: Rhino Labs Cloud Image Backdoor Technique Sept 2019)","references":[{"source_name":"mitre-attack","url":"https://attack.mitre.org/techniques/T1525","external_id":"T1525"},{"source_name":"Rhino Labs Cloud Image Backdoor Technique Sept 2019","description":"Rhino Labs. (2019, August). Exploiting AWS ECR and ECS with the Cloud Container Attack Tool (CCAT). Retrieved September 12, 2019.","url":"https://rhinosecuritylabs.com/aws/cloud-container-attack-tool/"},{"source_name":"Rhino Labs Cloud Backdoor September 2019","description":"Rhino Labs. (2019, September). Cloud Container Attack Tool (CCAT). Retrieved September 12, 2019.","url":"https://github.com/RhinoSecurityLabs/ccat"}],"platforms":["IaaS","Containers"],"environments":["cloud","containers"],"visibility":"source_mapped","visibility_note":null,"parent":null,"children":[],"telemetry":[{"id":"DC0015","name":"Image Creation","page":"telemetry/DC0015/","kind":"attack_component","category":"Cloud control plane","description":"Creation or registration of a virtual-machine image in a cloud environment.","collection_focus":"Collect VM image create/register APIs from the cloud control plane; retain source instance/disk, image ID and final state. Container image events are a separate concept.","providers":[{"name":"AWS CloudTrail","scope":"Management-plane API activity; supported resource/data events require separate selectors.","source_id":"cloudtrail"},{"name":"Azure Monitor Activity Log","scope":"Azure resource control-plane operations; resource data-plane logs are separate.","source_id":"azure"},{"name":"Google Cloud Audit Logs","scope":"Admin Activity and other categories; configure Data Access where required.","source_id":"gcp"}],"configuration":["In the isolated account/project/subscription, route administrative audit logs to a protected destination with retention and access controls.","Select the relevant service, regions and read/write operations. Confirm whether the API below is a management or data event in the provider documentation.","Preserve actor/session, resource, request ID, service, operation, region and error details. Check delivery latency and avoid logging credentials or sensitive request bodies."],"configuration_example":null,"required_fields":["image_id","source_instance","action","state"],"example":{"schema":"1200km.telemetry.example.v1","synthetic":true,"timestamp":"2026-09-27T12:00:00Z","telemetry_id":"DC0015","collector":"illustrative-lab-collector","observation":{"image_id":"image-lab-1","source_instance":"vm-lab-1","action":"create","state":"pending"}},"example_note":"Project-normalized synthetic JSON, not a native provider log, captured event, attack verdict or validated detection. A parser/adapter is required for a real SIEM. Example names, IPs and values are fictional.","limitations":"AWS, Azure and Google expose different APIs and event schemas. An accepted API request does not prove the final resource state; join asynchronous outcomes and inventory.","sources":[{"id":"cloudtrail","title":"AWS CloudTrail event categories","url":"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-events.html"},{"id":"ec2","title":"AWS EC2 API logging with CloudTrail","url":"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitor-with-cloudtrail.html"},{"id":"azure","title":"Azure Monitor Activity Log","url":"https://learn.microsoft.com/en-us/azure/azure-monitor/fundamentals/activity-log"},{"id":"gcp","title":"Google Cloud Audit Logs","url":"https://docs.cloud.google.com/logging/docs/audit"}],"association":"attack_component","anomaly_design":"Per account, role, region and API: rare actions, new role-resource relationships, enumeration bursts and configuration changes. Separate deployment automation and organization-level administrative activity."},{"id":"DC0036","name":"Image Modification","page":"telemetry/DC0036/","kind":"attack_component","category":"Cloud control plane","description":"Changes to a virtual-machine image configuration or access attributes.","collection_focus":"Collect cloud image-modification APIs and before/after attributes, including launch/sharing permissions; keep VM images distinct from container tags.","providers":[{"name":"AWS CloudTrail","scope":"Management-plane API activity; supported resource/data events require separate selectors.","source_id":"cloudtrail"},{"name":"Azure Monitor Activity Log","scope":"Azure resource control-plane operations; resource data-plane logs are separate.","source_id":"azure"},{"name":"Google Cloud Audit Logs","scope":"Admin Activity and other categories; configure Data Access where required.","source_id":"gcp"}],"configuration":["In the isolated account/project/subscription, route administrative audit logs to a protected destination with retention and access controls.","Select the relevant service, regions and read/write operations. Confirm whether the API below is a management or data event in the provider documentation.","Preserve actor/session, resource, request ID, service, operation, region and error details. Check delivery latency and avoid logging credentials or sensitive request bodies."],"configuration_example":null,"required_fields":["image_id","attribute","before","after"],"example":{"schema":"1200km.telemetry.example.v1","synthetic":true,"timestamp":"2026-09-27T12:00:00Z","telemetry_id":"DC0036","collector":"illustrative-lab-collector","observation":{"image_id":"image-lab-1","attribute":"launch_permission","before":["lab-account"],"after":["lab-account","lab-account-2"]}},"example_note":"Project-normalized synthetic JSON, not a native provider log, captured event, attack verdict or validated detection. A parser/adapter is required for a real SIEM. Example names, IPs and values are fictional.","limitations":"AWS, Azure and Google expose different APIs and event schemas. An accepted API request does not prove the final resource state; join asynchronous outcomes and inventory.","sources":[{"id":"cloudtrail","title":"AWS CloudTrail event categories","url":"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-events.html"},{"id":"ec2","title":"AWS EC2 API logging with CloudTrail","url":"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitor-with-cloudtrail.html"},{"id":"azure","title":"Azure Monitor Activity Log","url":"https://learn.microsoft.com/en-us/azure/azure-monitor/fundamentals/activity-log"},{"id":"gcp","title":"Google Cloud Audit Logs","url":"https://docs.cloud.google.com/logging/docs/audit"}],"association":"attack_component","anomaly_design":"Per account, role, region and API: rare actions, new role-resource relationships, enumeration bursts and configuration changes. Separate deployment automation and organization-level administrative activity."},{"id":"DC0080","name":"Instance Start","page":"telemetry/DC0080/","kind":"attack_component","category":"Cloud control plane","description":"A request to start a stopped compute instance and its resulting state.","collection_focus":"Collect start APIs and instance-state transitions with request IDs; distinguish accepted from completed.","providers":[{"name":"AWS CloudTrail","scope":"Management-plane API activity; supported resource/data events require separate selectors.","source_id":"cloudtrail"},{"name":"Azure Monitor Activity Log","scope":"Azure resource control-plane operations; resource data-plane logs are separate.","source_id":"azure"},{"name":"Google Cloud Audit Logs","scope":"Admin Activity and other categories; configure Data Access where required.","source_id":"gcp"}],"configuration":["In the isolated account/project/subscription, route administrative audit logs to a protected destination with retention and access controls.","Select the relevant service, regions and read/write operations. Confirm whether the API below is a management or data event in the provider documentation.","Preserve actor/session, resource, request ID, service, operation, region and error details. Check delivery latency and avoid logging credentials or sensitive request bodies."],"configuration_example":null,"required_fields":["instance_id","action","state_before","state_after"],"example":{"schema":"1200km.telemetry.example.v1","synthetic":true,"timestamp":"2026-09-27T12:00:00Z","telemetry_id":"DC0080","collector":"illustrative-lab-collector","observation":{"instance_id":"vm-lab-1","action":"start","state_before":"stopped","state_after":"pending"}},"example_note":"Project-normalized synthetic JSON, not a native provider log, captured event, attack verdict or validated detection. A parser/adapter is required for a real SIEM. Example names, IPs and values are fictional.","limitations":"AWS, Azure and Google expose different APIs and event schemas. An accepted API request does not prove the final resource state; join asynchronous outcomes and inventory.","sources":[{"id":"cloudtrail","title":"AWS CloudTrail event categories","url":"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-events.html"},{"id":"ec2","title":"AWS EC2 API logging with CloudTrail","url":"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitor-with-cloudtrail.html"},{"id":"azure","title":"Azure Monitor Activity Log","url":"https://learn.microsoft.com/en-us/azure/azure-monitor/fundamentals/activity-log"},{"id":"gcp","title":"Google Cloud Audit Logs","url":"https://docs.cloud.google.com/logging/docs/audit"}],"association":"attack_component","anomaly_design":"Per account, role, region and API: rare actions, new role-resource relationships, enumeration bursts and configuration changes. Separate deployment automation and organization-level administrative activity."}],"detection":{"key":"enterprise/T1525","id":"T1525","name":"Implant Internal Image","domain":"enterprise","platforms":["IaaS","Containers"],"environments":["cloud","containers"],"source_url":"https://attack.mitre.org/techniques/T1525","technique_page":"techniques/enterprise/T1525/","page":"detections/enterprise/T1525/","status":"rule_source_available","counts":{"sigma":1,"atlas_basic":0,"atlas_anomaly":0,"strategies":1,"analytics":2,"live_validated":0},"sigma_rules":[{"id":"b94bf91e-c2bf-4047-9c43-c6810f43baad","title":"AWS ECS Task Definition That Queries The Credential Endpoint","status":"test","level":"medium","logsource":{"product":"aws","service":"cloudtrail"},"data_path":"data/detection-rules/b94bf91e-c2bf-4047-9c43-c6810f43baad.json","source_url":"https://github.com/anpa1200/sigma/blob/b249e9683190cffdcaf188ccbfb90bf4759844e1/rules/cloud/aws/cloudtrail/aws_ecs_task_definition_cred_endpoint_query.yml","author":"Darin Smith","kind":"sigma"}],"atlas_basic":[],"atlas_anomaly":[],"anomaly_types":[],"strategies":[{"id":"DET0334","name":"Detection Strategy for T1525 – Implant Internal Image","url":"https://attack.mitre.org/detectionstrategies/DET0334","stix_id":"x-mitre-detection-strategy--c08df366-fa5a-4f34-a27e-b28e756f09f0","relationship_id":"relationship--0ad4226b-1afa-4efe-b060-c6eaebd7009e","description":"","analytics":[{"id":"AN0946","name":"Analytic 0946","guidance":"Implantation of malicious code into container images followed by registry push and use in new deployments.","url":"https://attack.mitre.org/detectionstrategies/DET0334#AN0946","platforms":["Containers"],"tuning":[{"field":"TimeWindow","description":"Time threshold between image creation and use in deployment – typically rapid in adversarial activity."},{"field":"UserContext","description":"The expected users or service accounts performing image pushes."},{"field":"RegistryNameRegex","description":"Expected naming patterns for trusted registries."}],"log_sources":[{"component_id":"DC0015","component":"Image Creation","name":"docker:daemon","channel":"docker build or docker commit commands followed by docker push to internal registry","platforms":["Containers"],"analytic_id":"AN0946","source_url":"https://attack.mitre.org/detectionstrategies/DET0334#AN0946","validation":"upstream_definition_not_locally_validated","component_page":"telemetry/DC0015/"},{"component_id":"DC0036","component":"Image Modification","name":"docker:registry","channel":"push event of new image version from unrecognized user or context","platforms":["Containers"],"analytic_id":"AN0946","source_url":"https://attack.mitre.org/detectionstrategies/DET0334#AN0946","validation":"upstream_definition_not_locally_validated","component_page":"telemetry/DC0036/"}]},{"id":"AN0947","name":"Analytic 0947","guidance":"Creation or modification of cloud virtual machine images (AMIs, custom images) with persistence mechanisms, followed by infrastructure provisioning that uses these implanted images.","url":"https://attack.mitre.org/detectionstrategies/DET0334#AN0947","platforms":["IaaS"],"tuning":[{"field":"IAMRole","description":"Roles that are allowed to register and modify images should be scoped narrowly."},{"field":"ImageTagRegex","description":"Expected tags or naming patterns for images (e.g., 'golden-image', 'base-image')."},{"field":"LaunchWindow","description":"Time interval between image creation and instance launch."}],"log_sources":[{"component_id":"DC0015","component":"Image Creation","name":"AWS:CloudTrail","channel":"RegisterImage","platforms":["IaaS"],"analytic_id":"AN0947","source_url":"https://attack.mitre.org/detectionstrategies/DET0334#AN0947","validation":"upstream_definition_not_locally_validated","component_page":"telemetry/DC0015/"},{"component_id":"DC0036","component":"Image Modification","name":"AWS:CloudTrail","channel":"ModifyImageAttribute","platforms":["IaaS"],"analytic_id":"AN0947","source_url":"https://attack.mitre.org/detectionstrategies/DET0334#AN0947","validation":"upstream_definition_not_locally_validated","component_page":"telemetry/DC0036/"},{"component_id":"DC0080","component":"Instance Start","name":"AWS:CloudTrail","channel":"RunInstances","platforms":["IaaS"],"analytic_id":"AN0947","source_url":"https://attack.mitre.org/detectionstrategies/DET0334#AN0947","validation":"upstream_definition_not_locally_validated","component_page":"telemetry/DC0080/"}]}]}],"telemetry_references":[{"id":"DC0015","name":"Image Creation","tag":"Image Creation","page":"telemetry/DC0015/","kind":"attack_component"},{"id":"DC0036","name":"Image Modification","tag":"Image Modification","page":"telemetry/DC0036/","kind":"attack_component"},{"id":"DC0080","name":"Instance Start","tag":"Instance Start","page":"telemetry/DC0080/","kind":"attack_component"}],"visibility":"source_mapped","visibility_note":null,"tool_references":[],"related_parent":null,"article_url":"https://1200km.com/articles/read/2026/2026-04-20-malicious-activity-as-a-statistical-signal-a-detection-engineering-analysis-of-anomaly-bas-90df8b6dea12/","validation":{"source_join":"exact_ids","sigma_yaml":"parsed","backend_compilation":"not_run","live_telemetry":"not_run","detection_execution":"not_run"}},"tools":[],"software":[],"actors":[],"mitigations":[{"id":"M1026","name":"Privileged Account Management","url":"https://attack.mitre.org/mitigations/M1026","kind":"course-of-action","description":"Limit permissions associated with creating and modifying platform images or containers based on the principle of least privilege.","relationship_id":"relationship--8dfdc783-d869-498b-b4e0-1d75b30e2d67","references":[]},{"id":"M1045","name":"Code Signing","url":"https://attack.mitre.org/mitigations/M1045","kind":"course-of-action","description":"Several cloud service providers support content trust models that require container images be signed by trusted sources.(Citation: Content trust in Azure Container Registry)(Citation: Content trust in Docker)","relationship_id":"relationship--24e20a3c-5f74-40bc-a5b0-108bc0233305","references":[{"source_name":"Content trust in Azure Container Registry","description":"Microsoft. (2019, September 5). Content trust in Azure Container Registry. Retrieved October 16, 2019.","url":"https://docs.microsoft.com/en-us/azure/container-registry/container-registry-content-trust"},{"source_name":"Content trust in Docker","description":"Docker. (2019, October 10). Content trust in Docker. Retrieved October 16, 2019.","url":"https://docs.docker.com/engine/security/trust/content_trust/"}]},{"id":"M1047","name":"Audit","url":"https://attack.mitre.org/mitigations/M1047","kind":"course-of-action","description":"Periodically check the integrity of images and containers used in cloud deployments to ensure they have not been modified to include malicious software.","relationship_id":"relationship--f7a8b397-ecf3-456e-a395-568a41048609","references":[]}],"candidates":[],"simulation":{"atomic_status":"no_atomic_candidate","lab_execution":"not_run","browser_attack_runner":false,"prerequisites":"Use disposable lab hosts and test accounts, explicit target allowlists, a clean snapshot, bounded egress and a restore plan. Review every candidate and dependency before any execution.","scenario":null},"validation":{"source_identity":"checked_against_pinned_source","relationship_join":"exact_ids_no_inheritance","page_contract":"automated_checks_required","sensor_capture":"not_run","detection_backend":"not_run","adversary_simulation":"not_run","independent_incident_fact_check":"not_performed"},"technique_links":{"T1608.001":"/ttp-simulation/techniques/enterprise/T1608.001/","T1505.003":"/ttp-simulation/techniques/enterprise/T1505.003/","T1525":"/ttp-simulation/techniques/enterprise/T1525/"},"synthetic":{"schema":"1200km.ttp.collection-fixture.v1","synthetic":true,"technique_key":"enterprise/T1525","purpose":"Collection/parser contract exercise, NOT a positive example or detection of this TTP.","events":[{"schema":"1200km.telemetry.example.v1","synthetic":true,"timestamp":"2026-09-27T12:00:00Z","telemetry_id":"DC0015","collector":"illustrative-lab-collector","observation":{"image_id":"image-lab-1","source_instance":"vm-lab-1","action":"create","state":"pending"}},{"schema":"1200km.telemetry.example.v1","synthetic":true,"timestamp":"2026-09-27T12:00:00Z","telemetry_id":"DC0036","collector":"illustrative-lab-collector","observation":{"image_id":"image-lab-1","attribute":"launch_permission","before":["lab-account"],"after":["lab-account","lab-account-2"]}},{"schema":"1200km.telemetry.example.v1","synthetic":true,"timestamp":"2026-09-27T12:00:00Z","telemetry_id":"DC0080","collector":"illustrative-lab-collector","observation":{"instance_id":"vm-lab-1","action":"start","state_before":"stopped","state_after":"pending"}}]}}
