BEC/Fraud: Fake investment outreach from suspicious senders
Detects unsolicited investment/funding outreach emails from suspicious senders. Targets mass-mailed spam campaigns offering business funding, capital allocation, and family office outreach.
Sublime rule (View on GitHub)
1name: "BEC/Fraud: Fake investment outreach from suspicious senders"
2description: |
3 Detects unsolicited investment/funding outreach emails from suspicious senders.
4 Targets mass-mailed spam campaigns offering business funding, capital allocation,
5 and family office outreach.
6type: "rule"
7severity: "medium"
8source: |
9 type.inbound
10 // subject contains investment language
11 and (
12 strings.istarts_with(subject.base,
13 'acquisition opportunity',
14 'an investment opportunity',
15 'business opportunity',
16 'investment into',
17 'investing in',
18 'financing for'
19 )
20 or any([subject.base, body.current_thread.text],
21 regex.icontains(.,
22 'family.?office',
23 '(?:finding|looking for).{1,15}\b(?:manag(?:ing|ement))?\b.firm'
24 )
25 )
26 )
27 // financial body content
28 and (
29 any(ml.nlu_classifier(body.current_thread.text).topics,
30 .name == "Financial Communications" and .confidence != "low"
31 )
32 or (
33 any(ml.nlu_classifier(body.current_thread.text).topics,
34 .name in ("B2B Cold Outreach", "Charity and Non-Profit")
35 and .confidence != "low"
36 )
37 and not any(ml.nlu_classifier(body.current_thread.text).topics,
38 .name in ("Contact List Solicitation")
39 )
40 and regex.icontains(body.current_thread.text,
41 '\d{3}k',
42 'capital',
43 'family.?office',
44 'fee structure',
45 'funding',
46 'funded in \d+',
47 'private equity',
48 'rates from \d+%'
49 )
50 )
51 )
52 // suspicious sender
53 and (
54 (
55 sender.email.domain.tld in $suspicious_tlds
56 or sender.email.domain.tld in ("info", "de")
57 // freemailer
58 or sender.email.domain.domain in $free_email_providers
59 // new sender domain
60 or network.whois(sender.email.domain).days_old <= 180
61 // sender mismatch sent via amazonses
62 or (
63 headers.return_path.email is not null
64 and headers.return_path.email != sender.email.email
65 and headers.return_path.domain.root_domain != sender.email.domain.root_domain
66 and headers.return_path.domain.root_domain == "amazonses.com"
67 )
68 )
69
70 // sender profiles
71 or (
72 (
73 profile.by_sender_email().prevalence == "new"
74 and not profile.by_sender_email().solicited
75 )
76 or (
77 profile.by_sender_email().any_messages_malicious_or_spam
78 and not profile.by_sender_email().any_messages_benign
79 )
80 )
81 )
82
83 // negate mailers with unsubscribe links
84 and not (
85 any(headers.hops, any(.fields, .name =~ "List-Unsubscribe"))
86 or any(body.current_thread.links,
87 strings.icontains(.display_text, "unsubscribe")
88 )
89 )
90tags:
91 - "Attack surface reduction"
92attack_types:
93 - "BEC/Fraud"
94tactics_and_techniques:
95 - "Social engineering"
96detection_methods:
97 - "Header analysis"
98 - "Sender analysis"
99 - "Content analysis"
100 - "Natural Language Understanding"
101 - "Whois"
102id: "5d4c4a15-661c-5fd1-9d5f-1c72c8230be8"