Detection rules › Sublime MQL
Fake email quarantine notification
Detects phishing messages implying that emails have been delayed or blocked, prompting users to view, release, or delete pending messages.
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 length(body.links) < 10
and (
any(ml.nlu_classifier(body.current_thread.text).intents,
.name == "cred_theft" and .confidence == "high"
)
or (
length(body.current_thread.text) < 250
and any(recipients.to,
strings.icontains(body.current_thread.text, .email.domain.sld)
or strings.icontains(body.current_thread.text, .email.local_part)
)
)
)
and not (
length(ml.nlu_classifier(body.current_thread.text).topics) == 1
and any(ml.nlu_classifier(body.current_thread.text).topics,
.name == "Financial Communications" and .confidence != "low"
)
)
and 3 of (
strings.ilike(body.current_thread.text, "*review*"),
strings.ilike(body.current_thread.text, "*incoming*"),
strings.ilike(body.current_thread.text, "*release*"),
strings.ilike(body.current_thread.text, "*quarantine*"),
strings.ilike(body.current_thread.text, "*messages*"),
strings.ilike(body.current_thread.text, "*server error*"),
strings.ilike(body.current_thread.text, "*blocked*"),
strings.ilike(body.current_thread.text, "*prevented*"),
strings.ilike(body.current_thread.text, "*validation*"),
strings.ilike(body.current_thread.text, "*notification*"),
strings.ilike(body.current_thread.text, "*kindly*"),
strings.ilike(body.current_thread.text, "*on hold*"),
strings.ilike(body.current_thread.text, "*held*"),
strings.ilike(body.current_thread.text, "*pending*"),
strings.ilike(body.current_thread.text, "*stuck*"),
strings.like(body.current_thread.text, "* MX *")
)
and (
any(body.links,
regex.icontains(.display_text,
"view",
"release",
"message",
"delete",
"recover",
"SSO",
"sign in"
)
)
or (
length(body.links) < 3
and any(body.links,
any(recipients.to,
.email.domain.root_domain == ..display_url.domain.root_domain
and ..mismatched
)
)
)
)
and not any(body.links,
regex.icontains(.display_text,
"view document",
"review (&|and) sign document"
)
)
and sender.email.domain.root_domain not in (
"bing.com",
"microsoft.com",
"microsoftonline.com",
"microsoftsupport.com",
"microsoft365.com",
"office.com",
"office365.com",
"onedrive.com",
"sharepointonline.com",
"yammer.com",
"ppops.net"
)
// negate org domains unless they fail DMARC authentication
and (
(
sender.email.domain.root_domain in $org_domains
and (
not headers.auth_summary.dmarc.pass
// MS quarantine digest emails from an org domain are router "internally" to MS, therefore, there is no authentication information
or not (
headers.auth_summary.dmarc.pass is null
and all(headers.domains,
.root_domain in ("outlook.com", "office365.com")
)
// typical emails from freemail Outlook accounts are from prod.outlook.com
and strings.ends_with(headers.message_id, "protection.outlook.com>")
)
)
)
or 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
and not profile.by_sender().any_messages_benign
Detection logic
Scope: inbound message.
Detects phishing messages implying that emails have been delayed or blocked, prompting users to view, release, or delete pending messages.
- inbound message
- length(body.links) < 10
any of:
any of
ml.nlu_classifier(body.current_thread.text).intentswhere all hold:- .name is 'cred_theft'
- .confidence is 'high'
all of:
- length(body.current_thread.text) < 250
any of
recipients.towhere any holds:- strings.icontains(body.current_thread.text)
- strings.icontains(body.current_thread.text)
not:
all of:
- length(ml.nlu_classifier(body.current_thread.text).topics) is 1
any of
ml.nlu_classifier(body.current_thread.text).topicswhere all hold:- .name is 'Financial Communications'
- .confidence is not 'low'
at least 3 of 16: body.current_thread.text matches any of 16 patterns
*review**incoming**release**quarantine**messages**server error**blocked**prevented**validation**notification**kindly**on hold**held**pending**stuck** MX *
any of:
any of
body.linkswhere:.display_text matches any of 7 patterns
viewreleasemessagedeleterecoverSSOsign in
all of:
- length(body.links) < 3
any of
body.linkswhere:any of
recipients.towhere all hold:- .email.domain.root_domain is .display_url.domain.root_domain
- .mismatched
not:
any of
body.linkswhere:.display_text matches any of 2 patterns
view documentreview (&|and) sign document
- sender.email.domain.root_domain not in ('bing.com', 'microsoft.com', 'microsoftonline.com', 'microsoftsupport.com', 'microsoft365.com', 'office.com', 'office365.com', 'onedrive.com', 'sharepointonline.com', 'yammer.com', 'ppops.net')
any of:
all of:
- sender.email.domain.root_domain in $org_domains
any of:
not:
- headers.auth_summary.dmarc.pass
not:
all of:
- headers.auth_summary.dmarc.pass is missing
all of
headers.domainswhere:- .root_domain in ('outlook.com', 'office365.com')
- headers.message_id ends with 'protection.outlook.com>'
- 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
not:
- profile.by_sender().solicited
not:
- profile.by_sender().any_messages_benign
Inspects: body.current_thread.text, body.links, body.links[].display_text, body.links[].display_url.domain.root_domain, body.links[].mismatched, headers.auth_summary.dmarc.pass, headers.domains, headers.domains[].root_domain, headers.message_id, recipients.to, recipients.to[].email.domain.root_domain, recipients.to[].email.domain.sld, recipients.to[].email.local_part, sender.email.domain.root_domain, type.inbound. Sensors: ml.nlu_classifier, profile.by_sender, regex.icontains, strings.ends_with, strings.icontains, strings.ilike, strings.like. Reference lists: $high_trust_sender_root_domains, $org_domains.
Indicators matched (42)
| Field | Match | Value |
|---|---|---|
ml.nlu_classifier(body.current_thread.text).intents[].name | equals | cred_theft |
ml.nlu_classifier(body.current_thread.text).intents[].confidence | equals | high |
ml.nlu_classifier(body.current_thread.text).topics[].name | equals | Financial Communications |
strings.ilike | substring | *review* |
strings.ilike | substring | *incoming* |
strings.ilike | substring | *release* |
strings.ilike | substring | *quarantine* |
strings.ilike | substring | *messages* |
strings.ilike | substring | *server error* |
strings.ilike | substring | *blocked* |
strings.ilike | substring | *prevented* |
strings.ilike | substring | *validation* |
30 more
strings.ilike | substring | *notification* |
strings.ilike | substring | *kindly* |
strings.ilike | substring | *on hold* |
strings.ilike | substring | *held* |
strings.ilike | substring | *pending* |
strings.ilike | substring | *stuck* |
strings.like | substring | * MX * |
regex.icontains | regex | view |
regex.icontains | regex | release |
regex.icontains | regex | message |
regex.icontains | regex | delete |
regex.icontains | regex | recover |
regex.icontains | regex | SSO |
regex.icontains | regex | sign in |
regex.icontains | regex | view document |
regex.icontains | regex | review (&|and) sign document |
sender.email.domain.root_domain | member | bing.com |
sender.email.domain.root_domain | member | microsoft.com |
sender.email.domain.root_domain | member | microsoftonline.com |
sender.email.domain.root_domain | member | microsoftsupport.com |
sender.email.domain.root_domain | member | microsoft365.com |
sender.email.domain.root_domain | member | office.com |
sender.email.domain.root_domain | member | office365.com |
sender.email.domain.root_domain | member | onedrive.com |
sender.email.domain.root_domain | member | sharepointonline.com |
sender.email.domain.root_domain | member | yammer.com |
sender.email.domain.root_domain | member | ppops.net |
headers.domains[].root_domain | member | outlook.com |
headers.domains[].root_domain | member | office365.com |
strings.ends_with | suffix | protection.outlook.com> |