-
Notifications
You must be signed in to change notification settings - Fork 50
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Create unrelated_sharepoint_link.yml by @aidenmitchell #2230 Source SHA 4059bf5 Triggered by @aidenmitchell
- Loading branch information
Sublime Rule Testing Bot
committed
Dec 17, 2024
1 parent
2cc3e58
commit cc310ee
Showing
1 changed file
with
113 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
name: "Sharepoint Link Likely Unrelated to Sender" | ||
description: "Detects when a sender links to a Sharepoint file where the subdomain significantly differs from the sender's domain. The rule checks for OneNote, PDF, or unknown file types and includes various domain validation checks." | ||
type: "rule" | ||
severity: "medium" | ||
source: | | ||
type.inbound | ||
and 0 < length(body.links) < 10 | ||
and any(filter(body.links, .href_url.domain.root_domain == 'sharepoint.com'), | ||
// Normalize Levenshtein distance by string length (0 = identical, 0.7+ = different) | ||
// Working with what we have in MQL, considering we dont have max() or any other forms of string distancing | ||
( | ||
( | ||
strings.iends_with(.href_url.domain.subdomain, | ||
'-my' | ||
) // common Sharepoint subdomain suffix | ||
and ( | ||
( | ||
strings.ilevenshtein(.href_url.domain.subdomain, | ||
sender.email.domain.sld | ||
) - 3 // subtract aforementioned suffix for more accurate calculation | ||
) / ( | ||
( | ||
(length(.href_url.domain.subdomain) - 3) + length(sender.email.domain.sld | ||
) | ||
+ ( | ||
( | ||
(length(.href_url.domain.subdomain) - 3) - length(sender.email.domain.sld | ||
) | ||
) + ( | ||
length(sender.email.domain.sld) - ( | ||
length(.href_url.domain.subdomain) - 3 | ||
) | ||
) | ||
) | ||
) / 2.0 // to ensure we keep the result as a float | ||
) | ||
) > 0.7 // customizable threshold | ||
) | ||
or ( | ||
not strings.iends_with(.href_url.domain.subdomain, | ||
'-my' | ||
) // no suffix, continue with original calculation | ||
and ( | ||
strings.ilevenshtein(.href_url.domain.subdomain, | ||
sender.email.domain.sld | ||
) / ( | ||
( | ||
length(.href_url.domain.subdomain) + length(sender.email.domain.sld | ||
) | ||
+ ( | ||
( | ||
length(.href_url.domain.subdomain) - length(sender.email.domain.sld | ||
) | ||
) + ( | ||
length(sender.email.domain.sld) - length(.href_url.domain.subdomain | ||
) | ||
) | ||
) | ||
) / 2.0 // to ensure we keep the result as a float | ||
) | ||
) > 0.7 // customizable threshold | ||
) | ||
) | ||
and not strings.icontains(.href_url.path, sender.email.local_part) | ||
// it is either a OneNote or PDF file, or unknown | ||
and ( | ||
strings.icontains(.href_url.path, '/:o:/') | ||
or strings.icontains(.href_url.path, '/:b:/') | ||
or strings.icontains(.href_url.path, '/:u:/') | ||
) | ||
// a future negation like this would be great | ||
// and any($org_domains, .domain.subdomain != ..href_url.domain.subdomain) | ||
) | ||
// a way to negate long threads | ||
// the full thread must be less than 6 times the length of the current thread | ||
and length(body.html.inner_text) < 6 * length(body.current_thread.text) | ||
and sender.email.domain.root_domain not in ( | ||
"sharepoint.com", | ||
"sharepointonline.com" | ||
) | ||
// negate highly trusted sender domains unless they fail DMARC authentication | ||
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 | ||
) | ||
tags: | ||
- "Attack surface reduction" | ||
attack_types: | ||
- "BEC/Fraud" | ||
- "Credential Phishing" | ||
tactics_and_techniques: | ||
- "Impersonation: Employee" | ||
- "Lookalike domain" | ||
- "OneNote" | ||
- "PDF" | ||
- "Social engineering" | ||
detection_methods: | ||
- "URL analysis" | ||
- "Sender analysis" | ||
- "Header analysis" | ||
- "HTML analysis" | ||
id: "6870f489-5581-53f0-a6f7-a03e259fb073" | ||
testing_pr: 2230 | ||
testing_sha: 4059bf56bf8205c946ac5a78d55376b31d69de20 |