Brand impersonation: Meta and subsidiaries

Impersonation of Meta or Meta's subsidiaries Facebook and Instagram.

Sublime rule (View on GitHub)

  1name: "Brand impersonation: Meta and subsidiaries"
  2description: |
  3    Impersonation of Meta or Meta's subsidiaries Facebook and Instagram.
  4references:
  5  - "https://www.techrepublic.com/article/google-and-amazon-most-impersonated-brands-in-phishing-attacks/"
  6type: "rule"
  7severity: "medium"
  8source: |
  9  type.inbound
 10  and (
 11    // sender display name is a strong enough indicator
 12    // that it can be used without any other impersonation logic
 13    (
 14      regex.icontains(sender.display_name,
 15  
 16                      // this regex looks for a commonly abused phrase starting with 'meta', potentially containing a version of the word 'verified', followed by phrases that have been observed in campaigns.
 17                      '\bm.?e.?t.?a\b.*(?:verif(?:y|i(?:cado|ed)))?.*\b(?:recruiting|certification|trust|safety|badge|alert|advertising|compliance|copyright|enforcement|intellectual|rights|account|help|support|service|business|policy|Vérifié|certify|inc|help[ -]?desk)\b',
 18  
 19                      // this regex also looks for a commonly abused phrase starting with 'meta', followed by a phrase, then 'team' with no separating spaces.
 20                      '\bm.?e.?t.?a(?:recruiting|pro|certification|trust|safety|badge|alert|advertising|compliance|copyright|enforcement|intellectual|rights|service|account|help|support|business|policy|ads)(?:team|support)',
 21  
 22                      // this regex is similar to the first in this section, but starts with facebook instead of meta
 23                      '\bf.?a.?c.?e.?b.?o.?o.?k\b.*(?:verif(?:y|i(?:cado|ed)))?.*\b(?:recruiting|ads[ -]?team|certification|trust|safety|badge|alert|advertising|compliance|copyright|enforcement|intellectual|rights|service|account|help|support|business|policy|Vérifié|certify|inc|help[ -]?desk)\b',
 24                      '^[a-z]+ from \bmeta$',
 25                      'page ?ads ?support',
 26                      'Instagram\s*(?:Not|Policies|Report|Helpdesk|Support)',
 27                      '\bMeta & Coursera',
 28                      'Compliance & Security',
 29                      'social.?media.?\b(?:master|expert|pro|guru)\b',
 30                      '\bmeta\b.?(?:social|skill|ads).?(?:star|set|expert)',
 31                      'noreply-(?:meta|fb).+',
 32                      '(?:meta|facebook|fb|instagram|ig)[-\s]verif',
 33                      'meta\S{0,10}center'
 34      )
 35      or (
 36        regex.icontains(sender.display_name,
 37                        "f\u{200a}?a\u{200a}?c\u{200a}?e\u{200a}?b\u{200a}?o\u{200a}?o\u{200a}?k"
 38        )
 39        and not strings.icontains(sender.display_name, 'facebook')
 40      )
 41      or strings.contains(sender.display_name, "\u{24C2}")
 42      or strings.ilevenshtein(sender.display_name, 'facebook ads') <= 2
 43      or strings.ilevenshtein(sender.display_name, 'facebook business') <= 2
 44      or strings.ilike(sender.email.domain.domain, '*facebook*', "ig-support*")
 45      or strings.ilike(sender.email.local_part,
 46                       "*instagramlive*",
 47                       "*facebooksupport*"
 48      )
 49      or strings.icontains(sender.email.domain.subdomain, 'meta-')
 50      or (
 51        regex.icontains(body.current_thread.text, '©\s*(?:\d+)\s*meta\b')
 52        and strings.count(body.current_thread.text, '©') == 1
 53      )
 54      or (
 55        any(html.xpath(body.html, '//h2 | //h1').nodes,
 56            regex.icontains(strings.replace_confusables(.display_text),
 57                            'meta\s+verified'
 58            )
 59        )
 60        and any(body.current_thread.links,
 61                .href_url.domain.root_domain in $free_subdomain_hosts
 62        )
 63      )
 64    )
 65    // the use of these keywords (facebook, instagram)
 66    // or the levenshtein distance to facebook
 67    // are less strong and thus need to be combined with logo detection or nlu
 68    or (
 69      (
 70        regex.icontains(sender.display_name,
 71                        '\bf[\p{Mn}\p{Cf}]*a[\p{Mn}\p{Cf}]*c[\p{Mn}\p{Cf}]*e[\p{Mn}\p{Cf}]*b[\p{Mn}\p{Cf}]*o[\p{Mn}\p{Cf}]*o[\p{Mn}\p{Cf}]*k[\p{Mn}\p{Cf}]*\b',
 72                        '\binstagr(am)?\b',
 73                        '\bm[\p{Mn}\p{Cf}]*e[\p{Mn}\p{Cf}]*t[\p{Mn}\p{Cf}]*a\b'
 74        )
 75        or strings.ilevenshtein(sender.display_name, 'facebook') <= 2
 76        or sender.email.email == 'noreply@appsheet.com'
 77      )
 78      and 2 of (
 79        any(ml.logo_detect(file.message_screenshot()).brands,
 80            .name in ("Facebook", "Meta", "Instagram", "Threads")
 81        ),
 82        any(ml.nlu_classifier(body.current_thread.text).intents,
 83            .name in ("cred_theft", "callback_scam", "steal_pii")
 84            and .confidence in ("medium", "high")
 85        ),
 86        (
 87          length(body.current_thread.text) < 2000
 88          and regex.icontains(body.current_thread.text, "(?:violation|infringe)")
 89        ),
 90        regex.icontains(subject.base,
 91                        '\b(?:recruiting|permanently|locked|certification|trust|safety|badge|alert|advertising|compliance|copyright|enforcement|intellectual|rights|account|help|support|business|policy|verif(?:y|i(?:cado|ed))|Vérifié|Trademark|Misuse|Review|Violation|Warning|Restriction|Inappropriate|service|Content|multiple reports)\b'
 92        ),
 93        any(body.links,
 94            .href_url.domain.root_domain in $self_service_creation_platform_domains
 95            or .href_url.domain.root_domain in $free_file_hosts
 96            or .href_url.domain.root_domain in $free_subdomain_hosts
 97            or .href_url.domain.root_domain in $url_shorteners
 98        ),
 99        sender.email.domain.root_domain in $free_email_providers
100      )
101    )
102    // salesforce sender combined with logo detection and nlu is enough
103    or (
104      sender.email.domain.root_domain == "salesforce.com"
105      and any(ml.logo_detect(file.message_screenshot()).brands,
106              .name in ("Facebook", "Meta", "Instagram", "Threads")
107      )
108      and any(ml.nlu_classifier(body.current_thread.text).intents,
109              .name in ("cred_theft", "callback_scam", "steal_pii")
110              and .confidence in ("medium", "high")
111      )
112    )
113    or 
114    // or the body contains a facebook/meta footer with the address citing "community support"
115    (
116      (
117        regex.icontains(body.current_thread.text,
118                        '(?:1\s+(?:Facebook|Hacker|Meta)?\s*Way|1601\s+Willow\s+Rd?).*Menlo\s+Park.*CA.*94025'
119        )
120        or (
121          regex.icontains(body.current_thread.text,
122                          '(?:Security Team © Meta|Meta Support Team)'
123          )
124        )
125      )
126      // and it contains a link to spawn a chat with facebook - this is not the way support operates
127      and (
128        any(body.links,
129            strings.ends_with(.href_url.domain.domain, 'facebook.com')
130            and strings.starts_with(.href_url.path, '/msg/')
131        )
132        or (
133          any(ml.nlu_classifier(body.current_thread.text).intents,
134              .name in ("cred_theft", "callback_scam", "steal_pii")
135              and .confidence in ("high")
136          )
137        )
138        or any(recipients.to,
139               .email.domain.valid
140               and any(body.links,
141                       strings.icontains(.href_url.url, ..email.email)
142                       or any(strings.scan_base64(.href_url.url,
143                                                  format="url",
144                                                  ignore_padding=true
145                              ),
146                              strings.icontains(., ...email.email)
147                       )
148                       or any(strings.scan_base64(.href_url.fragment,
149                                                  ignore_padding=true
150                              ),
151                              strings.icontains(., ...email.email)
152                       )
153               )
154        )
155      )
156    )
157    // we've seen advertising "advice/recommendations"
158    or (
159      all(ml.nlu_classifier(body.current_thread.text).topics,
160          .name in ("Advertising and Promotions", "Reminders and Notifications")
161      )
162      // Meta mention
163      and (
164        any(ml.nlu_classifier(body.current_thread.text).entities,
165            .name == "org" and strings.icontains(.text, 'Community Guidelines')
166        )
167        or regex.icontains(body.current_thread.text,
168                           '(1\s+(Facebook|Hacker|\bMeta\b)?\s*Way|1601\s+Willow\s+Rd?).*Menlo\s+Park.*CA.*94025'
169        )
170      )
171      and any(ml.nlu_classifier(body.current_thread.text).entities,
172              .name == "urgency"
173      )
174    )
175    or (
176      strings.icontains(body.current_thread.text, "Meta Professional Certificate")
177      and strings.icontains(body.current_thread.text, "Meta & Coursera Team")
178      // Add link validation
179      and any(body.links,
180              strings.icontains(.display_text, "coursera")
181              and .href_url.domain.root_domain != "coursera.org"
182      )
183    )
184    or 2 of (
185      strings.icontains(body.current_thread.text, 'Meta '),
186      strings.icontains(body.current_thread.text, '1602 Willow Road'),
187      strings.icontains(body.current_thread.text, 'Menlo Park, CA 91024'),
188    )
189  )
190  and sender.email.domain.root_domain not in~ (
191    'facebook.com',
192    'facebookmail.com',
193    'eventsatfacebook.com',
194    'facebookenterprise.com',
195    'meta.com',
196    'metamail.com',
197    'instagram.com',
198    'medallia.com',
199    'fbworkmail.com',
200    'workplace.com',
201    'capterra.com', // they mention "Community Guidelines"
202    'facebookblueprint.com',
203    'metaenterprisemail.com',
204    'pigfacebookstore.com.au', // unrelated domain but hitting on facebook
205    'metacompliance.com',
206    'metaprop.com', // unrelated domain but hitting on meta pro
207    'oakley.com', // meta intelligence glasses
208    'facebookuserprivacysettlement.com', // fb settlement website
209    'perceptyx.com', // ai employee engagement
210    'unroll.me', // unroll contains instagram logo
211    'har.com' // facebook ads management
212  )
213  // negate metaenterprise links
214  and not any(headers.reply_to, .email.email == "noreply@facebookmail.com")
215  
216  // meta wiki renamer
217  and not (
218    sender.display_name == 'Meta-Wiki'
219    and sender.email.domain.root_domain == 'wikimedia.org'
220  )
221  
222  // we dont want emails where all the links go to meta domains
223  and not (
224    (
225      length(body.links) > 1
226      and all(body.links,
227              .href_url.domain.root_domain in (
228                'facebook.com',
229                'instagram.com',
230                'meta.com'
231              )
232              and not strings.istarts_with(.href_url.path, '/share/')
233      )
234    )
235    // too many links
236    or length(body.links) > 20
237  )
238  
239  // no previous threads
240  and length(body.previous_threads) == 0
241  
242  // negate highly trusted sender domains unless they fail DMARC authentication
243  and (
244    (
245      sender.email.domain.root_domain in $high_trust_sender_root_domains
246      and not headers.auth_summary.dmarc.pass
247    )
248    or sender.email.domain.root_domain not in $high_trust_sender_root_domains
249  
250    // salesforce has been abused for meta phishing campaigns repeatedly
251    or sender.email.domain.root_domain == "salesforce.com"
252  )  
253attack_types:
254  - "Credential Phishing"
255tactics_and_techniques:
256  - "Impersonation: Brand"
257  - "Lookalike domain"
258  - "Social engineering"
259detection_methods:
260  - "Header analysis"
261  - "Sender analysis"
262id: "e38f1e3b-79be-5a59-b084-24a851daf6b9"
to-top