研究者らによると、タイポスクワッター(タイポスクワッティングを行う者)やフィッシング犯が利用できる2つの文字を使うと、Chromium系ブラウザに偽のURLを本物のWebアドレスのように表示させることができます。
人気サイトによく似たドメイン名を取得する手口自体は目新しいものではありません。macrosoft[.]comやapplle[.]comといったフィッシングサイトは、日々のスパム対策の中で誰もが目にしてきたはずです。
しかし、ブラウザが進化するにつれて、使用できる文字は増え続けています。ASCIIに収まらない文字や類似文字(ホモグリフ)を持つ言語の利用者にとっては新たな可能性が広がる一方、攻撃者にとっては、ChromeやEdgeなどの表示ロジックの癖を悪用する新たな手段が生まれることにもなります。
Have I Been SquattedのIan Muscat氏とLeanne Briffa氏によると、サイバー詐欺師が使える文字はまだ残っており、本来信用すべきではないURLをWebユーザーに確実に信用させることができるといいます。
ブラウザの安全性チェックをすり抜ける最新のグリフを使うと、Punycode表示では明らかに偽物とわかるドメイン名でWebサイトを運営できます。しかしUnicode表示では、本物と見分けがつきません。
今回問題となった文字は2つあります。1つは、カザフ語、モンゴル語、タタール語などのキリル文字系言語で使われる「ө」です。もう1つは、ハウサ語やカライカライ語で使われる、フック付きのラテン文字K「ƙ」です。
これらはそれぞれ、e/o、i、kという文字によく似ています。研究者らはこれを利用して、見た目がそっくりなドメイン名を20個登録できました。
登録したドメイン名には次のようなものがあります。
-
aррӏө[.]com
-
sрасөх[.]com
-
oƙta[.]com
-
niƙe[.]com
以下は、各URLに対応するPunycode表記です。ブラウザが本来、安全のために表示すべき形です。
-
xn--80a6aa68c8d.com
-
xn--80a5aeq0fr0c.com
-
xn--ota-f6a.com
-
xn--nie-g6a.com
これらのドメインはHave I Been Squattedが登録したもので、安全にアクセスできます。
アクセスすると研究者が用意したデモページに移動します。各ページでは、ブラウザの保護機能をどのように回避しているかが具体的に解説されています。
重要なのは、いずれもChromium系ブラウザが備える主要なセキュリティ対策をすべて回避できる点です。
回避の仕組み
ブラウザには、主に2層の防御機構があります。1つ目は、ChromiumのSafeToDisplayAsUnicode関数が実行する7つの連続したチェックです。一般的ななりすまし手法を幅広く検査します。
各ベンダーがこうしたチェックを導入し始めたのは2017年のことです。研究者のXudong Zheng氏が、すべてキリル文字で構成されたドメイン「аррӏе.com」を登録したのがきっかけでした。
Chromiumのチェックは、ラテン文字の代用として使われることが知られているキリル文字のリストをコードに直接記述して参照しており、「全か無か」の方式といえます。
この仕組みはすべてキリル文字で構成された文字列を検出するために作られており、ドメイン名のすべての文字がハードコードされたリストに含まれている場合にのみ対処します。
1文字でもリストにないものがあれば、チェックは回避されます。「ө」「ї」「ү」などの文字は「ブレーカー」と呼ばれ、Chrome 154 (9月22日に安定版チャンネルで公開)の時点では、この類似文字リストに含まれていません。
7つの表示チェックのいずれかに失敗すると、ブラウザはその文字列をUnicodeで表示するのは危険と判断し、代わりにPunycodeを表示します。これにより、模倣しようとしている本物のドメインとどれほど異なるかが明らかになります。
ブラウザが取るもう1つの対策は、ドメイン名を人気サイトのリストと照合し、そのいずれかを模倣していないかを確認することです。
Chromiumでは、この処理をGetSimilarTopDomain()関数が担っています。この段階では、与えられたドメイン名を「スケルトン」に変換し、アクセント記号などの発音区別符号を取り除きます(óはoになります)。その上で、スケルトン化したURLを、ハードコードされた人気サイトのリストと照合します。
Chromiumは約8,500サイトと照合し、スケルトンがいずれかに一致した場合はPunycodeを表示します。
ところが、フック付きのラテン文字Kであるƙにはアクセント記号がありません。そのため、スケルトンでは結合文字付きのラテン文字kとして扱われ、セキュリティチェックをすり抜けます。
この場合、スケルトンは[o k ‘ t a . c o r n]という形になります。
(スケルトンでは「m」が「rn」に置き換えられます。)
同様に、аррӏө.comでは、キリル文字の横棒付きoがスケルトン内で結合文字として横棒を保持します。このため、本物のAppleのドメインとは一致しません。
そのスケルトンは[a p p l o – . c o r n]という形になります。
ブラウザ側も、こうしたなりすまし手法を封じるために対策を続けています。たとえばChrome 148では、攻撃者がҏやӿをブレーカーとして使い、ラテン文字の類似文字を模倣することができなくなりました。
防御の柱は、この2つのセキュリティチェックだけではありません。Chromiumには、ページ遷移の際に警告を表示する「セーフティヒント(Safety Tips)」も実装されています。
この2つの主要なチェックを回避できるドメインの例が、ínstagarm[.]comです。先頭文字の発音区別符号が取り除かれると、残るのは本物のInstagramのドメインの2文字を入れ替えたものになります。
このInstagarmのドメインは、ハードコードされたサイトのいずれとも一致せず、禁止文字も含んでいません。
この場合、Chromeは2種類のポップアップのいずれかを表示します。本物のドメインにアクセスするつもりだったのかをユーザーに尋ね、現在の接続先が偽物と思われると警告する内容です。
ただし、この追加のセキュリティ層にも限界があります。
警告が表示されるのは、模倣ドメインが本物のURLと完全一致する場合、1文字の編集で一致する場合、または隣接する文字の入れ替えで一致する場合に限られます。「.com」の前がすべてキリル文字になっているаррӏө[.]comのように、2文字以上が変更されている場合は、警告が表示されません。
また、5文字未満のドメインでも警告は表示されません。本物のOktaからわずか1文字の編集で済むoƙta.comのようなドメインは、1文字編集のルールに該当する一方で4文字しかないため、防御が働かない可能性があります。
セーフティヒントは、スケルトンを信頼サイトのハードコードされたリストだけでなく、ユーザーが日常的に訪れるサイトとも照合します。頻繁に訪れるサイトであれば同様の警告が表示される可能性がありますが、閲覧履歴が十分にないユーザーでは、この防御層が機能しないおそれがあります。
ここで説明した防御は、ブラウザにのみ適用されるものです。メールクライアントは、模倣ドメイン文字列に対してさらに無頓着です。
GmailなどのWebメールでは、Have I Been Squatted(HIBS)が各クライアントに入力した20個のドメイン(類似ドメインと本物の国際化ドメイン名(IDN)の混合)が、攻撃者の狙いどおりすべてUnicodeで表示されました。一方、Outlook Webは、無害なものも含めて20個すべてをPunycodeで表示しました。いずれも、ユーザーに正しく通知するための適切なチェックを行っていないとみられます。
問題の規模を把握するため、研究者らはICANNが公開する.comドメインの全リストを調べました。.comドメインは約1億6700万件あり、そのうち約73万3000件がIDN、つまり非ASCII文字を含みPunycode形式で保存されているドメインでした。
研究者らは各IDNの非ASCII文字をASCIIの対応文字に置き換え、一致するものがいくつあるかを調べました。その結果、通常のASCIIドメインに似たIDNのペアが約16万2000組見つかりました。
ただし、これは約16万2000件のタイポスクワッティングドメインが存在するという意味ではなく、それだけの数が類似ドメインになり得るということです。中には、防衛目的で企業が登録したものや、複数の言語に対応した複数のWebサイトを運営する企業が保有しているものも含まれているでしょう。
とはいえ、組織はタイポスクワッターが利用できる手段を認識し、登録済みドメインを適切に監視する必要があります。®