Skip to content

Commit 77afc12

Browse files
[PR #3491] added rule: Brand impersonation: Microsoft
1 parent 8dfa0d6 commit 77afc12

File tree

1 file changed

+151
-0
lines changed

1 file changed

+151
-0
lines changed
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
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+
"microsoft teams.*meeting (recording|event)"
32+
)
33+
or strings.ilike(sender.display_name, '*new activity in Teams*')
34+
or strings.icontains(strings.replace_confusables(sender.display_name),
35+
'microsoft advertising support'
36+
)
37+
or subject.subject =~ 'Offline Message in Teams'
38+
or strings.ilike(subject.subject, '*Teams Sent A Message')
39+
or sender.display_name in~ (
40+
'Microsoft Partner Network',
41+
'Microsoft Advertising',
42+
'Microsoft',
43+
'Microsoft Feedback',
44+
'Microsoft account team',
45+
'Microsoft Support',
46+
'Microsoft 365 Message center',
47+
'Microsoft Azure'
48+
)
49+
or regex.icontains(sender.display_name,
50+
"[MḾṀṂⱮМḿṁṃᵯⱮ𝐌𝑀][iíìîïīĭĩįıɪɨᵢⁱ𝐢𝑖][cćĉċčçƈȼ𝐜𝑐][rŕŗřȑȓɾᵣⁿʳ𝐫𝑟][oóòôõöøōŏőɵₒᵒº𝐨𝑜][sśŝšșşʂᵴˢˢ𝐬𝑠][oóòôõöøōŏőɵₒᵒº𝐨𝑜][fḟƒᵮᶠ𝐟𝑓][tťțţᵵₜᵗᵗ𝐭𝑡]"
51+
)
52+
or regex.icontains(sender.display_name,
53+
"[MḾṀṂⱮМḿṁṃᵯⱮ𝐌𝑀][iíìîïīĭĩįıɪɨᵢⁱ𝐢𝑖][rŕŗřȑȓɾᵣⁿʳ𝐫𝑟][cćĉċčçƈȼ𝐜𝑐][oóòôõöøōŏőɵₒᵒº𝐨𝑜][sśŝšșşʂᵴˢˢ𝐬𝑠][oóòôõöøōŏőɵₒᵒº𝐨𝑜][fḟƒᵮᶠ𝐟𝑓][tťțţᵵₜᵗᵗ𝐭𝑡]" // [sic]
54+
)
55+
)
56+
and (
57+
sender.email.domain.root_domain not in~ (
58+
'microsoft.com',
59+
'microsoftstoreemail.com',
60+
'microsoftsupport.com',
61+
'office.com',
62+
'teams-events.com',
63+
'qualtrics-research.com',
64+
'skype.com',
65+
'azureadnotifications.us',
66+
'microsoftonline.us',
67+
'mail.microsoft',
68+
'office365.com',
69+
'microsoftadvertising.com'
70+
)
71+
or not sender.email.domain.valid
72+
)
73+
and not (
74+
sender.email.domain.domain in~ (
75+
'microsoft.regsvc.com',
76+
'microsoft.onmicrosoft.com'
77+
)
78+
and headers.auth_summary.dmarc.pass
79+
)
80+
and (
81+
(
82+
profile.by_sender().prevalence in ("new", "outlier")
83+
or (
84+
profile.by_sender().any_messages_malicious_or_spam
85+
and not profile.by_sender().any_messages_benign
86+
)
87+
)
88+
or not sender.email.domain.valid
89+
)
90+
// negate legitimate Office 365 bouncebacks
91+
and not (
92+
all(attachments,
93+
.content_type in ("message/delivery-status", "message/rfc822")
94+
)
95+
and (
96+
sender.email.local_part in ('postmaster', 'mailer-daemon')
97+
or strings.starts_with(sender.email.local_part, 'microsoftexchange')
98+
)
99+
and (
100+
strings.contains(subject.subject, 'Undeliverable:')
101+
or strings.contains(subject.subject, 'Blocked:')
102+
or strings.contains(subject.subject, 'Não é possível entregar:')
103+
)
104+
)
105+
106+
// negate other legitimate MS notifications
107+
and not (
108+
length(body.links) > 0
109+
and all(body.links,
110+
.href_url.domain.root_domain in (
111+
"aka.ms",
112+
"microsoftonline.com",
113+
"microsoft.com"
114+
)
115+
or .href_url.domain.tld == "microsoft"
116+
)
117+
and headers.auth_summary.dmarc.pass
118+
)
119+
120+
// negate highly trusted sender domains unless they fail DMARC authentication
121+
and (
122+
(
123+
sender.email.domain.root_domain in $high_trust_sender_root_domains
124+
and not headers.auth_summary.dmarc.pass
125+
)
126+
or sender.email.domain.root_domain not in $high_trust_sender_root_domains
127+
)
128+
// not a newsletter or advertisement
129+
and not any(beta.ml_topic(body.current_thread.text).topics,
130+
.name in ("Newsletters and Digests")
131+
and .confidence == "high"
132+
and (
133+
any(body.links,
134+
strings.icontains(.display_text, "unsubscribe")
135+
and (strings.icontains(.href_url.path, "unsubscribe"))
136+
)
137+
)
138+
)
139+
140+
attack_types:
141+
- "Credential Phishing"
142+
tactics_and_techniques:
143+
- "Impersonation: Brand"
144+
- "Social engineering"
145+
detection_methods:
146+
- "Content analysis"
147+
- "Sender analysis"
148+
id: "5fb10cd8-9645-56d7-9789-a6f5583ac666"
149+
og_id: "6e2f04e6-b607-5e36-9015-d39c98265579"
150+
testing_pr: 3491
151+
testing_sha: 329f1049e1e2a651b5c1224897941c2102d35061

0 commit comments

Comments
 (0)