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