Credential phishing: Engaging language and other indicators (untrusted sender)
Message contains various suspicious indicators as well as engaging language resembling credential theft from an untrusted sender.
Sublime rule (View on GitHub)
1name: "Credential phishing: Engaging language and other indicators (untrusted sender)"
2description: |
3 Message contains various suspicious indicators as well as engaging language resembling credential theft from an untrusted sender.
4type: "rule"
5severity: "medium"
6source: |
7 type.inbound
8 and (
9 regex.icontains(subject.subject,
10 "termination.*notice",
11 "38417",
12 ":completed",
13 "[il1]{2}mit.*ma[il1]{2} ?bo?x",
14 "[il][il][il]egai[ -]",
15 "[li][li][li]ega[li] attempt",
16 "[ng]-?[io]n .*block",
17 "[ng]-?[io]n .*cancel",
18 "[ng]-?[io]n .*deactiv",
19 "[ng]-?[io]n .*disabl",
20 "action.*required",
21 "abandon.*package",
22 "about.your.account",
23 "acc(ou)?n?t (is )?on ho[li]d",
24 "acc(ou)?n?t.*terminat",
25 "acc(oun)?t.*[il1]{2}mitation",
26 "access.*limitation",
27 "account (will be )?block",
28 "account.*de-?activat",
29 "account.*locked",
30 "account.*re-verification",
31 "account.*security",
32 "account.*suspension",
33 "account.has.been",
34 "account.has.expired",
35 "account.will.be.blocked",
36 "account v[il]o[li]at",
37 "activity.*acc(oun)?t",
38 "almost.full",
39 "app[li]e.[il]d",
40 "authenticate.*account",
41 "been.*suspend",
42 "clos.*of.*account.*processed",
43 "confirm.your.account",
44 "courier.*able",
45 "deactivation.*in.*progress",
46 "delivery.*attempt.*failed",
47 "document.received",
48 "documented.*shared.*with.*you",
49 "dropbox.*document",
50 "e-?ma[il1]+ .{010}suspen",
51 "e-?ma[il1]{1} user",
52 "e-?ma[il1]{2} acc",
53 "e-?ma[il1]{2}.*up.?grade",
54 "e.?ma[il1]{2}.*server",
55 "e.?ma[il1]{2}.*suspend",
56 "email.update",
57 "faxed you",
58 "fraud(ulent)?.*charge",
59 "from.helpdesk",
60 "fu[il1]{2}.*ma[il1]+[ -]?box",
61 "has.been.*suspended",
62 "has.been.limited",
63 "have.locked",
64 "he[li]p ?desk upgrade",
65 "heipdesk",
66 "i[il]iega[il]",
67 "ii[il]ega[il]",
68 "incoming e?mail",
69 "incoming.*fax",
70 "lock.*security",
71 "ma[il1]{1}[ -]?box.*quo",
72 "ma[il1]{2}[ -]?box.*fu[il1]",
73 "ma[il1]{2}box.*[il1]{2}mit",
74 "ma[il1]{2}box stor",
75 "mail on.?hold",
76 "mail.*box.*migration",
77 "mail.*de-?activat",
78 "mail.update.required",
79 "mails.*pending",
80 "messages.*pending",
81 "missed.*shipping.*notification",
82 "missed.shipment.notification",
83 "must.update.your.account",
84 "new [sl][io]g?[nig][ -]?in from",
85 "new voice ?-?mail",
86 "notifications.*pending",
87 "office.*3.*6.*5.*suspend",
88 "office365",
89 "on google docs with you",
90 "online doc",
91 "password.*compromised",
92 "periodic maintenance",
93 "potential(ly)? unauthorized",
94 "refund not approved",
95 "report",
96 "revised.*policy",
97 "scam",
98 "scanned.?invoice",
99 "secured?.update",
100 "security breach",
101 "securlty",
102 "signed.*delivery",
103 "status of your .{314}? ?delivery",
104 "susp[il1]+c[il1]+ous.*act[il1]+v[il1]+ty",
105 "suspicious.*sign.*[io]n",
106 "suspicious.activit",
107 "temporar(il)?y deactivate",
108 "temporar[il1]{2}y disab[li]ed",
109 "temporarily.*lock",
110 "un-?usua[li].activity",
111 "unable.*deliver",
112 "unauthorized.*activit",
113 "unauthorized.device",
114 "undelivered message",
115 "unread.*doc",
116 "unusual.activity",
117 "upgrade.*account",
118 "upgrade.notice",
119 "urgent message",
120 "urgent.verification",
121 "v[il1]o[li1]at[il1]on security",
122 "va[il1]{1}date.*ma[il1]{2}[ -]?box",
123 "verification ?-?require",
124 "verification( )?-?need",
125 "verify.your?.account",
126 "web ?-?ma[il1]{2}",
127 "web[ -]?ma[il1]{2}",
128 "will.be.suspended",
129 "your (customer )?account .as",
130 "your.office.365",
131 "your.online.access",
132 "de.activation",
133 // https://github.com/sublime-security/static-files/blob/master/suspicious_subjects.txt
134 "account has been limited",
135 "action required",
136 "almost full",
137 "apd notifi cation",
138 "are you at your desk",
139 "are you available",
140 "attached file to docusign",
141 "banking is temporarily unavailable",
142 "bankofamerica",
143 "closing statement invoice",
144 "completed: docusign",
145 "de-activation of",
146 "delivery attempt",
147 "delivery stopped for shipment",
148 "detected suspicious",
149 "detected suspicious actvity",
150 "docu sign",
151 "document for you",
152 "document has been sent to you via docusign",
153 "document is ready for signature",
154 "docusign",
155 "encrypted message",
156 "failed delivery",
157 "fedex tracking",
158 "file was shared",
159 "freefax",
160 "fwd: due invoice paid",
161 "has shared",
162 "inbox is full",
163 "invitation to comment",
164 "invitation to edit",
165 "invoice due",
166 "left you a message",
167 "message from",
168 "new message",
169 "new voicemail",
170 "on desk",
171 "out of space",
172 "password reset",
173 "payment status",
174 "pay notification",
175 "quick reply",
176 "re: w-2",
177 "required",
178 "required: completed docusign",
179 "remittance",
180 "ringcentral",
181 "scanned image",
182 "secured files",
183 "secured pdf",
184 "security alert",
185 "new sign-in",
186 "new sign in",
187 "sign-in attempt",
188 "sign in attempt",
189 "staff review",
190 "suspicious activity",
191 "unrecognized login attempt",
192 "unusual signin",
193 "upgrade immediately",
194 "urgent",
195 "wants to share",
196 "w2",
197 "you have notifications pending",
198 "your account",
199 "your amazon order",
200 "your document settlement",
201 "your order with amazon",
202 "your password has been compromised",
203 )
204 or regex.icontains(sender.display_name,
205 "Admin",
206 "Administrator",
207 "Alert",
208 "Assistant",
209 "Billing",
210 "Benefits",
211 "Bonus",
212 "CEO",
213 "CFO",
214 "CIO",
215 "CTO",
216 "Chairman",
217 "Claim",
218 "Confirm",
219 "Cpanel Mail",
220 "Critical",
221 "Customer Service",
222 "Deal",
223 "Discount",
224 "Director",
225 "Exclusive",
226 "Executive",
227 "Fax",
228 "Free",
229 "Gift",
230 "HR",
231 "Helpdesk",
232 "Human Resources",
233 "Immediate",
234 "Important",
235 "Info",
236 "Information",
237 "Invoice",
238 '\bIT\b',
239 '\bLegal\b',
240 "Lottery",
241 "Management",
242 "Manager",
243 "Member Services",
244 "Notification",
245 "Offer",
246 "Operations",
247 "Order",
248 "Partner",
249 "Payment",
250 "Payroll",
251 "Postmaster",
252 "President",
253 "Premium",
254 "Prize",
255 "Receipt",
256 "Refund",
257 "Registrar",
258 "Required",
259 "Reward",
260 "Sales",
261 "Secretary",
262 "Security",
263 "Service",
264 "Storage",
265 "Support",
266 "Sweepstakes",
267 "System",
268 "Tax",
269 "Tech Support",
270 "Update",
271 "Upgrade",
272 "Urgent",
273 "Validate",
274 "Verify",
275 "VIP",
276 "Webmaster",
277 "Winner",
278 )
279 )
280 and (
281 4 of (
282 any(recipients.to,
283 .email.domain.valid
284 and strings.icontains(body.current_thread.text, .email.email)
285 ),
286 any(ml.nlu_classifier(body.current_thread.text).intents,
287 .name == "cred_theft" and .confidence in ("medium", "high")
288 ),
289 any(ml.nlu_classifier(body.current_thread.text).entities,
290 .name == "request"
291 ),
292 (
293 // freemail providers should never be sending this type of email
294 sender.email.domain.domain in $free_email_providers
295
296 // if not freemail, it's suspicious if the sender's root domain
297 // doesn't match any links in the body
298 or all(body.links,
299 .href_url.domain.root_domain != sender.email.domain.root_domain
300 and .href_url.domain.root_domain not in $org_domains
301 )
302 ),
303 // in case it's embedded in an image attachment
304 // note: don't use message_screenshot() because it's not limited to current_thread
305 // and may FP
306 any(attachments,
307 .file_type in $file_types_images
308 and any(file.explode(.),
309 any(ml.nlu_classifier(.scan.ocr.raw).intents,
310 .name == "cred_theft" and .confidence == "high"
311 )
312 )
313 ),
314 strings.contains(body.current_thread.text,
315 "Your mailbox can no longer send or receive messages."
316 ),
317 any(body.links,
318 strings.icontains(.href_url.query_params, 'redirect')
319 or any(.href_url.rewrite.encoders,
320 strings.icontains(., "open_redirect")
321 )
322 ),
323 // multiple entities displaying urgency
324 length(filter(ml.nlu_classifier(body.current_thread.text).entities,
325 .name == "urgency"
326 )
327 ) >= 3
328 // and any body links
329 and any(body.links,
330 // display text contains a request
331 any(ml.nlu_classifier(.display_text).entities, .name == "request")
332 )
333 )
334 or (
335 (
336 // recipient's email address is in the body
337 any(recipients.to,
338 strings.icontains(body.current_thread.text, .email.email)
339 )
340 // suspicious display text
341 or (
342 length(body.links) == 1
343 and all(body.links, strings.ilike(.display_text, "*click here*"))
344 )
345 )
346 // link leads to a suspicious TLD or contains an IP address
347 and any(body.links,
348 (
349 ml.link_analysis(., mode="aggressive").effective_url.domain.tld in $suspicious_tlds
350 or (
351 any(body.ips,
352 any(body.links, strings.icontains(.href_url.url, ..ip))
353 )
354 )
355 )
356 )
357 )
358 )
359 // exclude Google shared calendar messages
360 // Subject: "<sender name> has shared a calendar with you"
361 and headers.return_path.domain.domain != "calendar-server.bounces.google.com"
362 // negate calendar invites
363 and not (
364 0 < length(attachments) < 3
365 and all(attachments, .content_type in ("text/calendar", "application/ics"))
366 )
367 // bounce-back negations
368 and not (
369 strings.like(sender.email.local_part,
370 "*postmaster*",
371 "*mailer-daemon*",
372 "*administrator*"
373 )
374 and any(attachments,
375 .content_type in (
376 "message/rfc822",
377 "message/delivery-status",
378 "text/calendar"
379 )
380 )
381 )
382 and (
383 (
384 profile.by_sender().prevalence in ("new", "outlier")
385 and not profile.by_sender().solicited
386 )
387 or (
388 profile.by_sender().any_messages_malicious_or_spam
389 and not profile.by_sender().any_false_positives
390 )
391 )
392 // negate highly trusted sender domains unless they fail DMARC authentication
393 and (
394 (
395 sender.email.domain.root_domain in $high_trust_sender_root_domains
396 and not headers.auth_summary.dmarc.pass
397 )
398 or sender.email.domain.root_domain not in $high_trust_sender_root_domains
399 )
400attack_types:
401 - "Credential Phishing"
402tactics_and_techniques:
403 - "Free email provider"
404 - "Social engineering"
405detection_methods:
406 - "Content analysis"
407 - "Header analysis"
408 - "Natural Language Understanding"
409 - "Sender analysis"
410 - "URL analysis"
411id: "c2bc8ca2-d207-5c7d-96e4-a0d3d33b2af5"