Insider's Eye

あなたのコードは安全か?

―― セキュアなコードを記述するための第一歩を踏み出そう ――

デジタルアドバンテージ
2004/06/08

 インターネットが、コンピューティングの可能性を大きく広げてくれたことに異論を持つ人はいないだろう。多くの果実をもたらしたインターネットは、しかし一方では、侵入や情報窃取、破壊といった脅威にコンピュータ・システムを直面させる危険をもたらした。情報セキュリティが、コンピューティグの最重要課題になっていることは周知のとおりである。

 本来コンピュータ・セキュリティは、設計→開発→展開→運用管理といったITライフサイクルの各ステージで検討・実践されなければならないものだ。しかし攻撃によって直接の影響を受けるのは、ほとんどの場合最終ステージとなる運用管理フェーズであるため、これまではセキュリティ対策といえば、ファイアウォールの設置やパッチ管理など、もっぱらこのフェーズが対象になるケースが多かった。けれどもCode RedやNimda、SQL Slammerなどのコンピュータ・ワームにせよ、ILoveYouやマイドゥーム、ネットスカイなどのコンピュータ・ウイルスにせよ、攻撃の端緒を与えているのはプログラムに潜むバグ=セキュリティ・ホール(脆弱性)である。

 強固な情報システムを構築するために、ITライフサイクルの上流である開発工程において、プログラム・コードのセキュリティに注意を払うのは当然のことだ。しかし残念ながら、多くの開発現場において、セキュリティが優先順位の上位にあることはまれである。

 これにはいくつかの理由がある。第1に、セキュリティは生産物であるソフトウェアの「前向き」な利便性の1つではないばかりか、むしろ利便性の邪魔になることが多い。デフォルトのセキュリティが強化されたWindows Server 2003では、初期状態では多くのサービスが停止された。これなどセキュリティと利便性の関係を象徴しているといってよいだろう。

 第2に、利便性を体現する機能の実装とは異なり、セキュリティへの投資と、そこから得られる見返りはいずれも計測困難で、プログラマにとっては大変退屈な作業だ。

 そして第3に、セキュリティは長らく置き去りにされてきており、実現手法やノウハウの蓄積は十分ではない。つまり、セキュリティに配慮したくても、具体的に何をどうすればよいのかが分かりにくい。

 それでも、プログラマには安全なコードを記述する義務がある。幸いなことに、まだわずかではあるが、頼りにできる文献もいくつか登場してきた。またマイクロソフトは、プログラマ向けの無償セキュリティ・セミナーを全国で開催中だ。プログラマとして自分自身が記述したコードのセキュリティに不安があるなら、そろそろ系統的な学習を始めてはどうだろうか。

『Writing Secure Code』を読もう!

Writing Secure Code 2

Microsoft Press発行
Michael Howard/David LeBlanc著
ISBN0-7356-1722-8
49.99ドル

 Windows環境の開発者にとって頼りになる文献は、Microsoft Pressから発売されている『Writing Secure Code』(Michael Howrd/David LeBlanc著)である。すでに米国では、第2版である『Writing Secure Code 2』が発売されている。この本の表紙には“Required reading at Microsoft. ― Bill Gates”(マイクロソフトでは、これを読むことが必要条件である ― ビル・ゲイツ)とある。

 残念ながら、最新の第2版はまだ日本語化されていないが、第1版については日経BPソフトプレスから『プログラマのためのセキュリティ対策テクニック』として邦訳版が販売されている。

プログラマのためのセキュリティ対策テクニック

日経BPソフトプレス発行
Michael Howard/David LeBlanc著
ドキュメントシステム 訳
ISBN4-89100-291-3
4800円

 この書籍は、プログラマを対象に、安全なコードを記述するために注意すべきポイントやテクニックを解説したものだが、導入部にある「セキュリティの必要性」では、なぜセキュリティが必要なのか、セキュリティの実現が困難なのはなぜか、どうすればセキュリティのための予算確保を経営陣に説得できるのか、などを読み物としてまとめている。

 また巻末の付録として「セキュリティの10か条の鉄則」「設計者や開発者のいい訳集」などでは、ウィットに富んだ語り口でコンピュータ・セキュリティの現状を寸描している。これらなどは、プログラマ以外の人でも広く楽しみながらセキュリティへの理解を深めることができるだろう。

 本論としては、あり得る攻撃の種類(サービス拒否、トロイの木馬など)や過去に発生した侵入の例(CodeRed、ILoveYouなど)、セキュアなソフトウェアを構築するためのプロジェクト管理方法、脅威のモデル化、より具体的な攻撃手法(バッファ・オーバーラン、SQLインジェクション、クロスサイト・スクリプティングなど)、暗号化の基礎などについて、具体的なコード例などを紹介しながら要点を解説している。また後半では、マイクロソフトの最新アプリケーション・プラットフォームである.NET Frameworkについて、コード・アクセス・セキュリティやロールベース・セキュリティ、.NET Frameworkの暗号化機能などについて解説する。

 本書を読破すれば、セキュリティをソフトウェア開発の中でどう位置づけ、どう扱えばよいかという、それまではつかみ所がなかったことが明確になるだろう。マイクロソフトだけでなく、すべてのプログラマに読んでおいてもらいたい一冊である。

 そうはいっても、ボリュームのある書籍をじっくり読む時間が取れないという人は、期間限定ではあるが、マイクロソフトが開催している無償のトレーニング・プログラム“Secure System Training Tour”に参加するとよいだろう。これは全国で開催中のトレーニング・プログラムで、『Writing Secure Code 2』のエキスを1日で解説するというものだ。セッションでは、セキュリティ上の弱点がどのように生まれ、それがどう攻撃されるのかなど、豊富なデモンストレーションを交えながら実践的に解説される。1日のトレーニング受講で、安全なプログラミングに必要なすべてを身に付けようというのは虫がよすぎるが、そのための手軽な第一歩とすることはできるだろう。End of Article

Secure System Training Tour 2004
― マイクロソフトがプログラマ向け無償セキュリティ・セミナーを開催中 ―

 “Secure System Training Tour”は、マイクロソフトが全国規模で展開している無償セミナーで、すでにシステム管理者向けのコースが2004年3月より全国で開催されており、現在も実施中だ(Secure System Training Tourに関する2004年2月2日付けのニュース・リリース)。また登録すれば、WebCastを利用してオンラインでセミナーを受講することもできる(この件に関する2004年4月23日付けのニュース・リリース)。

 そして2004年5月18日からは、ソフトウェア開発者を対象としたコースがスタートした。トレーニングの詳細(開催日時、開催場所、申し込み方法、セッションの内容など)については、マイクロソフトの以下のページを参照のこと。

 プログラマ向けのセミナー(Developer)では、本文中でも紹介している『Writing Secure Code 2』のポイントとなる部分が1日分のセッション(4セッション)にまとめられており、デモンストレーションなども交えながら、セキュリティ・ホールの実際とコーディング時の対策法などが説明される。原稿執筆時点(6月上旬時点)で確認したところでは、プログラマ向けのDeveloperコースは比較的席に余裕があるようだ。

 
 Insider's Eye


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間