GIFARの脅威って


GIFARについてやや勘違いをしていました。GIFARファイルをブラウザで表示するだけで、含まれているアプレットが動くのかと思っていました。

これってけっこう勘違いされてそうな気がするんだが...
え?当たり前?もしかして自分だけ?

指摘されているのは「jarファイルをGIFファイルとして偽装できる」というだけであって、ブラウザの脆弱性とかを指摘しているわけではないんだ。

実際にBlack Hat Japan 2008 でGIFARについて発表したネイサン・マクフィーターは、

もし、このGIFARファイルを攻撃対象のコンピュータのローカルファイルシステムに送り込むことができ、そのファイルが格納されたパスをあらかじめ知ることができるならば、Webページなどを通じて被害者のコンピュータ内にあるGIFARファイルをJARファイルとして起動することができる。


と言っている。
でもよく考えたら、もしGIFARファイルをブラウザで表示させるだけで、Appletが動くんなら被害は甚大でもっと大騒ぎになってそうだ。

まず、ものすごく単純なApplet (AppletTest1.class)をつくってみた。これは単にダイアログを表示するだけのもの。これを Applettest.jar で固め、サーバに配置して以下のようなHTMLを作成してブラウザからアクセス。

結果はこうなる。

では、これをGIFARにしてみよう。earth.gifという地球の画像にこのjarのバイナリパターンを追加。

ファイルの先頭は「GIF89a」から始まっていて、これはGIFファイルであることを示している。

そして、ここからがjarの実体。「PK」から始まっている。

実際、これはjarとして機能する。さきほどのHTMLを以下のように、archiveのパラメータをearth.gifに書き換えてみて、ブラウザからアクセスしてみてもさきほどと同じ結果が得られる。



次にHTMLを以下のように書き換えて、ただ画像を表示するだけにしてみる。



結果ただ画像が表示されるだけ....

あー、そうか。ここまで来てようやく気づいた。Appletタグがないので、ブラウザはアプレットとして動作させていないんだ。そりゃあ、そうか....ここまでしなきゃ気付かないのはバカすぎた。
要するに画像ファイルを偽装したjarファイルを、クライアントのキャッシュに保存される、あるいは、ユーザが明示的に画像と思って保存されることが問題なのであって、GIFARファイルののみで何かするわけではないんだ。複合的にその他の脆弱性とあいまって実際に驚異になるわけだ。

つまり、GIFARは「悪意あるコードを送り込む」方法としての一手法ということか。

ネイサン・マクフィーターは

Webページなどを通じて被害者のコンピュータ内にあるGIFARファイルをJARファイルとして起動することができる。

といっているがこれは一体どうやるのだろう。