Skip to content

Commit 35266c2

Browse files
[PR #3069] changed rule: Brand impersonation: Microsoft
1 parent 3935efd commit 35266c2

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
name: "Brand impersonation: Microsoft"
2+
description: |
3+
Impersonation of the Microsoft brand.
4+
references:
5+
- "https://www.itproportal.com/news/cybercriminals-launch-targeted-phishing-attacks-against-microsoft-365-users/"
6+
- "https://cofense.com/blog/office-365-phishing-variant/"
7+
- "https://www.helpnetsecurity.com/2020/05/04/fake-microsoft-teams-notification/"
8+
type: "rule"
9+
severity: "high"
10+
authors:
11+
- twitter: "amitchell516"
12+
source: |
13+
type.inbound
14+
and (
15+
length(body.links) < 30
16+
or sender.email.local_part == "newsletter" and length(body.links) < 5
17+
)
18+
and (
19+
(
20+
strings.ilike(subject.subject, '*Microsoft 365*')
21+
and strings.ilike(subject.subject, '*is expired*')
22+
)
23+
or (
24+
// should catch any instance of the word "expired"
25+
strings.ilike(body.current_thread.text, "*expir*")
26+
and strings.ilike(body.current_thread.text, "*password*")
27+
and strings.ilike(body.current_thread.text, "*microsoft*")
28+
)
29+
or regex.icontains(body.current_thread.text,
30+
".*reach you.{0,20}Microsoft Teams"
31+
)
32+
or strings.ilike(sender.display_name, '*new activity in Teams*')
33+
or strings.icontains(strings.replace_confusables(sender.display_name),
34+
'microsoft advertising support'
35+
)
36+
or subject.subject =~ 'Offline Message in Teams'
37+
or strings.ilike(subject.subject, '*Teams Sent A Message')
38+
or sender.display_name in~ (
39+
'Microsoft Partner Network',
40+
'Microsoft Advertising',
41+
'Microsoft',
42+
'Microsoft Feedback',
43+
'Microsoft account team',
44+
'Microsoft Support',
45+
'Microsoft 365 Message center',
46+
'Microsoft Azure'
47+
)
48+
or regex.icontains(sender.display_name,
49+
"[MḾṀṂⱮМḿṁṃᵯⱮ𝐌𝑀][iíìîïīĭĩįıɪɨᵢⁱ𝐢𝑖][cćĉċčçƈȼ𝐜𝑐][rŕŗřȑȓɾᵣⁿʳ𝐫𝑟][oóòôõöøōŏőɵₒᵒº𝐨𝑜][sśŝšșşʂᵴˢˢ𝐬𝑠][oóòôõöøōŏőɵₒᵒº𝐨𝑜][fḟƒᵮᶠ𝐟𝑓][tťțţᵵₜᵗᵗ𝐭𝑡]"
50+
)
51+
or regex.icontains(sender.display_name,
52+
"[MḾṀṂⱮМḿṁṃᵯⱮ𝐌𝑀][iíìîïīĭĩįıɪɨᵢⁱ𝐢𝑖][rŕŗřȑȓɾᵣⁿʳ𝐫𝑟][cćĉċčçƈȼ𝐜𝑐][oóòôõöøōŏőɵₒᵒº𝐨𝑜][sśŝšșşʂᵴˢˢ𝐬𝑠][oóòôõöøōŏőɵₒᵒº𝐨𝑜][fḟƒᵮᶠ𝐟𝑓][tťțţᵵₜᵗᵗ𝐭𝑡]" // [sic]
53+
)
54+
)
55+
and sender.email.domain.root_domain not in~ (
56+
'microsoft.com',
57+
'microsoftstoreemail.com',
58+
'microsoftsupport.com',
59+
'office.com',
60+
'teams-events.com',
61+
'qualtrics-research.com',
62+
'skype.com',
63+
'azureadnotifications.us',
64+
'microsoftonline.us',
65+
'mail.microsoft',
66+
'office365.com'
67+
)
68+
and not (
69+
sender.email.domain.domain in~ (
70+
'microsoft.regsvc.com',
71+
'microsoft.onmicrosoft.com'
72+
)
73+
and headers.auth_summary.dmarc.pass
74+
)
75+
and (
76+
profile.by_sender().prevalence in ("new", "outlier")
77+
or (
78+
profile.by_sender().any_messages_malicious_or_spam
79+
and not profile.by_sender().any_messages_benign
80+
)
81+
)
82+
83+
// negate legitimate Office 365 bouncebacks
84+
and not (
85+
all(attachments,
86+
.content_type in ("message/delivery-status", "message/rfc822")
87+
)
88+
and (
89+
sender.email.local_part in ('postmaster', 'mailer-daemon')
90+
or strings.starts_with(sender.email.local_part, 'microsoftexchange')
91+
)
92+
and strings.contains(subject.subject, 'Undeliverable:')
93+
)
94+
95+
// negate other legitimate MS notifications
96+
and not (
97+
length(body.links) > 0
98+
and all(body.links,
99+
.href_url.domain.root_domain in (
100+
"aka.ms",
101+
"microsoftonline.com",
102+
"microsoft.com"
103+
)
104+
or .href_url.domain.tld == "microsoft"
105+
)
106+
and headers.auth_summary.dmarc.pass
107+
)
108+
109+
// negate highly trusted sender domains unless they fail DMARC authentication
110+
and (
111+
(
112+
sender.email.domain.root_domain in $high_trust_sender_root_domains
113+
and not headers.auth_summary.dmarc.pass
114+
)
115+
or sender.email.domain.root_domain not in $high_trust_sender_root_domains
116+
)
117+
// not a newsletter or advertisement
118+
and not any(beta.ml_topic(body.current_thread.text).topics,
119+
.name in ("Newsletters and Digests")
120+
and .confidence == "high"
121+
and (
122+
any(body.links,
123+
strings.icontains(.display_text, "unsubscribe")
124+
and (strings.icontains(.href_url.path, "unsubscribe"))
125+
)
126+
)
127+
)
128+
129+
attack_types:
130+
- "Credential Phishing"
131+
tactics_and_techniques:
132+
- "Impersonation: Brand"
133+
- "Social engineering"
134+
detection_methods:
135+
- "Content analysis"
136+
- "Sender analysis"
137+
id: "f469bb2a-5a92-52f5-936f-431010f5a2eb"
138+
og_id: "6e2f04e6-b607-5e36-9015-d39c98265579"
139+
testing_pr: 3069
140+
testing_sha: 23619626686cf560676f4a54ad720f89bd3c02a8

0 commit comments

Comments
 (0)