Detection rules › Sublime MQL
BEC/Fraud: Scam lure with freemail pivot
This message detects BEC/Fraud lures attempting to solicit the victim to pivot out of band via a freemail address in the body.
Threat classification
Sublime's own taxonomy (not MITRE ATT&CK).
| Category | Values |
|---|---|
| Attack types | BEC/Fraud |
| Tactics and techniques | Free email provider, Out of band pivot |
Event coverage
Rule body MQL
type.inbound
// body is short
and length(body.current_thread.text) < 800
// one recipient
and length(recipients.to) == 1
// all recipients are the sender
and all(recipients.to,
.email.email == sender.email.email
and (
.email.domain.valid or strings.icontains(.display_name, "undisclosed")
)
)
// not an org domain
and all(recipients.to,
.email.domain.root_domain not in $org_domains
and (
.email.domain.valid or strings.icontains(.display_name, "undisclosed")
)
)
// one link
and length(body.links) == 1
// links don't match sender
and all(body.links,
.href_url.domain.root_domain != sender.email.domain.root_domain
)
// scam indicators
and regex.icontains(body.current_thread.text,
'((?:Mr|Mrs|Ms|Miss|Dr|Prof|Sir|Lady|Rev)\.?[ \t]+)|(sir|madam|kindly)|(dringend|eingefordert|anspruch)'
)
// body contains an email address to a freemail provider
and (
regex.contains(body.current_thread.text,
"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
)
and any($free_email_providers, strings.icontains(body.current_thread.text, .))
)
Detection logic
Scope: inbound message.
This message detects BEC/Fraud lures attempting to solicit the victim to pivot out of band via a freemail address in the body.
- inbound message
- length(body.current_thread.text) < 800
- length(recipients.to) is 1
all of
recipients.towhere all hold:- .email.email is sender.email.email
any of:
- .email.domain.valid
- .display_name contains 'undisclosed'
all of
recipients.towhere all hold:- .email.domain.root_domain not in $org_domains
any of:
- .email.domain.valid
- .display_name contains 'undisclosed'
- length(body.links) is 1
all of
body.linkswhere:- .href_url.domain.root_domain is not sender.email.domain.root_domain
- body.current_thread.text matches '((?:Mr|Mrs|Ms|Miss|Dr|Prof|Sir|Lady|Rev)\\.?[ \\t]+)|(sir|madam|kindly)|(dringend|eingefordert|anspruch)'
all of:
- body.current_thread.text matches '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,}'
any of
$free_email_providerswhere:- strings.icontains(body.current_thread.text)
Inspects: body.current_thread.text, body.links, body.links[].href_url.domain.root_domain, recipients.to, recipients.to[].display_name, recipients.to[].email.domain.root_domain, recipients.to[].email.domain.valid, recipients.to[].email.email, sender.email.domain.root_domain, sender.email.email, type.inbound. Sensors: regex.contains, regex.icontains, strings.icontains. Reference lists: $free_email_providers, $org_domains.
Indicators matched (3)
| Field | Match | Value |
|---|---|---|
strings.icontains | substring | undisclosed |
regex.icontains | regex | ((?:Mr|Mrs|Ms|Miss|Dr|Prof|Sir|Lady|Rev)\.?[ \t]+)|(sir|madam|kindly)|(dringend|eingefordert|anspruch) |
regex.contains | regex | [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,} |