Impersonation: Legal firm with copyright infringement notice

Detects messages impersonating legal firms or copyright enforcement entities with extensive legal terminology, threatening language, and urgent compliance demands.

Sublime rule (View on GitHub)

  1name: "Impersonation: Legal firm with copyright infringement notice"
  2description: "Detects messages impersonating legal firms or copyright enforcement entities with extensive legal terminology, threatening language, and urgent compliance demands."
  3type: "rule"
  4severity: "medium"
  5source: |
  6  type.inbound
  7  and length(body.previous_threads) == 0
  8  and length(body.current_thread.text) < 5000
  9  and (
 10    0 < length(body.links) < 10 or beta.scan_qr(file.message_screenshot()).found
 11  )
 12  and (
 13    2 of (
 14      strings.ilike(subject.base, '*Content*'),
 15      strings.ilike(subject.base, '*Compliance*'),
 16      strings.ilike(subject.base, '*Review*'),
 17      strings.ilike(subject.base, '*Legal*'),
 18      strings.ilike(subject.base, '*Formal*'),
 19      strings.ilike(subject.base, '*LLP*'),
 20      strings.ilike(subject.base, '*PLLC*'),
 21      strings.ilike(subject.base, '*Unauthorized*'),
 22      strings.ilike(subject.base, '*Trademark*'),
 23      strings.ilike(subject.base, '*Law*'),
 24      strings.ilike(subject.base, '*Enforcement*'),
 25      strings.ilike(subject.base, '*Copyright*'),
 26      strings.ilike(subject.base, '*Violat*'),
 27      strings.ilike(subject.base, '*Intellectual*'),
 28      strings.ilike(subject.base, '*Concerning*'),
 29      strings.ilike(subject.base, '*Notice*'),
 30      strings.ilike(subject.base, '*Licensing*'),
 31      strings.ilike(subject.base, '*Clarification*'),
 32      strings.ilike(subject.base, '*Matter*'),
 33      strings.ilike(subject.base, '*Conflict*'),
 34      strings.ilike(subject.base, '*Ownership*'),
 35      strings.ilike(sender.display_name, '*Content*'),
 36      strings.ilike(sender.display_name, '*Copyright*'),
 37      strings.ilike(sender.display_name, '*Review*'),
 38      strings.ilike(sender.display_name, '*Legal*'),
 39      strings.ilike(sender.display_name, '*Investigation*'),
 40      strings.ilike(sender.display_name, '*LLP*'),
 41      strings.ilike(sender.display_name, '*Law*'),
 42      strings.ilike(sender.display_name, '*Intellectual*'),
 43      strings.ilike(sender.display_name, '*Notice*'),
 44      strings.ilike(sender.display_name, '*Matter*'),
 45      strings.ilike(sender.display_name, '*Dispute*'),
 46      strings.ilike(sender.display_name, '*Resolution*'),
 47      strings.ilike(sender.display_name, '*Advisory*'),
 48      (
 49        sender.email.domain.root_domain in $free_email_providers
 50        and any(body.current_thread.links,
 51                .href_url.domain.root_domain in $url_shorteners
 52                or any(.href_url.query_params_decoded['domain'],
 53                       . in $url_shorteners
 54                )
 55        )
 56      ),
 57      any(body.links,
 58          regex.icontains(.display_text,
 59                          '(?:evidence|exhibits?|supporting document|documentazione)'
 60          )
 61      )
 62    )
 63  )
 64  
 65  // common strings in email current thread
 66  and 15 of (
 67    strings.ilike(body.current_thread.text, '*copyright*'),
 68    strings.ilike(body.current_thread.text, '*trademark*'),
 69    strings.ilike(body.current_thread.text, '*inquiry*'),
 70    strings.ilike(body.current_thread.text, '*online*'),
 71    strings.ilike(body.current_thread.text, '*authorized*'),
 72    strings.ilike(body.current_thread.text, '*legal*'),
 73    strings.ilike(body.current_thread.text, '*represent*'),
 74    strings.ilike(body.current_thread.text, '*lawful*'),
 75    strings.ilike(body.current_thread.text, '*owner*'),
 76    strings.ilike(body.current_thread.text, '*materials*'),
 77    strings.ilike(body.current_thread.text, '*protected*'),
 78    strings.ilike(body.current_thread.text, '*infring*'),
 79    strings.ilike(body.current_thread.text, '*immediate*'),
 80    strings.ilike(body.current_thread.text, '*cessation*'),
 81    strings.ilike(body.current_thread.text, '*content*'),
 82    strings.ilike(body.current_thread.text, '*referenced*'),
 83    strings.ilike(body.current_thread.text, '*17 U.S.C. §*'),
 84    strings.ilike(body.current_thread.text, '*constitutes*'),
 85    strings.ilike(body.current_thread.text, '*authorization*'),
 86    strings.ilike(body.current_thread.text, '*removal*'),
 87    strings.ilike(body.current_thread.text, '*comply*'),
 88    strings.ilike(body.current_thread.text, '*failure*'),
 89    strings.ilike(body.current_thread.text, '*law firm*'),
 90    strings.ilike(body.current_thread.text, '*LLP*'),
 91    strings.ilike(body.current_thread.text, '*compliance*'),
 92    strings.ilike(body.current_thread.text, '*cease*'),
 93    strings.ilike(body.current_thread.text, '*protect*'),
 94    strings.ilike(body.current_thread.text, '*rights*'),
 95    strings.ilike(body.current_thread.text, '*penalty*'),
 96    strings.ilike(body.current_thread.text, '*perjury*'),
 97    strings.ilike(body.current_thread.text, '*holder*'),
 98    strings.ilike(body.current_thread.text, '*declare*'),
 99    strings.ilike(body.current_thread.text, '*sworn*'),
100    strings.ilike(body.current_thread.text, '*affidavit*'),
101    strings.ilike(body.current_thread.text, '*investigation*'),
102    strings.ilike(body.current_thread.text, '*identified*'),
103    strings.ilike(body.current_thread.text, '*reproduction*'),
104    strings.ilike(body.current_thread.text, '*license*'),
105    strings.ilike(body.current_thread.text, '*granted*'),
106    strings.ilike(body.current_thread.text, '*permitting*'),
107    strings.ilike(body.current_thread.text, '*evidence*'),
108    strings.ilike(body.current_thread.text, '*proceedings*'),
109    strings.ilike(body.current_thread.text, '*evidentiary*'),
110    strings.ilike(body.current_thread.text, '*remove*'),
111    strings.ilike(body.current_thread.text, '*suspend*'),
112    strings.ilike(body.current_thread.text, '*discontinue*'),
113    strings.ilike(body.current_thread.text, '*72 hours*'),
114    strings.ilike(body.current_thread.text, '*48 hours*'),
115    strings.ilike(body.current_thread.text, '*24 hours*'),
116    strings.ilike(body.current_thread.text, '*proof*'),
117    strings.ilike(body.current_thread.text, '*unresolved*'),
118    strings.ilike(body.current_thread.text, '*accordance*'),
119    strings.ilike(body.current_thread.text, '*procedures*'),
120    strings.ilike(body.current_thread.text, '*interests*'),
121    strings.ilike(body.current_thread.text, '*appeal*'),
122    strings.ilike(body.current_thread.text, '*clarification*'),
123    strings.ilike(body.current_thread.text, '*notice*'),
124    strings.ilike(body.current_thread.text, '*dissemination*'),
125    strings.ilike(body.current_thread.text, '*counter-notice*'),
126    strings.ilike(body.current_thread.text, '*exploitation*'),
127    strings.ilike(body.current_thread.text, '*remedial*'),
128    strings.ilike(body.current_thread.text, '*particulars*'),
129    strings.ilike(body.current_thread.text, '*fingerprint*'),
130    strings.ilike(body.current_thread.text, '*confidentiality*'),
131    strings.ilike(body.current_thread.text, '*assertion*'),
132    strings.ilike(body.current_thread.text, '*counsel*'),
133    strings.ilike(body.current_thread.text, '*privileged*'),
134    strings.ilike(body.current_thread.text, '*directive*'),
135  )
136  
137  // remove phrase from legitimate complaint
138  and not regex.icontains(body.current_thread.text,
139                          '(?:we are passing the notice below|content has been removed|removed from our website|notice of intended action|I have not granted|I am the original creator|content you reported has been removed|complaint will be carefully reviewed|provide a list of violations|document confirming your right to act)'
140  )
141  
142  // not copyright reports
143  and not regex.icontains(body.current_thread.text,
144                          '(?:confirmation|received).{0,100}copyright report'
145  )
146  
147  // verified dmca receiving/sending address
148  and not any([recipients.cc, recipients.to, recipients.bcc],
149              any(.,
150                  .email.email in (
151                    'dmca@vimeo.com',
152                    'dmca@support.epicgames.com',
153                    'takedowns@doppel.com',
154                    'ipenforcement@epicgames.com'
155                  )
156              )
157  )
158  and not strings.icontains(sender.email.domain.root_domain, 'edwinjamesip.com')  
159attack_types:
160  - "BEC/Fraud"
161  - "Extortion"
162tactics_and_techniques:
163  - "Impersonation: Brand"
164  - "Social engineering"
165detection_methods:
166  - "Content analysis"
167  - "Header analysis"
168  - "Sender analysis"
169id: "85bf58f6-3891-56ea-ae0a-d88073ade20f"
to-top