これまでの2回の連載では,Microsoftのセキュリティ対策チームなどが公開している情報を整理し,次の2点を指摘しました(第1回第2回)。

  • 「Windows XP Service Pack 2(SP2)」は,Windows XPをWindows Server 2003に近づけるものである
  • Windowsユーザーはセキュリティ問題に関する基本技術を理解しておく必要がある

 この2つの結論を相互に比較すると,釈然としないものが残ります。「基本技術を理解しておく必要」があるといわれても,SP2の開発作業は現在進行中のものであり,理解すべき「基本技術」の具体的な中身は闇の中です。また,「Windows XPをWindows Server 2003に近づける」方向性が打ち出されていますが,大多数のWindowsユーザーはWindows Server 2003を使ったことはないでしょう。中には,Windows XPに触れたこともない人もいるかもしれません。

 釈然としないものが残るのは確かです。しかし,セキュリティ専門家の中には,「インターネットに接続する場合には,自分のためだけではなく他のユーザーのためにも,自分のマシンをセキュアにしておかなければならないのだ。インターネットの利便性を享受するために,果たさなければいけない義務である」と主張する人もいます(関連記事)。この文章で触れられている「ユーザー」は,すべてのWindowsユーザーを指していると考えて差し支えないでしょう。

 さらに,こちらの記事を読む限り,IT不況の中,現場は相当厳しい状態にあります。公開されるセキュリティ・パッチの動作検証とその適応などは現場開発者にとっては余分な作業の発生であり,更なる作業負担を強いるものといってよいでしょう。開発者の作業負担が増えればそれだけ,新たな技術を学習する時間と意欲は減少・減退します。こうした面からも,セキュリティ問題の早期解決が切望されています。

 しかし現実には,前回触れたように,「セキュリティ問題をどのように解決するか?」という疑問への確かな回答が用意されているわけではありません。Microsoft社内の関係者は解決策を暗中模索している段階にある,といってよいでしょう。こうしたこともあり,前回は次のような結論を導き出しました。

「Microsoftセキュリティ・チームの活動内容とその公開成果物を具体的に学習する」

 「Microsoftの成果物を学習する必然性はあるのか」と反発する人もいるかと思いますが,Michael Howard氏などが所属するMicrosoftセキュリティ・チームは,社内のWindows開発者の教育や各種製品のぜい弱性や攻撃傾向の分析を担当する,どちらかといえば,現場のチームです。彼らの成果物は,プログラミングから開発プロセスまで多岐にわたりますから,参考になる成果物もあるはずです。参考になる成果物はどん欲に利用しましょう。理由はともあれ,私たちは現実にWindowsを使用しているのですから。

 それではここで,次のような情報を見ていただきましょう。

CopyMemory
CreateProcess,CreateProcessAsUser,CreateProcessWithLogonW
SetSecurityDescriptorDacl
Impersonation Functions
memcpy
sprintf,swprintf
strcat, wcscat, _mbscat
strcpy, wcscpy, _mbscpy
strncat, wcsncat, _mbsncat
WinExec

 これらは一般には,API(Application Programming Interface)や関数と呼ばれるものです(本連載ではAPIと総称)。ここに挙げたAPIは,使い方を誤るとセキュリティ・ホールを作り出す危険なものとして,Michael Howard氏が公表したものです。

 ただし,公表時期は,Gates氏が「Trustworthy Computing」宣言を行った2002月1月15日の前年,2001年の4月です。データとしては古いものですが,セキュリティ問題の基本を確認する上では大変参考になります。なお,より詳細に興味のある方は,こちらをご覧下さい。

 さて皆さんは,上のAPIリストを見てまずどのようなことをお感じになりますか?このようなAPIを初めて目した人は困惑すると思いますが,ここではAPIの名前に注目してください。例えば,CopyMemoryというAPIは,その名前から,あるメモリー内容を別のメモリーにコピーする機能を持っていることが分かると思います。また,strcatの「str」はstringを示し,「cat」は,conCATenateのCATを示しています。このため,strcatは,文字列を連結する機能を持っていることが分かると思います。

 個々のAPIの機能と使い方などは今後の連載で検討していくことにし,今回は,セキュリティ問題が発生する大枠をまずつかんでしまいましょう。このAPIリストは私たちに次のようなことを教えてくれています。

  • メモリーの使い方を誤るとセキュリティ問題が発生する
  • プロセスの起動方法を誤るとセキュリティ問題が発生する
  • リソースへのアクセス権限の与え方を誤るとセキュリティ問題が発生する

 すでに触れたように,このAPIリストは2001月4月に公開された古いものです。しかし,セキュリティ問題の概要を理解するための情報は十分提供してくれています。以降の連載では,これら3つの視点から,Microsoftセキュリティ・チームの活動内容とその公開成果物を具体的に検討し,基礎的なプログラミング知識とWindows利用上の実践的な知識を身に付けてゆくことにします。

本日のまとめ

  • セキュリティ問題への決定的な解決策はまだ用意されていない
  • Microsoftセキュリティ・チームの公開情報は技術者として成長するための生きた教材である

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