見た目は同じ、中身は別物 - 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.comxn--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 のセキュリティリスクを深く知りたい方には、文字コードの解説書が参考になります。

この記事の関連用語

フィッシング ホモグラフ攻撃で偽ドメインを作成し、正規サイトになりすます手法。 DNS 国際化ドメイン名 (IDN) は Punycode に変換されて DNS で解決される。 HTTPS 偽ドメインでも TLS 証明書を取得できるため、HTTPS だけでは安全性を保証できない。 IP アドレス ドメイン名が異なれば IP アドレスも異なる。ホモグラフ攻撃の偽ドメインは別の IP を指す。