Link: Mismatched free file host links with document lure
Detects inbound emails containing mismatched hyperlinks where the displayed URL references a free file hosting service but the actual destination points to another free file host or a suspicious TLD. The rule combines this with NLU classification identifying BEC or credential theft intent, along with body text patterns common to fake document/scan notifications (e.g., 'scanned from', 'shared via', 'for your review') or short, urgency-driven messages. Trusted senders with passing DMARC are excluded to reduce false positives.
Sublime rule (View on GitHub)
1name: "Link: Mismatched free file host links with document lure"
2description: "Detects inbound emails containing mismatched hyperlinks where the displayed URL references a free file hosting service but the actual destination points to another free file host or a suspicious TLD. The rule combines this with NLU classification identifying BEC or credential theft intent, along with body text patterns common to fake document/scan notifications (e.g., 'scanned from', 'shared via', 'for your review') or short, urgency-driven messages. Trusted senders with passing DMARC are excluded to reduce false positives."
3type: "rule"
4severity: "medium"
5source: |
6 type.inbound
7 and any(filter(body.current_thread.links, .mismatched),
8 any([.display_url.domain.domain, .display_url.domain.root_domain],
9 . in $free_file_hosts
10 )
11 and (
12 any([.href_url.domain.domain, .href_url.domain.root_domain],
13 . in $free_file_hosts
14 )
15 or .href_url.domain.tld in $suspicious_tlds
16 )
17 )
18 and any(ml.nlu_classifier(body.current_thread.text).intents,
19 .name in ("bec", "cred_theft") and .confidence != "low"
20 )
21 and 2 of (
22 regex.icontains(body.current_thread.text,
23 'scanned from',
24 'total images',
25 'attachment format',
26 'scan information',
27 'statement/remittance',
28 'versalink',
29 'made a file available',
30 'document from .{0,40}is available',
31 '(?:uploaded|shared) via',
32 '(?:report|available) for your review'
33 ),
34 regex.icontains(body.current_thread.text, '={5,}|_{10,}'),
35 length(body.current_thread.text) < 700,
36 regex.icontains(body.current_thread.text,
37 'kindly review',
38 'review the attached',
39 'let us know the next step',
40 'for your review',
41 'please review the'
42 )
43 )
44 and not (
45 sender.email.domain.root_domain in $high_trust_sender_root_domains
46 and coalesce(headers.auth_summary.dmarc.pass, false)
47 )
48attack_types:
49 - "BEC/Fraud"
50 - "Credential Phishing"
51tactics_and_techniques:
52 - "Free file host"
53 - "Social engineering"
54detection_methods:
55 - "Natural Language Understanding"
56 - "URL analysis"
57 - "Content analysis"
58id: "19836dcf-cde4-5d9a-903f-c74c1e88e33d"