前回はInternet Explorer(IE)のシステム統合の長所と短所を簡単に振り返りました。長所はさらに伸ばされることが望まれますが,短所は「早急に取り除く」必要があります。前回紹介したIEシステム統合に見られた短所は,技術的なものではなく,どちらかといえば,開発者の発想に起因するものでした。技術的な短所,たとえば,ちょっとした操作上の不具合や不便さなどはその原因が比較的はっきりしていることもあり,簡単に取り除くことができます。

 しかし,人の「発想」を変えるというのはそうたやすいことではありません。Windows XP Service Pack 2(SP2)開発チームは従来の発想をどのように変えているのでしょうか。それでは早速,そのあたりの事情を調べてみましょう。

SP2に見られる発想の転換

 第15回で紹介したホワイト・ペーパーには,次のような説明文が記述されています。

In Windows XP Service Pack 2,all local files and content that is processed by Internet Explorer has the security of the Local Machine zone applied to it. This differs from previous versions,where local content was considered to be secure and had no zone-based security was placed on it.

 この文章を簡単に整理すると,次のようになります。

SP2では,ローカル・ファイルもセキュリティ対策の対象となった

 この表現はちょっと難しいのですが,簡単に言うと,インターネットからダウンロードされるコンテンツと同じように,ローカル・ファイルも悪用される危険性を帯びる資源と認識されるようになったということです。このため,前回示したローカル・ファイルとWebコンテンツの関係は次のように再定義されることになります。

ローカル・ファイルの表示とインターネット・リソースのダウンロードは区別されない。簡単に言えば,SP2では,ローカル・ファイルはWebコンテンツの延長線上で捉えられるようになる。

 ご覧のように,ソフトウエア開発の軸足が,ローカル資源からインターネット資源へと移動しています。この発想の転換は,(ローカル・ファイルを含む)すべての資源はウィルスやワームの攻撃の対象となっているという現状認識の反映といってよいでしょう。このため,たとえば次のようなコードがあり,danger.htmlファイル内にスクリプト・コードが含まれているとします。

oShell.Open "c:\itpro\danger.html"(ローカル・ファイル表示)

 現在のIEはダイアログボックスを開かないと思いますが,SP2を適応した後は,インターネット・リソースの時と同じように,ダイアログボックスを開いてくると予想されます。

 SP2では発想の転換が行われていることになりますが,米MicrosoftのMichael Howard氏は,このあたりの事情を次のように簡潔に説明しています。

During the Windows Server 2003 security audit in December 2002,we asked the Internet Explorer team to evaluate the potential threats (I don't mean bugs or vulnerabilities?I mean avenues of attack and damage potential) when an administrator is browsing untrusted Internet-based Web sites from a computer acting as a domain controller. This led us to disable all mobile code capabilities in the browser including VBScript,JScript,ActiveX controls,Java,and .NET Framework components.

 この文章は,次のように整理できます。

IE開発チームとの打ち合わせの結果,IE内では,VBScript,JScript,ActiveX controls,Java,および .NET Frameworkコンポーネントを実行できないようにした。

 Howard氏が語っているのはドメイン・コントローラ(1つのネットワーク・ドメイン内のすべての資源を管理する権限を持つコンピュータ)上でIEを実行する管理者用の厳しい条件定義です。しかし,この条件定義を一般化し,「SP2出荷以降は,すべてのmobile code(インターネット空間を流れる実行コード)を無効にする方針が打ち出されている」,と考えると分かりやすいと思います。このHoward氏の発言の詳しい内容に興味のある方は,こちらをご覧ください。

 以上の説明から分かるように,Microsoft社は今後,次のようなシンプルな原則を打ち出すと思われます。

  • めったに使用されない機能はデフォルトで無効にする
  • 正当な理由がない限り,搭載機能をデフォルトでは有効にしない
  • 必須機能が無効になっている場合,その旨の警告を出す

 ご覧のように,ここに示した3つの原則はたいへん分かりやすいものです。SP2では確かに発想の転換が行われています。

発想の転換のタイミングは適切か?

 しかし,この転換のタイミングが適切なものであったかどうかについては議論の余地があると思います。たとえば,C++の設計者であるBjarne Stroustrup氏は次のような注目すべき2つの発言(警告)を4年ほど前に行っています。第1発言は,次のようなものです。

For the Web,and for networking in general,we badly need a genuine security model at the system/network level. Relying on downloaded "scripts" in languages such as JavaScript to behave reasonably is just dreaming. Please note that I do not claim that C++ provides a solution to this problem either. C++ is designed to provide efficient access to all system resources,not to prevent fraud.

この発言は,こちらで公開しているものですが,日本語では次のように要約できます。

C++はすべてのシステム・リソースへのアクセスを効率的に提供するために設計されたものであり,インターネットなどからの不正コードの受け取りを防止するようには設計されてはいない。

ご承知のように,WindowsシステムやIEのコア部分はC/C++で記述されています。この発言は何を意味するかといえば,標準C++仕様の独自拡張には注意が必要,ということです。MicrosoftのVC++は独自拡張機能を多数持っていることで有名です。次に,第2の発言です。

I think my ideal language for downloaded code is far simpler and far less powerful than what is being discused and deployed today: "almost braindead" would be a reasonable criteria for anything that needs to pass through a firewall -- and we should all have firewalls. Does your company allow applets through their firewall? JavaScript? Dynamic HTML? Visual Basic macros?

 この発言の全文は,こちらから入手できます。発言内には,「downloaded code」と「braindead」という表現が使われていますが,Michael Howard氏の用語では,それぞれ「mobile code」と「disable(無効にする)」に相当します。この発言は次のような一行で整理できます。

インターネット環境で使用される言語は,送受信される実行コードを理解できない方がよい

 これは,「Simple is beautiful」ということになりますが,この「実行コードを理解できない」という考え方は,「実行を無効にする」という形で,SP2にやっと反映されることになります。この発想の転換タイミングは少し遅れたかな,というのが筆者の素直な感想です。さて,皆さんはどのような感想をもたれましたか?

今回のまとめ

  • SP2はIE統合に潜む短所を取り除こうとしている
  • SP2では,「ローカル」から「インターネット」へという発想の転換が行われている
  • 発想の転換タイミング自身には疑問符が付けられる

 今回は以上で終了です。次回またお会いいたしましょう。ごきげんよう!