VIP impersonation: Fake forwarded indicator with VIP recipient impersonation

Detects inbound messages that fabricate a forwarded email thread — using patterns like '=== Forwarded Message:' — where a prior thread appears to involve an organizational VIP as a recipient. The messages observed follow an invoice lure pattern referencing admired leadership figures by name, designed to create the appearance of legitimacy by spoofing internal executive communication chains.

Sublime rule (View on GitHub)

 1name: "VIP impersonation: Fake forwarded indicator with VIP recipient impersonation"
 2description: "Detects inbound messages that fabricate a forwarded email thread — using patterns like '=== Forwarded Message:' — where a prior thread appears to involve an organizational VIP as a recipient. The messages observed follow an invoice lure pattern referencing admired leadership figures by name, designed to create the appearance of legitimacy by spoofing internal executive communication chains."
 3type: "rule"
 4severity: "high"
 5source: |
 6  type.inbound
 7  and length(coalesce(body.plain.raw, body.html.display_text)) < 6000
 8  and (
 9    // the current thread contains a goofy forwarded message
10    (
11      strings.icontains(body.current_thread.text, 'forwarded')
12      // not this specific format
13      and not strings.icontains(body.current_thread.text,
14                                '============ Forwarded Message ============'
15      )
16      and regex.icontains(body.current_thread.text,
17                          '(?m)^[=\x{2012}\x{2013}\x{2014}\x{2015}\s]*message that has been forwarded',
18                          '={3,}\s*(?:forwarded message|message that has been forwarded)',
19                          '[\x{2013}]{2,}\s*(?:forwarded message|message that has been forwarded)'
20      )
21    )
22    // any previous thread contains a goofy forwarded message
23    or any(body.previous_threads,
24           strings.icontains(.text, 'forwarded')
25           // not this specific format
26           and not strings.icontains(.text,
27                                     '============ Forwarded Message ============'
28           )
29           and regex.icontains(.text,
30                               '(?m)^[=\x{2012}\x{2013}\x{2014}\x{2015}\s]*message that has been forwarded',
31                               '={3,}\s*(?:forwarded message|message that has been forwarded)',
32                               '[\x{2013}]{2,}\s*(?:forwarded message|message that has been forwarded)'
33           )
34    )
35  )
36  // any of the previous threads were sent to a VIP
37  and any(body.previous_threads,
38          any(.recipients.to,
39              any($org_vips,
40                  strings.icontains(..display_name, .display_name)
41                  or (.email != "" and strings.icontains(..email.email, .email))
42              )
43          )
44  )  
45attack_types:
46  - "BEC/Fraud"
47tactics_and_techniques:
48  - "Impersonation: VIP"
49  - "Social engineering"
50  - "Evasion"
51detection_methods:
52  - "Content analysis"
53  - "Sender analysis"
54id: "72630010-f8bd-5517-90ba-3b7c7dabc6e0"
to-top