Credential phishing: Fake storage alerts (unsolicited)
This rule targets credential phishing attempts disguised as storage space alerts, activating for inbound emails with specific storage-related keywords and evaluating sender trustworthiness and history.
Sublime rule (View on GitHub)
1name: "Credential phishing: Fake storage alerts (unsolicited)"
2description: "This rule targets credential phishing attempts disguised as storage space alerts, activating for inbound emails with specific storage-related keywords and evaluating sender trustworthiness and history."
3type: "rule"
4severity: "medium"
5source: |
6 type.inbound
7 and (
8 (
9 0 < length(body.links) < 8
10 and any([subject.subject, sender.display_name],
11 regex.icontains(., "storage|mailbox")
12 )
13 )
14 or (
15 any(file.explode(file.message_screenshot()),
16 any(ml.nlu_classifier(.scan.ocr.raw).intents,
17 .name == "cred_theft" and .confidence == "high"
18 )
19 and regex.icontains(.scan.ocr.raw,
20 "storage.{0,50}full",
21 "free.{0,50}upgrade",
22 "storage.{0,50}details",
23 "storage.{0,50}quot",
24 "email.{0,50}storage",
25 "total.{0,50}storage"
26 )
27 and not strings.ilike(.scan.ocr.raw, "*free plan*")
28 )
29 )
30 or (
31 any(body.links,
32 // fingerprints of a hyperlinked image
33 .display_text is null
34 and .display_url.url is null
35 and (
36 .href_url.domain.root_domain in $free_file_hosts
37 or .href_url.domain.root_domain == "beehiiv.com"
38 )
39 )
40 and length(attachments) == 1
41 and all(attachments,
42 .file_type in $file_types_images
43 and .size > 2000
44 and any(file.explode(.),
45 regex.icontains(.scan.ocr.raw,
46 "storage.{0,50}full",
47 "free.{0,50}upgrade",
48 "storage.{0,50}details",
49 "storage.{0,50}quot",
50 "email.{0,50}storage",
51 "total.{0,50}storage"
52 )
53 )
54 )
55 )
56 )
57 and (
58 regex.icontains(subject.subject, '\bfull\b')
59 or strings.icontains(subject.subject, "exceeded")
60 or strings.icontains(subject.subject, "out of")
61 or strings.icontains(subject.subject, "icloud")
62 or regex.icontains(subject.subject, '\blimit(?:ed|\b)')
63 or strings.icontains(subject.subject, "all storage used")
64 or strings.icontains(subject.subject, "compliance")
65 or strings.icontains(subject.subject, "max storage")
66 or strings.icontains(subject.subject, "storage space")
67 or strings.icontains(subject.subject, "be deleted")
68 or strings.icontains(subject.subject, "action required")
69 or strings.icontains(subject.subject, "review storage")
70 )
71
72 // negate customer service requests about storage
73 and not any(ml.nlu_classifier(body.current_thread.text).topics,
74 .name == "Customer Service and Support" and .confidence == "high"
75 )
76
77 // negate links to loopnet.com - a popular commerical property listing service
78 and not (any(body.links, .href_url.domain.root_domain == "loopnet.com"))
79
80 // negate legitimate sharepoint storage alerts
81 and (
82 (
83 sender.email.email == "no-reply@sharepointonline.com"
84 and not headers.auth_summary.dmarc.pass
85 and (
86 not all(body.links,
87 .href_url.domain.root_domain in~ (
88 "sharepoint.com",
89 "microsoft.com",
90 "aka.ms"
91 )
92 )
93 )
94 )
95 or sender.email.email != "no-reply@sharepointonline.com"
96 )
97
98 // negate legitimate iCloud China storage alerts
99 and (
100 (
101 sender.email.email == "noreply@icloud.com.cn"
102 and not headers.auth_summary.dmarc.pass
103 and (
104 not all(body.links,
105 .href_url.domain.root_domain in~ ("icloud.com", "aka.ms")
106 )
107 )
108 )
109 or sender.email.email != "noreply@icloud.com.cn"
110 )
111
112 // negate bouncebacks and undeliverables
113 and not any(attachments,
114 .content_type in (
115 "message/global-delivery-status",
116 "message/delivery-status",
117 )
118 or (
119 .content_type == "message/rfc822"
120 and any(file.parse_eml(.).attachments,
121 .content_type in (
122 "message/global-delivery-status",
123 "message/delivery-status",
124 )
125 )
126 )
127 )
128
129 // negate highly trusted sender domains unless they fail DMARC authentication
130 and (
131 (
132 sender.email.domain.root_domain in $high_trust_sender_root_domains
133 and not headers.auth_summary.dmarc.pass
134 )
135 or sender.email.domain.root_domain not in $high_trust_sender_root_domains
136 )
137 and (
138 not profile.by_sender().solicited
139 or profile.by_sender().any_messages_malicious_or_spam
140 )
141 // negate instances where proofpoint sends a review of a reported message via analyzer
142 and not (
143 sender.email.email == "analyzer@analyzer.securityeducation.com"
144 and any(headers.domains, .root_domain == "pphosted.com")
145 and headers.auth_summary.spf.pass
146 and headers.auth_summary.dmarc.pass
147 )
148attack_types:
149 - "Credential Phishing"
150tactics_and_techniques:
151 - "Social engineering"
152detection_methods:
153 - "Content analysis"
154 - "Sender analysis"
155
156id: "750f04d6-f68a-564c-9e41-c1e5a58df28f"