Skip to content

Commit e7b96e5

Browse files
[PR #3429] added rule: BEC: Banking verification certificate with payment hold request
1 parent 00398b1 commit e7b96e5

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
name: "BEC: Banking verification certificate with payment hold request"
2+
description: "Detects business email compromise targeting financial operations using banking certificates or verification documents combined with payment hold instructions. The rule identifies suspicious attachments with banking-related filenames, body content requesting payment delays or system updates for banking details, and various sender reputation indicators including uncommon TLDs, mismatched domains, or potential thread hijacking patterns."
3+
type: "rule"
4+
severity: "high"
5+
source: |
6+
type.inbound
7+
and (
8+
(
9+
length(attachments) > 0
10+
and (
11+
any(attachments,
12+
(
13+
strings.ilike(.file_name, "*bank*certificate*")
14+
or strings.ilike(.file_name, "*bank*confirmation*")
15+
or strings.ilike(.file_name, "*bank*ownership*")
16+
or strings.ilike(.file_name, "*verification*certificate*")
17+
or strings.ilike(.file_name, "*ownership*certificate*")
18+
or strings.ilike(.file_name, "*bank*verification*")
19+
or strings.ilike(.file_name, "*banking*certificate*")
20+
)
21+
and .file_type in ("pdf", "doc", "docx", "jpg", "png")
22+
)
23+
)
24+
)
25+
or (
26+
regex.icontains(body.current_thread.text,
27+
'(bank\s+(ownership|verification|confirmation)\s+(certificate|letter|document))'
28+
)
29+
or regex.icontains(body.current_thread.text,
30+
'(ownership\s+certificate|verification\s+(certificate|document))'
31+
)
32+
)
33+
)
34+
and (
35+
regex.icontains(body.current_thread.text,
36+
'(save\s+it\s+in\s+your\s+system|for\s+all\s+USD\s+transactions|hold\s+on\s+with\s+.*payment|experiencing\s+.*discrepancies|tax.related\s+issues|finance\s+director|new\s+(bank|banking)\s+(account|details))'
37+
)
38+
or (
39+
regex.icontains(body.current_thread.text, '(kindly|please).*(hold|wait).*payment')
40+
and regex.icontains(body.current_thread.text, '(bank|banking|USD|finance)')
41+
)
42+
)
43+
and (
44+
(
45+
length(headers.domains) > 0
46+
and any(headers.domains, .root_domain != sender.email.domain.root_domain)
47+
)
48+
or (
49+
sender.email.domain.tld not in ("com", "org", "net", "edu", "gov")
50+
)
51+
or (
52+
any(body.links,
53+
.href_url.domain.root_domain != sender.email.domain.root_domain
54+
and .href_url.domain.root_domain not in $tranco_1m
55+
)
56+
)
57+
// Thread hijacking detection: previous threads show legitimate domains while current uses suspicious TLD
58+
or (
59+
length(body.previous_threads) > 0
60+
and any(body.previous_threads,
61+
// Look for common legitimate TLDs in previous thread emails
62+
regex.contains(.preamble, '@[a-zA-Z0-9.-]+\\.(com|org|net)>')
63+
)
64+
and sender.email.domain.tld not in ("com", "org", "net", "edu", "gov")
65+
and not strings.icontains(body.previous_threads[0].preamble, sender.email.domain.root_domain)
66+
)
67+
)
68+
69+
70+
attack_types:
71+
- "BEC/Fraud"
72+
tactics_and_techniques:
73+
- "Social engineering"
74+
- "Impersonation: Employee"
75+
- "PDF"
76+
- "Evasion"
77+
detection_methods:
78+
- "Content analysis"
79+
- "File analysis"
80+
- "Header analysis"
81+
- "Sender analysis"
82+
- "Threat intelligence"
83+
- "URL analysis"
84+
id: "23c2122c-8302-5db4-9e13-25d987998654"
85+
og_id: "7ce1e327-1452-5d9c-9b0b-818d67f3e53c"
86+
testing_pr: 3429
87+
testing_sha: b251940bcf4d8cdcd3c9395bea2a5cd44852f8d7

0 commit comments

Comments
 (0)