Skip to content

Commit e7e9cfc

Browse files
[Test Rules] [PR #4515] added rule: VIP impersonation with charitable donation fraud
1 parent a3f7079 commit e7e9cfc

1 file changed

Lines changed: 90 additions & 0 deletions

File tree

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
name: "VIP impersonation with charitable donation fraud"
2+
description: "Fake email thread shows a VIP requesting a donation to a charity, usually addressed to Accounts Payable departments. Can result in monetary loss."
3+
type: "rule"
4+
severity: "high"
5+
source: |
6+
type.inbound
7+
and strings.ilike(body.current_thread.text,
8+
"*charity*",
9+
"*gala*",
10+
"*donation*",
11+
"*donor*"
12+
)
13+
and any(ml.nlu_classifier(body.current_thread.text).entities,
14+
.name == "financial"
15+
)
16+
and any(ml.nlu_classifier(body.current_thread.text).entities,
17+
.name == "request"
18+
)
19+
and (
20+
any($org_vips,
21+
strings.icontains(body.html.inner_text, .display_name)
22+
or strings.icontains(body.html.inner_text,
23+
strings.concat(.first_name, " ", .last_name)
24+
)
25+
or strings.icontains(body.html.inner_text,
26+
strings.concat(.last_name, ", ", .first_name)
27+
)
28+
)
29+
or any($org_vips,
30+
strings.icontains(body.plain.raw, .display_name)
31+
or strings.icontains(body.plain.raw,
32+
strings.concat(.first_name, " ", .last_name)
33+
)
34+
or strings.icontains(body.plain.raw,
35+
strings.concat(.last_name, ", ", .first_name)
36+
)
37+
)
38+
)
39+
and (
40+
(
41+
(subject.is_forward or subject.is_reply)
42+
and (
43+
(length(headers.references) == 0 and headers.in_reply_to is null)
44+
or not any(headers.hops,
45+
any(.fields, strings.ilike(.name, "In-Reply-To"))
46+
)
47+
)
48+
)
49+
// fake thread, but no indication in the subject line
50+
// current_thread pulls the recent thread, but the full body contains the fake "original" email
51+
or (
52+
not ((subject.is_forward or subject.is_reply))
53+
and (
54+
3 of (
55+
strings.icontains(body.html.display_text, "from:"),
56+
strings.icontains(body.html.display_text, "to:"),
57+
strings.icontains(body.html.display_text, "sent:"),
58+
strings.icontains(body.html.display_text, "subject:")
59+
)
60+
or length(body.previous_threads) > 0
61+
)
62+
and (
63+
length(body.current_thread.text) + 100 < length(body.html.display_text)
64+
)
65+
// negating bouncebacks
66+
and not any(attachments,
67+
.content_type in ("message/delivery-status", "message/rfc822")
68+
)
69+
)
70+
)
71+
and (
72+
profile.by_sender().prevalence in ("new", "rare")
73+
or profile.by_sender().days_known > 30
74+
)
75+
and not profile.by_sender().any_messages_benign
76+
attack_types:
77+
- "BEC/Fraud"
78+
tactics_and_techniques:
79+
- "Impersonation: Employee"
80+
- "Impersonation: VIP"
81+
- "Social engineering"
82+
detection_methods:
83+
- "Content analysis"
84+
- "Header analysis"
85+
- "Natural Language Understanding"
86+
- "Sender analysis"
87+
id: "f1011d09-b7dc-5a80-a0eb-ae5f9e5f1ae1"
88+
og_id: "35a56b8e-9293-5ccf-95d3-c990152d8f48"
89+
testing_pr: 4515
90+
testing_sha: 1658ad9fc984cdf4e2a8a85f6af83206ffd6dde1

0 commit comments

Comments
 (0)