8

主な質問

私は、フィッシング メールでのブランド (PayPal、Mastercard など) の使用を検出する必要がある Java の API に取り組んでいます。

明らかに、攻撃者がこれらのブランドを標的にして検出を困難にするために使用するさまざまな戦略があります。たとえば、「rnastercard 」は「 mastercard」と非常によく似ており、疑うことを知らないユーザーをだますことができます。

現時点では、あいまい文字列検索の形式を使用して、これらのブランドのスペルミスを簡単に検出できます。しかし、私が直面している問題は、攻撃者がホモグリップを使用して特定のブランドの名前を変更し、同じ視覚的解釈を維持する場合です。

ホモグリフ攻撃は、[a-zA-Z]パターンの文字を、似ているがこの範囲外の文字に置き換えます。たとえば、特定の文字セットを使用する攻撃者は、P に似たギリシャ文字 RHOを使用して 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]表現を取得することです。

2 番目の解決策は、文字セットごとにマップを作成することです。マップのキーは文字そのものであり、値は[a-zA-Z]に相当します。このマップは、手動で行うか、上記の最初のソリューションを使用して行う必要があります。

追加の詳細

私はすでにこの質問をここにしました。ただし、編集作業にもかかわらず、質問は閉じられたままでした。おそらく、私が自分自身をうまく表現しておらず、質問に適切にタグを付けていなかったためです。

その特定の質問では、実際の質問を曇らせるJavaで使用される文字セットに関して私が持っていたいくつかの懸念にも対処しました. ただし、回答にそのような情報を含める必要があると感じた場合は、そのような質問を調査する時間を節約できるので、感謝します. ホモグリフ攻撃の問題と、Java または *javax.mail.** の文字セットの問題は、別々ですが関連しています。

主な質問で説明されているホモグリフ攻撃の特定の例として、この電子メールがあります。注意!これは、この特定の攻撃方法を使用したフィッシング メールの実際の内容であるため、そのメールに含まれるリンクをたどらないでください。

この質問には、適切なタグと思われるタグを付けました。同意しない場合は、この質問に投票するのではなく、編集してください。

4

2 に答える 2

4

TR-39の一部として、Unicode コンソーシアムは、マッピングを支援するために使用できる混乱可能性のリストを維持しています。その完全性を証明することはできません。

TR-39は、混同可能な文字列を比較するための、混同可能な文字列のリストを使用するスケルトン アルゴリズムについても説明しています。あなたはアルゴリズムの GoLang実装であり、簡単なJava ポートを作成しました。

これとは別に、分音記号と大文字を削除することも役立ちます。これらは、スケルトン アルゴリズムによって正規化されません。したがって、完全なプロセスはスケルトンのようなものでなければなりません --> 発音記号を削除します ---> 小文字にします。

/*
 * Special regular expression character ranges relevant for simplification
 * -> see http://docstore.mik.ua/orelly/perl/prog3/ch05_04.htm
 * InCombiningDiacriticalMarks: special marks that are part of "normal" ä,
 * ö, î etc.. IsSk: Symbol, Modifier see
 * http://www.fileformat.info/info/unicode/category/Sk/list.htm IsLm:
 * Letter, Modifier see
 * http://www.fileformat.info/info/unicode/category/Lm/list.htm
 */
private static final Pattern DIACRITICS_AND_FRIENDS = Pattern.compile("[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+");

private static String stripDiacritics(String str) {
    str = Normalizer.normalize(str, Normalizer.Form.NFD);
    str = DIACRITICS_AND_FRIENDS.matcher(str).replaceAll("");
    return str;
}
于 2015-02-03T16:50:00.563 に答える