Detection rules › Sublime MQL

HR impersonation via e-sign agreement comment

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

This rule inspects messages originating from legitimate e-signature platform infrastructure, with engaging language in the body that matches HR Impersonation criteria.

Threat classification

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

CategoryValues
Attack typesBEC/Fraud, Credential Phishing
Tactics and techniquesEvasion, Impersonation: Brand, Out of band pivot, Social engineering

Event coverage

Rule body MQL

type.inbound
and length(attachments) == 0

// Legitimate Docusign sending infratructure
and (
  sender.email.domain.root_domain in (
    'docusign.net',
    'docusign.com',
    'hellosign.com'
  )
  // docusing.com as a reply-to is used in updates to documents, such as views, signs, etc
  and not any(headers.reply_to, .email.domain.domain == 'docusign.com')
  // check for SPF or DMARC passed
  and (headers.auth_summary.spf.pass or headers.auth_summary.dmarc.pass)
)

// HR Impersonation in body
and regex.icontains(body.current_thread.text,
                    (
                      '(\bh\W?r\W?\b|human\s?resources|hr depart(ment)?|employee relations)'
                    )
)

// Request and Urgency
and (
  any(ml.nlu_classifier(body.current_thread.text).entities, .name == "request")
  and (
    any(ml.nlu_classifier(body.current_thread.text).intents,
        .name == "cred_theft" and .confidence == "high"
    )
    or any(ml.nlu_classifier(body.current_thread.text).entities,
           .name in ("urgency", "financial")
    )
  )
)
and (
  any(ml.nlu_classifier(body.current_thread.text).intents, .name != "benign")
  or length(ml.nlu_classifier(body.current_thread.text).intents) == 0 // not benign but not malicious either
)

//
// 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
//

// reply-to address has never sent an email to the org
and beta.profile.by_reply_to().prevalence == "new"

// reply-to email address has never been sent an email by the org
and not beta.profile.by_reply_to().solicited

// Negate legitimate HR docusigns originating from within the org
and not (all(headers.reply_to, .email.domain.root_domain in $org_domains))

// Negate replies
and (length(headers.references) == 0 or headers.in_reply_to is null)

Detection logic

Scope: inbound message.

This rule inspects messages originating from legitimate e-signature platform infrastructure, with engaging language in the body that matches HR Impersonation criteria.

  1. inbound message
  2. length(attachments) is 0
  3. all of:
    • sender.email.domain.root_domain in ('docusign.net', 'docusign.com', 'hellosign.com')
    • not:
      • any of headers.reply_to where:
        • .email.domain.domain is 'docusign.com'
    • any of:
      • headers.auth_summary.spf.pass
      • headers.auth_summary.dmarc.pass
  4. body.current_thread.text matches '(\\bh\\W?r\\W?\\b|human\\s?resources|hr depart(ment)?|employee relations)'
  5. all of:
    • any of ml.nlu_classifier(body.current_thread.text).entities where:
      • .name is 'request'
    • any of:
      • any of ml.nlu_classifier(body.current_thread.text).intents where all hold:
        • .name is 'cred_theft'
        • .confidence is 'high'
      • any of ml.nlu_classifier(body.current_thread.text).entities where:
        • .name in ('urgency', 'financial')
  6. any of:
    • any of ml.nlu_classifier(body.current_thread.text).intents where:
      • .name is not 'benign'
    • length(ml.nlu_classifier(body.current_thread.text).intents) is 0
  7. beta.profile.by_reply_to().prevalence is 'new'
  8. not:
    • beta.profile.by_reply_to().solicited
  9. not:
    • all of headers.reply_to where:
      • .email.domain.root_domain in $org_domains
  10. any of:
    • length(headers.references) is 0
    • headers.in_reply_to is missing

Inspects: body.current_thread.text, headers.auth_summary.dmarc.pass, headers.auth_summary.spf.pass, headers.in_reply_to, headers.references, headers.reply_to, headers.reply_to[].email.domain.domain, headers.reply_to[].email.domain.root_domain, sender.email.domain.root_domain, type.inbound. Sensors: beta.profile.by_reply_to, ml.nlu_classifier, regex.icontains. Reference lists: $org_domains.

Indicators matched (10)

FieldMatchValue
sender.email.domain.root_domainmemberdocusign.net
sender.email.domain.root_domainmemberdocusign.com
sender.email.domain.root_domainmemberhellosign.com
headers.reply_to[].email.domain.domainequalsdocusign.com
regex.icontainsregex(\bh\W?r\W?\b|human\s?resources|hr depart(ment)?|employee relations)
ml.nlu_classifier(body.current_thread.text).entities[].nameequalsrequest
ml.nlu_classifier(body.current_thread.text).intents[].nameequalscred_theft
ml.nlu_classifier(body.current_thread.text).intents[].confidenceequalshigh
ml.nlu_classifier(body.current_thread.text).entities[].namememberurgency
ml.nlu_classifier(body.current_thread.text).entities[].namememberfinancial