Link: File sharing impersonation with suspicious language and sending patterns

Detects messages containing file sharing and cloud services topics combined with BEC or credential theft language, featuring links with document-related display text that lead to low-reputation domains outside the sender's domain and organization.

Sublime rule (View on GitHub)

 1name: "Link: File sharing impersonation with suspicious language and sending patterns"
 2description: "Detects messages containing file sharing and cloud services topics combined with BEC or credential theft language, featuring links with document-related display text that lead to low-reputation domains outside the sender's domain and organization."
 3type: "rule"
 4severity: "medium"
 5source: |
 6  type.inbound
 7  and any(ml.nlu_classifier(body.current_thread.text).topics,
 8          .name == "File Sharing and Cloud Services" and .confidence != "low"
 9  )
10  and any(ml.nlu_classifier(body.current_thread.text).intents,
11          .name in ("bec", "cred_theft") and .confidence != "low"
12  )
13  and any(body.links,
14          regex.icontains(.display_text,
15                          "document",
16                          "download",
17                          "message",
18                          "view file"
19          )
20          and .href_url.domain.root_domain != sender.email.domain.root_domain
21          and .href_url.domain.root_domain not in $tranco_1m
22          and .href_url.domain.root_domain not in $org_domains
23          and .href_url.domain.valid
24  
25          // Exclude legitimate document services
26          and not .href_url.domain.root_domain in $free_file_hosts
27  )
28  // suspicious sending/recipient pattern
29  and 1 of (
30    (
31      length(recipients.to) == 1
32      and recipients.to[0].email.email == sender.email.email
33    ),
34    any(headers.reply_to,
35        .email.domain.domain in $free_email_providers
36        and .email.domain.domain != sender.email.domain.domain
37    ),
38    (
39      length(recipients.to) == 1
40      and length(recipients.cc) == 1
41      and recipients.to[0].email.email == recipients.cc[0].email.email
42    ),
43    (
44      strings.icontains(headers.return_path.local_part, "+SRS=")
45      or strings.icontains(headers.auth_summary.spf.details.designator, "+SRS=")
46      or any(headers.hops,
47             strings.icontains(.authentication_results.spf_details.designator,
48                               '+SRS='
49             )
50      )
51    ),
52    // No recipients visible
53    (
54      length(recipients.to) == 0
55      or (
56        all(recipients.to, .email.domain.valid == false)
57        and all(recipients.cc, .email.domain.valid == false)
58      )
59    )
60    and length(recipients.cc) == 0
61  )
62  
63  // negate highly trusted sender domains unless they fail DMARC authentication
64  and not (
65    sender.email.domain.root_domain in $high_trust_sender_root_domains
66    and coalesce(headers.auth_summary.dmarc.pass, false)
67  )  
68
69attack_types:
70  - "BEC/Fraud"
71  - "Credential Phishing"
72tactics_and_techniques:
73  - "Social engineering"
74  - "Free subdomain host"
75  - "Impersonation: Brand"
76detection_methods:
77  - "Natural Language Understanding"
78  - "URL analysis"
79  - "Sender analysis"
80  - "Header analysis"
81  - "Content analysis"
82id: "d3363041-f38d-538c-8633-29d7d6f80ca7"
to-top