主要问题
我正在 Java 中开发一个 API,需要检测网络钓鱼电子邮件中品牌(例如 PayPal、Mastercard 等)的使用情况。
显然,攻击者使用不同的策略来针对这些品牌,以便更难以检测到它们。例如 ”大师卡“看起来非常相似”万事达”并且可以欺骗毫无戒心的用户。
此时我可以使用模糊字符串搜索的形式轻松检测出这些品牌的拼写错误。然而,我面临的问题是,当攻击者使用同形符号来更改特定品牌的名称但保持相同的视觉解释时。
同形文字攻击会替换以下字符[a-zA-Z]具有看起来相似但超出此范围的字符的模式。例如,使用特定字符集的攻击者可以使用希腊字母 RHO看起来 P 的目标是 PayPal。此类攻击中的 PayPal 品牌名称将变为:
[希腊字符 RHO][a][y][希腊字符 RHO][a][l]
由于我对 Unicode 或 ISO 标准及其编码等不同标准几乎没有经验,因此我需要您的建议。有没有办法以编程方式确定角色的视觉等效项在 [a-zA-Z] 集合之外这样结果将是一个字符在 [a-zA-Z] 集合内?
您的一些答案可能基于特定的字符集,我正在寻找一种解决方案,可以帮助我确定电子邮件中可用的每个字符集的此类表示形式。
我还没有阅读邮件交换的 RFC 标准,但它们在我的列表中,我现在问这个问题是为了节省时间。
可能但不可行的解决方案
我已经想到了一些解决方案,但它们不适用于我的特定情况,因为它们是 CPU 密集型的并且具有类似黑客的性质(阅读“可能很容易被破坏”)。
第一个解决方案是写下这个字符外部 [a-zA-Z]将其形式转化为图像并将该图像提供给 OCR API 以获得最接近的图像[a-zA-Z]表示。
第二种解决方案是为每个字符集创建一个映射,映射的键是字符本身,值是字符集[a-zA-Z]相等的。该地图要么必须手动完成,要么使用上述第一个解决方案。
额外细节
我已经问过这个问题了here。然而,尽管我进行了编辑工作,但问题仍然关闭。可能是因为我没有很好地表达自己,没有正确标记问题。
在那个特定问题中,我还解决了我对 Java 使用的字符集的一些担忧,这些担忧掩盖了实际问题。但是,如果您觉得有必要在答案中包含此类信息,我将不胜感激,因为这可以节省我研究此类问题的时间。同形文字攻击的问题和 Java 或 *javax.mail.** 中的字符集问题是分开但又相互联系的。
作为主要问题中描述的同形文字攻击的一个特定示例是这封电子邮件。谨防!这是使用这种特定攻击方法的网络钓鱼电子邮件的实际内容,因此请勿点击该电子邮件中包含的任何链接。
我已经用我认为合适的标签标记了这个问题,如果您不同意,请对此问题进行编辑,而不是投票结束。