Brand impersonation: DHL
Impersonation of the shipping provider DHL.
Sublime rule (View on GitHub)
1name: "Brand impersonation: DHL"
2description: |
3 Impersonation of the shipping provider DHL.
4references:
5 - "https://www.helpnetsecurity.com/2020/08/21/q2-2020-email-security-trends/"
6 - "https://www.dhl.com/ca-en/home/footer/fraud-awareness.html"
7type: "rule"
8severity: "low"
9source: |
10 type.inbound
11 and (
12 regex.icontains(sender.display_name, '\bDHL\b')
13 or (
14 strings.ilike(sender.email.domain.domain, '*DHL*')
15 and length(sender.email.domain.domain) < 15
16 )
17 or strings.ilike(subject.subject, '*DHL notification*')
18 or regex.icontains(subject.subject, 'dhl? express')
19 or regex.contains(subject.subject, '\bD.{0,2}H.{0,2}L.{0,2}\b')
20 or (
21 any(ml.nlu_classifier(body.current_thread.text).topics,
22 .name == "Shipping and Package" and .confidence == "high"
23 )
24 and (
25 strings.contains(body.current_thread.text, 'DHL ')
26 //
27 // This rule makes use of a beta feature and is subject to change without notice
28 // using the beta feature in custom rules is not suggested until it has been formally released
29 //
30 or strings.istarts_with(beta.ocr(file.message_screenshot()).text, 'DHL')
31 )
32 )
33 )
34 and (
35 any(ml.nlu_classifier(body.current_thread.text).entities, .name == "urgency")
36 or any(ml.nlu_classifier(body.current_thread.text).entities,
37 .name == "org"
38 and (
39 .text =~ "DHL"
40 or .text =~ "DHL Express"
41 or strings.istarts_with(.text, "DHL International")
42 )
43 )
44 or any(ml.logo_detect(file.message_screenshot()).brands,
45 .name == "DHL" and .confidence in ("medium", "high")
46 )
47 or regex.icontains(body.current_thread.text, '\bDHL\b')
48 // it contains a QR code
49 or (
50 //
51 // This rule makes use of a beta feature and is subject to change without notice
52 // using the beta feature in custom rules is not suggested until it has been formally released
53 //
54 beta.scan_qr(file.message_screenshot()).found
55 and any(beta.scan_qr(file.message_screenshot()).items, .type == "url")
56 )
57 //
58 // This rule makes use of a beta feature and is subject to change without notice
59 // using the beta feature in custom rules is not suggested until it has been formally released
60 //
61 or strings.ilike(beta.ocr(file.message_screenshot()).text,
62 "*package*",
63 "*parcel*",
64 "*shipping*",
65 "*delivery*",
66 "*track*"
67 )
68 or strings.ilike(body.current_thread.text,
69 "*package*",
70 "*parcel*",
71 "*shipping*",
72 "*delivery*",
73 "*track*"
74 )
75 )
76 and (
77 (
78 (length(headers.references) > 0 or headers.in_reply_to is null)
79 and not (
80 (
81 strings.istarts_with(subject.subject, "RE:")
82 or strings.istarts_with(subject.subject, "RES:")
83 or strings.istarts_with(subject.subject, "R:")
84 or strings.istarts_with(subject.subject, "ODG:")
85 or strings.istarts_with(subject.subject, "答复:")
86 or strings.istarts_with(subject.subject, "AW:")
87 or strings.istarts_with(subject.subject, "TR:")
88 or strings.istarts_with(subject.subject, "FWD:")
89 or regex.imatch(subject.subject, '(\[[^\]]+\]\s?){0,3}(re|fwd?)\s?:')
90 )
91 )
92 )
93 or length(headers.references) == 0
94 )
95 and sender.email.domain.root_domain not in~ (
96 'dhl.com',
97 'dhl-news.com',
98 'bdhllp.com',
99 'dhlecommerce.co.uk',
100 'dhlparcel.co.uk',
101 'dhlecs.com',
102 'dhl.co.uk',
103 'dhl.co.tz',
104 'dpdhl.com',
105 'dhl.de',
106 'dhl.fr',
107 'dhl.pl',
108 'dhlexpress.fr', // legit dhl site
109 'dhlending.com',
110 'inmotion.dhl',
111 'dhlparcel.nl',
112 'dhltariff.co.uk',
113 'dhlindia-kyc.com',
114 'dpogroup.com',
115 '4flow-service.com', // shipping service
116 'leaders-in-logistics.com', // legit sight for leadership webinar events
117 'deutschepost.de', // German postal service
118 'dhlecommerce.nl',
119 'dhl.nl',
120 'adhlawfirm.com', // similar name but unrelated
121 'attendhlth.com', // dhl in domain but unrelated
122 'tdhlaw.com', // dhl in domain but unrelated
123 'hapibenefits.com', // DHL rewards program
124 'dhlgpi.com', // DHL Australia
125 'dhlfreight-news.com'
126 )
127 and not (
128 sender.email.domain.tld in ('dhl')
129 and coalesce(headers.auth_summary.dmarc.pass, false)
130 )
131 and (
132 profile.by_sender().prevalence in ("new", "outlier")
133 or (
134 profile.by_sender().any_messages_malicious_or_spam
135 and not profile.by_sender().any_messages_benign
136 )
137 )
138
139 // negate highly trusted sender domains unless they fail DMARC authentication
140 and not (
141 sender.email.domain.root_domain in $high_trust_sender_root_domains
142 and coalesce(headers.auth_summary.dmarc.pass, false)
143 )
144attack_types:
145 - "Credential Phishing"
146tactics_and_techniques:
147 - "Impersonation: Brand"
148 - "Lookalike domain"
149 - "Social engineering"
150detection_methods:
151 - "Header analysis"
152 - "Sender analysis"
153id: "be4b4ae0-d393-5f8b-b984-5cf4ad7cbeb5"