クリティカル・システムに使う市販ソフトウェアの検証方法(2) ―― 誰が,何をもって市販ソフトウェアが信頼できることを証明するのか
3.市販ソフトウェアに求められるリスク分析と検証の実態
市販されている既製のソフトウェア製品をシステムに組み込む場合,検証が必要なソフトウェアという意味で,OTS(off-the-shelf)ソフトウェア,またはCOTS(Commercial off-the-shelf)ソフトウェアと呼びます.OS(Windowsや各種リアルタイムOSなど)やTCP/IPプロトコル・スタック,SDカード・ドライバ,ファイル・システムなどの市販ソフトウェアが,これに相当します.また,Linuxなどの無償のオープン・ソース・ソフトウェアも,検証が必要なソフトウェアという意味では市販ソフトウェアと同じです.
機器の安全を確保する際に市販ソフトウェアに着目する必要がある理由は,市販ソフトウェアがクリティカル・デバイスに使用されることを目的として開発・販売されていないからです.できるものならば,クリティカル・デバイスに使用されることを前提として専用のソフトウェアを毎回作ることが望ましいのですが,それは現実的ではありません.打ち上げが失敗すれば100億円かかるような宇宙事業でさえ,市販ソフトウェアは使われています.
●SOUP(Software of Unknown Provenance)とは
市販ソフトウェア(OTSソフトウェア)のほかに,SOUP(Software of Unknown Provenance;スープと発音)という概念があります.SOUPは「由来の分からないソフトウェア」という意味で,市販ソフトウェア以外でも,自組織で以前に開発したものでも,開発プロセスや検証記録などが十分でないというものも含みます.かつてクリティカル・デバイスに組み込むことを目的に開発されたソフトウェアであっても,必要とされる技術水準で開発されていないソフトウェアはSOUPと見なされ,市販ソフトウェアと同じようにそれがクリティカル・デバイスに組み込まれても大丈夫かどうかを確認する必要があるのです.
●市販ソフトウェアに爆弾が含まれていたら
製品に使うために購入した市販ソフトウェアの中身は,多くの場合ブラック・ボックスです.ソース・コードが公開されていても検証結果が何もなければ,それはブラック・ボックスであるのと同じです.市販ソフトウェアには爆弾が含まれていないとは限りません.市販ソフトウェアの開発者側には些細なバグであっても,それを利用しているクリティカル・システムにとっては重大な障害に結びつくことがあります.
市販ソフトウェアに含まれる爆弾は,ソフトウェア妥当性確認(Software Validation)や設計の妥当性確認(Design Validation),ソフトウェア検証(Software Verification)によって取り除きます(図3).具体的には市販ソフトウェアに対して機能テストを行ったり,サブシステム同士の結合テストや製品の機能テストを行ったりして,爆弾を見つけます.見つけた爆弾は,ソース・コードが提供されていない場合は市販ソフトウェアの供給者に取り除いてもらうしかありません.これは社内で過去に作成した中身の分からないサブシステム(レガシ・ソフトウェア)でも同じです.
そして,検証が十分に行われ,市場で長い時間使用されたサブシステム・ソフトウェアは再利用できます.市販ソフトウェアの検証責任は,基本的には市販ソフトウェアを組み込む(使う)側にあります.検証の一部を市販ソフトウェアの提供者に委託することはできますが,最終的な検証責任は,市販ソフトウェアを使う側が負わなければなりません.