Brand impersonation: Wix
Detects messages impersonating Wix by using similar display names or domain names, while not originating from legitimate WIX domains or failing DMARC authentication from trusted senders.
Sublime rule (View on GitHub)
1name: "Brand impersonation: Wix"
2description: "Detects messages impersonating Wix by using similar display names or domain names, while not originating from legitimate WIX domains or failing DMARC authentication from trusted senders."
3type: "rule"
4severity: "medium"
5source: |
6 type.inbound
7 and (
8 (
9 regex.imatch(strings.replace_confusables(sender.display_name),
10 'w[i1|]x\b.*'
11 )
12 or strings.ilike(sender.email.domain.domain, 'WIX')
13 )
14 or (
15 strings.icontains(sender.display_name, 'wix')
16 and regex.icontains(body.current_thread.text,
17 "Domain Expir(?:ation|y) Not(?:ice|ification)"
18 )
19 and strings.icontains(body.current_thread.text, "will be deactivated")
20 )
21 or regex.icontains(sender.display_name, 'w\x{206E}+i\x{206E}+x')
22 // Wix address from footer
23 or 2 of (
24 strings.icontains(body.current_thread.text, 'Wix.com'),
25 strings.icontains(body.current_thread.text, '100 Gansevoort St'),
26 strings.icontains(body.current_thread.text, 'New York, NY 10014')
27 )
28 or (
29 any(ml.nlu_classifier(body.current_thread.text).entities,
30 .name in ("sender", "org")
31 and (
32 regex.imatch(.text, 'wix\b.*')
33 or regex.icontains(.text, 'w[il]x.?team')
34 )
35 )
36 and any(ml.nlu_classifier(body.current_thread.text).intents,
37 .name == "cred_theft" and .confidence != "low"
38 )
39 )
40 or regex.icontains(body.current_thread.text, '©\s*(?:\d+)\s*wix(?:\b|\.com)')
41 )
42 and not (
43 (
44 sender.email.domain.root_domain in~ (
45 "wix.com",
46 "wixforms.com",
47 "wixemails.com",
48 "wixanswers.com",
49 "wix-groups.com",
50 "ascendbywix.com"
51 )
52 and headers.auth_summary.dmarc.pass
53 )
54 )
55 // negation for messages traversing wix.com
56 and not (
57 any(headers.domains, .root_domain in ("wix.com", "ascendbywix.com"))
58 and headers.auth_summary.spf.pass
59 and headers.auth_summary.dmarc.pass
60 )
61 and not profile.by_sender().solicited
62 // negate highly trusted sender domains unless they fail DMARC authentication
63 and not (
64 sender.email.domain.root_domain in $high_trust_sender_root_domains
65 and coalesce(headers.auth_summary.dmarc.pass, false)
66 )
67
68attack_types:
69 - "Credential Phishing"
70tactics_and_techniques:
71 - "Impersonation: Brand"
72 - "Lookalike domain"
73 - "Social engineering"
74detection_methods:
75 - "Header analysis"
76 - "Sender analysis"
77id: "45e7b99f-94fc-5ae4-b5c9-ebfb59b04fe9"