Skip to content

Commit 9eeb526

Browse files
[PR #3479] added rule: Brand impersonation: Google Workspace alert notification
1 parent 08c9fe0 commit 9eeb526

File tree

1 file changed

+141
-0
lines changed

1 file changed

+141
-0
lines changed
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
name: "Brand impersonation: Google Workspace alert notification"
2+
description: "Detects messages impersonating Google Workspace alert notifications that use Google branding elements, workspace-specific terminology, and admin console references, but originate from non-Google domains and contain suspicious links."
3+
type: "rule"
4+
severity: "medium"
5+
source: |
6+
type.inbound
7+
8+
// Sender impersonates Google Workspace alerts but not from Google
9+
and (
10+
regex.icontains(sender.display_name,
11+
'(?:workspace|google\s*workspace).*(?:alert|notification)'
12+
)
13+
or regex.icontains(sender.display_name,
14+
'(?:alert|notification).*(?:workspace|google\s*workspace)'
15+
)
16+
or regex.icontains(sender.email.local_part,
17+
'workspace.*(?:alert|notification)'
18+
)
19+
or regex.icontains(sender.email.local_part, 'google.*workspace')
20+
)
21+
and not sender.email.domain.root_domain in~ (
22+
'google.com',
23+
'google.co.uk',
24+
'google.ca'
25+
)
26+
27+
// Negate legitimate Google alerts forwarded through mailing lists
28+
and not (
29+
any(headers.hops,
30+
any(.fields,
31+
(
32+
.name == 'X-Original-Sender'
33+
and strings.ends_with(.value, '@google.com')
34+
)
35+
or (
36+
.name == 'X-Original-From'
37+
and strings.icontains(.value, '@google.com')
38+
)
39+
)
40+
)
41+
)
42+
43+
// Exclude Google Voice/phone call notifications
44+
and not (
45+
regex.icontains(subject.subject,
46+
'(?:phone\s*call|voice\s*mail|missed\s*call)'
47+
)
48+
or regex.icontains(body.current_thread.text, 'Google\s*Voice')
49+
)
50+
51+
// Exclude forwarded messages
52+
and not (
53+
regex.icontains(subject.subject, '(?:^|\s)(?:fwd?|forward(?:ed)?)(?:\s|:)')
54+
or strings.istarts_with(subject.subject, 'fwd:')
55+
or strings.istarts_with(subject.subject, 'fw:')
56+
)
57+
58+
// Body contains Google Workspace impersonation patterns
59+
and (
60+
// Alert center call to action with various phishing subjects
61+
(
62+
regex.icontains(body.current_thread.text, 'alert\s*cent(?:er|re)')
63+
and (
64+
regex.icontains(subject.subject,
65+
'spike\s+in\s+(?:user[- ]?reported\s+)?spam'
66+
)
67+
or regex.icontains(subject.subject,
68+
'(?:security|admin|workspace)\s+alert'
69+
)
70+
or regex.icontains(subject.subject,
71+
'suspicious\s+(?:activity|login|access)'
72+
)
73+
)
74+
)
75+
// Reply-to address spoofs Google Workspace alerts
76+
or any(headers.reply_to,
77+
.email.email == 'google-workspace-alerts-noreply@google.com'
78+
)
79+
// Google Workspace logo hotlinked from gstatic
80+
or (
81+
strings.icontains(body.html.raw,
82+
'gstatic.com/apps/signup/resources/google-workspace-lockup.png'
83+
)
84+
or strings.icontains(body.html.raw,
85+
'gstatic.com/apps/signup/resources/google-workspace-lockup.svg'
86+
)
87+
or strings.icontains(body.html.raw,
88+
'gstatic.com/apps/signup/resources/google-workspace-lockup.jpg'
89+
)
90+
)
91+
// Google corporate address
92+
or (
93+
strings.icontains(body.current_thread.text, '1600 Amphitheatre Parkway')
94+
and strings.icontains(body.current_thread.text, 'Mountain View, CA')
95+
)
96+
// Admin recipient messaging patterns
97+
or regex.icontains(body.current_thread.text, 'designated\s+admin\s+recipient')
98+
or (
99+
regex.icontains(body.current_thread.text,
100+
'Google\s+Workspace(?:\s*account)?'
101+
)
102+
and regex.icontains(body.current_thread.text,
103+
'(?:admin|administrator)\s+(?:console|recipient|account)'
104+
)
105+
)
106+
// Alert details structure common in these phishing attempts
107+
or (
108+
regex.icontains(body.current_thread.text, 'alert\s+details\s+include')
109+
and regex.icontains(body.current_thread.text,
110+
'(?:activity\s+date|total\s+(?:user\s+)?reports|severity)'
111+
)
112+
)
113+
)
114+
115+
// Contains links that are not to Google
116+
and any(body.links,
117+
not .href_url.domain.root_domain in~ (
118+
'google.com',
119+
'google.co.uk',
120+
'google.ca',
121+
'gstatic.com',
122+
'googleusercontent.com',
123+
'sendgrid.net'
124+
)
125+
)
126+
127+
attack_types:
128+
- "Credential Phishing"
129+
tactics_and_techniques:
130+
- "Impersonation: Brand"
131+
- "Social engineering"
132+
- "Lookalike domain"
133+
detection_methods:
134+
- "Header analysis"
135+
- "Content analysis"
136+
- "Sender analysis"
137+
- "URL analysis"
138+
id: "053558a8-ffee-5bd7-a7d6-217f44e571bc"
139+
og_id: "143ffbc4-15ba-535e-b9d6-ab2e2862abe9"
140+
testing_pr: 3479
141+
testing_sha: 51a5b362c2821fba0699092325e04b4044172887

0 commit comments

Comments
 (0)