前回記事では,インターネットへの常時接続が一般化する時代の流れの中で,これまでのWindowsの長所が短所に変化していることを指摘しました。例えば,「使いやすい」というWindowsの長所は,「見知らぬ他人に自分のWindowsマシンを簡単に使われてしまう」という短所を生み出す素地になろうとしています。この長所と短所の逆転は,言葉としては単純ですが,私たちWindowsユーザーにこれまでにない知識を要求していることは間違いありません。

マイクロソフトのセキュリティ情報を提供しているサイト
 Blasterが猛威を振るった当時,皆さんの中には,図1[拡大表示]のようなマイクロソフトのWebページを訪問した人もいるかと思います。

 このWebページは,Windowsユーザー向けにセキュリティ情報を提供しているわけですが,より一般化して表現すれば,すべてのWindowsユーザーにセキュリティ問題への注意を強く促しているといえます。自分は初心者だから,あるいは,知らなかったから,という甘えは,(特に組織内では)許されません。これは,長所と短所の逆転の結果であり,厳しい現実です。

相反する2つの立場:コンピュータ教育の場合

 今,Microsoft社が回答を用意すべき,もっとも常識的かつ現実的な質問は何だと思いますか? それは「セキュリティ問題を解決するためにすべきことは何か」への回答といってよいでしょう。

 この質問に対して,Microsoft社からは(私の知る範囲では)2つの答えが出されています。どちらも常識的には正しいように思えるのですがその2つは相容れません。

 これについて検討する前に,どちらも正しそうな,しかし相容れない2つの見解について,コンピュータ教育の場合で見てみましょう。

 「大学をはじめとする教育機関が提供するコンピュータ教育プログラムに欠けている点は何か?」という質問に対して,C++生みの親であるBjarne Stroustrup氏と,Javaの生みの親であJames Gosling氏は,次のように答えています。

Bjarne Stroustrup氏:
「実際のプログラム開発に役立つ実践的なコーディング教育である」

James Gosling氏:
「実際のプロジェクトに役立つ実践的なチーム開発教育である

 ご覧のように,2人の回答内容はいずれも常識的なものです。しかし,内容自体はまったく異なる点に注目してください。Stroustrup氏は,コーディングというどちらかといえば,実装工程寄りの回答をしています。一方,Gosling氏は,チームによる中・大規模開発の一員として要求される知識の必要性を強調しています。

 なお,2人の発言内容の詳細に興味のある方は,こちらをご覧下さい。この公開記事には,Bjarne Stroustrup氏とJames Gosling氏に加え,C言語の生みの親であるDennis Ritchie氏の発言も掲載されています。たいへん興味深く,かつ,ためになる記事ですから,お時間のあるときにぜひ一読しておいて下さい。Bjarne Stroustrup氏とJames Gosling氏が鋭く対立する場面も掲載されています。

 常識的な問題が問われた場合,回答は1つであることはめったにありません。おそらく,正答がないことはもちろん,回答そのものがないこともあるでしょう。

 Windowsの世界でも現在問われているのは常識です。使用しないポートは閉じておくべきではないのか? 不要なサービスはシステム・ブート時に起動しないようにすべきではないのか? 以前なら利便性が優先され,おそらく,「No」という回答が多数を占めたことでしょう。しかし,現在ではセキュリティが優先され,閉じるべきである,起動すべきではない,という回答が正答になろうとしています。

2つの立場:Microsoftの場合

 それでは,本論に戻りましょう。Microsoft社が現在示しているセキュリティ問題に対する2つの回答です。

 Microsoft社のBill Gates氏は,前回触れたPDC(Professional Developers Conference)会場で,次のような発言(つまり,常識的な質問への回答)を行ったといわれます。

You don't need perfect code to avoid security problems.

 この発言文は,完璧なコーディング作業ではなく,最新コンパイラ・オプションをはじめとする適切なツールの採用を薦めています。つまり,Microsoft社が用意するツールを使用すれば,セキュリティ問題は回避できる,というものです。考え方としては,どちらかといえば,Gosling氏に近いといってよいでしょう。

 一方,社内セキュリティ教育や啓蒙活動を展開するチームを率いるMichael Howard氏(Microsoft Security Business Unitチームに所属)などは,同じPDCの席で次のような点を繰り返し強調したといわれます。

Code has to get better,and that buffer overruns are caused,basically,by sloppy programming.

 「Sloppy Programming」という意味が気になりますが,ここでは,「完璧さを求めることのない,手抜きプログラミング姿勢」を批判していると解釈してよいでしょう。この主張はどちらかといえば,Stroustrup氏の立場に近いといってよいと思います。

 2つの回答を読むと分かるように,Gates氏とMicrosoftセキュリティ・チームの取り組み姿勢の間には,明確な食い違いが見られます。Howard氏が所属するセキュリティ・チームは,Gates氏の発言にかなりショックを受けたといわれます。自分たちの活動方針が実質的に否定されたわけですから,ショックを受けるのも当然といったところでしょう。このあたりの事情に興味のある方は,こちらをご覧下さい。Gates氏は,ファイアウオールの重要性などにも言及していますから,ぜひ目を通しておいて下さい。

ユーザーの採るスタンスは

 さて皆さん,もしこの報道が本当だとすれば,私たちWindowsユーザーは2つの回答のどちらを正答としたらよいのでしょうか?

 Gates氏の回答を正答とすれば,ツールの採用により開発作業が効率化され,セキュアな製品が短時間で出荷されることになるかもしれません。しかし,ツール自体がどこかに問題を抱えていた場合,どうなるでしょうか? ご承知のように,同じC++言語を採用していている場合でも,最終的にできあがる実行コードの品質は,開発時に採用するコンパイラの性能に依存します。

 一方,Howard氏所属のMicrosoftセキュリティ・チームの回答を正答とした場合,高品質のセキュアなコードが出荷されるまでに相当の時間がかかります。例えば,バッファ・オーバーランを引き起こす可能性のあるソースコードの検出作業の一部を自動化したとしても,コード・レビューを丁寧に行えば,結局それなりの時間が必要になります。

 Howard氏は以前,「理想的なセキュリティ対策は既存コードをすべて.NET環境に移植することであるが,それはあくまでも理想であり,現実的ではない」と述べています。筆者は同氏のこの発言を高く評価している1人です。このため,この連載では,次のような方針を採用したいと思います。

「私たちはメモリーの使い方に起因するバッファ・オーバーランの発生メカニズム程度はきちんと理解しておきたい。このため,Microsoftセキュリティ・チームの活動内容とその公開成果物を具体的に学習する。Gates氏が言及したツール類は開発者用のツールと思われるが,おそらく,一般ユーザー用のツールも多数公開されてくるはずである。そのようなツール類に関しては,公開された時点で検討することにする」

 セキュリティ情報は今後も公開されてくるでしょう。そのような情報を受身で受け取っていると,不愉快なだけであり,何も身に付きません。ならば,ここは1つ発想を変え,「今度はいったいどこに原因があるのだろう」と前向きに考えるようにしましょう。Windowsもソフトウエア製品の1つにすぎません。Windows世界のメモリーの使い方,基本的なプログラミング作法などの知識は他のソフトウエア製品を評価する際にもそのまま有効なはずです。

本日のまとめ

  • Windowsユーザーはセキュリティ問題に関心を払う必要がある
  • Windowsユーザーはセキュリティ問題に関する基本技術を理解しておく必要がある

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