Tittle-Tattle swop
ティトル タトル スワップ
EXPL
 [自己紹介]
NOTES
 [初めての方はお読み下さい]
GBA
 [GBAの少しアブナイ使い方]
BBS
 [掲示板]
 掲示板の注意事項
PLAN
 [企画]
LINK
 [リンク]
過去の記事
 [TOP記事の過去ログ]
TTS検索  help 
管理人:夏樹
メンテナンス/新着情報
サーバー障害&メンテ情報


Tittle-Tattle swop
管理人:夏樹

最終更新日時 04/07/03 16:40
はじめに。
窓の杜さんの記事「さまざまなアプリケーションを異常終了させるGIF画像がネット上に流出」を、読んで、
GIFでIEを異常終了させることが出来る事を知ったわけですが、窓の杜さんの記事では、
納得いかないというか、よくわからなかったので、自分なりに、調べてみようと思い、色々なGIF画像で、実験をしてみました。

ここで、公開されている内容は、その実験結果の一部をまとめたものです。
このページを参考にして、悪意あるGIF画像を作成する行為などは、謹んで下さい。
また、私自身、GIFの規格に精通している人間ではなく、GIFの資料を拾って集めた情報に、基づいて実験をしています。
そして、一個人が趣味の範囲で、行っているので、調査に限界もあります。他の環境では、違う動きをする様な物も存在するかもしれません。
また、ここに掲載していないソフトウェアでの動作確認のお願いなどがありましたら、
掲示板(雑談掲示板ですので、話題はセキュリティ問題に限られていません。)やメールなどで、お伝え下さい。(やるかはわかりませんが。

※私の作成したGIFが、"インターネットで流行っている それ"と、同一の手法のものであるのかは、わかりません。


自作画像のLZW Minimum Code Size(LZW最小符号寸法)の値を書き換えてみました。
今回は、LZW Minimum Code Sizeの値をA0〜AFまで書き換えてみました。
その中で、面白い挙動があったのもだけを、ピックアップしてみました。
IE Opera Mozilla firefox Windows 画像とFAX ビューア IrfanView
A6 異常終了 真っ白 「この画像は表示できませんでした
画像ファイルにエラーがあります。」
「描画できませんでした」
↑このように表示される。
元画像とは違う絵です。
大きさは、160*65
(元画像と同じサイズ)
AC
↑「X」が表示される。
大きさは、160*65
(元画像と同じサイズ)
異常終了
AD 「GIFデコードに失敗しました
This is not a valid GIF file!」
・拡張子をJPEGにした場合も、IEとIrfanViewは、ほぼ同様の動作をすることを確認しました。
・書き換えたGIFをMSNMessengerで送信しようとすると、MSNMessengerごと落ちる事を確認しました。
今のところ、エクスプローラの画像のプレビュー機能により、エクスプローラは異常終了しないことを確認しています。
 ※念のためプレビュー機能は切っておく方が良いと思いますが
・IEのエンジンを使っているタブブラウザなども、異常終了することを確認しました。


今回実験に使用した画像の詳細。(LZW Minimum Code Sizeの値を書き換える前)
[Header block]
Signature: GIF
Version: 89a
[Logical Screen Descriptor block]
Logical Screen Width: 160
Logical Screen Height: 65
Packed Fields Bits: 10000000
Global Color Table Flag: 1
Color Resolution: 1
Sort Flag: 0
Global Color Table Size: 1
Background Color Index: 0x00
Pixel Aspect Ratio: 0
[Global Color Table block]
[00]000000 [01]FFFFFF
[Graphic Control Extension block]
Extension Introducer: 0x21(!)
Graphic Control Label: 0xF9
Block Size: 4
Packed Fields Bits: 00000000
Reserved: 0
Disposal Method: 0
User Input Flag: 0
Transparent Color Flag: 0
Delay Time: 0
Transparent Color Index: 0x00
Block Terminator: 0
[Image Descriptor block]
Image Separator: 0x2C(,)
Image Left Position: 0
Image Top Position: 0
Image Width: 160
Image Height: 65
Packed Fields Bits: 00000000
Local Color Table Flag: 0
Interlace Flag: 0
Sort Flag: 0
Reserved: 0
Local Color Table Size: 0
[Image Data block]
LZW Minimum Code Size: 2
Total Sub Blocks Number: 3
[Trailer block]
GIF Trailer: 0x3B(;)
GIF Analyzer0.9 created by pps.で
解析した結果です。
もちろん、LZW Minimum Code Sizeの値を書き換える前の画像は、どのアプリケーションでも、正常に表示されます。
正真正銘、普通の画像データです。
赤くなっている部分のみを書き換えるだけで、今回のような異常終了などが発生するようです。


今回行った環境
OS Microsoft Windows XP Professional Service Pack 1 ビルド 2600.xpsp1.020828-1920
Internet Explorer 6.0.2800.1106 (IE 6.0 SP1)
Opera 7.23 Build 3227
Mozilla firefox 0.8
IrfanView 3.91


思うに。
LZW Minimum Code Sizeの値は、通常、"8"なら256色、"4"なら16色、色数=2^(LZW Minimum Code Sizeの値)となっている様です。
GIFは、通常最大256色までしか扱えません。
それを規定外の物に書き換えることにより、アプリケーションが正常に動作しなくなるようです。

私は、この実験の時は、ある計算式により導き出した値ではなく、"00、01、・・・A0、A1、・・・"みたいな感じで、ただ値を、変えていって発見したにすぎません。
また、「LZW Minimum Code Sizeの値 A6 = IE異常終了」という式は必ずしも当てはまりません。(今回使用した画像は、たまたまそうなっただけです。
他の画像では、まったく違う値でした。

LZW Minimum Code Sizeの値と、GIFの内容などで、どのような状況になるのかは決まっているのかもしれませんし、決まっていないのかもしれません。
因果関係は、私の適当な実験からは、導き出せていません。

しかし、どのような画像でも、以上のような異常終了は書き換えることによって引き起こすことは出来ると考えられます。

また、窓の杜の記事を読む限り、Windows XP SP2の導入により、被害は抑えられそうです。
しかし、IrfanViewが、異常終了する画像のサンプルを持っていないらしく、調べた画像数が、2枚という事なので、
Windows XP SP2の導入することで、全てを防ぎきることが可能なのかは定かではありません。


最後に。
私は、窓の杜の記事を読むまで、このバグについて知りませんでしたし、GIFの規格そのものもほとんど知らない状態でした。
今回、pssのスキルアップウェブさんのGIFファイル形式というGIFの規格などをまとめてあるページを見ることによって得た知識のみで、実験を行いました。

結果はごらんの通り、いとも簡単に、IEなどを異常終了させる画像を作れてしまいました。

また、悪用の危険を考えると、どのような手法で書き換えたか、実際に実験に使用した画像群などは、掲載できません。ご了承下さい。


追記。
セキュリティホール memo メーリングリストさんで、投稿した内容です。
Date: Fri, 25 Jun 2004 23:07:47 +0900 (JST)

Subject: [memo:7611] GIF画像による異常終了
To: memo@memo.st.ryukoku.ac.jp
Message-Id: <4865.210.146.112.14.1088172467.squirrel@www.s53.xrea.com>
X-Mail-Count: 07611

はじめまして。夏樹です。
MLに投稿するのは初めてですので、不備などがあるかと思いますが、
お許し下さい。

窓の杜に「あるさまざまなアプリケーションを異常終了させるGIF画像がネット上に
流出」
http://www.forest.impress.co.jp/article/2004/06/24/gifcrush.htmlでの、
GIF画像のことでお話ししたいことがあります。

上の記事を読んで、実際に自分で、その様なGIF画像を作れるのかを試しまして、
実際に作る事に成功しましたので報告致します。

異常終了させるのは、GIFのLZW Minimum Code Sizeが規定外であることにより、
引き起こされていると考えられます。ですので、LZW Minimum Code Sizeを、
規定外の数値に書き換えることにより、簡単に作成することが可能です。

簡単ではありますが、http://tts.s53.xrea.com/temporary/gif.htmにて、
各アプリケーションの挙動などを、まとめた物を掲載しています。

そこでは、特にやり方などを明文化していませんが、ここでは簡単に書こうかと思い
ます。
※私は、GIF画像の規格に精通した人間でないことを先に述べておきます。

用意するGIF画像はなんでもかまいません。
使用している色数がわかる物の方がいいです。
ここでは、アニメーションGIFは含みません。

色数がわかったところで、ヘキサエディタを用いて以下の検索してみて下さい
「(色数=2^(LZW Minimum Code Size)) FF」

たとえば、256色なら「08 FF」、16色なら「04 FF」という具合です。

"GIF Analyzer"で直接LZW Minimum Code Sizeを調べることも出来ます。
その場合は、「(LZW Minimum Code Size) FF」で検索して下さい。

そうすると、HITすると思います。

そこで、LZW Minimum Code Sizeの値に書き換えてみましょう。
これで、異常終了させられるGIFが制作されます。
また、どの値に書き換えれば、その様な事を引き起こせるのかは不明です。
私が試したところ、A0〜AFあたりで、その様な画像を作れる事が多いと
言うところまでわかっています。

乱文でありますが、ここまでお読み頂きありがとうございます。

[ You can copy, distribute and publish this article as you receive ]
[ it. More detail: http://memo.st.ryukoku.ac.jp/saihaifu.html ]


追記。
"見るとアプリが落ちるGIF"の正体はトロイの木馬である可能性が

私の書き換えた方法による、GIFの場合は、単なる
オーバーフロー(?)の様なもので、アプリを落とすので、
これとは違うのですが、この様なGIFが出回っているそうです。
気を付けて下さい。