Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions detection-rules/link_cyrillic_substitutions_unsolicited.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,12 @@ source: |
)
)

// display name or subject contains Cyrillic vowels in addition to standard letters
// display name or subject contains Cyrillic/Greek confusables within the same word as Latin
// Both scripts must appear in a single whitespace-delimited token (true homoglyph substitution)
and any([subject.subject, sender.display_name],
regex.icontains(., '(а|е|и|о|у)') and regex.icontains(., '[a-z]')
regex.contains(.,
'[a-zA-Z][^\s]*[\x{430}\x{435}\x{438}\x{43e}\x{443}\x{440}\x{441}\x{445}\x{456}\x{410}\x{412}\x{415}\x{41a}\x{41c}\x{41d}\x{41e}\x{420}\x{421}\x{422}\x{425}\x{391}\x{392}\x{395}\x{396}\x{397}\x{399}\x{39a}\x{39c}\x{39d}\x{39f}\x{3a1}\x{3a4}\x{3a5}\x{3a7}\x{3bf}]|[\x{430}\x{435}\x{438}\x{43e}\x{443}\x{440}\x{441}\x{445}\x{456}\x{410}\x{412}\x{415}\x{41a}\x{41c}\x{41d}\x{41e}\x{420}\x{421}\x{422}\x{425}\x{391}\x{392}\x{395}\x{396}\x{397}\x{399}\x{39a}\x{39c}\x{39d}\x{39f}\x{3a1}\x{3a4}\x{3a5}\x{3a7}\x{3bf}][^\s]*[a-zA-Z]'
)
)

// and the senders tld or return path is not "ru"
Expand All @@ -40,7 +43,6 @@ source: |
)
)
and not profile.by_sender().any_messages_benign

tags:
- "Attack surface reduction"
attack_types:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,12 @@ source: |
type.inbound
and 0 < length(body.links) < 10

// display name or subject contains confusable vowels
// display name or subject contains Cyrillic/Greek confusables within the same word as Latin
// Both scripts must appear in a single whitespace-delimited token (true homoglyph substitution)
and any([subject.subject, sender.display_name],
regex.icontains(., '(а|е|и|о|у)')
regex.contains(.,
'[a-zA-Z][^\s]*[\x{430}\x{435}\x{438}\x{43e}\x{443}\x{440}\x{441}\x{445}\x{456}\x{410}\x{412}\x{415}\x{41a}\x{41c}\x{41d}\x{41e}\x{420}\x{421}\x{422}\x{425}\x{391}\x{392}\x{395}\x{396}\x{397}\x{399}\x{39a}\x{39c}\x{39d}\x{39f}\x{3a1}\x{3a4}\x{3a5}\x{3a7}\x{3bf}]|[\x{430}\x{435}\x{438}\x{43e}\x{443}\x{440}\x{441}\x{445}\x{456}\x{410}\x{412}\x{415}\x{41a}\x{41c}\x{41d}\x{41e}\x{420}\x{421}\x{422}\x{425}\x{391}\x{392}\x{395}\x{396}\x{397}\x{399}\x{39a}\x{39c}\x{39d}\x{39f}\x{3a1}\x{3a4}\x{3a5}\x{3a7}\x{3bf}][^\s]*[a-zA-Z]'
)
)

// and suspicious subject
Expand Down