Detection rules › Sublime MQL
Display name and subject impersonation using recipient SLD (new sender)
The recipient domain's SLD is used in the sender's display name and in the subject to impersonate the organization.
Threat classification
Sublime's own taxonomy (not MITRE ATT&CK).
| Category | Values |
|---|---|
| Attack types | Credential Phishing |
| Tactics and techniques | Social engineering |
Event coverage
Rule body MQL
type.inbound
and (
// recipient SLD is being impersonated in the subject + display name
(
// these are usually targeted with just 1 recipient,
// but sometimes they CC themselves or have a blank CC
(
length(recipients.to) + length(recipients.cc) + length(recipients.bcc) <= 2
)
and any(recipients.to,
length(.email.domain.sld) >= 4
// ensure that we're checking the org SLD
and .email.domain.sld in $org_slds
and strings.icontains(subject.subject, .email.domain.sld)
and strings.icontains(sender.display_name, .email.domain.sld)
)
)
or (
// accounts for BCC'd messages where the recipients are empty
// if BCC, sometimes the recipient will be the attacker's email
(
length(recipients.to) + length(recipients.cc) + length(recipients.bcc) <= 2
)
and length(mailbox.email.domain.sld) >= 4
and strings.icontains(subject.subject, mailbox.email.domain.sld)
and strings.icontains(sender.display_name, mailbox.email.domain.sld)
)
)
and (
// at least 1 link or non-image attachment
(
length(body.links) > 0
// these attacks all use compromosed senders, so we look for a domain
// that doesn't match the sender's domain to weed out legit messages
and any(body.links,
.href_url.domain.root_domain != sender.email.domain.root_domain
)
)
or length(filter(attachments, .file_type not in $file_types_images)) > 0
)
and not (
strings.contains(sender.display_name, "on behalf of")
and sender.email.domain.root_domain == "microsoftonline.com"
)
and all(recipients.to, .email.email != sender.email.email)
// negate org domain senders, which can often be misconfigured and fail
// authentication, causing them to be type.inbound instead of type.internal.
// this is fine because we should catch spoofs in other ways.
// also, we use root_domain here to account for subdomains used by internal tools that aren't connected to the tenant.
// this should also be safe because domains like onmicrosoft[.]com are tracked as FQDNs in $org_domains, so they won't match
and sender.email.domain.root_domain not in $org_domains
// 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
)
and (
not profile.by_sender().solicited
or (
profile.by_sender().any_messages_malicious_or_spam
and not profile.by_sender().any_messages_benign
)
)
and not profile.by_sender().any_messages_benign
Detection logic
Scope: inbound message.
The recipient domain's SLD is used in the sender's display name and in the subject to impersonate the organization.
- inbound message
any of:
all of:
- length(recipients.to) + length(recipients.cc) + length(recipients.bcc) ≤ 2
any of
recipients.towhere all hold:- length(.email.domain.sld) ≥ 4
- .email.domain.sld in $org_slds
- strings.icontains(subject.subject)
- strings.icontains(sender.display_name)
all of:
- length(recipients.to) + length(recipients.cc) + length(recipients.bcc) ≤ 2
- length(mailbox.email.domain.sld) ≥ 4
- strings.icontains(subject.subject)
- strings.icontains(sender.display_name)
any of:
all of:
- length(body.links) > 0
any of
body.linkswhere:- .href_url.domain.root_domain is not sender.email.domain.root_domain
- length(filter(attachments, .file_type not in $file_types_images)) > 0
not:
all of:
- sender.display_name contains 'on behalf of'
- sender.email.domain.root_domain is 'microsoftonline.com'
all of
recipients.towhere:- .email.email is not sender.email.email
- sender.email.domain.root_domain not in $org_domains
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
any of:
not:
- profile.by_sender().solicited
all of:
- profile.by_sender().any_messages_malicious_or_spam
not:
- profile.by_sender().any_messages_benign
not:
- profile.by_sender().any_messages_benign
Inspects: attachments[].file_type, body.links, body.links[].href_url.domain.root_domain, headers.auth_summary.dmarc.pass, mailbox.email.domain.sld, recipients.to, recipients.to[].email.domain.sld, recipients.to[].email.email, sender.display_name, sender.email.domain.root_domain, sender.email.email, subject.subject, type.inbound. Sensors: profile.by_sender, strings.contains, strings.icontains. Reference lists: $file_types_images, $high_trust_sender_root_domains, $org_domains, $org_slds.
Indicators matched (2)
| Field | Match | Value |
|---|---|---|
strings.contains | substring | on behalf of |
sender.email.domain.root_domain | equals | microsoftonline.com |