Detection rules › Sublime MQL

Job scam (unsolicited sender)

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

Detects job scam attempts by analyzing the message body text from an unsolicited sender.

Threat classification

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

CategoryValues
Attack typesBEC/Fraud
Tactics and techniquesSocial engineering

Event coverage

Rule body MQL

type.inbound
and (
  any(ml.nlu_classifier(body.current_thread.text).intents,
      .name in ("job_scam") and .confidence == "high"
  )
)
and (
  any(ml.nlu_classifier(body.current_thread.text).entities,
      .name == "financial"
  )
  or strings.icontains(body.current_thread.text, "salary package")
  or strings.icontains(body.current_thread.text, "kindly")
  or (
    (
      any(ml.nlu_classifier(body.current_thread.text).entities,
          .name in ("greeting", "salutation")
      )
      or sender.email.domain.root_domain in $free_email_providers
    )
    and (
      (
        length(recipients.to) == 0
        or length(recipients.bcc) > 0
        or (
          all(recipients.to, .email.domain.valid == false)
          and all(recipients.cc, .email.domain.valid == false)
        )
      )
    )
  )
)
// negating income / job verification senders
and not (
  sender.email.domain.root_domain in ('loandepot.com', 'sofi.com')
  and headers.auth_summary.dmarc.pass
)
and (
  not profile.by_sender().solicited
  or profile.by_sender().any_messages_malicious_or_spam
)
and not profile.by_sender().any_messages_benign

Detection logic

Scope: inbound message.

Detects job scam attempts by analyzing the message body text from an unsolicited sender.

  1. inbound message
  2. any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
    • .name in ('job_scam')
    • .confidence is 'high'
  3. any of:
    • any of ml.nlu_classifier(body.current_thread.text).entities where:
      • .name is 'financial'
    • body.current_thread.text contains 'salary package'
    • body.current_thread.text contains 'kindly'
    • all of:
      • any of:
        • any of ml.nlu_classifier(body.current_thread.text).entities where:
          • .name in ('greeting', 'salutation')
        • sender.email.domain.root_domain in $free_email_providers
      • any of:
        • length(recipients.to) is 0
        • length(recipients.bcc) > 0
        • all of:
          • all of recipients.to where:
            • .email.domain.valid is False
          • all of recipients.cc where:
            • .email.domain.valid is False
  4. not:
    • all of:
      • sender.email.domain.root_domain in ('loandepot.com', 'sofi.com')
      • headers.auth_summary.dmarc.pass
  5. any of:
    • not:
      • profile.by_sender().solicited
    • profile.by_sender().any_messages_malicious_or_spam
  6. not:
    • profile.by_sender().any_messages_benign

Inspects: body.current_thread.text, headers.auth_summary.dmarc.pass, recipients.bcc, recipients.cc, recipients.cc[].email.domain.valid, recipients.to, recipients.to[].email.domain.valid, sender.email.domain.root_domain, type.inbound. Sensors: ml.nlu_classifier, profile.by_sender, strings.icontains. Reference lists: $free_email_providers.

Indicators matched (9)

FieldMatchValue
ml.nlu_classifier(body.current_thread.text).intents[].namememberjob_scam
ml.nlu_classifier(body.current_thread.text).intents[].confidenceequalshigh
ml.nlu_classifier(body.current_thread.text).entities[].nameequalsfinancial
strings.icontainssubstringsalary package
strings.icontainssubstringkindly
ml.nlu_classifier(body.current_thread.text).entities[].namemembergreeting
ml.nlu_classifier(body.current_thread.text).entities[].namemembersalutation
sender.email.domain.root_domainmemberloandepot.com
sender.email.domain.root_domainmembersofi.com