VIP Impersonation via Google Group relay with suspicious indicators

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.

Sublime rule (View on GitHub)

 1name: "VIP Impersonation via Google Group relay with suspicious indicators"
 2description: "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."
 3type: "rule"
 4severity: "high"
 5source: |
 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              strings.istarts_with(.name,
20                                   "X-Authenticated-Sender",
21                                   "X-Sender",
22                                   "X-Original-Sender"
23              )
24          )
25  )
26  
27  // reply to return path mismatch and not org domain
28  and any(headers.reply_to,
29          .email.domain.root_domain != headers.return_path.domain.root_domain
30          and .email.domain.root_domain not in $org_domains
31  )
32  
33  // googlegroups found in hops
34  and any(headers.hops,
35          .index == 0 and any(.fields, strings.icontains(.value, "googlegroups"))
36  )
37  
38  // financial nlu entity in current thread
39  and 3 of (
40    any(ml.nlu_classifier(body.current_thread.text).entities,
41        .name == "financial"
42    ),
43  
44    // invoice entity in display_text
45    any(ml.nlu_classifier(body.current_thread.text).tags, .name == "invoice"),
46  
47    // fake thread
48    (
49      (subject.is_forward or subject.is_reply)
50      and (
51        (length(headers.references) == 0 and headers.in_reply_to is null)
52        or headers.in_reply_to is null
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  )  
65attack_types:
66  - "BEC/Fraud"
67  - "Credential Phishing"
68  - "Malware/Ransomware"
69tactics_and_techniques:
70  - "Evasion"
71  - "Free email provider"
72  - "Impersonation: Employee"
73  - "Social engineering"
74  - "Spoofing"
75detection_methods:
76  - "Content analysis"
77  - "Header analysis"
78  - "Natural Language Understanding"
79  - "Sender analysis"
80id: "57f9cd3b-ddac-5ef5-96dd-374dbd03f5cd"
to-top