この記事を読むのに必要な時間:およそ 2 分
文字コードが引き起こす問題点は,これまで説明したような比較の一致・不一致といったソフトウェアの処理上のものだけでなく,人間に対する視覚的な効果という点でも強く影響を与え,攻撃者にとっての強力な道具となることがあります。
今回および次回で,そのような文字コードが引き起こす視覚的な問題点を紹介します。
視覚的に似た文字
見かけのよく似た文字は,フィッシングなどによく利用されます。典型的な例としては,アルファベット小文字のl(エル)と数字の1などがあります。たとえば,http://bank1.example.jp/ というURLのオンラインバンクがあったとすると,攻撃者は http://bankl.example.jp/ というURLを使ってフィッシングを企むということは容易に想像できると思います。
もちろん,収録している文字数が増えれば増えるだけ,このように見かけのよく似た文字が存在する率も高くなり,Unicodeでは非常に多数の文字でそのような事象が起こり得ます。特に,国際化ドメイン(IDN)においてはドメイン名としてUnicodeの多数の文字が利用可能になるため,それだけ攻撃者としての持ち札も多いということになります。
たとえば,gihyo.example.jp というドメインが存在したとして,それに対する偽装ドメインを考えてみます。Unicodeにはアルファベットの g と見かけのよく似た文字として,U+0261「Latin Small Letter Script G」という文字が定義されていますので(図1),これを利用することにします。
図1 U+0261:Latin Small Letter Script G
![図1 U+0261:Latin Small Letter Script G 図1 U+0261:Latin Small Letter Script G]()
ドメイン名として,この U+0261 を含めた [U+0261]ihyo.example.jp というドメインに対していくつかのブラウザで実際にアクセスしたところ,各ブラウザのアドレスバーは図2~6のような表示になりました。
図2 Internet Explorer 8でアクセスした場合
![図2 Internet Explorer 8でアクセスした場合 図2 Internet Explorer 8でアクセスした場合]()
図3 Firefox 3.5.3でアクセスした場合
![図3 Firefox 3.5.3でアクセスした場合 図3 Firefox 3.5.3でアクセスした場合]()
図4 Google Chrome 3.0.195.27でアクセスした場合
![図4 Google Chrome 3.0.195.27でアクセスした場合 図4 Google Chrome 3.0.195.27でアクセスした場合]()
図5 Opera 10.00でアクセスした場合
![図5 Opera 10.00でアクセスした場合 図5 Opera 10.00でアクセスした場合]()
図6 Safari 4.0.3でアクセスした場合
![図6 Safari 4.0.3でアクセスした場合 図6 Safari 4.0.3でアクセスした場合]()
IEではドメインに不適切な文字が含まれている旨を警告するメッセージが表示されていますが,他のブラウザではそのような警告は表示されず,またFirefoxおよびOperaにおいてはIDNをそのまま表示しているため,アドレスバーを目視で確認するだけでは,これが正規のgihyo.example.jp というドメインなのか,攻撃者の用意した[U+0261]ihyo.example.jp という偽ドメインなのか簡単には判別できません。
Firefoxでは,about:configから network.IDN_show_punycode をtrueに設定することで,アドレスバーに「[U+0261]ihyo.example.jp」というUnicode表示ではなく,「xn--ihyo-z7b.example.jp」というpunycodeでの表示をさせることも可能ですが,正しくIDNを使っているサイトでの視認性が下がるということもあり,誰にでも容易に勧められる対策ではありません。
このように,IDNにおいてはこれまで以上にアドレスの偽装が攻撃者にとっては有利になりそうですので,今まで以上の注意が必要となりそうです。
見えない文字
Unicodeに含まれる多数の文字の中には,視覚的に確認しにくい「見えない」文字もいくつか定義されています。代表的なものとしては,表1のようなものがあります。
表1 「見えない」文字
コードポイント | 名称 |
U+200B | ZERO WIDTH SPACE |
U+200C | ZERO WIDTH NON-JOINER |
U+200D | ZERO WIDTH JOINER |
U+202A | LEFT-TO-RIGHT EMBEDDING |
U+FEFF | BYTE ORDER MARK(ZWNBSP) |
たとえば,これらをファイル名やレジストリ名の一部として含めると,見かけ上はすでに存在するものと同じように見えるファイルやレジストリを作成することができます。
図7 同じに見えるファイル名
![図7 同じに見えるファイル名 図7 同じに見えるファイル名]()
図8 同じに見えるレジストリキー
![図8 同じに見えるレジストリキー 図8 同じに見えるレジストリキー]()
こういった点がセキュリティ上の脅威に直接つながることは少ないとは思いますが,たとえばレジストリ上に存在するRunやRunOnce,あるいは他の重要なレジストリエントリを削除しつつ,それらを存在するかのように見せかけて管理者を混乱させるワーム,というようなものは出てくるかも知れません。