● 脆弱性「MS05-053」の内容を確認する
マイクロソフトは9日、月例となっているセキュリティ修正プログラムの公開を行なった。今回公開されたセキュリティ修正は、深刻度「緊急」が1件だ。
「MS05-053」は、「Graphics Rendering Engine の脆弱性によりコードが実行される可能性がある」というもの。画像ファイルの情報から、画面に画像を展開するWindowsシステムのライブラリに問題がある、という情報が公開されている。
今回の脆弱性は、修正プログラムとしては1件なのだが、細かく見ると3つの問題に分けられる。その3つのうち、システムをのっとることができる問題は、Windows XP Service Pack2とServer 2003 SP1では1つ、Windows 2000 SP4では2つということになる。
これらの脆弱性は、実証するためのサンプルプログラムであるexploitコードはまだ公開されていないようだ。しかし、各セキュリティコンサルティング会社などから公開されている情報を総合するとかなり詳細に問題箇所を特定できる。プログラム知識があれば、脆弱性を利用するプログラムを作ることは難しくない状況と言ってよいだろう。しかも、この脆弱性を悪用した場合には、細工された画像を開くだけでシステムをのっとることができることになる。パーソナルファイアウォールなどの効果は期待しにくく、Webやメールなどを使ってウイルスとして広めやすいものとなるおそれが強い。
一刻を争うという状況ではないものの、できるだけ速やかにセキュリティ修正を適用すべき脆弱性と言ってよいだろう。
● 原因は似ているが影響する範囲に違いがある
「MS05-053」の脆弱性は、画像ファイルの情報から画面に画像を展開する、Windowsシステムに含まれるプログラムに存在する。より具体的には、WMF(Windows メタファイル)、EMF(拡張メタファイル)をレンダリングする部分に、未チェックのバッファを確保する箇所が3箇所ある、という問題だ。
ただし、その3箇所がシステムにどのように影響するかはそれぞれ違いがある。
(1)Windows XP SP2、Server 2003 SP1を含めて影響し、任意のコードを実行できる。
(2)Windows XP SP2、Server 2003 SP1には影響がないが、古いXP、Server 2003、2000 SP4などで任意のコードを実行できる。
(3)Windows XP SP2、Server 2003 SP1には影響がなく、古いXP、Server 2003、2000 SP4などでDos(サービス拒否攻撃)任意のコードを実行できる。
(1)、(2)に関しては、同様に米国のセキュリティコンサルタント会社eEye Digital Securityがこの脆弱性に関しての詳細な情報を公表している。
同社によれば、(1)、(2)とも脆弱性は、Windowsのグラフィック描画をつかさどるGDIプロセスのWMFフォーマットイメージファイルを解釈する部分にあるとしている。
(1)に関しては、GDIのライブラリであるGDI32.DLLのパレット情報を利用する際に、情報の大きさを示す値が整数であるか、符号付整数であるかの解釈がプログラム内で混乱しているために、この情報を保管しておくためのローカルヒープを確保する際に、十分なヒープの大きさを取らないことがある。つまり、長さとして16進で7FFFFFFFからFFFFFFFFまでの値を指定した場合に、この現象が起きる、ということのようだ。
(2)に関しては、WindowsのGDIプロセスにおいて、WMF(Windows メタファイル)、EMF(拡張メタファイル)のプロセスに、ヒープオーバーフローを引き起こすような値の扱いの混乱が、数多く含まれていることを指摘。具体的な例として、MRBP16::bCheckRecord の逆アセンブルの結果を例示して問題点を挙げている。
(3)に関しては、脆弱性を発見した中国のVenustech AdDLab社が、さらに詳しい解説を行なっている。
同社によれば、WindowsのGDI画像処理を行なう中で、PlayMetaFileRecordというファンクションの内部に問題があるという。WMFファイル内のヘッダ内にあるWMFRECORDというレコードサイズ、ファンクション番号、ファンクションへ渡される引数の入る部分から、このファンクションは、与えられた値を確保するためのローカルヒープを確保する。その部分が逆アセンブルされて掲載されているのだが、それはC言語で言えば、以下のように単純にしてしまっているのだという。
BYTE* pMem = LocalAlloc(uFlag, 2*Size+2);
memcpy(pMem+2, WMFRECORDの示す値, 2*Size);
このため、サイズに負になるような値を与えると、予期しない動作をしてしまう、と解析している。
ちなみに、上に挙げたセキュリティ企業による解説では、実際にはすぐに悪用が可能なexploitコードは公表されていない。しかし、脆弱性の原理がこれだけ具体的に公表されているとなると、プログラムの知識があれば悪用コードを作ることは、さほど難しいことではないように思える。
また、プログラム知識がなくとも、WMF、EMFファイルフォーマットの知識があれば、試行錯誤で不正なWMFファイルを作ってシステムにエラーを発生させる、あるいはハングさせる程度のファイルを作ってブラクラに使うことは可能ではないかと筆者は思う。
このような理由から、筆者、今回のセキュリティ修正は、一刻を争う状況ではないものの、できれば早めに適用しておくべきだろうと考える。
また、今回考えさせられるのは、この脆弱性が作られた原因となった「値の符号ありなしの解釈ミス」についてだ。プログラムを作った経験のある人ならばわかるだろうが、筆者の知る限りでは、アセンブラや、現在動いているプログラムで多く使われているCやC++でプログラムを書く場合、整数値を利用するときに、符号ありなしを混乱したまま実装してしまう、というのは本当に非常によくある話なのだ。おそらく、どんなプログラマでも実際にやった経験があるはずで、しかも、もしそのような箇所が存在しても作ったプログラムは動いてしまう。発見されずに現在も稼動しているこの手の箇所は、相当あるはずだ。
同じように考える悪意のプログラマがいれば、Windowsシステムの根幹に相当する部分で(今回このバグが見つかったGDI32.DLLやWIN32K.SYSもそうだろう)で、セキュリティに影響するような、この手の部分がないかを探しにかかるかもしれない。そうなると、この手のセキュリティホールの発見や悪用が増えるのではないかと思う。
今月のセキュリティ更新プログラムは1件で済んだものの、今後数カ月は緊急情報が増えるかもしれない、と考えておいた方がいいのかもしれない。
■URL
2005年11月のセキュリティ情報(マイクロソフト)
http://www.microsoft.com/japan/technet/security/bulletin/ms05-nov.mspx
「MS05-053」Graphics Rendering Engineの脆弱性
http://www.microsoft.com/japan/technet/security/bulletin/ms05-053.mspx
eEye Digital Security(英文)
http://www.eeye.com/
Venustech AdDLab(英文)
http://www.venustech.com.cn/
( 大和 哲 )
2005/11/10 16:23
- ページの先頭へ-
|