Skip to content

Commit a5c7bf5

Browse files
[PR #3477] added rule: Brand impersonation: Adobe with suspicious language and link
1 parent dca984a commit a5c7bf5

File tree

1 file changed

+153
-0
lines changed

1 file changed

+153
-0
lines changed
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
name: "Brand impersonation: Adobe with suspicious language and link"
2+
description: "Email contains an Adobe logo, at least one link, and suspicious link language from a new sender."
3+
type: "rule"
4+
severity: "high"
5+
source: |
6+
type.inbound
7+
// all attachments are images or 0 attachments
8+
and (
9+
(
10+
length(attachments) > 0
11+
and all(attachments, .file_type in $file_types_images)
12+
)
13+
or length(attachments) == 0
14+
)
15+
and length(body.links) > 0
16+
and (
17+
any(ml.logo_detect(file.message_screenshot()).brands,
18+
.name == "Adobe" and .confidence in ("high")
19+
)
20+
or (
21+
strings.icontains(body.current_thread.text, "adobe")
22+
and (
23+
// leverage topic analysis to pick up on themes
24+
(
25+
length(ml.nlu_classifier(body.current_thread.text).topics) == 1
26+
and all(ml.nlu_classifier(body.current_thread.text).topics,
27+
.name == "File Sharing and Cloud Services"
28+
and .confidence != "low"
29+
)
30+
)
31+
// keywords if topic anlayis doesn't match
32+
or strings.icontains(body.current_thread.text, 'review the document')
33+
or strings.icontains(body.current_thread.text, 'review and sign')
34+
or strings.icontains(body.current_thread.text, 'access file')
35+
or strings.icontains(body.current_thread.text, 'pending document')
36+
)
37+
and length(body.current_thread.text) < 2000
38+
)
39+
)
40+
and (
41+
(
42+
//
43+
// This rule makes use of a beta feature and is subject to change without notice
44+
// using the beta feature in custom rules is not suggested until it has been formally released
45+
//
46+
strings.ilike(beta.ocr(file.message_screenshot()).text,
47+
"*review*",
48+
"*sign*",
49+
"*view*",
50+
"open",
51+
"*completed document*",
52+
"*open agreement*",
53+
"*open document*"
54+
)
55+
and not strings.ilike(beta.ocr(file.message_screenshot()).text,
56+
"*view this email*",
57+
"*view*browser*",
58+
"*view online*",
59+
"*business review*"
60+
)
61+
)
62+
or any(body.links,
63+
strings.ilike(.display_text,
64+
"*review*",
65+
"*sign*",
66+
"*view*",
67+
"open",
68+
"*completed document*",
69+
"*open agreement*",
70+
"*open document*",
71+
"*continue*"
72+
)
73+
and not strings.ilike(.display_text,
74+
"*view this email*",
75+
"*view*browser*",
76+
"*view online*"
77+
)
78+
)
79+
)
80+
and (
81+
(
82+
(
83+
length(headers.references) > 0
84+
or not any(headers.hops,
85+
any(.fields, strings.ilike(.name, "In-Reply-To"))
86+
)
87+
)
88+
and not (
89+
(
90+
strings.istarts_with(subject.subject, "RE:")
91+
or strings.istarts_with(subject.subject, "RES:")
92+
or strings.istarts_with(subject.subject, "R:")
93+
or strings.istarts_with(subject.subject, "ODG:")
94+
or strings.istarts_with(subject.subject, "答复:")
95+
or strings.istarts_with(subject.subject, "AW:")
96+
or strings.istarts_with(subject.subject, "TR:")
97+
or strings.istarts_with(subject.subject, "FWD:")
98+
or regex.imatch(subject.subject,
99+
'^\[?/{0,2}(EXT|EXTERNAL)\]?/{0,2}[: ]\s*(RE|FWD?|FW|AW|TR|ODG|答复):.*'
100+
)
101+
)
102+
)
103+
)
104+
or length(headers.references) == 0
105+
)
106+
and not any(ml.nlu_classifier(body.current_thread.text).topics,
107+
.name in ("Advertising and Promotions", "Events and Webinars")
108+
and .confidence != "low"
109+
)
110+
and (
111+
(
112+
headers.auth_summary.spf.pass
113+
and headers.auth_summary.dmarc.pass
114+
and (
115+
not profile.by_sender().solicited
116+
or profile.by_sender().any_messages_malicious_or_spam
117+
or profile.by_sender_email().days_since.last_contact > 14
118+
)
119+
and not profile.by_sender().any_messages_benign
120+
and not sender.email.domain.root_domain in (
121+
"adobe-events.com",
122+
"frame.io",
123+
"workfront.com"
124+
)
125+
)
126+
or not headers.auth_summary.spf.pass
127+
or headers.auth_summary.spf.pass is null
128+
or not headers.auth_summary.dmarc.pass
129+
or headers.auth_summary.dmarc.pass is null
130+
)
131+
// negate highly trusted sender domains unless they fail DMARC authentication
132+
and (
133+
(
134+
sender.email.domain.root_domain in $high_trust_sender_root_domains
135+
and not headers.auth_summary.dmarc.pass
136+
)
137+
or sender.email.domain.root_domain not in $high_trust_sender_root_domains
138+
)
139+
140+
attack_types:
141+
- "Credential Phishing"
142+
tactics_and_techniques:
143+
- "Impersonation: Brand"
144+
- "Social engineering"
145+
detection_methods:
146+
- "Computer Vision"
147+
- "Content analysis"
148+
- "Header analysis"
149+
- "Sender analysis"
150+
id: "ef29ca07-95f6-5b35-9845-b7222394a146"
151+
og_id: "32cc8bf1-f4d7-549f-a970-eade24b7c6ae"
152+
testing_pr: 3477
153+
testing_sha: 3906e4a4bcf5b118eed91aad5e7df4df653ff8b9

0 commit comments

Comments
 (0)