Detection rules › Panther
Anthropic SSO Disabled
Detects when SSO is disabled or an SSO connection is deactivated for the organization. Disabling SSO allows users to bypass the identity provider and use weaker authentication methods. This is a critical security posture change that could indicate an attacker attempting to maintain access without IdP visibility.
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Stealth | T1562.001 Impair Defenses: Disable or Modify Tools |
Rule body yaml
AnalysisType: rule
RuleID: Anthropic.Activity.SSO.Disabled
DisplayName: "Anthropic SSO Disabled"
Enabled: true
Filename: anthropic_sso_disabled.py
LogTypes:
- Anthropic.Activity
Severity: High
Description: >
Detects when SSO is disabled or an SSO connection is deactivated for the
organization. Disabling SSO allows users to bypass the identity provider
and use weaker authentication methods. This is a critical security posture
change that could indicate an attacker attempting to maintain access
without IdP visibility.
Runbook: |
1. Find all Anthropic.Activity events by actor:email_address in the 24 hours before the alert to identify any suspicious activity leading up to the SSO change
2. Check if actor:ip_address matches previously seen IP addresses for this actor in the past 30 days to detect potential account compromise
3. Find all SSO-related events (sso_login_failed, sso_login_initiated, sso_login_succeeded) in the 1 hour before and after the alert to understand the authentication context
Tags:
- Anthropic
- Authentication
- Defense Evasion
Reports:
MITRE ATT&CK:
- TA0005:T1562.001 # Impair Defenses: Disable or Modify Tools
Tests:
- Name: SSO toggled off
ExpectedResult: true
Log:
{
"id": "activity_01ABC123",
"created_at": "2026-05-07T10:00:00Z",
"organization_id": "org_01XYZ",
"type": "org_sso_toggled",
"is_enabled": false,
"actor": {
"type": "user_actor",
"email_address": "admin@example.com",
"user_id": "user_01ABC",
"ip_address": "10.0.0.1",
"user_agent": "Mozilla/5.0"
}
}
- Name: SSO toggled on - not a match
ExpectedResult: false
Log:
{
"id": "activity_01DEF456",
"created_at": "2026-05-07T10:00:00Z",
"organization_id": "org_01XYZ",
"type": "org_sso_toggled",
"is_enabled": true,
"actor": {
"type": "user_actor",
"email_address": "admin@example.com",
"user_id": "user_01ABC",
"ip_address": "10.0.0.1"
}
}
- Name: SSO connection deactivated
ExpectedResult: true
Log:
{
"id": "activity_01GHI789",
"created_at": "2026-05-07T10:00:00Z",
"organization_id": "org_01XYZ",
"type": "org_sso_connection_deactivated",
"actor": {
"type": "user_actor",
"email_address": "admin@example.com",
"user_id": "user_01GHI",
"ip_address": "10.0.0.3",
"user_agent": "Mozilla/5.0"
}
}
- Name: Non-matching event type
ExpectedResult: false
Log:
{
"id": "activity_01JKL012",
"created_at": "2026-05-07T10:00:00Z",
"organization_id": "org_01XYZ",
"type": "sso_login_succeeded",
"actor": {
"type": "user_actor",
"email_address": "user@example.com",
"user_id": "user_01JKL",
"ip_address": "10.0.0.4"
}
}
Detection logic
Condition
(type eq "org_sso_toggled" and is_enabled in ["False", "false"]) or type eq "org_sso_connection_deactivated"
Indicators
Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.
| Field | Kind | Values |
|---|---|---|
is_enabled | in |
|
type | eq |
|
Output fields
Fields the rule emits when it matches. Chronicle authors list these in the outcome block; they appear on the detection and $risk_score drives alerting. Sentinel / Defender XDR rules build them up through project / summarize / extend stages. Sentinel maps these into alert fields via entityMappings and customDetails; Defender XDR custom detections surface them as alert fields directly.
| Field | Source |
|---|---|
event_type | type |
actor_type | actor.type |
actor_email | actor.email_address |
actor_user_id | actor.user_id |
ip_address | actor.ip_address |
user_agent | actor.user_agent |
api_key_id | actor.api_key_id |
organization_id | |
ips | p_any_ip_addresses |