Detection rules › Sublime MQL

Brand impersonation: DocSend

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

Attack impersonating DocSend.

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 (
  (
    sender.display_name =~ 'DocSend'
    or strings.ilevenshtein(sender.display_name, 'DocSend') <= 1
    or strings.icontains(sender.email.domain.domain, '*docsend*')
    or regex.icontains(body.current_thread.text, 'on Dropbox\s*(?:Doc)?\s*Send')
    or regex.icontains(body.current_thread.text,
                       'The Dropbox\s*(?:Doc)?\s*Send Team'
    )
    or regex.icontains(body.current_thread.text,
                       'Report to Dropbox\s*(?:Doc)?\s*Send'
    )
    or regex.icontains(body.current_thread.text,
                       '©\s*20[0-9]{2}\s*,\s*Dropbox DocSend'
    )
    or any(ml.nlu_classifier(body.current_thread.text).entities,
           .name in ("sender", "org")
           and strings.icontains(.text, 'Dropbox DocSend')
    )
  )
)
and not (
  sender.email.domain.root_domain in~ ('docsend.com')
  and coalesce(headers.auth_summary.dmarc.pass, false)
)
and not profile.by_sender_email().solicited

// negate highly trusted sender domains unless they fail DMARC authentication
and (
  (
    sender.email.domain.root_domain in $high_trust_sender_root_domains
    and not headers.auth_summary.dmarc.pass
  )
  or sender.email.domain.root_domain not in $high_trust_sender_root_domains
)

Detection logic

Scope: inbound message.

Attack impersonating DocSend.

  1. inbound message
  2. any of:
    • sender.display_name is 'DocSend'
    • sender.display_name is similar to 'DocSend'
    • sender.email.domain.domain contains '*docsend*'
    • body.current_thread.text matches 'on Dropbox\\s*(?:Doc)?\\s*Send'
    • body.current_thread.text matches 'The Dropbox\\s*(?:Doc)?\\s*Send Team'
    • body.current_thread.text matches 'Report to Dropbox\\s*(?:Doc)?\\s*Send'
    • body.current_thread.text matches '©\\s*20[0-9]{2}\\s*,\\s*Dropbox DocSend'
    • any of ml.nlu_classifier(body.current_thread.text).entities where all hold:
      • .name in ('sender', 'org')
      • .text contains 'Dropbox DocSend'
  3. not:
    • all of:
      • sender.email.domain.root_domain in ('docsend.com')
      • coalesce(headers.auth_summary.dmarc.pass)
  4. not:
    • profile.by_sender_email().solicited
  5. any of:
    • all of:
      • sender.email.domain.root_domain in $high_trust_sender_root_domains
      • not:
        • headers.auth_summary.dmarc.pass
    • sender.email.domain.root_domain not in $high_trust_sender_root_domains

Inspects: body.current_thread.text, headers.auth_summary.dmarc.pass, sender.display_name, sender.email.domain.domain, sender.email.domain.root_domain, type.inbound. Sensors: ml.nlu_classifier, profile.by_sender_email, regex.icontains, strings.icontains, strings.ilevenshtein. Reference lists: $high_trust_sender_root_domains.

Indicators matched (11)

FieldMatchValue
sender.display_nameequalsDocSend
strings.ilevenshteinfuzzyDocSend
strings.icontainssubstring*docsend*
regex.icontainsregexon Dropbox\s*(?:Doc)?\s*Send
regex.icontainsregexThe Dropbox\s*(?:Doc)?\s*Send Team
regex.icontainsregexReport to Dropbox\s*(?:Doc)?\s*Send
regex.icontainsregex©\s*20[0-9]{2}\s*,\s*Dropbox DocSend
ml.nlu_classifier(body.current_thread.text).entities[].namemembersender
ml.nlu_classifier(body.current_thread.text).entities[].namememberorg
strings.icontainssubstringDropbox DocSend
sender.email.domain.root_domainmemberdocsend.com