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(beta.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          and length(attachments) ==1
 40          and all(attachments,
 41                  .file_type in $file_types_images
 42                  and .size > 2000
 43                  and any(file.explode(.),
 44                          regex.icontains(.scan.ocr.raw,
 45                            "storage.{0,50}full",
 46                            "free.{0,50}upgrade",
 47                            "storage.{0,50}details",
 48                            "storage.{0,50}quot",
 49                            "email.{0,50}storage",
 50                            "total.{0,50}storage"
 51          )
 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  )
 69  // netgate links to loopnet.com - a popular commerical property listing service
 70  and not (
 71      any(body.links, .href_url.domain.root_domain == "loopnet.com")
 72  )
 73  
 74  // negate legitimate sharepoint storage alerts
 75  and (
 76    (
 77      sender.email.email == "no-reply@sharepointonline.com"
 78      and not headers.auth_summary.dmarc.pass
 79      and (
 80        not all(body.links,
 81                .href_url.domain.root_domain in~ (
 82                  "sharepoint.com",
 83                  "microsoft.com",
 84                  "aka.ms"
 85                )
 86        )
 87      )
 88    )
 89    or sender.email.email != "no-reply@sharepointonline.com"
 90  )
 91
 92  // negate legitimate iCloud China storage alerts
 93  and (
 94    (
 95      sender.email.email == "noreply@icloud.com.cn"
 96      and not headers.auth_summary.dmarc.pass
 97      and (
 98        not all(body.links,
 99                .href_url.domain.root_domain in~ (
100                  "icloud.com",
101                  "aka.ms"
102                )
103        )
104      )
105    )
106    or sender.email.email != "noreply@icloud.com.cn"
107  )
108
109  // negate bouncebacks and undeliverables
110  and not any(attachments,
111              .content_type in (
112                "message/global-delivery-status",
113                "message/delivery-status",
114              )
115              or (
116                .content_type == "message/rfc822"
117                and any(file.parse_eml(.).attachments,
118                        .content_type in (
119                          "message/global-delivery-status",
120                          "message/delivery-status",
121                        )
122                )
123              )
124  )
125
126  // negate highly trusted sender domains unless they fail DMARC authentication
127  and (
128    (
129      sender.email.domain.root_domain in $high_trust_sender_root_domains
130      and not headers.auth_summary.dmarc.pass
131    )
132    or sender.email.domain.root_domain not in $high_trust_sender_root_domains
133  )
134  and (
135    not profile.by_sender().solicited
136    or profile.by_sender().any_messages_malicious_or_spam
137  )  
138attack_types:
139  - "Credential Phishing"
140tactics_and_techniques:
141  - "Social engineering"
142detection_methods:
143  - "Content analysis"
144  - "Sender analysis"
145
146id: "750f04d6-f68a-564c-9e41-c1e5a58df28f"
to-top