Detection rules › Sublime MQL

Sublime MQL rules: beta

RuleSeverity
beta.DLP: Australia ABNhigh
beta.DLP: Australia Bank Accounthigh
beta.DLP: Australia Driver's Licensehigh
beta.DLP: Australia Medicarehigh
beta.DLP: Australia Passport Numberhigh
beta.DLP: Australia Tax File Numberhigh
beta.DLP: Austria VAThigh
beta.DLP: AWS Access Keyhigh
beta.DLP: Basic Auth Headerhigh
beta.DLP: Belgium VAThigh
beta.DLP: Blood Test Termhigh
beta.DLP: Canada Bank Accounthigh
beta.DLP: Canada Driver's Licensehigh
beta.DLP: Canada Health Service Numberhigh
beta.DLP: Canada Passport Numberhigh
beta.DLP: Canada PHINhigh
beta.DLP: Canadian Social Insurance Number (SIN)high
beta.DLP: China Resident IDhigh
beta.DLP: Crypto Wallet Addresshigh
beta.DLP: DEA Numberhigh
beta.DLP: Disability / Impairmenthigh
beta.DLP: FDA Drug Namehigh
beta.DLP: Finland European Health Insurancehigh
beta.DLP: France Bank Accounthigh
beta.DLP: France Driver's Licensehigh
beta.DLP: France National ID (CNI)high
beta.DLP: France Passport Numberhigh
beta.DLP: France Social Security Number (INSEE)high
beta.DLP: France VAThigh
beta.DLP: Germany Identity Card (Personalausweis)high
beta.DLP: Germany Passport Numberhigh
beta.DLP: Germany Tax ID (Steueridentifikationsnummer)high
beta.DLP: Germany VAThigh
beta.DLP: GitHub Tokenhigh
beta.DLP: Google / GCP API Keyhigh
beta.DLP: Hungary TAJhigh
beta.DLP: Hungary VAThigh
beta.DLP: IBAN Codehigh
beta.DLP: ICD-10 Codehigh
beta.DLP: ICD-9 Codehigh
beta.DLP: Japan Driver's Licensehigh
beta.DLP: Japan MyNumber IDhigh
beta.DLP: Japan Passport Numberhigh
beta.DLP: JSON Web Token (JWT)high
beta.DLP: Luxembourg Non-Natural IDhigh
beta.DLP: MAC Addresshigh
beta.DLP: Medical Conditionhigh
beta.DLP: Medical Specialtyhigh
beta.DLP: National Provider Identifier (NPI)high
beta.DLP: Netherlands BSN / Tax IDhigh
beta.DLP: Netherlands VAThigh
beta.DLP: New Zealand Bank Accounthigh
beta.DLP: New Zealand MOHhigh
beta.DLP: NHS Numberhigh
beta.DLP: OAuth Client Secrethigh
beta.DLP: Outbound references an email address outside recipient domainslow
beta.DLP: PCI US Credit Card Number (Any Network)high
beta.DLP: Poland REGONhigh
beta.DLP: Private Keyhigh
beta.DLP: Singapore NRIChigh
beta.DLP: Singapore UENhigh
beta.DLP: Slack Access Tokenhigh
beta.DLP: South Korea Resident Registration Numberhigh
beta.DLP: Spain Bank Accounthigh
beta.DLP: Spain DNI/NIE / Passport / SSN / Tax IDhigh
beta.DLP: SSL/TLS Certificatehigh
beta.DLP: Surgical Procedurehigh
beta.DLP: Sweden Personnummer / Tax IDhigh
beta.DLP: SWIFT/BIC Codehigh
beta.DLP: UK Driver's Licensehigh
beta.DLP: UK Electoral Rollhigh
beta.DLP: UK National Insurance Numberhigh
beta.DLP: UK Passporthigh
beta.DLP: UK UTR (Tax)high
beta.DLP: US ABA Routing Numberhigh
beta.DLP: US Bank Account Numbermedium
beta.DLP: US Driver's Licensehigh
beta.DLP: US Individual Taxpayer Identification Number (ITIN)high
beta.DLP: US Medicare Beneficiary IDhigh
beta.DLP: US Passport Numberhigh
beta.DLP: US Social Security Number (SSN)high
beta.DLP: Vehicle VINhigh
DLP - Clear-Text Credentials Outboundcritical

beta.DLP: Australia ABN

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Australian Business Numbers (ABN).

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Financial Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "au_abn" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "au_abn" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "au_abn" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "au_abn" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Australian Business Numbers (ABN).

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'au_abn'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'au_abn'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'au_abn'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'au_abn'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsau_abn
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsau_abn
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsau_abn
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsau_abn
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "au_abn"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "au_abn"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "au_abn"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "au_abn"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Australia Bank Account

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Australian bank account numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Financial Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "au_bank_account" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "au_bank_account" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "au_bank_account" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "au_bank_account" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Australian bank account numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'au_bank_account'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'au_bank_account'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'au_bank_account'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'au_bank_account'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsau_bank_account
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsau_bank_account
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsau_bank_account
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsau_bank_account
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "au_bank_account"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "au_bank_account"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "au_bank_account"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "au_bank_account"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Australia Driver's License

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Australian driver's license numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "au_driver_license" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "au_driver_license" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "au_driver_license" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "au_driver_license" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Australian driver's license numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'au_driver_license'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'au_driver_license'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'au_driver_license'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'au_driver_license'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsau_driver_license
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsau_driver_license
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsau_driver_license
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsau_driver_license
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "au_driver_license"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "au_driver_license"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "au_driver_license"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "au_driver_license"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Australia Medicare

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Australian Medicare numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Healthcare

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "au_medicare" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "au_medicare" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "au_medicare" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "au_medicare" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Australian Medicare numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'au_medicare'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'au_medicare'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'au_medicare'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'au_medicare'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsau_medicare
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsau_medicare
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsau_medicare
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsau_medicare
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "au_medicare"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "au_medicare"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "au_medicare"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "au_medicare"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Australia Passport Number

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Australian passport numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "au_passport_number" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "au_passport_number" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "au_passport_number" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "au_passport_number" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Australian passport numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'au_passport_number'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'au_passport_number'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'au_passport_number'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'au_passport_number'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsau_passport_number
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsau_passport_number
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsau_passport_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsau_passport_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "au_passport_number"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "au_passport_number"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "au_passport_number"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "au_passport_number"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Australia Tax File Number

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Australian Tax File Numbers (TFN).

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "au_tfn" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "au_tfn" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "au_tfn" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "au_tfn" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Australian Tax File Numbers (TFN).

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'au_tfn'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'au_tfn'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'au_tfn'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'au_tfn'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsau_tfn
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsau_tfn
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsau_tfn
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsau_tfn
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "au_tfn"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "au_tfn"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "au_tfn"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "au_tfn"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Austria VAT

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Austrian VAT numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Financial Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "at_vat" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "at_vat" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "at_vat" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "at_vat" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Austrian VAT numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'at_vat'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'at_vat'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'at_vat'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'at_vat'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsat_vat
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsat_vat
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsat_vat
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsat_vat
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "at_vat"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "at_vat"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "at_vat"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "at_vat"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: AWS Access Key

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing AWS access keys.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Credential Exposure

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "aws_access_key" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "aws_access_key" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "aws_access_key" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "aws_access_key" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing AWS access keys.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'aws_access_key'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'aws_access_key'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'aws_access_key'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'aws_access_key'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsaws_access_key
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsaws_access_key
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsaws_access_key
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsaws_access_key
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "aws_access_key"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "aws_access_key"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "aws_access_key"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "aws_access_key"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Basic Auth Header

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing basic authentication headers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Credential Exposure

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "http_authorization_header" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "http_authorization_header" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "http_authorization_header" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "http_authorization_header" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing basic authentication headers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'http_authorization_header'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'http_authorization_header'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'http_authorization_header'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'http_authorization_header'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalshttp_authorization_header
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalshttp_authorization_header
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalshttp_authorization_header
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalshttp_authorization_header
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "http_authorization_header"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "http_authorization_header"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "http_authorization_header"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "http_authorization_header"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Belgium VAT

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Belgian VAT numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Financial Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "be_vat" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "be_vat" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "be_vat" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "be_vat" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Belgian VAT numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'be_vat'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'be_vat'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'be_vat'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'be_vat'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsbe_vat
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsbe_vat
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsbe_vat
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsbe_vat
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "be_vat"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "be_vat"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "be_vat"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "be_vat"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Blood Test Term

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing blood test terminology.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: HIPAA

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "blood_test_term" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "blood_test_term" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "blood_test_term" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "blood_test_term" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing blood test terminology.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'blood_test_term'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'blood_test_term'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'blood_test_term'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'blood_test_term'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsblood_test_term
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsblood_test_term
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsblood_test_term
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsblood_test_term
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "blood_test_term"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "blood_test_term"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "blood_test_term"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "blood_test_term"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Canada Bank Account

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Canadian bank account numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Financial Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "ca_bank_account" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "ca_bank_account" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "ca_bank_account" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "ca_bank_account" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Canadian bank account numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'ca_bank_account'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'ca_bank_account'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'ca_bank_account'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'ca_bank_account'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsca_bank_account
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsca_bank_account
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsca_bank_account
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsca_bank_account
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "ca_bank_account"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "ca_bank_account"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "ca_bank_account"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "ca_bank_account"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Canada Driver's License

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Canadian driver's license numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "ca_driver_license" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "ca_driver_license" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "ca_driver_license" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "ca_driver_license" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Canadian driver's license numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'ca_driver_license'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'ca_driver_license'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'ca_driver_license'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'ca_driver_license'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsca_driver_license
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsca_driver_license
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsca_driver_license
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsca_driver_license
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "ca_driver_license"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "ca_driver_license"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "ca_driver_license"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "ca_driver_license"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Canada Health Service Number

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Canadian health service numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Healthcare

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "ca_health_service" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "ca_health_service" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "ca_health_service" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "ca_health_service" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Canadian health service numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'ca_health_service'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'ca_health_service'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'ca_health_service'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'ca_health_service'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsca_health_service
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsca_health_service
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsca_health_service
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsca_health_service
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "ca_health_service"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "ca_health_service"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "ca_health_service"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "ca_health_service"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Canada Passport Number

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Canadian passport numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "ca_passport_number" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "ca_passport_number" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "ca_passport_number" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "ca_passport_number" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Canadian passport numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'ca_passport_number'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'ca_passport_number'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'ca_passport_number'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'ca_passport_number'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsca_passport_number
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsca_passport_number
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsca_passport_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsca_passport_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "ca_passport_number"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "ca_passport_number"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "ca_passport_number"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "ca_passport_number"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Canada PHIN

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Canadian Personal Health Identification Numbers (PHIN).

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Healthcare

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "ca_phin" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "ca_phin" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "ca_phin" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "ca_phin" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Canadian Personal Health Identification Numbers (PHIN).

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'ca_phin'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'ca_phin'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'ca_phin'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'ca_phin'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsca_phin
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsca_phin
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsca_phin
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsca_phin
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "ca_phin"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "ca_phin"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "ca_phin"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "ca_phin"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Canadian Social Insurance Number (SIN)

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Canadian Social Insurance Numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: PII

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "canadian_sin" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "canadian_sin" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "canadian_sin" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "canadian_sin" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing Canadian Social Insurance Numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'canadian_sin'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'canadian_sin'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'canadian_sin'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'canadian_sin'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalscanadian_sin
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalscanadian_sin
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalscanadian_sin
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalscanadian_sin
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "canadian_sin"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "canadian_sin"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "canadian_sin"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "canadian_sin"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: China Resident ID

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Chinese Resident Identity Card numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "cn_prc_id" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "cn_prc_id" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "cn_prc_id" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "cn_prc_id" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Chinese Resident Identity Card numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'cn_prc_id'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'cn_prc_id'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'cn_prc_id'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'cn_prc_id'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalscn_prc_id
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalscn_prc_id
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalscn_prc_id
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalscn_prc_id
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "cn_prc_id"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "cn_prc_id"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "cn_prc_id"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "cn_prc_id"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Crypto Wallet Address

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing cryptocurrency wallet addresses.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Financial

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "crypto_wallet_address" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "crypto_wallet_address" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "crypto_wallet_address" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "crypto_wallet_address" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing cryptocurrency wallet addresses.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'crypto_wallet_address'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'crypto_wallet_address'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'crypto_wallet_address'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'crypto_wallet_address'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalscrypto_wallet_address
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalscrypto_wallet_address
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalscrypto_wallet_address
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalscrypto_wallet_address
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "crypto_wallet_address"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "crypto_wallet_address"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "crypto_wallet_address"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "crypto_wallet_address"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: DEA Number

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing US Drug Enforcement Administration (DEA) numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: HIPAA

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "us_dea_number" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "us_dea_number" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "us_dea_number" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "us_dea_number" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing US Drug Enforcement Administration (DEA) numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'us_dea_number'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'us_dea_number'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'us_dea_number'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'us_dea_number'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsus_dea_number
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsus_dea_number
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsus_dea_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsus_dea_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "us_dea_number"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "us_dea_number"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "us_dea_number"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "us_dea_number"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Disability / Impairment

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing disability or impairment information.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: HIPAA

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "us_disability_impairment" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "us_disability_impairment" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "us_disability_impairment" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "us_disability_impairment" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing disability or impairment information.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'us_disability_impairment'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'us_disability_impairment'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'us_disability_impairment'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'us_disability_impairment'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsus_disability_impairment
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsus_disability_impairment
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsus_disability_impairment
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsus_disability_impairment
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "us_disability_impairment"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "us_disability_impairment"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "us_disability_impairment"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "us_disability_impairment"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: FDA Drug Name

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing FDA drug names.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: HIPAA

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "fda_drug_name" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "fda_drug_name" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "fda_drug_name" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "fda_drug_name" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing FDA drug names.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'fda_drug_name'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'fda_drug_name'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'fda_drug_name'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'fda_drug_name'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsfda_drug_name
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsfda_drug_name
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsfda_drug_name
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsfda_drug_name
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "fda_drug_name"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "fda_drug_name"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "fda_drug_name"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "fda_drug_name"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Finland European Health Insurance

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Finnish European Health Insurance card numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Healthcare

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "fi_european_health_insurance" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "fi_european_health_insurance" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "fi_european_health_insurance" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "fi_european_health_insurance" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Finnish European Health Insurance card numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'fi_european_health_insurance'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'fi_european_health_insurance'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'fi_european_health_insurance'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'fi_european_health_insurance'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsfi_european_health_insurance
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsfi_european_health_insurance
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsfi_european_health_insurance
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsfi_european_health_insurance
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "fi_european_health_insurance"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "fi_european_health_insurance"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "fi_european_health_insurance"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "fi_european_health_insurance"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: France Bank Account

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing French bank account numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Financial Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "fr_bank_account" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "fr_bank_account" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "fr_bank_account" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "fr_bank_account" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing French bank account numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'fr_bank_account'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'fr_bank_account'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'fr_bank_account'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'fr_bank_account'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsfr_bank_account
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsfr_bank_account
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsfr_bank_account
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsfr_bank_account
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "fr_bank_account"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "fr_bank_account"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "fr_bank_account"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "fr_bank_account"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: France Driver's License

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing French driver's license numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "fr_driver_license" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "fr_driver_license" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "fr_driver_license" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "fr_driver_license" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing French driver's license numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'fr_driver_license'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'fr_driver_license'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'fr_driver_license'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'fr_driver_license'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsfr_driver_license
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsfr_driver_license
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsfr_driver_license
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsfr_driver_license
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "fr_driver_license"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "fr_driver_license"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "fr_driver_license"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "fr_driver_license"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: France National ID (CNI)

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing French national identity card numbers (CNI).

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "fr_cni" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "fr_cni" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "fr_cni" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "fr_cni" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing French national identity card numbers (CNI).

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'fr_cni'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'fr_cni'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'fr_cni'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'fr_cni'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsfr_cni
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsfr_cni
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsfr_cni
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsfr_cni
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "fr_cni"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "fr_cni"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "fr_cni"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "fr_cni"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: France Passport Number

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing French passport numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "fr_passport_number" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "fr_passport_number" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "fr_passport_number" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "fr_passport_number" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing French passport numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'fr_passport_number'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'fr_passport_number'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'fr_passport_number'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'fr_passport_number'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsfr_passport_number
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsfr_passport_number
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsfr_passport_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsfr_passport_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "fr_passport_number"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "fr_passport_number"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "fr_passport_number"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "fr_passport_number"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: France Social Security Number (INSEE)

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing French social security numbers (INSEE).

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "fr_insee" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "fr_insee" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "fr_insee" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "fr_insee" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing French social security numbers (INSEE).

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'fr_insee'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'fr_insee'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'fr_insee'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'fr_insee'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsfr_insee
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsfr_insee
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsfr_insee
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsfr_insee
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "fr_insee"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "fr_insee"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "fr_insee"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "fr_insee"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: France VAT

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing French VAT numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Financial Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "fr_vat" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "fr_vat" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "fr_vat" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "fr_vat" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing French VAT numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'fr_vat'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'fr_vat'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'fr_vat'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'fr_vat'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsfr_vat
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsfr_vat
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsfr_vat
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsfr_vat
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "fr_vat"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "fr_vat"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "fr_vat"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "fr_vat"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Germany Identity Card (Personalausweis)

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing German national identity card numbers (Personalausweis).

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "de_personalausweis" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "de_personalausweis" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "de_personalausweis" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "de_personalausweis" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing German national identity card numbers (Personalausweis).

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'de_personalausweis'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'de_personalausweis'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'de_personalausweis'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'de_personalausweis'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsde_personalausweis
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsde_personalausweis
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsde_personalausweis
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsde_personalausweis
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "de_personalausweis"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "de_personalausweis"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "de_personalausweis"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "de_personalausweis"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Germany Passport Number

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing German passport numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "de_passport_number" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "de_passport_number" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "de_passport_number" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "de_passport_number" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing German passport numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'de_passport_number'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'de_passport_number'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'de_passport_number'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'de_passport_number'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsde_passport_number
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsde_passport_number
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsde_passport_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsde_passport_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "de_passport_number"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "de_passport_number"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "de_passport_number"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "de_passport_number"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Germany Tax ID (Steueridentifikationsnummer)

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing German tax identification numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "de_tax_id" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "de_tax_id" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "de_tax_id" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "de_tax_id" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing German tax identification numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'de_tax_id'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'de_tax_id'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'de_tax_id'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'de_tax_id'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsde_tax_id
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsde_tax_id
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsde_tax_id
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsde_tax_id
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "de_tax_id"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "de_tax_id"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "de_tax_id"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "de_tax_id"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Germany VAT

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing German VAT numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Financial Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "de_vat" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "de_vat" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "de_vat" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "de_vat" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing German VAT numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'de_vat'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'de_vat'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'de_vat'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'de_vat'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsde_vat
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsde_vat
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsde_vat
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsde_vat
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "de_vat"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "de_vat"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "de_vat"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "de_vat"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: GitHub Token

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing GitHub tokens.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Credential Exposure

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "github_token" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "github_token" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "github_token" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "github_token" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing GitHub tokens.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'github_token'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'github_token'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'github_token'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'github_token'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsgithub_token
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsgithub_token
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsgithub_token
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsgithub_token
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "github_token"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "github_token"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "github_token"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "github_token"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Google / GCP API Key

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Google or GCP API keys.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Secrets & Credentials

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "google_api_key" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "google_api_key" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "google_api_key" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "google_api_key" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Google or GCP API keys.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'google_api_key'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'google_api_key'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'google_api_key'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'google_api_key'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsgoogle_api_key
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsgoogle_api_key
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsgoogle_api_key
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsgoogle_api_key
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "google_api_key"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "google_api_key"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "google_api_key"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "google_api_key"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Hungary TAJ

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Hungarian social security (TAJ) numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Healthcare

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "hu_taj" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "hu_taj" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "hu_taj" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "hu_taj" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Hungarian social security (TAJ) numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'hu_taj'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'hu_taj'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'hu_taj'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'hu_taj'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalshu_taj
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalshu_taj
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalshu_taj
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalshu_taj
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "hu_taj"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "hu_taj"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "hu_taj"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "hu_taj"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Hungary VAT

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Hungarian VAT numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Financial Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "hu_vat" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "hu_vat" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "hu_vat" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "hu_vat" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Hungarian VAT numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'hu_vat'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'hu_vat'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'hu_vat'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'hu_vat'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalshu_vat
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalshu_vat
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalshu_vat
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalshu_vat
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "hu_vat"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "hu_vat"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "hu_vat"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "hu_vat"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: IBAN Code

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing IBAN codes.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: PCI, DLP: Financial

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "iban_code" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "iban_code" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "iban_code" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "iban_code" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing IBAN codes.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'iban_code'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'iban_code'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'iban_code'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'iban_code'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsiban_code
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsiban_code
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsiban_code
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsiban_code
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "iban_code"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "iban_code"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "iban_code"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "iban_code"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: ICD-10 Code

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing ICD-10 medical diagnosis codes.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: HIPAA

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "us_icd10" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "us_icd10" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "us_icd10" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "us_icd10" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing ICD-10 medical diagnosis codes.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'us_icd10'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'us_icd10'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'us_icd10'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'us_icd10'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsus_icd10
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsus_icd10
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsus_icd10
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsus_icd10
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "us_icd10"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "us_icd10"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "us_icd10"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "us_icd10"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: ICD-9 Code

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing ICD-9 medical diagnosis codes.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: HIPAA

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "us_icd9" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "us_icd9" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "us_icd9" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "us_icd9" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing ICD-9 medical diagnosis codes.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'us_icd9'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'us_icd9'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'us_icd9'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'us_icd9'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsus_icd9
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsus_icd9
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsus_icd9
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsus_icd9
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "us_icd9"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "us_icd9"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "us_icd9"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "us_icd9"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Japan Driver's License

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Japanese driver's license numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "jp_driver_license" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "jp_driver_license" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "jp_driver_license" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "jp_driver_license" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Japanese driver's license numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'jp_driver_license'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'jp_driver_license'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'jp_driver_license'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'jp_driver_license'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsjp_driver_license
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsjp_driver_license
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsjp_driver_license
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsjp_driver_license
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "jp_driver_license"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "jp_driver_license"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "jp_driver_license"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "jp_driver_license"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Japan MyNumber ID

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Japanese My Number (Individual Number) identifiers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "jp_my_number" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "jp_my_number" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "jp_my_number" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "jp_my_number" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Japanese My Number (Individual Number) identifiers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'jp_my_number'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'jp_my_number'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'jp_my_number'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'jp_my_number'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsjp_my_number
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsjp_my_number
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsjp_my_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsjp_my_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "jp_my_number"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "jp_my_number"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "jp_my_number"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "jp_my_number"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Japan Passport Number

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Japanese passport numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "jp_passport_number" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "jp_passport_number" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "jp_passport_number" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "jp_passport_number" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Japanese passport numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'jp_passport_number'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'jp_passport_number'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'jp_passport_number'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'jp_passport_number'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsjp_passport_number
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsjp_passport_number
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsjp_passport_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsjp_passport_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "jp_passport_number"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "jp_passport_number"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "jp_passport_number"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "jp_passport_number"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: JSON Web Token (JWT)

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing JSON Web Tokens (JWT).

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Secrets & Credentials

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "jwt" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "jwt" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "jwt" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "jwt" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing JSON Web Tokens (JWT).

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'jwt'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'jwt'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'jwt'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'jwt'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsjwt
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsjwt
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsjwt
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsjwt
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "jwt"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "jwt"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "jwt"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "jwt"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Luxembourg Non-Natural ID

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Luxembourg non-natural person identification numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Financial Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "luxembourg_nonnatural_id" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "luxembourg_nonnatural_id" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "luxembourg_nonnatural_id" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "luxembourg_nonnatural_id" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Luxembourg non-natural person identification numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'luxembourg_nonnatural_id'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'luxembourg_nonnatural_id'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'luxembourg_nonnatural_id'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'luxembourg_nonnatural_id'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsluxembourg_nonnatural_id
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsluxembourg_nonnatural_id
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsluxembourg_nonnatural_id
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsluxembourg_nonnatural_id
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "luxembourg_nonnatural_id"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "luxembourg_nonnatural_id"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "luxembourg_nonnatural_id"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "luxembourg_nonnatural_id"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: MAC Address

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing MAC addresses.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Network Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "mac_address" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "mac_address" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "mac_address" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "mac_address" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing MAC addresses.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'mac_address'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'mac_address'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'mac_address'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'mac_address'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsmac_address
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsmac_address
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsmac_address
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsmac_address
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "mac_address"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "mac_address"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "mac_address"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "mac_address"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Medical Condition

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing medical condition information.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: HIPAA

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "medical_condition" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "medical_condition" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "medical_condition" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "medical_condition" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing medical condition information.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'medical_condition'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'medical_condition'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'medical_condition'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'medical_condition'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsmedical_condition
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsmedical_condition
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsmedical_condition
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsmedical_condition
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "medical_condition"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "medical_condition"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "medical_condition"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "medical_condition"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Medical Specialty

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing medical specialty information.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: HIPAA

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "medical_specialty" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "medical_specialty" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "medical_specialty" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "medical_specialty" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing medical specialty information.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'medical_specialty'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'medical_specialty'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'medical_specialty'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'medical_specialty'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsmedical_specialty
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsmedical_specialty
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsmedical_specialty
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsmedical_specialty
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "medical_specialty"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "medical_specialty"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "medical_specialty"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "medical_specialty"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: National Provider Identifier (NPI)

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing US National Provider Identifier (NPI) numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Healthcare Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "us_npi" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "us_npi" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "us_npi" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "us_npi" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing US National Provider Identifier (NPI) numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'us_npi'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'us_npi'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'us_npi'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'us_npi'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsus_npi
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsus_npi
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsus_npi
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsus_npi
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "us_npi"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "us_npi"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "us_npi"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "us_npi"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Netherlands BSN / Tax ID

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Dutch Burger Service Numbers (BSN) or tax identification numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "nl_bsn" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "nl_bsn" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "nl_bsn" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "nl_bsn" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Dutch Burger Service Numbers (BSN) or tax identification numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'nl_bsn'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'nl_bsn'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'nl_bsn'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'nl_bsn'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsnl_bsn
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsnl_bsn
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsnl_bsn
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsnl_bsn
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "nl_bsn"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "nl_bsn"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "nl_bsn"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "nl_bsn"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Netherlands VAT

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Netherlands VAT numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Financial Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "nl_vat" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "nl_vat" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "nl_vat" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "nl_vat" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Netherlands VAT numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'nl_vat'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'nl_vat'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'nl_vat'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'nl_vat'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsnl_vat
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsnl_vat
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsnl_vat
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsnl_vat
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "nl_vat"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "nl_vat"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "nl_vat"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "nl_vat"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: New Zealand Bank Account

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing New Zealand bank account numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Financial Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "nz_bank_account" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "nz_bank_account" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "nz_bank_account" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "nz_bank_account" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing New Zealand bank account numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'nz_bank_account'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'nz_bank_account'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'nz_bank_account'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'nz_bank_account'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsnz_bank_account
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsnz_bank_account
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsnz_bank_account
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsnz_bank_account
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "nz_bank_account"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "nz_bank_account"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "nz_bank_account"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "nz_bank_account"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: New Zealand MOH

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing New Zealand Ministry of Health numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Healthcare

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "nz_moh" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "nz_moh" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "nz_moh" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "nz_moh" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing New Zealand Ministry of Health numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'nz_moh'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'nz_moh'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'nz_moh'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'nz_moh'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsnz_moh
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsnz_moh
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsnz_moh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsnz_moh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "nz_moh"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "nz_moh"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "nz_moh"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "nz_moh"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: NHS Number

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing UK NHS numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: PII, DLP: GDPR

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "nhs_number" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "nhs_number" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "nhs_number" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "nhs_number" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing UK NHS numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'nhs_number'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'nhs_number'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'nhs_number'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'nhs_number'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsnhs_number
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsnhs_number
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsnhs_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsnhs_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "nhs_number"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "nhs_number"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "nhs_number"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "nhs_number"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: OAuth Client Secret

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing OAuth client secrets.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Credential Exposure

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "oauth_client_secret" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "oauth_client_secret" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "oauth_client_secret" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "oauth_client_secret" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing OAuth client secrets.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'oauth_client_secret'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'oauth_client_secret'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'oauth_client_secret'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'oauth_client_secret'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsoauth_client_secret
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsoauth_client_secret
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsoauth_client_secret
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsoauth_client_secret
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "oauth_client_secret"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "oauth_client_secret"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "oauth_client_secret"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "oauth_client_secret"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Outbound references an email address outside recipient domains

#
Severity
low
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects outbound messages where an email address extracted from the subject, body, or attachments resolves to a domain different from every recipient's domain and not one of the sender's own domains. Catches email redirection patterns where content points to a third party not in the recipient list.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Data Redirection

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • recipients
  • recipients.bcc
  • recipients.cc
  • recipients.to
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "email_address"
    and .confidence in ("medium", "high")
    and strings.parse_email(.text).domain.valid
    and strings.parse_email(.text).domain.root_domain not in $org_domains
    and all(recipients.to, .email.domain.root_domain != strings.parse_email(..text).domain.root_domain)
    and all(recipients.cc, .email.domain.root_domain != strings.parse_email(..text).domain.root_domain)
    and all(recipients.bcc, .email.domain.root_domain != strings.parse_email(..text).domain.root_domain)
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "email_address"
    and .confidence in ("medium", "high")
    and strings.parse_email(.text).domain.valid
    and strings.parse_email(.text).domain.root_domain not in $org_domains
    and all(recipients.to, .email.domain.root_domain != strings.parse_email(..text).domain.root_domain)
    and all(recipients.cc, .email.domain.root_domain != strings.parse_email(..text).domain.root_domain)
    and all(recipients.bcc, .email.domain.root_domain != strings.parse_email(..text).domain.root_domain)
  )
  or any(attachments,
    any(file.explode(.),
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "email_address"
        and .confidence in ("medium", "high")
        and strings.parse_email(.text).domain.valid
        and strings.parse_email(.text).domain.root_domain not in $org_domains
        and all(recipients.to, .email.domain.root_domain != strings.parse_email(..text).domain.root_domain)
        and all(recipients.cc, .email.domain.root_domain != strings.parse_email(..text).domain.root_domain)
        and all(recipients.bcc, .email.domain.root_domain != strings.parse_email(..text).domain.root_domain)
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "email_address"
        and .confidence in ("medium", "high")
        and strings.parse_email(.text).domain.valid
        and strings.parse_email(.text).domain.root_domain not in $org_domains
        and all(recipients.to, .email.domain.root_domain != strings.parse_email(..text).domain.root_domain)
        and all(recipients.cc, .email.domain.root_domain != strings.parse_email(..text).domain.root_domain)
        and all(recipients.bcc, .email.domain.root_domain != strings.parse_email(..text).domain.root_domain)
      )
    )
  )
)
and not any(recipients.to, .email.domain.root_domain in $org_domains)

Detection logic

Scope: outbound message.

Detects outbound messages where an email address extracted from the subject, body, or attachments resolves to a domain different from every recipient's domain and not one of the sender's own domains. Catches email redirection patterns where content points to a third party not in the recipient list.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'email_address'
      • .confidence in ('medium', 'high')
      • strings.parse_email(.text).domain.valid
      • strings.parse_email(.text).domain.root_domain not in $org_domains
      • all of recipients.to where:
        • .email.domain.root_domain is not strings.parse_email(.text).domain.root_domain
      • all of recipients.cc where:
        • .email.domain.root_domain is not strings.parse_email(.text).domain.root_domain
      • all of recipients.bcc where:
        • .email.domain.root_domain is not strings.parse_email(.text).domain.root_domain
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'email_address'
      • .confidence in ('medium', 'high')
      • strings.parse_email(.text).domain.valid
      • strings.parse_email(.text).domain.root_domain not in $org_domains
      • all of recipients.to where:
        • .email.domain.root_domain is not strings.parse_email(.text).domain.root_domain
      • all of recipients.cc where:
        • .email.domain.root_domain is not strings.parse_email(.text).domain.root_domain
      • all of recipients.bcc where:
        • .email.domain.root_domain is not strings.parse_email(.text).domain.root_domain
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'email_address'
          • .confidence in ('medium', 'high')
          • strings.parse_email(.text).domain.valid
          • strings.parse_email(.text).domain.root_domain not in $org_domains
          • all of recipients.to where:
            • .email.domain.root_domain is not strings.parse_email(.text).domain.root_domain
          • all of recipients.cc where:
            • .email.domain.root_domain is not strings.parse_email(.text).domain.root_domain
          • all of recipients.bcc where:
            • .email.domain.root_domain is not strings.parse_email(.text).domain.root_domain
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'email_address'
          • .confidence in ('medium', 'high')
          • strings.parse_email(.text).domain.valid
          • strings.parse_email(.text).domain.root_domain not in $org_domains
          • all of recipients.to where:
            • .email.domain.root_domain is not strings.parse_email(.text).domain.root_domain
          • all of recipients.cc where:
            • .email.domain.root_domain is not strings.parse_email(.text).domain.root_domain
          • all of recipients.bcc where:
            • .email.domain.root_domain is not strings.parse_email(.text).domain.root_domain
  3. not:
    • any of recipients.to where:
      • .email.domain.root_domain in $org_domains

Inspects: body.current_thread.text, recipients.bcc, recipients.bcc[].email.domain.root_domain, recipients.cc, recipients.cc[].email.domain.root_domain, recipients.to, recipients.to[].email.domain.root_domain, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode, strings.parse_email. Reference lists: $org_domains.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsemail_address
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsemail_address
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsemail_address
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsemail_address
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "email_address"
              strings.parse_email func_call "strings.parse_email(beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].text).domain.root_domain not in org_domains"
              strings.parse_email func_call "strings.parse_email(beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].text).domain.valid"
               macro "all(recipients.bcc)"
               macro "all(recipients.cc)"
               macro "all(recipients.to)"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "email_address"
              strings.parse_email func_call "strings.parse_email(beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].text).domain.root_domain not in org_domains"
              strings.parse_email func_call "strings.parse_email(beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].text).domain.valid"
               macro "all(recipients.bcc)"
               macro "all(recipients.cc)"
               macro "all(recipients.to)"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "email_address"
        strings.parse_email func_call "strings.parse_email(beta.ml_extract_sensitive_information(body.current_thread.text).elements[].text).domain.root_domain not in org_domains"
        strings.parse_email func_call "strings.parse_email(beta.ml_extract_sensitive_information(body.current_thread.text).elements[].text).domain.valid"
         macro "all(recipients.bcc)"
         macro "all(recipients.cc)"
         macro "all(recipients.to)"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "email_address"
        strings.parse_email func_call "strings.parse_email(beta.ml_extract_sensitive_information(subject.subject).elements[].text).domain.root_domain not in org_domains"
        strings.parse_email func_call "strings.parse_email(beta.ml_extract_sensitive_information(subject.subject).elements[].text).domain.valid"
         macro "all(recipients.bcc)"
         macro "all(recipients.cc)"
         macro "all(recipients.to)"
  not
    any(recipients.to)
       macro "recipients.to[].email.domain.root_domain in org_domains"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
recipients.toarray_any(no value, null check)excludes:recipients.to

beta.DLP: PCI US Credit Card Number (Any Network)

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing credit card numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: PCI

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "credit_card_number" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "credit_card_number" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "credit_card_number" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "credit_card_number" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing credit card numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'credit_card_number'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'credit_card_number'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'credit_card_number'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'credit_card_number'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalscredit_card_number
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalscredit_card_number
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalscredit_card_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalscredit_card_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "credit_card_number"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "credit_card_number"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "credit_card_number"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "credit_card_number"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Poland REGON

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Polish REGON business registration numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Financial Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "pl_regon" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "pl_regon" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "pl_regon" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "pl_regon" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Polish REGON business registration numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'pl_regon'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'pl_regon'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'pl_regon'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'pl_regon'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalspl_regon
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalspl_regon
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalspl_regon
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalspl_regon
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "pl_regon"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "pl_regon"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "pl_regon"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "pl_regon"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Private Key

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing private keys.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Credential Exposure

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "private_key" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "private_key" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "private_key" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "private_key" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing private keys.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'private_key'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'private_key'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'private_key'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'private_key'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsprivate_key
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsprivate_key
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsprivate_key
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsprivate_key
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "private_key"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "private_key"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "private_key"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "private_key"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Singapore NRIC

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Singapore National Registration Identity Card (NRIC) numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "sg_nric" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "sg_nric" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "sg_nric" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "sg_nric" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Singapore National Registration Identity Card (NRIC) numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'sg_nric'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'sg_nric'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'sg_nric'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'sg_nric'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalssg_nric
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalssg_nric
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalssg_nric
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalssg_nric
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "sg_nric"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "sg_nric"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "sg_nric"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "sg_nric"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Singapore UEN

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Singapore Unique Entity Numbers (UEN).

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Financial Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "sg_uen" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "sg_uen" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "sg_uen" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "sg_uen" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Singapore Unique Entity Numbers (UEN).

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'sg_uen'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'sg_uen'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'sg_uen'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'sg_uen'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalssg_uen
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalssg_uen
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalssg_uen
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalssg_uen
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "sg_uen"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "sg_uen"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "sg_uen"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "sg_uen"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Slack Access Token

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Slack access tokens.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Secrets & Credentials

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "slack_access_token" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "slack_access_token" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "slack_access_token" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "slack_access_token" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Slack access tokens.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'slack_access_token'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'slack_access_token'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'slack_access_token'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'slack_access_token'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsslack_access_token
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsslack_access_token
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsslack_access_token
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsslack_access_token
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "slack_access_token"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "slack_access_token"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "slack_access_token"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "slack_access_token"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: South Korea Resident Registration Number

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing South Korean Resident Registration Numbers (RRN).

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "kr_rrn" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "kr_rrn" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "kr_rrn" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "kr_rrn" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing South Korean Resident Registration Numbers (RRN).

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'kr_rrn'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'kr_rrn'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'kr_rrn'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'kr_rrn'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalskr_rrn
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalskr_rrn
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalskr_rrn
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalskr_rrn
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "kr_rrn"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "kr_rrn"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "kr_rrn"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "kr_rrn"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Spain Bank Account

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Spanish bank account numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Financial Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "es_bank_account" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "es_bank_account" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "es_bank_account" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "es_bank_account" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Spanish bank account numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'es_bank_account'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'es_bank_account'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'es_bank_account'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'es_bank_account'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalses_bank_account
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalses_bank_account
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalses_bank_account
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalses_bank_account
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "es_bank_account"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "es_bank_account"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "es_bank_account"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "es_bank_account"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Spain DNI/NIE / Passport / SSN / Tax ID

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Spanish national identity, passport, social security, or tax identification numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "es_dni_nie_nif" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "es_dni_nie_nif" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "es_dni_nie_nif" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "es_dni_nie_nif" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Spanish national identity, passport, social security, or tax identification numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'es_dni_nie_nif'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'es_dni_nie_nif'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'es_dni_nie_nif'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'es_dni_nie_nif'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalses_dni_nie_nif
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalses_dni_nie_nif
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalses_dni_nie_nif
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalses_dni_nie_nif
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "es_dni_nie_nif"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "es_dni_nie_nif"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "es_dni_nie_nif"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "es_dni_nie_nif"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: SSL/TLS Certificate

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing SSL/TLS certificates.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Credential Exposure, DLP: Infrastructure

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "ssl_certificate" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "ssl_certificate" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "ssl_certificate" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "ssl_certificate" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing SSL/TLS certificates.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'ssl_certificate'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'ssl_certificate'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'ssl_certificate'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'ssl_certificate'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsssl_certificate
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsssl_certificate
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsssl_certificate
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsssl_certificate
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "ssl_certificate"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "ssl_certificate"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "ssl_certificate"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "ssl_certificate"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Surgical Procedure

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing surgical procedure information.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: HIPAA

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "surgical_procedure" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "surgical_procedure" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "surgical_procedure" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "surgical_procedure" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing surgical procedure information.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'surgical_procedure'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'surgical_procedure'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'surgical_procedure'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'surgical_procedure'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalssurgical_procedure
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalssurgical_procedure
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalssurgical_procedure
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalssurgical_procedure
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "surgical_procedure"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "surgical_procedure"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "surgical_procedure"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "surgical_procedure"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Sweden Personnummer / Tax ID

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Swedish personal identity numbers (personnummer) or tax identification numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Personal Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "se_personnummer" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "se_personnummer" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "se_personnummer" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "se_personnummer" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Swedish personal identity numbers (personnummer) or tax identification numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'se_personnummer'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'se_personnummer'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'se_personnummer'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'se_personnummer'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsse_personnummer
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsse_personnummer
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsse_personnummer
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsse_personnummer
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "se_personnummer"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "se_personnummer"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "se_personnummer"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "se_personnummer"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: SWIFT/BIC Code

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects outbound messages containing SWIFT/BIC codes. SWIFT codes are used to identify banks and financial institutions globally and may indicate financial account details being shared externally.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Financial Data

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "swift_bic" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "swift_bic" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "swift_bic" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "swift_bic" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects outbound messages containing SWIFT/BIC codes. SWIFT codes are used to identify banks and financial institutions globally and may indicate financial account details being shared externally.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'swift_bic'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'swift_bic'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'swift_bic'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'swift_bic'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsswift_bic
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsswift_bic
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsswift_bic
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsswift_bic
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "swift_bic"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "swift_bic"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "swift_bic"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "swift_bic"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: UK Driver's License

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing UK driver's license numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: PII, DLP: GDPR

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "uk_drivers_license" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "uk_drivers_license" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "uk_drivers_license" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "uk_drivers_license" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing UK driver's license numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'uk_drivers_license'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'uk_drivers_license'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'uk_drivers_license'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'uk_drivers_license'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsuk_drivers_license
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsuk_drivers_license
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsuk_drivers_license
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsuk_drivers_license
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "uk_drivers_license"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "uk_drivers_license"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "uk_drivers_license"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "uk_drivers_license"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: UK Electoral Roll

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing UK electoral roll information.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: GDPR

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "uk_electoral_roll" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "uk_electoral_roll" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "uk_electoral_roll" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "uk_electoral_roll" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing UK electoral roll information.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'uk_electoral_roll'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'uk_electoral_roll'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'uk_electoral_roll'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'uk_electoral_roll'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsuk_electoral_roll
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsuk_electoral_roll
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsuk_electoral_roll
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsuk_electoral_roll
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "uk_electoral_roll"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "uk_electoral_roll"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "uk_electoral_roll"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "uk_electoral_roll"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: UK National Insurance Number

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing UK National Insurance numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: PII, DLP: GDPR

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "uk_nino" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "uk_nino" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "uk_nino" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "uk_nino" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing UK National Insurance numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'uk_nino'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'uk_nino'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'uk_nino'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'uk_nino'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsuk_nino
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsuk_nino
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsuk_nino
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsuk_nino
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "uk_nino"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "uk_nino"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "uk_nino"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "uk_nino"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: UK Passport

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing UK passport numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: PII, DLP: GDPR

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "uk_passport_number" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "uk_passport_number" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "uk_passport_number" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "uk_passport_number" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing UK passport numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'uk_passport_number'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'uk_passport_number'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'uk_passport_number'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'uk_passport_number'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsuk_passport_number
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsuk_passport_number
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsuk_passport_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsuk_passport_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "uk_passport_number"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "uk_passport_number"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "uk_passport_number"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "uk_passport_number"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: UK UTR (Tax)

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing UK Unique Taxpayer Reference numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: GDPR

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "uk_utr" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "uk_utr" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "uk_utr" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "uk_utr" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing UK Unique Taxpayer Reference numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'uk_utr'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'uk_utr'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'uk_utr'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'uk_utr'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsuk_utr
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsuk_utr
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsuk_utr
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsuk_utr
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "uk_utr"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "uk_utr"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "uk_utr"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "uk_utr"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: US ABA Routing Number

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing US ABA routing numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: PCI, DLP: Financial

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "us_aba_routing_number" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "us_aba_routing_number" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "us_aba_routing_number" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "us_aba_routing_number" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing US ABA routing numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'us_aba_routing_number'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'us_aba_routing_number'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'us_aba_routing_number'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'us_aba_routing_number'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsus_aba_routing_number
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsus_aba_routing_number
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsus_aba_routing_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsus_aba_routing_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "us_aba_routing_number"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "us_aba_routing_number"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "us_aba_routing_number"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "us_aba_routing_number"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: US Bank Account Number

#
Severity
medium
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing US bank account numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: PCI, DLP: Financial

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "us_bank_number" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "us_bank_number" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "us_bank_number" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "us_bank_number" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing US bank account numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'us_bank_number'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'us_bank_number'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'us_bank_number'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'us_bank_number'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsus_bank_number
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsus_bank_number
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsus_bank_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsus_bank_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "us_bank_number"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "us_bank_number"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "us_bank_number"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "us_bank_number"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: US Driver's License

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing US driver's license numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: PII

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "us_driver_license" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "us_driver_license" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "us_driver_license" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "us_driver_license" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing US driver's license numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'us_driver_license'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'us_driver_license'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'us_driver_license'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'us_driver_license'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsus_driver_license
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsus_driver_license
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsus_driver_license
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsus_driver_license
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "us_driver_license"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "us_driver_license"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "us_driver_license"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "us_driver_license"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: US Individual Taxpayer Identification Number (ITIN)

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing US Individual Taxpayer Identification Numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: PII

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "us_itin" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "us_itin" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "us_itin" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "us_itin" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing US Individual Taxpayer Identification Numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'us_itin'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'us_itin'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'us_itin'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'us_itin'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsus_itin
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsus_itin
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsus_itin
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsus_itin
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "us_itin"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "us_itin"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "us_itin"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "us_itin"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: US Medicare Beneficiary ID

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing US Medicare Beneficiary Identification numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: HIPAA

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "us_medicare_beneficiary_id" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "us_medicare_beneficiary_id" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "us_medicare_beneficiary_id" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "us_medicare_beneficiary_id" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing US Medicare Beneficiary Identification numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'us_medicare_beneficiary_id'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'us_medicare_beneficiary_id'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'us_medicare_beneficiary_id'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'us_medicare_beneficiary_id'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsus_medicare_beneficiary_id
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsus_medicare_beneficiary_id
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsus_medicare_beneficiary_id
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsus_medicare_beneficiary_id
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "us_medicare_beneficiary_id"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "us_medicare_beneficiary_id"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "us_medicare_beneficiary_id"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "us_medicare_beneficiary_id"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: US Passport Number

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing US passport numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: PII

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "us_passport_number" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "us_passport_number" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "us_passport_number" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "us_passport_number" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing US passport numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'us_passport_number'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'us_passport_number'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'us_passport_number'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'us_passport_number'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsus_passport_number
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsus_passport_number
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsus_passport_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsus_passport_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "us_passport_number"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "us_passport_number"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "us_passport_number"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "us_passport_number"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: US Social Security Number (SSN)

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing US Social Security Numbers.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: PII, DLP: HIPAA

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "social_security_number" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "social_security_number" and .confidence in ("medium", "high")
  )
  or any(attachments,
  any(file.explode(.),
    (
      any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
        .type == "social_security_number" and .confidence in ("medium", "high")
      )
      or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
        .type == "social_security_number" and .confidence in ("medium", "high")
      )
    )
  )
)
)

Detection logic

Scope: outbound message.

Detects messages containing US Social Security Numbers.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'social_security_number'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'social_security_number'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'social_security_number'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'social_security_number'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalssocial_security_number
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalssocial_security_number
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalssocial_security_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalssocial_security_number
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "social_security_number"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "social_security_number"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "social_security_number"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "social_security_number"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

beta.DLP: Vehicle VIN

#
Severity
high
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects messages containing Vehicle Identification Numbers (VIN).

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Asset Exposure

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • subject
  • type

Rule body

//
// This rule makes use of a beta feature and is subject to change without notice
// using the beta feature in custom rules is not suggested until it has been formally released
//
type.outbound
and (
  any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
    .type == "vehicle_vin" and .confidence in ("medium", "high")
  )
  or any(beta.ml_extract_sensitive_information(subject.subject).elements,
    .type == "vehicle_vin" and .confidence in ("medium", "high")
  )
  or any(attachments,
    any(file.explode(.),
      (
        any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
          .type == "vehicle_vin" and .confidence in ("medium", "high")
        )
        or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
          .type == "vehicle_vin" and .confidence in ("medium", "high")
        )
      )
    )
  )
)

Detection logic

Scope: outbound message.

Detects messages containing Vehicle Identification Numbers (VIN).

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type is 'vehicle_vin'
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type is 'vehicle_vin'
      • .confidence in ('medium', 'high')
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type is 'vehicle_vin'
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type is 'vehicle_vin'
          • .confidence in ('medium', 'high')

Inspects: body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode.

Indicators matched (12)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typeequalsvehicle_vin
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typeequalsvehicle_vin
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typeequalsvehicle_vin
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typeequalsvehicle_vin
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type eq "vehicle_vin"
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type eq "vehicle_vin"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type eq "vehicle_vin"
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type eq "vehicle_vin"
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"

DLP - Clear-Text Credentials Outbound

#
Severity
critical
Type
dlp
Source
github.com/sublime-security/sublime-rules

Detects outbound emails containing clear-text credentials in the body, subject, or attachments using ML extraction. Covers private keys, AWS access keys, GitHub tokens, HTTP Basic auth headers, and OAuth client secrets. Attachment content is scanned via ml_extract on both raw text and OCR surfaces, catching credentials embedded in images or binary document formats. Note: GCP API keys, Slack tokens, JWTs, and database connection strings are not covered by ml_extract and are intentionally omitted to avoid regex FPs.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesDLP: Credential Exposure

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • attachments
  • body
  • body.current_thread
  • subject
  • type

Rule body

type.outbound
and (
    // ── ML extraction: body ────────────────────────────────────────────────

    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements,
        .type in ("private_key", "aws_access_key", "github_token", "http_authorization_header", "oauth_client_secret")
        and .confidence in ("medium", "high")
    )

    // ── ML extraction: subject ─────────────────────────────────────────────

    or any(beta.ml_extract_sensitive_information(subject.subject).elements,
        .type in ("private_key", "aws_access_key", "github_token", "http_authorization_header", "oauth_client_secret")
        and .confidence in ("medium", "high")
    )

    // ── Credential-bearing file types by extension and name ────────────────

    or any(attachments,
        .file_extension in~ ("env", "pem", "key", "p12", "pfx", "jks", "keystore", "ovpn")
        or strings.icontains(.file_name, "credential")
        or strings.icontains(.file_name, "secret")
        or strings.icontains(.file_name, "password")
    )

    // ── ML extraction: attachments (raw text + OCR) ────────────────────────

    or any(attachments,
        any(file.explode(.),
            any(beta.ml_extract_sensitive_information(.scan.strings.raw).elements,
                .type in ("private_key", "aws_access_key", "github_token", "http_authorization_header", "oauth_client_secret")
                and .confidence in ("medium", "high")
            )
            or any(beta.ml_extract_sensitive_information(.scan.ocr.raw).elements,
                .type in ("private_key", "aws_access_key", "github_token", "http_authorization_header", "oauth_client_secret")
                and .confidence in ("medium", "high")
            )
        )
    )
)

Detection logic

Scope: outbound message.

Detects outbound emails containing clear-text credentials in the body, subject, or attachments using ML extraction. Covers private keys, AWS access keys, GitHub tokens, HTTP Basic auth headers, and OAuth client secrets. Attachment content is scanned via ml_extract on both raw text and OCR surfaces, catching credentials embedded in images or binary document formats. Note: GCP API keys, Slack tokens, JWTs, and database connection strings are not covered by ml_extract and are intentionally omitted to avoid regex FPs.

  1. outbound message
  2. any of:
    • any of beta.ml_extract_sensitive_information(body.current_thread.text).elements where all hold:
      • .type in ('private_key', 'aws_access_key', 'github_token', 'http_authorization_header', 'oauth_client_secret')
      • .confidence in ('medium', 'high')
    • any of beta.ml_extract_sensitive_information(subject.subject).elements where all hold:
      • .type in ('private_key', 'aws_access_key', 'github_token', 'http_authorization_header', 'oauth_client_secret')
      • .confidence in ('medium', 'high')
    • any of attachments where any holds:
      • .file_extension in ('env', 'pem', 'key', 'p12', 'pfx', 'jks', 'keystore', 'ovpn')
      • .file_name contains 'credential'
      • .file_name contains 'secret'
      • .file_name contains 'password'
    • any of attachments where:
      • any of file.explode(.) where any holds:
        • any of beta.ml_extract_sensitive_information(.scan.strings.raw).elements where all hold:
          • .type in ('private_key', 'aws_access_key', 'github_token', 'http_authorization_header', 'oauth_client_secret')
          • .confidence in ('medium', 'high')
        • any of beta.ml_extract_sensitive_information(.scan.ocr.raw).elements where all hold:
          • .type in ('private_key', 'aws_access_key', 'github_token', 'http_authorization_header', 'oauth_client_secret')
          • .confidence in ('medium', 'high')

Inspects: attachments[].file_extension, attachments[].file_name, body.current_thread.text, subject.subject, type.outbound. Sensors: beta.ml_extract_sensitive_information, file.explode, strings.icontains.

Indicators matched (39)

FieldMatchValue
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typememberprivate_key
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typememberaws_access_key
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typemembergithub_token
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typememberhttp_authorization_header
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].typememberoauth_client_secret
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(body.current_thread.text).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(subject.subject).elements[].typememberprivate_key
beta.ml_extract_sensitive_information(subject.subject).elements[].typememberaws_access_key
beta.ml_extract_sensitive_information(subject.subject).elements[].typemembergithub_token
beta.ml_extract_sensitive_information(subject.subject).elements[].typememberhttp_authorization_header
beta.ml_extract_sensitive_information(subject.subject).elements[].typememberoauth_client_secret
27 more
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(subject.subject).elements[].confidencememberhigh
attachments[].file_extensionmemberenv
attachments[].file_extensionmemberpem
attachments[].file_extensionmemberkey
attachments[].file_extensionmemberp12
attachments[].file_extensionmemberpfx
attachments[].file_extensionmemberjks
attachments[].file_extensionmemberkeystore
attachments[].file_extensionmemberovpn
strings.icontainssubstringcredential
strings.icontainssubstringsecret
strings.icontainssubstringpassword
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typememberprivate_key
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typememberaws_access_key
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typemembergithub_token
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typememberhttp_authorization_header
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].typememberoauth_client_secret
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidencememberhigh
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typememberprivate_key
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typememberaws_access_key
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typemembergithub_token
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typememberhttp_authorization_header
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].typememberoauth_client_secret
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencemembermedium
beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidencememberhigh

Stages and Predicates

Stage 1: mql_rule

and
  or
    any(attachments)
      any(file.explode(attachments))
        or
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.ocr.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.ocr.raw).elements[].type in ["aws_access_key", "github_token", "http_authorization_header", "oauth_client_secret", "private_key"]
          any(beta.ml_extract_sensitive_information(file.explode(attachments).scan.strings.raw).elements)
            and
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].confidence in ["high", "medium"]
              beta.ml_extract_sensitive_information(file.explode(attachments[])[].scan.strings.raw).elements[].type in ["aws_access_key", "github_token", "http_authorization_header", "oauth_client_secret", "private_key"]
    any(attachments)
      or
        attachments.file_extension in ["env", "jks", "key", "keystore", "ovpn", "p12", "pem", "pfx"]
        attachments.file_name contains "credential"
        attachments.file_name contains "password"
        attachments.file_name contains "secret"
    any(beta.ml_extract_sensitive_information(body.current_thread.text).elements)
      and
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(body.current_thread.text).elements.type in ["aws_access_key", "github_token", "http_authorization_header", "oauth_client_secret", "private_key"]
    any(beta.ml_extract_sensitive_information(subject.subject).elements)
      and
        beta.ml_extract_sensitive_information(subject.subject).elements.confidence in ["high", "medium"]
        beta.ml_extract_sensitive_information(subject.subject).elements.type in ["aws_access_key", "github_token", "http_authorization_header", "oauth_client_secret", "private_key"]
  type.outbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
type.outboundeq
  • true transforms: boolean
field:"type.outbound" kind:eq value:"true"