Detection rules › Panther

Panther rules: onepassword

1Password Login From CrowdStrike Unmanaged Device

#
Severity
medium
Tags
Multi-Table Query
Reference
www.crowdstrike.com
Source
github.com/panther-labs/panther-analysis

Detects 1Password Logins from IP addresses not found in CrowdStrike''s AIP list. May indicate unmanaged device being used, or faulty CrowdStrike Sensor.

Telemetry coverage

PlatformRecord / event type
1Passwordcredentials_ok

Detection logic

def rule(_):
    return True


def title(event):
    return (
        "1Password Login for "
        f"[{event.deep_get('target_user', 'email', default = '<email_not_found>')}]"
        " from unmanaged IP Address."
    )

Rule specification

AnalysisType: scheduled_rule
Description: Detects 1Password Logins from IP addresses not found in CrowdStrike''s AIP list. May indicate unmanaged device being used, or faulty CrowdStrike Sensor.
DisplayName: "1Password Login From CrowdStrike Unmanaged Device"
Enabled: false
Filename: onepassword_login_from_crowdstrike_unmanaged_device.py
Reference: https://www.crowdstrike.com/wp-content/uploads/2023/05/crowdstrike-falcon-device-control-data-sheet.pdf
Severity: Medium
DedupPeriodMinutes: 60
RuleID: "OnePassword.Login.From.CrowdStrike.Unmanaged.Device"
Threshold: 1
ScheduledQueries:
  - 1Password Login From CrowdStrike Unmanaged Device Query
Tags:
  - Multi-Table Query

Stages and Predicates

Rule logic

This rule alerts on rows returned by its scheduled query 1Password Login From CrowdStrike Unmanaged Device Query; its Python module (Detection logic above) shapes the alert rather than filtering.

Output fields

Fields the rule emits when it matches, drawn from the rule's alert_context.

FieldSource
emailtarget_user.email

Worked example

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

Sample Test Event
{
  "category": "success",
  "client": {
    "app_name": "1Password Browser Extension",
    "app_version": "12345",
    "ip_address": "1.2.3.4",
    "os_name": "MacOSX",
    "os_version": "10.15.7",
    "platform_name": "Chrome",
    "platform_version": "108.0.0.0"
  },
  "country": "US",
  "session_uuid": "C33SI4DELBE6RJ5QP7GKXBDUAY",
  "target_user": {
    "email": "homer.simpson@springfield.com",
    "name": "Homer Simpson",
    "uuid": "ABCDEFGHIJKLMNOP"
  },
  "timestamp": "2023-01-09 21:25:29.783",
  "type": "credentials_ok",
  "uuid": "L7L2AXBWKZDOXDQTUVGW4STMSQ"
}

BETA - Sensitive 1Password Item Accessed

#
Status
Experimental
Severity
low
Log types
OnePassword.ItemUsage
Tags
Configuration Required, 1Password, Lookup Table, Credential Access:Unsecured Credentials
Reference
support.1password.com
Source
github.com/panther-labs/panther-analysis

Alerts when a user defined list of sensitive items in 1Password is accessed

MITRE ATT&CK coverage

TacticTechniques
Credential Access

Telemetry coverage

PlatformRecord / event type
1Passwordany: Item usage (catch-all)

Detection logic

"""
This rule requires the use of the Lookup Table feature currently in Beta in Panther, 1Password
logs reference items by their UUID without human-friendly titles. The instructions to create a
lookup table to do this translation can be found at :

 https://docs.runpanther.io/guides/using-lookup-tables-1password-uuids

The steps detailed in that document are required for this rule to function as intended.
"""

# Add the human-readable names of 1Password items you want to monitor
SENSITIVE_ITEM_WATCHLIST = ["demo_item"]


def rule(event):
    return (
        event.deep_get("p_enrichment", "1Password Translation", "item_uuid", "title")
        in SENSITIVE_ITEM_WATCHLIST
    )


def title(event):
    return f"A Sensitive 1Password Item was Accessed by user {event.deep_get('user', 'name')}"


def alert_context(event):
    context = {
        "user": event.deep_get("user", "name"),
        "item_name": event.deep_get("p_enrichment", "1Password Translation", "item_uuid", "title"),
        "client": event.deep_get("client", "app_name"),
        "ip_address": event.udm("source_ip"),
        "event_time": event.get("timestamp"),
    }

    return context

Rule specification

AnalysisType: rule
Filename: onepassword_lut_sensitive_item_access.py
RuleID: "OnePassword.Lut.Sensitive.Item"
DedupPeriodMinutes: 30
DisplayName: "BETA - Sensitive 1Password Item Accessed"
Enabled: false
LogTypes:
  - OnePassword.ItemUsage
Reference: https://support.1password.com/1password-com-items/
Severity: Low
Description: Alerts when a user defined list of sensitive items in 1Password is accessed
SummaryAttributes:
  - p_any_ip_addresses
  - p_any_emails
Tags:
  - Configuration Required
  - 1Password
  - Lookup Table
  - Credential Access:Unsecured Credentials
Status: Experimental
Reports:
  MITRE ATT&CK:
    - TA0006:T1552

Stages and Predicates

Fires on OnePassword.ItemUsage events when the condition below holds.

Condition

  • p_enrichment.1Password Translation.item_uuid.title is one of demo_item
Alert deduplication
repeat matches within 30m group into one alert

Indicators

These rows show field, operator, and value matches.

Output fields

Fields the rule emits when it matches, drawn from the rule's alert_context.

FieldSource
useruser.name
item_namep_enrichment.1Password Translation.item_uuid.title
clientclient.app_name
ip_addresssource_ip
event_timetimestamp

Worked example

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

Sample Test Event
{
  "client": {
    "app_name": "1Password Browser Extension",
    "app_version": "20195",
    "ip_address": "1.1.1.1",
    "os_name": "MacOSX",
    "os_version": "10.15.7",
    "platform_name": "Chrome",
    "platform_version": "98.0.4758.102"
  },
  "item_uuid": "1234",
  "p_enrichment": {
    "1Password Translation": {
      "item_uuid": {
        "title": "demo_item",
        "updatedAt": "2022-02-14 17:44:50.000000000",
        "uuid": "12344321"
      }
    }
  },
  "p_log_type": "OnePassword.ItemUsage",
  "timestamp": "2022-02-23 22:11:50.591",
  "user": {
    "email": "homer@springfield.gov",
    "name": "Homer Simpson",
    "uuid": "12345"
  },
  "uuid": "12345",
  "vault_uuid": "54321"
}

Configuration Required - Sensitive 1Password Item Accessed

#
Severity
low
Log types
OnePassword.ItemUsage
Tags
Configuration Required, 1Password, Credential Access:Unsecured Credentials
Reference
support.1password.com
Source
github.com/panther-labs/panther-analysis

Alerts when a user defined list of sensitive items in 1Password is accessed

MITRE ATT&CK coverage

TacticTechniques
Credential Access

Telemetry coverage

PlatformRecord / event type
1Passwordany: Item usage (catch-all)

Detection logic

"""
This rule detects access to high sensitivity items in your 1Password account. 1Password references
these items by their UUID so the SENSITIVE_ITEM_WATCHLIST below allows for the mapping of UUID to
meaningful name.

There is an alternative method for creating this rule that uses Panther's lookup table feature,
(currently in beta). That rule can be found in the 1Password detection pack with the name
BETA - Sensitive 1Password Item Accessed (onepassword_lut_sensitive_item_access.py)
"""

SENSITIVE_ITEM_WATCHLIST = {"ecd1d435c26440dc930ddfbbef201a11": "demo_item"}


def rule(event):
    return event.get("item_uuid") in SENSITIVE_ITEM_WATCHLIST.keys()


def title(event):
    return f"A Sensitive 1Password Item was Accessed by user {event.deep_get('user', 'name')}"


def alert_context(event):
    context = {
        "user": event.deep_get("user", "name"),
        "item_name": event.deep_get("p_enrichment", "1Password Translation", "item_uuid", "title"),
        "client": event.deep_get("client", "app_name"),
        "ip_address": event.udm("source_ip"),
        "event_time": event.get("timestamp"),
    }

    return context

Rule specification

AnalysisType: rule
Filename: onepassword_sensitive_item_access.py
RuleID: "OnePassword.Sensitive.Item"
DedupPeriodMinutes: 30
DisplayName: "Configuration Required - Sensitive 1Password Item Accessed"
Enabled: false
LogTypes:
  - OnePassword.ItemUsage
Reference: https://support.1password.com/1password-com-items/
Severity: Low
Description: Alerts when a user defined list of sensitive items in 1Password is accessed
SummaryAttributes:
  - p_any_ip_addresses
  - p_any_emails
Tags:
  - Configuration Required
  - 1Password
  - Credential Access:Unsecured Credentials
Reports:
  MITRE ATT&CK:
    - TA0006:T1552

Stages and Predicates

Fires on OnePassword.ItemUsage events when the condition below holds.

Condition

  • item_uuid is one of ecd1d435c26440dc930ddfbbef201a11
Alert deduplication
repeat matches within 30m group into one alert

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
item_uuidin
  • ecd1d435c26440dc930ddfbbef201a11
field:"item_uuid" kind:in value:"ecd1d435c26440dc930ddfbbef201a11"

Output fields

Fields the rule emits when it matches, drawn from the rule's alert_context.

FieldSource
useruser.name
item_namep_enrichment.1Password Translation.item_uuid.title
clientclient.app_name
ip_addresssource_ip
event_timetimestamp

Worked example

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

Sample Test Event
{
  "client": {
    "app_name": "1Password Browser Extension",
    "app_version": "20195",
    "ip_address": "1.1.1.1.1",
    "os_name": "MacOSX",
    "os_version": "10.15.7",
    "platform_name": "Chrome",
    "platform_version": "4.0.4.102"
  },
  "item_uuid": "ecd1d435c26440dc930ddfbbef201a11",
  "p_log_type": "OnePassword.ItemUsage",
  "timestamp": "2022-02-23 20:27:17.071",
  "used_version": 2,
  "user": {
    "email": "homer@springfield.gov",
    "name": "Homer Simpson",
    "uuid": "2222222"
  },
  "uuid": "ecd1d435c26440dc930ddfbbef201a11",
  "vault_uuid": "111111"
}

Unusual 1Password Client Detected

#
Severity
medium
Log types
OnePassword.SignInAttempt
Tags
1Password, Credential Access:Credentials from Password Stores
Reference
support.1password.com
Source
github.com/panther-labs/panther-analysis

Detects when unusual or undesirable 1Password clients access your 1Password account

MITRE ATT&CK coverage

TacticTechniques
Credential Access

Telemetry coverage

Detection logic

"""
This rule detects unusual or unauthorized clients connecting to your 1Password account.
In order to get a baseline of what clients are being used in your environment run the following
query in Data Explorer:

select distinct client:app_name from panther_logs.public.onepassword_signinattempt

The client_allowlist variable is a collection of standard 1Password clients.
If this differs from your orginization's needs this rule can be edited to suit your environment
"""


def rule(event):
    client_allowlist = [
        "1Password CLI",
        "1Password for Web",
        "1Password for Mac",
        "1Password SCIM Bridge",  # Used for automated account provisioning
        "1Password for Windows",
        "1Password for iOS",
        "1Password Browser Extension",
        "1Password for Android",
        "1Password for Linux",
        "1Password SDK",
    ]

    app_name = event.deep_get("client", "app_name")
    if not app_name:
        return False

    return app_name not in client_allowlist


def title(event):
    return f"Unusual 1Password client - {event.deep_get('client', 'app_name')} detected"


def alert_context(event):
    context = {}
    context["user"] = event.deep_get("target_user", "name", default="UNKNOWN_USER")
    context["user_email"] = event.udm("actor_user")
    context["ip_address"] = event.udm("source_ip")
    context["client"] = event.deep_get("client", "app_name", default="UNKNOWN_CLIENT")
    context["OS"] = event.deep_get("client", "os_name", default="UNKNOWN_OS")
    context["login_result"] = event.get("category")
    context["time_seen"] = event.get("timestamp")

    return context

Rule specification

AnalysisType: rule
Filename: onepassword_unusual_client.py
RuleID: "OnePassword.Unusual.Client"
DedupPeriodMinutes: 120
DisplayName: "Unusual 1Password Client Detected"
Enabled: true
LogTypes:
  - OnePassword.SignInAttempt
Severity: Medium
Description: Detects when unusual or undesirable 1Password clients access your 1Password account
Reference: https://support.1password.com/category/accounts/
Tags:
  - 1Password
  - Credential Access:Credentials from Password Stores
Reports:
  MITRE ATT&CK:
    - TA0006:T1555
SummaryAttributes:
  - p_any_ip_addresses
  - p_any_emails

Stages and Predicates

Fires on OnePassword.SignInAttempt events when all of the conditions below hold.

Condition

  • client.app_name is present
  • client.app_name is not one of 1Password CLI, 1Password for Web, 1Password for Mac, 1Password SCIM Bridge, 1Password for Windows (+5 more values, see Indicators below)
Alert deduplication
repeat matches within 2h group into one alert

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
client.app_namein1Password Browser Extension, 1Password CLI, 1Password SCIM Bridge, 1Password SDK, 1Password for Android, 1Password for Linux, 1Password for Mac, 1Password for Web, 1Password for Windows, 1Password for iOSexcludes:client.app_name

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
client.app_nameis_not_null
  • (no value, null check)
field:"client.app_name" kind:is_not_null

Output fields

Fields the rule emits when it matches, drawn from the rule's alert_context.

FieldSource
app_nameclient.app_name

Worked example

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

Sample Test Event
{
  "category": "success",
  "client": {
    "app_name": "Bartco 1Password Manager",
    "app_version": "70902005",
    "ip_address": "1.1.1.1",
    "os_name": "MacOSX",
    "os_version": "11.6.1",
    "platform_name": "US - C02FR0H8MD6P",
    "platform_version": "MacBookPro16,1"
  },
  "country": "US",
  "p_log_type": "OnePassword.SignInAttempt",
  "session_uuid": "12345",
  "target_user": {
    "email": "homer@springfield.gov",
    "name": "Homer Simpson",
    "uuid": "1234"
  },
  "timestamp": "2021-12-15 18:02:23",
  "type": "credentials_ok",
  "uuid": "1234"
}