セキュアなアーキテクチャ、設計、実装を行うためのデザインパターン情報が公開
政府機関や企業から独立した組織として情報セキュリティ対策活に取り組んでいるJPCERTコーディネーションセンターが、ソフトウェアの脆弱性を減じるための資料「ソフトウエア設計工程における脆弱性低減対策 「セキュアデザインパターン」(日本語版)」(pdf)を公開したと、ITmediaエンタープライズの記事「ソフトウェア設計の安全性を高める技術資料、JPCERT/CCが日本語公開」が伝えています。
ソフトウェアのデザインパターンとは、ソフトウェアの設計をするときに使える設計ノウハウをまとめたものです。有名なものに「ギャング・オブ・フォー」と呼ばれる4人の専門家によってまとめられた書籍「オブジェクト指向における再利用のためのデザインパターン」で紹介された23種類のパターンなどがあります。
この資料ではどんなデザインパターンが紹介されているのか、のぞいてみることにしましょう。
アーキテクチャ、設計、実装に関するデザインパターン
この資料の目的は、ソフトウェア開発のアーキテクチャ、設計、実装のそれぞれのフェーズでのセキュリティ上の課題を解決することだ、というのが「本書の目的」の項目に書かれています。そのため、
セキュアデザインパターンは、システムの上位レベルの設計にかかわるアーキテクチャレベルのパターンから、関数やメソッドの部品を実装する方法のガイダンスを提供する実装レベルのパターンまで、特徴の異なる幅広いレベルのセキュリティ問題に対応する。
と、この資料にはさまざまなレベルのデザインパターンが含まれていることが説明されています。ただし、この資料に書かれたものがセキュリティのためのデザインパターンのすべてではなく、
セキュアデザインパターンのカタログは、将来拡充される予定である。
と、さらに新しいデザインパターンがあってもおかしくないとのこと。以下に、資料に含まれるデザインパターンの紹介を引用します。
アーキテクチャレベルのパターン : アーキテクチャレベルのパターンは、システムの異なる構成要素間の責任配分を抽象度の高いレベルで扱い、構成要素間のやり取りを定義する。本報告書で定義するアーキテクチャレベルのパターンは以下のとおりである。
- Distrustful Decomposition(相互信頼を前提としないシステム構成要素の分解)
- PrivSep(Privilege Separation:権限分離)
- Defer to Kernel(カーネルに委任)
設計レベルのパターン : 設計レベルのパターンは、システム構成要素をいかに設計し実装するかを記述する。つまり、単一のシステム構成要素の内部設計における問題を対象とする。本報告書で定義する設計レベルのパターンは以下のとおりである。
- Secure State Machine(セキュアステートマシン)
- Secure Visitor(セキュアビジター)
実装レベルのパターン : 実装レベルのパターンは、抽象度の低い実装寄りのセキュリティ上の課題を対象とする。このクラスにおけるパターンは、一般にシステム内の特定の関数やメソッドの実装に適用できる。実装レベルのパターンは、CERT Secure Coding Standards [CERT 2009a] が対象とする問題と同種の問題を取り上げ、多くの場合、対応するセキュアコーディングのガイドラインに関連付けられている。本報告書で定義する実装レベルのパターンは以下のとおりである。
- Secure Directory(セキュアディレクトリ)
- Pathname Canonicalization(パス名正規化)
- Input Validation(入力検査)
- Resource Acquisition Is Initialization(リソースの確保は初期化時に行う)
関連記事 on Publickey
- あっけなく偽造されるプライバシーマーク
- システム管理者の犯行 vs TOMOYO Linux
- ショートレビュー:マイクロソフトの無償アンチウィルス「Security Essentials」があれば、市販の製品は不要か?