Skip to content

Conversation

@imays11
Copy link
Contributor

@imays11 imays11 commented Nov 4, 2025

Pull Request

Issue link(s):

Summary - What I changed

Description and primary tactic for this rule is a bit misleading. The rule captures an IAM principal enumeration technique used by tools like PACU, it does not capture AssumeRole brute-force attempts. I've changed the primary tactic to Discover, changed the rule name and updated the rule description and Investigation Guide to more clearly reflect what behavior is being captured.

The query itself remains the same and the threshold values. I changed the execution window to the standard 5 min + 1 min lookback and was still able to capture the behavior.

The TARGET BEHAVIOR

  • You control IAM in Account A.
  • You have a role in Account A and you keep calling:
UpdateAssumeRolePolicy(
  RoleName = "enum-role",
  PolicyDocument = {
    "Version": "2012-10-17",
    "Statement": [{
      "Effect": "Deny",
      "Principal": { "AWS": "arn:aws:iam::<TARGET_ACCT>:role/<guess>" },
      "Action": "sts:AssumeRole"
    }]
  }
)
  • If the Principal ARN is valid and refers to something that can be a principal, the update can succeed.
  • If it’s invalid / non-existent, IAM throws MalformedPolicyDocumentException / “invalid principal in policy”.

That’s what this rule is seeing: lots of failed UpdateAssumeRolePolicy calls with bad principals. Stemming from within your account. This activity could be targeting an external account as a form of role enumeration.

Reference: PACU iam_enum_roles Module

How To Test

Test data in the stack to run the query against
The existing rule has been updated with the execution window change
Script for triggering the rule: trigger_discovery_iam_principal_enumeration_via_update_assume_role_policy.py

Screenshot of Alerting Rule and Triggering Events

Screenshot 2025-11-04 at 3 14 56 PM Screenshot 2025-11-04 at 3 13 51 PM

Description and primary tactic for this rule is misleading. The rule captures an IAM principal enumeration technique used by tools like PACU, it does not capture AssumeRole brute-force attempts. I've changed the primary tactic to Discover, changed the rule name and updated the rule description and Investigation Guide to more clearly reflect what behavior is being captured.

The query itself remains the same and the threshold values. I changed the execution window to the standard 5 min + 1 min lookback and was still able to capture the behavior.
@imays11 imays11 self-assigned this Nov 4, 2025
@imays11 imays11 added Integration: AWS AWS related rules Rule: Tuning tweaking or tuning an existing rule Team: TRADE Domain: Cloud labels Nov 4, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Nov 4, 2025

Rule: Tuning - Guidelines

These guidelines serve as a reminder set of considerations when tuning an existing rule.

Documentation and Context

  • Detailed description of the suggested changes.
  • Provide example JSON data or screenshots.
  • Provide evidence of reducing benign events mistakenly identified as threats (False Positives).
  • Provide evidence of enhancing detection of true threats that were previously missed (False Negatives).
  • Provide evidence of optimizing resource consumption and execution time of detection rules (Performance).
  • Provide evidence of specific environment factors influencing customized rule tuning (Contextual Tuning).
  • Provide evidence of improvements made by modifying sensitivity by changing alert triggering thresholds (Threshold Adjustments).
  • Provide evidence of refining rules to better detect deviations from typical behavior (Behavioral Tuning).
  • Provide evidence of improvements of adjusting rules based on time-based patterns (Temporal Tuning).
  • Provide reasoning of adjusting priority or severity levels of alerts (Severity Tuning).
  • Provide evidence of improving quality integrity of our data used by detection rules (Data Quality).
  • Ensure the tuning includes necessary updates to the release documentation and versioning.

Rule Metadata Checks

  • updated_date matches the date of tuning PR merged.
  • min_stack_version should support the widest stack versions.
  • name and description should be descriptive and not include typos.
  • query should be inclusive, not overly exclusive. Review to ensure the original intent of the rule is maintained.

Testing and Validation

  • Validate that the tuned rule's performance is satisfactory and does not negatively impact the stack.
  • Ensure that the tuned rule has a low false positive rate.

reference = "https://attack.mitre.org/tactics/TA0006/"

[rule.threshold]
field = []
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a bug here in <= 8.19.6 when using group by with no field specified.
Ref: elastic/kibana#241022

Can set the min stack version to 8.19.7.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm maybe I should actually add a group by field, like user.name or user.id

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this one be moved to deprecated instead of being deleted?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not deleted, the file name has just been changed

Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants