[画像のクリックで拡大表示]
 2006年3月2日に東京都内で開催されるマイクロソフトのイベント「Developer Security Day」に合わせて,米MicrosoftのSecurity ArchitectであるDavid LeBlanc氏(写真)が来日,記者との会見に応じた。LeBlanc氏は,「Writing Secure Code」(邦題「プログラマのためのセキュリティ対策テクニック」,日経BPソフトプレス発行)の筆者の一人として知られる。会見の要旨は以下の通り。

——日本では企業のWebサイトから情報が漏えいするなどの事件が相次ぎ,セキュリティ対策の認知度や必要性が高まっている。セキュリティ対策のポイントは何か?

 セキュリティに関して,日本だけが異常な問題が発生しているというわけではない。世界的に同じ問題を抱えている。Webアプリケーションの開発などで,セキュリティ対策をSIベンダーやソフトハウスに依存しているという構造的な問題があるのもほぼ同じだ。

 「Writing Secure Code」を書いたのは,調査によって“開発者もセキュアなアプリケーションを作りたいと思っているけれど,その方法がわからない”ということがわかったからだ。開発者に対して,正しい方法を教育していくことが重要だと感じている。よく知られている問題は,正しいやり方さえ知っていれば防ぐことができる。一方で,すぐに解決できない難しい問題もある。開発者は,時間をかけてセキュアなアプリケーションの作り方を学んでいく必要がある。

 “セキュリティ対策は,セキュリティの専門家やプロにまかせればいい”という意見もあるが,それは根本的に間違っている。セキュリティは信頼性の問題である。信頼性できるコードを書けない開発者に仕事を頼むわけはない。セキュリティは信頼性のサブセットであるということを開発者は認識すべきだ。

——セキュリティ対策は,開発者だけでなく,システム開発を発注する顧客側の意識改革が必要なのでは?

 顧客は,コードがきちんと動くという当たり前のことをシステムの要件として入れることはない。同様に,セキュリティに関しても,攻撃に備えることは当然の要件だと思っている。開発者が顧客の要件をまとめるときには,顧客がセキュリティ対策に関してどの程度期待しているのか正確に計っておくことが大事だ。単なる推測ではなく,具体的な期待値を知っておかないと後で大きな問題になる。スキルの高い攻撃者に備えるためには,それなりの対策を施した高価なシステムにならざるをえない。どんなレベルの攻撃にまで対策を施すのか明確にしておく必要がある。

——セキュリティ対策に関するMicrosoftの役割は?

 Microsoftは,自分たちの製品を保護するだけでなく,それを利用する外部の開発者に,どのようにしてセキュアなアプリケーションを作るのかを教えていくべきだ。OSだけがセキュアであっても,その上で提供される顧客のソリューションがセキュアでなければ意味がないからだ。そのためMicrosoftは最近,セキュリティ教育を強化し,質の良いツールを提供することに注力している。例えば,.NET Frameworkを強化し,Visual Studioを使いやすくすることで,開発者がよりセキュアなコードを書けるようにしている。

——プログラミングの入門者/初級者に,プログラミングを教える際に,同時にセキュリティ対策を理解させることはなかなか難しいのでは?

 初級者が,セキュリティ対策に関して時間を費やすことは難しいかもしれない。そのため彼らには,できるだけセキュアな状態でコードやツールを提供しなければならない。例えば,我々はサンプル・コードを提供する際に,セキュリティに関連する部分にコメントを入れるなどして,正しいやり方を示している。重要なのは,何をいつ教えるかである。プログラミングの基礎知識がなければ,セキュアなコードはうまく教えられない。プログラミングと同様に少しずつ教えていくのが重要だと思う。

——セキュリティの観点から,C言語のように自由度の高い言語を初級者に教えるべきではないという意見もあるが?

 Cを教えるべきではないという意見と,先にCを教えておく方がセキュリティ対策の面でも後々役に立つという意見があり,これはなかなか決着がつかない問題だ。ただ,どんな仕事をするかにもよるだろう。例えば,Webアプリケーションを作る開発者であればCは不要かもしれないし,パッケージ・ソフトを作るのであればC/C++は必須と言える。Cでしか学べないセキュリティ上の問題もあるので,それを知っておくことも大切だと思う。学校などで高機能で安全な言語を学び,社会人になってからCを学ぶと,安全な言語では発生しなかったミスを連発する可能性がある。そうしたことを考えると,Cから学んだ方がいいと思うけれど,それは私がCから始めたからかもしれない。

 理想としてはプリミティブな手法から教える方がいいだろう。例えば,Cの文字列操作を先に見せてから,高レベルな言語のStringクラスを見せるのは効果的だ。セキュリティだけでなく,言語によってパフォーマンスにも違いがある。学校で高水準な言語だけを学んだ方々は,そうした点で社会に出た後,たくさん知るべきことがある。

 セキュアなライブラリやツールを提供することは,初級者やプロではない開発者にとっても重要な支援策となる。例えば,Microsoft Officeを使ってアプリケーションを作る開発者には,いろいろな技術レベルの人がいる。それらすべての開発者にセキュリティの問題を認識させることは難しい。そのため,セキュリティ上のミスが発生しやすい部分で,安全に使えるラッパー機能などを提供して問題を軽減させる支援をしている。