Detection rules › Sublime MQL

Business Email Compromise (BEC) attempt with masked recipients and reply-to mismatch (unsolicited)

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

This rule detects unsolicited messages where the recipient matches the sender address and no other recipients are identified. The reply-to address does not match the sender, and is a freemail with no links in the body. This a common combination of techniques used by low level BEC threats.

Threat classification

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

CategoryValues
Attack typesBEC/Fraud
Tactics and techniquesEvasion, Free email provider

Event coverage

Rule body MQL

type.inbound
and any(recipients.to, .email.email == sender.email.email)
and length(recipients.cc) == 0
and length(recipients.bcc) == 0
and length(body.links) == 0
and any(headers.reply_to,
        .email.domain.domain in $free_email_providers
        and not .email.domain.domain == sender.email.domain.domain
)
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.

This rule detects unsolicited messages where the recipient matches the sender address and no other recipients are identified. The reply-to address does not match the sender, and is a freemail with no links in the body. This a common combination of techniques used by low level BEC threats.

  1. inbound message
  2. any of recipients.to where:
    • .email.email is sender.email.email
  3. length(recipients.cc) is 0
  4. length(recipients.bcc) is 0
  5. length(body.links) is 0
  6. any of headers.reply_to where all hold:
    • .email.domain.domain in $free_email_providers
    • not:
      • .email.domain.domain is sender.email.domain.domain
  7. any of:
    • not:
      • profile.by_sender().solicited
    • all of:
      • profile.by_sender().any_messages_malicious_or_spam
      • not:
        • profile.by_sender().any_messages_benign

Inspects: body.links, headers.reply_to, headers.reply_to[].email.domain.domain, recipients.bcc, recipients.cc, recipients.to, recipients.to[].email.email, sender.email.domain.domain, sender.email.email, type.inbound. Sensors: profile.by_sender. Reference lists: $free_email_providers.