Detection rules › Sublime MQL

Sublime MQL rules: abused

Service abuse: Payoneer callback scam

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

A fraudulent invoice/receipt found in the body of the message sent by leveraging Payoneer's invoicing service. Callback Phishing is an attempt by an attacker to solicit the victim (recipient) to call a phone number. The resulting interaction could lead to a multitude of attacks ranging from Financial theft, Remote Access Trojan (RAT) Installation or Ransomware Deployment.

Threat classification

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

CategoryValues
Attack typesCallback Phishing, BEC/Fraud
Tactics and techniquesEvasion, Social engineering

Telemetry coverage

PlatformRecord / event type
SublimeInbound email message

Message attributes

  • body
  • body.current_thread
  • body.html
  • sender.email
  • type

Rule body

type.inbound
and length(attachments) == 0
and sender.email.domain.root_domain in ("payoneer.com")
and (
  (
    // icontains a phone number
    (
      regex.icontains(strings.replace_confusables(body.current_thread.text),
                      '.*\+?([ilo0-9]{1}.)?\(?[ilo0-9]{3}?\)?.[ilo0-9]{3}.?[ilo0-9]{4}.*\n'
      )
      or regex.icontains(strings.replace_confusables(body.current_thread.text),
                         '.*\+[ilo0-9]{1,3}[ilo0-9]{10}.*\n'
      )
      // +12028001238
      or regex.icontains(strings.replace_confusables(body.current_thread.text),
                         '.*[ilo0-9]{3}\.[ilo0-9]{3}\.[ilo0-9]{4}.*\n'
      )
      // 202-800-1238
      or regex.icontains(strings.replace_confusables(body.current_thread.text),
                         '.*[ilo0-9]{3}-[ilo0-9]{3}-[ilo0-9]{4}.*\n'
      )
      // (202) 800-1238
      or regex.icontains(strings.replace_confusables(body.current_thread.text),
                         '.*\([ilo0-9]{3}\)[\s-]+[ilo0-9]{3}[\s-]+[ilo0-9]{4}.*\n'
      )
      // (202)-800-1238
      or regex.icontains(strings.replace_confusables(body.current_thread.text),
                         '.*\([ilo0-9]{3}\)-[ilo0-9]{3}-[ilo0-9]{4}.*\n'
      )
      or ( // 8123456789
        regex.icontains(strings.replace_confusables(body.current_thread.text),
                        '.*8[ilo0-9]{9}.*\n'
        )
        and regex.icontains(strings.replace_confusables(body.current_thread.text
                            ),
                            '\+[1l]'
        )
      )
    )
    and (
      (
        // list of keywords taken from
        // https://github.com/sublime-security/sublime-rules/blob/main/detection-rules/paypal_invoice_abuse.yml
        4 of (
          strings.ilike(body.html.inner_text, '*you did not*'),
          strings.ilike(body.html.inner_text, '*is not for*'),
          strings.ilike(body.html.inner_text, '*done by you*'),
          regex.icontains(body.html.inner_text, "didn\'t ma[kd]e this"),
          strings.ilike(body.html.inner_text, "*Fruad Alert*"),
          strings.ilike(body.html.inner_text, "*Fraud Alert*"),
          strings.ilike(body.html.inner_text, '*using your PayPal*'),
          strings.ilike(body.html.inner_text, '*subscription*'),
          strings.ilike(body.html.inner_text, '*antivirus*'),
          strings.ilike(body.html.inner_text, '*order*'),
          strings.ilike(body.html.inner_text, '*support*'),
          strings.ilike(body.html.inner_text, '*receipt*'),
          strings.ilike(body.html.inner_text, '*invoice*'),
          strings.ilike(body.html.inner_text, '*Purchase*'),
          strings.ilike(body.html.inner_text, '*transaction*'),
          strings.ilike(body.html.inner_text, '*Market*Value*'),
          strings.ilike(body.html.inner_text, '*BTC*'),
          strings.ilike(body.html.inner_text, '*call*'),
          strings.ilike(body.html.inner_text, '*get in touch with our*'),
          strings.ilike(body.html.inner_text, '*quickly inform*'),
          strings.ilike(body.html.inner_text, '*quickly reach *'),
          strings.ilike(body.html.inner_text, '*detected unusual transactions*'),
          strings.ilike(body.html.inner_text, '*cancel*'),
          strings.ilike(body.html.inner_text, '*renew*'),
          strings.ilike(body.html.inner_text, '*refund*'),
          strings.ilike(body.html.inner_text, '*+1*'),
          regex.icontains(body.html.inner_text, 'help.{0,3}desk'),
        )
      )
    )
  )
  or (
    // Unicode confusables words obfuscated in note
    regex.icontains(body.html.inner_text,
                    '\+𝟭|𝗽𝗮𝘆𝗺𝗲𝗻𝘁|𝗛𝗲𝗹𝗽 𝗗𝗲𝘀𝗸|𝗿𝗲𝗳𝘂𝗻𝗱|𝗮𝗻𝘁𝗶𝘃𝗶𝗿𝘂𝘀|𝗰𝗮𝗹𝗹|𝗰𝗮𝗻𝗰𝗲𝗹'
    )
  )
  or strings.ilike(body.html.inner_text, '*kindly*')
)

Detection logic

Scope: inbound message.

A fraudulent invoice/receipt found in the body of the message sent by leveraging Payoneer's invoicing service. Callback Phishing is an attempt by an attacker to solicit the victim (recipient) to call a phone number. The resulting interaction could lead to a multitude of attacks ranging from Financial theft, Remote Access Trojan (RAT) Installation or Ransomware Deployment.

  1. inbound message
  2. length(attachments) is 0
  3. sender.email.domain.root_domain in ('payoneer.com')
  4. any of:
    • all of:
      • any of:
        • strings.replace_confusables(body.current_thread.text) matches '.*\\+?([ilo0-9]{1}.)?\\(?[ilo0-9]{3}?\\)?.[ilo0-9]{3}.?[ilo0-9]{4}.*\\n'
        • strings.replace_confusables(body.current_thread.text) matches '.*\\+[ilo0-9]{1,3}[ilo0-9]{10}.*\\n'
        • strings.replace_confusables(body.current_thread.text) matches '.*[ilo0-9]{3}\\.[ilo0-9]{3}\\.[ilo0-9]{4}.*\\n'
        • strings.replace_confusables(body.current_thread.text) matches '.*[ilo0-9]{3}-[ilo0-9]{3}-[ilo0-9]{4}.*\\n'
        • strings.replace_confusables(body.current_thread.text) matches '.*\\([ilo0-9]{3}\\)[\\s-]+[ilo0-9]{3}[\\s-]+[ilo0-9]{4}.*\\n'
        • strings.replace_confusables(body.current_thread.text) matches '.*\\([ilo0-9]{3}\\)-[ilo0-9]{3}-[ilo0-9]{4}.*\\n'
        • all of:
          • strings.replace_confusables(body.current_thread.text) matches '.*8[ilo0-9]{9}.*\\n'
          • strings.replace_confusables(body.current_thread.text) matches '\\+[1l]'
      • at least 4 of 27: body.html.inner_text matches any of 27 patterns
        • *you did not*
        • *is not for*
        • *done by you*
        • didn\'t ma[kd]e this
        • *Fruad Alert*
        • *Fraud Alert*
        • *using your PayPal*
        • *subscription*
        • *antivirus*
        • *order*
        • *support*
        • *receipt*
        • *invoice*
        • *Purchase*
        • *transaction*
        • *Market*Value*
        • *BTC*
        • *call*
        • *get in touch with our*
        • *quickly inform*
        • *quickly reach *
        • *detected unusual transactions*
        • *cancel*
        • *renew*
        • *refund*
        • *+1*
        • help.{0,3}desk
    • body.html.inner_text matches '\\+𝟭|𝗽𝗮𝘆𝗺𝗲𝗻𝘁|𝗛𝗲𝗹𝗽 𝗗𝗲𝘀𝗸|𝗿𝗲𝗳𝘂𝗻𝗱|𝗮𝗻𝘁𝗶𝘃𝗶𝗿𝘂𝘀|𝗰𝗮𝗹𝗹|𝗰𝗮𝗻𝗰𝗲𝗹'
    • body.html.inner_text matches '*kindly*'

Inspects: body.current_thread.text, body.html.inner_text, sender.email.domain.root_domain, type.inbound. Sensors: regex.icontains, strings.ilike, strings.replace_confusables.

Indicators matched (38)

FieldMatchValue
sender.email.domain.root_domainmemberpayoneer.com
regex.icontainsregex.*\+?([ilo0-9]{1}.)?\(?[ilo0-9]{3}?\)?.[ilo0-9]{3}.?[ilo0-9]{4}.*\n
regex.icontainsregex.*\+[ilo0-9]{1,3}[ilo0-9]{10}.*\n
regex.icontainsregex.*[ilo0-9]{3}\.[ilo0-9]{3}\.[ilo0-9]{4}.*\n
regex.icontainsregex.*[ilo0-9]{3}-[ilo0-9]{3}-[ilo0-9]{4}.*\n
regex.icontainsregex.*\([ilo0-9]{3}\)[\s-]+[ilo0-9]{3}[\s-]+[ilo0-9]{4}.*\n
regex.icontainsregex.*\([ilo0-9]{3}\)-[ilo0-9]{3}-[ilo0-9]{4}.*\n
regex.icontainsregex.*8[ilo0-9]{9}.*\n
regex.icontainsregex\+[1l]
strings.ilikesubstring*you did not*
strings.ilikesubstring*is not for*
strings.ilikesubstring*done by you*
26 more
regex.icontainsregexdidn\'t ma[kd]e this
strings.ilikesubstring*Fruad Alert*
strings.ilikesubstring*Fraud Alert*
strings.ilikesubstring*using your PayPal*
strings.ilikesubstring*subscription*
strings.ilikesubstring*antivirus*
strings.ilikesubstring*order*
strings.ilikesubstring*support*
strings.ilikesubstring*receipt*
strings.ilikesubstring*invoice*
strings.ilikesubstring*Purchase*
strings.ilikesubstring*transaction*
strings.ilikesubstring*Market*Value*
strings.ilikesubstring*BTC*
strings.ilikesubstring*call*
strings.ilikesubstring*get in touch with our*
strings.ilikesubstring*quickly inform*
strings.ilikesubstring*quickly reach *
strings.ilikesubstring*detected unusual transactions*
strings.ilikesubstring*cancel*
strings.ilikesubstring*renew*
strings.ilikesubstring*refund*
strings.ilikesubstring*+1*
regex.icontainsregexhelp.{0,3}desk
regex.icontainsregex\+𝟭|𝗽𝗮𝘆𝗺𝗲𝗻𝘁|𝗛𝗲𝗹𝗽 𝗗𝗲𝘀𝗸|𝗿𝗲𝗳𝘂𝗻𝗱|𝗮𝗻𝘁𝗶𝘃𝗶𝗿𝘂𝘀|𝗰𝗮𝗹𝗹|𝗰𝗮𝗻𝗰𝗲𝗹
strings.ilikesubstring*kindly*

Stages and Predicates

Stage 1: mql_rule

and
  or
    and
      or
        and
          strings.replace_confusables(body.current_thread.text) regex_match ".*8[ilo0-9]{9}.*\\n"
          strings.replace_confusables(body.current_thread.text) regex_match "\\+[1l]"
        strings.replace_confusables(body.current_thread.text) regex_match ".*[ilo0-9]{3}-[ilo0-9]{3}-[ilo0-9]{4}.*\\n"
        strings.replace_confusables(body.current_thread.text) regex_match ".*[ilo0-9]{3}\\.[ilo0-9]{3}\\.[ilo0-9]{4}.*\\n"
        strings.replace_confusables(body.current_thread.text) regex_match ".*\\([ilo0-9]{3}\\)-[ilo0-9]{3}-[ilo0-9]{4}.*\\n"
        strings.replace_confusables(body.current_thread.text) regex_match ".*\\([ilo0-9]{3}\\)[\\s-]+[ilo0-9]{3}[\\s-]+[ilo0-9]{4}.*\\n"
        strings.replace_confusables(body.current_thread.text) regex_match ".*\\+?([ilo0-9]{1}.)?\\(?[ilo0-9]{3}?\\)?.[ilo0-9]{3}.?[ilo0-9]{4}.*\\n"
        strings.replace_confusables(body.current_thread.text) regex_match ".*\\+[ilo0-9]{1,3}[ilo0-9]{10}.*\\n"
      or
        body.html.inner_text match "+1"
        body.html.inner_text match "BTC"
        body.html.inner_text match "Fraud Alert"
        body.html.inner_text match "Fruad Alert"
        body.html.inner_text match "Purchase"
        body.html.inner_text match "antivirus"
        body.html.inner_text match "call"
        body.html.inner_text match "cancel"
        body.html.inner_text match "detected unusual transactions"
        body.html.inner_text match "done by you"
        body.html.inner_text match "get in touch with our"
        body.html.inner_text match "invoice"
        body.html.inner_text match "is not for"
        body.html.inner_text match "order"
        body.html.inner_text match "quickly inform"
        body.html.inner_text match "quickly reach "
        body.html.inner_text match "receipt"
        body.html.inner_text match "refund"
        body.html.inner_text match "renew"
        body.html.inner_text match "subscription"
        body.html.inner_text match "support"
        body.html.inner_text match "transaction"
        body.html.inner_text match "using your PayPal"
        body.html.inner_text match "you did not"
        body.html.inner_text regex_match "didn\\'t ma[kd]e this"
        body.html.inner_text regex_match "help.{0,3}desk"
        body.html.inner_text wildcard "*Market*Value*"
    body.html.inner_text match "kindly"
    body.html.inner_text regex_match "\\+𝟭|𝗽𝗮𝘆𝗺𝗲𝗻𝘁|𝗛𝗲𝗹𝗽 𝗗𝗲𝘀𝗸|𝗿𝗲𝗳𝘂𝗻𝗱|𝗮𝗻𝘁𝗶𝘃𝗶𝗿𝘂𝘀|𝗰𝗮𝗹𝗹|𝗰𝗮𝗻𝗰𝗲𝗹"
  attachments length_compare "0"
  sender.email.domain.root_domain eq "payoneer.com"
  type.inbound eq "true"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
body.html.inner_textregex_match
    • +𝟭
    • 𝗽𝗮𝘆𝗺𝗲𝗻𝘁
    • 𝗛𝗲𝗹𝗽 𝗗𝗲𝘀𝗸
    • 𝗿𝗲𝗳𝘂𝗻𝗱
    • 𝗮𝗻𝘁𝗶𝘃𝗶𝗿𝘂𝘀
    • 𝗰𝗮𝗹𝗹
    • 𝗰𝗮𝗻𝗰𝗲𝗹
  • didn\'t ma[kd]e this
  • help.{0,3}desk
field:"body.html.inner_text" kind:regex_match
body.html.inner_textwildcard
  • *+1*
  • *BTC*
  • *Fraud Alert*
  • *Fruad Alert*
  • *Market*Value*
  • *Purchase*
  • *antivirus*
  • *call*
  • *cancel*
  • *detected unusual transactions*
  • *done by you*
  • *get in touch with our*
  • *invoice*
  • *is not for*
  • *kindly*
  • *order*
  • *quickly inform*
  • *quickly reach *
  • *receipt*
  • *refund*
  • *renew*
  • *subscription*
  • *support*
  • *transaction*
  • *using your PayPal*
  • *you did not*
field:"body.html.inner_text" kind:wildcard
sender.email.domain.root_domainin
  • payoneer.com
field:"sender.email.domain.root_domain" kind:in value:"payoneer.com"
strings.replace_confusables(body.current_thread.text)regex_match
  • .*8[ilo0-9]{9}.*\n
  • .*[ilo0-9]{3}-[ilo0-9]{3}-[ilo0-9]{4}.*\n
  • .*[ilo0-9]{3}.[ilo0-9]{3}.[ilo0-9]{4}.*\n
  • .*([ilo0-9]{3})-[ilo0-9]{3}-[ilo0-9]{4}.*\n
  • .*([ilo0-9]{3})[\s-]+[ilo0-9]{3}[\s-]+[ilo0-9]{4}.*\n
  • .*+?([ilo0-9]{1}.)?(?[ilo0-9]{3}?)?.[ilo0-9]{3}.?[ilo0-9]{4}.*\n
  • .*+[ilo0-9]{1,3}[ilo0-9]{10}.*\n
  • +[1l]
field:"strings.replace_confusables(body.current_thread.text)" kind:regex_match
type.inboundeq
  • true transforms: boolean
field:"type.inbound" kind:eq value:"true"