Hauptfrage
Ich arbeite an einer API in Java, die die Verwendung von Marken (z. B. PayPal, Mastercard usw.) in Phishing-E-Mails erkennen soll.
Offensichtlich gibt es verschiedene Strategien, mit denen die Angreifer diese Marken anvisieren, damit sie schwerer zu erkennen sind. Zum Beispiel " rnastercard " sieht " mastercard " sehr ähnlich und kann einen ahnungslosen Benutzer täuschen.
Zu diesem Zeitpunkt kann ich die Rechtschreibfehler dieser Marken leicht erkennen, indem ich eine Form der unscharfen Zeichenkettensuche benutze. Das Problem, mit dem ich konfrontiert bin, ist jedoch, wenn der Angreifer Homoglyps verwendet, um den Namen einer bestimmten Marke zu ändern, aber dieselbe visuelle Interpretation beibehält.
Bei einem Homoglyph-Angriff wird ein Zeichen aus dem [a-zA-Z] -Muster durch ein Zeichen ersetzt, das ähnlich aussieht, aber außerhalb dieses Bereichs liegt. Zum Beispiel kann ein Angreifer, der einen bestimmten Zeichensatz verwendet, den griechischen Buchstaben RHO verwenden, der wie P aussieht, um auf PayPal abzuzielen. Der PayPal-Markenname bei dieser Art von Angriff würde lauten:
[griechisches Zeichen RHO] [a] [y] [griechisches Zeichen RHO] [a] [l]
Da ich wenig oder keine Erfahrung mit verschiedenen Standards wie Unicode- oder ISO-Standards und deren Kodierungen habe, rufe ich Ihren Rat an. Gibt es eine Möglichkeit, das visuelle Äquivalent eines Zeichens außerhalb der [a-zA-Z] Menge zu bestimmen, so dass das Ergebnis ein Zeichen innerhalb der [a-zA-Z] wäre einstellen ?
Einige Ihrer Antworten basieren möglicherweise auf einem bestimmten Zeichensatz. Ich suche nach einer Lösung, mit der ich solche Darstellungen für jeden in einer E-Mail verwendbaren Zeichensatz ermitteln kann.
Ich habe die RFC-Standards für den Mailaustausch nicht gelesen, aber sie stehen auf meiner Liste. Ich stelle diese Frage jetzt, um Zeit zu sparen.
Mögliche, aber nicht praktikable Lösungen
Ich habe an einige Lösungen gedacht, aber sie sind für meinen speziellen Fall nicht praktikabel, da sie sehr CPU-intensiv und hackartig sind (lesen Sie "kann leicht gebrochen werden").
Die erste Lösung wäre, das Zeichen, das außerhalb von [a-zA-Z] ist, in ein Bild zu schreiben und dieses Bild einer OCR-API zuzuführen, damit es am nächsten ist [a-zA-Z] Darstellung.
Die zweite Lösung wäre, eine Karte für jeden Zeichensatz zu erstellen, der Schlüssel der Karte wäre das Zeichen selbst und der Wert wäre z . Diese Karte müsste entweder manuell oder mit der oben beschriebenen ersten Lösung erstellt werden.
Zusätzliche Details
Ich habe diese Frage bereits hier gestellt . Die Frage blieb jedoch trotz meiner redaktionellen Bemühungen geschlossen. Wahrscheinlich, weil ich mich nicht gut ausgedrückt habe und ich die Frage nicht richtig markiert habe.
In dieser speziellen Frage ging ich auch auf einige Bedenken ein, die ich bezüglich der von Java verwendeten Zeichensätze hatte, die die eigentliche Frage trübten. Wenn Sie jedoch das Bedürfnis verspüren, solche Informationen in Ihre Antwort aufzunehmen, wäre ich Ihnen dankbar, da ich dadurch einige Zeit sparen würde, um solche Fragen zu recherchieren. Die Frage der Homoglyph-Attacken und die Frage nach Zeichensätzen in Java oder * javax.mail. ** sind getrennt, aber verknüpft.
Als ein spezielles Beispiel für einen Homoglyph-Angriff, wie in der Hauptfrage beschrieben, ist diese E-Mail . IN ACHT NEHMEN! Das ist der tatsächliche Inhalt einer Phishing-E-Mail, die diese bestimmte Angriffsmethode verwendet, also folgen Sie keinem Link, der in dieser E-Mail enthalten ist.
Ich habe diese Frage mit dem versehen, was ich für die passenden Tags hielt. Wenn Sie nicht einverstanden sind, geben Sie bitte eine Änderung an dieser Frage an, anstatt sie geschlossen zu wählen.
Als Teil von TR-39 unterhält das Unicode-Konsortium ein Liste der verwechselbaren Dateien , die Sie für Ihr Mapping verwenden können. Ich kann nicht über seine Vollständigkeit aussagen.
TR-39 beschreibt auch einen Skelettalgorithmus zum Vergleichen von verwechselbaren Strings, der die Liste der Konfusables verwendet. Thee ist Eine GoLang Implementierung des Algorithmus und ich habe eine schnelle Java-Port .
Abgesehen davon hilft das Entfernen von Diakritika und Großbuchstaben. Diese werden nicht durch den Skelettalgorithmus normalisiert. Also sollte der vollständige Prozess etwas wie Skelett sein - & gt; Diakritika entfernen --- & gt; in Kleinbuchstaben.
%Vor%Hier ist ein GitHub-Repo mit einer großen Liste von Homoglyphen und etwas Java und JavaScript, um dabei zu helfen, Wörter zu finden, die durch getarnt wurden mit ihnen (Disclaimer - ich schrieb es).
Die Liste basiert auf der Unicode - Liste der von @mpkorstanje erwähnten Konfusel. Sie enthält einige zusätzliche Homoglyphen, die nicht in dieser Liste enthalten sind. Der Suchcode berücksichtigt auch die Variation in der Groß - und Kleinschreibung 'ᗰas⟙eᖇcᴀrd')