第1回では,インターネットが普及する時代の流れの中で,Windowsの長所が短所になっていることを指摘しました。米MicrosoftのBill Gates氏は,このあたりの事情を次のように表現しています。

As software has become ever more complex,interdependent and interconnected,our reputation as a company has in turn become more vulnerable. Flaws in a single Microsoft product,service or policy not only affect the quality of our platform and services overall,but also our customers' view of us as a company.

 この文章は,こちらから引用したものですが,次のように要約できます。

  • ソフトウエアは,相互依存度と接続密度が深まり,複雑になってきている
  • ソフトウエアが複雑になる流れの中で,当社の評判は確たるものではなくなってきている
  • 製品に含まれる問題は,顧客の信頼を損なう

 ご覧のように,かなり厳しい認識です。Gates氏は2002年1月15日,この認識を「Trustworthy Computing」という件名を持つ電子メールとして全従業員に送信し,緊張を促しましたが,昨年発覚したBlasterのような不正コードの悪影響を防止することはできませんでした。第5回で触れたように,不正コードの悪影響を防止するには次のような対策が考えられます。

対策1:開発者自身によるプログラム・コードのレビュー
対策2:信頼できるクラス・ライブラリの採用
対策3:信頼できるコンパイラ機能の活用
対策4:信頼できる仮想マシンの採用
対策5:信頼できるデバッグ機能の活用
対策6:必要な専用ツールの自作・運用
対策7:信頼できる専用ツールの導入・活用

 Microsoft社は.NETの名の下でVisual Studio .NETをはじめとする各種製品を市場に投入するとともに,再配布可能な基盤コード(例えば,共通言語ランタイムCLRなど)をダウンロード可能とし,対策1から対策6までのニーズをカバーしようとしています。対策7については,Matt Pietrek氏が中心となって開発しているCompuware Numega製品を参考にするとよいでしょう。

 今回は,Windowsソフトウエア開発者にとって一番重要と思われるVisual Studio .NET統合開発環境の一部機能を紹介いたします。まずは,次のソースコードをご覧ください。


#include "stdafx.h"

 void Server(char* pbData)
{
	const int buffer_size = 10; // *** C++コード ***
	size_t cb = strlen(pbData);
	char buff [buffer_size];
	CopyMemory(buff,pbData,cb);
	printf(buff);
}

int _tmain()
{
	char* pDes[] = {"IT Pro","Takashi Toyota","No!"};
	Server(pDes[0]);
	Server(pDes[1]);
	Server(pDes[2]);
	return 0;
}

図1●「コンパイル言語の選択」オプションを「C++コードとしてコンパイル」に設定する
図2●スタックが破壊されていることを示すメッセージ
 このソースコードは,前回紹介したCコードをC++コードとして移植しているにすぎません。ご承知のように,C++は「ベターC」という一面があるため,Cコードの多くをそのまま再利用できます。ただし,今回のソースコードをビルドするときには,図1[拡大表示]のように「コンパイル言語の選択」オプションを「C++コードとしてコンパイル」に設定する必要があります。設定後,ソースコードをビルドし,プログラムを実行すると,図2[拡大表示]のような画面が表示されます。

 このメッセージは,スタックが破壊されていることを示しています。ここで注目していただきたいのは,Visual Studio .NET開発環境がこのスタック破壊検出コードを自動的に挿入する機能を持っていることです。Gates氏は,このような機能の必要性を次のように説明しています。

It's a matter of giving people the tools; it's people not understanding the design of APIs where you get vulnerabilities.

 発言内容を要約すれば,次のようになります。

  • 開発ツールが重要である
  • セキュリティを確保するにはAPIを理解することが重要である

 発言詳細に興味のある方はこちらをご覧ください。

 ところで皆さん,便利なツールがあれば,プログラム・コードのセキュリティが向上すると思いますか? 結論を言ってしまえば,向上するわけではありません。Gates氏は,「すべての人が再コンパイルするわけではない」と嘆いています。ツールが便利であっても,使用しなければ,そのツールは意味がありません。私たちWindowsユーザーは,Microsoftのすべての開発者が最新のツール環境で再コンパイルしてくれていると信じたいところです。

 ここまで読んできた人の中には,「Visual Studio .NETは所詮Microsoftの独自技術の実装にすぎないのではないか」,と不安を感じている人もいるはずです。私が調査した範囲では,確かにその面も否定できませんが,しかし,C/C++に関する限り,C++の生みの親であるとともに,CとC++の統合に積極的な姿勢を示しているBjarne Stroustrup氏などが中心となって策定した標準仕様にかなり準拠しています。

 さらにいえば,BjarneStroustrup氏は,このような場を借りて,今後のC++標準化作業に対するMicrosoftの協力を強く呼びかけています。

 Microsoftと標準化に触れたついでに一言述べておきますが,2003年12月15日,サーバー管理の標準化を目指す新しい動きが発表されました。興味のある方は,こちらをご覧ください。私は個人的にこの業界団体の動きをこの数年追ってきましたが,2003年8月前後を境にしてその動きは急変しています。

 この業界団体は通常DMTFと呼ばれています。DMTFは以前は「Desktop Management Task Force」の略称でしたが,現在は「Desktop」ではなく「Distributed」に変更されています。この変更は,インターネットの急速な普及の反映と思われます。

 DMTFの主要な役割を簡単に言うと,ネットワーク管理用の標準仕様を作成することです。より具体的に言うと,ネットワークを構成するハードウエアとソフトウエア要素を抽象クラスとして定義することです。DMTFに参加する個々の会員企業は定義された抽象クラスから独自クラスを派生させることになりますから,DMTF抽象クラスは業界における共通情報モデル(CIM)とも呼ばれています。DMTFの会員企業には,Microsoft,IBM,Sun Microsystems,Intelなどがあります。

 すでに触れたように,DMTFは2003年8月頃からその動きを活発化させています。この変化の中で私が個人的に注目しているのは,Microsoftの存在感が薄れ,例えばこちらのようなオープン・グループの存在感が強まってきていることです。MicrosoftはDMTF仕様をいち早く実装し,WMI(こちらを参照)として一般公開しています。なお,以前の連載で取り上げたSIMBIOS仕様を作成しているのもDMTFです。

 DMTFにはさまざまワーキンググープが用意されています。中でも,Pre-OSというワーキング・グループがあり,OSが存在しないシステム状態の管理なども標準化しようとしています。詳細については,こちらをご覧ください。

 DMTFにおけるMicrosoft社の存在感が薄れてきているとはいえ,Bill Gates氏は,先に紹介した電子メール内で次のようなことを述べています。

When we started work on Microsoft .NET more than two years ago,we set a new direction for the company -- and articulated a new way to think about our software. Rather than developing standalone applications and Web sites,today we're moving towards smart clients with rich user interfaces interacting with Web services. We're driving the XML Web services standards so that systems from all vendors can share information,while working to make Windows the best client and server for this new era.

 この文章は,.NETはWebサービスの普及・促進を進めるものであり,標準化の重要性を唱えています。この方針は,DMTFの動きと逆行するわけではありません。また,Microsoftは,インターネット・セキュリティ問題をMicrosoft一社の問題ではなく,業界の取り組むべき問題という認識を示していますから,DMTFからの撤退はありえないと思われます。事実,MicrosoftのWMIサイト情報を読むと分かりますが,Win32クラスをXMLで表現し直すための便利なメソッドがすでに公開されています。

 今回はGates氏に発言を振り返りながら,Mirosoftの開発ツールの一部を紹介しました。開発ツールの便利な機能を使用する場合,とくに,その機能が新しく追加された機能である場合,その機能の動作背景をある程度知っておく必要があります。今回紹介したスタック破壊検出ロジック詳細については,アセンブラ・レベルで後日説明する予定です。

 標準化団体であるDMTF内のServer Managementワーキングループは,2004月7月1までにサーバー管理に関する標準仕様を作成すると発表しています。公開される仕様がどのようなものか楽しみなところです。

今回のまとめ

  • 便利な開発ツールは積極的に活用する
  • 新しい機能の動作背景はある程度知っておいたほうがよい
  • セキュリティ向上のための業界の新しい動きが始まっている

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