Benefits Enrollment Impersonation

Detects messages about benefit enrollment periods and healthcare selections from external senders that contain urgent language or requests for action. Excludes legitimate HR communications, marketing mailers, and trusted sender domains with valid authentication.

Sublime rule (View on GitHub)

  1name: "Benefits Enrollment Impersonation"
  2description: "Detects messages about benefit enrollment periods and healthcare selections from external senders that contain urgent language or requests for action. Excludes legitimate HR communications, marketing mailers, and trusted sender domains with valid authentication."
  3type: "rule"
  4severity: "high"
  5source: |
  6  type.inbound
  7  and sender.email.domain.domain not in $org_domains
  8  and (
  9    length(body.current_thread.text) < 2500 or body.current_thread.text is null
 10  )
 11  and (
 12    regex.icontains(subject.subject,
 13                    '(open|benefits?) enrol{1,2}ment', // catches both enrolment and enrollment
 14                    'benefit(s)? (plan|choice|selection|deadline|period)',
 15                    'hr benefits',
 16                    'annual enrol{1,2}ment',
 17                    'healthcare (choice|selection|opt.?in)',
 18                    '(fsa|hsa|401k) (enrol{1,2}ment|selection)',
 19                    'dependent (coverage|verification)',
 20                    '(health|dental|vision|insurance|medical) enrol{1,2}ment'
 21    )
 22    or regex.icontains(body.current_thread.text,
 23                       'benefit(s)? (plan|choice|selection|deadline|period)',
 24                       'hr benefits',
 25                       'annual enrol{1,2}ment',
 26                       'healthcare (choice|selection|opt.?in)',
 27                       '(fsa|hsa|401k) (enrol{1,2}ment|selection)',
 28                       'dependent (coverage|verification)',
 29                       '(health|dental|vision|insurance|medical) enrol{1,2}ment',
 30                       '(urgent|immediate) action required.{0,20}(benefit|enrol{1,2}ment)',
 31                       'coverage.{0,20}(expire|terminate)',
 32                       'last (day|chance).{0,20}(enrol{1,2}|select)',
 33                       '(login|sign.?in).{0,20}(benefit portal|hr portal)',
 34                       '(verify|update|confirm).{0,20}(benefit.{0,20}selection)'
 35    )
 36    or any(attachments,
 37           regex.icontains(.file_name,
 38                           'fileDoc-Review',
 39                           '(open|benefits?) enrol{1,2}ment',
 40                           'annual enrol{1,2}ment',
 41                           '(fsa|hsa|401k) (enrol{1,2}ment|selection)',
 42                           '(urgent|immediate) action required.{0,20}(benefit|enrol{1,2}ment)',
 43           )
 44    )
 45  )
 46  and 2 of (
 47    any(ml.nlu_classifier(body.current_thread.text).entities,
 48        .name in ("urgency", "request")
 49    ),
 50    any(ml.nlu_classifier(body.current_thread.text).intents, .name != "benign"),
 51    (
 52      (length(body.current_thread.text) < 250 and length(attachments) == 1)
 53      or (body.current_thread.text is null and length(attachments) == 1)
 54    ),
 55    // lure in attachment
 56    (
 57      any(attachments,
 58          (
 59            .file_type in $file_types_images
 60            or .file_type in ("pdf", "docx", "doc")
 61            or .file_extension in $file_extensions_macros
 62          )
 63          and any(filter(file.explode(.), .scan.ocr.raw is not null),
 64                  (
 65                    any(ml.nlu_classifier(.scan.ocr.raw).intents,
 66                        .name != "benign"
 67                    )
 68                    and any(ml.nlu_classifier(.scan.ocr.raw).entities,
 69                           .name in ("urgency", "request")
 70                    )
 71                  )
 72          )
 73      )
 74    )
 75  )
 76  // negate replies
 77  and (
 78    length(headers.references) == 0
 79    or not any(headers.hops, any(.fields, strings.ilike(.name, "In-Reply-To")))
 80  )
 81  
 82  // Negate common marketing mailers
 83  and not regex.icontains(sender.display_name,
 84                          'HR (?:Events|Expert|Support Center|Studies|Knowledge Cloud|News Library|Crowd|Solutions|Interests)|HR and People Operations'
 85  )
 86  and not (
 87    // Constant Contact
 88    any(headers.hops,
 89        strings.icontains(.authentication_results.spf_details.designator,
 90                          "constantcontact.com"
 91        )
 92    )
 93    or any(headers.hops,
 94           strings.icontains(.received_spf.designator, "constantcontact.com")
 95    )
 96    or (
 97      (
 98        any(headers.hops,
 99            .index == 0
100            and any(.authentication_results.dkim_details,
101                    .domain == "auth.ccsend.com"
102            )
103        )
104      )
105      and headers.auth_summary.dmarc.pass
106    )
107    or any(headers.references, strings.iends_with(., "ccsend.com"))
108    // Hubspot
109    or any(headers.hops,
110           strings.icontains(.authentication_results.spf_details.designator,
111                             "hubspotemail.net"
112           )
113    )
114  )
115  and sender.email.domain.root_domain not in~ (
116    'medicare.gov',
117    'farmers.com',
118    'uhc.com',
119    'blueshieldca.com',
120    'corestream.com'
121  )
122  and (
123    profile.by_sender().prevalence in ("new", "outlier")
124    or (
125      profile.by_sender().any_messages_malicious_or_spam
126      and not profile.by_sender().any_false_positives
127    )
128  )
129  // negate highly trusted sender domains unless they fail DMARC authentication
130  and (
131    (
132      sender.email.domain.root_domain in $high_trust_sender_root_domains
133      and not headers.auth_summary.dmarc.pass
134    )
135    or sender.email.domain.root_domain not in $high_trust_sender_root_domains
136  )
137    
138attack_types:
139  - "Credential Phishing"
140tactics_and_techniques:
141  - "Evasion"
142  - "Impersonation: Employee"
143  - "Out of band pivot"
144  - "Social engineering"
145detection_methods:
146  - "Content analysis"
147  - "Header analysis"
148  - "Sender analysis"
149id: "5a6eb5a8-2d91-5ed8-a0d2-fb3cc2fef40b"
to-top