Suspicious request for financial information
Email is from a suspicious sender and contains a request for financial information, such as AR reports.
Sublime rule (View on GitHub)
1name: "Suspicious request for financial information"
2description: "Email is from a suspicious sender and contains a request for financial information, such as AR reports."
3type: "rule"
4severity: "high"
5source: |
6 type.inbound
7 and length(attachments) <= 1
8 and length(recipients.to) <= 2
9 // suspicious sender
10 and (
11 (
12 length(headers.reply_to) > 0
13 and all(headers.reply_to,
14 .email.domain.root_domain != sender.email.domain.root_domain
15 and .email.domain.root_domain not in $org_domains
16 )
17 )
18 or sender.email.domain.root_domain in $free_email_providers
19 or profile.by_sender().days_known < 3
20 )
21 // specific financial language
22 and (
23 regex.icontains(subject.subject,
24 '\b(Aged|Age?ing) (Payables|Receivables|Report)',
25 'reconcill?iation (report|statement).*(issued (settlement|advice)s?)|billing records?'
26 )
27 or (
28 regex.icontains(body.current_thread.text,
29 '\b(Aged|Age?ing) (Payables|Receivables|Report)',
30 '(updated|recent) (\bAR\b|\b\AP\b|\bAR\b \& \bAP\b|accounts?) (Payables|Receivables|Reports)',
31 '(send|forward|provide).*remittance (advice|statements?)'
32 )
33 or strings.icontains(body.current_thread.text,
34 "copy of a current statement"
35 )
36 or (
37 strings.icontains(body.current_thread.text, "please send all past due")
38 and strings.icontains(body.current_thread.text, "current invoices")
39 )
40 )
41 // suspicious link display text
42 or (
43 any(body.links,
44 regex.icontains(.display_text,
45 '(Payment|Remittance|Settlement|Transfer) ?Batch',
46 )
47 )
48 )
49 // suspicious sender display name
50 or (
51 regex.icontains(sender.display_name,
52 'Account(s)? Payable Dep(\.|t\.?|artment)'
53 )
54 // sender email listed as a recipient or recipients undisclosed/null
55 and (
56 sender.email.email in map(recipients.to, .email.email)
57 or (length(recipients.to) == 0 or length(recipients.to) is null)
58 )
59 )
60 )
61 // negate resume related/job inquiry outreach
62 and not (
63 any(ml.nlu_classifier(body.current_thread.text).topics,
64 .name == "Professional and Career Development" and .confidence == "high"
65 )
66 and any(ml.nlu_classifier(body.current_thread.text).intents,
67 .name == "benign" and .confidence != "low"
68 )
69 )
70 and (
71 (
72 sender.email.domain.root_domain in $high_trust_sender_root_domains
73 and not headers.auth_summary.dmarc.pass
74 )
75 or sender.email.domain.root_domain not in $high_trust_sender_root_domains
76 )
77 and not profile.by_sender().any_messages_benign
78
79attack_types:
80 - "BEC/Fraud"
81tactics_and_techniques:
82 - "Free email provider"
83 - "Impersonation: Employee"
84 - "Impersonation: VIP"
85 - "Social engineering"
86detection_methods:
87 - "Content analysis"
88 - "Header analysis"
89 - "Sender analysis"
90id: "4ebdaa4d-4db2-56c6-9a6c-220ad49b7681"