Detection rules › Sublime MQL

Attachment: PDF with credential theft language and invalid reply-to domain

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

Detects PDF attachments containing high-confidence credential theft language that references the recipient's email address, combined with an invalid reply-to domain header.

Threat classification

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

CategoryValues
Attack typesCredential Phishing
Tactics and techniquesPDF, Social engineering, Spoofing

Event coverage

Rule body MQL

type.inbound
and length(recipients.to) == 1
and recipients.to[0].email.domain.valid
and any(headers.reply_to, .email.email == "")
and any(attachments,
        .file_type == 'pdf'
        and any(file.explode(.),
                any(ml.nlu_classifier(.scan.strings.raw).intents,
                    .name == 'cred_theft' and .confidence == 'high'
                )
                and strings.icontains(.scan.strings.raw,
                                      recipients.to[0].email.email
                )
        )
)
// negate highly trusted sender domains unless they fail DMARC authentication or DMARC is missing
and not (
  sender.email.domain.root_domain in $high_trust_sender_root_domains
  and coalesce(headers.auth_summary.dmarc.pass, false)
)

Detection logic

Scope: inbound message.

Detects PDF attachments containing high-confidence credential theft language that references the recipient's email address, combined with an invalid reply-to domain header.

  1. inbound message
  2. length(recipients.to) is 1
  3. recipients.to[0].email.domain.valid
  4. any of headers.reply_to where:
    • .email.email is ''
  5. any of attachments where all hold:
    • .file_type is 'pdf'
    • any of file.explode(.) where all hold:
      • any of ml.nlu_classifier(.scan.strings.raw).intents where all hold:
        • .name is 'cred_theft'
        • .confidence is 'high'
      • strings.icontains(.scan.strings.raw)
  6. not:
    • all of:
      • sender.email.domain.root_domain in $high_trust_sender_root_domains
      • coalesce(headers.auth_summary.dmarc.pass)

Inspects: attachments[].file_type, headers.auth_summary.dmarc.pass, headers.reply_to, headers.reply_to[].email.email, recipients.to, recipients.to[0].email.domain.valid, recipients.to[0].email.email, sender.email.domain.root_domain, type.inbound. Sensors: file.explode, ml.nlu_classifier, strings.icontains. Reference lists: $high_trust_sender_root_domains.

Indicators matched (4)

FieldMatchValue
headers.reply_to[].email.emailequals
attachments[].file_typeequalspdf
ml.nlu_classifier(file.explode(attachments[])[].scan.strings.raw).intents[].nameequalscred_theft
ml.nlu_classifier(file.explode(attachments[])[].scan.strings.raw).intents[].confidenceequalshigh