Detection rules › Sublime MQL
Sublime MQL rules: phishing
| Rule | Severity |
|---|---|
| Credential phishing: Blue button styled link with file-sharing template artifacts | low |
| Credential phishing: Personalized document signing request | medium |
Credential phishing: Personalized document signing request
#Detects messages with a single recipient and personalized document signing requests. The rule identifies messages referencing DocuSign or document-related language, combined with domain-specific greeting patterns or known malicious HTML artifacts associated with fraudulent signing invitations from entities such as STAR Capital or Agito AS.
Threat classification
Sublime's own taxonomy (not MITRE ATT&CK).
| Category | Values |
|---|---|
| Attack types | Credential Phishing, BEC/Fraud |
| Tactics and techniques | Impersonation: Brand, Social engineering |
Telemetry coverage
| Platform | Record / event type |
|---|---|
| Sublime | Inbound email message |
Message attributes
Rule body
type.inbound
// personalized document form ensures recipients should always be 1
and length(recipients.to) == 1
and 2 of (
// document/sign language
strings.icontains(body.current_thread.text, 'docusign', 'document'),
// greeting uses recipient's email local_part
any(recipients.to,
strings.icontains(body.current_thread.text,
strings.concat("You're receiving this on behalf of ",
.email.domain.sld
)
)
or strings.icontains(body.current_thread.text,
strings.concat("Invitation to sign document for ",
.email.domain.sld
)
)
),
// templated html artifact
strings.contains(body.html.raw,
'STAR Capital invites you to exchange',
'Reminder: Invitation to sign document for Agito AS'
)
)
Detection logic
Scope: inbound message.
Detects messages with a single recipient and personalized document signing requests. The rule identifies messages referencing DocuSign or document-related language, combined with domain-specific greeting patterns or known malicious HTML artifacts associated with fraudulent signing invitations from entities such as STAR Capital or Agito AS.
- inbound message
- length(recipients.to) is 1
at least 2 of:
body.current_thread.text contains any of 2 patterns
docusigndocument
any of
recipients.towhere any holds:- strings.icontains(body.current_thread.text)
- strings.icontains(body.current_thread.text)
body.html.raw contains any of 2 patterns
STAR Capital invites you to exchangeReminder: Invitation to sign document for Agito AS
Inspects: body.current_thread.text, body.html.raw, recipients.to, recipients.to[].email.domain.sld, type.inbound. Sensors: strings.concat, strings.contains, strings.icontains.
Indicators matched (4)
| Field | Match | Value |
|---|---|---|
strings.icontains | substring | docusign |
strings.icontains | substring | document |
strings.contains | substring | STAR Capital invites you to exchange |
strings.contains | substring | Reminder: Invitation to sign document for Agito AS |
Stages and Predicates
Stage 1: mql_rule
and
or
any(recipients.to)
strings.icontains func_call "strings.icontains(body.current_thread.text)"
body.current_thread.text contains "document"
body.current_thread.text contains "docusign"
body.html.raw contains "Reminder: Invitation to sign document for Agito AS"
body.html.raw contains "STAR Capital invites you to exchange"
recipients.to length_compare "1"
type.inbound eq "true"Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
body.current_thread.text | contains |
| field:"body.current_thread.text" kind:contains |
body.html.raw | contains |
| field:"body.html.raw" kind:contains |
type.inbound | eq |
| field:"type.inbound" kind:eq value:"true" |