Brand impersonation: Netflix

Impersonation of Netflix.

Sublime rule (View on GitHub)

  1name: "Brand impersonation: Netflix"
  2description: |
  3    Impersonation of Netflix.
  4references:
  5  - "https://news.trendmicro.com/2023/01/18/netflix-scams-2023-job-text-email/"
  6type: "rule"
  7severity: "low"
  8authors:
  9  - name: "min0k"
 10source: |
 11  type.inbound
 12  and (
 13    // obfuscated sender display name
 14    (
 15      sender.display_name is not null
 16      and (
 17        regex.icontains(strings.replace_confusables(sender.display_name),
 18                        '[nm]etf[li][il]x'
 19        )
 20        or strings.ilevenshtein(strings.replace_confusables(sender.display_name),
 21                                'netflix'
 22        ) <= 1
 23        or regex.icontains(strings.replace_confusables(sender.display_name),
 24                           'n.{0,3}e.{0,3}t.{0,3}f.{0,3}l.{0,3}i.{0,3}x.{0,3}'
 25        )
 26      )
 27    )
 28    // Netflix reactivate subscription
 29    or (
 30      strings.icontains(subject.base, "netflix")
 31      and regex.icontains(body.current_thread.text,
 32                          'reactivate\s+(your\s+)?subscription'
 33      )
 34    )
 35    or (
 36      strings.icontains(strings.replace_confusables(body.current_thread.text),
 37                        'netplusflix'
 38      )
 39      and strings.count(body.current_thread.text, '©') == 1
 40    )
 41    // obfuscated sender email domain
 42    or regex.icontains(strings.replace_confusables(sender.email.domain.domain),
 43                       '[nm]etf[li][il]x'
 44    )
 45    // logo detection on message screenshot (no link analysis)
 46    or (
 47      any(ml.logo_detect(file.message_screenshot()).brands,
 48          .name == "Netflix" and .confidence in ("medium", "high")
 49      )
 50      and (
 51        // non NLU based keywords on the screenshot
 52        regex.icontains(beta.ocr(file.message_screenshot()).text,
 53                        'suspen(?:ded|sion)'
 54        )
 55        or 
 56        // combo of NLU cred_theft + financial + Customer Service and Support
 57        (
 58          any(ml.nlu_classifier(body.current_thread.text).intents,
 59              .name == "cred_theft"
 60          )
 61          and any(ml.nlu_classifier(body.current_thread.text).entities,
 62                  .name == "financial"
 63          )
 64          and any(ml.nlu_classifier(body.current_thread.text).topics,
 65                  .name == "Customer Service and Support"
 66          )
 67        )
 68      )
 69    )
 70    // Address Detection
 71    or 2 of (
 72      strings.icontains(body.current_thread.text, 'Netflix, Inc'),
 73      strings.icontains(body.current_thread.text, '100 Winchester Circle'),
 74      strings.icontains(body.current_thread.text, 'Los Gatos, CA 95032')
 75    )
 76    // unusual recipient pattern + logo detect + credphish dispoistion
 77    or (
 78      (
 79        length(recipients.to) == 0
 80        or (
 81          all(recipients.to, .email.domain.valid == false)
 82          and all(recipients.cc, .email.domain.valid == false)
 83        )
 84      )
 85      and any(ml.logo_detect(file.message_screenshot()).brands,
 86              .name == "Netflix" and .confidence in ("medium", "high")
 87      )
 88      and (
 89        any(body.links,
 90            ml.link_analysis(.).credphish.disposition == "phishing"
 91            and ml.link_analysis(.).credphish.confidence in ("medium", "high")
 92        )
 93      )
 94    )
 95  )
 96  // negation of legit domains
 97  and not (
 98    sender.email.domain.root_domain in (
 99      'netflix.com',
100      'dvd.com',
101      'netflixfamily.com',
102      'netflixpreviewclub.com',
103      'netflixanimation.com',
104      'envoy.com',
105      'lexisnexis.com',
106      'netflix.shop',
107      'netflixcontractors.com', // owned by netflix
108      'netflixevents.com', // owned by netflix
109      'netelixir.com', // unrelated marketing
110      'netflixhouse.com', // owned by netflix
111      'instagram.com',
112      'netflix.net',
113      'netflixshopsupport.com', // owned by netflix
114      'netflixpartner.com', // owned by netflix
115    )
116    and coalesce(headers.auth_summary.dmarc.pass, false)
117  )
118  and not (
119    sender.email.domain.domain in (
120      'netflix.zendesk.com' // netflix actual support
121    )
122    and coalesce(headers.auth_summary.dmarc.pass, false)
123  )
124  and not profile.by_sender_email().solicited  
125attack_types:
126  - "Credential Phishing"
127tactics_and_techniques:
128  - "Impersonation: Brand"
129  - "Lookalike domain"
130  - "Social engineering"
131detection_methods:
132  - "Header analysis"
133  - "Sender analysis"
134id: "9f39eea5-2edf-524d-b68b-d8d0bdb74273"
to-top