VIP impersonation with charitable donation fraud

Fake email thread shows a VIP requesting a donation to a charity, usually addressed to Accounts Payable departments. Can result in monetary loss.

Sublime rule (View on GitHub)

 1name: "VIP impersonation with charitable donation fraud"
 2description: "Fake email thread shows a VIP requesting a donation to a charity, usually addressed to Accounts Payable departments. Can result in monetary loss."
 3type: "rule"
 4severity: "high"
 5source: |
 6  type.inbound
 7  and strings.ilike(body.current_thread.text,
 8                    "*charity*",
 9                    "*gala*",
10                    "*donation*",
11                    "*donor*"
12  )
13  and any(ml.nlu_classifier(body.current_thread.text).entities,
14          .name == "financial"
15  )
16  and any(ml.nlu_classifier(body.current_thread.text).entities,
17          .name == "request"
18  )
19  and (
20    any($org_vips, strings.icontains(body.html.inner_text, .display_name))
21    or any($org_vips, strings.icontains(body.plain.raw, .display_name))
22  )
23  and (
24    (
25      (subject.is_forward or subject.is_reply)
26      and (
27        (length(headers.references) == 0 and headers.in_reply_to is null)
28        or headers.in_reply_to is null
29      )
30    )
31    // fake thread, but no indication in the subject line
32    // current_thread pulls the recent thread, but the full body contains the fake "original" email
33    or (
34      not ((subject.is_forward or subject.is_reply))
35      and (
36        3 of (
37          strings.icontains(body.html.display_text, "from:"),
38          strings.icontains(body.html.display_text, "to:"),
39          strings.icontains(body.html.display_text, "sent:"),
40          strings.icontains(body.html.display_text, "subject:")
41        )
42        or length(body.previous_threads) > 0
43      )
44      and (
45        length(body.current_thread.text) + 100 < length(body.html.display_text)
46      )
47      // negating bouncebacks
48      and not any(attachments,
49                  .content_type in ("message/delivery-status", "message/rfc822")
50      )
51    )
52  )
53  and (
54    profile.by_sender().prevalence in ("new", "rare")
55    or profile.by_sender().days_known > 30
56  )
57  and not profile.by_sender().any_messages_benign  
58
59attack_types:
60  - "BEC/Fraud"
61tactics_and_techniques:
62  - "Impersonation: Employee"
63  - "Impersonation: VIP"
64  - "Social engineering"
65detection_methods:
66  - "Content analysis"
67  - "Header analysis"
68  - "Natural Language Understanding"
69  - "Sender analysis"
70id: "35a56b8e-9293-5ccf-95d3-c990152d8f48"
to-top