Fake email quarantine notification

Detects phishing messages implying that emails have been delayed or blocked, prompting users to view, release, or delete pending messages.

Sublime rule (View on GitHub)

  1name: "Fake email quarantine notification"
  2description: "Detects phishing messages implying that emails have been delayed or blocked, prompting users to view, release, or delete pending messages."
  3type: "rule"
  4severity: "high"
  5source: |
  6  type.inbound
  7  and length(body.links) < 10
  8  and (
  9    any(ml.nlu_classifier(body.current_thread.text).intents,
 10        .name == "cred_theft" and .confidence == "high"
 11    )
 12    or (
 13      length(body.current_thread.text) < 250
 14      and any(recipients.to,
 15              strings.icontains(body.current_thread.text, .email.domain.sld)
 16              or strings.icontains(body.current_thread.text, .email.local_part)
 17      )
 18    )
 19  )
 20  and not (
 21    length(ml.nlu_classifier(body.current_thread.text).topics) == 1
 22    and any(ml.nlu_classifier(body.current_thread.text).topics,
 23            .name == "Financial Communications" and .confidence != "low"
 24    )
 25  )
 26  and 3 of (
 27    strings.ilike(body.current_thread.text, "*review*"),
 28    strings.ilike(body.current_thread.text, "*incoming*"),
 29    strings.ilike(body.current_thread.text, "*release*"),
 30    strings.ilike(body.current_thread.text, "*quarantine*"),
 31    strings.ilike(body.current_thread.text, "*messages*"),
 32    strings.ilike(body.current_thread.text, "*server error*"),
 33    strings.ilike(body.current_thread.text, "*blocked*"),
 34    strings.ilike(body.current_thread.text, "*prevented*"),
 35    strings.ilike(body.current_thread.text, "*validation*"),
 36    strings.ilike(body.current_thread.text, "*notification*"),
 37    strings.ilike(body.current_thread.text, "*kindly*"),
 38    strings.ilike(body.current_thread.text, "*held*"),
 39    strings.ilike(body.current_thread.text, "*pending*"),
 40    strings.ilike(body.current_thread.text, "*stuck*"),
 41    strings.like(body.current_thread.text, "* MX *"),
 42    regex.icontains(body.current_thread.text, '(?:message|mail)s? on.?hold'),
 43    regex.icontains(body.current_thread.text,
 44                    'mail.?account.?(?:suspen|protect|violat)',
 45                    'account (?:suspen|protect|violat).{1,50}(?:e?.?mail)'
 46    )
 47  )
 48  and (
 49    any(body.links,
 50        regex.icontains(.display_text,
 51                        "view",
 52                        "release",
 53                        "message",
 54                        "delete",
 55                        "recover",
 56                        "SSO",
 57                        "sign in",
 58                        "resolve issue"
 59        )
 60    )
 61    or (
 62      length(body.links) < 3
 63      and any(body.links,
 64              any(recipients.to,
 65                  .email.domain.root_domain == ..display_url.domain.root_domain
 66                  and ..mismatched
 67              )
 68      )
 69    )
 70  )
 71  and not any(body.links,
 72              regex.icontains(.display_text,
 73                              "view document",
 74                              "review (&|and) sign document"
 75              )
 76  )
 77  and sender.email.domain.root_domain not in (
 78    "bing.com",
 79    "microsoft.com",
 80    "microsoftonline.com",
 81    "microsoftsupport.com",
 82    "microsoft365.com",
 83    "office.com",
 84    "office365.com",
 85    "onedrive.com",
 86    "sharepointonline.com",
 87    "yammer.com",
 88    "ppops.net"
 89  )
 90  
 91  // negate org domains unless they fail DMARC authentication
 92  and (
 93    (
 94      sender.email.domain.root_domain in $org_domains
 95      and (
 96        not headers.auth_summary.dmarc.pass
 97        // MS quarantine digest emails from an org domain are router "internally" to MS, therefore, there is no authentication information
 98        or not (
 99          headers.auth_summary.dmarc.pass is null
100          and all(headers.domains,
101                  .root_domain in (
102                    "outlook.com",
103                    "office365.com",
104                    "exchangelabs.com"
105                  )
106          )
107          // typical emails from freemail Outlook accounts are from prod.outlook.com
108          and strings.ends_with(headers.message_id, "protection.outlook.com>")
109        )
110      )
111    )
112    or sender.email.domain.root_domain not in $org_domains
113  )
114  
115  // negate highly trusted sender domains unless they fail DMARC authentication
116  and (
117    (
118      sender.email.domain.root_domain in $high_trust_sender_root_domains
119      and not headers.auth_summary.dmarc.pass
120    )
121    or sender.email.domain.root_domain not in $high_trust_sender_root_domains
122  )
123  and not profile.by_sender().solicited
124  and not profile.by_sender().any_messages_benign  
125attack_types:
126  - "Credential Phishing"
127tactics_and_techniques:
128  - "Social engineering"
129detection_methods:
130  - "Content analysis"
131  - "Natural Language Understanding"
132  - "Sender analysis"
133id: "73f26a3d-b7a5-5b85-83e6-45f1b40f78fb"
to-top