Detection rules › Sublime MQL

Brand impersonation: Binance

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

Impersonation of the cryptocurrency exchange Binance.

Threat classification

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

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

Event coverage

Rule body MQL

type.inbound
and (
  strings.ilike(sender.display_name, '*binance*')
  or strings.ilevenshtein(sender.display_name, 'binance') <= 1
  or strings.ilike(sender.email.domain.domain, '*binance*')
  or strings.ilike(subject.subject, '*binance*')
)
and sender.email.domain.root_domain not in~ (
  'binance.com',
  'binance.us',
  'trustwallet.com',
  'binance.charity'
)
and any(ml.nlu_classifier(body.current_thread.text).entities,
        .text == "Binance"
)
and any(ml.nlu_classifier(body.current_thread.text).entities,
        .name == "financial"
)
and (
  any(ml.nlu_classifier(body.current_thread.text).entities, .name == "urgency")
  or any(ml.nlu_classifier(body.current_thread.text).entities,
         .name == "request"
  )
)
and (
  any(ml.nlu_classifier(body.current_thread.text).entities,
      .text in~ ("withdrawal", "deposit")
  )
  or any(ml.nlu_classifier(body.current_thread.text).intents, .name != "benign")
)
and (
  // if this comes from a free email provider,
  // flag if org has never sent an email to sender's email before
  (
    sender.email.domain.root_domain in $free_email_providers
    and sender.email.email not in $recipient_emails
  )
  // if this comes from a custom domain,
  // flag if org has never sent an email to sender's domain before
  or (
    sender.email.domain.root_domain not in $free_email_providers
    and sender.email.domain.domain not in $recipient_domains
  )
)

Detection logic

Scope: inbound message.

Impersonation of the cryptocurrency exchange Binance.

  1. inbound message
  2. any of:
    • sender.display_name matches '*binance*'
    • sender.display_name is similar to 'binance'
    • sender.email.domain.domain matches '*binance*'
    • subject.subject matches '*binance*'
  3. sender.email.domain.root_domain not in ('binance.com', 'binance.us', 'trustwallet.com', 'binance.charity')
  4. any of ml.nlu_classifier(body.current_thread.text).entities where:
    • .text is 'Binance'
  5. any of ml.nlu_classifier(body.current_thread.text).entities where:
    • .name is 'financial'
  6. any of:
    • any of ml.nlu_classifier(body.current_thread.text).entities where:
      • .name is 'urgency'
    • any of ml.nlu_classifier(body.current_thread.text).entities where:
      • .name is 'request'
  7. any of:
    • any of ml.nlu_classifier(body.current_thread.text).entities where:
      • .text in ('withdrawal', 'deposit')
    • any of ml.nlu_classifier(body.current_thread.text).intents where:
      • .name is not 'benign'
  8. any of:
    • all of:
      • sender.email.domain.root_domain in $free_email_providers
      • sender.email.email not in $recipient_emails
    • all of:
      • sender.email.domain.root_domain not in $free_email_providers
      • sender.email.domain.domain not in $recipient_domains

Inspects: body.current_thread.text, sender.display_name, sender.email.domain.domain, sender.email.domain.root_domain, sender.email.email, subject.subject, type.inbound. Sensors: ml.nlu_classifier, strings.ilevenshtein, strings.ilike. Reference lists: $free_email_providers, $recipient_domains, $recipient_emails.

Indicators matched (12)

FieldMatchValue
strings.ilikesubstring*binance*
strings.ilevenshteinfuzzybinance
sender.email.domain.root_domainmemberbinance.com
sender.email.domain.root_domainmemberbinance.us
sender.email.domain.root_domainmembertrustwallet.com
sender.email.domain.root_domainmemberbinance.charity
ml.nlu_classifier(body.current_thread.text).entities[].textequalsBinance
ml.nlu_classifier(body.current_thread.text).entities[].nameequalsfinancial
ml.nlu_classifier(body.current_thread.text).entities[].nameequalsurgency
ml.nlu_classifier(body.current_thread.text).entities[].nameequalsrequest
ml.nlu_classifier(body.current_thread.text).entities[].textmemberwithdrawal
ml.nlu_classifier(body.current_thread.text).entities[].textmemberdeposit