Link: Free file hosting with undisclosed recipients

Detects messages containing links to free file hosting or subdomain services that are sent to undisclosed recipients or only CC/BCC recipients. The rule identifies suspicious distribution patterns where legitimate recipients are hidden, potentially indicating mass distribution of malicious content through file sharing platforms.

Sublime rule (View on GitHub)

 1name: "Link: Free file hosting with undisclosed recipients"
 2description: "Detects messages containing links to free file hosting or subdomain services that are sent to undisclosed recipients or only CC/BCC recipients. The rule identifies suspicious distribution patterns where legitimate recipients are hidden, potentially indicating mass distribution of malicious content through file sharing platforms."
 3type: "rule"
 4severity: "medium"
 5source: |
 6  type.inbound
 7  // no previous threads
 8  and (
 9    length(body.previous_threads) == 0
10    // If there is a previous thread, it is unrelated to current thread
11    or any(body.previous_threads, .sender.email.email != mailbox.email.email)
12  )
13  
14  // few links that aren't "social" links
15  and 0 < length(filter(body.current_thread.links,
16                        .href_url.domain.root_domain not in (
17                          'x.com',
18                          'facebook.com',
19                          'twitter.com',
20                          'instagram.com',
21                          'youtube.com',
22                          'linkedin.com'
23                        )
24                 )
25  ) < 10
26  
27  // undisclosed recipients or all recipients cc'd
28  and (
29    any(recipients.to, strings.ilike(.display_name, "undisclosed?recipients"))
30    or (length(recipients.cc) > 0 and length(recipients.to) == 0)
31    or (length(recipients.bcc) > 0 and length(recipients.to) == 0)
32    or (
33      length(recipients.to) == 1
34      and length(recipients.cc) == 0
35      and length(recipients.bcc) == 0
36      and all(recipients.to, .email.email == sender.email.email)
37      and all(recipients.to, .email.email != mailbox.email.email)
38    )
39  )
40  
41  // links to free file hosts or free subdomain hosts
42  and any(body.current_thread.links,
43          (
44            .href_url.domain.root_domain in $free_file_hosts
45            or .href_url.domain.root_domain in $free_subdomain_hosts
46          )
47          and .visible
48          and not (
49            .href_url.domain.root_domain == "googleusercontent.com"
50            and strings.istarts_with(.href_url.path, "/mail-sig")
51          )
52          and not .href_url.domain.domain in $tenant_domains
53  )
54  
55  // negate listmailers & benign threads
56  and not (
57    any(headers.hops, any(.fields, .name == "List-Unsubscribe"))
58    or any(ml.nlu_classifier(body.current_thread.text).intents,
59           .name == "benign" and .confidence == "high"
60    )
61  )
62  and not (
63    (
64      sender.email.domain.root_domain in ("twilio.com", "zendesk.com")
65      or headers.return_path.domain.root_domain in ("twilio.com", "zendesk.com")
66    )
67    and coalesce(headers.auth_summary.dmarc.pass, false)
68  )
69  
70  // unsolicited and passing auth, or failing/missing dmarc
71  and (
72    (
73      coalesce(headers.auth_summary.dmarc.pass, false)
74      and not profile.by_sender().solicited
75    )
76    or profile.by_sender_email().days_since.last_inbound > 365
77    or (not coalesce(headers.auth_summary.dmarc.pass, false))
78  )  
79
80attack_types:
81  - "Credential Phishing"
82  - "Malware/Ransomware"
83tactics_and_techniques:
84  - "Free file host"
85  - "Free subdomain host"
86  - "Evasion"
87detection_methods:
88  - "Header analysis"
89  - "URL analysis"
90  - "Sender analysis"
91  - "Natural Language Understanding"
92id: "b6281306-bf26-58e2-8445-0ef8d05d9820"
to-top