Account Manipulation: Additional Container Cluster Roles T1098.006

Tactics: Persistence, Privilege Escalation

An adversary may add additional roles or permissions to an adversary-controlled user or service account to maintain persistent access to a container orchestration system. For example, an adversary with sufficient permissions may create a RoleBinding or a ClusterRoleBinding to bind a Role or ClusterRole to a Kubernetes account. Where attribute-based access control (ABAC) is in use, an adversary with sufficient permissions may modify a Kubernetes ABAC policy to give the target account additional permissions. This account modification may immediately follow Create Account or other malicious account activity. Adversaries may also modify existing Valid Accounts that they have compromised.

Authoring guide

Patterns shared across the 12 rules above: which fields they filter on, what specific values they look for, and what they exclude. The catalog normalizes field names across vendors so Sigma's Image, Elastic's process.name, and Splunk's process_name collapse into one row. Each rule contributes at most once per row.

Fields filtered most (21 distinct)

The fields most rules look at when detecting this technique. The How column shows the operators authors use (eq, wildcard, regex_match, match) and how often each appears. Sample values are concrete examples to start from, not an exhaustive list.

FieldRulesHowSample values
data_stream.dataset10eq 10kubernetes.audit_logs, aws.cloudtrail, azure.activitylogs
kubernetes.audit.objectRef.resource9in 7, eq 2clusterroles, clusterrolebindings, rolebindings, cronjobs, daemonsets
kubernetes.audit.verb9in 7, eq 2create, patch, update, delete
kubernetes.audit.annotations.authorization_k8s_io/decision8eq 8allow
event.outcome3eq 2, in 1success, Success
kubernetes.audit.level3eq 3RequestResponse
kubernetes.audit.stage3eq 3ResponseComplete
EventType2eq 1, in 1AssociateAccessPolicy, CreateAccessEntry, DeleteAccessEntry
KQL2func_call 2"" kubernetes.audit.requestObject.rules.verbs: ("*" or..., "" kubernetes.audit.requestObject.rules.verbs: ("*" or..., "" kubernetes.audit.requestObject.rules.verbs:("*" or..., "" kubernetes.audit.responseObject.rules.verbs:"*" and...
Provider_Name2eq 2eks.amazonaws.com
`kubernetes.audit.annotations.authorization_k8s_io/decision`1eq 1allow
aws::requestParameters1contains 1amazoneksadminpolicy, amazoneksclusteradminpolicy
aws::userAgent1is_not_null 1
azure.activitylogs.operation_name1in 1MICROSOFT.KUBERNETES/CONNECTEDCLUSTERS/RBAC.AUTHORIZATION..., MICROSOFT.KUBERNETES/CONNECTEDCLUSTERS/RBAC.AUTHORIZATION...
kubernetes.audit.objectRef.name1eq 1aws-auth

Top indicator values (47 distinct)

Specific (field, operator, value) combinations the rules check for, ranked by how many rules under this technique use each one. The Corpus reach column counts how many rules across the entire catalog (any technique) check the same combination. High numbers point to widely-used indicators that are likely noisy on their own; combine them with another condition for useful signal. Blank means the combination is specific to rules under this technique. Click a value to expand the rules under this technique that use it.

FieldKindValueRules (here)Corpus reach
kubernetes.audit.annotations.authorization_k8s_io/decisioneq
allow
823
data_stream.dataseteq
kubernetes.audit_logs
736
data_stream.dataseteq
aws.cloudtrail
2141
kubernetes.audit.verbin
patch
720
kubernetes.audit.verbin
update
619
kubernetes.audit.verbin
create
517
kubernetes.audit.verbin
delete
26
kubernetes.audit.objectRef.resourcein
clusterroles
46
kubernetes.audit.objectRef.resourcein
roles
46
kubernetes.audit.objectRef.resourcein
clusterrolebindings
35
kubernetes.audit.objectRef.resourcein
rolebindings
35
kubernetes.audit.objectRef.resourcein
cronjobs
23
kubernetes.audit.objectRef.resourcein
daemonsets
23
kubernetes.audit.objectRef.resourcein
deployments
23
kubernetes.audit.leveleq
RequestResponse
33
kubernetes.audit.stageeq
ResponseComplete
39
Provider_Nameeq
eks.amazonaws.com
23
event.outcomeeq
success
2251
kubernetes.audit.verbeq
create
29
EventTypeeq
AssociateAccessPolicy
1
EventTypein
AssociateAccessPolicy
1
EventTypein
CreateAccessEntry
1
EventTypein
DeleteAccessEntry
1
EventTypein
DisassociateAccessPolicy
1
EventTypein
UpdateAccessEntry
1
KQLfunc_call
"" kubernetes.audit.requestObject.rules.verbs: ("*" or "create" or "patch"...
1
KQLfunc_call
"" kubernetes.audit.requestObject.rules.verbs: ("*" or "get" or "list") and...
1
KQLfunc_call
"" kubernetes.audit.requestObject.rules.verbs:("*" or "escalate" or "bind"...
1
KQLfunc_call
"" kubernetes.audit.responseObject.rules.verbs: ("*" or "create" or "patch"...
1
KQLfunc_call
"" kubernetes.audit.responseObject.rules.verbs: ("*" or "get" or "list") and...
1

Exclusions (24 distinct)

Field/operator/value combinations excluded by rules under this technique (top-level not() clauses), sorted by how many rules exclude each. These are the false-positive paths the community has learned to filter out. A new rule that ignores the high-count entries here will likely fire on the same noisy paths. Click a value to expand the rules under this technique that exclude it.

FieldKindValueRules excluding
kubernetes.audit.sourceIPsin
127.0.0.1
2
kubernetes.audit.sourceIPsin
::1
2
usereq
aksservice
2
EventTypeeq
create
1
EventTypeeq
patch
1
aws::userIdentity.arncontains
awscloudformation
1
aws::userIdentity.arncontains
awsserviceroleforamazoneks
1
aws::userIdentity.arncontains
eksctl
1
aws::userIdentity.arncontains
terraform
1
kubernetes.audit.objectRef.namein
admin
1
kubernetes.audit.objectRef.namein
edit
1
kubernetes.audit.objectRef.namestarts_with
aks:
1
kubernetes.audit.objectRef.namestarts_with
eks:
1
kubernetes.audit.user.groupseq
system:masters
1
kubernetes.audit.user.usernamein
system:serviceaccount:kube-system:clusterrole-aggregation-controller
1

Rules under this technique

Every rule in the catalog tagged with this technique, grouped by vendor. Click a rule title for its full predicates, exclusions, and indicators.

Platform (all)
Domain (all)

Elastic 12 rules