ぶうううん's Cafe

どうにかこうにか。備忘録に近い。

Punycodeとは

事の発端

 たまたまFirefoxのアドレスバーで江頭2:50を検索しようとしました。数秒考えて気づいたのですが、アドレスバーにて検索してしまうと、江頭2の50番ポートにアクセスすることになります。

f:id:buuuuuuun3939:20210215115744p:plain
アドレスバーに江頭2:50を入力した結果
 しかし、アドレスバーでは江頭2:50という入力が確認できるにもかかわらず、Firefoxのメッセージでは「xn--2-9c9b195jという名前のサーバーに接続できません。」 と表示されてしまいます。サーバー名がなぜこんなふうになっているのかが謎。Chromeでも試してみると、謎のサーバー名が表示されるようなエラーメッセージは表示されない。この謎のサーバー名の正体についてggってみると、文字列"江頭2"をPunycodeというものにエンコードした結果だとすぐに分かりました。

Punycodeとは

 "国際化ドメイン(Internationalized Domain Name: IDN) をアプリケーションで扱えるようにするための仕組みの一つです。Punycodeは、Unicode文字列を一意かつ可逆的にASCII文字列に変換します。具体的には、ASCII文字列はそのまま表現され、非ASCII文字は英数字とハイフンで構成されるASCII文字で表現されます。"[1]とのこと。Punycodeのエンコーダに文字列"江頭2"をかけてみたところ、無事に"xn--2-9c9b195j"が出力されました。

Punycodeの悪用

Punycodeの悪用ではURLスプーフィングが考えられます。URLスプーフィング自体は正規のURLに酷似した非正規URLにユーザーを誘導するもの。そして特に、Punycodeモグラフ攻撃 に悪用されやすい。ホモグラフ攻撃とは、"他言語の文字や、正規のASCII文字とほとんど同じに見える、ユニコード文字を使用する"[2]攻撃手法のこと。仕組みは単純だが、ユーザーの目視では見分けがつきにくい厄介な攻撃である。多くのブラウザーにはIDNポリシーが存在し、ホモグラフ攻撃への対策としている[3]

References

[1] JPRSPunycodeJPRS用語辞典、入手先 <https://jprs.jp/glossary/index.php?ID=0051>(参照2021-2-15)
[2] CLOUDFLARE:ドメインスプーフィングとは?| WebサイトスプーフィングとEメールスプーフィング、ラーニングセンター、入手先 <https://www.cloudflare.com/ja-jp/learning/ssl/what-is-domain-spoofing> (参照2021-2-15)
[3] Google:Internationalized Domain Names (IDN) in Google Chrome、Git repositories on chromium、入手先 <https://chromium.googlesource.com/chromium/src/+/master/docs/idn.md> (参照2021-2-15)