Detection rules › Sublime MQL
VIP impersonation with charitable donation fraud
Fake email thread shows a VIP requesting a donation to a charity, usually addressed to Accounts Payable departments. Can result in monetary loss.
Threat classification
Sublime's own taxonomy (not MITRE ATT&CK).
| Category | Values |
|---|---|
| Attack types | BEC/Fraud |
| Tactics and techniques | Impersonation: Employee, Impersonation: VIP, Social engineering |
Event coverage
Rule body MQL
type.inbound
and strings.ilike(body.current_thread.text,
"*charity*",
"*gala*",
"*donation*",
"*donor*"
)
and any(ml.nlu_classifier(body.current_thread.text).entities,
.name == "financial"
)
and any(ml.nlu_classifier(body.current_thread.text).entities,
.name == "request"
)
and (
any($org_vips, strings.icontains(body.html.inner_text, .display_name))
or any($org_vips, strings.icontains(body.plain.raw, .display_name))
)
and (
(
(subject.is_forward or subject.is_reply)
and (
(length(headers.references) == 0 and headers.in_reply_to is null)
or headers.in_reply_to is null
)
)
// fake thread, but no indication in the subject line
// current_thread pulls the recent thread, but the full body contains the fake "original" email
or (
not ((subject.is_forward or subject.is_reply))
and (
3 of (
strings.icontains(body.html.display_text, "from:"),
strings.icontains(body.html.display_text, "to:"),
strings.icontains(body.html.display_text, "sent:"),
strings.icontains(body.html.display_text, "subject:")
)
or length(body.previous_threads) > 0
)
and (
length(body.current_thread.text) + 100 < length(body.html.display_text)
)
// negating bouncebacks
and not any(attachments,
.content_type in ("message/delivery-status", "message/rfc822")
)
)
)
and (
profile.by_sender().prevalence in ("new", "rare")
or profile.by_sender().days_known > 30
)
and not profile.by_sender().any_messages_benign
Detection logic
Scope: inbound message.
Fake email thread shows a VIP requesting a donation to a charity, usually addressed to Accounts Payable departments. Can result in monetary loss.
- inbound message
body.current_thread.text matches any of 4 patterns
*charity**gala**donation**donor*
any of
ml.nlu_classifier(body.current_thread.text).entitieswhere:- .name is 'financial'
any of
ml.nlu_classifier(body.current_thread.text).entitieswhere:- .name is 'request'
any of:
any of
$org_vipswhere:- strings.icontains(body.html.inner_text)
any of
$org_vipswhere:- strings.icontains(body.plain.raw)
any of:
all of:
any of:
- subject.is_forward
- subject.is_reply
any of:
all of:
- length(headers.references) is 0
- headers.in_reply_to is missing
- headers.in_reply_to is missing
all of:
none of:
- subject.is_forward
- subject.is_reply
any of:
at least 3 of 4: body.html.display_text contains any of 4 patterns
from:to:sent:subject:
- length(body.previous_threads) > 0
- length(body.current_thread.text) + 100 < length(body.html.display_text)
not:
any of
attachmentswhere:- .content_type in ('message/delivery-status', 'message/rfc822')
any of:
- profile.by_sender().prevalence in ('new', 'rare')
- profile.by_sender().days_known > 30
not:
- profile.by_sender().any_messages_benign
Inspects: attachments[].content_type, body.current_thread.text, body.html.display_text, body.html.inner_text, body.plain.raw, body.previous_threads, headers.in_reply_to, headers.references, subject.is_forward, subject.is_reply, type.inbound. Sensors: ml.nlu_classifier, profile.by_sender, strings.icontains, strings.ilike. Reference lists: $org_vips.
Indicators matched (12)
| Field | Match | Value |
|---|---|---|
strings.ilike | substring | *charity* |
strings.ilike | substring | *gala* |
strings.ilike | substring | *donation* |
strings.ilike | substring | *donor* |
ml.nlu_classifier(body.current_thread.text).entities[].name | equals | financial |
ml.nlu_classifier(body.current_thread.text).entities[].name | equals | request |
strings.icontains | substring | from: |
strings.icontains | substring | to: |
strings.icontains | substring | sent: |
strings.icontains | substring | subject: |
attachments[].content_type | member | message/delivery-status |
attachments[].content_type | member | message/rfc822 |