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