Back
Id3f4bd2a1-7c58-4a83-9c2e-6d1f0a8b5c31
RulenameContraForce - Privileged access change
DescriptionIdentifies administrative access changes made in the ContraForce workspace: workspace role

assignments, changes and removals, organization role changes, member additions and removals,

and service provider (MSP) access grants or revocations. Review each change to confirm it was

expected and authorized. The affected member and the old and new roles are carried in the

event metadata.
SeverityMedium
TacticsPrivilegeEscalation
Persistence
TechniquesT1078
T1098
Required data connectorsContraForceEvents
KindScheduled
Query frequency5m
Query period1d
Trigger threshold0
Trigger operatorgt
Source Urihttps://github.com/Azure/Azure-Sentinel/blob/master/Solutions/ContraForce/Analytic%20Rules/ContraForcePrivilegedAccessChange.yaml
Version1.0.0
Arm template3f4bd2a1-7c58-4a83-9c2e-6d1f0a8b5c31.json
Deploy To Azure
ContraForceEvents_CL
| where ingestion_time() > ago(5m)
| where ActivityType in ("WorkspaceRoleAssigned", "WorkspaceRoleChanged", "WorkspaceRoleRemoved", "OrganizationalRoleChanged", "MemberAdded", "MemberRemoved", "ServiceProviderAdded", "ServiceProviderRemoved")
| extend Meta = parse_json(Metadata)
| extend MemberEmail = tostring(Meta.MemberEmail),
         MemberType = tostring(Meta.MemberType),
         FromRole = tostring(Meta.FromRole),
         ToRole = tostring(Meta.ToRole),
         Members = tostring(Meta.Members)
| project TimeGenerated, EventId, CfWorkspaceId, ActivityType, ActivityAction,
          ActorName, ActorEmail, TargetResourceType, TargetResourceId, TargetResourceName,
          MemberEmail, MemberType, FromRole, ToRole, Members
relevantTechniques:
- T1078
- T1098
triggerThreshold: 0
id: 3f4bd2a1-7c58-4a83-9c2e-6d1f0a8b5c31
eventGroupingSettings:
  aggregationKind: AlertPerResult
queryPeriod: 1d
triggerOperator: gt
incidentConfiguration:
  createIncident: true
  groupingConfiguration:
    enabled: true
    reopenClosedIncident: false
    matchingMethod: Selected
    groupByCustomDetails:
    - EventId
    lookbackDuration: PT2H
alertDetailsOverride:
  alertDisplayNameFormat: 'ContraForce access change: {{ActivityType}} on {{TargetResourceName}}'
  alertDescriptionFormat: '{{ActorName}} performed {{ActivityType}} on {{TargetResourceName}}. Member email, old and new roles are in the alert custom details.'
status: Available
OriginalUri: https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/ContraForce/Analytic%20Rules/ContraForcePrivilegedAccessChange.yaml
queryFrequency: 5m
requiredDataConnectors:
- dataTypes:
  - ContraForceEvents_CL
  connectorId: ContraForceEvents
tactics:
- PrivilegeEscalation
- Persistence
query: |
  ContraForceEvents_CL
  | where ingestion_time() > ago(5m)
  | where ActivityType in ("WorkspaceRoleAssigned", "WorkspaceRoleChanged", "WorkspaceRoleRemoved", "OrganizationalRoleChanged", "MemberAdded", "MemberRemoved", "ServiceProviderAdded", "ServiceProviderRemoved")
  | extend Meta = parse_json(Metadata)
  | extend MemberEmail = tostring(Meta.MemberEmail),
           MemberType = tostring(Meta.MemberType),
           FromRole = tostring(Meta.FromRole),
           ToRole = tostring(Meta.ToRole),
           Members = tostring(Meta.Members)
  | project TimeGenerated, EventId, CfWorkspaceId, ActivityType, ActivityAction,
            ActorName, ActorEmail, TargetResourceType, TargetResourceId, TargetResourceName,
            MemberEmail, MemberType, FromRole, ToRole, Members
name: ContraForce - Privileged access change
severity: Medium
version: 1.0.0
customDetails:
  ToRole: ToRole
  EventId: EventId
  ActorEmail: ActorEmail
  CfWorkspaceId: CfWorkspaceId
  FromRole: FromRole
  MemberEmail: MemberEmail
description: |
  'Identifies administrative access changes made in the ContraForce workspace: workspace role
  assignments, changes and removals, organization role changes, member additions and removals,
  and service provider (MSP) access grants or revocations. Review each change to confirm it was
  expected and authorized. The affected member and the old and new roles are carried in the
  event metadata.'
kind: Scheduled
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "workspace": {
      "type": "String"
    }
  },
  "resources": [
    {
      "apiVersion": "2024-01-01-preview",
      "id": "[concat(resourceId('Microsoft.OperationalInsights/workspaces/providers', parameters('workspace'), 'Microsoft.SecurityInsights'),'/alertRules/3f4bd2a1-7c58-4a83-9c2e-6d1f0a8b5c31')]",
      "kind": "Scheduled",
      "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/3f4bd2a1-7c58-4a83-9c2e-6d1f0a8b5c31')]",
      "properties": {
        "alertDetailsOverride": {
          "alertDescriptionFormat": "{{ActorName}} performed {{ActivityType}} on {{TargetResourceName}}. Member email, old and new roles are in the alert custom details.",
          "alertDisplayNameFormat": "ContraForce access change: {{ActivityType}} on {{TargetResourceName}}"
        },
        "alertRuleTemplateName": "3f4bd2a1-7c58-4a83-9c2e-6d1f0a8b5c31",
        "customDetails": {
          "ActorEmail": "ActorEmail",
          "CfWorkspaceId": "CfWorkspaceId",
          "EventId": "EventId",
          "FromRole": "FromRole",
          "MemberEmail": "MemberEmail",
          "ToRole": "ToRole"
        },
        "description": "'Identifies administrative access changes made in the ContraForce workspace: workspace role\nassignments, changes and removals, organization role changes, member additions and removals,\nand service provider (MSP) access grants or revocations. Review each change to confirm it was\nexpected and authorized. The affected member and the old and new roles are carried in the\nevent metadata.'\n",
        "displayName": "ContraForce - Privileged access change",
        "enabled": true,
        "entityMappings": null,
        "eventGroupingSettings": {
          "aggregationKind": "AlertPerResult"
        },
        "incidentConfiguration": {
          "createIncident": true,
          "groupingConfiguration": {
            "enabled": true,
            "groupByCustomDetails": [
              "EventId"
            ],
            "lookbackDuration": "PT2H",
            "matchingMethod": "Selected",
            "reopenClosedIncident": false
          }
        },
        "OriginalUri": "https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/ContraForce/Analytic%20Rules/ContraForcePrivilegedAccessChange.yaml",
        "query": "ContraForceEvents_CL\n| where ingestion_time() > ago(5m)\n| where ActivityType in (\"WorkspaceRoleAssigned\", \"WorkspaceRoleChanged\", \"WorkspaceRoleRemoved\", \"OrganizationalRoleChanged\", \"MemberAdded\", \"MemberRemoved\", \"ServiceProviderAdded\", \"ServiceProviderRemoved\")\n| extend Meta = parse_json(Metadata)\n| extend MemberEmail = tostring(Meta.MemberEmail),\n         MemberType = tostring(Meta.MemberType),\n         FromRole = tostring(Meta.FromRole),\n         ToRole = tostring(Meta.ToRole),\n         Members = tostring(Meta.Members)\n| project TimeGenerated, EventId, CfWorkspaceId, ActivityType, ActivityAction,\n          ActorName, ActorEmail, TargetResourceType, TargetResourceId, TargetResourceName,\n          MemberEmail, MemberType, FromRole, ToRole, Members\n",
        "queryFrequency": "PT5M",
        "queryPeriod": "P1D",
        "severity": "Medium",
        "status": "Available",
        "subTechniques": [],
        "suppressionDuration": "PT1H",
        "suppressionEnabled": false,
        "tactics": [
          "Persistence",
          "PrivilegeEscalation"
        ],
        "techniques": [
          "T1078",
          "T1098"
        ],
        "templateVersion": "1.0.0",
        "triggerOperator": "GreaterThan",
        "triggerThreshold": 0
      },
      "type": "Microsoft.OperationalInsights/workspaces/providers/alertRules"
    }
  ]
}