Detection rules › Splunk

Cloud Compute Instance Created By Previously Unseen User

Status
production
Severity
low
Group by
All_Changes.user, All_Changes.vendor_region
Author
Rico Valdez, Splunk
Source
github.com/splunk/security_content

The following analytic identifies the creation of cloud compute instances by users who have not previously created them. It leverages data from the Change data model, focusing on 'create' actions by users, and cross-references with a baseline of known user activities. This activity is significant as it may indicate unauthorized access or misuse of cloud resources by new or compromised accounts. If confirmed malicious, attackers could deploy unauthorized compute instances, leading to potential data exfiltration, increased costs, or further exploitation within the cloud environment.

Known false positives

  • It's possible that a user will start to create compute instances for the first time, for any number of reasons. Verify with the user launching instances that this is the intended behavior.

MITRE ATT&CK coverage

Rule body

name: Cloud Compute Instance Created By Previously Unseen User
id: 37a0ec8d-827e-4d6d-8025-cedf31f3a149
version: 12
creation_date: '2019-10-16'
modification_date: '2026-05-13'
author: Rico Valdez, Splunk
status: production
type: Anomaly
description: The following analytic identifies the creation of cloud compute instances by users who have not previously created them. It leverages data from the Change data model, focusing on 'create' actions by users, and cross-references with a baseline of known user activities. This activity is significant as it may indicate unauthorized access or misuse of cloud resources by new or compromised accounts. If confirmed malicious, attackers could deploy unauthorized compute instances, leading to potential data exfiltration, increased costs, or further exploitation within the cloud environment.
data_source:
    - AWS CloudTrail
search: |-
    | tstats `security_content_summariesonly` count earliest(_time) as firstTime, latest(_time) as lastTime values(All_Changes.object) as dest FROM datamodel=Change
      WHERE All_Changes.action=created
      BY All_Changes.user All_Changes.vendor_region
    | `drop_dm_object_name("All_Changes")`
    | lookup previously_seen_cloud_compute_creations_by_user user as user OUTPUTNEW firstTimeSeen, enough_data
    | eventstats max(enough_data) as enough_data
    | where enough_data=1
    | eval firstTimeSeenUser=min(firstTimeSeen)
    | where isnull(firstTimeSeenUser) OR firstTimeSeenUser > relative_time(now(), "-24h@h")
    | table firstTime, user, dest, count vendor_region
    | `security_content_ctime(firstTime)`
    | `cloud_compute_instance_created_by_previously_unseen_user_filter`
how_to_implement: You must be ingesting the appropriate cloud-infrastructure logs Run the "Previously Seen Cloud Compute Creations By User" support search to create of baseline of previously seen users.
known_false_positives: It's possible that a user will start to create compute instances for the first time, for any number of reasons. Verify with the user launching instances that this is the intended behavior.
references: []
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: User $user$ is creating a new instance $dest$ for the first time
        - field: user
          type: user
          score: 20
          message: User $user$ is creating a new instance $dest$ for the first time
analytic_story:
    - Cloud Cryptomining
asset_type: Cloud Compute Instance
mitre_attack_id:
    - T1078.004
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: cloud
security_domain: threat
baselines:
    - Previously Seen Cloud Compute Creations By User - Initial
    - Previously Seen Cloud Compute Creations By User - Update

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly` count earliest(_time) as firstTime, latest(_time) as lastTime values(All_Changes.object) as dest FROM datamodel=Change
  WHERE All_Changes.action=created
  BY All_Changes.user All_Changes.vendor_region

Stage 2: search

| `drop_dm_object_name("All_Changes")`

Stage 3: lookup

| lookup previously_seen_cloud_compute_creations_by_user user as user OUTPUTNEW firstTimeSeen, enough_data
Lookup table
previously_seen_cloud_compute_creations_by_user
Key field
user
Output columns
['firstTimeSeen', 'firstTimeSeen'], ['enough_data', 'enough_data']

Stage 4: eventstats

| eventstats max(enough_data) as enough_data

Stage 5: where

| where enough_data=1

Stage 6: eval

| eval firstTimeSeenUser=min(firstTimeSeen)

Stage 7: where

| where isnull(firstTimeSeenUser) OR firstTimeSeenUser > relative_time(now(), "-24h@h")

Stage 8: table

| table firstTime, user, dest, count vendor_region

Stage 9: search

| `security_content_ctime(firstTime)`

Stage 10: search

| `cloud_compute_instance_created_by_previously_unseen_user_filter`

Indicators

These rows show field, operator, and value matches.