Back
Idc5d6e7f8-2345-6789-01ab-cdef12345011
RulenameTailscale: DNS nameservers modified
DescriptionIdentifies when the tailnet’s global DNS nameserver list is modified. Adding an attacker-controlled resolver as a tailnet-wide nameserver enables broad DNS hijacking for every device using MagicDNS resolution.
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/TailscaleDnsNameserversModified.yaml
Version1.0.0
Arm templatec5d6e7f8-2345-6789-01ab-cdef12345011.json
Deploy To Azure
Tailscale_Audit_CL
| where Action == "UPDATE"
| where tostring(Target.type) == "TAILNET"
| where tostring(Target.property) == "DNS_NAMESERVERS"
| extend ActorLogin = tostring(Actor.loginName)
| extend OldServers = Old.dns
| extend NewServers = New.dns
| extend Added = set_difference(NewServers, OldServers)
| extend Removed = set_difference(OldServers, NewServers)
| project TimeGenerated, ActorLogin, OldServers, NewServers, Added, Removed, Origin
incidentConfiguration:
  groupingConfiguration:
    lookbackDuration: P1D
    reopenClosedIncident: false
    matchingMethod: AllEntities
    enabled: true
  createIncident: true
name: 'Tailscale: DNS nameservers modified'
triggerOperator: gt
query: |
  Tailscale_Audit_CL
  | where Action == "UPDATE"
  | where tostring(Target.type) == "TAILNET"
  | where tostring(Target.property) == "DNS_NAMESERVERS"
  | extend ActorLogin = tostring(Actor.loginName)
  | extend OldServers = Old.dns
  | extend NewServers = New.dns
  | extend Added = set_difference(NewServers, OldServers)
  | extend Removed = set_difference(OldServers, NewServers)
  | project TimeGenerated, ActorLogin, OldServers, NewServers, Added, Removed, Origin
queryFrequency: 15m
description: |
  Identifies when the tailnet's global DNS nameserver list is modified. Adding an attacker-controlled resolver as a tailnet-wide nameserver enables broad DNS hijacking for every device using MagicDNS resolution.
id: c5d6e7f8-2345-6789-01ab-cdef12345011
triggerThreshold: 0
queryPeriod: 15m
version: 1.0.0
kind: Scheduled
status: Available
severity: High
requiredDataConnectors:
- connectorId: TailscaleCCF
  dataTypes:
  - Tailscale_Audit_CL
OriginalUri: https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Tailscale%20%28CCF%29/Analytic%20Rules/TailscaleDnsNameserversModified.yaml
relevantTechniques:
- T1556
- T1568
tactics:
- DefenseEvasion
- CommandAndControl
entityMappings:
- fieldMappings:
  - identifier: FullName
    columnName: ActorLogin
  entityType: Account
{
  "$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/c5d6e7f8-2345-6789-01ab-cdef12345011')]",
      "kind": "Scheduled",
      "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/c5d6e7f8-2345-6789-01ab-cdef12345011')]",
      "properties": {
        "alertRuleTemplateName": "c5d6e7f8-2345-6789-01ab-cdef12345011",
        "customDetails": null,
        "description": "Identifies when the tailnet's global DNS nameserver list is modified. Adding an attacker-controlled resolver as a tailnet-wide nameserver enables broad DNS hijacking for every device using MagicDNS resolution.\n",
        "displayName": "Tailscale: DNS nameservers 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/TailscaleDnsNameserversModified.yaml",
        "query": "Tailscale_Audit_CL\n| where Action == \"UPDATE\"\n| where tostring(Target.type) == \"TAILNET\"\n| where tostring(Target.property) == \"DNS_NAMESERVERS\"\n| extend ActorLogin = tostring(Actor.loginName)\n| extend OldServers = Old.dns\n| extend NewServers = New.dns\n| extend Added = set_difference(NewServers, OldServers)\n| extend Removed = set_difference(OldServers, NewServers)\n| project TimeGenerated, ActorLogin, OldServers, NewServers, Added, Removed, 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"
    }
  ]
}