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
version: 1.0.0
OriginalUri: https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Tailscale%20%28CCF%29/Analytic%20Rules/TailscaleDnsNameserversModified.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'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.
triggerOperator: gt
status: Available
queryFrequency: 15m
id: c5d6e7f8-2345-6789-01ab-cdef12345011
name: 'Tailscale: DNS nameservers modified'
severity: High
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
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/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"
    }
  ]
}