Detection rules › Sublime MQL

Brand impersonation: Adobe with suspicious language and link

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

Email contains an Adobe logo, at least one link, and suspicious link language from a new sender.

Threat classification

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

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

Event coverage

Rule body MQL

type.inbound
// All attachments are images or 0 attachments
and (
  (
    length(attachments) > 0
    and all(attachments, .file_type in $file_types_images)
  )
  or length(attachments) == 0
)
and length(body.links) > 0
and (
  any(ml.logo_detect(file.message_screenshot()).brands,
      .name == "Adobe" and .confidence in ("high")
  )
  or (
    strings.icontains(body.current_thread.text, "adobe")
    and not strings.icontains(body.current_thread.text, "adobe marketplace")
    and not strings.icontains(body.current_thread.text, "adobe analytics")
    and (
      // Leverage topic analysis to pick up on themes
      (
        length(ml.nlu_classifier(body.current_thread.text).topics) == 1
        and all(ml.nlu_classifier(body.current_thread.text).topics,
                .name == "File Sharing and Cloud Services"
                and .confidence != "low"
        )
      )
      // Key phrases if topic anlayis doesn't match
      or strings.icontains(body.current_thread.text, 'review the document')
      or strings.icontains(body.current_thread.text, 'access file')
      or strings.icontains(body.current_thread.text, 'pending document')
      or any(body.links, strings.ilike(.display_text, 'review and sign'))
      or any(body.links, strings.ilike(.display_text, 'open document'))
    )
    and length(body.current_thread.text) < 2000
  )
)
and (
  (
    //
    // This rule makes use of a beta feature and is subject to change without notice
    // using the beta feature in custom rules is not suggested until it has been formally released
    //
    strings.ilike(beta.ocr(file.message_screenshot()).text,
                  "*review*",
                  "*sign*",
                  "*view*",
                  "open",
                  "*completed document*",
                  "*open agreement*",
                  "*open document*"
    )
    and not strings.ilike(beta.ocr(file.message_screenshot()).text,
                          "*view this email*",
                          "*view*browser*",
                          "*view online*",
                          "*business review*"
    )
  )
  or any(body.links,
         strings.ilike(.display_text,
                       "*review*",
                       "*sign*",
                       "*view*",
                       "open",
                       "*completed document*",
                       "*open agreement*",
                       "*open document*",
                       "*continue*"
         )
         and not strings.ilike(.display_text,
                               "*view this email*",
                               "*view*browser*",
                               "*view online*"
         )
  )
)
// Negate replies & forwards
and (
  (
    (length(headers.references) > 0 or headers.in_reply_to is null)
    and not (
      (
        strings.istarts_with(subject.subject, "RE:")
        or strings.istarts_with(subject.subject, "RES:")
        or strings.istarts_with(subject.subject, "R:")
        or strings.istarts_with(subject.subject, "ODG:")
        or strings.istarts_with(subject.subject, "答复:")
        or strings.istarts_with(subject.subject, "AW:")
        or strings.istarts_with(subject.subject, "TR:")
        or strings.istarts_with(subject.subject, "FWD:")
        or regex.imatch(subject.subject,
                        '^\[?/{0,2}(EXT|EXTERNAL)\]?/{0,2}[: ]\s*(RE|FWD?|FW|AW|TR|ODG|答复):.*'
        )
      )
    )
  )
  or length(headers.references) == 0
)
// Negate certain common topics
and not any(ml.nlu_classifier(body.current_thread.text).topics,
            .name in (
              "Advertising and Promotions",
              "Events and Webinars",
              "Professional and Career Development",
              "Newsletters and Digests"
            )
            and .confidence != "low"
)
and (
  (
    headers.auth_summary.spf.pass
    and headers.auth_summary.dmarc.pass
    and (
      not profile.by_sender().solicited
      or profile.by_sender().any_messages_malicious_or_spam
      or profile.by_sender_email().days_since.last_contact > 14
    )
    and not profile.by_sender().any_messages_benign
    // Negate affiliates, sub-products & legitimate domains
    and not sender.email.domain.root_domain in (
      "adobe-events.com",
      "frame.io",
      "nudgesecurity.io",
      "adobesignsandbox.com",
      "magento.com",
      "workfront.com"
    )
    // Continued
    and not any(headers.domains, .root_domain == "zohomail.com")
    and not strings.iends_with(headers.message_id, 'omniture.com>')
  )
  or not headers.auth_summary.spf.pass
  or headers.auth_summary.spf.pass is null
  or not headers.auth_summary.dmarc.pass
  or headers.auth_summary.dmarc.pass is null
)
// 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.

Email contains an Adobe logo, at least one link, and suspicious link language from a new sender.

  1. inbound message
  2. any of:
    • all of:
      • length(attachments) > 0
      • all of attachments where:
        • .file_type in $file_types_images
    • length(attachments) is 0
  3. length(body.links) > 0
  4. any of:
    • any of ml.logo_detect(file.message_screenshot()).brands where all hold:
      • .name is 'Adobe'
      • .confidence in ('high')
    • all of:
      • body.current_thread.text contains 'adobe'
      • not:
        • body.current_thread.text contains 'adobe marketplace'
      • not:
        • body.current_thread.text contains 'adobe analytics'
      • any of:
        • all of:
          • length(ml.nlu_classifier(body.current_thread.text).topics) is 1
          • all of ml.nlu_classifier(body.current_thread.text).topics where all hold:
            • .name is 'File Sharing and Cloud Services'
            • .confidence is not 'low'
        • body.current_thread.text contains 'review the document'
        • body.current_thread.text contains 'access file'
        • body.current_thread.text contains 'pending document'
        • any of body.links where:
          • .display_text matches 'review and sign'
        • any of body.links where:
          • .display_text matches 'open document'
      • length(body.current_thread.text) < 2000
  5. any of:
    • all of:
      • beta.ocr(file.message_screenshot()).text matches any of 7 patterns
        • *review*
        • *sign*
        • *view*
        • open
        • *completed document*
        • *open agreement*
        • *open document*
      • not:
        • beta.ocr(file.message_screenshot()).text matches any of 4 patterns
          • *view this email*
          • *view*browser*
          • *view online*
          • *business review*
    • any of body.links where all hold:
      • .display_text matches any of 8 patterns
        • *review*
        • *sign*
        • *view*
        • open
        • *completed document*
        • *open agreement*
        • *open document*
        • *continue*
      • not:
        • .display_text matches any of 3 patterns
          • *view this email*
          • *view*browser*
          • *view online*
  6. any of:
    • all of:
      • any of:
        • length(headers.references) > 0
        • headers.in_reply_to is missing
      • none of:
        • subject.subject starts with 'RE:'
        • subject.subject starts with 'RES:'
        • subject.subject starts with 'R:'
        • subject.subject starts with 'ODG:'
        • subject.subject starts with '答复:'
        • subject.subject starts with 'AW:'
        • subject.subject starts with 'TR:'
        • subject.subject starts with 'FWD:'
        • subject.subject matches '^\\[?/{0,2}(EXT|EXTERNAL)\\]?/{0,2}[: ]\\s*(RE|FWD?|FW|AW|TR|ODG|答复):.*'
    • length(headers.references) is 0
  7. not:
    • any of ml.nlu_classifier(body.current_thread.text).topics where all hold:
      • .name in ('Advertising and Promotions', 'Events and Webinars', 'Professional and Career Development', 'Newsletters and Digests')
      • .confidence is not 'low'
  8. any of:
    • all of:
      • headers.auth_summary.spf.pass
      • headers.auth_summary.dmarc.pass
      • any of:
        • not:
          • profile.by_sender().solicited
        • profile.by_sender().any_messages_malicious_or_spam
        • profile.by_sender_email().days_since.last_contact > 14
      • not:
        • profile.by_sender().any_messages_benign
      • not:
        • sender.email.domain.root_domain in ('adobe-events.com', 'frame.io', 'nudgesecurity.io', 'adobesignsandbox.com', 'magento.com', 'workfront.com')
      • not:
        • any of headers.domains where:
          • .root_domain is 'zohomail.com'
      • not:
        • headers.message_id ends with 'omniture.com>'
    • not:
      • headers.auth_summary.spf.pass
    • headers.auth_summary.spf.pass is missing
    • not:
      • headers.auth_summary.dmarc.pass
    • headers.auth_summary.dmarc.pass is missing
  9. 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: attachments[].file_type, body.current_thread.text, body.links, body.links[].display_text, headers.auth_summary.dmarc.pass, headers.auth_summary.spf.pass, headers.domains, headers.domains[].root_domain, headers.in_reply_to, headers.message_id, headers.references, sender.email.domain.root_domain, subject.subject, type.inbound. Sensors: beta.ocr, file.message_screenshot, ml.logo_detect, ml.nlu_classifier, profile.by_sender, profile.by_sender_email, regex.imatch, strings.icontains, strings.iends_with, strings.ilike, strings.istarts_with. Reference lists: $file_types_images, $high_trust_sender_root_domains.

Indicators matched (44)

FieldMatchValue
ml.logo_detect(file.message_screenshot()).brands[].nameequalsAdobe
ml.logo_detect(file.message_screenshot()).brands[].confidencememberhigh
strings.icontainssubstringadobe
strings.icontainssubstringadobe marketplace
strings.icontainssubstringadobe analytics
ml.nlu_classifier(body.current_thread.text).topics[].nameequalsFile Sharing and Cloud Services
strings.icontainssubstringreview the document
strings.icontainssubstringaccess file
strings.icontainssubstringpending document
strings.ilikesubstringreview and sign
strings.ilikesubstringopen document
strings.ilikesubstring*review*
32 more
strings.ilikesubstring*sign*
strings.ilikesubstring*view*
strings.ilikesubstringopen
strings.ilikesubstring*completed document*
strings.ilikesubstring*open agreement*
strings.ilikesubstring*open document*
strings.ilikesubstring*view this email*
strings.ilikesubstring*view*browser*
strings.ilikesubstring*view online*
strings.ilikesubstring*business review*
strings.ilikesubstring*continue*
strings.istarts_withprefixRE:
strings.istarts_withprefixRES:
strings.istarts_withprefixR:
strings.istarts_withprefixODG:
strings.istarts_withprefix答复:
strings.istarts_withprefixAW:
strings.istarts_withprefixTR:
strings.istarts_withprefixFWD:
regex.imatchregex^\[?/{0,2}(EXT|EXTERNAL)\]?/{0,2}[: ]\s*(RE|FWD?|FW|AW|TR|ODG|答复):.*
ml.nlu_classifier(body.current_thread.text).topics[].namememberAdvertising and Promotions
ml.nlu_classifier(body.current_thread.text).topics[].namememberEvents and Webinars
ml.nlu_classifier(body.current_thread.text).topics[].namememberProfessional and Career Development
ml.nlu_classifier(body.current_thread.text).topics[].namememberNewsletters and Digests
sender.email.domain.root_domainmemberadobe-events.com
sender.email.domain.root_domainmemberframe.io
sender.email.domain.root_domainmembernudgesecurity.io
sender.email.domain.root_domainmemberadobesignsandbox.com
sender.email.domain.root_domainmembermagento.com
sender.email.domain.root_domainmemberworkfront.com
headers.domains[].root_domainequalszohomail.com
strings.iends_withsuffixomniture.com>