Detection rules › Sublime MQL

Service abuse: DocuSign notification with suspicious sender or document name

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

The detection rule is intended to match on messages sent from Docusign from a newly observed reply-to address which contains suspicious content within the document or sender display name.

Threat classification

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

CategoryValues
Attack typesCallback Phishing, BEC/Fraud
Tactics and techniquesEvasion, Social engineering

Event coverage

Rule body MQL

type.inbound
and length(attachments) == 0

// Legitimate Docusign sending infratructure
and sender.email.domain.root_domain == 'docusign.net'
and (headers.auth_summary.spf.pass or headers.auth_summary.dmarc.pass)
and length(headers.reply_to) > 0
and not any(headers.reply_to,
            .email.domain.domain in $org_domains
            or .email.domain.root_domain in $high_trust_sender_root_domains
            or .email.domain.root_domain in ("docusign.net", "docusign.com")
)
// 
// 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

// do not match if the reply_to address has been observed as a reply_to address
// of a message that has been classified as benign
and not beta.profile.by_reply_to().any_messages_benign

// not a completed DocuSign
// reminders are sent automatically and can be just as malicious as the initial
// users often decline malicious ones
and not strings.istarts_with(subject.subject, "Completed: ")
and not strings.istarts_with(subject.subject, "Here is your signed document: ")
and not strings.istarts_with(subject.subject, "Voided: ")
and (
  // contains the word docusign before the `via Docusign` part
  regex.icontains(sender.display_name, 'Docusign.*via Docusign$')
  or strings.icontains(subject.subject, 'sharefile')
  or strings.icontains(subject.subject, 'helloshare')

  // sender names part of the subject
  or (
    // Billing Accounting
    regex.icontains(sender.display_name,
                    'Accounts? (?:Payable|Receivable).*via Docusign$',
                    'Billing Support.*via Docusign$'
    )

    // HR/Payroll/Legal/etc
    or regex.icontains(sender.display_name, 'Compliance HR.*via Docusign$')
    or regex.icontains(sender.display_name,
                       '(?:Compliance|Executive|Finance|\bHR\b|Human Resources|\bIT\b|Legal|Payroll|Purchasing|Operations|Security|Training|Support).*(?:Department|Team)?.*via Docusign$'
    )
    or regex.icontains(sender.display_name,
                       'Corporate Communications.*via Docusign$'
    )
    or regex.icontains(sender.display_name, 'Employee Relations.*via Docusign$')
    or regex.icontains(sender.display_name, 'Office Manager.*via Docusign$')
    or regex.icontains(sender.display_name, 'Risk Management.*via Docusign$')
    or regex.icontains(sender.display_name,
                       'Payroll Admin(?:istrator).*via Docusign$'
    )

    // IT related
    or regex.icontains(sender.display_name,
                       'IT Support.*via Docusign$',
                       'Information Technology.*via Docusign$',
                       '(?:Network|System)? Admin(?:istrator).*via Docusign$',
                       'Help Desk.*via Docusign$',
                       'Tech(?:nical) Support.*via Docusign$'
    )
  )
  // filename analysis
  // the filename is also contained in the subject line
  or (
    // scanner themed
    regex.icontains(subject.subject, 'scanne[rd]')
    // image theme
    or regex.icontains(subject.subject, '_IMG_')
    or regex.icontains(subject.subject, 'IMG[_-](?:\d|\W)+')

    // Invoice Themes
    or regex.icontains(subject.subject, 'Invoice')
    or regex.icontains(subject.subject, 'INV\b')
    or regex.icontains(subject.subject, 'Payment')
    or regex.icontains(subject.subject, '\bACH\b')
    or regex.icontains(subject.subject, 'Wire Confirmation')
    or regex.icontains(subject.subject, 'P[O0]\W+?\d+\"')
    or regex.icontains(subject.subject, 'P[O0](?:\W+?|\d+)')
    or regex.icontains(subject.subject, 'receipt')
    or regex.icontains(subject.subject, 'Billing')
    or regex.icontains(subject.subject, 'statement')
    or regex.icontains(subject.subject, 'Past Due')
    or regex.icontains(subject.subject, 'Remit(?:tance)?')
    or regex.icontains(subject.subject, 'Purchase Order')
    or regex.icontains(subject.subject, 'Settlementt')

    // contract language
    or regex.icontains(subject.subject, 'Pr[0o]p[0o]sal')
    or regex.icontains(subject.subject, 'Claim Doc')

    // Payroll/HR
    or regex.icontains(subject.subject, 'Payroll')
    or regex.icontains(subject.subject, 'Employee Pay\b')
    or regex.icontains(subject.subject, 'Salary')
    or regex.icontains(subject.subject, 'Benefit Enrollment')
    or regex.icontains(subject.subject, 'Employee Handbook')
    or regex.icontains(subject.subject, 'Reimbursement Approved')

    // 
    // shared files/extenstion/urgency/CTA
    or regex.icontains(subject.subject, 'Urgent')
    or regex.icontains(subject.subject, 'Important')
    or regex.icontains(subject.subject, 'Secure')
    or regex.icontains(subject.subject, 'Encrypt')
    or regex.icontains(subject.subject, 'shared')
    or regex.icontains(subject.subject, 'protected')
    or regex.icontains(subject.subject, 'Validate')
    or regex.icontains(subject.subject, 'Action Required')
    or regex.icontains(subject.subject, 'Final Notice')
    or regex.icontains(subject.subject, 'Review(?: and| & |\s+)?Sign')
    or regex.icontains(subject.subject, 'Download PDF')

    // MFA theme
    or regex.icontains(subject.subject, 'Verification Code')
    or regex.icontains(subject.subject, '\bMFA\b')
  )
)

Detection logic

Scope: inbound message.

The detection rule is intended to match on messages sent from Docusign from a newly observed reply-to address which contains suspicious content within the document or sender display name.

  1. inbound message
  2. length(attachments) is 0
  3. sender.email.domain.root_domain is 'docusign.net'
  4. any of:
    • headers.auth_summary.spf.pass
    • headers.auth_summary.dmarc.pass
  5. length(headers.reply_to) > 0
  6. not:
    • any of headers.reply_to where any holds:
      • .email.domain.domain in $org_domains
      • .email.domain.root_domain in $high_trust_sender_root_domains
      • .email.domain.root_domain in ('docusign.net', 'docusign.com')
  7. beta.profile.by_reply_to().prevalence is 'new'
  8. not:
    • beta.profile.by_reply_to().solicited
  9. not:
    • beta.profile.by_reply_to().any_messages_benign
  10. not:
    • subject.subject starts with 'Completed: '
  11. not:
    • subject.subject starts with 'Here is your signed document: '
  12. not:
    • subject.subject starts with 'Voided: '
  13. any of:
    • sender.display_name matches 'Docusign.*via Docusign$'
    • subject.subject contains 'sharefile'
    • subject.subject contains 'helloshare'
    • sender.display_name matches any of 14 patterns
      • Accounts? (?:Payable|Receivable).*via Docusign$
      • Billing Support.*via Docusign$
      • Compliance HR.*via Docusign$
      • (?:Compliance|Executive|Finance|\bHR\b|Human Resources|\bIT\b|Legal|Payroll|Purchasing|Operations|Security|Training|Support).*(?:Department|Team)?.*via Docusign$
      • Corporate Communications.*via Docusign$
      • Employee Relations.*via Docusign$
      • Office Manager.*via Docusign$
      • Risk Management.*via Docusign$
      • Payroll Admin(?:istrator).*via Docusign$
      • IT Support.*via Docusign$
      • Information Technology.*via Docusign$
      • (?:Network|System)? Admin(?:istrator).*via Docusign$
      • Help Desk.*via Docusign$
      • Tech(?:nical) Support.*via Docusign$
    • subject.subject matches any of 38 patterns
      • scanne[rd]
      • _IMG_
      • IMG[_-](?:\d|\W)+
      • Invoice
      • INV\b
      • Payment
      • \bACH\b
      • Wire Confirmation
      • P[O0]\W+?\d+\"
      • P[O0](?:\W+?|\d+)
      • receipt
      • Billing
      • statement
      • Past Due
      • Remit(?:tance)?
      • Purchase Order
      • Settlementt
      • Pr[0o]p[0o]sal
      • Claim Doc
      • Payroll
      • Employee Pay\b
      • Salary
      • Benefit Enrollment
      • Employee Handbook
      • Reimbursement Approved
      • Urgent
      • Important
      • Secure
      • Encrypt
      • shared
      • protected
      • Validate
      • Action Required
      • Final Notice
      • Review(?: and| & |\s+)?Sign
      • Download PDF
      • Verification Code
      • \bMFA\b

Inspects: headers.auth_summary.dmarc.pass, headers.auth_summary.spf.pass, headers.reply_to, headers.reply_to[].email.domain.domain, headers.reply_to[].email.domain.root_domain, sender.display_name, sender.email.domain.root_domain, subject.subject, type.inbound. Sensors: beta.profile.by_reply_to, regex.icontains, strings.icontains, strings.istarts_with. Reference lists: $high_trust_sender_root_domains, $org_domains.

Indicators matched (61)

FieldMatchValue
sender.email.domain.root_domainequalsdocusign.net
headers.reply_to[].email.domain.root_domainmemberdocusign.net
headers.reply_to[].email.domain.root_domainmemberdocusign.com
strings.istarts_withprefixCompleted:
strings.istarts_withprefixHere is your signed document:
strings.istarts_withprefixVoided:
regex.icontainsregexDocusign.*via Docusign$
strings.icontainssubstringsharefile
strings.icontainssubstringhelloshare
regex.icontainsregexAccounts? (?:Payable|Receivable).*via Docusign$
regex.icontainsregexBilling Support.*via Docusign$
regex.icontainsregexCompliance HR.*via Docusign$
49 more
regex.icontainsregex(?:Compliance|Executive|Finance|\bHR\b|Human Resources|\bIT\b|Legal|Payroll|Purchasing|Operations|Security|Training|Support).*(?:Department|Team)?.*via Docusign$
regex.icontainsregexCorporate Communications.*via Docusign$
regex.icontainsregexEmployee Relations.*via Docusign$
regex.icontainsregexOffice Manager.*via Docusign$
regex.icontainsregexRisk Management.*via Docusign$
regex.icontainsregexPayroll Admin(?:istrator).*via Docusign$
regex.icontainsregexIT Support.*via Docusign$
regex.icontainsregexInformation Technology.*via Docusign$
regex.icontainsregex(?:Network|System)? Admin(?:istrator).*via Docusign$
regex.icontainsregexHelp Desk.*via Docusign$
regex.icontainsregexTech(?:nical) Support.*via Docusign$
regex.icontainsregexscanne[rd]
regex.icontainsregex_IMG_
regex.icontainsregexIMG[_-](?:\d|\W)+
regex.icontainsregexInvoice
regex.icontainsregexINV\b
regex.icontainsregexPayment
regex.icontainsregex\bACH\b
regex.icontainsregexWire Confirmation
regex.icontainsregexP[O0]\W+?\d+\"
regex.icontainsregexP[O0](?:\W+?|\d+)
regex.icontainsregexreceipt
regex.icontainsregexBilling
regex.icontainsregexstatement
regex.icontainsregexPast Due
regex.icontainsregexRemit(?:tance)?
regex.icontainsregexPurchase Order
regex.icontainsregexSettlementt
regex.icontainsregexPr[0o]p[0o]sal
regex.icontainsregexClaim Doc
regex.icontainsregexPayroll
regex.icontainsregexEmployee Pay\b
regex.icontainsregexSalary
regex.icontainsregexBenefit Enrollment
regex.icontainsregexEmployee Handbook
regex.icontainsregexReimbursement Approved
regex.icontainsregexUrgent
regex.icontainsregexImportant
regex.icontainsregexSecure
regex.icontainsregexEncrypt
regex.icontainsregexshared
regex.icontainsregexprotected
regex.icontainsregexValidate
regex.icontainsregexAction Required
regex.icontainsregexFinal Notice
regex.icontainsregexReview(?: and| & |\s+)?Sign
regex.icontainsregexDownload PDF
regex.icontainsregexVerification Code
regex.icontainsregex\bMFA\b