1+ name : " Suspicious request for financial information"
2+ description : " Email is from a suspicious sender and contains a request for financial information, such as AR reports."
3+ type : " rule"
4+ severity : " high"
5+ source : |
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+ 'Accounts? (?:Payable (?:Dep(\.|t\.?|artment)|e?Receipt)|(Co[[:punct:]]?ordinator|Admin|Manager|Payee))',
53+ '(?:pay(ment|([[:punct:]]|\s?)app)|EFT|ACH|deposit|remit|settle) (noti(ce|fication)|confirm(ation)?)'
54+ )
55+ // sender email listed as a recipient or recipients undisclosed/null
56+ and (
57+ (
58+ sender.email.email in map(recipients.to, .email.email)
59+ or (length(recipients.to) == 0 or length(recipients.to) is null)
60+ )
61+ // non-benign nlu intent
62+ or any(ml.nlu_classifier(body.current_thread.text).intents,
63+ // callback phishing is outside the scope of this rule
64+ (.name != "benign" and .name != "callback_scam")
65+ )
66+ )
67+ )
68+ )
69+ // negate resume related/job inquiry outreach
70+ and not (
71+ any(ml.nlu_classifier(body.current_thread.text).topics,
72+ .name == "Professional and Career Development" and .confidence == "high"
73+ )
74+ and any(ml.nlu_classifier(body.current_thread.text).intents,
75+ .name == "benign" and .confidence != "low"
76+ )
77+ )
78+ and (
79+ (
80+ sender.email.domain.root_domain in $high_trust_sender_root_domains
81+ and not headers.auth_summary.dmarc.pass
82+ )
83+ or sender.email.domain.root_domain not in $high_trust_sender_root_domains
84+ )
85+ and not profile.by_sender().any_messages_benign
86+
87+ attack_types :
88+ - " BEC/Fraud"
89+ tactics_and_techniques :
90+ - " Free email provider"
91+ - " Impersonation: Employee"
92+ - " Impersonation: VIP"
93+ - " Social engineering"
94+ detection_methods :
95+ - " Content analysis"
96+ - " Header analysis"
97+ - " Sender analysis"
98+ id : " 2f079cc3-c484-54b3-88a3-c4ee73d266d1"
99+ og_id : " 4ebdaa4d-4db2-56c6-9a6c-220ad49b7681"
100+ testing_pr : 3564
101+ testing_sha : c90784669e1e4334f63ea55915aa7353dda3c593
0 commit comments