Detection rules › Sublime MQL
Brand impersonation: Sharepoint fake file share
This rule detects messages impersonating a Sharepoint file sharing email where no links point to known Microsoft domains.
Threat classification
Sublime's own taxonomy (not MITRE ATT&CK).
| Category | Values |
|---|---|
| Attack types | Credential Phishing, Malware/Ransomware |
| Tactics and techniques | Impersonation: Brand, Social engineering |
Event coverage
Rule body MQL
type.inbound
// Sharepoint body content looks like this
and (
(
(
any([body.current_thread.text, body.plain.raw],
strings.ilike(.,
"*shared a file with you*",
"*shared with you*",
"*invited you to access a file*",
"*received a document*",
"*shared a document*",
"*shared a new document*",
"*shared this document*"
)
)
or any(ml.nlu_classifier(body.current_thread.text).topics,
.name == "File Sharing and Cloud Services"
and .confidence == "high"
)
//
// 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
//
or strings.ilike(beta.ocr(file.message_screenshot()).text,
"*shared a file with you*",
"*shared with you*",
"*invited you to access a file*",
"*received a document*",
"*shared a document*",
"*shared a new document*",
"*shared this document*"
)
//
// 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
//
or any(ml.nlu_classifier(beta.ocr(file.message_screenshot()).text).topics,
.name == "File Sharing and Cloud Services"
and .confidence == "high"
)
)
and (
strings.ilike(subject.subject,
"*shared*",
"*updated*",
"*sign*",
"*review*",
"*scanned*"
)
or strings.ilike(subject.subject,
"*Excel*",
"*SharePoint*",
"*PowerPoint*",
"*OneNote*"
)
or strings.ilike(sender.display_name,
"*Excel*",
"*SharePoint*",
"*PowerPoint*",
"*OneNote*"
)
or any(body.links, strings.icontains(.display_text, "OPEN DOCUMENT"))
or subject.subject is null
or subject.subject == ""
// the org as determined by NLU is in the subject
or any(ml.nlu_classifier(body.current_thread.text).entities,
.name == "org" and strings.icontains(subject.subject, .text)
)
)
)
or any([
"Contigo", // Spanish
"Avec vous", // French
"Mit Ihnen", // German
"Con te", // Italian
"Com você", // Portuguese
"Met u", // Dutch
"С вами", // Russian
"与你", // Chinese (Simplified)
"與您", // Chinese (Traditional)
"あなたと", // Japanese
"당신과", // Korean
"معك", // Arabic
"آپ کے ساتھ", // Urdu
"আপনার সাথে", // Bengali
"आपके साथ", // Hindi
"Sizinle", // Turkish // Azerbaijani
"Med dig", // Swedish
"Z tobą", // Polish
"З вами", // Ukrainian
"Önnel", // Hungarian
"Μαζί σας", // Greek
"איתך", // Hebrew
"กับคุณ", // Thai
"Với bạn", // Vietnamese
"Dengan Anda", // Indonesian // Malay
"Nawe", // Swahili
"Cu dumneavoastră", // Romanian
"S vámi", // Czech
"Med deg", // Norwegian
"S vami", // Slovak
"Med dig", // Danish
"Amb vostè", // Catalan
"Teiega", // Estonian
"S vama", // Serbian
],
strings.icontains(subject.subject, .)
)
)
// contains logic that impersonates Microsoft
and (
any(ml.logo_detect(file.message_screenshot()).brands,
strings.starts_with(.name, "Microsoft")
)
or any(attachments,
.file_type in $file_types_images
and any(ml.logo_detect(.).brands,
strings.starts_with(.name, "Microsoft")
)
)
or regex.icontains(body.html.raw,
'<table[^>]*>\s*<tbody[^>]*>\s*<tr[^>]*>\s*(<td[^>]*bgcolor="#[0-9A-Fa-f]{6}"[^>]*>\s*&nbsp;\s*</td>\s*){2}\s*</tr>\s*<tr[^>]*>\s*(<td[^>]*bgcolor="#[0-9A-Fa-f]{6}"[^>]*>\s*&nbsp;\s*</td>\s*){2}'
)
or 3 of (
regex.icontains(body.html.raw, '.password-expiration'),
regex.icontains(body.html.raw, 'color: #2672ec;'),
regex.icontains(body.html.raw, 'M\x{00AD}ic\x{00AD}ro\x{00AD}so\x{00AD}ft')
)
or 4 of (
regex.icontains(body.html.raw, 'rgb\(246,\s?93,\s?53\)'),
regex.icontains(body.html.raw, 'rgb\(129,\s?187,\s?5\)'),
regex.icontains(body.html.raw, 'rgb\(4,\s?165,\s?240\)'),
regex.icontains(body.html.raw, 'rgb\(255,\s?186,\s?7\)'),
)
or 4 of (
regex.icontains(body.html.raw,
'(background-color:|background:|bgcolor=)(.)red'
),
regex.icontains(body.html.raw, 'rgb\(19,\s?186,\s?132\)'),
regex.icontains(body.html.raw, 'rgb\(4,\s?166,\s?240\)'),
regex.icontains(body.html.raw, 'rgb\(255,\s?186,\s?8\)'),
)
or 4 of (
regex.icontains(body.html.raw, 'rgb\(245,\s?189,\s?67\)'),
regex.icontains(body.html.raw, 'rgb\(137,\s?184,\s?57\)'),
regex.icontains(body.html.raw, 'rgb\(217,\s?83,\s?51\)'),
regex.icontains(body.html.raw, 'rgb\(71,\s?160,\s?218\)')
)
or 4 of (
regex.icontains(body.html.raw, 'rgb\(73,\s?161,\s?232\)'),
regex.icontains(body.html.raw, 'rgb\(224,\s?92,\s?53\)'),
regex.icontains(body.html.raw, 'rgb\(139,\s?183,\s?55\)'),
regex.icontains(body.html.raw, 'rgb\(244,\s?188,\s?65\)')
)
or 4 of (
regex.icontains(body.html.raw, 'rgb\(213,\s?56,\s?62\)'),
regex.icontains(body.html.raw, 'rgb\(0,\s?114,\s?30\)'),
regex.icontains(body.html.raw, 'rgb\(0,\s?110,\s?173\)'),
regex.icontains(body.html.raw, 'rgb\(227,\s?209,\s?43\)'),
)
or 4 of (
regex.icontains(body.html.raw, 'rgb\(246,\s?93,\s?53\)'),
regex.icontains(body.html.raw, 'rgb\(129,\s?187,\s?5\)'),
regex.icontains(body.html.raw, 'rgb\(4,\s?165,\s?240\)'),
regex.icontains(body.html.raw, 'rgb\(255,\s?186,\s?7\)')
)
or 4 of (
regex.icontains(body.html.raw, 'rgb\(242,\s?80,\s?34\)'),
regex.icontains(body.html.raw, 'rgb\(127,\s?186,\s?0\)'),
regex.icontains(body.html.raw, 'rgb\(0,\s?164,\s?239\)'),
regex.icontains(body.html.raw, 'rgb\(255,\s?185,\s?0\)'),
)
or 4 of (
regex.icontains(body.html.raw, 'rgb\(243,\s?83,\s?37\)'),
regex.icontains(body.html.raw, 'rgb\(129,\s?188,\s?6\)'),
regex.icontains(body.html.raw, 'rgb\(5,\s?166,\s?240\)'),
regex.icontains(body.html.raw, 'rgb\(255,\s?186,\s?8\)')
)
or 4 of (
regex.icontains(body.html.raw, 'rgb\(243,\s?80,\s?34\)'),
regex.icontains(body.html.raw, 'rgb\(128,\s?187,\s?3\)'),
regex.icontains(body.html.raw, 'rgb\(3,\s?165,\s?240\)'),
regex.icontains(body.html.raw, 'rgb\(255,\s?185,\s?3\)')
)
or 4 of (
regex.icontains(body.html.raw,
'(background-color:|background:|bgcolor=)(.)?(#)?(FF1940|eb5024|F25022|FF1941|red)'
),
regex.icontains(body.html.raw,
'(background-color:|background:|bgcolor=)(.)?(#)?(36ba57|3eb55d|7db606|7FBA00|36ba58|green)'
),
regex.icontains(body.html.raw,
'(background-color:|background:|bgcolor=)(.)?#(04a1d6|04B5F0|05a1e8|00A4EF|01a4ef|04a5f0)'
),
regex.icontains(body.html.raw,
'(background-color:|background:|bgcolor=)(.)?#(FFCA07|f7b408|FFB900|FFCA08|ffb901|ffba07)'
),
)
or 4 of (
regex.icontains(body.html.raw,
'(background-color:|background:|bgcolor=)(.)?#(f65314|f65d35|49a1e8|E74F23|F35325)'
),
regex.icontains(body.html.raw,
'(background-color:|background:|bgcolor=)(.)?#(7cbf42|81bb05|e05c35|7AB206|81BC06)'
),
regex.icontains(body.html.raw,
'(background-color:|background:|bgcolor=)(.)?#(00a4ef|0078d7|8bb737|04a5f0|059EE4|05A6F0)'
),
regex.icontains(body.html.raw,
'(background-color:|background:|bgcolor=)(.)?#(ffb900|ffba07|f4bc41|F2B108|FFBA08)'
),
)
// fuzzy approach
or 4 of (
regex.icontains(body.html.raw,
'rgb\((2[1-4][0-9]|250),\s?(7[0-9]|8[0-9]|9[0-3]),\s?(3[0-9]|4[0-9]|5[0-3])\)'
),
regex.icontains(body.html.raw,
'rgb\((12[0-9]|13[0-9]),\s?(18[0-9]|190),\s?([0-9]|10)\)'
),
regex.icontains(body.html.raw,
'rgb\(([0-9]|1[0-5]),\s?(16[0-5]|166),\s?(23[0-9]|240)\)'
),
regex.icontains(body.html.raw,
'rgb\((25[0-5]),\s?(18[5-9]|19[0-9]),\s?([0-9]|10)\)'
)
)
or 4 of (
regex.icontains(body.html.raw, 'rgb\((25[0-5]),\s?(2[0-5]),\s?(6[0-4])\)'),
regex.icontains(body.html.raw, 'rgb\((6[0-2]),\s?(18[0-1]),\s?(9[0-3])\)'),
regex.icontains(body.html.raw, 'rgb\(([0-4]),\s?(18[0-1]),\s?(24[0])\)'),
regex.icontains(body.html.raw, 'rgb\((25[0-5]),\s?(20[0-2]),\s?([0-7])\)')
)
or (
any(recipients.to,
strings.icontains(body.current_thread.text,
strings.concat(.email.domain.sld,
" shared a file with you"
)
)
)
)
or (
any(recipients.to,
strings.icontains(body.current_thread.text,
strings.concat("This link will work for ",
.email.email
)
)
)
)
// contains HTML and wording from the sharepoint template
or (
(
//
// 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
//
// alt text for the global icon
length(html.xpath(body.html, '//img[@alt="permission globe icon"]').nodes) > 0
// reference to the global icon id
or length(html.xpath(body.html, '//img[@id="Picture_x0020_1"]').nodes) > 0
// a comment reference the globe icon
or strings.icontains(body.html.raw,
' <!-- Permission globe icon placeholder -->'
)
)
// the wording from the sharepoint share
and strings.contains(body.current_thread.text,
'This invite will only work for you and people with existing access'
)
)
or any(html.xpath(body.html,
"//*[contains(translate(@style, 'ABCDEF', 'abcdef'), 'color:#605e5c')]"
).nodes,
.display_text =~ "Privacy Statement"
)
or 2 of (
strings.icontains(body.current_thread.text,
'Microsoft respects your privacy'
),
strings.icontains(body.current_thread.text,
'please read our Privacy Statement'
),
strings.icontains(body.current_thread.text,
'Microsoft Corporation, One Microsoft Way, Redmond, WA 98052'
),
)
)
// Negate messages when the message-id indciates the message is from MS actual. DKIM/SPF domains can be custom and therefore are unpredictable.
and not (
strings.starts_with(headers.message_id, '<Share-')
and strings.ends_with(headers.message_id, '@odspnotify>')
)
// fake Sharepoint shares are easy to identify if there are any links
// that don't point to microsoft[.]com or *.sharepoint[.]com
and not all(body.links,
.href_url.domain.root_domain in (
"1drv.ms",
"aka.ms",
"microsoft.com",
"sharepoint.com"
)
)
// if there is a Sharepoint link, ensure the link doesn't match any org SLDs
and not any(body.links,
(
.href_url.domain.root_domain == "sharepoint.com"
and any($org_slds, . == ..href_url.domain.subdomain)
)
or .href_url.domain.domain in $tenant_domains
or any(.href_url.query_params_decoded["domain"],
strings.parse_url(strings.concat("https://", .)).domain.root_domain == "sharepoint.com"
)
)
and sender.email.domain.root_domain not in $org_domains
and sender.email.domain.root_domain not in (
"bing.com",
"microsoft.com",
"microsoftonline.com",
"microsoftsupport.com",
"microsoft365.com",
"office.com",
"onedrive.com",
"sharepointonline.com",
"yammer.com",
// ignore microsoft privacy statement links
"aka.ms"
)
and not (
(
(
strings.istarts_with(subject.subject, "RE:")
or strings.istarts_with(subject.subject, "R:")
or strings.istarts_with(subject.subject, "ODG:")
or strings.istarts_with(subject.subject, "答复:")
or strings.istarts_with(subject.subject, "AW:")
or strings.istarts_with(subject.subject, "TR:")
or strings.istarts_with(subject.subject, "FWD:")
or regex.imatch(subject.subject, '(\[[^\]]+\]\s?){0,3}(re|fwd?)\s?:')
or regex.imatch(subject.subject,
'^\[?(EXT|EXTERNAL)\]?[: ]\s*(RE|FWD?|FW|AW|TR|ODG|答复):.*'
)
)
and (
(length(headers.references) > 0 or headers.in_reply_to is not null)
// ensure that there are actual threads
and (
length(body.previous_threads) > 0
or (length(body.html.display_text) - length(body.current_thread.text)) > 200
)
)
)
)
// negate highly trusted sender domains unless they fail DMARC authentication
and (
(
sender.email.domain.root_domain in $high_trust_sender_root_domains
and not headers.auth_summary.dmarc.pass
)
or sender.email.domain.root_domain not in $high_trust_sender_root_domains
)
and (
profile.by_sender().solicited == false
or profile.by_sender_email().prevalence == "new"
or profile.by_sender_email().days_since.last_contact > 30
or (
profile.by_sender().any_messages_malicious_or_spam
and not profile.by_sender().any_messages_benign
)
// or it's a spoof of the org_domain
or (
sender.email.domain.domain in $org_domains
and not (
headers.auth_summary.spf.pass
or coalesce(headers.auth_summary.dmarc.pass, false)
)
)
)
and not profile.by_sender().any_messages_benign
Detection logic
Scope: inbound message.
This rule detects messages impersonating a Sharepoint file sharing email where no links point to known Microsoft domains.
- inbound message
any of:
all of:
any of:
any of
[body.current_thread.text, body.plain.raw]where:. matches any of 7 patterns
*shared a file with you**shared with you**invited you to access a file**received a document**shared a document**shared a new document**shared this document*
any of
ml.nlu_classifier(body.current_thread.text).topicswhere all hold:- .name is 'File Sharing and Cloud Services'
- .confidence is 'high'
beta.ocr(file.message_screenshot()).text matches any of 7 patterns
*shared a file with you**shared with you**invited you to access a file**received a document**shared a document**shared a new document**shared this document*
any of
ml.nlu_classifier(beta.ocr(file.message_screenshot()).text).topicswhere all hold:- .name is 'File Sharing and Cloud Services'
- .confidence is 'high'
any of:
subject.subject matches any of 5 patterns
*shared**updated**sign**review**scanned*
subject.subject matches any of 4 patterns
*Excel**SharePoint**PowerPoint**OneNote*
sender.display_name matches any of 4 patterns
*Excel**SharePoint**PowerPoint**OneNote*
any of
body.linkswhere:- .display_text contains 'OPEN DOCUMENT'
- subject.subject is missing
- subject.subject is ''
any of
ml.nlu_classifier(body.current_thread.text).entitieswhere all hold:- .name is 'org'
- strings.icontains(subject.subject)
any of
['Contigo', 'Avec vous', 'Mit Ihnen', 'Con te', 'Com você', 'Met u', 'С вами', '与你', '與您', 'あなたと', '당신과', 'معك', 'آپ کے ساتھ', 'আপনার সাথে', 'आपके साथ', 'Sizinle', 'Med dig', 'Z tobą', 'З вами', 'Önnel', 'Μαζί σας', 'איתך', 'กับคุณ', 'Với bạn', 'Dengan Anda', 'Nawe', 'Cu dumneavoastră', 'S vámi', 'Med deg', 'S vami', 'Med dig', 'Amb vostè', 'Teiega', 'S vama']where:- strings.icontains(subject.subject)
any of:
any of
ml.logo_detect(file.message_screenshot()).brandswhere:- .name starts with 'Microsoft'
any of
attachmentswhere all hold:- .file_type in $file_types_images
any of
ml.logo_detect(.).brandswhere:- .name starts with 'Microsoft'
- body.html.raw matches '<table[^>]*>\\s*<tbody[^>]*>\\s*<tr[^>]*>\\s*(<td[^>]*bgcolor="#[0-9A-Fa-f]{6}"[^>]*>\\s*&nbsp;\\s*</td>\\s*){2}\\s*</tr>\\s*<tr[^>]*>\\s*(<td[^>]*bgcolor="#[0-9A-Fa-f]{6}"[^>]*>\\s*&nbsp;\\s*</td>\\s*){2}'
at least 3 of:
- body.html.raw matches '.password-expiration'
- body.html.raw matches 'color: #2672ec;'
- body.html.raw matches 'M\\x{00AD}ic\\x{00AD}ro\\x{00AD}so\\x{00AD}ft'
at least 4 of 4: body.html.raw matches any of 4 patterns
rgb\(246,\s?93,\s?53\)rgb\(129,\s?187,\s?5\)rgb\(4,\s?165,\s?240\)rgb\(255,\s?186,\s?7\)
at least 4 of 4: body.html.raw matches any of 4 patterns
(background-color:|background:|bgcolor=)(.)redrgb\(19,\s?186,\s?132\)rgb\(4,\s?166,\s?240\)rgb\(255,\s?186,\s?8\)
at least 4 of 4: body.html.raw matches any of 4 patterns
rgb\(245,\s?189,\s?67\)rgb\(137,\s?184,\s?57\)rgb\(217,\s?83,\s?51\)rgb\(71,\s?160,\s?218\)
at least 4 of 4: body.html.raw matches any of 4 patterns
rgb\(73,\s?161,\s?232\)rgb\(224,\s?92,\s?53\)rgb\(139,\s?183,\s?55\)rgb\(244,\s?188,\s?65\)
at least 4 of 4: body.html.raw matches any of 4 patterns
rgb\(213,\s?56,\s?62\)rgb\(0,\s?114,\s?30\)rgb\(0,\s?110,\s?173\)rgb\(227,\s?209,\s?43\)
at least 4 of 4: body.html.raw matches any of 4 patterns
rgb\(246,\s?93,\s?53\)rgb\(129,\s?187,\s?5\)rgb\(4,\s?165,\s?240\)rgb\(255,\s?186,\s?7\)
at least 4 of 4: body.html.raw matches any of 4 patterns
rgb\(242,\s?80,\s?34\)rgb\(127,\s?186,\s?0\)rgb\(0,\s?164,\s?239\)rgb\(255,\s?185,\s?0\)
at least 4 of 4: body.html.raw matches any of 4 patterns
rgb\(243,\s?83,\s?37\)rgb\(129,\s?188,\s?6\)rgb\(5,\s?166,\s?240\)rgb\(255,\s?186,\s?8\)
at least 4 of 4: body.html.raw matches any of 4 patterns
rgb\(243,\s?80,\s?34\)rgb\(128,\s?187,\s?3\)rgb\(3,\s?165,\s?240\)rgb\(255,\s?185,\s?3\)
at least 4 of 4: body.html.raw matches any of 4 patterns
(background-color:|background:|bgcolor=)(.)?(#)?(FF1940|eb5024|F25022|FF1941|red)(background-color:|background:|bgcolor=)(.)?(#)?(36ba57|3eb55d|7db606|7FBA00|36ba58|green)(background-color:|background:|bgcolor=)(.)?#(04a1d6|04B5F0|05a1e8|00A4EF|01a4ef|04a5f0)(background-color:|background:|bgcolor=)(.)?#(FFCA07|f7b408|FFB900|FFCA08|ffb901|ffba07)
at least 4 of 4: body.html.raw matches any of 4 patterns
(background-color:|background:|bgcolor=)(.)?#(f65314|f65d35|49a1e8|E74F23|F35325)(background-color:|background:|bgcolor=)(.)?#(7cbf42|81bb05|e05c35|7AB206|81BC06)(background-color:|background:|bgcolor=)(.)?#(00a4ef|0078d7|8bb737|04a5f0|059EE4|05A6F0)(background-color:|background:|bgcolor=)(.)?#(ffb900|ffba07|f4bc41|F2B108|FFBA08)
at least 4 of 4: body.html.raw matches any of 4 patterns
rgb\((2[1-4][0-9]|250),\s?(7[0-9]|8[0-9]|9[0-3]),\s?(3[0-9]|4[0-9]|5[0-3])\)rgb\((12[0-9]|13[0-9]),\s?(18[0-9]|190),\s?([0-9]|10)\)rgb\(([0-9]|1[0-5]),\s?(16[0-5]|166),\s?(23[0-9]|240)\)rgb\((25[0-5]),\s?(18[5-9]|19[0-9]),\s?([0-9]|10)\)
at least 4 of 4: body.html.raw matches any of 4 patterns
rgb\((25[0-5]),\s?(2[0-5]),\s?(6[0-4])\)rgb\((6[0-2]),\s?(18[0-1]),\s?(9[0-3])\)rgb\(([0-4]),\s?(18[0-1]),\s?(24[0])\)rgb\((25[0-5]),\s?(20[0-2]),\s?([0-7])\)
any of
recipients.towhere:- strings.icontains(body.current_thread.text)
any of
recipients.towhere:- strings.icontains(body.current_thread.text)
all of:
any of:
- length(html.xpath(body.html, '//img[@alt="permission globe icon"]').nodes) > 0
- length(html.xpath(body.html, '//img[@id="Picture_x0020_1"]').nodes) > 0
- body.html.raw contains ' <!-- Permission globe icon placeholder -->'
- body.current_thread.text contains 'This invite will only work for you and people with existing access'
any of
html.xpath(body.html, "//*[contains(translate(@style, 'ABCDEF', 'abcdef'), 'color:#605e5c')]").nodeswhere:- .display_text is 'Privacy Statement'
at least 2 of:
- body.current_thread.text contains 'Microsoft respects your privacy'
- body.current_thread.text contains 'please read our Privacy Statement'
- body.current_thread.text contains 'Microsoft Corporation, One Microsoft Way, Redmond, WA 98052'
not:
all of:
- headers.message_id starts with '<Share-'
- headers.message_id ends with '@odspnotify>'
not:
all of
body.linkswhere:- .href_url.domain.root_domain in ('1drv.ms', 'aka.ms', 'microsoft.com', 'sharepoint.com')
not:
any of
body.linkswhere any holds:all of:
- .href_url.domain.root_domain is 'sharepoint.com'
any of
$org_sldswhere:- . is .href_url.domain.subdomain
- .href_url.domain.domain in $tenant_domains
any of
.href_url.query_params_decoded['domain']where:- strings.parse_url(strings.concat('https://', .)).domain.root_domain is 'sharepoint.com'
- sender.email.domain.root_domain not in $org_domains
- sender.email.domain.root_domain not in ('bing.com', 'microsoft.com', 'microsoftonline.com', 'microsoftsupport.com', 'microsoft365.com', 'office.com', 'onedrive.com', 'sharepointonline.com', 'yammer.com', 'aka.ms')
not:
all of:
any of:
- subject.subject starts with 'RE:'
- subject.subject starts with 'R:'
- subject.subject starts with 'ODG:'
- subject.subject starts with '答复:'
- subject.subject starts with 'AW:'
- subject.subject starts with 'TR:'
- subject.subject starts with 'FWD:'
- subject.subject matches '(\\[[^\\]]+\\]\\s?){0,3}(re|fwd?)\\s?:'
- subject.subject matches '^\\[?(EXT|EXTERNAL)\\]?[: ]\\s*(RE|FWD?|FW|AW|TR|ODG|答复):.*'
all of:
any of:
- length(headers.references) > 0
- headers.in_reply_to is set
any of:
- length(body.previous_threads) > 0
- length(body.html.display_text) - length(body.current_thread.text) > 200
any of:
all of:
- sender.email.domain.root_domain in $high_trust_sender_root_domains
not:
- headers.auth_summary.dmarc.pass
- sender.email.domain.root_domain not in $high_trust_sender_root_domains
any of:
- profile.by_sender().solicited is False
- profile.by_sender_email().prevalence is 'new'
- profile.by_sender_email().days_since.last_contact > 30
all of:
- profile.by_sender().any_messages_malicious_or_spam
not:
- profile.by_sender().any_messages_benign
all of:
- sender.email.domain.domain in $org_domains
none of:
- headers.auth_summary.spf.pass
- coalesce(headers.auth_summary.dmarc.pass)
not:
- profile.by_sender().any_messages_benign
Inspects: attachments[].file_type, body.current_thread.text, body.html, body.html.raw, body.links, body.links[].display_text, body.links[].href_url.domain.domain, body.links[].href_url.domain.root_domain, body.links[].href_url.domain.subdomain, body.links[].href_url.query_params_decoded['domain'], body.plain.raw, body.previous_threads, headers.auth_summary.dmarc.pass, headers.auth_summary.spf.pass, headers.in_reply_to, headers.message_id, headers.references, recipients.to, recipients.to[].email.domain.sld, recipients.to[].email.email, sender.display_name, sender.email.domain.domain, sender.email.domain.root_domain, subject.subject, type.inbound. Sensors: beta.ocr, file.message_screenshot, html.xpath, ml.logo_detect, ml.nlu_classifier, profile.by_sender, profile.by_sender_email, regex.icontains, regex.imatch, strings.concat, strings.contains, strings.ends_with, strings.icontains, strings.ilike, strings.istarts_with, strings.parse_url, strings.starts_with. Reference lists: $file_types_images, $high_trust_sender_root_domains, $org_domains, $org_slds, $tenant_domains.
Indicators matched (107)
| Field | Match | Value |
|---|---|---|
strings.ilike | substring | *shared a file with you* |
strings.ilike | substring | *shared with you* |
strings.ilike | substring | *invited you to access a file* |
strings.ilike | substring | *received a document* |
strings.ilike | substring | *shared a document* |
strings.ilike | substring | *shared a new document* |
strings.ilike | substring | *shared this document* |
ml.nlu_classifier(body.current_thread.text).topics[].name | equals | File Sharing and Cloud Services |
ml.nlu_classifier(body.current_thread.text).topics[].confidence | equals | high |
ml.nlu_classifier(beta.ocr(file.message_screenshot()).text).topics[].name | equals | File Sharing and Cloud Services |
ml.nlu_classifier(beta.ocr(file.message_screenshot()).text).topics[].confidence | equals | high |
strings.ilike | substring | *shared* |
95 more
strings.ilike | substring | *updated* |
strings.ilike | substring | *sign* |
strings.ilike | substring | *review* |
strings.ilike | substring | *scanned* |
strings.ilike | substring | *Excel* |
strings.ilike | substring | *SharePoint* |
strings.ilike | substring | *PowerPoint* |
strings.ilike | substring | *OneNote* |
strings.icontains | substring | OPEN DOCUMENT |
subject.subject | equals | |
ml.nlu_classifier(body.current_thread.text).entities[].name | equals | org |
strings.starts_with | prefix | Microsoft |
regex.icontains | regex | <table[^>]*>\s*<tbody[^>]*>\s*<tr[^>]*>\s*(<td[^>]*bgcolor="#[0-9A-Fa-f]{6}"[^>]*>\s*&nbsp;\s*</td>\s*){2}\s*</tr>\s*<tr[^>]*>\s*(<td[^>]*bgcolor="#[0-9A-Fa-f]{6}"[^>]*>\s*&nbsp;\s*</td>\s*){2} |
regex.icontains | regex | .password-expiration |
regex.icontains | regex | color: #2672ec; |
regex.icontains | regex | M\x{00AD}ic\x{00AD}ro\x{00AD}so\x{00AD}ft |
regex.icontains | regex | rgb\(246,\s?93,\s?53\) |
regex.icontains | regex | rgb\(129,\s?187,\s?5\) |
regex.icontains | regex | rgb\(4,\s?165,\s?240\) |
regex.icontains | regex | rgb\(255,\s?186,\s?7\) |
regex.icontains | regex | (background-color:|background:|bgcolor=)(.)red |
regex.icontains | regex | rgb\(19,\s?186,\s?132\) |
regex.icontains | regex | rgb\(4,\s?166,\s?240\) |
regex.icontains | regex | rgb\(255,\s?186,\s?8\) |
regex.icontains | regex | rgb\(245,\s?189,\s?67\) |
regex.icontains | regex | rgb\(137,\s?184,\s?57\) |
regex.icontains | regex | rgb\(217,\s?83,\s?51\) |
regex.icontains | regex | rgb\(71,\s?160,\s?218\) |
regex.icontains | regex | rgb\(73,\s?161,\s?232\) |
regex.icontains | regex | rgb\(224,\s?92,\s?53\) |
regex.icontains | regex | rgb\(139,\s?183,\s?55\) |
regex.icontains | regex | rgb\(244,\s?188,\s?65\) |
regex.icontains | regex | rgb\(213,\s?56,\s?62\) |
regex.icontains | regex | rgb\(0,\s?114,\s?30\) |
regex.icontains | regex | rgb\(0,\s?110,\s?173\) |
regex.icontains | regex | rgb\(227,\s?209,\s?43\) |
regex.icontains | regex | rgb\(242,\s?80,\s?34\) |
regex.icontains | regex | rgb\(127,\s?186,\s?0\) |
regex.icontains | regex | rgb\(0,\s?164,\s?239\) |
regex.icontains | regex | rgb\(255,\s?185,\s?0\) |
regex.icontains | regex | rgb\(243,\s?83,\s?37\) |
regex.icontains | regex | rgb\(129,\s?188,\s?6\) |
regex.icontains | regex | rgb\(5,\s?166,\s?240\) |
regex.icontains | regex | rgb\(243,\s?80,\s?34\) |
regex.icontains | regex | rgb\(128,\s?187,\s?3\) |
regex.icontains | regex | rgb\(3,\s?165,\s?240\) |
regex.icontains | regex | rgb\(255,\s?185,\s?3\) |
regex.icontains | regex | (background-color:|background:|bgcolor=)(.)?(#)?(FF1940|eb5024|F25022|FF1941|red) |
regex.icontains | regex | (background-color:|background:|bgcolor=)(.)?(#)?(36ba57|3eb55d|7db606|7FBA00|36ba58|green) |
regex.icontains | regex | (background-color:|background:|bgcolor=)(.)?#(04a1d6|04B5F0|05a1e8|00A4EF|01a4ef|04a5f0) |
regex.icontains | regex | (background-color:|background:|bgcolor=)(.)?#(FFCA07|f7b408|FFB900|FFCA08|ffb901|ffba07) |
regex.icontains | regex | (background-color:|background:|bgcolor=)(.)?#(f65314|f65d35|49a1e8|E74F23|F35325) |
regex.icontains | regex | (background-color:|background:|bgcolor=)(.)?#(7cbf42|81bb05|e05c35|7AB206|81BC06) |
regex.icontains | regex | (background-color:|background:|bgcolor=)(.)?#(00a4ef|0078d7|8bb737|04a5f0|059EE4|05A6F0) |
regex.icontains | regex | (background-color:|background:|bgcolor=)(.)?#(ffb900|ffba07|f4bc41|F2B108|FFBA08) |
regex.icontains | regex | rgb\((2[1-4][0-9]|250),\s?(7[0-9]|8[0-9]|9[0-3]),\s?(3[0-9]|4[0-9]|5[0-3])\) |
regex.icontains | regex | rgb\((12[0-9]|13[0-9]),\s?(18[0-9]|190),\s?([0-9]|10)\) |
regex.icontains | regex | rgb\(([0-9]|1[0-5]),\s?(16[0-5]|166),\s?(23[0-9]|240)\) |
regex.icontains | regex | rgb\((25[0-5]),\s?(18[5-9]|19[0-9]),\s?([0-9]|10)\) |
regex.icontains | regex | rgb\((25[0-5]),\s?(2[0-5]),\s?(6[0-4])\) |
regex.icontains | regex | rgb\((6[0-2]),\s?(18[0-1]),\s?(9[0-3])\) |
regex.icontains | regex | rgb\(([0-4]),\s?(18[0-1]),\s?(24[0])\) |
regex.icontains | regex | rgb\((25[0-5]),\s?(20[0-2]),\s?([0-7])\) |
strings.icontains | substring | <!-- Permission globe icon placeholder --> |
strings.contains | substring | This invite will only work for you and people with existing access |
html.xpath(body.html, "//*[contains(translate(@style, 'ABCDEF', 'abcdef'), 'color:#605e5c')]").nodes[].display_text | equals | Privacy Statement |
strings.icontains | substring | Microsoft respects your privacy |
strings.icontains | substring | please read our Privacy Statement |
strings.icontains | substring | Microsoft Corporation, One Microsoft Way, Redmond, WA 98052 |
strings.starts_with | prefix | <Share- |
strings.ends_with | suffix | @odspnotify> |
body.links[].href_url.domain.root_domain | member | 1drv.ms |
body.links[].href_url.domain.root_domain | member | aka.ms |
body.links[].href_url.domain.root_domain | member | microsoft.com |
body.links[].href_url.domain.root_domain | member | sharepoint.com |
body.links[].href_url.domain.root_domain | equals | sharepoint.com |
sender.email.domain.root_domain | member | bing.com |
sender.email.domain.root_domain | member | microsoft.com |
sender.email.domain.root_domain | member | microsoftonline.com |
sender.email.domain.root_domain | member | microsoftsupport.com |
sender.email.domain.root_domain | member | microsoft365.com |
sender.email.domain.root_domain | member | office.com |
sender.email.domain.root_domain | member | onedrive.com |
sender.email.domain.root_domain | member | sharepointonline.com |
sender.email.domain.root_domain | member | yammer.com |
sender.email.domain.root_domain | member | aka.ms |
strings.istarts_with | prefix | RE: |
strings.istarts_with | prefix | R: |
strings.istarts_with | prefix | ODG: |
strings.istarts_with | prefix | 答复: |
strings.istarts_with | prefix | AW: |
strings.istarts_with | prefix | TR: |
strings.istarts_with | prefix | FWD: |
regex.imatch | regex | (\[[^\]]+\]\s?){0,3}(re|fwd?)\s?: |
regex.imatch | regex | ^\[?(EXT|EXTERNAL)\]?[: ]\s*(RE|FWD?|FW|AW|TR|ODG|答复):.* |