Skip to content

Commit

Permalink
Create link_zoho_forms_unsolicited.yml (#1940)
Browse files Browse the repository at this point in the history
Co-authored-by: ID Generator <[email protected]>
Co-authored-by: Sam Scholten <[email protected]>
  • Loading branch information
3 people authored Nov 5, 2024
1 parent 850a335 commit 2ac9dcb
Showing 1 changed file with 68 additions and 0 deletions.
68 changes: 68 additions & 0 deletions detection-rules/link_zoho_forms_unsolicited.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: "Link: Zoho Form Link from Unsolicited Sender"
description: "This detection rule matches on messages containing at least one link to forms.zohopublic.com from an unsolicited sender. Zoho provides a free plan enabling users to create custom websites and file hosting. This service has been abused by threat actors to host landing pages via forms directing victims to a next stage of credential phishing."
type: "rule"
severity: "medium"
source: |
type.inbound
// filter links to zoho forms
and any(filter(body.links,
// zoho forms link
.href_url.domain.domain == 'forms.zohopublic.com'
// remove a common FP for linking directly
and not strings.istarts_with(.href_url.path, '/quickbooking/')
),
// remove FPs by checking there is only one link
// ensure the link is within the current_thread
(
strings.contains(body.current_thread.text, .display_text)
or strings.contains(body.current_thread.text, .href_url.url)
)
// and ensure that link only occurs once within body.html
and (
(
body.html.raw is not null
and (
strings.count(body.html.raw, .display_text) == 1
or strings.count(body.html.raw, .href_url.url) == 1
)
)
or (
// and ensure that link only occurs once within plaintext if html.raw is null
body.plain.raw is not null
and (
strings.count(body.plain.raw, .display_text) == 1
or strings.count(body.plain.raw, .href_url.url) == 1
)
)
)
)
// dont match messages with lots of links or long bodies, often marketing messages
and length(body.links) < 20
and length(body.current_thread.text) < 900
// not solicited or from malicious/spam user with no FPs
and (
not profile.by_sender().solicited
or (
profile.by_sender().any_messages_malicious_or_spam
and not profile.by_sender().any_false_positives
)
)
// not from high trust sender root domains
and (
(
sender.email.domain.root_domain in $high_trust_sender_root_domains
and not headers.auth_summary.dmarc.pass
)
or sender.email.domain.root_domain not in $high_trust_sender_root_domains
)
attack_types:
- "Callback Phishing"
tactics_and_techniques:
- "Free file host"
detection_methods:
- "Content analysis"
- "URL analysis"
- "Sender analysis"
id: "eb04a9f2-c40b-5fcc-97de-bee7111bc3d8"

0 comments on commit 2ac9dcb

Please sign in to comment.