Detection rules › Panther

Panther rules: tailscale

Tailscale HTTPS Disabled

#
Severity
high
Entities
actor_ids, emails, usernames
Log types
Tailscale.Audit
Reference
tailscale.com
Source
github.com/panther-labs/panther-analysis

A Tailscale User disabled HTTPS settings in your organization's tenant.

Detection Logic

from panther_tailscale_helpers import is_tailscale_admin_console_event, tailscale_alert_context


def rule(event):

    action = event.deep_get("event", "action", default="<NO_ACTION_FOUND>")
    target_property = event.deep_get(
        "event", "target", "property", default="<NO_TARGET_PROPERTY_FOUND>"
    )
    return all(
        [
            action == "DISABLE",
            target_property == "HTTPS",
            is_tailscale_admin_console_event(event),
        ]
    )


def title(event):
    user = event.deep_get("event", "actor", "loginName", default="<NO_USER_FOUND>")
    target_id = event.deep_get("event", "target", "id", default="<NO_TARGET_ID_FOUND>")
    return (
        f"Tailscale user [{user}] disabled HTTPS for "
        f"[{target_id}] in your organization’s tenant."
    )


def alert_context(event):
    return tailscale_alert_context(event)

Rule Specification

AnalysisType: rule
Description: A Tailscale User disabled HTTPS settings in your organization's tenant.
DisplayName: "Tailscale HTTPS Disabled"
Enabled: true
Filename: tailscale_https_disabled.py
Runbook: Assess if this was done by the user for a valid business reason. Be vigilant to re-enable this setting as it's in the best security interest for your organization's security posture.
Reference: https://tailscale.com/kb/1153/enabling-https/#disable-https
Severity: High
DedupPeriodMinutes: 60
LogTypes:
  - Tailscale.Audit
RuleID: "Tailscale.HTTPS.Disabled"
Threshold: 1

Stages and Predicates

Fires on Tailscale.Audit events when all of the conditions below hold.

Condition

  • event.action is DISABLE
  • event.target.property is HTTPS
  • event.origin is ADMIN_CONSOLE

Indicators

These rows show field, operator, and value matches.

Output Fields

These fields are emitted when the rule matches.

FieldSource
loginNameevent.actor.loginName
idevent.target.id

Response Runbook

Assess if this was done by the user for a valid business reason. Be vigilant to re-enable this setting as it's in the best security interest for your organization's security posture.

Worked Example

A sample event from the rule's unit tests that triggers a match.

Sample Test Event
{
  "event": {
    "action": "DISABLE",
    "actor": {
      "displayName": "Homer Simpson",
      "id": "uodc9f3CNTRL",
      "loginName": "homer.simpson@yourcompany.io",
      "type": "USER"
    },
    "eventGroupID": "1770eb26fb58fbf67fd8fbfcc2056e66",
    "origin": "ADMIN_CONSOLE",
    "target": {
      "id": "yoururl.com",
      "name": "yoururl.com",
      "property": "HTTPS",
      "type": "TAILNET"
    }
  },
  "fields": {
    "recorded": "2023-07-19 16:10:48.385283827"
  },
  "p_any_actor_ids": [
    "uodc9f3CNTRL"
  ],
  "p_any_emails": [
    "homer.simpson@yourcompany.io"
  ],
  "p_any_usernames": [
    "andrea.youwakim"
  ],
  "p_event_time": "2023-07-19 16:10:48.172000",
  "p_log_type": "Tailscale.Audit",
  "p_parse_time": "2023-07-19 16:13:56.849092",
  "p_row_id": "5e197fb53834e39eeab7feb9198d04",
  "p_schema_version": 0,
  "p_source_id": "5d65e24a-7ebb-403b-803c-51396e03d201",
  "p_source_label": "Tailscale Audit and Network Logs",
  "time": "2023-07-19 16:10:48.172000000"
}

Tailscale Machine Approval Requirements Disabled

#
Severity
high
Entities
actor_ids, emails, md5_hashes, usernames
Log types
Tailscale.Audit
Reference
tailscale.com
Source
github.com/panther-labs/panther-analysis

A Tailscale User disabled machine approval requirement settings in your organization's tenant. This means devices can access your network without requiring approval.

Detection Logic

from panther_tailscale_helpers import is_tailscale_admin_console_event, tailscale_alert_context


def rule(event):

    action = event.deep_get("event", "action", default="<NO_ACTION_FOUND>")
    target_property = event.deep_get(
        "event", "target", "property", default="<NO_TARGET_PROPERTY_FOUND>"
    )
    return all(
        [
            action == "DISABLE",
            target_property == "MACHINE_APPROVAL_NEEDED",
            is_tailscale_admin_console_event(event),
        ]
    )


def title(event):
    user = event.deep_get("event", "actor", "loginName", default="<NO_USER_FOUND>")
    return (
        f"Tailscale user [{user}] disabled device approval requirements "
        f"for new devices accessing your organization’s network."
    )


def alert_context(event):
    return tailscale_alert_context(event)

Rule Specification

AnalysisType: rule
Description: A Tailscale User disabled machine approval requirement settings in your organization's tenant. This means devices can access your network without requiring approval.
DisplayName: "Tailscale Machine Approval Requirements Disabled"
Enabled: true
Filename: tailscale_machine_approval_requirements_disabled.py
Runbook: Assess if this was done by the user for a valid business reason. Be vigilant to re-enable this setting as it's in the best security interest for your organization's security posture.
Reference: https://tailscale.com/kb/1099/device-approval/
Severity: High
DedupPeriodMinutes: 60
LogTypes:
  - Tailscale.Audit
RuleID: "Tailscale.Machine.Approval.Requirements.Disabled"
Threshold: 1

Stages and Predicates

Fires on Tailscale.Audit events when all of the conditions below hold.

Condition

  • event.action is DISABLE
  • event.target.property is MACHINE_APPROVAL_NEEDED
  • event.origin is ADMIN_CONSOLE

Indicators

These rows show field, operator, and value matches.

Output Fields

These fields are emitted when the rule matches.

FieldSource
loginNameevent.actor.loginName

Response Runbook

Assess if this was done by the user for a valid business reason. Be vigilant to re-enable this setting as it's in the best security interest for your organization's security posture.

Worked Example

A sample event from the rule's unit tests that triggers a match.

Sample Test Event
{
  "event": {
    "action": "DISABLE",
    "actor": {
      "displayName": "Homer Simpson",
      "id": "uhfQwM4CNTRL",
      "loginName": "homer.simpson@yourcompany.io",
      "type": "USER"
    },
    "eventGroupID": "6dae044c7a8998599e94657b511d28f9",
    "origin": "ADMIN_CONSOLE",
    "target": {
      "id": "panther.com",
      "name": "panther.com",
      "property": "MACHINE_APPROVAL_NEEDED",
      "type": "TAILNET"
    }
  },
  "fields": {
    "recorded": "2023-06-27 22:58:15.824694387"
  },
  "p_any_emails": [
    "homer.simpson@yourcompany.io"
  ],
  "p_any_md5_hashes": [
    "6dae044c7a8998599e94657b511d28f9"
  ],
  "p_any_usernames": [
    "homersimpson"
  ],
  "p_event_time": "2023-06-27 23:02:08.54",
  "p_log_type": "Custom.TailscaleAudit",
  "p_parse_time": "2023-06-27 23:02:08.54",
  "p_row_id": "8ec49771e630f6e8e5fdb28319d95c",
  "p_schema_version": 4,
  "p_source_id": "3acfbe1d-f7b2-4c3f-a26e-8da418fd29ef",
  "p_source_label": "Custom Tailscale Audit",
  "p_timeline": "2023-06-27 23:02:08.54",
  "time": 1687906694.915
}

Tailscale Magic DNS Disabled

#
Severity
high
Entities
actor_ids, emails, usernames
Log types
Tailscale.Audit
Reference
tailscale.com
Source
github.com/panther-labs/panther-analysis

A Tailscale User disabled magic dns settings in your organization's tenant.

Detection Logic

from panther_tailscale_helpers import is_tailscale_admin_console_event, tailscale_alert_context


def rule(event):

    action = event.deep_get("event", "action", default="<NO_ACTION_FOUND>")
    target_property = event.deep_get(
        "event", "target", "property", default="<NO_TARGET_PROPERTY_FOUND>"
    )
    return all(
        [
            action == "DISABLE",
            target_property == "MAGIC_DNS",
            is_tailscale_admin_console_event(event),
        ]
    )


def title(event):
    user = event.deep_get("event", "actor", "loginName", default="<NO_USER_FOUND>")
    target_id = event.deep_get("event", "target", "id", default="<NO_TARGET_ID_FOUND>")
    return (
        f"Tailscale user [{user}] disabled Magic DNS for "
        f"[{target_id}] in your organization’s tenant."
    )


def alert_context(event):
    return tailscale_alert_context(event)

Rule Specification

AnalysisType: rule
Description: A Tailscale User disabled magic dns settings in your organization's tenant.
DisplayName: "Tailscale Magic DNS Disabled"
Enabled: true
Filename: tailscale_magicdns_disabled.py
Runbook: Assess if this was done by the user for a valid business reason. Be vigilant to re-enable this setting as it's in the best security interest for your organization's security posture.
Reference: https://tailscale.com/kb/1081/magicdns/
Severity: High
DedupPeriodMinutes: 60
LogTypes:
  - Tailscale.Audit
RuleID: "Tailscale.Magic.DNS.Disabled"
Threshold: 1

Stages and Predicates

Fires on Tailscale.Audit events when all of the conditions below hold.

Condition

  • event.action is DISABLE
  • event.target.property is MAGIC_DNS
  • event.origin is ADMIN_CONSOLE

Indicators

These rows show field, operator, and value matches.

Output Fields

These fields are emitted when the rule matches.

FieldSource
loginNameevent.actor.loginName
idevent.target.id

Response Runbook

Assess if this was done by the user for a valid business reason. Be vigilant to re-enable this setting as it's in the best security interest for your organization's security posture.

Worked Example

A sample event from the rule's unit tests that triggers a match.

Sample Test Event
{
  "event": {
    "action": "DISABLE",
    "actor": {
      "displayName": "Homer Simpson",
      "id": "uodc9f3CNTRL",
      "loginName": "homer.simpson@yourcompany.io",
      "type": "USER"
    },
    "eventGroupID": "017676eb3de31cd31c0be96b965c2970",
    "origin": "ADMIN_CONSOLE",
    "target": {
      "id": "yoururl.com",
      "name": "yoururl.com",
      "property": "MAGIC_DNS",
      "type": "TAILNET"
    }
  },
  "fields": {
    "recorded": "2023-07-19 16:10:38.825360311"
  },
  "p_any_actor_ids": [
    "uodc9f3CNTRL"
  ],
  "p_any_emails": [
    "homer.simpson@yourcompany.io"
  ],
  "p_any_usernames": [
    "homer.simpson"
  ],
  "p_event_time": "2023-07-19 16:10:38.365000",
  "p_log_type": "Tailscale.Audit",
  "p_parse_time": "2023-07-19 16:13:56.849016",
  "p_row_id": "5e197fb53834e39eeab7feb9198904",
  "p_schema_version": 0,
  "p_source_id": "5d65e24a-7ebb-403b-803c-51396e03d201",
  "p_source_label": "Tailscale Audit and Network Logs",
  "time": "2023-07-19 16:10:38.365000000"
}

Back to all Panther rules