Webアプリケーションの脆弱性を狙った攻撃が国内外で相次いでいる。脆弱性を突かれて顧客情報を盗まれるようなことになれば,企業の信用は失墜する。Webサイトを運営している企業なら,業種や事業規模にかかわらずセキュリティに気をつけなければならないのが現状である。そこで今回の記事では,Webアプリケーションのセキュリティを取り上げる。

 Webアプリケーションのセキュリティには,次のニつが考えられる。一つは,運用中のWebアプリケーションに関するセキュリティである。現在利用しているWebアプリケーションを診断し,脆弱性が見つかった場合には,できるだけ速やかに対処する必要がある。

 脆弱性の診断には,専門ベンダーが提供している診断サービスを利用する方法や,診断用のパッケージ・ソフトウエアを導入して自社で調べる方法などがある。

 もう一つは,これから開発するWebアプリケーションに関するセキュリティである。設計および製造段階からセキュリティを考慮する。いわゆる「セキュア・プログラミング」である。本稿では,このセキュア・プログラミングの実践について考えてみたい。後述するように,セキュア・プログラミングのポイントを体系立ててまとめた「セキュア・プログラミング規約」を用意し,情報共有することが有用だ。

Webアプリケーションの脆弱性とは

 当然のことながら,開発者はWebアプリケーションの脆弱性を理解する必要がある。おさらいの意味も含め,Webアプリケーションの代表的な脆弱性(あるいは脆弱性への攻撃手法)を以下に示す。

  • クロスサイト・スクリプティング
  • セッションの乗っ取り
  • SQLインジェクション
  • OSコマンド・インジェクション
  • パス名パラメータの未チェック(パス乗り換え)
  • セッション管理の不備
  • ディレクトリ・トラバーサル
  • 重要ファイルの公開(公開ディレクトリに秘密情報を誤って置く)

 これらの詳細については,情報処理推進機構(IPA)が公開する「IPA ISEC セキュア・プログラミング講座」などを参照していただきたい。

 なお,IPAおよびJPCERTコーディネーションセンター(JPCERT/CC)によると,届け出があったWebアプリケーションの脆弱性の半数以上(56%)がクロスサイト・スクリプティングで,その次がパス名パラメータの未チェック(14%)だという(発表資料,PDFファイル)。

「セキュア・プログラミング規約」が有用

 Webアプリケーションの開発者は,前述の脆弱性を含めないようにプログラミングを行う必要がある。とはいえ,脆弱性の種類は多く,対処法もさまざま。そこで,脆弱性を分類して整理し,Webアプリケーションの開発中に参照できるような「セキュア・プログラミング規約」をまとめておくと有用である。セキュア・プログラミング規約は,関係者が自由に参照できるようにWebで公開する。

セキュア・プログラミング規約の例(1)
図1 セキュア・プログラミング規約の例(1)
セキュア・プログラミング規約の例(2)
図2 セキュア・プログラミング規約の例(2)
 規約をまとめる際のポイントは,分類をあまり細かくしないこと。4~5つ程度の分野にまとめるといいだろう。 また,Webアプリケーションの脆弱性の種類(例えば,「クロスサイト・スクリプティング」)で分類するのではなく,開発者(プログラミング)の視点(例えば,「セッション管理」)で分類すると,実際に利用するときに扱いやすくなる。具体例を図1(拡大表示)に示す。

 図1の例では,(1)セッション管理・認証管理・データの受け渡し,(2)入力値チェック,(3)Webサーバーの設定関係,(4)一般的なコーディング規則,(5)その他――の5分野に分けている。

 4~5のカテゴリに分類した後は,それぞれの脆弱性の危険度や重要度のランク(A~Dなど)を付けるとともに,プログラミングの際の「必須項目」や「注意項目」などを記載する。参考資料などへのリンクを併記すると,より使いやすいものとなる。一例を図2(拡大表示)に示す。

 自分たちでセキュア・プログラミング規約をまとめる際には,「IPA 消費者向け電子商取引サイトの運用における注意点」,「安全なWebアプリ開発40箇条の鉄則」(PDFファイル)や「ThinkIT:Webアプリケーションの脆弱性」などの情報が参考になる。

 自分たちでまとめなくても,例えば,外部の委託先がセキュア・プログラミング規約を用意していれば,それを参考にしてもよいだろう。

確実な実践のために

 セキュア・プログラミング規約を用意しても,開発者が実践しなければ意味がない。そのためには,社内でセキュア・プログラミングに関する教育を実施し,開発者(プログラマ)にその重要性を周知徹底する必要がある。社内で教育することが難しい場合には,セキュリティ・ベンダーなどが提供する教育サービスを利用する方法もある。

 加えて,Webアプリケーションの開発プロジェクトの中で,セキュア・プログラミングを意識した開発管理(プロジェクト管理)を行うことも重要だ。

 具体的には,プロジェクト管理フレームワークの中で,詳細設計や製造などのレビュー・ポイントにセキュア・プログラミングの項目を追加する。そして,開発フェーズへ移行するときに,その項目が適用されているかどうかを審査する。

 外部のパートナなどに開発を委託するのであれば,発注条件としてセキュア・プログラミング規約を明示し,その適用の徹底を図ることが重要だろう。

 さらに,総合評価時には脆弱性診断を実施して,セキュア・プログラミングが徹底されていることを検査すればより確実である。


大谷 俊一 (OHTANI Toshikazu) ootaniアットマークmxe.nes.nec.co.jp
NECソフト株式会社 MCシステム事業部セキュリティ部


 IT Pro Securityが提供する「今週のSecurity Check [一般編]」は,セキュリティ全般の話題(技術,製品,トレンド,ノウハウ)を取り上げる週刊コラムです。システム・インテグレーションやソフト開発を手がける「NECソフト株式会社」の,セキュリティに精通したスタッフの方を執筆陣に迎え,分かりやすく解説していただきます。