EXPLORE
← Back to Explore
sublimelowRule

BEC/Fraud: Scam lure with freemail pivot

This message detects BEC/Fraud lures attempting to solicit the victim to pivot out of band via a freemail address in the body.

Detection Query

type.inbound

// body is short
and length(body.current_thread.text) < 800

// one recipient
and length(recipients.to) == 1

// all recipients are the sender
and all(recipients.to,
        .email.email == sender.email.email
        and (
          .email.domain.valid or strings.icontains(.display_name, "undisclosed")
        )
)

// not an org domain
and all(recipients.to,
        .email.domain.root_domain not in $org_domains
        and (
          .email.domain.valid or strings.icontains(.display_name, "undisclosed")
        )
)

// one link
and length(body.links) == 1

// links don't match sender
and all(body.links,
        .href_url.domain.root_domain != sender.email.domain.root_domain
)

// scam indicators
and regex.icontains(body.current_thread.text,
                    '((?:Mr|Mrs|Ms|Miss|Dr|Prof|Sir|Lady|Rev)\.?[ \t]+)|(sir|madam|kindly)|(dringend|eingefordert|anspruch)'
)

// body contains an email address to a freemail provider
and (
  regex.contains(body.current_thread.text,
                 "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
  )
  and any($free_email_providers, strings.icontains(body.current_thread.text, .))
)

// new and unsolicited and no malicious or FP's
and (
  (
    profile.by_sender().prevalence in ("new", "outlier")
    and not profile.by_sender().solicited
  )
  or (
    profile.by_sender().any_messages_malicious_or_spam
    and not profile.by_sender().any_messages_benign
  )
)
and not profile.by_sender().any_messages_benign

Data Sources

Email MessagesEmail HeadersEmail Attachments

Platforms

email
Raw Content
name: "BEC/Fraud: Scam lure with freemail pivot"
description: "This message detects BEC/Fraud lures attempting to solicit the victim to pivot out of band via a freemail address in the body."
type: "rule"
severity: "low"
source: |
  type.inbound
  
  // body is short
  and length(body.current_thread.text) < 800
  
  // one recipient
  and length(recipients.to) == 1
  
  // all recipients are the sender
  and all(recipients.to,
          .email.email == sender.email.email
          and (
            .email.domain.valid or strings.icontains(.display_name, "undisclosed")
          )
  )
  
  // not an org domain
  and all(recipients.to,
          .email.domain.root_domain not in $org_domains
          and (
            .email.domain.valid or strings.icontains(.display_name, "undisclosed")
          )
  )
  
  // one link
  and length(body.links) == 1
  
  // links don't match sender
  and all(body.links,
          .href_url.domain.root_domain != sender.email.domain.root_domain
  )
  
  // scam indicators
  and regex.icontains(body.current_thread.text,
                      '((?:Mr|Mrs|Ms|Miss|Dr|Prof|Sir|Lady|Rev)\.?[ \t]+)|(sir|madam|kindly)|(dringend|eingefordert|anspruch)'
  )
  
  // body contains an email address to a freemail provider
  and (
    regex.contains(body.current_thread.text,
                   "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
    )
    and any($free_email_providers, strings.icontains(body.current_thread.text, .))
  )
  
  // new and unsolicited and no malicious or FP's
  and (
    (
      profile.by_sender().prevalence in ("new", "outlier")
      and not profile.by_sender().solicited
    )
    or (
      profile.by_sender().any_messages_malicious_or_spam
      and not profile.by_sender().any_messages_benign
    )
  )
  and not profile.by_sender().any_messages_benign
attack_types:
  - "BEC/Fraud"
tactics_and_techniques:
  - "Free email provider"
  - "Out of band pivot"
detection_methods:
  - "Content analysis"
  - "Header analysis"
  - "Sender analysis"
id: "898c769f-45a4-5561-8d51-be765addcf1d"