Back
Idb4c5d6e7-1234-5678-90ab-cdef12345010
RulenameTailscale: Split-DNS configuration modified
DescriptionIdentifies when the tailnet split-DNS configuration is modified. Split-DNS overrides per-domain resolution within the tailnet - an attacker adding a new domain mapping or changing the resolver IP can hijack DNS for that domain.
SeverityHigh
TacticsDefenseEvasion
CommandAndControl
TechniquesT1556
T1568
Required data connectorsTailscaleCCF
KindScheduled
Query frequency15m
Query period15m
Trigger threshold0
Trigger operatorgt
Source Urihttps://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Tailscale%20%28CCF%29/Analytic%20Rules/TailscaleSplitDnsModified.yaml
Version1.0.0
Arm templateb4c5d6e7-1234-5678-90ab-cdef12345010.json
Deploy To Azure
Tailscale_Audit_CL
| where Action == "UPDATE"
| where tostring(Target.type) == "TAILNET"
| where tostring(Target.property) == "DNS_SPLIT_DNS"
| extend ActorLogin = tostring(Actor.loginName)
| extend OldDomains = bag_keys(Old)
| extend NewDomains = bag_keys(New)
| extend AddedDomains = set_difference(NewDomains, OldDomains)
| extend RemovedDomains = set_difference(OldDomains, NewDomains)
| project TimeGenerated, ActorLogin, AddedDomains, RemovedDomains, Old, New, Origin
version: 1.0.0
OriginalUri: https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Tailscale%20%28CCF%29/Analytic%20Rules/TailscaleSplitDnsModified.yaml
triggerThreshold: 0
requiredDataConnectors:
- dataTypes:
  - Tailscale_Audit_CL
  connectorId: TailscaleCCF
tactics:
- DefenseEvasion
- CommandAndControl
relevantTechniques:
- T1556
- T1568
kind: Scheduled
incidentConfiguration:
  groupingConfiguration:
    matchingMethod: AllEntities
    lookbackDuration: P1D
    reopenClosedIncident: false
    enabled: true
  createIncident: true
entityMappings:
- fieldMappings:
  - identifier: FullName
    columnName: ActorLogin
  entityType: Account
description: |
  Identifies when the tailnet split-DNS configuration is modified. Split-DNS overrides per-domain resolution within the tailnet - an attacker adding a new domain mapping or changing the resolver IP can hijack DNS for that domain.
triggerOperator: gt
status: Available
queryFrequency: 15m
id: b4c5d6e7-1234-5678-90ab-cdef12345010
name: 'Tailscale: Split-DNS configuration modified'
severity: High
query: |
  Tailscale_Audit_CL
  | where Action == "UPDATE"
  | where tostring(Target.type) == "TAILNET"
  | where tostring(Target.property) == "DNS_SPLIT_DNS"
  | extend ActorLogin = tostring(Actor.loginName)
  | extend OldDomains = bag_keys(Old)
  | extend NewDomains = bag_keys(New)
  | extend AddedDomains = set_difference(NewDomains, OldDomains)
  | extend RemovedDomains = set_difference(OldDomains, NewDomains)
  | project TimeGenerated, ActorLogin, AddedDomains, RemovedDomains, Old, New, Origin
queryPeriod: 15m
{
  "$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/b4c5d6e7-1234-5678-90ab-cdef12345010')]",
      "kind": "Scheduled",
      "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/b4c5d6e7-1234-5678-90ab-cdef12345010')]",
      "properties": {
        "alertRuleTemplateName": "b4c5d6e7-1234-5678-90ab-cdef12345010",
        "customDetails": null,
        "description": "Identifies when the tailnet split-DNS configuration is modified. Split-DNS overrides per-domain resolution within the tailnet - an attacker adding a new domain mapping or changing the resolver IP can hijack DNS for that domain.\n",
        "displayName": "Tailscale: Split-DNS configuration modified",
        "enabled": true,
        "entityMappings": [
          {
            "entityType": "Account",
            "fieldMappings": [
              {
                "columnName": "ActorLogin",
                "identifier": "FullName"
              }
            ]
          }
        ],
        "incidentConfiguration": {
          "createIncident": true,
          "groupingConfiguration": {
            "enabled": true,
            "lookbackDuration": "P1D",
            "matchingMethod": "AllEntities",
            "reopenClosedIncident": false
          }
        },
        "OriginalUri": "https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Tailscale%20%28CCF%29/Analytic%20Rules/TailscaleSplitDnsModified.yaml",
        "query": "Tailscale_Audit_CL\n| where Action == \"UPDATE\"\n| where tostring(Target.type) == \"TAILNET\"\n| where tostring(Target.property) == \"DNS_SPLIT_DNS\"\n| extend ActorLogin = tostring(Actor.loginName)\n| extend OldDomains = bag_keys(Old)\n| extend NewDomains = bag_keys(New)\n| extend AddedDomains = set_difference(NewDomains, OldDomains)\n| extend RemovedDomains = set_difference(OldDomains, NewDomains)\n| project TimeGenerated, ActorLogin, AddedDomains, RemovedDomains, Old, New, Origin\n",
        "queryFrequency": "PT15M",
        "queryPeriod": "PT15M",
        "severity": "High",
        "status": "Available",
        "subTechniques": [],
        "suppressionDuration": "PT1H",
        "suppressionEnabled": false,
        "tactics": [
          "CommandAndControl",
          "DefenseEvasion"
        ],
        "techniques": [
          "T1556",
          "T1568"
        ],
        "templateVersion": "1.0.0",
        "triggerOperator": "GreaterThan",
        "triggerThreshold": 0
      },
      "type": "Microsoft.OperationalInsights/workspaces/providers/alertRules"
    }
  ]
}