Detection rules › Sublime MQL
VIP / Executive impersonation (strict match, untrusted)
Sender display name matches the display name of a user in the $org_vips list, and the sender has never been seen before. The $org_vips list must first be manually connected to a VIP group of your upstream provider (Google Workspace and Microsoft 365 only) in order for this rule to work. Once connected, the list will be automatically synced and kept up-to-date. For more information, see the $org_vips documentation: https://docs.sublimesecurity.com/docs/configure-org_vips-list This rule is recommended to be used on a relatively small list of VIPs, and is meant to reduce attack surface by detecting any message that matches the protected list of display names from a first-time or unsolicited sender. Additional rule logic can be added to look for suspicious subjects, suspicious links, etc.
Threat classification
Sublime's own taxonomy (not MITRE ATT&CK).
| Category | Values |
|---|---|
| Attack types | BEC/Fraud |
| Tactics and techniques | Impersonation: VIP |
Event coverage
Rule body MQL
type.inbound
and (
// the display name matches a name on the orgs vip list
any($org_vips, .display_name =~ sender.display_name)
// or the display name starts with the name on the orgs vip list
or (
any($org_vips,
strings.istarts_with(sender.display_name, .display_name)
// and it is longer than just their name (eg. John Doe CEO)
and length(sender.display_name) > length(.display_name)
)
// and we have confidence it's BEC
and any(ml.nlu_classifier(body.current_thread.text).intents,
.name == "bec" and .confidence == "high"
)
)
)
and (
// ignore personal <> work emails
// where the sender and mailbox's display name are the same
length(recipients.to) > 0
or length(recipients.cc) > 0
or sender.display_name != mailbox.display_name
)
// bounce-back negations
and not strings.like(sender.email.local_part,
"*postmaster*",
"*mailer-daemon*",
"*administrator*"
)
and not any(attachments,
.content_type in (
"message/rfc822",
"message/delivery-status",
"text/calendar"
)
)
and (
(
profile.by_sender_email().prevalence in ("new", "outlier")
and not profile.by_sender_email().solicited
)
or (
profile.by_sender_email().any_messages_malicious_or_spam
and not profile.by_sender_email().any_messages_benign
)
// mismatched reply-to with unsoliticed reply-to address
or (
length(headers.reply_to) > 0
and (sender.email.email not in map(headers.reply_to, .email.email))
// negate reply-to addresses that are within the org domain
and not all(headers.reply_to,
.email.domain.domain in $org_domains
or .email.domain.root_domain in $org_domains
)
//
// 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
//
and not beta.profile.by_reply_to().solicited
and beta.profile.by_reply_to().prevalence != "common"
)
)
and (
(
sender.email.domain.root_domain in $org_domains
and not headers.auth_summary.dmarc.pass
)
or sender.email.domain.root_domain not in $org_domains
)
and not profile.by_sender_email().any_messages_benign
Detection logic
Scope: inbound message.
Sender display name matches the display name of a user in the $org_vips list, and the sender has never been seen before. The $org_vips list must first be manually connected to a VIP group of your upstream provider (Google Workspace and Microsoft 365 only) in order for this rule to work. Once connected, the list will be automatically synced and kept up-to-date. For more information, see the $org_vips documentation: https://docs.sublimesecurity.com/docs/configure-org_vips-list This rule is recommended to be used on a relatively small list of VIPs, and is meant to reduce attack surface by detecting any message that matches the protected list of display names from a first-time or unsolicited sender. Additional rule logic can be added to look for suspicious subjects, suspicious links, etc.
- inbound message
any of:
any of
$org_vipswhere:- .display_name is sender.display_name
all of:
any of
$org_vipswhere all hold:- strings.istarts_with(sender.display_name)
- length(sender.display_name) > length(.display_name)
any of
ml.nlu_classifier(body.current_thread.text).intentswhere all hold:- .name is 'bec'
- .confidence is 'high'
any of:
- length(recipients.to) > 0
- length(recipients.cc) > 0
- sender.display_name is not mailbox.display_name
not:
sender.email.local_part matches any of 3 patterns
*postmaster**mailer-daemon**administrator*
not:
any of
attachmentswhere:- .content_type in ('message/rfc822', 'message/delivery-status', 'text/calendar')
any of:
all of:
- profile.by_sender_email().prevalence in ('new', 'outlier')
not:
- profile.by_sender_email().solicited
all of:
- profile.by_sender_email().any_messages_malicious_or_spam
not:
- profile.by_sender_email().any_messages_benign
all of:
- length(headers.reply_to) > 0
- sender.email.email not in map(headers.reply_to, .email.email)
not:
all of
headers.reply_towhere any holds:- .email.domain.domain in $org_domains
- .email.domain.root_domain in $org_domains
not:
- beta.profile.by_reply_to().solicited
- beta.profile.by_reply_to().prevalence is not 'common'
any of:
all of:
- sender.email.domain.root_domain in $org_domains
not:
- headers.auth_summary.dmarc.pass
- sender.email.domain.root_domain not in $org_domains
not:
- profile.by_sender_email().any_messages_benign
Inspects: attachments[].content_type, body.current_thread.text, headers.auth_summary.dmarc.pass, headers.reply_to, headers.reply_to[].email.domain.domain, headers.reply_to[].email.domain.root_domain, headers.reply_to[].email.email, mailbox.display_name, recipients.cc, recipients.to, sender.display_name, sender.email.domain.root_domain, sender.email.email, sender.email.local_part, type.inbound. Sensors: beta.profile.by_reply_to, ml.nlu_classifier, profile.by_sender_email, strings.istarts_with, strings.like. Reference lists: $org_domains, $org_vips.
Indicators matched (8)
| Field | Match | Value |
|---|---|---|
ml.nlu_classifier(body.current_thread.text).intents[].name | equals | bec |
ml.nlu_classifier(body.current_thread.text).intents[].confidence | equals | high |
strings.like | substring | *postmaster* |
strings.like | substring | *mailer-daemon* |
strings.like | substring | *administrator* |
attachments[].content_type | member | message/rfc822 |
attachments[].content_type | member | message/delivery-status |
attachments[].content_type | member | text/calendar |