Detection rules › Sublime MQL

Brand impersonation: Okta

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

Impersonation of Okta, an identity and access management company.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesImpersonation: Brand, Lookalike domain, Social engineering

Event coverage

Rule body MQL

type.inbound
and (
  regex.icontains(sender.display_name, '\bOkta\b')
  or strings.ilike(sender.email.domain.domain, '*Okta*')
  or strings.ilike(subject.subject, '*Okta*')
)
and not (length(headers.references) > 0 or headers.in_reply_to is not null)
and not (
  sender.email.domain.root_domain in~ (
    'oktacdn.com',
    'okta.com',
    'okta-emea.com',
    'okta-gov.com',
    'oktapreview.com',
    'polaris.me',
    'examity.com' // exam service used by okta
  )
  and headers.auth_summary.dmarc.pass
)
and any(ml.logo_detect(file.message_screenshot()).brands,
        .name == "Okta" and .confidence in ("medium", "high")
)
and (
  profile.by_sender().prevalence in ("new", "outlier")
  or (
    profile.by_sender().any_messages_malicious_or_spam
    and not profile.by_sender().any_messages_benign
  )
)
// negate okta relay
and not any(distinct(headers.domains, .domain is not null),
            .domain == "mailrelay.okta.com"
)
// negate highly trusted sender domains unless they fail DMARC authentication
and (
  (
    sender.email.domain.root_domain in $high_trust_sender_root_domains
    and not headers.auth_summary.dmarc.pass
  )
  or sender.email.domain.root_domain not in $high_trust_sender_root_domains
)

Detection logic

Scope: inbound message.

Impersonation of Okta, an identity and access management company.

  1. inbound message
  2. any of:
    • sender.display_name matches '\\bOkta\\b'
    • sender.email.domain.domain matches '*Okta*'
    • subject.subject matches '*Okta*'
  3. none of:
    • length(headers.references) > 0
    • headers.in_reply_to is set
  4. not:
    • all of:
      • sender.email.domain.root_domain in ('oktacdn.com', 'okta.com', 'okta-emea.com', 'okta-gov.com', 'oktapreview.com', 'polaris.me', 'examity.com')
      • headers.auth_summary.dmarc.pass
  5. any of ml.logo_detect(file.message_screenshot()).brands where all hold:
    • .name is 'Okta'
    • .confidence in ('medium', 'high')
  6. any of:
    • profile.by_sender().prevalence in ('new', 'outlier')
    • all of:
      • profile.by_sender().any_messages_malicious_or_spam
      • not:
        • profile.by_sender().any_messages_benign
  7. not:
    • any of distinct(headers.domains) where:
      • .domain is 'mailrelay.okta.com'
  8. any of:
    • all of:
      • sender.email.domain.root_domain in $high_trust_sender_root_domains
      • not:
        • headers.auth_summary.dmarc.pass
    • sender.email.domain.root_domain not in $high_trust_sender_root_domains

Inspects: headers.auth_summary.dmarc.pass, headers.domains, headers.domains[].domain, headers.in_reply_to, headers.references, sender.display_name, sender.email.domain.domain, sender.email.domain.root_domain, subject.subject, type.inbound. Sensors: file.message_screenshot, ml.logo_detect, profile.by_sender, regex.icontains, strings.ilike. Reference lists: $high_trust_sender_root_domains.

Indicators matched (13)

FieldMatchValue
regex.icontainsregex\bOkta\b
strings.ilikesubstring*Okta*
sender.email.domain.root_domainmemberoktacdn.com
sender.email.domain.root_domainmemberokta.com
sender.email.domain.root_domainmemberokta-emea.com
sender.email.domain.root_domainmemberokta-gov.com
sender.email.domain.root_domainmemberoktapreview.com
sender.email.domain.root_domainmemberpolaris.me
sender.email.domain.root_domainmemberexamity.com
ml.logo_detect(file.message_screenshot()).brands[].nameequalsOkta
ml.logo_detect(file.message_screenshot()).brands[].confidencemembermedium
ml.logo_detect(file.message_screenshot()).brands[].confidencememberhigh
1 more
distinct(headers.domains)[].domainequalsmailrelay.okta.com