本件のセキュリティ問題について現在はゼロデイ状況となります。
詳細説明は下記に書きましたが、悪戯Microsoft HTMLの「.chm」ファイルを作ったら本件のバグが起きて、WindowsOSにはエラーが発生しましたので、その時にexploit仕組みを作ればマルウェアに感染される可能性が出ます。
本件のvulnerability情報オリジナルはLuigi Auriemmaさんで発見されて、私達で情報を確認した上で追加内容を書きました。
※本件のVulnarebiliyのサマリー情報↓
アプリケーション名: Microsoft HTML Help ref:http://www.microsoft.com
バーション情報: 6.1の前、6.1を含む
OS情報: Windows (any version included the latest Windows 7)
バグ種類: メモリー設定問題、stack overflow
日付け: 12 Apr 2011 (found 20 Feb 2011)
発見Credit: Luigi Auriemma / aluigi@autistici.org / aluigi.org
確認: アドリアン・ヘンドリック http://0day.jp (Windows XP SP3)
バーション情報: 6.1の前、6.1を含む
OS情報: Windows (any version included the latest Windows 7)
バグ種類: メモリー設定問題、stack overflow
日付け: 12 Apr 2011 (found 20 Feb 2011)
発見Credit: Luigi Auriemma / aluigi@autistici.org / aluigi.org
確認: アドリアン・ヘンドリック http://0day.jp (Windows XP SP3)
1) 問題の内容↓
下記のURLでの書いたリファレンスの基づいて↓
http://en.wikipedia.org/wiki/Microsoft_Compiled_HTML_Help (英語)
http://ja.wikipedia.org/wiki/Microsoft_Compiled_HTML_Help (日本語)
Microsoft_Compiled_HTML_Helpファイルの内容は下記の様に書いてあります↓
「ファイル形式 [編集]、HTMLのサブセットで書かれたページ群とハイパーリンク化された目次で構成される。CHM形式は読むことに最適化されており、検索性能が強化されている。複数のファイルをまとめて LZX で圧縮する。多くの CHM ブラウザは、ヘルプファイル本体を表示すると同時に目次を表示できるようになっている。」
http://en.wikipedia.org/wiki/Microsoft_Compiled_HTML_Help (英語)
http://ja.wikipedia.org/wiki/Microsoft_Compiled_HTML_Help (日本語)
Microsoft_Compiled_HTML_Helpファイルの内容は下記の様に書いてあります↓
「ファイル形式 [編集]、HTMLのサブセットで書かれたページ群とハイパーリンク化された目次で構成される。CHM形式は読むことに最適化されており、検索性能が強化されている。複数のファイルをまとめて LZX で圧縮する。多くの CHM ブラウザは、ヘルプファイル本体を表示すると同時に目次を表示できるようになっている。」
2) バグ内容↓
本件のバグに影響されたプログラムは「itss.dll」で影響された時にWindowsOSの「stack overflow」エラーが起きてしまいます。
エラーの原因はコンテンツを読み込みプロセスの上で圧縮データをDECOMPRESS作業があり、コピーされたバグっているデータに当たったらメモリーのstackバファーが対応出来なくて、stack overflowエラーが起きてしまいます。
下記はエラーが出た瞬間のメモリーから取った情報です
(環境はWindows XP 5.2.3790.2847)
↑dumpの説明は下記の仕組みとなります↓
chmファイルを読み込みます、その中にはLZXchunks(0x7ffe bytes)がエムベッドされています、LZX chunks(0x7ffe bytes)は圧縮の形式データです。
chmを開いたら、読み込み最中で本件のLZXをメモリーstackバファーへコピーをしようの時にのdumpです。その時に本件のバグが発生されます。
エラーの原因はコンテンツを読み込みプロセスの上で圧縮データをDECOMPRESS作業があり、コピーされたバグっているデータに当たったらメモリーのstackバファーが対応出来なくて、stack overflowエラーが起きてしまいます。
下記はエラーが出た瞬間のメモリーから取った情報です
(環境はWindows XP 5.2.3790.2847)
↑dumpの説明は下記の仕組みとなります↓
chmファイルを読み込みます、その中にはLZXchunks(0x7ffe bytes)がエムベッドされています、LZX chunks(0x7ffe bytes)は圧縮の形式データです。
chmを開いたら、読み込み最中で本件のLZXをメモリーstackバファーへコピーをしようの時にのdumpです。その時に本件のバグが発生されます。
3. 再現方法↓
再現の為に.chmファイルにある「/#WINDOWS」タグの後に2つダイナミックナンバー(①"0"と②stackにコピーするbyteのサイズ)を設定するので、このバグに当たる悪戯chmファイルを作れます。
具体的に下記の手順で本件のバグの再現が出来ます↓
本件のセキュリティーバグをdebugした時に結局難しかった、私はバグの情報を読んだ時に何回もやり直したら上手く確認が出来ませんでした。よく調べたら再現の為にPoC((0x41414141))で説明された情報と再現環境の違いが多い、例えば[ebp-c], [ebp-4], [ebp+c]など、基本的に入れる所に用意されたスタックのbyte数字以降を書けば本件のバグの再現が出来ます。
確認の為にchm_1.chmの再現chmファイルとchmプロジェクトbuildファイル「build_chm_1」を用意が出来たので下記のURLからダウンロードが出来ます。test.gifファイルには「0x41414141」に設定されて、オフセット0x17がcode executionです。
具体的に下記の手順で本件のバグの再現が出来ます↓
- 先ずは「HTML Help Workshop」をダウンロード↓
http://download.microsoft.com/download/0/a/9/0a939ef6-e31c-430f-a3df-dfae7960d564/htmlhelp.exe
- HTML Help Workshopを起動し、新しいプロジェクトを作る
-「HTML Help table of contents (.hhc)」と「HTML files (.htm)」の設定は有効にする
- test.hhcとtest.htmを選ぶ
- 「Add/Modify window definitions」で名前を決めて「OK」ボタンを押す
- 「File」⇒「Compile」を作成しchmファイルを作る
- バイナリーエヂターでchmファイルを開いて
- 「/#WINDOWS」のテキストを検索し選んで
- 「0x01」byteの過ぎに「00 ff 7f」のデータを書きます
- 出来たchmファイルは下記のように見えます↓
- 出来たの.chmをクリックしたら下記のようにエラーが出ます。
- 本件のバグがWindows XP SP3と7日本語版に再現が出来ましたが再現が出来ない環境もあります(Windows XP SP1、Windows 2000、Windows Vista)、再現が出来ない原因が未だ不明で研究をやり続きます。
http://download.microsoft.com/download/0/a/9/0a939ef6-e31c-430f-a3df-dfae7960d564/htmlhelp.exe
- HTML Help Workshopを起動し、新しいプロジェクトを作る
-「HTML Help table of contents (.hhc)」と「HTML files (.htm)」の設定は有効にする
- test.hhcとtest.htmを選ぶ
- 「Add/Modify window definitions」で名前を決めて「OK」ボタンを押す
- 「File」⇒「Compile」を作成しchmファイルを作る
- バイナリーエヂターでchmファイルを開いて
- 「/#WINDOWS」のテキストを検索し選んで
- 「0x01」byteの過ぎに「00 ff 7f」のデータを書きます
- 出来たchmファイルは下記のように見えます↓
- 出来たの.chmをクリックしたら下記のようにエラーが出ます。
- 本件のバグがWindows XP SP3と7日本語版に再現が出来ましたが再現が出来ない環境もあります(Windows XP SP1、Windows 2000、Windows Vista)、再現が出来ない原因が未だ不明で研究をやり続きます。
本件のセキュリティーバグをdebugした時に結局難しかった、私はバグの情報を読んだ時に何回もやり直したら上手く確認が出来ませんでした。よく調べたら再現の為にPoC((0x41414141))で説明された情報と再現環境の違いが多い、例えば[ebp-c], [ebp-4], [ebp+c]など、基本的に入れる所に用意されたスタックのbyte数字以降を書けば本件のバグの再現が出来ます。
確認の為にchm_1.chmの再現chmファイルとchmプロジェクトbuildファイル「build_chm_1」を用意が出来たので下記のURLからダウンロードが出来ます。test.gifファイルには「0x41414141」に設定されて、オフセット0x17がcode executionです。
4. リファレンス情報↓
----
ゼロデイ・ジャパン
http://0day.jp
ゼロデイセキュリティー問題研究所とマルウェア研究センター
アドリアン・ヘンドリック
sponsored by:
株式会社ケイエルジェイテック
http://www.kljtech.com
Tweet
0 件のコメント:
コメントを投稿