Skip to content

Commit d59f95c

Browse files
[PR sublime-security#3733] added rule: Brand impersonation: Microsoft with embedded logo and credential theft language
1 parent d72053a commit d59f95c

File tree

1 file changed

+142
-0
lines changed

1 file changed

+142
-0
lines changed
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
name: "Brand impersonation: Microsoft with embedded logo and credential theft language"
2+
description: "This rule detects messages impersonating Microsoft via a logo and contains credential theft language. From a new and unsolicited sender."
3+
type: "rule"
4+
severity: "high"
5+
source: |
6+
type.inbound
7+
and (
8+
(
9+
length(attachments) > 0
10+
and all(attachments,
11+
.file_type in $file_types_images or .file_type == "pdf"
12+
)
13+
)
14+
or length(attachments) == 0
15+
)
16+
and any(ml.logo_detect(file.message_screenshot()).brands,
17+
strings.starts_with(.name, "Microsoft")
18+
)
19+
and (
20+
any(ml.nlu_classifier(body.current_thread.text).intents,
21+
.name == "cred_theft" and .confidence in ("medium", "high")
22+
)
23+
or (
24+
length(body.current_thread.text) == 0
25+
//
26+
// This rule makes use of a beta feature and is subject to change without notice
27+
// using the beta feature in custom rules is not suggested until it has been formally released
28+
//
29+
and any(ml.nlu_classifier(beta.ocr(file.message_screenshot()).text).intents,
30+
.name == "cred_theft" and .confidence in ("medium", "high")
31+
)
32+
)
33+
)
34+
and (
35+
not (
36+
headers.auth_summary.dmarc.pass
37+
and headers.auth_summary.dmarc.details.from.domain in (
38+
"azureadnotifications.us",
39+
"microsoft.com",
40+
"sharepointonline.com",
41+
"cloudappsecurity.com",
42+
"microsoftsupport.com",
43+
"microsoft.onmicrosoft.com",
44+
"yammer.com"
45+
)
46+
)
47+
or headers.auth_summary.dmarc.pass is null
48+
or headers.auth_summary.dmarc.details.from.domain is null
49+
)
50+
and not (
51+
sender.email.domain.domain == "planner.office365.com"
52+
and headers.return_path.email == "[email protected]"
53+
and headers.auth_summary.dmarc.details.from.root_domain == "office365.com"
54+
)
55+
// Microsoft has some legit onmicrosoft domains...
56+
and not (
57+
sender.email.domain.domain == "microsoft.onmicrosoft.com"
58+
and headers.auth_summary.spf.pass
59+
and all(body.links, .href_url.domain.root_domain == "microsoft.com")
60+
)
61+
// message is not from sharepoint actual (additional check in case DMARC check above fails to bail out)
62+
and not (
63+
(
64+
strings.ilike(headers.message_id,
65+
'<Share-*',
66+
'<MassDelete-*',
67+
'<FileDeleteAfterExpiration-*',
68+
'<NotifyOwnerSharedWithExternalUsers*',
69+
'<OneTimePasscode*'
70+
)
71+
and strings.ends_with(headers.message_id, '@odspnotify>')
72+
)
73+
or (
74+
any(headers.hops,
75+
any(.fields,
76+
.name == "X-Google-Original-Message-ID"
77+
and strings.ilike(.value,
78+
'<Share-*',
79+
'<MassDelete-*',
80+
'<FileDeleteAfterExpiration-*',
81+
'<NotifyOwnerSharedWithExternalUsers*',
82+
'<OneTimePasscode*'
83+
)
84+
and strings.ends_with(.value, '@odspnotify>')
85+
)
86+
)
87+
)
88+
)
89+
and (
90+
not profile.by_sender().solicited
91+
or (
92+
profile.by_sender().any_messages_malicious_or_spam
93+
and not profile.by_sender().any_messages_benign
94+
)
95+
)
96+
97+
// negate org domains unless they fail DMARC authentication
98+
and (
99+
(
100+
sender.email.domain.root_domain in $org_domains
101+
and (
102+
not headers.auth_summary.dmarc.pass
103+
// MS quarantine digest emails from an org domain are router "internally" to MS, therefore, there is no authentication information
104+
or not (
105+
headers.auth_summary.dmarc.pass is null
106+
and all(headers.domains,
107+
.root_domain in ("outlook.com", "office365.com")
108+
)
109+
// typical emails from freemail Outlook accounts are from prod.outlook.com
110+
and strings.ends_with(headers.message_id, "protection.outlook.com>")
111+
)
112+
)
113+
)
114+
or sender.email.domain.root_domain not in $org_domains
115+
)
116+
117+
// negate highly trusted sender domains unless they fail DMARC authentication
118+
and (
119+
(
120+
sender.email.domain.root_domain in $high_trust_sender_root_domains
121+
and not headers.auth_summary.dmarc.pass
122+
)
123+
or sender.email.domain.root_domain not in $high_trust_sender_root_domains
124+
)
125+
and not (
126+
profile.by_sender().any_messages_benign
127+
and coalesce(headers.auth_summary.dmarc.pass, false)
128+
)
129+
130+
attack_types:
131+
- "Credential Phishing"
132+
tactics_and_techniques:
133+
- "Impersonation: Brand"
134+
- "Social engineering"
135+
detection_methods:
136+
- "Computer Vision"
137+
- "Natural Language Understanding"
138+
- "Sender analysis"
139+
id: "2e22e1b3-a8d6-536b-8798-ec38ff1eac0a"
140+
og_id: "3ee9ef3d-8ec4-5df0-a8a2-5c6d037eb17a"
141+
testing_pr: 3733
142+
testing_sha: 59f9a78d98074cb02a734ac74ffef86b875cb1bd

0 commit comments

Comments
 (0)