83
同音異義語を使ったフィッシング:似ているように見えるが、一部のブラウザでは誤解を招く文字

「a」が必ずしもあなたが思っている「a」ではないのはどんな時でしょうか?ブラウザが場所やスマート検索フィールドのURLの一部として「a」を表示する時です。非ローマ字文字がドメイン名に導入されたのは比較的最近のことなので、後方互換性のある表記法はフィッシング攻撃に利用されやすいのです。

Unicodeは、世界中で使用されている言語や数学、ゲームなどの書き言葉の基礎となる、ほぼすべてのグリフ(文字、記号、表意文字、スクリプト要素など)の表現を可能にします。Unicodeコンソーシアムは数十年前に活動を開始しましたが、オペレーティングシステム、ブラウザ、アプリに浸透し、ほぼどこでも確実に動作するようになったのはここ数年のことです。

しかし、オペレーティングシステムが人間が読める場所やリソース名を、接続に必要な数値やその他のデータに変換するために使用するドメインネームシステム(DNS)は、Unicodeが登場する以前から存在しています。また、DNSは広く普及しているため、変更を加えると数億人、あるいはそれ以上のユーザーやデバイスの互換性が損なわれる可能性があります。そのため、ドメイン名に暗号化コンポーネントを追加し、ドメイン所有者以外の者によるなりすましを防ぐといった、実用的な改善策が未だに導入されていません。

ドメインは、あらゆるグリフの中でもごく限られたサブセット、つまりローマ字26文字(大文字を除く)と0から9までの数字、そしてハイフンでエンコードされていました。(ピリオド、つまり「ドット」は、ドメイン名の要素を区切るために使用されます。)これは、ローマ字英語以外の文字で生活したり、文章を書いたり、商取引をしたりする人々を苛立たせました。ñやéだけで済む人々でさえ、取り残されていたのです。地球上の大多数の人々がそうである以上、何か妥協する必要がありました。

あるスクリプトを別のスクリプトに隠す

2003年、パッチジョブは「punycode」と呼ばれていました。これは、DNSで許可されていない文字をASCII文字で表現するという意味の、おかしな名前です。例えば、??.comを登録すると、.punycodeに変換されますxn--ri8h56g.com。punycodeはUnicode文字を圧縮して表現したもので、ブラウザが解釈して表示できるようになります。

しかし、長年の課題が存在します。多くの文字体系には、他の文字体系と似た文字が含まれているのです。実際、位置情報や検索バーで使用されているフォントでは、それらの文字が全く同じデザインになっていることがあります。この文脈では、これを「同形異義語」と呼びます。同形異義語とは、通常、綴りは同じだが意味が異なる単語のことです。ここでは、(異なる文字体系では)綴りは異なるものの、見た目は同じである単語のことを指します。

これにより、フィッシング詐欺師は、PunycodeからUnicodeに変換してブラウザのフィールドに表示されると、例えば「apple.com」(またはそれに類似した文字列)のように見えるドメインを登録できるようになりました。これらのドメインは正規のTLS証明書も取得できるため、「本物」のドメインであることを確認したい賢明なユーザーは、https接続が確立されていることを示す鍵アイコンに気付くでしょう。

ブラウザは長年にわたり、フィッシング攻撃の機会を減らすため、Punycode 変換に制限を加えてきました。しかし、他の文字体系のローマ字と一致する文字のみを使用するといった問題へのブラウザの対応方法の限界を研究者が指摘したことで、この問題が再び表面化しました。ある研究者は、キリル文字のみで構成された「apple.com」を登録すると、Chrome と Firefox で Unicode として表示されることを発見しました。

主要ブラウザはすべて、単一のドメイン内に複数のスクリプトが混在している場合、ASCII Punycodeドメインを変換せずに表示します。これは、ローマ字の途中に別のスクリプトの「a」が使用されるのを防ぐ簡単な方法です。一部のブラウザでは、Punycodeが、使用中のデバイスに何らかの形でインストールされていない言語/スクリプトの組み合わせである場合、またはスクリプトが国別コードトップレベルドメイン(日本の.jpなど)と一致しない場合、Punycodeをレンダリングしません。(これらの対策の詳細なリストはWikipediaに掲載されています。)

一部のトップレベルドメイン(TLD)では、特定の文字体系で書かれたドメイン名しか受け付けられません。例えば、.рф(ロシア連邦)の場合、ドメイン名はすべてキリル文字でなければなりません。.comのようなより一般的なTLDでは、国際的な利用や互換性をより高めるために、これほど厳格なポリシーは設けられていません。そのため、ブラウザが審査を行う必要があるのです。

SafariとInternet Explorerはこの新しいアプローチの影響を受けないようです。Chromeは、.comのようなスクリプト制限のないドメインで、ドメイン名がキリル文字の同音異義語(ローマ字で同じ文字に見える文字)のみを使用している場合、Punycodeのレンダリングを回避するようにアップデートされました。これはChrome 58で展開される予定です。

Firefox はここでは異端者のままですが、その理由の 1 つは、レンダリングされていない Punycode を表示することで不当にローマ字がデフォルトになり、フィッシング目的がまったくないドメイン所有者にペナルティが課せられるのではないかという懸念です。

Punycodeフィッシングの解決と監視

幸いなことに、Firefox ユーザーであり、IDN ドメインにアクセスせず、これらの URL の表示を気にしない場合は、レンダリング設定を無効にすることができます。

  1. に進みますabout:config
  2. punycode検索フィールドに入力してください。network.IDN_show_punycode設定が表示されます。
  3. ダブルクリックするfalseと に変わりますtrue
privatei の Punycode Firefox 修正 IDG

Firefox では依然として問題のある Punycode が表示されます。設定の 1 つを変更すると、基になるドメイン ASCII が常に表示されます。

ここでは、ブラウザーによる同形異義語防止のアプローチをすり抜けてしまう可能性のあるその他のケースに備えて、Punycode フィッシングを回避するためのヒントをさらに 3 つ紹介します。

  • URLをクリックする前に、TextEditやBBEditなどのテキスト編集アプリにコピー&ペーストしてください。URLがロケーションバーや検索バーに表示されている場合でも、コピーするとそのURLの背後にあるPunycodeもコピーされ、ペースト時にそのコードが明らかになります。

  • https接続の証明書を確認します。通常、ロケーションバー/検索バーの鍵アイコンをクリックし、手順に従って証明書を確認します。Appleのような主要なサイトであれば、直接登録された証明書が存在します。これらの証明書を作成する証明機関は、証明書の詳細を比較的信頼できるものにするために、特定の種類の検証(「拡張検証」バージョンではより高度な検証)を実行することになっています。証明書の所有者が期待と一致しない場合は、上記のコピー&ペーストのテクニックを使用してください。

  • アカウント情報は、1PasswordやLastPassなどのパスワードマネージャーを使って入力してください。これらのツールは同音異義語を誤認識せず、実際のドメイン名の詳細情報に基づいて自動入力を行います。パスワードマネージャーでログイン情報が入力されない場合は、フィッシング詐欺の可能性があります(または、サイトの設定ミスにより、パスワードを保存したドメインとは異なるドメインに誘導されている可能性があります)。