Microsoft Sentinel Analytic Rules
cloudbrothers.infoAzure Sentinel RepoToggle Dark/Light/Auto modeToggle Dark/Light/Auto modeToggle Dark/Light/Auto modeBack to homepage

Unusual Anomaly

Back
Idd0255b5f-2a3c-4112-8744-e6757af3283a
RulenameUnusual Anomaly
DescriptionAnomaly Rules generate events in the Anomalies table. This scheduled rule tries to detect Anomalies that are not usual, they could be a type of Anomaly that has recently been activated, or an infrequent type. The detected Anomaly should be reviewed, if it is relevant enough, eventually a separate scheduled Analytics Rule could be created specifically for that Anomaly Type, so an alert and/or incident is generated everytime that type of Anomaly happens.
SeverityMedium
KindScheduled
Query frequency1h
Query period4d
Trigger threshold0
Trigger operatorgt
Source Urihttps://github.com/Azure/Azure-Sentinel/blob/master/Detections/Anomalies/UnusualAnomaly.yaml
Version1.0.3
Arm templated0255b5f-2a3c-4112-8744-e6757af3283a.json
Deploy To Azure
// You can leave out Anomalies that are already monitored through other Analytics Rules
//let _MonitoredRules = dynamic(["TestAlertName"]);
let query_frequency = 1h;
let query_lookback = 3d;
Anomalies
| where TimeGenerated > ago(query_frequency)
//| where not(RuleName has_any (_MonitoredRules))
| join kind = leftanti (
    Anomalies
    | where TimeGenerated between (ago(query_frequency + query_lookback)..ago(query_frequency))
    | distinct RuleName
) on RuleName
| extend Name = tostring(split(UserPrincipalName, "@")[0]), UPNSuffix = tostring(split(UserPrincipalName, "@")[1])
name: Unusual Anomaly
OriginalUri: https://github.com/Azure/Azure-Sentinel/blob/master/Detections/Anomalies/UnusualAnomaly.yaml
requiredDataConnectors: []
entityMappings:
- fieldMappings:
  - identifier: FullName
    columnName: UserPrincipalName
  - identifier: Name
    columnName: Name
  - identifier: UPNSuffix
    columnName: UPNSuffix
  entityType: Account
triggerThreshold: 0
id: d0255b5f-2a3c-4112-8744-e6757af3283a
tactics: []
version: 1.0.3
alertDetailsOverride:
  alertDynamicProperties:
  - alertProperty: Techniques
    value: Techniques
  alertDisplayNameFormat: Unusual Anomaly - {{RuleName}}
  alertTacticsColumnName: Tactics
queryPeriod: 4d
kind: Scheduled
eventGroupingSettings:
  aggregationKind: AlertPerResult
techniques: []
queryFrequency: 1h
severity: Medium
description: |
    'Anomaly Rules generate events in the Anomalies table. This scheduled rule tries to detect Anomalies that are not usual, they could be a type of Anomaly that has recently been activated, or an infrequent type. The detected Anomaly should be reviewed, if it is relevant enough, eventually a separate scheduled Analytics Rule could be created specifically for that Anomaly Type, so an alert and/or incident is generated everytime that type of Anomaly happens.'
query: |
  // You can leave out Anomalies that are already monitored through other Analytics Rules
  //let _MonitoredRules = dynamic(["TestAlertName"]);
  let query_frequency = 1h;
  let query_lookback = 3d;
  Anomalies
  | where TimeGenerated > ago(query_frequency)
  //| where not(RuleName has_any (_MonitoredRules))
  | join kind = leftanti (
      Anomalies
      | where TimeGenerated between (ago(query_frequency + query_lookback)..ago(query_frequency))
      | distinct RuleName
  ) on RuleName
  | extend Name = tostring(split(UserPrincipalName, "@")[0]), UPNSuffix = tostring(split(UserPrincipalName, "@")[1])  
triggerOperator: gt
{
  "$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/d0255b5f-2a3c-4112-8744-e6757af3283a')]",
      "kind": "Scheduled",
      "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/d0255b5f-2a3c-4112-8744-e6757af3283a')]",
      "properties": {
        "alertDetailsOverride": {
          "alertDisplayNameFormat": "Unusual Anomaly - {{RuleName}}",
          "alertDynamicProperties": [
            {
              "alertProperty": "Techniques",
              "value": "Techniques"
            }
          ],
          "alertTacticsColumnName": "Tactics"
        },
        "alertRuleTemplateName": "d0255b5f-2a3c-4112-8744-e6757af3283a",
        "customDetails": null,
        "description": "'Anomaly Rules generate events in the Anomalies table. This scheduled rule tries to detect Anomalies that are not usual, they could be a type of Anomaly that has recently been activated, or an infrequent type. The detected Anomaly should be reviewed, if it is relevant enough, eventually a separate scheduled Analytics Rule could be created specifically for that Anomaly Type, so an alert and/or incident is generated everytime that type of Anomaly happens.'\n",
        "displayName": "Unusual Anomaly",
        "enabled": true,
        "entityMappings": [
          {
            "entityType": "Account",
            "fieldMappings": [
              {
                "columnName": "UserPrincipalName",
                "identifier": "FullName"
              },
              {
                "columnName": "Name",
                "identifier": "Name"
              },
              {
                "columnName": "UPNSuffix",
                "identifier": "UPNSuffix"
              }
            ]
          }
        ],
        "eventGroupingSettings": {
          "aggregationKind": "AlertPerResult"
        },
        "OriginalUri": "https://github.com/Azure/Azure-Sentinel/blob/master/Detections/Anomalies/UnusualAnomaly.yaml",
        "query": "// You can leave out Anomalies that are already monitored through other Analytics Rules\n//let _MonitoredRules = dynamic([\"TestAlertName\"]);\nlet query_frequency = 1h;\nlet query_lookback = 3d;\nAnomalies\n| where TimeGenerated > ago(query_frequency)\n//| where not(RuleName has_any (_MonitoredRules))\n| join kind = leftanti (\n    Anomalies\n    | where TimeGenerated between (ago(query_frequency + query_lookback)..ago(query_frequency))\n    | distinct RuleName\n) on RuleName\n| extend Name = tostring(split(UserPrincipalName, \"@\")[0]), UPNSuffix = tostring(split(UserPrincipalName, \"@\")[1])\n",
        "queryFrequency": "PT1H",
        "queryPeriod": "P4D",
        "severity": "Medium",
        "subTechniques": [],
        "suppressionDuration": "PT1H",
        "suppressionEnabled": false,
        "tactics": [],
        "techniques": [],
        "templateVersion": "1.0.3",
        "triggerOperator": "GreaterThan",
        "triggerThreshold": 0
      },
      "type": "Microsoft.OperationalInsights/workspaces/providers/alertRules"
    }
  ]
}