Credential phishing: Suspicious subject with urgent financial request and link
This rule inspects messages where the subject is suspicious with less than 5 links and a relatively short body. Natural Language Understanding is being used to identify the inclusion of a financial, request, urgency and org entity from an unsolicited sender.
Sublime rule (View on GitHub)
1name: "Credential phishing: Suspicious subject with urgent financial request and link"
2description: "This rule inspects messages where the subject is suspicious with less than 5 links and a relatively short body. Natural Language Understanding is being used to identify the inclusion of a financial, request, urgency and org entity from an unsolicited sender."
3type: "rule"
4severity: "medium"
5source: |
6 type.inbound
7 and (
8 0 < length(filter(body.links,
9 not strings.ilike(.display_text,
10 "*privacy*",
11 "*terms of service*",
12 "Learn why this is important"
13 )
14 or .display_text is null
15 )
16 ) < 5
17 )
18
19 // negate webinar registrations
20 and not any(body.links,
21 .display_text =~ "REGISTER NOW"
22 and .href_url.domain.root_domain == "secureclick.net"
23 )
24
25 // not all links are unsubscribe links
26 and not all(body.links,
27 (
28 strings.icontains(.display_text, "unsubscribe")
29 and strings.icontains(.href_url.path, "unsubscribe")
30 )
31 or (
32 strings.icontains(.display_text, "deactivate")
33 and strings.icontains(.href_url.path, "DeactivateAccount")
34 )
35 )
36
37 // ignore emails in body
38 and not all(body.links, .href_url.domain.domain in $free_email_providers)
39 and length(body.current_thread.text) < 2000
40 and length(subject.subject) < 100
41
42 // and suspicious subject
43 and regex.icontains(subject.subject,
44 // https://github.com/sublime-security/static-files/blob/master/suspicious_subjects_regex.txt
45 "termination.*notice",
46 "38417",
47 ":completed",
48 "[il1]{2}mit.*ma[il1]{2} ?bo?x",
49 "[il][il][il]egai[ -]",
50 "[li][li][li]ega[li] attempt",
51 "[ng]-?[io]n .*block",
52 "[ng]-?[io]n .*cancel",
53 "[ng]-?[io]n .*deactiv",
54 "[ng]-?[io]n .*disabl",
55 "action.*required",
56 "abandon.*package",
57 "about.your.account",
58 "acc(ou)?n?t (is )?on ho[li]d",
59 "acc(ou)?n?t.*terminat",
60 "acc(oun)?t.*[il1]{2}mitation",
61 "access.*limitation",
62 "account (will be )?block",
63 "account.*de-?activat",
64 "account.*locked",
65 "account.*re-verification",
66 "account.*security",
67 "account.*suspension",
68 "account.has.been",
69 "account.has.expired",
70 "account.will.be.blocked",
71 "account v[il]o[li]at",
72 "activity.*acc(oun)?t",
73 "almost.full",
74 "app[li]e.[il]d",
75 "authenticate.*account",
76 "been.*suspend",
77 "clos.*of.*account.*processed",
78 "confirm.your.account",
79 "courier.*able",
80 "crediential.*notif",
81 "deactivation.*in.*progress",
82 "delivery.*attempt.*failed",
83 "document.received",
84 "documented.*shared.*with.*you",
85 "dropbox.*document",
86 "e-?ma[il1]+ .{010}suspen",
87 "e-?ma[il1]{1} user",
88 "e-?ma[il1]{2} acc",
89 "e-?ma[il1]{2}.*up.?grade",
90 "e.?ma[il1]{2}.*server",
91 "e.?ma[il1]{2}.*suspend",
92 "email.update",
93 "faxed you",
94 "fraud(ulent)?.*charge",
95 "from.helpdesk",
96 "fu[il1]{2}.*ma[il1]+[ -]?box",
97 "has.been.*suspended",
98 "has.been.limited",
99 "have.locked",
100 "he[li]p ?desk upgrade",
101 "heipdesk",
102 "i[il]iega[il]",
103 "ii[il]ega[il]",
104 "incoming e?mail",
105 "incoming.*fax",
106 "lock.*security",
107 "ma[il1]{1}[ -]?box.*quo",
108 "ma[il1]{2}[ -]?box.*fu[il1]",
109 "ma[il1]{2}box.*[il1]{2}mit",
110 "ma[il1]{2}box stor",
111 "mail on.?hold",
112 "mail.*box.*migration",
113 "mail.*de-?activat",
114 "mail.update.required",
115 "mails.*pending",
116 "messages.*pending",
117 "missed.*shipping.*notification",
118 "missed.shipment.notification",
119 "must.update.your.account",
120 "new [sl][io]g?[nig][ -]?in from",
121 "new voice ?-?mail",
122 "notifications.*pending",
123 "office.*3.*6.*5.*suspend",
124 "office365",
125 "on google docs with you",
126 "online doc",
127 "password.*compromised",
128 "periodic maintenance",
129 "potential(ly)? unauthorized",
130 "refund not approved",
131 "revised.*policy",
132 "scam",
133 "scanned.?invoice",
134 "secured?.update",
135 "security breach",
136 "securlty",
137 "signed.*delivery",
138 "status of your .{314}? ?delivery",
139 "susp[il1]+c[il1]+ous.*act[il1]+v[il1]+ty",
140 "suspicious.*sign.*[io]n",
141 "suspicious.activit",
142 "temporar(il)?y deactivate",
143 "temporar[il1]{2}y disab[li]ed",
144 "temporarily.*lock",
145 "un-?usua[li].activity",
146 "unable.*deliver",
147 "unauthorized.*activit",
148 "unauthorized.device",
149 "unauthorized.sign.?in",
150 "unrecognized.*activit",
151 "unrecognized.sign.?in",
152 "unrecognized.*activit",
153 "undelivered message",
154 "unread.*doc",
155 "unusual.activity",
156 "upgrade.*account",
157 "upgrade.notice",
158 "urgent message",
159 "urgent.verification",
160 "v[il1]o[li1]at[il1]on security",
161 "va[il1]{1}date.*ma[il1]{2}[ -]?box",
162 "verification ?-?require",
163 "verification( )?-?need",
164 "verify.your?.account",
165 "web ?-?ma[il1]{2}",
166 "web[ -]?ma[il1]{2}",
167 "will.be.suspended",
168 "your (customer )?account .as",
169 "your.office.365",
170 "your.online.access",
171
172 // https://github.com/sublime-security/static-files/blob/master/suspicious_subjects.txt
173 "account has been limited",
174 "action required",
175 "almost full",
176 "apd notifi cation",
177 "are you at your desk",
178 "are you available",
179 "attached file to docusign",
180 "banking is temporarily unavailable",
181 "bankofamerica",
182 "closing statement invoice",
183 "completed: docusign",
184 "de-activation of",
185 "delivery attempt",
186 "delivery stopped for shipment",
187 "detected suspicious",
188 "detected suspicious actvity",
189 "docu sign",
190 "document for you",
191 "document has been sent to you via docusign",
192 "document is ready for signature",
193 "docusign",
194 "encrypted message",
195 "failed delivery",
196 "fedex tracking",
197 "file was shared",
198 "freefax",
199 "fwd: due invoice paid",
200 "has shared",
201 "inbox is full",
202 "invitation to comment",
203 "invitation to edit",
204 "invoice due",
205 "left you a message",
206 "message from",
207 "new message",
208 "new voicemail",
209 "on desk",
210 "out of space",
211 "password reset",
212 "payment status",
213 "quick reply",
214 "re: w-2",
215 "required",
216 "required: completed docusign",
217 "ringcentral",
218 "scanned image",
219 "secured files",
220 "secured pdf",
221 "security alert",
222 "new sign-in",
223 "new sign in",
224 "sign-in attempt",
225 "sign in attempt",
226 "staff review",
227 "suspicious activity",
228 "unrecognized login attempt",
229 "upgrade immediately",
230 "urgent",
231 "wants to share",
232 '\bw2\b',
233 "you have notifications pending",
234 "your account",
235 "your amazon order",
236 "your document settlement",
237 "your order with amazon",
238 "your password has been compromised",
239
240 // cryptocurrency related subjects
241 '\d{1,2}.\d{1,8}\s(BTC|ETH|SOL|(?:USD[CT])|XRP) Offer Waiting for(\sYour)?\sReview',
242 )
243
244 // language attempting to engage
245 and any(ml.nlu_classifier(body.current_thread.text).entities,
246 .name == "request"
247 )
248
249 // financial request
250 and any(ml.nlu_classifier(body.current_thread.text).entities,
251 .name == "financial"
252 )
253
254 // urgency request
255 and any(ml.nlu_classifier(body.current_thread.text).entities,
256 .name == "urgency"
257 )
258
259 // org presence
260 and any(ml.nlu_classifier(body.current_thread.text).entities, .name == "org")
261
262 // not a reply
263 and (
264 not strings.istarts_with(subject.subject, "re:")
265 and not any(headers.hops, any(.fields, strings.ilike(.name, "In-Reply-To")))
266 )
267
268 // the message is unsolicited and no false positives
269 and (
270 not profile.by_sender().solicited
271 or profile.by_sender().any_messages_malicious_or_spam
272 )
273 and not profile.by_sender().any_messages_benign
274
275 // negate highly trusted sender domains unless they fail DMARC authentication
276 and (
277 (
278 sender.email.domain.root_domain in $high_trust_sender_root_domains
279 and not headers.auth_summary.dmarc.pass
280 )
281 or sender.email.domain.root_domain not in $high_trust_sender_root_domains
282 )
283
284 // negation the only link is the senders email
285 and not (
286 regex.contains(body.current_thread.text,
287 "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
288 )
289 and (
290 all(body.links, .href_url.domain.root_domain == sender.email.domain.domain)
291 )
292 )
293
294attack_types:
295 - "Credential Phishing"
296tactics_and_techniques:
297 - "Impersonation: Brand"
298 - "Social engineering"
299detection_methods:
300 - "Content analysis"
301 - "Header analysis"
302 - "Natural Language Understanding"
303 - "Sender analysis"
304id: "056464f4-7a16-5f07-ab86-912e0a64ecae"