Service Abuse: HelloSign Share with Suspicious Sender or Document Name
The detection rule is designed to identify messages sent from HelloSign that notify recipients about a shared file and contain suspicious content either in the document or the sender's display name.
Sublime rule (View on GitHub)
1name: "Service Abuse: HelloSign Share with Suspicious Sender or Document Name"
2description: "The detection rule is designed to identify messages sent from HelloSign that notify recipients about a shared file and contain suspicious content either in the document or the sender's display name."
3type: "rule"
4severity: "medium"
5source: |
6 type.inbound
7
8 // Legitimate Dropbox sending infrastructure
9 and sender.email.email == "noreply@mail.hellosign.com"
10 and headers.auth_summary.spf.pass
11 and headers.auth_summary.dmarc.pass
12 and (
13 strings.icontains(subject.subject, ' - Signature Requested')
14 or (
15 strings.icontains(subject.subject, 'Reminder: ')
16 and strings.icontains(subject.subject, 'awaiting your signature')
17 )
18 )
19 and not strings.icontains(subject.subject, 'You just signed')
20 // negate CDP Esign which reuses hellosign
21 and not strings.contains(body.current_thread.text, '@cdpesign.com')
22 // negate messages where the "on_behalf_of_email" is within the org_domains
23 and not any(headers.hops,
24 any(.fields,
25 .name == "X-Mailgun-Variables"
26 and strings.icontains(.value, 'on_behalf_of_email')
27 and all(regex.iextract(.value,
28 '\"on_behalf_of_email": \"(?P<sender_email>[^\"]+@(?P<sender_domain>[^\"]+))\",'
29 ),
30 .named_groups["sender_domain"] in $org_domains
31 )
32 )
33 )
34 // sometimes there isn't an on_behalf_of_email, so in those cases we can use the body to extract the sender
35 and not (
36 regex.icontains(body.html.raw,
37 '<th class="action-item--action[^\>]+\>\s*[^\<]*\((?P<sender_email>[^\)]+)\).*?</th>'
38 )
39 // check that the sender email has not been observed previously
40 and all(regex.iextract(body.html.raw,
41 '<th class="action-item--action[^\>]+\>\s*[^\<]*\((?P<sender_email>[^\"]+@(?P<sender_domain>[^\"]+))\).*?</th>'
42 ),
43 .named_groups["sender_domain"] in $org_domains
44 )
45 )
46 and (
47 // contains the word dropbox
48 // the subject is in the format of "<actor controlled title>(?: - Signature Requested by| is awaiting your signature) <actor controlled name>"
49 (
50 strings.icontains(subject.subject, 'dropbox')
51 // negate where the sender is dropbox
52 and not any(headers.hops,
53 any(.fields,
54 .name == "X-Mailgun-Variables"
55 and regex.contains(.value,
56 '\"on_behalf_of_email": \"[^\"]+@dropbox.com\"'
57 )
58 )
59 )
60 )
61 or strings.icontains(subject.subject, 'sharefile')
62 or strings.icontains(subject.subject, 'helloshare')
63
64 // sender names part of the subject
65 or (
66 // Signature Terms in the Sender Display Name
67 strings.icontains(sender.display_name, 'Signature Requ')
68 // Billing Accounting
69 or regex.icontains(sender.display_name,
70 'Accounts? (?:Payable|Receivable)',
71 )
72 or strings.icontains(sender.display_name, 'Billing Support')
73
74 // HR/Payroll/Legal/etc
75 or strings.icontains(sender.display_name, 'Compliance HR')
76 or regex.icontains(sender.display_name,
77 '(?:Compliance|Executive|\bHR\b|Human Resources|\bHR\b|\bIT\b|Legal|Payroll|Purchasing|Operations|Security|Support).*(?:Department|Dept|Team|Desk)?'
78 )
79 or strings.icontains(sender.display_name, 'Corporate Communications')
80 or strings.icontains(sender.display_name, 'Employee Relations')
81 or strings.icontains(sender.display_name, 'Office Manager')
82 or strings.icontains(sender.display_name, 'Risk Management')
83 or regex.icontains(sender.display_name, 'Payroll Admin(?:istrator)?')
84
85 // IT related
86 or regex.icontains(sender.display_name,
87 'IT Support',
88 'Information Technology',
89 '(?:Network|System) Admin(?:istrator)?',
90 'Help Desk',
91 'Tech(?:nical) Support'
92 )
93 )
94
95 // NLU/Logo Detection on message from the sender/message body
96 or any(html.xpath(body.html,
97 '//table[not(@class)]/tbody/tr/th[2]/p[@class="subhead"][2]/parent::th'
98 ).nodes,
99 any(ml.nlu_classifier(.display_text).intents,
100 .name == "callback_scam" and .confidence == "high"
101 )
102 )
103 // callback logos
104 or any(ml.logo_detect(beta.message_screenshot()).brands,
105 .name in ("PayPal", "Norton", "GeekSquad", "Ebay", "McAfee", "AT&T")
106 )
107
108 // filename analysis
109 // the filename is also contianed in the subject line
110 or (
111 // scanner themed
112 regex.icontains(subject.subject,
113 'scanne[rd].*(?: - Signature Requested by| is awaiting your signature)'
114 )
115 // image theme
116 or regex.icontains(subject.subject,
117 '_IMG_.*(?: - Signature Requested by| is awaiting your signature)',
118 'IMG[_-](?:\d|\W)+.*(?: - Signature Requested by| is awaiting your signature)'
119 )
120 // Invoice Themes
121 or regex.icontains(subject.subject,
122 '(INV\b|\bACH\b|Wire Confirmation|P[O0]\W+?\d+\"|P[O0](?:\W+?|\d+)|Purchase Order|Past Due|Remit(?:tance)?).*(?: - Signature Requested by| is awaiting your signature)'
123 )
124 // Payment Themes
125 or regex.icontains(subject.subject,
126 '(?:payment.*(?:complete|confirmation|approved|recent|processing)|(complete|confirmation|approved|recent|processing).*payment).*(?: - Signature Requested by| is awaiting your signature)'
127 )
128
129 // Payroll/HR
130 or regex.icontains(subject.subject,
131 '(?:Payroll|Employee Pay\b|Salary|Benefit Enrollment|Payment.*Benefit|Benefit.*Update|Employee Handbook|Reimbursement Approved).*(?: - Signature Requested by| is awaiting your signature)'
132 )
133
134 // shared files/extenstion/urgency/CTA
135 or regex.icontains(subject.subject,
136 '(?:Urgent|Important|Immediate|Secure|Encrypt|shared|\bsent\b|protected|Validate|Final Notice|Review(?:and |& )?Sign|Download PDF).*(?: - Signature Requested by| is awaiting your signature)'
137 )
138
139 // MFA theme
140 or regex.icontains(subject.subject,
141 '(?:Verification Code|\bMFA\b).*(?: - Signature Requested by| is awaiting your signature)'
142 )
143 )
144 )
145
146attack_types:
147 - "Callback Phishing"
148 - "BEC/Fraud"
149tactics_and_techniques:
150 - "Evasion"
151 - "Social engineering"
152detection_methods:
153 - "Sender analysis"
154 - "Header analysis"
155 - "Content analysis"
156id: "464d98f3-38b4-5a72-b0d5-e3a148f88025"