見た目は同じ、中身は別物 - Unicode の視覚的攻撃
apple.com と аpple.com は同じに見えますか? 実は違います。2 つ目の URL の最初の「а」はラテン文字の「a」ではなく、キリル文字の「а」(U+0430) です。人間の目には区別がつきませんが、コンピュータにとっては完全に別の文字であり、別のドメインです。
Unicode は世界中の文字を統一的に扱える画期的な仕組みですが、その豊富な文字セットがセキュリティ上の脅威にもなっています。
ホモグラフ攻撃 - 偽ドメインの作り方
ホモグラフ攻撃 (IDN homograph attack) は、見た目が同じ (または酷似した) 異なる文字を使って偽のドメイン名を作成する攻撃です。
- ラテン文字の「a」(U+0061) とキリル文字の「а」(U+0430)
- ラテン文字の「o」(U+006F) とキリル文字の「о」(U+043E)
- ラテン文字の「p」(U+0070) とキリル文字の「р」(U+0440)
- ラテン文字の「e」(U+0065) とキリル文字の「е」(U+0435)
これらを組み合わせると、аррle.com (すべてキリル文字) という、apple.com と視覚的に区別できないドメインを作成できます。フィッシングサイトの URL として使われれば、注意深いユーザーでも騙される可能性があります。
ブラウザの対策
主要なブラウザは、ホモグラフ攻撃への対策として、混合スクリプト (複数の文字体系が混在する) のドメイン名を Punycode 表記で表示します。例えば、キリル文字の аррle.com は xn--pple-43d0151b.com のように表示され、偽装が一目で分かります。
ただし、ドメイン全体が単一のスクリプト (例: すべてキリル文字) で構成されている場合、ブラウザによっては Punycode に変換せずそのまま表示することがあります。
見えない文字 - ゼロ幅文字の脅威
Unicode には、画面上に表示されない「ゼロ幅文字」が複数存在します。
- U+200B: Zero Width Space (ゼロ幅スペース)
- U+200C: Zero Width Non-Joiner
- U+200D: Zero Width Joiner
- U+FEFF: Zero Width No-Break Space (BOM)
これらの文字は目に見えませんが、文字列の比較やハッシュ計算には影響します。
- 透かし (ウォーターマーク): 機密文書にゼロ幅文字を埋め込み、漏洩時に誰が流出させたかを特定する手法がある。各受信者に異なるパターンのゼロ幅文字を挿入すれば、流出した文書のパターンから漏洩者を特定できる
- パスワードの問題: コピー & ペーストでパスワードを入力する際、ゼロ幅文字が混入すると「正しいパスワードなのにログインできない」という事態が発生する
- コードの改ざん: ソースコードにゼロ幅文字を挿入し、見た目は同じだが動作が異なるコードを作成する攻撃 (Trojan Source 攻撃)
方向制御文字 - テキストの流れを操る
Unicode には、テキストの表示方向を制御する文字があります。アラビア語やヘブライ語は右から左に書くため、これらの制御文字は正当な用途を持ちますが、攻撃にも悪用されます。
- U+202E: Right-to-Left Override。この文字以降のテキストを強制的に右から左に表示する
例えば、ファイル名 document_fdp.exe は、画面上では document_exe.pdf と表示されます。ユーザーは PDF ファイルだと思ってダブルクリックしますが、実際には .exe ファイル (実行ファイル) です。
開発者が注意すべきこと
- ユーザー入力を受け付ける際、ゼロ幅文字や方向制御文字をサニタイズ (除去) する
- ドメイン名の検証では、Punycode に変換してから比較する
- ファイル名の表示では、方向制御文字を除去またはエスケープする
- コードレビューでは、ゼロ幅文字の混入を検出するツール (例:
grep -P '[\x{200B}-\x{200F}\x{202A}-\x{202E}]') を使用する
まとめ
Unicode は世界中の文字を統一的に扱える偉大な仕組みですが、その豊富さがセキュリティの脅威にもなっています。ホモグラフ攻撃、ゼロ幅文字、方向制御文字 - これらの脅威を知っていれば、フィッシングサイトの URL や不審なファイル名に対する警戒心が高まります。IP 確認さんにアクセスする際も、URL バーのドメイン名が正しいことを確認する習慣をつけてください。
Unicode のセキュリティリスクを深く知りたい方には、文字コードの解説書が参考になります。