Callback phishing: Branded invoice from sender/reply-to domain less than 30 days old
This rule checks for invoicing content from a sender, reply-to domain or return-path domain less than 30d old. It also checks the body or the OCR'd screenshot for key words commonly abused in fraudulent invoicing attacks.
Sublime rule (View on GitHub)
1name: "Callback phishing: Branded invoice from sender/reply-to domain less than 30 days old"
2description: "This rule checks for invoicing content from a sender, reply-to domain or return-path domain less than 30d old. It also checks the body or the OCR'd screenshot for key words commonly abused in fraudulent invoicing attacks. "
3type: "rule"
4severity: "medium"
5source: |
6 type.inbound
7 // reply to domain that's less than 30d old and doesn't match the sender
8 and (
9 (
10 length(headers.reply_to) > 0
11 and all(headers.reply_to,
12 network.whois(.email.domain).days_old <= 30
13 and .email.email != sender.email.email
14 )
15 )
16
17 // or the return path or sender domain is less than 30d old
18 or network.whois(headers.return_path.domain).days_old <= 30
19 or network.whois(sender.email.domain).days_old <= 30
20 )
21
22 // invoicing with high confidence
23 and any(ml.nlu_classifier(body.current_thread.text).tags,
24 .name == "invoice" and .confidence == "high"
25 )
26
27 // commonly abused brands in body
28 and (
29 strings.ilike(body.current_thread.text,
30 "*mcafee*",
31 "*norton*",
32 "*geek squad*",
33 "*paypal*",
34 "*ebay*",
35 "*symantec*",
36 "*best buy*",
37 "*lifelock*",
38 "*virus*"
39 )
40
41 // commonly abused brand logo
42 or any(ml.logo_detect(file.message_screenshot()).brands,
43 .name in ("PayPal", "Norton", "GeekSquad", "Ebay")
44 )
45
46 // check message screenshot ocr for commonly abused brands
47 //
48 // This rule makes use of a beta feature and is subject to change without notice
49 // using the beta feature in custom rules is not suggested until it has been formally released
50 //
51 or 1 of (
52 strings.icontains(beta.ocr(file.message_screenshot()).text, "geek squad"),
53 strings.icontains(beta.ocr(file.message_screenshot()).text, "lifelock"),
54 strings.icontains(beta.ocr(file.message_screenshot()).text, "best buy"),
55 strings.icontains(beta.ocr(file.message_screenshot()).text, "mcafee"),
56 strings.icontains(beta.ocr(file.message_screenshot()).text, "norton"),
57 strings.icontains(beta.ocr(file.message_screenshot()).text, "ebay"),
58 strings.icontains(beta.ocr(file.message_screenshot()).text, "paypal"),
59 strings.icontains(beta.ocr(file.message_screenshot()).text, "virus"),
60 )
61 )
62
63 // phone number regex
64 and regex.icontains(body.current_thread.text,
65 '\+?(\d{1}.)?\(?\d{3}?\)?.\d{3}.?\d{4}'
66 )
67 and not profile.by_sender().solicited
68 and not profile.by_sender().any_messages_benign
69
70attack_types:
71 - "Callback Phishing"
72tactics_and_techniques:
73 - "Impersonation: Brand"
74 - "Out of band pivot"
75 - "Social engineering"
76detection_methods:
77 - "Header analysis"
78 - "Natural Language Understanding"
79 - "Optical Character Recognition"
80 - "Whois"
81id: "e6f4af53-dbb6-5917-acee-bfd7d8042c03"