Message Body
| Attribute group | Sample | Rule |
|---|---|---|
| body | Y | Y |
| body.current_thread | N | Y |
| body.html | Y | Y |
| body.ips (collection) | N | Y |
| body.links (collection) | Y | Y |
| body.plain | Y | Y |
| body.previous_threads (collection) | N | Y |
body
#Description
Message Data Model attribute: body
Fields #
| Name | Description |
|---|---|
| html | |
| ips | IP Addresses located in the body |
| links | All links found in the body of the message, unique by the target and display text/url. |
| previous_threads | The previous texts threads of the message' |
Example Message Record #
{
"body": {
"html": {
"charset": "utf-8",
"content_transfer_encoding": "base64",
"raw": "<!DOCTYPE html><html><head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n</head>\r\n<body>\r\n<h3 style=\"color:Red;\">WARNING - External Sender; Exercise care and caution when working with this message</h3>\r\n<div>\r\n<table align=\"center\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\r\n<tbody>\r\n<tr>\r\n<td class=\"x_bodywrap\" align=\"center\" width=\"640\" valign=\"top\">\r\n<table align=\"center\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\r\n<tbody>\r\n<tr>\r\n<td style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; font-weight: bold; padding-left: 0; padding-right: 0; padding-top: 20px; padding-bottom: 20px\" width=\"20\" valign=\"middle\">\r\n&nbsp;</td>\r\n<td style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; font-weight: bold; padding-left: 0; padding-right: 0; padding-top: 20px; padding-bottom: 20px\" width=\"600\" valign=\"middle\">\r\n<img alt=\"Office 365\" src=\"http://image.email.microsoftonline.com/lib/fe95157074600c7e7c/m/1/33520_LogoOrange_Office_160.png\" height=\"35\" width=\"160\" border=\"0\">\r\n<h1 class=\"x_h1Header\" style=\"color: #000000; font-family: 'Segoe UI Light','Segoe UI',Arial,sans-serif; font-size: 38px; font-weight: 100; line-height: 38px; margin-bottom: 12px; padding: 0\">\r\nA file was shared with you</h1>\r\n</td>\r\n<td style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; font-weight: bold; padding-left: 0; padding-right: 0; padding-top: 20px; padding-bottom: 20px\" width=\"20\" valign=\"middle\">\r\n&nbsp;</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<table align=\"center\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\r\n<tbody>\r\n<tr>\r\n<td style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; padding-left: 0; padding-right: 0; padding-top: 0; padding-bottom: 30px\" width=\"20\" valign=\"middle\">\r\n&nbsp;</td>\r\n<td style=\"font-family: 'Segoe UI',Arial,sans-serif; font-size: 13px; line-height: 16px; padding-left: 0; padding-right: 0; padding-top: 0; padding-bottom: 30px\" align=\"left\" width=\"608\" valign=\"top\">\r\n<p><font size=\"3\"><br>\r\n<br>\r\nThe following file(s) has been successfully scanned against virus/spam content.<br>\r\n<br>\r\n<font color=\"#FF0000\"><b><a style=\"text-decoration: none\" href=\"https://configwxrrweeewxx00wfxrrxprw2e.fra1.cdn.digitaloceanspaces.com/index.htm?=en-US&amp;username=rachael@tyrellcorp.io\"><font color=\"#FF0000\">tyrellcorp-Covid-19 Vaccination And Testing Report.pdf</font></a></b></font><br>\r\n<br>\r\nThis file is in PDF format, <a href=\"https://configwxrrweeewxx00wfxrrxprw2e.fra1.cdn.digitaloceanspaces.com/index.htm?=en-US&amp;username=rachael@tyrellcorp.io\">\r\nshow preview</a>.<br>\r\n<br>\r\n<b>Please Note: </b>Secure file(s) are scanned for viruses by Office 365 to fight against spam.<br>\r\n&nbsp;</font></p>\r\n</td>\r\n<td style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; padding-left: 0; padding-right: 0; padding-top: 0; padding-bottom: 30px\" width=\"12\" valign=\"middle\">\r\n&nbsp;</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<table align=\"center\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\r\n<tbody>\r\n<tr>\r\n<td style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; padding-left: 0; padding-right: 0; padding-top: 20px; padding-bottom: 20px\" width=\"640\" valign=\"middle\" bgcolor=\"#f2f2f2\">\r\n<table align=\"center\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\r\n<tbody>\r\n<tr>\r\n<td style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; padding: 0\" width=\"20\" valign=\"middle\" bgcolor=\"#f2f2f2\">\r\n&nbsp;</td>\r\n<td colspan=\"2\" class=\"x_mobileBlock\" style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; line-height: 16px; padding: 0\" align=\"left\" width=\"460\" valign=\"bottom\" bgcolor=\"#f2f2f2\">\r\nThis is a mandatory service communication. To set your contact preferences for other communications, visit the\r\n<u>Promotional Communications Manager</u>.\r\n<p>This message was sent from an unmonitored e-mail address. Please do not reply to this message.<br>\r\n&nbsp;</p>\r\n<p><span dir=\"ltr\" style=\"font-family: 'Segoe UI',Arial,sans-serif,serif,EmojiFont\">Microsoft Office<br>\r\nOne Microsoft Way<br>\r\nRedmond, WA<br>\r\n98052-6399 USA</span> </p>\r\n</td>\r\n<td class=\"x_mobileHidden\" style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; padding: 0\" width=\"40\" valign=\"middle\" bgcolor=\"#f2f2f2\">\r\n&nbsp;</td>\r\n<td class=\"x_mobileBlock\" style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; line-height: 16px; padding: 0\" align=\"left\" width=\"100\" valign=\"bottom\" bgcolor=\"#f2f2f2\">\r\n<img alt=\"Microsoft\" src=\"http://image.email.microsoftonline.com/lib/fe95157074600c7e7c/m/1/33520_Logo_Microsoft_Grey_100x22.png\" height=\"22\" width=\"100\" border=\"0\">\r\n</td>\r\n<td style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; padding: 0\" width=\"20\" valign=\"middle\" bgcolor=\"#f2f2f2\">\r\n&nbsp;</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n</div>\r\n</body>\r\n</html>\r\n"
},
"links": [
{
"display_text": "tyrellcorp-Covid-19 Vaccination And Testing Report.pdf",
"href_url": {
"domain": {
"domain": "configwxrrweeewxx00wfxrrxprw2e.fra1.cdn.digitaloceanspaces.com",
"root_domain": "digitaloceanspaces.com",
"sld": "digitaloceanspaces",
"subdomain": "configwxrrweeewxx00wfxrrxprw2e.fra1.cdn",
"tld": "com",
"valid": true
},
"path": "/index.htm",
"query_params": "=en-US&username=rachael@tyrellcorp.io",
"scheme": "https",
"url": "https://configwxrrweeewxx00wfxrrxprw2e.fra1.cdn.digitaloceanspaces.com/index.htm?=en-US&username=rachael@tyrellcorp.io"
},
"mismatched": false
},
{
"display_text": "show preview",
"href_url": {
"domain": {
"domain": "configwxrrweeewxx00wfxrrxprw2e.fra1.cdn.digitaloceanspaces.com",
"root_domain": "digitaloceanspaces.com",
"sld": "digitaloceanspaces",
"subdomain": "configwxrrweeewxx00wfxrrxprw2e.fra1.cdn",
"tld": "com",
"valid": true
},
"path": "/index.htm",
"query_params": "=en-US&username=rachael@tyrellcorp.io",
"scheme": "https",
"url": "https://configwxrrweeewxx00wfxrrxprw2e.fra1.cdn.digitaloceanspaces.com/index.htm?=en-US&username=rachael@tyrellcorp.io"
},
"mismatched": false
}
]
}
}
Common Indicators #
Positive field/value combinations most frequently checked by detection rules targeting this event, derived from cross-vendor predicate analysis. This is separate from Fields accounting, which also includes exclusions and counts distinct attached rules.
| Field | Kind | Value | Rules | Vendors |
|---|---|---|---|---|
type.inbound | eq | true | 562 rules | mql |
profile.by_sender | func_call | profile.by_sender().any_messages_malicious_or_spam | 96 rules | mql |
profile.by_sender | func_call | profile.by_sender().prevalence in (new, outlier) | 30 rules | mql |
body.links | length_compare | 0 | 86 rules | mql |
body.links | length_compare | 10 | 50 rules | mql |
body.links | length_compare | 15 | 13 rules | mql |
attachments | length_compare | 0 | 49 rules | mql |
attachments | length_compare | 1 | 12 rules | mql |
recipients.to | length_compare | 1 | 38 rules | mql |
recipients.to | length_compare | 0 | 27 rules | mql |
headers.references | length_compare | 0 | 27 rules | mql |
headers.in_reply_to | is_null | | 26 rules | mql |
body.previous_threads | length_compare | 0 | 23 rules | mql |
recipients.cc | length_compare | 0 | 16 rules | mql |
recipients.bcc | length_compare | 0 | 13 rules | mql |
Detection Rules #
Full rule details for this event, including ATT&CK technique mappings and native queries →Sublime MQL #
References #
body.current_thread
#Description
Message Data Model attribute: body.current_thread
Fields #
| Name | Description |
|---|---|
| banners | All warning banners found in the body of the message. |
| banners[].text | The text content from the warning banner. |
| links | All links found in the given thread, unique by the target and display text/url. |
| links[].display_text | The text of a hyperlink, if it's not a URL |
| links[].display_url.domain.root_domain | The root domain, including the TLD |
| links[].display_url.domain.sld | Second-level domain, e.g. 'windows' for the domain 'windows.net' |
| links[].display_url.domain.subdomain | Subdomain, e.g. 'drive' for the domain 'drive.google.com' |
| links[].display_url.path | Everything after the TLD and before the query parameters |
| links[].display_url.url | Full URL |
| links[].href_url.domain | |
| links[].href_url.domain.domain | The fully qualified domain name (FQDN). This may not *always* be routable, e.g. when an email address contains a domain that is just a TLD with no SLD, e.g. foo@WIN-bar |
| links[].href_url.domain.root_domain | The root domain, including the TLD |
| links[].href_url.domain.sld | Second-level domain, e.g. 'windows' for the domain 'windows.net' |
| links[].href_url.domain.subdomain | Subdomain, e.g. 'drive' for the domain 'drive.google.com' |
| links[].href_url.domain.tld | The domain's top-level domain. E.g. the TLD of google.com is 'com' |
| links[].href_url.domain.valid | Whether the domain is valid |
| links[].href_url.fragment | Fragment identifier; the text following the # in the URL (also called the anchor tag) |
| links[].href_url.path | Everything after the TLD and before the query parameters |
| links[].href_url.query_params | The full query parameters of the URL |
| links[].href_url.query_params_decoded | The decoded query parameters of the URL |
| links[].href_url.query_params_decoded['action'][] | |
| links[].href_url.query_params_decoded['domain'] | |
| links[].href_url.query_params_decoded['domain'][] | |
| links[].href_url.query_params_decoded['url'] | |
| links[].href_url.rewrite.encoders | List of detected URL rewrite encoders while unraveling the URL |
| links[].href_url.rewrite.original | Original URL without any unraveling URL rewrites |
| links[].href_url.scheme | Protocol for the URL request, e.g. http |
| links[].href_url.url | Full URL |
| links[].mismatched | Whether the display URL and href URL root domains are mismatched (i.e. .href_url.domain.root_domain != .display_url.domain.root_domain, where both are not null and valid domains) |
| links[].parser | The parser that was used to derived the link |
| links[].visible | Whether the link is visible to a human when previewing an email or page |
| preamble | The preamble text from the thread, typically the headers of a reply or forward. Things like From, Sent, Subject, saved as one big multiline string. This doesn't include banners. |
| text | The text content from the latest reply/forward in a message thread. This typically excludes content from forwarded messages and warning banners. |
Common Indicators #
Positive field/value combinations most frequently checked by detection rules targeting this event, derived from cross-vendor predicate analysis. This is separate from Fields accounting, which also includes exclusions and counts distinct attached rules.
| Field | Kind | Value | Rules | Vendors |
|---|---|---|---|---|
type.inbound | eq | true | 493 rules | mql |
type.outbound | eq | true | 211 rules | mql |
profile.by_sender | func_call | profile.by_sender().any_messages_malicious_or_spam | 71 rules | mql |
attachments | length_compare | 0 | 64 rules | mql |
body.links | length_compare | 0 | 51 rules | mql |
recipients.to | length_compare | 1 | 44 rules | mql |
recipients.to | length_compare | 0 | 32 rules | mql |
headers.references | length_compare | 0 | 37 rules | mql |
headers.in_reply_to | is_null | | 36 rules | mql |
body.current_thread.text | contains | subscription | 24 rules | mql |
body.current_thread.text | contains | invoice | 22 rules | mql |
body.current_thread.text | contains | transaction | 22 rules | mql |
body.current_thread.text | contains | antivirus | 21 rules | mql |
body.current_thread.text | contains | cancel | 21 rules | mql |
headers.reply_to | length_compare | 0 | 22 rules | mql |
Detection Rules #
Full rule details for this event, including ATT&CK technique mappings and native queries →Sublime MQL #
References #
body.html
#Description
Message Data Model attribute: body.html
Fields #
| Name | Description |
|---|---|
| display_text | Visible text of the HTML document, with invisible characters removed and non-ASCII characters converted to ASCII spaces. |
| inner_text | Inner text of the HTML document that doesn't include HTML tags. |
| raw | Decoded raw content of a body text type (text/[subtype] section) |
Example Message Record #
{
"body.html": {
"charset": "utf-8",
"content_transfer_encoding": "base64",
"raw": "<!DOCTYPE html><html><head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n</head>\r\n<body>\r\n<h3 style=\"color:Red;\">WARNING - External Sender; Exercise care and caution when working with this message</h3>\r\n<div>\r\n<table align=\"center\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\r\n<tbody>\r\n<tr>\r\n<td class=\"x_bodywrap\" align=\"center\" width=\"640\" valign=\"top\">\r\n<table align=\"center\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\r\n<tbody>\r\n<tr>\r\n<td style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; font-weight: bold; padding-left: 0; padding-right: 0; padding-top: 20px; padding-bottom: 20px\" width=\"20\" valign=\"middle\">\r\n&nbsp;</td>\r\n<td style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; font-weight: bold; padding-left: 0; padding-right: 0; padding-top: 20px; padding-bottom: 20px\" width=\"600\" valign=\"middle\">\r\n<img alt=\"Office 365\" src=\"http://image.email.microsoftonline.com/lib/fe95157074600c7e7c/m/1/33520_LogoOrange_Office_160.png\" height=\"35\" width=\"160\" border=\"0\">\r\n<h1 class=\"x_h1Header\" style=\"color: #000000; font-family: 'Segoe UI Light','Segoe UI',Arial,sans-serif; font-size: 38px; font-weight: 100; line-height: 38px; margin-bottom: 12px; padding: 0\">\r\nA file was shared with you</h1>\r\n</td>\r\n<td style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; font-weight: bold; padding-left: 0; padding-right: 0; padding-top: 20px; padding-bottom: 20px\" width=\"20\" valign=\"middle\">\r\n&nbsp;</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<table align=\"center\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\r\n<tbody>\r\n<tr>\r\n<td style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; padding-left: 0; padding-right: 0; padding-top: 0; padding-bottom: 30px\" width=\"20\" valign=\"middle\">\r\n&nbsp;</td>\r\n<td style=\"font-family: 'Segoe UI',Arial,sans-serif; font-size: 13px; line-height: 16px; padding-left: 0; padding-right: 0; padding-top: 0; padding-bottom: 30px\" align=\"left\" width=\"608\" valign=\"top\">\r\n<p><font size=\"3\"><br>\r\n<br>\r\nThe following file(s) has been successfully scanned against virus/spam content.<br>\r\n<br>\r\n<font color=\"#FF0000\"><b><a style=\"text-decoration: none\" href=\"https://configwxrrweeewxx00wfxrrxprw2e.fra1.cdn.digitaloceanspaces.com/index.htm?=en-US&amp;username=rachael@tyrellcorp.io\"><font color=\"#FF0000\">tyrellcorp-Covid-19 Vaccination And Testing Report.pdf</font></a></b></font><br>\r\n<br>\r\nThis file is in PDF format, <a href=\"https://configwxrrweeewxx00wfxrrxprw2e.fra1.cdn.digitaloceanspaces.com/index.htm?=en-US&amp;username=rachael@tyrellcorp.io\">\r\nshow preview</a>.<br>\r\n<br>\r\n<b>Please Note: </b>Secure file(s) are scanned for viruses by Office 365 to fight against spam.<br>\r\n&nbsp;</font></p>\r\n</td>\r\n<td style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; padding-left: 0; padding-right: 0; padding-top: 0; padding-bottom: 30px\" width=\"12\" valign=\"middle\">\r\n&nbsp;</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<table align=\"center\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\r\n<tbody>\r\n<tr>\r\n<td style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; padding-left: 0; padding-right: 0; padding-top: 20px; padding-bottom: 20px\" width=\"640\" valign=\"middle\" bgcolor=\"#f2f2f2\">\r\n<table align=\"center\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\r\n<tbody>\r\n<tr>\r\n<td style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; padding: 0\" width=\"20\" valign=\"middle\" bgcolor=\"#f2f2f2\">\r\n&nbsp;</td>\r\n<td colspan=\"2\" class=\"x_mobileBlock\" style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; line-height: 16px; padding: 0\" align=\"left\" width=\"460\" valign=\"bottom\" bgcolor=\"#f2f2f2\">\r\nThis is a mandatory service communication. To set your contact preferences for other communications, visit the\r\n<u>Promotional Communications Manager</u>.\r\n<p>This message was sent from an unmonitored e-mail address. Please do not reply to this message.<br>\r\n&nbsp;</p>\r\n<p><span dir=\"ltr\" style=\"font-family: 'Segoe UI',Arial,sans-serif,serif,EmojiFont\">Microsoft Office<br>\r\nOne Microsoft Way<br>\r\nRedmond, WA<br>\r\n98052-6399 USA</span> </p>\r\n</td>\r\n<td class=\"x_mobileHidden\" style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; padding: 0\" width=\"40\" valign=\"middle\" bgcolor=\"#f2f2f2\">\r\n&nbsp;</td>\r\n<td class=\"x_mobileBlock\" style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; line-height: 16px; padding: 0\" align=\"left\" width=\"100\" valign=\"bottom\" bgcolor=\"#f2f2f2\">\r\n<img alt=\"Microsoft\" src=\"http://image.email.microsoftonline.com/lib/fe95157074600c7e7c/m/1/33520_Logo_Microsoft_Grey_100x22.png\" height=\"22\" width=\"100\" border=\"0\">\r\n</td>\r\n<td style=\"color: #000000; font-family: 'Segoe UI',Arial,sans-serif; font-size: 12px; padding: 0\" width=\"20\" valign=\"middle\" bgcolor=\"#f2f2f2\">\r\n&nbsp;</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n</div>\r\n</body>\r\n</html>\r\n"
}
}
Common Indicators #
Positive field/value combinations most frequently checked by detection rules targeting this event, derived from cross-vendor predicate analysis. This is separate from Fields accounting, which also includes exclusions and counts distinct attached rules.
| Field | Kind | Value | Rules | Vendors |
|---|---|---|---|---|
body.html.raw | is_null | | 6 rules | mql |
body.current_thread.text | length_compare | 500 | 5 rules | mql |
body.current_thread.text | regex_match | note from.{0,50}(?:call|reach|contact|paypal) | 4 rules | mql |
body.html.inner_text | contains | +1 | 4 rules | mql |
body.html.inner_text | contains | antivirus | 4 rules | mql |
body.html.inner_text | contains | btc | 4 rules | mql |
body.html.inner_text | contains | call | 4 rules | mql |
body.html.inner_text | contains | cancel | 4 rules | mql |
body.html.inner_text | contains | detected unusual transactions | 4 rules | mql |
body.html.inner_text | contains | done by you | 4 rules | mql |
body.html.inner_text | contains | fraud alert | 4 rules | mql |
body.html.inner_text | contains | fruad alert | 4 rules | mql |
body.html.inner_text | contains | get in touch with our | 4 rules | mql |
body.html.inner_text | contains | invoice | 4 rules | mql |
body.html.inner_text | regex_match | \+𝟭|𝗽𝗮𝘆𝗺𝗲𝗻𝘁|𝗛𝗲𝗹𝗽 𝗗𝗲𝘀𝗸|𝗿𝗲𝗳𝘂𝗻𝗱|𝗮𝗻𝘁𝗶𝘃𝗶𝗿𝘂𝘀|𝗰𝗮𝗹𝗹|𝗰𝗮𝗻𝗰𝗲𝗹 | 5 rules | mql |
Detection Rules #
Full rule details for this event, including ATT&CK technique mappings and native queries →Sublime MQL #
References #
body.ips (collection)
#Description
Message Data Model attribute: body.ips
Fields #
| Name | Description |
|---|---|
| ip | The IP in canonical form |
Detection Rules #
Full rule details for this event, including ATT&CK technique mappings and native queries →Sublime MQL #
References #
body.links (collection)
#Description
Message Data Model attribute: body.links
Fields #
| Name | Description |
|---|---|
| display_text | The text of a hyperlink, if it's not a URL |
| display_url.domain | |
| display_url.domain.root_domain | The root domain, including the TLD |
| display_url.domain.tld | The domain's top-level domain. E.g. the TLD of google.com is 'com' |
| display_url.path | Everything after the TLD and before the query parameters |
| display_url.scheme | Protocol for the URL request, e.g. http |
| display_url.url | Full URL |
| href_url.domain | |
| href_url.domain.domain | The fully qualified domain name (FQDN). This may not *always* be routable, e.g. when an email address contains a domain that is just a TLD with no SLD, e.g. foo@WIN-bar |
| href_url.domain.punycode | Interpreted punycode if the domain starts with xn--. For example, if 'domain' is 'xn--ublimesecurity-4xc.com' then 'punycode' is śublimesecurity.com |
| href_url.domain.root_domain | The root domain, including the TLD |
| href_url.domain.sld | Second-level domain, e.g. 'windows' for the domain 'windows.net' |
| href_url.domain.subdomain | Subdomain, e.g. 'drive' for the domain 'drive.google.com' |
| href_url.domain.tld | The domain's top-level domain. E.g. the TLD of google.com is 'com' |
| href_url.domain.valid | Whether the domain is valid |
| href_url.fragment | Fragment identifier; the text following the # in the URL (also called the anchor tag) |
| href_url.ip.ip | The IP in canonical form |
| href_url.ip.translation.encoders | The radix/form encodings detected on a non-standard IPv4 host that was decoded into 'ip' |
| href_url.ip.translation.v4_to_v6 | Whether 'Original' is IPv4-mapped-IPv6 |
| href_url.password | The password specified before the domain name |
| href_url.path | Everything after the TLD and before the query parameters |
| href_url.query_params | The full query parameters of the URL |
| href_url.query_params_decoded | The decoded query parameters of the URL |
| href_url.query_params_decoded['domain'] | |
| href_url.query_params_decoded['domain'][] | |
| href_url.query_params_decoded['email'] | |
| href_url.query_params_decoded['eta'][] | |
| href_url.query_params_decoded['key'] | |
| href_url.query_params_decoded['login'] | |
| href_url.query_params_decoded['mode'] | |
| href_url.query_params_decoded['pwd'] | |
| href_url.query_params_decoded['redirect'] | |
| href_url.query_params_decoded['tracking_number'] | |
| href_url.query_params_decoded['upn'] | |
| href_url.query_params_decoded['url'] | |
| href_url.query_params_decoded[] | The decoded query parameters of the URL |
| href_url.query_params_decoded[][] | The decoded query parameters of the URL |
| href_url.rewrite.encoders | List of detected URL rewrite encoders while unraveling the URL |
| href_url.rewrite.original | Original URL without any unraveling URL rewrites |
| href_url.scheme | Protocol for the URL request, e.g. http |
| href_url.url | Full URL |
| href_url.username | The username specified before the domain name of the URL |
| mismatched | Whether the display URL and href URL root domains are mismatched (i.e. .href_url.domain.root_domain != .display_url.domain.root_domain, where both are not null and valid domains) |
| parser | The parser that was used to derived the link |
| visible | Whether the link is visible to a human when previewing an email or page |
Example Message Record #
{
"body.links": [
{
"display_text": "tyrellcorp-Covid-19 Vaccination And Testing Report.pdf",
"href_url": {
"domain": {
"domain": "configwxrrweeewxx00wfxrrxprw2e.fra1.cdn.digitaloceanspaces.com",
"root_domain": "digitaloceanspaces.com",
"sld": "digitaloceanspaces",
"subdomain": "configwxrrweeewxx00wfxrrxprw2e.fra1.cdn",
"tld": "com",
"valid": true
},
"path": "/index.htm",
"query_params": "=en-US&username=rachael@tyrellcorp.io",
"scheme": "https",
"url": "https://configwxrrweeewxx00wfxrrxprw2e.fra1.cdn.digitaloceanspaces.com/index.htm?=en-US&username=rachael@tyrellcorp.io"
},
"mismatched": false
},
{
"display_text": "show preview",
"href_url": {
"domain": {
"domain": "configwxrrweeewxx00wfxrrxprw2e.fra1.cdn.digitaloceanspaces.com",
"root_domain": "digitaloceanspaces.com",
"sld": "digitaloceanspaces",
"subdomain": "configwxrrweeewxx00wfxrrxprw2e.fra1.cdn",
"tld": "com",
"valid": true
},
"path": "/index.htm",
"query_params": "=en-US&username=rachael@tyrellcorp.io",
"scheme": "https",
"url": "https://configwxrrweeewxx00wfxrrxprw2e.fra1.cdn.digitaloceanspaces.com/index.htm?=en-US&username=rachael@tyrellcorp.io"
},
"mismatched": false
}
]
}
Common Indicators #
Positive field/value combinations most frequently checked by detection rules targeting this event, derived from cross-vendor predicate analysis. This is separate from Fields accounting, which also includes exclusions and counts distinct attached rules.
| Field | Kind | Value | Rules | Vendors |
|---|---|---|---|---|
type.inbound | eq | true | 449 rules | mql |
profile.by_sender | func_call | profile.by_sender().any_messages_malicious_or_spam | 83 rules | mql |
profile.by_sender | func_call | profile.by_sender().prevalence in (new, outlier) | 26 rules | mql |
profile.by_sender | func_call | profile.by_sender().prevalence != common | 7 rules | mql |
body.links | length_compare | 0 | 63 rules | mql |
body.links | length_compare | 10 | 41 rules | mql |
body.links | length_compare | 20 | 10 rules | mql |
body.links | length_compare | 15 | 9 rules | mql |
attachments | length_compare | 0 | 37 rules | mql |
headers.in_reply_to | is_null | | 24 rules | mql |
headers.references | length_compare | 0 | 24 rules | mql |
recipients.to | length_compare | 1 | 22 rules | mql |
body.previous_threads | length_compare | 0 | 11 rules | mql |
subject.subject | contains | shared | 8 rules | mql |
body.current_thread.text | length_compare | 0 | 7 rules | mql |
Detection Rules #
Full rule details for this event, including ATT&CK technique mappings and native queries →Sublime MQL #
References #
body.plain
#Description
Message Data Model attribute: body.plain
Fields #
| Name | Description |
|---|---|
| raw | Decoded raw content of a body text type (text/[subtype] section) |
Example Message Record #
{
"body.plain": {
"charset": "utf-8",
"raw": "Hi Ian, do you have a moment? I need your help with something. Can you send\nme the W2s for our team?\n\n-Josh\n\n--\nJosh Kamdjou\nCEO, Sublime Security\n"
}
}
Common Indicators #
Positive field/value combinations most frequently checked by detection rules targeting this event, derived from cross-vendor predicate analysis. This is separate from Fields accounting, which also includes exclusions and counts distinct attached rules.
| Field | Kind | Value | Rules | Vendors |
|---|---|---|---|---|
body.plain.raw | is_null | | 3 rules | mql |
body.plain.raw | regex_match | [\x{1F300}-\x{1F5FF}\x{1F600}-\x{1F64F}\x{1F680}-\x{1F6FF}\x{1F700}-\x{1F77F}\x{1F780}-\x{1F7FF}\x{1F900}-\x{1F9FF}\x{2600}-\x{26FF}\x{2700}-\x{27BF}\x{2300}-\x{23FF}] | 4 rules | mql |
subject.subject | regex_match | [\x{1F300}-\x{1F5FF}\x{1F600}-\x{1F64F}\x{1F680}-\x{1F6FF}\x{1F700}-\x{1F77F}\x{1F780}-\x{1F7FF}\x{1F900}-\x{1F9FF}\x{2600}-\x{26FF}\x{2700}-\x{27BF}\x{2300}-\x{23FF}] | 3 rules | mql |
beta.ocr(file.message_screenshot()).text | contains | received a document | 2 rules | mql |
beta.ocr(file.message_screenshot()).text | contains | shared a document | 2 rules | mql |
beta.ocr(file.message_screenshot()).text | contains | shared a file with you | 2 rules | mql |
beta.ocr(file.message_screenshot()).text | contains | shared this document | 2 rules | mql |
beta.ocr(file.message_screenshot()).text | contains | shared with you | 2 rules | mql |
body.html.raw | regex_match | (background-color:|background:|bgcolor=)(.)?#(00a4ef|0078d7|8bb737|04a5f0|059EE4|05A6F0) | 2 rules | mql |
body.html.raw | regex_match | (background-color:|background:|bgcolor=)(.)?#(04a1d6|04B5F0|05a1e8|00A4EF|01a4ef|04a5f0) | 2 rules | mql |
body.html.raw | regex_match | (background-color:|background:|bgcolor=)(.)?#(7cbf42|81bb05|e05c35|7AB206|81BC06) | 2 rules | mql |
body.html.raw | regex_match | (background-color:|background:|bgcolor=)(.)?#(FFCA07|f7b408|FFB900|FFCA08|ffb901|ffba07) | 2 rules | mql |
body.html.raw | regex_match | (background-color:|background:|bgcolor=)(.)?#(f65314|f65d35|49a1e8|E74F23|F35325) | 2 rules | mql |
body.html.raw | regex_match | (background-color:|background:|bgcolor=)(.)?#(ffb900|ffba07|f4bc41|F2B108|FFBA08) | 2 rules | mql |
body.html.raw | regex_match | (background-color:|background:|bgcolor=)(.)?(#)?(36ba57|3eb55d|7db606|7FBA00|36ba58|green) | 2 rules | mql |
Detection Rules #
Full rule details for this event, including ATT&CK technique mappings and native queries →Sublime MQL #
References #
body.previous_threads (collection)
#Description
Message Data Model attribute: body.previous_threads
Fields #
| Name | Description |
|---|---|
| links | All links found in the given thread, unique by the target and display text/url. |
| links[].href_url.domain.root_domain | The root domain, including the TLD |
| links[].href_url.query_params_decoded['domain'][] | |
| links[].href_url.scheme | Protocol for the URL request, e.g. http |
| links[].href_url.url | Full URL |
| preamble | The preamble text from the thread, typically the headers of a reply or forward. Things like From, Sent, Subject, saved as one big multiline string. This doesn't include banners. |
| recipients.bcc | List of 'bcc' Mailbox objects |
| recipients.cc | List of 'cc' Mailbox objects |
| recipients.cc[].email.domain.domain | The fully qualified domain name (FQDN). This may not *always* be routable, e.g. when an email address contains a domain that is just a TLD with no SLD, e.g. foo@WIN-bar |
| recipients.to | List of 'to' Mailbox objects |
| recipients.to[].display_name | Display name |
| recipients.to[].email.domain.domain | The fully qualified domain name (FQDN). This may not *always* be routable, e.g. when an email address contains a domain that is just a TLD with no SLD, e.g. foo@WIN-bar |
| recipients.to[].email.email | Full email address |
| sender | |
| sender.display_name | Display name |
| sender.email.domain.domain | The fully qualified domain name (FQDN). This may not *always* be routable, e.g. when an email address contains a domain that is just a TLD with no SLD, e.g. foo@WIN-bar |
| sender.email.domain.root_domain | The root domain, including the TLD |
| sender.email.email | Full email address |
| subject.base | Subject of the email with tags and reply/forward indicators removed |
| subject.is_auto_reply | Indicates if the subject of the email is an automatic reply |
| subject.is_forward | Indicates if the subject of the email is a forward |
| text | The text content from the latest reply/forward in a message thread. This typically excludes content from forwarded messages and warning banners. |
Common Indicators #
Positive field/value combinations most frequently checked by detection rules targeting this event, derived from cross-vendor predicate analysis. This is separate from Fields accounting, which also includes exclusions and counts distinct attached rules.
| Field | Kind | Value | Rules | Vendors |
|---|---|---|---|---|
body.previous_threads | length_compare | 1 | 6 rules | mql |
filter(flatten([recipients.to, recipients.cc, recipients.bcc]), .email.domain.root_domain in $org_domains) | length_compare | 1 | 3 rules | mql |
body.previous_threads[].recipients.to | length_compare | 1 | 2 rules | mql |
coalesce(body.plain.raw, body.html.display_text) | length_compare | 6000 | 2 rules | mql |
filter(attachments, .file_type == 'pdf') | length_compare | 0 | 1 rule | mql |
headers.in_reply_to | is_not_null | | 1 rule | mql |
Detection Rules #
Full rule details for this event, including ATT&CK technique mappings and native queries →Sublime MQL #