Credential phishing language and suspicious indicators (unknown sender)
Message contains various suspicious indicators as well as engaging language resembling credential theft from an unknown sender.
Sublime rule (View on GitHub)
1name: "Credential phishing language and suspicious indicators (unknown sender)"
2description: |
3 Message contains various suspicious indicators as well as engaging language resembling credential theft from an unknown sender.
4type: "rule"
5severity: "medium"
6source: |
7 type.inbound
8 and (
9 any(ml.nlu_classifier(body.current_thread.text).intents,
10 .name == "cred_theft" and .confidence in ("medium", "high")
11 )
12 // embedded in an image attachment
13 // note: don't use message_screenshot()
14 // because it's not limited to current_thread and may FP
15 or any(attachments,
16 .file_type in $file_types_images
17 and any(file.explode(.),
18 any(ml.nlu_classifier(.scan.ocr.raw).intents,
19 .name == "cred_theft" and .confidence == "high"
20 )
21 )
22 )
23 )
24 and 4 of (
25 // impersonation of the recipient's domain or email address
26 // in the subject to make it look more personalized
27 any(recipients.to,
28 (
29 strings.icontains(subject.subject, .email.local_part)
30 or strings.icontains(subject.subject, .email.domain.sld)
31 )
32 and (.email.domain.valid or strings.icontains(.display_name, "undisclosed"))
33 ),
34 // recipient's email address in the body. this is not very uncommon
35 // for legit credential themed messages either
36 any(recipients.to,
37 (.email.domain.valid or strings.icontains(.display_name, "undisclosed"))
38 and strings.icontains(body.current_thread.text, .email.email)
39 ),
40 (
41 // freemail providers should never be sending this type of email
42 sender.email.domain.domain in $free_email_providers
43
44 // if not freemail, it's suspicious if the sender's root domain
45 // doesn't match any links in the body
46 or (
47 length(body.links) > 0
48 and all(body.links,
49 .href_url.domain.root_domain != sender.email.domain.root_domain
50 )
51 )
52 ),
53 strings.contains(body.current_thread.text,
54 "Your mailbox can no longer send or receive messages."
55 ),
56 // link redirects to a suspicious TLD
57 any(body.links,
58 any(ml.link_analysis(., mode="aggressive").redirect_history, .domain.tld in $suspicious_tlds)
59 ),
60 (
61 // suspicious redirects
62 // 3 or more different domains with 2 or more different TLDs
63 // careful because click trackers will always make this at least 2
64 // different domains and not unlikely 2 or more TLDs
65 any(body.links,
66 length(distinct(map(ml.link_analysis(., mode="aggressive").redirect_history,
67 .domain.tld
68 )
69 )
70 ) >= 2
71 and length(distinct(map(ml.link_analysis(., mode="aggressive").redirect_history,
72 .domain.domain
73 )
74 )
75 ) >= 3
76 )
77 ),
78 // maybe: any brand logo with high confidence
79 // maybe: recipients BCCd or undisclosed
80 )
81 and (
82 (
83 profile.by_sender().prevalence in ("new", "outlier")
84 and not profile.by_sender().solicited
85 )
86 or (
87 profile.by_sender().any_messages_malicious_or_spam
88 and not profile.by_sender().any_false_positives
89 )
90 )
91
92 // negating Google Calendar invites
93 and (
94 (
95 (
96 length(attachments) > 0
97 and not all(attachments,
98 .content_type in ("text/calendar", "application/ics")
99 )
100 )
101 and not (
102 any(distinct(headers.hops, .authentication_results.dmarc is null),
103 strings.ilike(.authentication_results.dmarc, "*pass")
104 and strings.ilike(.authentication_results.spf_details.designator,
105 "*calendar-server.bounces.google.com"
106 )
107 )
108 )
109 )
110 or length(attachments) == 0
111 )
112
113 // negate highly trusted sender domains unless they fail DMARC authentication
114 and (
115 (
116 sender.email.domain.root_domain in $high_trust_sender_root_domains
117 and not headers.auth_summary.dmarc.pass
118 )
119 or sender.email.domain.root_domain not in $high_trust_sender_root_domains
120 )
121attack_types:
122 - "Credential Phishing"
123tactics_and_techniques:
124 - "Free email provider"
125 - "Social engineering"
126detection_methods:
127 - "Content analysis"
128 - "Header analysis"
129 - "Natural Language Understanding"
130 - "Sender analysis"
131 - "URL analysis"
132id: "89c186f7-8c8d-55db-8b6f-da6ead587b1d"