(57)【要約】  脅威情報取得部（２０１）は、プログラム（１０５）の仕様が示されるプログラム仕様書に基づくリスク分析により特定されたプログラム（１０５）の実行時に発生し得る脅威と、プログラム仕様書に示される要素のうち脅威の発生に関与する要素である脅威関与要素とが示される脅威情報を取得する。判定部（２５０）は、プログラム（１０５）に記述される変数のうち脅威関与要素に対応する変数を脅威関与変数として抽出し、抽出した脅威関与変数に基づきプログラム（１０５）を解析して脅威への対策がプログラム（１０５）において講じられているか否かを判定する。
2020261430.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの仕様が示されるプログラム仕様書に基づくリスク分析により特定された前記プログラムの実行時に発生し得る脅威と、前記プログラム仕様書に示される要素のうち前記脅威の発生に関与する要素である脅威関与要素とが示される脅威情報を取得する脅威情報取得部と、
前記プログラムに記述される変数のうち前記脅威関与要素に対応する変数を脅威関与変数として抽出し、抽出した前記脅威関与変数に基づき前記プログラムを解析して前記脅威への対策が前記プログラムにおいて講じられているか否かを判定する判定部とを有する情報処理装置。
【請求項２】
前記判定部は、
前記脅威への対策を実現する処理である対策処理が前記プログラムに含まれているか否かを解析して、前記脅威への対策が前記プログラムにおいて講じられているか否かを判定する請求項１に記載の情報処理装置。
【請求項３】
前記判定部は、
前記対策処理を実現する関数である対策関数が、前記脅威関与変数と対応付けられて前記プログラムに記述されている場合に、前記対策処理が前記プログラムに含まれると判定する請求項２に記載の情報処理装置。
【請求項４】
前記判定部は、
前記対策関数が、前記脅威関与変数と対応付けられた入力処理関数と前記脅威関与変数と対応付けられた出力処理関数との間に記述されている場合に、前記対策処理が前記プログラムに含まれると判定する請求項３に記載の情報処理装置。
【請求項５】
前記判定部は、
相互に関連する前記プログラムの要素と前記プログラム仕様書の要素とが対応付けられて示されるソフトウェアトレース情報を参照し、前記ソフトウェアトレース情報において前記脅威関与要素と対応付けられている変数を前記脅威関与変数として抽出する請求項１に記載の情報処理装置。
【請求項６】
前記判定部は、
前記入力処理関数の戻り値の型と前記出力処理関数の引数の型と前記対策関数の引数及び戻り値の型に基づき、前記対策関数が前記入力処理関数と前記出力処理関数との間に記述されているか否かを判定する請求項４に記載の情報処理装置。
【請求項７】
前記情報処理装置は、更に、
前記入力処理関数の戻り値の型と前記出力処理関数の引数の型と前記対策関数の引数及び戻り値の型を前記判定部に通知する型通知部を有し、
前記判定部は、
前記型通知部から通知された前記入力処理関数の戻り値の型と前記出力処理関数の引数の型と前記対策関数の引数及び戻り値の型とに基づき、前記対策関数が前記入力処理関数と前記出力処理関数との間に記述されているか否かを判定する請求項６に記載の情報処理装置。
【請求項８】
前記判定部は、
モデルを利用したソフトウェア開発により得られたプログラムにおいて前記脅威への対策が講じられているか否かを判定する請求項１に記載の情報処理装置。
【請求項９】
コンピュータが、プログラムの仕様が示されるプログラム仕様書に基づくリスク分析により特定された前記プログラムの実行時に発生し得る脅威と、前記プログラム仕様書に示される要素のうち前記脅威の発生に関与する要素である脅威関与要素とが示される脅威情報を取得し、
前記コンピュータが、前記プログラムに記述される変数のうち前記脅威関与要素に対応する変数を脅威関与変数として抽出し、抽出した前記脅威関与変数に基づき前記プログラムを解析して前記脅威への対策が前記プログラムにおいて講じられているか否かを判定する情報処理方法。
【請求項１０】
プログラムの仕様が示されるプログラム仕様書に基づくリスク分析により特定された前記プログラムの実行時に発生し得る脅威と、前記プログラム仕様書に示される要素のうち前記脅威の発生に関与する要素である脅威関与要素とが示される脅威情報を取得する脅威情報取得処理と、
前記プログラムに記述される変数のうち前記脅威関与要素に対応する変数を脅威関与変数として抽出し、抽出した前記脅威関与変数に基づき前記プログラムを解析して前記脅威への対策が前記プログラムにおいて講じられているか否かを判定する判定処理とをコンピュータに実行させる情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、セキュリティ上の脅威への対策がプログラムにおいて講じられているか否かを判定する技術に関する。
【背景技術】
【０００２】
システム又は機器のセキュリティ対策は、一般に以下の手順にて実施される。まず、開発の上流工程の段階で、システム又は機器で発生し得る脅威が抽出される。次に、抽出された脅威による被害の大きさを評価するリスク分析と呼ばれるプロセスが実施される。そして、リスク分析の結果、対策すべき脅威の優先度を把握し、各脅威へのセキュリティ対策の方針を立て、開発工程の各段階でセキュリティ対策を具体化していく。例えば、データの盗聴への対策としてデータを暗号化する場合は、暗号化及び復号のロジックがソフトウェアの設計に反映される。また、暗号鍵をセキュアに保管するためのハードウェア構成がシステム設計に反映される。一方、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）への不正アクセス対策としてスクリーンロックを利用する場合は、スクリーンロックの徹底がシステムの運用マニュアルに反映される。【０００３】
ソフトウェア開発の実装段階で行われるセキュリティ対策として静的解析がある、静的解析では、セキュリティ上の脅威に繋がるソフトウェアの問題である脆弱性を、ソフトウェアの実行コードを動作させず、主にソースコードを解析することによって特定する。さらに、静的解析の具体的な方法として、データフローを追跡するテイント解析と呼ばれる手法がある。
外部から入力されたデータに基づき処理を行うソフトウェアでは、想定外の入力データによって不正な処理が実行される可能性がある。テイント解析では、外部からの入力データを汚染されたデータ（テイント）と見なす。そして、テイント解析では、データが入力されてから当該データが使用されるまでのデータフローを追跡する。更に、テイント解析では、データの使用前にデータの検証処理又は／及びデータ無害化処理があるかどうかを判定する。もし、データ検証処理又は／及びデータ無害化処理がなければ、汚染されたデータがそのまま使用されることになる。データ検証処理又は／及びデータ無害化処理がない場合は、不正な処理が実行される可能性があるため、脆弱性があると判定される。一方、データ検証処理又は／及びデータ無害化処理があれば、汚染されたデータが除去されたと見なすことができ、このため、脆弱性がないと判定される。【０００４】
特許文献１では、ソースコードにおいて脆弱経路を検出する方法が示されている。
具体的には、特許文献１では、ソースコードにおいて、データが外部から入力され、外部へデータが出力される手順を定めたデータフローが抽出される。そして、抽出されたデータフローと、データベースに登録された脆弱性の発生点及び使用点とを照合することによって脆弱経路が検出される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−２９９７２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１の技術では、プログラムのみを解析し、プログラムのみから脅威を抽出する。このため、特許文献１では、脅威の抽出漏れが生じ、十分な対策を講じることができない可能性がある。【０００７】
本発明は、このような課題を解決することを主な目的とする。より具体的には、本発明は、プログラムの解析のみでは抽出できない脅威に対しても対策が講じられるようにすることを主な目的とする。
【課題を解決するための手段】
【０００８】
本発明に係る情報処理装置は、
プログラムの仕様が示されるプログラム仕様書に基づくリスク分析により特定された前記プログラムの実行時に発生し得る脅威と、前記プログラム仕様書に示される要素のうち前記脅威の発生に関与する要素である脅威関与要素とが示される脅威情報を取得する脅威情報取得部と、
前記プログラムに記述される変数のうち前記脅威関与要素に対応する変数を脅威関与変数として抽出し、抽出した前記脅威関与変数に基づき前記プログラムを解析して前記脅威への対策が前記プログラムにおいて講じられているか否かを判定する判定部とを有する。
【発明の効果】
【０００９】
本発明では、プログラム仕様書に基づくリスク分析により特定された脅威への対策がプログラムにおいて講じられているか否かを判定する。このため、本発明によれば、プログラムの解析のみでは抽出できない脅威に対しても対策が講じられる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１に係るセキュリティ設計装置のハードウェア構成例を示す図。
【図２】実施の形態１に係るセキュリティ設計装置の機能構成例を示す図。
【図３】実施の形態１に係るシステム構成図及びプログラム仕様図の例を示す図。
【図４】実施の形態１に係るプログラムの例を示す図。
【図５】実施の形態１に係るソフトウェアトレース情報の例を示す図。
【図６】実施の形態１に係る脅威情報の例を示す図。
【図７】実施の形態１に係る脆弱性対策処理情報の例を示す図。
【図８】実施の形態１に係る対策関数情報の例を示す図。
【図９】実施の形態１に係る対策が講じられているプログラムの例を示す図。
【図１０】実施の形態１に係るセキュリティ設計装置の動作例を示すフローチャート。
【図１１】実施の形態１に係る脆弱性情報の例を示す図。
【図１２】実施の形態２に係るセキュリティ設計装置の機能構成例を示す図。
【図１３】実施の形態２に係る型情報の例を示す図。
【図１４】実施の形態２に係る対策関数情報の例を示す図。
【図１５】実施の形態２に係るセキュリティ設計装置の動作例を示すフローチャート。
【図１６】実施の形態２に係る疑似コードの例を示す図。
【図１７】実施の形態２に係る疑似コードの例を示す図。
【図１８】モデルベース開発の流れを示す図。
【図１９】モデルベース開発にセキュリティ設計装置を適用した流れを示す図。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態について、図を用いて説明する。以下の実施の形態の説明及び図面において、同一の符号を付したものは、同一の部分又は相当する部分を示す。
【００１２】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１は、実施の形態１に係るセキュリティ設計装置１００のハードウェア構成例を示す。
セキュリティ設計装置１００は、情報処理装置に相当する。また、セキュリティ設計装置１００の動作手順は、情報処理方法に相当する。
【００１３】
セキュリティ設計装置１００は、コンピュータである。
セキュリティ設計装置１００は、プロセッサ１０１、主記憶装置１０２、補助記憶装置１０３、入力インターフェース１１１、表示インターフェース１１２及びネットワークインターフェース１１３で構成される。これらのハードウェア要素は、データバス１１４によって接続されている。
また、図１は、セキュリティ設計装置１００の機能を実現する検証プログラム１０４の実行時における各データの配置例を示す。具体的には、検証プログラム１０４、プログラム１０５、ソフトウェアトレース情報１０６、対策関数情報１０７、脅威情報１０８、脆弱性情報１０９は主記憶装置１０２に配置される。また、脆弱性ＤＢ１１０は補助記憶装置１０３に配置される。
検証プログラム１０４は、情報処理プログラムに相当する。
検証プログラム１０４は、通常、補助記憶装置１０３に格納されており、実行時は、プロセッサ１０１によって主記憶装置１０２に読み込まれ、プロセッサ１０１により実行される。
検証プログラム１０４は、脅威情報取得部２０１、脆弱性特定情報選択部２０２、脅威関与変数抽出部２０３、脆弱性判定部２０４及び脆弱性情報生成部２０５の機能を実現するプログラムである。
図１では、プロセッサ１０１が検証プログラム１０４を実行している状態を模式的に表している。つまり、図１では、プロセッサ１０１が、検証プログラム１０４を実行して、脅威情報取得部２０１、脆弱性特定情報選択部２０２、脅威関与変数抽出部２０３、脆弱性判定部２０４及び脆弱性情報生成部２０５として動作している状態を模式的に表している。
検証プログラム１０４、ソフトウェアトレース情報１０６、対策関数情報１０７及び脅威情報１０８は、脅威情報取得部２０１、脆弱性特定情報選択部２０２、脅威関与変数抽出部２０３、脆弱性判定部２０４及び脆弱性情報生成部２０５のいずれかにより用いられる。
プログラム１０５、ソフトウェアトレース情報１０６、対策関数情報１０７及び脅威情報１０８のうちのいずれかは、入力インターフェース１１１又はネットワークインターフェース１１３から入力されて、主記憶装置１０２に転送される。また、プログラム１０５、ソフトウェアトレース情報１０６、対策関数情報１０７及び脅威情報１０８のうちのいずれかは、補助記憶装置１０３からの読み込みによって、主記憶装置１０２に転送される。
脆弱性情報１０９は脆弱性情報生成部２０５から出力される。脆弱性情報１０９は、例えば、補助記憶装置１０３に格納される。また、脆弱性情報１０９は、表示インターフェース１１２に通じて表示装置に表示されてもよい。また、脆弱性情報１０９は、ネットワークインターフェース１１３を通じて外部に転送されてもよい。
【００１４】
図２は、実施の形態１に係るセキュリティ設計装置１００の機能構成例及びデータフロー例を示す。
【００１５】
前述したように、セキュリティ設計装置１００は、ソフトウェアトレース情報１０６、脅威情報１０８及び脆弱性ＤＢ１１０を用いて、プログラム１０５における対策の有無を検証する。
また、セキュリティ設計装置１００は、機能構成として、脅威情報取得部２０１、脆弱性特定情報選択部２０２、脅威関与変数抽出部２０３、脆弱性判定部２０４及び脆弱性情報生成部２０５を有する。
脆弱性特定情報選択部２０２、脅威関与変数抽出部２０３及び脆弱性判定部２０４は、判定部２５０に相当する。また、脆弱性特定情報選択部２０２、脅威関与変数抽出部２０３及び脆弱性判定部２０４により行われる処理は判定処理に相当する。
【００１６】
プログラム１０５は、セキュリティ設計装置１００の検証対象となるプログラムである。つまり、セキュリティ設計装置１００は、プログラム１０５の実行時に発生し得る脅威への対策がプログラム１０５において講じられているか否かを判定する。
本実施の形態では、制御システムの機器コントローラの通信ソフトウェア（以下、通信Ｓ／Ｗと表記する）にプログラム１０５を適用することとする。
プログラム１０５は、機器コントローラの動作を詳細に定義した仕様である。例えば、プログラミング言語で記述したソースコードがプログラム１０５に該当する。図４は、制御システムの機器コントローラの通信Ｓ／Ｗ３０３、すなわち、プログラム１０５の例を示す。
プログラム１０５はソフトウェア開発の実装段階で生成されるものである。通常のソフトウェア開発では、実装に先立って、例えばシステム設計の段階がある。そして、システム設計の段階で、システム構成やシステムの概略的な動作が定義される。
【００１７】
図３は、制御システムのシステム構成図３００及びプログラム仕様図３１０の例を示す。システム構成図３００とプログラム仕様図３１０は、プログラム仕様書の例である。プログラム仕様書は、プログラムの仕様が示される情報である。プログラム仕様書は、プログラム１０５のコーディングに先立って生成されるソフトウェア開発成果物である。
【００１８】
本実施の形態に係る制御システムは、ＨＭＩ（Ｈｕｍａｎ  Ｍａｃｈｉｎｅ  Ｉｎｔｅｒｆａｃｅ）３０１、機器コントローラ３０２及びフィールド機器３０４で構成される。ＨＭＩ３０１と機器コントローラ３０２は伝送路３０５で接続され、機器コントローラ３０２とフィールド機器３０４は伝送路３０６で接続される。
ＨＭＩ３０１は、運転員が制御システムの監視制御を行うための端末である。ＨＭＩ３０１における運転員による操作に従い、ＨＭＩ３０１から機器コントローラ３０２に対して、伝送路３０５を介して、ＳＴＡＲＴ、ＳＴＯＰ及びＲＥＡＤのいずれかの制御コマンド３０８が送信される。また、ＨＭＩ３０１は、機器コントローラ３０２から、レスポンスとしてセンサ情報を受信する。
機器コントローラ３０２は、ＨＭＩ３０１からの指示に従いフィールド機器３０４を制御する。機器コントローラ３０２の送受信機能は、通信Ｓ／Ｗ３０３によって実現されている。より具体的には、通信Ｓ／Ｗ３０３は、ＨＭＩ３０１から伝送路３０５を介して送信された制御コマンド３０８を受信する。また、通信Ｓ／Ｗ３０３は、ＨＭＩ３０１から受信した制御コマンド３０８に従い、フィールド機器３０４にＯＮ、ＯＦＦいずれかの制御信号３０９を送信する。また、通信Ｓ／Ｗ３０３は、フィールド機器３０４から送信されるセンサ情報を受信する。更に、通信Ｓ／Ｗ３０３は、制御コマンド３０８に対するレスポンスとして、センサ情報をＨＭＩ３０１に送信する。
通信Ｓ／Ｗ３０３は、ソフトウェア開発の段階に従って仕様化、詳細化されていく。例えば、システム構成図３００が生成されて通信Ｓ／Ｗ３０３の動作の概要が定義され、次に、プログラム仕様図３１０が生成されて通信Ｓ／Ｗ３０３のプログラム仕様が定義される。そして、実装段階でさらに詳細化されて、ソースコードであるプログラム１０５が生成される。
【００１９】
プログラム仕様図３１０は、状態遷移図である。プログラム仕様図３１０は、状態遷移３１１、状態３１２、状態３１３、状態遷移３１４及び状態遷移３１５で構成されている。
状態３１２は、ＳＹＳＴＥＭ＿ＯＦＦのラベルを持つ状態である。状態３１３は、ＳＹＳＴＥＭ＿ＯＮのラベルを持つ状態である。状態遷移３１１は、状態３１２から状態３１３への状態遷移である。状態遷移３１４は、状態３１３から状態３１２への状態遷移である。状態遷移３１５は、状態３１３から状態３１３への状態遷移である。
状態遷移３１１は、状態がＳＹＳＴＥＭ＿ＯＦＦであるとき、「ＨＭＩから制御コマンドＳＴＡＲＴを受信」という条件が満たされれば「フィールド機器に制御信号ＯＮを送信」という処理が実行され、状態がＳＹＳＴＥＭ＿ＯＮに遷移することを意味する。これは、ＨＭＩ３０１から制御コマンドＳＴＡＲＴを受信すると、フィールド機器３０４に制御信号ＯＮを送信するという、機器コントローラ３０２の通信Ｓ／Ｗ３０３の動作を定義している。
状態遷移３１４は、状態がＳＹＳＴＥＭ＿ＯＮであるとき、「ＨＭＩから制御コマンドＳＴＯＰを受信」という条件が満たされれば「フィールド機器に制御信号ＯＦＦを送信」という処理が実行され、状態がＳＹＳＴＥＭ＿ＯＦＦに遷移することを意味する。これは、ＨＭＩ３０１から制御コマンドＳＴＯＰを受信すると、フィールド機器３０４に制御信号ＯＦＦを送信するという、機器コントローラ３０２の通信Ｓ／Ｗ３０３の動作を定義している。
状態遷移３１５は、状態がＳＹＳＴＥＭ＿ＯＮであるとき、「ＨＭＩから制御コマンドＲＥＡＤを受信」という条件が満たされれば「フィールド機器からセンサ情報を読込」と「ＨＭＩにセンサ情報を送信」の２個の処理が実行され、状態がＳＹＳＴＥＭ＿ＯＮに遷移する、すなわち、状態がＳＹＳＴＥＭ＿ＯＮのまま変化しないことを意味する。これは、ＨＭＩ３０１から制御コマンドＲＥＡＤを受信すると、フィールド機器３０４から読み込んだセンサ情報をＨＭＩ３０１に送信するという、機器コントローラ３０２の通信Ｓ／Ｗ３０３の動作を定義している。
【００２０】
以上のように、機器コントローラ３０２の通信Ｓ／Ｗ３０３の開発においては、開発工程の各段階に応じてシステム構成図３００、プログラム仕様図３１０及びプログラム１０５のような仕様が生成され、それらは互いに対応付けられる。ソフトウェアのライフサイクルにおいて、各成果物が互いに対応付けられ追跡可能である性質はトレーサビリティと呼ばれる。これにより、例えば要求が設計、実装に正しく反映されていることが保証される。
【００２１】
ソフトウェアトレース情報１０６は、相互に関連するプログラム１０５の要素とプログラム仕様書の要素とが対応付けられて示される情報である。
図５は、本実施の形態に係るソフトウェアトレース情報１０６の例を示す。
ソフトウェアトレース情報１０６は、システム設計とプログラム設計と実装の項目で構成される。
ソフトウェアトレース情報１０６は、ソフトウェア開発の各段階で生成される成果物を互いに対応付ける情報である。例えば、番号１の行から、各段階の成果物がシステム構成図３００、プログラム仕様図３１０及びプログラム１０５であることがわかる。また、番号２の行から、システム構成図３００の制御コマンドがプログラム仕様図３１０の制御コマンドに対応し、また、プログラム１０５の変数ｃｍｄに対応することがわかる。
【００２２】
脅威情報１０８は、例えば、図６に示す情報である。脅威情報１０８は、開発対象のソフトウェアが搭載される機器、その機器が利用されるシステムに対するセキュリティの脅威が定義された情報である。図６の脅威情報１０８は、図３のシステム構成図３００に基づくリスク分析によって抽出されるセキュリティ脅威の一覧を示している。
脅威情報１０８は、脅威と情報資産と脆弱性の項目で構成される。
「脅威」は、プログラム１０５の実行時に発生し得る脅威である。脅威は、プログラム仕様書（本例では、システム構成図３００）に基づくリスク分析により特定された脅威である。ユーザがプログラム仕様書を参照したリスク分析を行って脅威の特定を行ってもよいし、特定の分析ツールにプログラム仕様書に基づくリスク分析を行わせて脅威の特定を行わせてもよい。
「情報資産」は、プログラム仕様書に示される要素のうち脅威の発生に関与する要素である。脅威情報１０８に示される情報資産を脅威関与要素にともいう。
「脆弱性」は、脅威を発生させる脆弱性であり、プログラム１０５に存在する脆弱性である。図７の例では、脆弱性は、ＣＷＥ（Ｃｏｍｍｏｎ  Ｗｅａｋｎｅｓｓ  Ｅｎｕｍｅｒａｔｉｏｎ）と呼ばれる脆弱性の識別子により表現されている。図７の例からは、「ＨＭＩ−機器コントローラ間の制御コマンドの改ざんによるフィールド機器の停止」という脅威があり、当該脅威の発生に関与する情報資産が「制御コマンド」であること、また、当該脅威を発生させる脆弱性が「ＣＷＥ−２０」であることがわかる。なお、脆弱性は、ＣＷＥ以外の形式で表現することも可能である。
【００２３】
脆弱性ＤＢ１１０では、図７に示される脆弱性対策処理情報１１５が格納されている。
脆弱性対策処理情報１１５は、脆弱性と対策処理の項目で構成される。
「脆弱性」は、脅威情報１０８に示される脆弱性である。
「対策処理」は、脅威への対策を実現する処理である。具体的には、「対策処理」には、脅威を排除するための処理が示される。
図７の脆弱性対策処理情報１１５では、例えば、ＣＷＥ−２０の脆弱性に対しては、「入力検証」により脅威が排除される。
【００２４】
対策関数情報１０７は、例えば、図８に示す情報である。対策関数情報１０７は、対策処理とライブラリと対策関数の項目で構成される。
「対策処理」は、脆弱性対策処理情報１１５に示される対策処理である。
「ライブラリ」は、プログラム１０５が使用するライブラリを示す。
「対策関数」は、プログラム１０５が使用するライブラリにおいて対策処理を実現する関数を示す。具体的には、脅威を排除するための関数である。
【００２５】
図２に戻り、脅威情報取得部２０１は、脅威情報１０８を取得する。
そして、脅威情報取得部２０１は、脅威情報１０８から脆弱性識別子２１１及び脅威関与要素情報２１２を生成する。また、脅威情報取得部２０１は、脆弱性識別子２１１を脆弱性特定情報選択部２０２に出力し、脅威関与要素情報２１２を脅威関与変数抽出部２０３に出力する。
具体的には、脅威情報取得部２０１は、脅威情報１０８に示される脆弱性（例えば、「ＣＷＥ−２０」）を抽出する。また、脅威情報取得部２０１は、抽出した脆弱性を通知する脆弱性識別子２１１を生成し、脆弱性識別子２１１を脆弱性特定情報選択部２０２に出力する。また、脅威情報取得部２０１は、脅威情報１０８に示される情報資産（例えば、「制御コマンド」）を通知する脅威関与要素情報２１２を生成する。そして、脅威情報取得部２０１は、脅威関与要素情報２１２を脅威関与変数抽出部２０３に出力する。
脅威情報取得部２０１で行われる処理は、脅威情報取得処理に相当する。
【００２６】
脆弱性特定情報選択部２０２は、脅威情報取得部２０１から脆弱性識別子２１１を取得する。また、脆弱性特定情報選択部２０２は、プログラム１０５及び対策関数情報１０７を取得する。そして、脆弱性特定情報選択部２０２は、脆弱性識別子２１１に基づき脆弱性ＤＢ１１０内の脆弱性対策処理情報１１５を検索する。この結果、脆弱性特定情報選択部２０２は、脆弱性識別子２１１で通知された脆弱性に対する対策処理を特定する。また、脆弱性特定情報選択部２０２は、プログラム１０５を解析してプログラム１０５で用いられるライブラリを特定する。そして、脆弱性特定情報選択部２０２は、特定した対策処理とライブラリとに対応する対策関数を対策関数情報１０７から抽出する。そして、脆弱性特定情報選択部２０２は、対策関数情報１０７から抽出した対策関数を通知する関数特定情報２１３を生成し、生成した関数特定情報２１３を脆弱性判定部２０４に出力する。
【００２７】
脅威関与変数抽出部２０３は、ソフトウェアトレース情報１０６と脅威関与要素情報２１２を取得する。
そして、脅威関与変数抽出部２０３は、脅威関与要素情報２１２に示される情報資産（脅威関与要素）とソフトウェアトレース情報１０６において対応付けられているプログラム１０５の要素を抽出する。より具体的には、脅威関与変数抽出部２０３は、脅威関与要素情報２１２に示される情報資産（脅威関与要素）とソフトウェアトレース情報１０６において対応付けられているプログラム１０５の変数を抽出する。なお、脅威関与変数抽出部２０３が抽出する変数を脅威関与変数という。
脅威関与変数抽出部２０３は、抽出した脅威関与変数を通知する脅威関与変数情報２１４を生成する。そして、脅威関与変数抽出部２０３は、生成した脅威関与変数情報２１４を脆弱性判定部２０４に出力する。
【００２８】
脆弱性判定部２０４は、プログラム１０５と関数特定情報２１３と脅威関与変数情報２１４を取得する。
そして、脆弱性判定部２０４は、プログラム１０５内の適切な箇所に脅威関与変数情報２１４に示される対策関数が記述されているか否かを判定する。プログラム１０５内の適切な箇所に対策関数が記述されている場合は、脆弱性判定部２０４は、プログラム１０５において脅威への対策が講じられていると判定する。一方で、プログラム１０５内の適切な箇所に対策関数が記述されていない場合は、脆弱性判定部２０４は、プログラム１０５において脅威への対策が講じられていないと判定する。
より具体的には、脆弱性判定部２０４は、脅威関与変数情報２１４に示す脅威関与変数と対応付けられた入力処理関数と脅威関与変数と対応付けられた出力処理関数とを抽出する。そして、脆弱性判定部２０４は、抽出した入力処理関数と出力処理関数との間に対策関数が記述されているか否かを判定する。入力処理関数と出力処理関数との間に対策関数が記述されている場合は、脆弱性判定部２０４は、プログラム１０５において脅威への対策が講じられていると判定する。一方で、入力処理関数と出力処理関数との間に対策関数が記述されていない場合は、脆弱性判定部２０４は、プログラム１０５において脅威への対策が講じられていないと判定する。
そして、脆弱性判定部２０４は、判定結果２１５を脆弱性情報生成部２０５に出力する。
【００２９】
脆弱性情報生成部２０５は、判定結果２１５を取得する。
そして、脆弱性情報生成部２０５は、判定結果２１５から脆弱性情報１０９を生成し、脆弱性情報１０９を出力する。
前述したように、脆弱性情報生成部２０５は、例えば脆弱性情報１０９を補助記憶装置１０３に出力する。また、脆弱性情報生成部２０５は、ネットワークインターフェース１１３を介して脆弱性情報１０９を外部に出力してもよいし、表示インターフェース１１２を介して脆弱性情報１０９を表示装置に出力してもよい。
【００３０】
＊＊＊動作の説明＊＊＊
次に、実施の形態１に係るセキュリティ設計装置１００の動作例を説明する。
図１０は、実施の形態１に係るセキュリティ設計装置１００の動作例を表すフローチャートである。
【００３１】
先ず、ステップＳ７０１で、脅威情報取得部２０１が脅威情報１０８を取得する。
【００３２】
次に、ステップＳ７０２で、脅威情報取得部２０１が脅威情報１０８から脆弱性識別子２１１及び脅威関与要素情報２１２を生成する。
【００３３】
次に、ステップＳ７０３で、脆弱性特定情報選択部２０２がプログラム１０５と脆弱性対策処理情報１１５とを参照して対策関数情報１０７から対策関数を抽出する。
【００３４】
次に、ステップＳ７０４で、脅威関与変数抽出部２０３が脅威関与要素情報２１２とソフトウェアトレース情報１０６を参照して脅威関与変数を抽出する。
【００３５】
次に、ステップＳ７０５で、脆弱性判定部２０４が脅威関与変数情報２１４を参照してプログラム１０５から入力処理関数と出力処理関数を抽出する。
【００３６】
次に、ステップＳ７０６で、脆弱性判定部２０４が入力処理関数及び出力処理関数を抽出し、抽出した入力処理関数及び出力処理関数と関数特定情報２１３に示される対策関数とに基づきプログラム１０５において対策処理が講じられているか否かを判定する。
【００３７】
最後に、ステップＳ７０７で、脆弱性情報生成部２０５が脆弱性判定部２０４の判定結果２１５を整形し、脆弱性情報１０９を出力する。
【００３８】
次に、図１０の各ステップの詳細を説明する。
【００３９】
（ステップＳ７０１）
脅威情報取得部２０１は、図６に示す脅威情報１０８を取得する。
【００４０】
（ステップＳ７０２）
脅威情報取得部２０１は、脅威情報１０８から、各脅威に対応する情報資産の値及び脆弱性の値を抽出する。
図６の脅威情報１０８では、各行に、脅威、情報資産及び脆弱性の組が記載されている。脅威情報取得部２０１は、１行ずつ、情報資産の値と脆弱性の値を抽出する。そして、脅威情報取得部２０１は、抽出した情報資産の値を示す脅威関与要素情報２１２を脅威関与変数抽出部２０３に出力する。また、脅威情報取得部２０１は、抽出した脆弱性の値を示す脆弱性識別子２１１を脆弱性特定情報選択部２０２に出力する。
図６の例では、脅威情報取得部２０１は、情報資産の欄から「制御コマンド」を抽出し、「制御コマンド」を脅威関与要素として示す脅威関与要素情報２１２を脅威関与変数抽出部２０３に出力する。また、脆弱性特定情報選択部２０２は、脆弱性の欄から「ＣＷＥ−２０」を抽出し、「ＣＷＥ−２０」を示す脆弱性識別子２１１を脆弱性特定情報選択部２０２に出力する。脅威情報取得部２０１は、番号２以降の行についても同様にして脆弱性識別子２１１及び脅威関与要素情報２１２を出力する。
【００４１】
（ステップＳ７０３）
脆弱性特定情報選択部２０２は、脅威情報取得部２０１から脆弱性識別子２１１を取得する。また、脆弱性特定情報選択部２０２は、プログラム１０５及び対策関数情報１０７を取得する。そして、脆弱性特定情報選択部２０２は、脆弱性識別子２１１に基づき脆弱性ＤＢ１１０内の脆弱性対策処理情報１１５を検索し、対策処理を特定する。
例えば、「ＣＷＥ−２０」を示す脆弱性識別子２１１を取得した場合は、脆弱性特定情報選択部２０２は、「ＣＷＥ−２０」をキーにして図７に例示する脆弱性対策処理情報１１５を検索して、「ＣＷＥ−２０」に対応する対策処理として「入力検証」を抽出する。
また、脆弱性特定情報選択部２０２は、プログラム１０５を解析して、プログラム１０５で用いられるライブラリを特定する。ここでは、脆弱性特定情報選択部２０２は、プログラム１０５で用いられるライブラリとして「ＳＳＬ」を特定したとする。脆弱性特定情報選択部２０２は、対策関数情報１０７を参照し、「入力検証」及び「ＳＳＬ」に対応する対策関数を抽出する。図８の対策関数情報１０７では、脆弱性特定情報選択部２０２は、対策関数として「ｖｅｒｉｆｙＩｎｐｕｔ」を抽出する。
そして、脆弱性特定情報選択部２０２は、対策関数「ｖｅｒｉｆｙＩｎｐｕｔ」を示す関数特定情報２１３を脆弱性判定部２０４に出力する。
【００４２】
（ステップＳ７０４）
脅威関与変数抽出部２０３は、脅威関与要素情報２１２を脅威情報取得部２０１から取得する。また、脅威関与変数抽出部２０３は、ソフトウェアトレース情報１０６を取得する。
そして、脅威関与変数抽出部２０３は、脅威関与要素情報２１２に示される情報資産（脅威関与要素）に対応する変数（脅威関与変数）を抽出する。
ここで、脅威関与変数抽出部２０３は、情報資産「制御コマンド」が示される脅威関与要素情報２１２を取得したものとする。脅威関与変数抽出部２０３は、図５のソフトウェアトレース情報１０６を参照して、「制御コマンド」に対応する「実装」の欄の値である「変数ｃｍｄ」を脅威関与変数として抽出する。
脅威関与変数抽出部２０３は、抽出した脅威関与変数である「変数ｃｍｄ」が示される脅威関与変数情報２１４を脆弱性判定部２０４に出力する。
【００４３】
（ステップＳ７０５）
脆弱性判定部２０４は、脅威関与変数抽出部２０３から脅威関与変数情報２１４を取得する。また、脆弱性情報生成部２０５はプログラム１０５を取得する。
脆弱性判定部２０４は、脅威関与変数情報２１４に示される脅威関与変数と対応付けられた入力処理関数と出力処理関数を抽出する。
脆弱性判定部２０４が「変数ｃｍｄ」が示される脅威関与変数情報２１４を取得したとする。この場合に、脆弱性判定部２０４は、図４のプログラム１０５において「変数ｃｍｄ」と対応付けられている入力処理関数と出力処理関数を抽出する。具体的には、脆弱性判定部２０４は、図４のプログラム１０５から、符号４０２で示される関数「ｒｅｃｅｉｖｅＦｒｏｍＨＭＩ」と符号４０４で示される関数「ｓｅｎｄＴｏＤｅｖｉｃｅ」（符号４０３の「ｃｍｄ」と対応付けられている）を取得する。
なお、符号４０２から符号４０４の範囲が、変数ｃｍｄが入力されてから変数ｃｍｄが使用されるまでのデータフローを表している。
【００４４】
（ステップＳ７０６）
脆弱性判定部２０４は、脆弱性特定情報選択部２０２から関数特定情報２１３を取得する。
脆弱性判定部２０４は、ステップＳ７０５で抽出した入力処理関数と出力処理関数との間に関数特定情報２１３に示される対策関数が記述されているか否かを判定する。
脆弱性判定部２０４は、ステップＳ７０５で入力処理関数として関数「ｒｅｃｅｉｖｅＦｒｏｍＨＭＩ」を抽出し、出力処理関数として関数「ｓｅｎｄＴｏＤｅｖｉｃｅ」を抽出したものとする。また、脆弱性判定部２０４は、対策関数として「ｖｅｒｉｆｙＩｎｐｕｔ」が示される関数特定情報２１３を取得したものとする。
脆弱性判定部２０４は、プログラム１０５の関数「ｒｅｃｅｉｖｅＦｒｏｍＨＭＩ」（符号４０２）と関数「ｓｅｎｄＴｏＤｅｖｉｃｅ」（符号４０４）との間に、対策関数「ｖｅｒｉｆｙＩｎｐｕｔ」が記述されているか否かを判定する。
図４のプログラム１０５では、関数「ｒｅｃｅｉｖｅＦｒｏｍＨＭＩ」（符号４０２）と関数「ｓｅｎｄＴｏＤｅｖｉｃｅ」（符号４０４）との間に、対策関数「ｖｅｒｉｆｙＩｎｐｕｔ」は記述されていない。このため、脆弱性判定部２０４は、プログラム１０５には脅威情報１０８に示される脅威への対策が講じられていないと判定する。つまり、脆弱性判定部２０４は、プログラム１０５には脆弱性が存在すると判定する。
一方で、図９に示すプログラム９０１では、関数「ｒｅｃｅｉｖｅＦｒｏｍＨＭＩ」（符号４０２）と関数「ｓｅｎｄＴｏＤｅｖｉｃｅ」（符号４０４）との間に、対策関数「ｖｅｒｉｆｙＩｎｐｕｔ」（符号４０５）が記述されている。このため、脆弱性判定部２０４は、プログラム１０５には脅威情報１０８に示される脅威への対策が講じられていると判定する。つまり、脆弱性判定部２０４は、プログラム９０１には脆弱性がないと判定する。
脆弱性判定部２０４は、判定結果２１５を脆弱性情報生成部２０５に出力する。脆弱性判定部２０４は、プログラム１０５において脅威への対策が講じられていないと判定した場合は、例えば、プログラム１０５の名称と、脅威と、脅威関与要素である情報資産と、脆弱性識別子と、脅威関与変数と、脆弱性のある関数と、脆弱性のある関数が記述されている箇所が示される判定結果２１５を出力する。一方、プログラム１０５において脅威への対策が講じられていると判定した場合は、脆弱性判定部２０４は、例えば、プログラム１０５の名称と、脅威と、対策済みである旨のメッセージが示される判定結果２１５を出力する。なお、プログラム１０５において脅威への対策が講じられていると判定した場合は、脆弱性判定部２０４は判定結果２１５を出力しなくてもよい。
【００４５】
（ステップＳ７０７）
脆弱性情報生成部２０５は、脆弱性判定部２０４から判定結果２１５を取得する。そして、脆弱性情報生成部２０５は、判定結果２１５を整形し、整形後の判定結果２１５を脆弱性情報１０９として出力する。
図１１は、脆弱性情報１０９の例を示す。
図１１において、「脅威」、「情報資産」及び「脆弱性」の値は、脅威情報１０８の値と同じである。「プログラム」の項目には、プログラム１０５の名称が記載される。「開始行：終了行」には、「関数」の項目に示される関数が記述されているプログラム１０５の行が記載される。「変数」には脅威関与変数が記載される。「関数」には脆弱性のある関数が記載される。
【００４６】
なお、以上では、説明の簡明のために、脅威情報１０８の番号１の行に示される脅威に対する対策の有無を検証する例を説明した。セキュリティ設計装置１００は、脅威情報１０８の各行に対して図７のステップＳ７０２以降の処理を行う。
また、複数のプログラム１０５を検証対象とする場合は、セキュリティ設計装置１００は、各プログラム１０５に対して図７のステップＳ７０１以降の処理を行う。
対策関数が複数存在する場合、脅威関与変数が複数存在する場合も、セキュリティ設計装置１００は適宜該当する処理を繰り返し行う。
【００４７】
＊＊＊実施の形態の効果の説明＊＊＊
以上のように、本実施の形態では、ソフトウェア開発の上流段階で行われるリスク分析で特定された脅威への対策が、下流段階で生成されたプログラムにおいて講じられているか否かを判定する。
このため、本実施の形態によれば、プログラムの解析のみでは抽出できない脅威に対する対策の有無を判定することできる。そして、本実施の形態によれば、判定結果に基づき、プログラムの解析のみでは抽出できない脅威に対する対策を講じることができる。
【００４８】
また、本実施の形態で用いられるソフトウェアトレース情報１０６はソフトウェア開発の一環で生成されるものであるため、脆弱性分析のために新たなデータを生成する必要はない。したがって、脆弱性分析を行うユーザの手間を増やさずに、より厳密な脆弱性分析を実現することができる。
【００４９】
また、本実施の形態では、実装段階のプログラムから脆弱性分析に必要な変数や関数の情報を取得することができる。このため、本実施の形態によれば、機密性や完全性等の具体的な脆弱性を特定することができる。
従来技術では、セキュリティの３要素と呼ばれる機密性、完全性、可用性に関する脆弱性を特定することができなかった。例えば、データの完全性に関する脆弱性を特定するためには、まず対象となるデータが改ざんが許容されないデータであることを判定し、その上で改ざんを防ぐための対策が講じられているか否かを評価する必要がある。しかし、プログラム（ソースコード）にはデータの完全性に関する情報がないため、完全性に関する脆弱性を特定することができない。
本実施の形態では、図６に示すように、プログラム仕様書に基づくリスク分析により完全性に関する脅威が脅威情報１０８に記述されている場合は、セキュリティ設計装置１００は、プログラム１０５において完全性に関する脅威への対策が講じられているか否かを評価することができる。更に、プログラム仕様書に基づくリスク分析により機密性に関する脅威（例えば、漏洩）が脅威情報１０８に記述されている場合は、セキュリティ設計装置１００は、プログラム１０５において機密性に関する脅威への対策が講じられているか否かを評価することができる。また、リスク分析により可用性に関する脅威（例えば、ＤｏＳ（Ｄｅｎｉａｌ  ｏｆ  Ｓｅｒｖｉｃｅ）攻撃）が脅威情報１０８に記述されている場合は、セキュリティ設計装置１００は、プログラム１０５において可用性に関する脅威への対策が講じられているか否かを評価することができる。
【００５０】
実施の形態２．
以上の実施の形態１は、特定の脆弱性箇所特定方法に依存するものではないが、実施の形態２では、脆弱性箇所特定方法として静的解析の一種であるテイント解析を利用する例を説明する。更に、実施の形態２では、テイント解析の実現方法として型検査を利用する例を説明する。
本実施の形態では、主に実施の形態１との差異を説明する。
なお、以下で説明していない事項は、実施の形態１と同様である。
【００５１】
＊＊＊構成の説明＊＊＊
図１２は、実施の形態２に係るセキュリティ設計装置１００の機能構成例を示す。図２と比較して、図１２では、型通知部２０６が追加されている。また、図１２では、関数特定情報２１３と脅威関与変数情報２１４が型通知部２０６に入力され、型情報プログラム２１６が型通知部２０６から脆弱性判定部２０４に出力される。なお、型通知部２０６も脅威情報取得部２０１等と同様に検証プログラム１０４により実現されるものとする。
なお、図１２では、２つのプログラム１０５が記載されているが、これは作図上の理由によるものであり、両者は同一である。つまり、型通知部２０６に入力されるプログラム１０５と脆弱性特定情報選択部２０２に入力されるプログラム１０５は同一である。
【００５２】
セキュリティ設計装置１００のハードウェア構成例は図１に示す通りである。
なお、図示は省略するが、本実施の形態では、プロセッサ１０１のブロックに型通知部２０６のブロックが追加される。また、本実施の形態では、主記憶装置１０２のブロックに型情報プログラム２１６のブロックが追加される。
【００５３】
型通知部２０６は、入力処理関数の戻り値の型と出力処理関数の引数の型と対策関数の引数及び戻り値の型を脆弱性判定部２０４に通知する。具体的には、型通知部２０６は、入力処理関数の戻り値の型と出力処理関数の引数の型と対策関数の引数及び戻り値の型を示す型情報を型情報プログラム２１６に含ませる。つまり、型情報プログラム２１６は、型情報が追加されたプログラム１０５である。
本実施の形態では、脆弱性判定部２０４は、型情報プログラム２１６の型情報で通知される入力処理関数の戻り値の型と出力処理関数の引数の型と対策関数の引数及び戻り値の型に基づき、対策関数が入力処理関数と出力処理関数との間に記述されているか否かを判定する。
【００５４】
図１３は、型通知部２０６によりプログラム１０５に追加される型情報２１７の例を示す。前述したように、型情報２１７が追加されたプログラム１０５が型情報プログラム２１６に相当する。図１３の詳細は後述する。
また、本実施の形態では、図１４に示すように、対策関数情報１０７に対策関数の引数及び戻り値の型の情報が含まれている。具体的には、対策関数「ｖｅｒｉｆｙＩｎｐｕｔ」の引数の型として「ｉｎｔ＜ｉｎｓｅｃｕｒｅ＞」が記載されており、戻り値の型として「ｉｎｔ＜ｓｅｃｕｒｅ＞」が記載されている。
【００５５】
＊＊＊動作の説明＊＊＊
図１５は、本実施の形態に係るセキュリティ設計装置１００の動作例を示す。
なお、実施の形態１と同様に、本実施の形態では、図４に示すプログラム１０５を検証対象とする。また、実施の形態１と同様に、脅威関与変数情報２１４には脅威関与変数として「ｃｍｄ」が記載されているものとする。
【００５６】
ステップＳ７０１及びステップＳ７０２は、実施の形態１に示したものと同じであるため、説明を省略する。
【００５７】
ステップＳ８０１において、脆弱性特定情報選択部２０２は実施の形態１のステップＳ７０３と同様の手順にて、対策関数を抽出し、関数特定情報２１３を出力する。但し、ステップＳ８０１では、脆弱性特定情報選択部２０２は関数特定情報２１３を型通知部２０６に出力する。また、関数特定情報２１３には、図１４に示される「引数の型：ｉｎｔ＜ｉｎｓｅｃｕｒｅ＞」と「戻り値の型：ｉｎｔ＜ｓｅｃｕｒｅ＞」が記載されている。
【００５８】
ステップＳ７０４は実施の形態１に示したものと同じであるため、説明を省略する。
【００５９】
ステップＳ８０２では、型通知部２０６がプログラム１０５を解析して入力処理関数と出力処理関数とを抽出する。入力処理関数と出力処理関数の抽出手順は実施の形態１のステップＳ７０５の手順と同じである。
つまり、型通知部２０６は、脅威関与変数情報２１４に示される脅威関与変数と対応付けられた入力処理関数と出力処理関数を抽出する。
型通知部２０６が脅威関与変数として「変数ｃｍｄ」が示される脅威関与変数情報２１４を取得したとする。この場合に、型通知部２０６は、図４のプログラム１０５において「変数ｃｍｄ」と対応付けられている入力処理関数と出力処理関数を抽出する。具体的には、型通知部２０６は、図４のプログラム１０５から、符号４０２で示される関数「ｒｅｃｅｉｖｅＦｒｏｍＨＭＩ」と符号４０４で示される関数「ｓｅｎｄＴｏＤｅｖｉｃｅ」（符号４０３の「ｃｍｄ」と対応付けられている）を取得する。
【００６０】
ステップＳ８０３では、型通知部２０６は、ステップＳ８０２で抽出した入力処理関数の戻り値の型と出力処理関数の引数の型を識別する。また、型通知部２０６は、識別した入力処理関数の戻り値の型と出力処理関数の引数の型と、関数特定情報２１３に示される対策関数の引数及び戻り値の型を通知する型情報２１７を生成する。更に、型通知部２０６は、生成した型情報２１７をプログラム１０５に追加して型情報プログラム２１６を生成する。
【００６１】
図１３は、ステップＳ８０２において入力処理関数として「ｒｅｃｅｉｖｅＦｒｏｍＨＭＩ」が抽出され、出力処理関数として「ｓｅｎｄＴｏＤｅｖｉｃｅ」が抽出された場合の型情報２１７を示す。
型情報２１７では、各関数の引数又は／及び戻り値の型に加えて、各関数の種類と、各関数とテイント解析との関係も示される。
つまり、入力処理関数「ｒｅｃｅｉｖｅＦｒｏｍＨＭＩ」の種類は「入力」である。また、入力処理関数「ｒｅｃｅｉｖｅＦｒｏｍＨＭＩ」はテイント解析における「Ｓｏｕｒｃｅ」に対応する。
また、出力処理関数「ｓｅｎｄＴｏＤｅｖｉｃｅ」の種類は「使用」である。また、出力処理関数「ｓｅｎｄＴｏＤｅｖｉｃｅ」はテイント解析におけるＳｉｎｋに対応する。
また、対策関数「ｖｅｒｉｆｙＩｎｐｕｔ」の種類は「入力検証」である。また、対策関数「ｖｅｒｉｆｙＩｎｐｕｔ」はテイント解析における「Ｓａｎｉｔｉｚｅｒ」に対応する。
また、図１３の型情報２１７では、入力処理関数「ｒｅｃｅｉｖｅＦｒｏｍＨＭＩ」の戻り値の型が「ｉｎｔ＜ｉｎｓｅｃｕｒｅ＞」であることが示される。また、図１３の型情報２１７では、出力処理関数「ｓｅｎｄＴｏＤｅｖｉｃｅ」の引数の型が「ｉｎｔ＜ｓｅｃｕｒｅ＞」であることが示される。更に、図１３の型情報２１７では、対策関数「ｖｅｒｉｆｙＩｎｐｕｔ」の引数の型が「ｉｎｔ＜ｉｎｓｅｃｕｒｅ＞」であり、戻り値の型が「ｉｎｔ＜ｓｅｃｕｒｅ＞」であることが示される。
【００６２】
入力処理関数「ｒｅｃｅｉｖｅＦｒｏｍＨＭＩ」はネットワークから入力されたデータを返す関数である。このため、入力処理関数「ｒｅｃｅｉｖｅＦｒｏｍＨＭＩ」の戻り値は、テイント解析では汚染されたデータ（テイント）と見なされる。従って、型通知部２０６は、入力処理関数「ｒｅｃｅｉｖｅＦｒｏｍＨＭＩ」の戻り値の型を「ｉｎｔ＜ｉｎｓｅｃｕｒｅ＞」と識別する。
出力処理関数「ｓｅｎｄＴｏＤｅｖｉｃｅ」は、汚染されていないデータを引数として受け取る関数である。このため、型通知部２０６は、出力処理関数「ｓｅｎｄＴｏＤｅｖｉｃｅ」の引数の型を「ｉｎｔ＜ｓｅｃｕｒｅ＞」と識別する。
なお、図１３の型情報２１７に示される対策関数「ｖｅｒｉｆｙＩｎｐｕｔ」の引数の型である「ｉｎｔ＜ｉｎｓｅｃｕｒｅ＞」と、戻り値の型である「ｉｎｔ＜ｓｅｃｕｒｅ＞」は、図１４の対策関数情報１０７に示す型の情報である。対策関数「ｖｅｒｉｆｙＩｎｐｕｔ」は、汚染されたデータを引数として受け取り、検証し、汚染が除去されたデータを返す関数である。対策関数「ｖｅｒｉｆｙＩｎｐｕｔ」の引数の型は「ｉｎｔ＜ｉｎｓｅｃｕｒｅ＞」であり、戻り値の型は「ｉｎｔ＜ｓｅｃｕｒｅ＞」である。
なお、本実施の形態でも、図１４の対策関数情報１０７の代わりに図８の対策関数情報１０７を用い、型通知部２０６が対策関数「ｖｅｒｉｆｙＩｎｐｕｔ」の引数の型及び戻り値の型を識別するようにしてもよい。
【００６３】
次に、ステップＳ８０４において、脆弱性判定部２０４は型情報プログラム２１６を取得し、型情報プログラム２１６の型情報２１７を用いて型検査を行い、プログラム１０５に対策処理が講じられているか否かを判定する。
型検査でエラーが発生した場合は、脆弱性判定部２０４は、エラー発生箇所を脆弱性として特定する一方、型検査でエラーが発生しなかった場合はプログラム１０５に脆弱性がないと判定する。
【００６４】
図１６は、図４に示すプログラム１０５の疑似コード１００２を示す。図１７は、図９に示すプログラム９０１の疑似コード１００５を示す。
疑似コード１００２及び疑似コード１００５を用いて、脆弱性判定部２０４による型検査の動作を説明する。
【００６５】
疑似コード１００２の場合、コード記述１００３で変数「ｃｍｄ」に、関数「ｒｅｃｅｉｖｅＦｒｏｍＨＭＩ」の戻り値として「ｉｎｔ＜ｉｎｓｅｃｕｒｅ＞」型の値が代入される。
次に、コード記述１００４で変数「ｃｍｄ」が、関数「ｓｅｎｄＴｏＤｅｖｉｃｅ」の引数として渡される。
しかし、関数「ｓｅｎｄＴｏＤｅｖｉｃｅ」は引数として「ｉｎｔ＜ｓｅｃｕｒｅ＞」型の値を受け取ることになっている。このため、変数ｃｍｄの型と関数「ｓｅｎｄＴｏＤｅｖｉｃｅ」の引数の型とが一致せず、型のエラーが発生する。
以上により、脆弱性判定部２０４は、疑似コード１００２のコード記述１００４に脆弱性があると判定する。
【００６６】
一方、疑似コード１００５の場合、コード記述１００６で変数「ｃｍｄ」に、関数「ｒｅｃｅｉｖｅＦｒｏｍＨＭＩ」の戻り値として「ｉｎｔ＜ｉｎｓｅｃｕｒｅ＞」型の値が代入される。
次に、コード記述１００７で変数「ｃｍｄ」が、引数として関数「ｖｅｒｉｆｙＩｎｐｕｔ」に渡される。
関数「ｖｅｒｉｆｙＩｎｐｕｔ」は引数として「ｉｎｔ＜ｉｎｓｅｃｕｒｅ＞」型の値を受け取ることになっている。このため、変数「ｃｍｄ」の型と関数「ｖｅｒｉｆｙＩｎｐｕｔ」の引数の型とが一致しており、コード記述１００７では型のエラーは発生しない。
そして、関数「ｖｅｒｉｆｙＩｎｐｕｔ」の戻り値として「ｉｎｔ＜ｓｅｃｕｒｅ＞」型の値が変数「ｃｍｄ」に代入される。
次に、コード記述１００８で変数「ｃｍｄ」が、引数として関数「ｓｅｎｄＴｏＤｅｖｉｃｅ」に渡される。関数「ｓｅｎｄＴｏＤｅｖｉｃｅ」は引数として「ｉｎｔ＜ｓｅｃｕｒｅ＞」型の値を受け取ることになっている。このため、変数「ｃｍｄ」の型と関数「ｓｅｎｄＴｏＤｅｖｉｃｅ」の引数の型とが一致しており、コード記述１００８では型のエラーは発生しない。
以上により、脆弱性判定部２０４は、疑似コード１００５には脆弱性がないと判定する。
【００６７】
このように、本実施の形態では、脆弱性判定部２０４は、入力処理関数の戻り値の型と出力処理関数の引数の型と対策関数の引数及び戻り値の型との整合性を解析して、対策関数がプログラム内の適切な位置、すなわち、入力処理関数と出力処理関数との間に記述されているか否かを判定する。
【００６８】
＊＊＊実施の形態の効果の説明＊＊＊
以上のように、本実施の形態では、型検査により対策関数がプログラムに記述されているか否かを判定する。このため、本実施の形態によれば、少ない計算負荷で脅威への対策の有無を判定することができる。
また、本実施の形態では、型情報がプログラムに付加される。このため、型検査を効率的に行うことができる。
【００６９】
実施の形態３．
以上の実施の形態１及び実施の形態２は、特定の開発プロセスを想定したものではなかった。
本実施の形態では、モデルベース開発あるいはモデル駆動開発等のモデルを利用したソフトウェア開発で得られたプログラムにおいて脅威への対策が講じられているか否かを判定する例を説明する。
本実施の形態では、主に実施の形態１との差異を説明する。
なお、以下で説明していない事項は、実施の形態１と同様である。
【００７０】
以下では、モデルを利用したソフトウェア開発プロセスを総称してモデルベース開発と呼ぶこととする。
モデルベース開発では、自然言語で仕様書を記述する代わりに、コンピュータによる処理に適した形式で仕様を生成する。これをモデル化と呼び、生成される仕様をモデルと呼ぶ。モデルは厳密な形式に従って生成されるため、解釈の曖昧さを排除することができる。また、モデルをシミュレーションとして動作させることが可能である。また、モデルからソースコードを自動生成することが可能な場合もある。更に、このモデルとソースコードとの関係に見られるように、各データ同士が対応付けられており、実施の形態１で説明したソフトウェアトレース情報の入手が容易である。
【００７１】
図１８は、モデルベース開発の簡単な流れを表す。
先ず、モデル化１１０１が行われ、モデル１１０２が生成される。その後、検証１１０３により、モデル１１０２を利用して要件の検証又は設計の改善が進められる。
検証１１０３では、上述の通りシミュレーションを利用して、例えばプログラム１１０５の動作をあらかじめ検証することもできる。また、形式手法と呼ばれる手法により、モデル１１０２が要件を満たすことを数学的に証明することもできる。モデル１１０２が完成した後、コード生成１１０４によってプログラム１１０５（ソースコード）が生成される。また、モデル１１０２とプログラム１１０５との対応関係を表す情報が、トレース情報１１０６として存在する。
【００７２】
図１９は、モデルベース開発に実施の形態１又は実施の形態２に係るセキュリティ設計装置１００を適用した流れを示している。
モデルベース開発における検証１２０３の一環としてリスク分析が行われ、脅威一覧１２０８が出力される。また、脆弱性判定１２０７によってプログラム１２０５（ソースコード）に対する脆弱性の有無が判定される。
通常、脆弱性判定１２０７はプログラム１２０５のみを用いて行われるが、本実施の形態ではトレース情報１２０６と脅威一覧１２０８も利用する。トレース情報１２０６は、実施の形態１のソフトウェアトレース情報１０６に対応する。脅威一覧１２０８は、実施の形態１の脅威情報１０８に対応する。
なお、図１９において、モデル化１２０１はモデル化１１０１と同じである。また、モデル１２０２もモデル１１０２と同じである。更に、コード生成１２０４はコード生成１１０４と同じである。
【００７３】
以上のように、モデルベース開発の枠組を利用すればトレース情報の入手がより容易になり、脆弱性分析を行うユーザの手間を増やさずに、分析を詳細化できる効果がより高くなる。
【００７４】
以上、本発明の実施の形態について説明したが、これらの実施の形態のうち、２つ以上を組み合わせて実施しても構わない。
あるいは、これらの実施の形態のうち、１つを部分的に実施しても構わない。
あるいは、これらの実施の形態のうち、２つ以上を部分的に組み合わせて実施しても構わない。
なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【００７５】
＊＊＊ハードウェア構成の説明＊＊＊
最後に、セキュリティ設計装置１００のハードウェア構成の補足説明を行う。
図１に示すプロセッサ１０１は、プロセッシングを行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。
プロセッサ１０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）等である。
図１に示す主記憶装置１０２は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
図１に示す補助記憶装置１０３は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュメモリ、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）等である。
【００７６】
また、補助記憶装置１０３には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）も記憶されている。
そして、ＯＳの少なくとも一部がプロセッサ１０１により実行される。
プロセッサ１０１はＯＳの少なくとも一部を実行しながら、検証プログラム１０４を実行する。
プロセッサ１０１がＯＳを実行することで、タスク管理、メモリ管理、ファイル管理、通信制御等が行われる。
また、脅威情報取得部２０１、脆弱性特定情報選択部２０２、脅威関与変数抽出部２０３、脆弱性判定部２０４、脆弱性情報生成部２０５及び型通知部２０６の処理の結果を示す情報、データ、信号値及び変数値の少なくともいずれかが、主記憶装置１０２、補助記憶装置１０３、プロセッサ１０１内のレジスタ及びキャッシュメモリの少なくともいずれかに記憶される。
また、検証プログラム１０４は、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ等の可搬記録媒体に格納されていてもよい。そして、検証プログラム１０４が格納された可搬記録媒体を商業的に流通させてもよい。
【００７７】
また、脅威情報取得部２０１、脆弱性特定情報選択部２０２、脅威関与変数抽出部２０３、脆弱性判定部２０４、脆弱性情報生成部２０５及び型通知部２０６の「部」を、「回路」又は「工程」又は「手順」又は「処理」に読み替えてもよい。
また、セキュリティ設計装置１００は、処理回路により実現されてもよい。処理回路は、例えば、ロジックＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＧＡ（Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）である。
なお、本明細書では、プロセッサと処理回路との上位概念を、「プロセッシングサーキットリー」という。
つまり、プロセッサと処理回路とは、それぞれ「プロセッシングサーキットリー」の具体例である。
【符号の説明】
【００７８】
１００  セキュリティ設計装置、１０１  プロセッサ、１０２  主記憶装置、１０３  補助記憶装置、１０４  検証プログラム、１０５  プログラム、１０６  ソフトウェアトレース情報、１０７  対策関数情報、１０８  脅威情報、１０９  脆弱性情報、１１０  脆弱性ＤＢ、１１１  入力インターフェース、１１２  表示インターフェース、１１３  ネットワークインターフェース、１１４  データバス、１１５  脆弱性対策処理情報、２０１  脅威情報取得部、２０２  脆弱性特定情報選択部、２０３  脅威関与変数抽出部、２０４  脆弱性判定部、２０５  脆弱性情報生成部、２０６  型通知部、２１１  脆弱性識別子、２１２  脅威関与要素情報、２１３  関数特定情報、２１４  脅威関与変数情報、２１５  判定結果、２１６  型情報プログラム、２１７  型情報、２５０  判定部、３００  システム構成図、３０１  ＨＭＩ、３０２  機器コントローラ、３０３  通信Ｓ／Ｗ、３０４  フィールド機器、３０５  伝送路、３０６  伝送路、３０８  制御コマンド、３０９  制御信号、３１０  プログラム仕様図、３１１  状態遷移、３１２  状態、３１３  状態、３１４  状態遷移、３１５  状態遷移、９０１  プログラム、１００２  疑似コード、１００３  コード記述、１００４  コード記述、１００５  疑似コード、１００６  コード記述、１００７  コード記述、１００８  コード記述、１１０１  モデル化、１１０２  モデル、１１０３  検証、１１０４  コード生成、１１０５  プログラム、１１０６  トレース情報、１２０１  モデル化、１２０２  モデル、１２０３  検証、１２０４  コード生成、１２０５  プログラム、１２０６  トレース情報、１２０７  脆弱性判定、１２０８  脅威一覧。
【図１】
2020261430.tif 000003
【図２】
2020261430.tif 000004
【図３】
2020261430.tif 000005
【図４】
2020261430.tif 000006
【図５】
2020261430.tif 000007
【図６】
2020261430.tif 000008
【図７】
2020261430.tif 000009
【図８】
2020261430.tif 000010
【図９】
2020261430.tif 000011
【図１０】
2020261430.tif 000012
【図１１】
2020261430.tif 000013
【図１２】
2020261430.tif 000014
【図１３】
2020261430.tif 000015
【図１４】
2020261430.tif 000016
【図１５】
2020261430.tif 000017
【図１６】
2020261430.tif 000018
【図１７】
2020261430.tif 000019
【図１８】
2020261430.tif 000020
【図１９】
2020261430.tif 000021
【国際調査報告】
2020261430.tif 000022
2020261430.tif 000023
2020261430.tif 000024
2020261430.tif 000025