Skip to content

Commit 20731ff

Browse files
[PR #3470] added rule: VIP Impersonation via Google Group relay with suspicious indicators
1 parent 23a0abe commit 20731ff

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
name: "VIP Impersonation via Google Group relay with suspicious indicators"
2+
description: "Public Google Groups can be used to impersonate internal senders, while the reply to address is not under organizational control, leading to fraud, credential phishing, or other unwanted outcomes."
3+
type: "rule"
4+
severity: "high"
5+
source: |
6+
(type.inbound or type.internal)
7+
and sender.email.domain.root_domain in $org_domains
8+
9+
// subject, sender or reply to contains a VIP
10+
and (
11+
any(headers.reply_to,
12+
any($org_vips, strings.contains(.display_name, ..display_name))
13+
)
14+
or any($org_vips, strings.contains(subject.subject, .display_name))
15+
or any($org_vips, strings.contains(sender.display_name, .display_name))
16+
)
17+
and any(headers.hops,
18+
any(.fields,
19+
regex.icontains(.name,
20+
"X-Authenticated-Sender|X-Sender|X-Original-Sender"
21+
)
22+
)
23+
)
24+
25+
// reply to return path mismatch and not org domain
26+
and any(headers.reply_to,
27+
.email.domain.root_domain != headers.return_path.domain.root_domain
28+
and .email.domain.root_domain not in $org_domains
29+
)
30+
31+
// googlegroups found in hops
32+
and any(headers.hops,
33+
.index == 0 and any(.fields, strings.icontains(.value, "googlegroups"))
34+
)
35+
36+
// financial nlu entity in current thread
37+
and 3 of (
38+
any(ml.nlu_classifier(body.current_thread.text).entities,
39+
.name == "financial"
40+
),
41+
42+
// invoice entity in display_text
43+
any(ml.nlu_classifier(body.current_thread.text).tags, .name == "invoice"),
44+
45+
// fake thread
46+
(
47+
(subject.is_forward or subject.is_reply)
48+
and (
49+
(length(headers.references) == 0 and headers.in_reply_to is null)
50+
or not any(headers.hops,
51+
any(.fields, strings.ilike(.name, "In-Reply-To"))
52+
)
53+
)
54+
),
55+
56+
// reply-to is freemail
57+
any(headers.reply_to, .email.domain.domain in $free_email_providers),
58+
59+
// reply-to is not in $recipient_emails
60+
any(headers.reply_to, .email.email not in $recipient_emails),
61+
62+
// dmarc authentication is freemail provider
63+
headers.auth_summary.dmarc.details.from.root_domain in $free_email_providers
64+
)
65+
attack_types:
66+
- "BEC/Fraud"
67+
- "Credential Phishing"
68+
- "Malware/Ransomware"
69+
tactics_and_techniques:
70+
- "Evasion"
71+
- "Free email provider"
72+
- "Impersonation: Employee"
73+
- "Social engineering"
74+
- "Spoofing"
75+
detection_methods:
76+
- "Content analysis"
77+
- "Header analysis"
78+
- "Natural Language Understanding"
79+
- "Sender analysis"
80+
id: "dab9243e-9f18-57cc-95cf-d68c7c0aa82e"
81+
og_id: "57f9cd3b-ddac-5ef5-96dd-374dbd03f5cd"
82+
testing_pr: 3470
83+
testing_sha: 29a34151c5996071b29990b56857e3a1cdb712c1

0 commit comments

Comments
 (0)