Detection rules › Sublime MQL
Attachment: DocX embedded binary
This rule is designed to detect sophisticated phishing attacks that deliver binary payloads through MS office open XML files. It identifies malicious documents containing embedded scripts or objects, either encoded in base64 or using specific JavaScript functions like createObjectURL or msSaveOrOpenBlob, which are indicative of attempts to download and execute a binary payload.
Threat classification
Sublime's own taxonomy (not MITRE ATT&CK).
| Category | Values |
|---|---|
| Attack types | Malware/Ransomware |
| Tactics and techniques | Evasion |
Event coverage
| Message attribute |
|---|
| attachments (collection) |
| type |
Rule body MQL
type.inbound
and any(attachments,
(
.file_extension in~ $file_extensions_macros
or .file_extension in~ $file_extensions_common_archives
or .content_type == "application/zip"
or (
.file_extension is null
and .file_type == "unknown"
and .content_type == "application/octet-stream"
and .size < 100000000
)
)
and any(file.explode(.),
.file_extension in~ (
"doc",
"docm",
"docx",
"dot",
"dotm",
"xls",
"xlsx",
"xlsm",
"xlm",
"xlsb",
"xlt",
"xltm",
"ppt",
"pptx",
"pptm",
"ppsm"
)
and (
any(.flavors.yara, . == "base64_pe")
// The malicious file to be downloaded and run with the data URI may not always be portable executable
or any(.scan.strings.strings,
strings.ilike(., "*.createObjectURL(*)*")
)
or any(.scan.strings.strings,
strings.ilike(., "*.msSaveOrOpenBlob(*)*")
)
)
)
)
Detection logic
Scope: inbound message.
This rule is designed to detect sophisticated phishing attacks that deliver binary payloads through MS office open XML files. It identifies malicious documents containing embedded scripts or objects, either encoded in base64 or using specific JavaScript functions like createObjectURL or msSaveOrOpenBlob, which are indicative of attempts to download and execute a binary payload.
- inbound message
any of
attachmentswhere all hold:any of:
- .file_extension in $file_extensions_macros
- .file_extension in $file_extensions_common_archives
- .content_type is 'application/zip'
all of:
- .file_extension is missing
- .file_type is 'unknown'
- .content_type is 'application/octet-stream'
- .size < 100000000
any of
file.explode(.)where all hold:- .file_extension in ('doc', 'docm', 'docx', 'dot', 'dotm', 'xls', 'xlsx', 'xlsm', 'xlm', 'xlsb', 'xlt', 'xltm', 'ppt', 'pptx', 'pptm', 'ppsm')
any of:
any of
.flavors.yarawhere:- . is 'base64_pe'
any of
.scan.strings.stringswhere:- . matches '*.createObjectURL(*)*'
any of
.scan.strings.stringswhere:- . matches '*.msSaveOrOpenBlob(*)*'
Inspects: attachments[].content_type, attachments[].file_extension, attachments[].file_type, attachments[].size, type.inbound. Sensors: file.explode, strings.ilike. Reference lists: $file_extensions_common_archives, $file_extensions_macros.
Indicators matched (22)
| Field | Match | Value |
|---|---|---|
attachments[].content_type | equals | application/zip |
attachments[].file_type | equals | unknown |
attachments[].content_type | equals | application/octet-stream |
file.explode(attachments[])[].file_extension | member | doc |
file.explode(attachments[])[].file_extension | member | docm |
file.explode(attachments[])[].file_extension | member | docx |
file.explode(attachments[])[].file_extension | member | dot |
file.explode(attachments[])[].file_extension | member | dotm |
file.explode(attachments[])[].file_extension | member | xls |
file.explode(attachments[])[].file_extension | member | xlsx |
file.explode(attachments[])[].file_extension | member | xlsm |
file.explode(attachments[])[].file_extension | member | xlm |
10 more
file.explode(attachments[])[].file_extension | member | xlsb |
file.explode(attachments[])[].file_extension | member | xlt |
file.explode(attachments[])[].file_extension | member | xltm |
file.explode(attachments[])[].file_extension | member | ppt |
file.explode(attachments[])[].file_extension | member | pptx |
file.explode(attachments[])[].file_extension | member | pptm |
file.explode(attachments[])[].file_extension | member | ppsm |
file.explode(attachments[])[].flavors.yara[] | equals | base64_pe |
strings.ilike | substring | *.createObjectURL(*)* |
strings.ilike | substring | *.msSaveOrOpenBlob(*)* |