Detection rules › Sublime MQL

Impersonation: Salesforce fake campaign failure notification

Severity
medium
Type
rule
Source
github.com/sublime-security/sublime-rules

Detects messages impersonating Salesforce with urgent language about failed or cancelled campaigns, containing external links from first-time senders outside legitimate Salesforce domains.

Threat classification

Sublime's own taxonomy (not MITRE ATT&CK).

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesImpersonation: Brand, Social engineering

Event coverage

Rule body MQL

type.inbound
and strings.icontains(sender.display_name, "salesforce")
and sender.email.domain.root_domain not in (
  "salesforce.com",
  "force.com",
  "site.com",
  "agentforce.com"
)
and length(attachments) == 0
// theare are external links (not org or SF domains)
and length(filter(body.links,
                  .href_url.domain.domain not in $org_domains
                  and .href_url.domain.root_domain not in (
                    "salesforce.com",
                    "force.com",
                    "site.com" // salesforce CRM 
                  )
           )
) > 0
and length(body.current_thread.text) <= 600
and strings.contains(body.current_thread.text, 'campaign')
and any(ml.nlu_classifier(body.current_thread.text).entities,
        .name == "urgency" and regex.icontains(.text, "(failed|cancelled)")
)
and any(ml.nlu_classifier(body.current_thread.text).entities,
        .name == "request"
)

Detection logic

Scope: inbound message.

Detects messages impersonating Salesforce with urgent language about failed or cancelled campaigns, containing external links from first-time senders outside legitimate Salesforce domains.

  1. inbound message
  2. sender.display_name contains 'salesforce'
  3. sender.email.domain.root_domain not in ('salesforce.com', 'force.com', 'site.com', 'agentforce.com')
  4. length(attachments) is 0
  5. length(filter(body.links, .href_url.domain.domain not in $org_domains and .href_url.domain.root_domain not in ('salesforce.com', 'force.com', 'site.com'))) > 0
  6. length(body.current_thread.text) ≤ 600
  7. body.current_thread.text contains 'campaign'
  8. any of ml.nlu_classifier(body.current_thread.text).entities where all hold:
    • .name is 'urgency'
    • .text matches '(failed|cancelled)'
  9. any of ml.nlu_classifier(body.current_thread.text).entities where:
    • .name is 'request'

Inspects: body.current_thread.text, body.links, body.links[].href_url.domain.domain, body.links[].href_url.domain.root_domain, sender.display_name, sender.email.domain.root_domain, type.inbound. Sensors: ml.nlu_classifier, regex.icontains, strings.contains, strings.icontains. Reference lists: $org_domains.

Indicators matched (12)

FieldMatchValue
strings.icontainssubstringsalesforce
sender.email.domain.root_domainmembersalesforce.com
sender.email.domain.root_domainmemberforce.com
sender.email.domain.root_domainmembersite.com
sender.email.domain.root_domainmemberagentforce.com
body.links[].href_url.domain.root_domainmembersalesforce.com
body.links[].href_url.domain.root_domainmemberforce.com
body.links[].href_url.domain.root_domainmembersite.com
strings.containssubstringcampaign
ml.nlu_classifier(body.current_thread.text).entities[].nameequalsurgency
regex.icontainsregex(failed|cancelled)
ml.nlu_classifier(body.current_thread.text).entities[].nameequalsrequest