Skip to content

Commit e393b80

Browse files
[PR #3564] added rule: Suspicious request for financial information
1 parent 0a68b9b commit e393b80

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
name: "Suspicious request for financial information"
2+
description: "Email is from a suspicious sender and contains a request for financial information, such as AR reports."
3+
type: "rule"
4+
severity: "high"
5+
source: |
6+
type.inbound
7+
and length(attachments) <= 1
8+
and length(recipients.to) <= 2
9+
// suspicious sender
10+
and (
11+
(
12+
length(headers.reply_to) > 0
13+
and all(headers.reply_to,
14+
.email.domain.root_domain != sender.email.domain.root_domain
15+
and .email.domain.root_domain not in $org_domains
16+
)
17+
)
18+
or sender.email.domain.root_domain in $free_email_providers
19+
or profile.by_sender().days_known < 3
20+
)
21+
// specific financial language
22+
and (
23+
regex.icontains(subject.subject,
24+
'\b(Aged|Age?ing) (Payables|Receivables|Report)',
25+
'reconcill?iation (report|statement).*(issued (settlement|advice)s?)|billing records?'
26+
)
27+
or (
28+
regex.icontains(body.current_thread.text,
29+
'\b(Aged|Age?ing) (Payables|Receivables|Report)',
30+
'(updated|recent) (\bAR\b|\b\AP\b|\bAR\b \& \bAP\b|accounts?) (Payables|Receivables|Reports)',
31+
'(send|forward|provide).*remittance (advice|statements?)'
32+
)
33+
or strings.icontains(body.current_thread.text,
34+
"copy of a current statement"
35+
)
36+
or (
37+
strings.icontains(body.current_thread.text, "please send all past due")
38+
and strings.icontains(body.current_thread.text, "current invoices")
39+
)
40+
)
41+
// suspicious link display text
42+
or (
43+
any(body.links,
44+
regex.icontains(.display_text,
45+
'(Payment|Remittance|Settlement|Transfer) ?Batch',
46+
)
47+
)
48+
)
49+
// suspicious sender display name
50+
or (
51+
regex.icontains(sender.display_name,
52+
'Accounts? (?:Payable (?:Dep(\.|t\.?|artment)|e?Receipt)|(Co[[:punct:]]?ordinator|Admin|Manager|Payee))',
53+
'(?:pay(ment|([[:punct:]]|\s?)app)|EFT|ACH|deposit|remit|settle) (noti(ce|fication)|confirm(ation)?)'
54+
)
55+
// sender email listed as a recipient or recipients undisclosed/null
56+
and (
57+
(
58+
sender.email.email in map(recipients.to, .email.email)
59+
or (length(recipients.to) == 0 or length(recipients.to) is null)
60+
)
61+
// non-benign nlu intent
62+
or any(ml.nlu_classifier(body.current_thread.text).intents,
63+
// callback phishing is outside the scope of this rule
64+
(.name != "benign" and .name != "callback_scam")
65+
)
66+
)
67+
)
68+
)
69+
// negate resume related/job inquiry outreach
70+
and not (
71+
any(ml.nlu_classifier(body.current_thread.text).topics,
72+
.name == "Professional and Career Development" and .confidence == "high"
73+
)
74+
and any(ml.nlu_classifier(body.current_thread.text).intents,
75+
.name == "benign" and .confidence != "low"
76+
)
77+
)
78+
and (
79+
(
80+
sender.email.domain.root_domain in $high_trust_sender_root_domains
81+
and not headers.auth_summary.dmarc.pass
82+
)
83+
or sender.email.domain.root_domain not in $high_trust_sender_root_domains
84+
)
85+
and not profile.by_sender().any_messages_benign
86+
87+
attack_types:
88+
- "BEC/Fraud"
89+
tactics_and_techniques:
90+
- "Free email provider"
91+
- "Impersonation: Employee"
92+
- "Impersonation: VIP"
93+
- "Social engineering"
94+
detection_methods:
95+
- "Content analysis"
96+
- "Header analysis"
97+
- "Sender analysis"
98+
id: "2f079cc3-c484-54b3-88a3-c4ee73d266d1"
99+
og_id: "4ebdaa4d-4db2-56c6-9a6c-220ad49b7681"
100+
testing_pr: 3564
101+
testing_sha: c90784669e1e4334f63ea55915aa7353dda3c593

0 commit comments

Comments
 (0)