Основной вопрос
Я работаю над API на Java, который должен обнаруживать использование брендов (например, PayPal, Mastercard и т. д.) в фишинговых электронных письмах.
Очевидно, что злоумышленники используют разные стратегии для нацеливания на эти бренды, чтобы их было труднее обнаружить. Например, "rnastercard" очень похоже на "mastercard" и может обмануть ничего не подозревающего пользователя.
В настоящее время я могу легко обнаружить орфографические ошибки в названиях этих брендов, используя поиск по нечетким строкам. Однако проблема, с которой я сталкиваюсь, заключается в том, что злоумышленник использует гомоглипы для изменения названия определенного бренда, но сохраняет ту же визуальную интерпретацию.
Атака гомоглифами заменяет символ из шаблона [a-zA-Z] символом, который выглядит похожим, но находится за пределами этого диапазона. Например, злоумышленник, использующий определенный набор символов, может использовать греческую букву RHO, похожую на P, для нападения на PayPal. Торговая марка PayPal в такой атаке будет выглядеть так:
[греческий символ RHO][a][y][греческий символ RHO][a][l]
Поскольку у меня практически нет опыта работы с различными стандартами, такими как стандарты Unicode или ISO, и их кодировками, я обращаюсь к вам за советом. Есть ли способ программно определить визуальный эквивалент символа вне набора [a-zA-Z], чтобы результатом был символ внутри [a-zA-Z] установить?
Некоторые из ваших ответов могут быть основаны на определенном наборе символов, я ищу решение, которое помогло бы мне определить такие представления для каждого набора символов, который можно использовать в электронном письме.
Я не читал стандарты RFC для обмена почтой, но они есть в моем списке, я задаю этот вопрос сейчас, чтобы сэкономить время.
Возможные, но неосуществимые решения
Я думал о некоторых решениях, но они не подходят для моего конкретного случая, поскольку они очень интенсивно используют ЦП и имеют характер взлома (читай «могут быть легко взломаны»).
Первым решением было бы записать символ, который за пределами [a-zA-Z] в его форме, в изображение и передать это изображение в API OCR, чтобы получить его ближайший [a- zA-Z] представление.
Вторым решением будет создание карты для каждого набора символов, ключом карты будет сам символ, а значением будет его эквивалент [a-zA-Z]. Эта карта должна быть сделана вручную или с использованием первого решения, описанного выше.
Дополнительная информация
Я уже задавал этот вопрос здесь. Однако вопрос остался закрытым, несмотря на мои усилия по редактированию. Возможно, потому что я не очень хорошо выразился и не правильно отметил вопрос.
В этом конкретном вопросе я также рассмотрел некоторые опасения, которые у меня были относительно наборов символов, используемых Java, которые затуманили фактический вопрос. Однако, если вы чувствуете необходимость включить такую информацию в свой ответ, я был бы признателен, так как это сэкономило бы мне время на изучение таких вопросов. Вопрос об атаках с использованием гомоглифов и вопрос о наборах символов в Java или *javax.mail.** являются отдельными, но связанными между собой вопросами.
Конкретным примером атаки с использованием гомоглифов, описанной в основном вопросе, является это электронное письмо. ОСТЕРЕГАТЬСЯ! Это фактическое содержание фишингового электронного письма, использующего этот конкретный метод атаки, поэтому не переходите ни по одной из ссылок, содержащихся в этом электронном письме.
Я пометил этот вопрос теми тегами, которые, по моему мнению, были бы подходящими. Если вы не согласны, пожалуйста, отредактируйте этот вопрос, а не голосуйте за его закрытие.