Detection rules › Sublime MQL

Brand impersonation: Google Workspace alert notification

Severity
medium
Type
rule
Source
github.com/sublime-security/sublime-rules

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.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesImpersonation: Brand, Social engineering, Lookalike domain

Event coverage

Rule body MQL

type.inbound

// Sender impersonates Google Workspace alerts but not from Google
and (
  regex.icontains(sender.display_name,
                  '(?:workspace|google\s*workspace).*(?:alert|notification)'
  )
  or regex.icontains(sender.display_name,
                     '(?:alert|notification).*(?:workspace|google\s*workspace)'
  )
  or regex.icontains(sender.email.local_part,
                     'workspace.*(?:alert|notification)'
  )
  or regex.icontains(sender.email.local_part, 'google.*workspace')
)
and not (
  sender.email.domain.root_domain in~ (
    'google.com',
    'google.co.uk',
    'google.ca'
  )
  and headers.auth_summary.dmarc.pass
)

// Negate legitimate Atlassian/Jira notifications that may contain Google Workspace content
and not (
  sender.email.domain.root_domain in~ ('atlassian.net', 'atlassian.com')
  and headers.auth_summary.dmarc.pass
)

// Negate legitimate Google alerts forwarded through mailing lists
and not (
  any(headers.hops,
      any(.fields,
          .name in ('X-Original-Sender', 'X-Original-From')
          and strings.ends_with(.value, '@google.com')
      )
  )
)

// Exclude Google Voice/phone call notifications
and not (
  regex.icontains(subject.subject,
                  '(?:phone\s*call|voice\s*mail|missed\s*call)'
  )
  or regex.icontains(body.current_thread.text, 'Google\s*Voice')
)

// Exclude forwarded messages
and not subject.is_forward

// Body contains Google Workspace impersonation patterns
and (
  // Alert center call to action with various phishing subjects
  (
    regex.icontains(body.current_thread.text, 'alert\s*cent(?:er|re)')
    and (
      regex.icontains(subject.subject,
                      'spike\s+in\s+(?:user[- ]?reported\s+)?spam'
      )
      or regex.icontains(subject.subject,
                         '(?:security|admin|workspace)\s+alert'
      )
      or regex.icontains(subject.subject,
                         'suspicious\s+(?:activity|login|access)'
      )
    )
  )
  // Reply-to address spoofs Google Workspace alerts
  or any(headers.reply_to,
         .email.email == 'google-workspace-alerts-noreply@google.com'
  )
  // Google Workspace logo hotlinked from gstatic
  or (
    strings.icontains(body.html.raw,
                      'gstatic.com/apps/signup/resources/google-workspace-lockup.png'
    )
    or strings.icontains(body.html.raw,
                         'gstatic.com/apps/signup/resources/google-workspace-lockup.svg'
    )
    or strings.icontains(body.html.raw,
                         'gstatic.com/apps/signup/resources/google-workspace-lockup.jpg'
    )
  )
  // Google corporate address
  or (
    strings.icontains(body.current_thread.text, '1600 Amphitheatre Parkway')
    and strings.icontains(body.current_thread.text, 'Mountain View, CA')
  )
  // Admin recipient messaging patterns
  or regex.icontains(body.current_thread.text, 'designated\s+admin\s+recipient')
  or (
    regex.icontains(body.current_thread.text,
                    'Google\s+Workspace(?:\s*account)?'
    )
    and regex.icontains(body.current_thread.text,
                        '(?:admin|administrator)\s+(?:console|recipient|account)'
    )
  )
  // Alert details structure common in these phishing attempts
  or (
    regex.icontains(body.current_thread.text, 'alert\s+details\s+include')
    and regex.icontains(body.current_thread.text,
                        '(?:activity\s+date|total\s+(?:user\s+)?reports|severity)'
    )
  )
)

// Contains links that are not to Google
and any(body.links,
        not .href_url.domain.root_domain in~ (
          'google.com',
          'google.co.uk',
          'google.ca',
          'gstatic.com',
          'googleusercontent.com',
          'sendgrid.net'
        )
)

Detection logic

Scope: inbound message.

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.

  1. inbound message
  2. any of:
    • sender.display_name matches '(?:workspace|google\\s*workspace).*(?:alert|notification)'
    • sender.display_name matches '(?:alert|notification).*(?:workspace|google\\s*workspace)'
    • sender.email.local_part matches 'workspace.*(?:alert|notification)'
    • sender.email.local_part matches 'google.*workspace'
  3. not:
    • all of:
      • sender.email.domain.root_domain in ('google.com', 'google.co.uk', 'google.ca')
      • headers.auth_summary.dmarc.pass
  4. not:
    • all of:
      • sender.email.domain.root_domain in ('atlassian.net', 'atlassian.com')
      • headers.auth_summary.dmarc.pass
  5. not:
    • any of headers.hops where:
      • any of .fields where all hold:
        • .name in ('X-Original-Sender', 'X-Original-From')
        • .value ends with '@google.com'
  6. none of:
    • subject.subject matches '(?:phone\\s*call|voice\\s*mail|missed\\s*call)'
    • body.current_thread.text matches 'Google\\s*Voice'
  7. not:
    • subject.is_forward
  8. any of:
    • all of:
      • body.current_thread.text matches 'alert\\s*cent(?:er|re)'
      • any of:
        • subject.subject matches 'spike\\s+in\\s+(?:user[- ]?reported\\s+)?spam'
        • subject.subject matches '(?:security|admin|workspace)\\s+alert'
        • subject.subject matches 'suspicious\\s+(?:activity|login|access)'
    • any of headers.reply_to where:
      • .email.email is 'google-workspace-alerts-noreply@google.com'
    • any of:
      • body.html.raw contains 'gstatic.com/apps/signup/resources/google-workspace-lockup.png'
      • body.html.raw contains 'gstatic.com/apps/signup/resources/google-workspace-lockup.svg'
      • body.html.raw contains 'gstatic.com/apps/signup/resources/google-workspace-lockup.jpg'
    • all of:
      • body.current_thread.text contains '1600 Amphitheatre Parkway'
      • body.current_thread.text contains 'Mountain View, CA'
    • body.current_thread.text matches 'designated\\s+admin\\s+recipient'
    • all of:
      • body.current_thread.text matches 'Google\\s+Workspace(?:\\s*account)?'
      • body.current_thread.text matches '(?:admin|administrator)\\s+(?:console|recipient|account)'
    • all of:
      • body.current_thread.text matches 'alert\\s+details\\s+include'
      • body.current_thread.text matches '(?:activity\\s+date|total\\s+(?:user\\s+)?reports|severity)'
  9. any of body.links where:
    • not:
      • .href_url.domain.root_domain in ('google.com', 'google.co.uk', 'google.ca', 'gstatic.com', 'googleusercontent.com', 'sendgrid.net')

Inspects: body.current_thread.text, body.html.raw, body.links, body.links[].href_url.domain.root_domain, headers.auth_summary.dmarc.pass, headers.hops, headers.hops[].fields, headers.hops[].fields[].name, headers.hops[].fields[].value, headers.reply_to, headers.reply_to[].email.email, sender.display_name, sender.email.domain.root_domain, sender.email.local_part, subject.is_forward, subject.subject, type.inbound. Sensors: regex.icontains, strings.ends_with, strings.icontains.

Indicators matched (35)

FieldMatchValue
regex.icontainsregex(?:workspace|google\s*workspace).*(?:alert|notification)
regex.icontainsregex(?:alert|notification).*(?:workspace|google\s*workspace)
regex.icontainsregexworkspace.*(?:alert|notification)
regex.icontainsregexgoogle.*workspace
sender.email.domain.root_domainmembergoogle.com
sender.email.domain.root_domainmembergoogle.co.uk
sender.email.domain.root_domainmembergoogle.ca
sender.email.domain.root_domainmemberatlassian.net
sender.email.domain.root_domainmemberatlassian.com
headers.hops[].fields[].namememberX-Original-Sender
headers.hops[].fields[].namememberX-Original-From
strings.ends_withsuffix@google.com
23 more
regex.icontainsregex(?:phone\s*call|voice\s*mail|missed\s*call)
regex.icontainsregexGoogle\s*Voice
regex.icontainsregexalert\s*cent(?:er|re)
regex.icontainsregexspike\s+in\s+(?:user[- ]?reported\s+)?spam
regex.icontainsregex(?:security|admin|workspace)\s+alert
regex.icontainsregexsuspicious\s+(?:activity|login|access)
headers.reply_to[].email.emailequalsgoogle-workspace-alerts-noreply@google.com
strings.icontainssubstringgstatic.com/apps/signup/resources/google-workspace-lockup.png
strings.icontainssubstringgstatic.com/apps/signup/resources/google-workspace-lockup.svg
strings.icontainssubstringgstatic.com/apps/signup/resources/google-workspace-lockup.jpg
strings.icontainssubstring1600 Amphitheatre Parkway
strings.icontainssubstringMountain View, CA
regex.icontainsregexdesignated\s+admin\s+recipient
regex.icontainsregexGoogle\s+Workspace(?:\s*account)?
regex.icontainsregex(?:admin|administrator)\s+(?:console|recipient|account)
regex.icontainsregexalert\s+details\s+include
regex.icontainsregex(?:activity\s+date|total\s+(?:user\s+)?reports|severity)
body.links[].href_url.domain.root_domainmembergoogle.com
body.links[].href_url.domain.root_domainmembergoogle.co.uk
body.links[].href_url.domain.root_domainmembergoogle.ca
body.links[].href_url.domain.root_domainmembergstatic.com
body.links[].href_url.domain.root_domainmembergoogleusercontent.com
body.links[].href_url.domain.root_domainmembersendgrid.net