Weekly Top 10

BiDiを使った拡張子偽装は上級者でも見抜けない

2007/07/17

 先週の@IT NewsInsightのアクセスランキングトップは「『ファイルの拡張子表示』、実施者は3分の1足らず――IPA調査」だった。技術系の読者の多い@IT読者には、その数字の少なさに驚いた人もいただろう。記者も、買ってきたPCで最初にやる儀式の1つがWindowsで拡張子を表示するように変更することというタイプなので、少なからず驚いた。

NewsInsight Weekly Top 10
(2007年7月8日〜7月15日)
1位 「ファイルの拡張子表示」、実施者は3分の1足らず――IPA調査
2位 Linuxカーネル開発最新事情
3位 もう会社で悪いことはできない? 資産管理とログ管理を統合
4位 日本のIT競争力は世界2位、英エコノミスト・グループ
5位 昨年は不本意な1年だった。今年は目標必達〜NEC矢野社長
6位 「AIRで開発者とデザイナの間を埋める」、アドビ
7位 アプリケーションの構造をマトリックス形式で視覚化すると
8位 米オラクル、4年ぶりの新版“11g”を正式発表
9位 1枚の写真から3次元動画を生成する技術、モーションポートレート
10位 光ファイバの伝送容量を3倍にする技術

初心者への配慮が初心者の被害者を生んでいる

 調査はWeb上で行われたので、実態としては3分の1どころか、もっと少ないのではないかと推測する。PCに詳しくなりたいなどと思っていないユーザーに拡張子を表示しろなどというのは無茶な話だから仕方がない。アイコンを偽装した実行ファイルをクリックしたことによって広まったマルウェアが、いったいどれほどの数に上るのか、見当も付かない。

 そもそも、実行許可ビットがあるわけでもないWindows OSで、拡張子を表示しないのをデフォルトにしてしまったマイクロソフトの、当時としては大胆な決定が裏目に出たのだ。今から10年以上前、まだWindows 95が開発コード名「シカゴ」の名前で呼ばれていた1994年頃のことだ。拡張子を消すならばファイルタイプを示すメタ情報を別の仕組みで入れる必要があった(今でもある)のではないか。初心者に分かりやすくという配慮だったのかもしれないが、かえって初心者が狙われる皮肉な事態になっている。

上級者でもうっかりクリックしかねない拡張子偽装

 拡張子について理解しているユーザーであっても安心はできない。例えば、UnicodeのBiDiという特殊文字を使えば、簡単に拡張子が偽装できることをご存じだろうか。

 BiDiは「Bi-Directional text」(双方向テキスト)の略で「ビーディ」などと発音される技術用語だ。アラビア語、ヘブライ語などセム語族の言語では、文字を右から左に向かって書くのが一般的だが、欧文を書くときだけは左から右に向かって書く。特に問題となるのは交ぜ書きするときで、基本的に右から左に流れるテキスト中に欧文があると、そこだけテキストの流れる方向が逆転し、再び地のテキストで元の方向に戻る、というのが正書法となっている。

 こうした正書法を持つ国や地域の代表は、BiDiをPCやWebでサポートするために、特殊文字として文字が流れる方向を示す特殊なマーカーを、Unicodeの文字表に入れるべきだと主張した。一方、表示方向を指示するマーカーは「文字」として文字コード表に載せるべきなのかどうかという議論もあった。CSSなど文字コードよりも上位のレイヤーで処理すべき話ではないかと、BiDiが不要な文化圏の人々はBiDiを文字コード表に入れることに抵抗を感じた。結局、CSSにはBiDiに関係するプロパティが入っているが、その一方、UnicodeのほうにもBiDiが文字コードとして入っている。

 外部表現としての文字コードは現在でもシフトJISが多く利用されているが、OSもWebも、どんどんUnicode化されている。Windowsのファイル名もUnicodeが利用でき、その結果としてファイル名にもBiDiが利用できるようになった。アラビア語圏の人々にとって、ようやくファイル名がまともに自分の言語で書けるようになったというわけだ。かつてファイル名には漢字やひらがなが使えなかったが、その時代に「今度のOSから漢字も使えるが、欧文を混ぜて使うと表示が乱れます」と言われたら、日本人としては、それは日本語表示の正しいサポートと思わないだろう。それと同様に、BiDiが使えて初めてアラビア語の正式サポートということだから、これは多言語主義という観点からは、非常にすばらしいことだ。

weekly01.png 拡張子が「bat」のバッチファイルでも、BiDiを埋め込むと「.txt」という拡張子であるかのように見せかけることができる

 問題は拡張子だ。例えばWindows XP上でBiDiを使うと「pulltxt.bat」というバッチファイルの名前を、画面上で「pulltab.txt」と、あたかもテキストファイルであるかのように表示させることができる。「pull」と「txt」の間に、この先は文字の流れが右から左になりますというBiDi文字を入れてしまうのだ。すると「txt.bat」の部分が反転して「pull(BiDi)tab.txt」と表示される。BiDi自体は非表示文字なので、事実上、「pulltab.txt」と表示される。

 これはBiDi導入による副作用だ。もちろんBiDiが悪いのではなく、BiDiの導入に際してセキュリティへの配慮を欠いていたのだろう。試してみると分かるが、このファイルのプロパティ表示を行うとウィンドウのキャプションバーに表示される「pulltxt.batのプロパティ」という文字列までBiDiの影響を受け、「pullィテパロプのtab.txt」となってしまう。マイクロソフトは影響範囲をチェックしなかったということだろうか。OSのレゾルバかDNSサーバが受け付けないだろうが、WebブラウザのURL欄でもBiDi表示は有効なようだ。

 昨今、OSを含めて、システムが複雑化しているため、いつ、どんなセキュリティホールが明らかになるか、あるいは悪用されるか計り知れないようなところがある。「拡張子を表示して注意する」というような対応だけで多少なりとも安全だと思えた時代は、どっちにしても、もう終わっているのかもしれない。

(@IT 西村賢)

情報をお寄せください:



@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)