(57)【特許請求の範囲】
【請求項１】
機器で実行されるプログラムに含まれる複数の変数の各々が、入力変数、出力変数、内部利用変数のいずれであるかを判別する変数判別部と、
前記機器の外部から前記機器に入力される情報資産である入力情報資産と前記入力変数、前記機器から前記機器の外部に出力される情報資産である出力情報資産と前記出力変数、前記機器の内部で利用される情報資産である内部利用情報資産と前記内部利用変数とを対応付けて、複数の情報資産の各々と前記複数の変数の各々との対応関係の候補を１つ以上生成する候補生成部とを有する情報処理装置。
【請求項２】
前記情報処理装置は、更に、
前記候補生成部により複数の対応関係の候補が生成された場合に、前記複数の対応関係の候補を出力する出力部を有する請求項１に記載の情報処理装置。
【請求項３】
前記候補生成部は、
前記複数の情報資産の各々が、前記入力情報資産、前記出力情報資産、前記内部利用情報資産のいずれであるかが示される情報資産情報を取得し、前記情報資産情報に示される入力情報資産と前記入力変数と、前記情報資産情報に示される前記出力情報資産と前記出力変数、前記情報資産情報に示される前記内部利用情報資産と前記内部利用変数とを対応付ける請求項１に記載の情報処理装置。
【請求項４】
前記情報処理装置は、更に、
前記複数の情報資産の各々が、前記入力情報資産、前記出力情報資産、前記内部利用情報資産のいずれであるかを判別する情報資産判別部を有する請求項１に記載の情報処理装置。
【請求項５】
前記変数判別部は、
前記複数の変数の各々が用いられている処理が、入力処理、出力処理、内部利用処理のいずれであるかを判別し、判別した処理の種別に基づいて、前記複数の変数の各々の種別を判別する請求項１に記載の情報処理装置。
【請求項６】
前記変数判別部は、
前記複数の変数における変数値の伝搬関係を解析し、
前記出力部は、
前記候補生成部により生成された１つ以上の対応関係の候補と、前記変数判別部の解析により得られた変数値の伝搬関係とを出力する請求項２に記載の情報処理装置。
【請求項７】
前記候補生成部は、
複数の対応関係の候補を生成した場合に、前記複数の対応関係の候補の間に優先順位を設け、
前記出力部は、
優先順位が高い対応関係の候補を優先して出力する請求項２に記載の情報処理装置。
【請求項８】
前記候補生成部は、
前記複数の対応関係の候補の各々について、対応関係の候補としての確かさを推測し、推測結果に基づき、前記複数の対応関係の候補の間に優先順位を設ける請求項７に記載の情報処理装置。
【請求項９】
前記情報処理装置は、更に、
前記１つ以上の対応関係の候補の中から選択された対応関係に基づき、前記機器に存在する脆弱性の種別の候補を抽出する脆弱性候補抽出部と、
前記脆弱性候補抽出部により抽出された脆弱性の種別の候補に基づき、前記機器の脆弱性分析を行う脆弱性分析部とを有する請求項１に記載の情報処理装置。
【請求項１０】
前記脆弱性候補抽出部は、  アタックツリーを参照して、前記機器に存在する脆弱性の種別の候補を抽出する請求項９に記載の情報処理装置。
【請求項１１】
前記脆弱性分析部は、
前記複数の情報資産と前記複数の変数との対応付け、脅威の種別の少なくともいずれかを参照して、前記機器の脆弱性分析を行う請求項９に記載の情報処理装置。
【請求項１２】
前記脆弱性分析部は、
前記脆弱性候補抽出部により抽出された脆弱性の種別の候補に関連する処理が記述される部分を前記プログラムからプログラム断片として抽出し、抽出した前記プログラム断片を用いて前記機器の脆弱性分析を行う請求項９に記載の情報処理装置。
【請求項１３】
コンピュータが、機器で実行されるプログラムに含まれる複数の変数の各々が、入力変数、出力変数、内部利用変数のいずれであるかを判別し、
前記コンピュータが、前記機器の外部から前記機器に入力される情報資産である入力情報資産と前記入力変数、前記機器から前記機器の外部に出力される情報資産である出力情報資産と前記出力変数、前記機器の内部で利用される情報資産である内部利用情報資産と前記内部利用変数とを対応付けて、複数の情報資産の各々と前記複数の変数の各々との対応関係の候補を１つ以上生成する情報処理方法。
【請求項１４】
機器で実行されるプログラムに含まれる複数の変数の各々が、入力変数、出力変数、内部利用変数のいずれであるかを判別する変数判別処理と、
前記機器の外部から前記機器に入力される情報資産である入力情報資産と前記入力変数、前記機器から前記機器の外部に出力される情報資産である出力情報資産と前記出力変数、前記機器の内部で利用される情報資産である内部利用情報資産と前記内部利用変数とを対応付けて、複数の情報資産の各々と前記複数の変数の各々との対応関係の候補を１つ以上生成する候補生成処理とをコンピュータに実行させる情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、脆弱性分析に関する。
【背景技術】
【０００２】
セキュリティを考慮した開発プロセスでは、セキュリティ上の問題である脆弱性を作りこまないようにするために、開発上流の段階からセキュリティに関する分析や検討を行う。まず、システム設計等の開発上流フェーズで、開発対象システムで発生してはならない脅威を洗い出すための脅威分析を実施する（例えば、通信路を流れる機密情報が盗聴される等の脅威が洗い出される）。そして、脅威分析の結果に基づき、その脅威に至らないようにするための対策の方針を検討する（例えば、通信路を暗号化する必要がある等）。更に開発フェーズが進み設計及び実装の段階になると、開発対象システムを実現するための処理内容及び処理内容を実現するプログラムの具体的な実現方法に適したセキュリティ機能や運用方法を検討する。そして、検討結果を設計及び実装に盛り込む。設計及び実装の最終段階では、設計及び実装したプログラムに脆弱性がないかを確認するための分析を行う。【０００３】
脆弱性がないかを確認する脆弱性分析装置の実現方法の一つとして、設計及び実装したプログラムの仕様又はプログラム自身を静的に分析する技術が存在する。
従来の脆弱性分析装置は、予め定められたルールに従い汚染分析等の分析技術を使ってプログラムのソースコードを分析する（例えば、特許文献１）。
また、プログラムの仕様をモデルで形式的に記述し、モデル検査と呼ばれる形式手法を使ってプログラムの動作が脆弱性を発生させる性質を満たすかを数学的に証明する手法も提案されている（例えば、特許文献２）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第５７４０７０２号公報
【特許文献２】特開２００８−２６２３１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１の手法では、予め決められたルールに従いプログラムのソースコードを分析する。このため、上流工程で実施した脅威分析の後に検討したセキュリティ対策の設計及び実装の抜けや誤りに起因する脆弱性の確認ができない。
また、特許文献２の手法では、証明すべき対象の性質を定義または選択すれば検証が可能である。証明すべき対象の性質を正しく定義または選択するには、設計及び実装の仕様が正しくはどうなるべきかの詳細までを把握する必要がある。しかし、脅威分析は設計及び実装の仕様が未確定である開発上流フェーズで実施するものである。このため、脅威分析の結果とプログラムを設計及び実装した仕様とを対応付けて、証明すべき対象の性質を定義または選択することは非常に手間がかかる。また、プログラムの仕様を静的に分析する手法では、プログラム全体を分析対象とすると、メモリ等の計算機リソースを多く必要とし、計算時間も長くなる。【０００６】
効率的に脆弱性分析を行うためには、上流工程での脅威分析後のセキュリティ対策が盛り込まれたプログラム（機器で実行されるプログラム）内の部分と当該機器が用いる情報資産との関係と、機器の情報資産と脆弱性との関係とを明確にすることが有用である。
このような観点より、本発明は、プログラム内の部分と情報資産と脆弱性との対応関係の明確化に資することを主な目的とする。
【課題を解決するための手段】
【０００７】
本発明に係る情報処理装置は、
機器で実行されるプログラムに含まれる複数の変数の各々の種別を判別する変数判別部と、
前記変数判別部により判別された前記複数の変数の各々の種別と、前記機器が用いる複数の情報資産の各々の種別とを比較し、前記複数の情報資産の各々と前記複数の変数の各々との対応関係の候補を１つ以上生成する候補生成部とを有する。
【発明の効果】
【０００８】
本発明によれば、機器で実行されるプログラムに含まれる変数と機器が用いる情報資産との対応関係の候補を生成するため、プログラム内の部分と情報資産と脆弱性との対応関係の明確化に資することができる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１に係る脆弱性分析装置の構成例を示す図。
【図２】実施の形態１に係る脆弱性分析装置の動作例を示すフローチャート。
【図３】実施の形態１に係るコントローラに関する情報資産フローの例を示す図。
【図４】実施の形態１に係るプログラム仕様の例を示す図。
【図５】実施の形態１に係る構成要素とプログラム仕様の対応関係の例を示す図。
【図６】実施の形態１に係る脅威分析結果の例を示す図。
【図７】実施の形態１に係る変数判別部の動作例を示すフローチャート。
【図８】実施の形態１に係る処理種別ＤＢの例を示す図。
【図９】実施の形態１に係るプログラム変数処理関係の例を示す図。
【図１０】実施の形態１に係る情報資産−変数対応関係候補の例を示す図。
【図１１】実施の形態１に係る関連脅威一覧の抽出動作の例を示す図。
【図１２】実施の形態１に係る関連脅威一覧の例を示す図。
【図１３】実施の形態１に係る脅威−脆弱性種別対応ＤＢの例を示す図。
【図１４】実施の形態１に係る脆弱性種別候補の例を示す図。
【図１５】実施の形態１に係る脆弱性検出結果の例を示す図。
【図１６】実施の形態２に係る脆弱性分析装置の構成例を示す図。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態について、図を用いて説明する。以下の実施の形態の説明及び図面において、同一の符号を付したものは、同一の部分又は相当する部分を示す。
【００１１】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１を参照して、実施の形態１に係る脆弱性分析装置１０の構成を説明する。
脆弱性分析装置１０は、情報処理装置に相当する。
【００１２】
脆弱性分析装置１０は、コンピュータである。脆弱性分析装置１０は、プロセッサ１１と、メモリ１２と、ストレージ１３と、通信インタフェース１４といったハードウェアを備える。信号線を介してプロプロセッサ１１と他のハードウェアとは接続され、プロセッサ１１はこれら他のハードウェアを制御する。
【００１３】
プロセッサ１１は、プロセッシングを行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。プロセッサ１１は、具体例としては、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。なお、図１では、プロセッサ１１は、１つだけ示されている。しかし、プロセッサ１１は、複数であってもよく、複数のプロセッサ１１が、各機能を実現するプログラムを連携して実行してもよい。
【００１４】
メモリ１２は、プロセッサ１１のプロセッシングのためにデータを一時的に記憶する記憶装置である。メモリ１２は、具体例としては、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００１５】
ストレージ１３は、データを保管する記憶装置である。ストレージ１３は、具体例としては、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）である。また、ストレージ１３は、ＳＳＤ（Ｓｏｌｉｄｅ  Ｓｔａｔｅ  Ｄｒｉｖｅ）でも良い。また、ストレージ１３は、ＳＤ（登録商標、Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）メモリカード、ＣＦ（ＣｏｍｐａｃｔＦｌａｓｈ、登録商標）、ＮＡＮＤフラッシュ、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）といった可搬記録媒体であってもよい。
【００１６】
通信インタフェース１４は、外部の装置と通信するためのインタフェースである。通信インタフェース１４は、具体例としては、Ｅｔｈｅｒｎｅｔ（登録商標）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）、ＨＤＭＩ（登録商標、Ｈｉｇｈ−Ｄｅｆｉｎｉｔｉｏｎ  Ｍｕｌｔｉｍｅｄｉａ  Ｉｎｔｅｒｆａｃｅ）のポートである。
【００１７】
脆弱性分析装置１０は、機能構成要素として、第１の受付部２１、変数判別部２２、候補生成部２３、第２の受付部２４、関連脅威抽出部２５、脆弱性候補抽出部２６、脆弱性分析部２７を備える。第２の受付部２４は、出力部に相当する。
脆弱性分析装置１０の各機能構成要素の機能はプログラムにより実現される。
【００１８】
脆弱性分析装置１０の各機能構成要素の機能を実現するプログラムは、ストレージ１３に格納されている。このプログラムは、プロセッサ１１によりメモリ１２に読み込まれ、プロセッサ１１によって実行される。これにより、脆弱性分析装置１０の各機能構成要素の機能が実現される。
【００１９】
脆弱性分析装置１０の各機能構成要素の機能は、そのプログラムで行う分析の動作を決定する情報及び判断の条件を決定する情報をストレージ１３に保存されるデータベースや設定ファイルから読み込みこんでも良い。また、分析の動作を決定する情報及び判断の条件を決定する情報をプログラムの一部としても良い。例えば、本実施の形態では、変数判別部２２は処理種別ＤＢ３１を読み込んで分析の動作を変更する。また、脆弱性候補抽出部２６は脅威−脆弱性対応ＤＢ３２を読み込んで分析の動作を変更する。
【００２０】
なお、図１では脆弱性分析装置１０が１台のみでの構成を例示した。これに代えて、複数のコンピュータがネットワークを経由して接続され、複数のコンピュータが協働して、脆弱性分析システムを構成するようにしてもよい。
更に、図１では、利用者が脆弱性分析装置１０への入力や出力を行うための入出力装置が通信インタフェース１４を介して接続されることが想定されている。これに代えて、脆弱性分析装置１０に入力や出力を行うためのインタフェースを設け、脆弱性分析装置１０を利用者が直接操作するようにしてもよい。
【００２１】
＊＊＊動作の説明＊＊＊
図２から図１５を参照して、実施の形態１に係る脆弱性分析装置１０の動作を説明する。なお、以下に示す脆弱性分析装置１０の動作は、情報処理方法及び情報処理プログラムに相当する。
【００２２】
図２は、実施の形態１に係る脆弱性分析装置１０の全体動作を示すフローチャートである。
【００２３】
最初に、第１の受付部２１が、分析に必要な各種情報の入力を受け付ける（ステップＳ１）。
ステップＳ１では、第１の受付部２１は、後述する情報資産フロー４１（図３）、プログラム仕様４２（図４）、構成要素とプログラム仕様の対応関係４３（図５）、脅威分析結果４４（図６）を受け付ける。
【００２４】
また、変数判別部２２が、プログラム仕様４２で表されるプログラムに含まれる変数を抽出し、抽出した変数の種別を判別する（ステップＳ２）。
後述するように、プログラム仕様４２は、開発対象の機器で実行されるプログラム（ソースコード）又はプログラムの特徴が記載される情報（フローチャート、ＵＭＬ（Ｕｎｉｆｉｅｄ  Ｍｏｄｅｌｉｎｇ  Ｌａｎｇｕａｇｅ）又はＳｙｓＭＬのアクティビティ図又はシーケンス図等）である。
変数判別部２２は、抽出した変数の種別として、抽出した変数が入力変数、出力変数、内部利用変数のいずれであるかを判別する。
【００２５】
次に、候補生成部２３が、情報資産と変数の対応関係の候補を生成する（ステップＳ３）。
候補生成部２３は、変数判別部２２により判別された変数の種別と、機器が用いる情報資産の種別とを比較し、情報資産と変数の対応関係の候補を１つ以上生成する。
情報資産とは、本明細書では、脅威分析により構成要素（機器）が用いると判定された情報である。具体的には、構成要素（機器）の情報資産は、情報資産フロー４１（図３）に記述されている。
情報資産の種別には、機器に入力される情報資産である入力情報資産、機器から機器の外部に出力される情報資産である出力情報資産、機器の内部で利用される情報資産である内部利用情報資産がある。
候補生成部２３は、入力情報資産と入力変数、出力情報資産と出力変数、内部利用情報資産と内部利用変数とを対応付けて対応関係の候補を生成する。
【００２６】
なお、対応関係の候補が複数存在する場合には、第２の受付部２４が複数の対応関係の候補を出力する。そして、第２の受付部２４は、脆弱性分析装置１０の利用者による、対応関係の選択を受け付ける（ステップＳ４）。
つまり、第２の受付部２４は、複数の対応関係の候補を例えば入出力装置に表示し、脆弱性分析装置１０の利用者が表示された複数の対応関係の候補の中から該当する対応関係を選択する。そして、第２の受付部２４が、利用者からの選択を受け付ける。
【００２７】
次に、関連脅威抽出部２５が、情報資産と変数との対応関係に基づき、関連する脅威を抽出する（ステップＳ５）。
つまり、ステップＳ３で対応関係の候補が１つだけ生成された場合は、関連脅威抽出部２５は、１つだけ生成された対応関係の候補に基づき、関連する脅威を抽出する。一方、ステップＳ３で対応関係の候補が複数生成され、ステップＳ４での対応関係の選択が受け付けられた場合は、ステップＳ４で選択された対応関係に基づき、関連する脅威を抽出する。
関連脅威抽出部２５は、具体的には、ステップＳ１で受け付けた脅威分析結果４４（図６）から関連する脅威を抽出する。
【００２８】
次に、脆弱性候補抽出部２６が、関連する脅威に至る攻撃に利用される恐れのある脆弱性の種別の候補を抽出する（ステップＳ６）。
【００２９】
最後に、脆弱性分析部２７が、脆弱性の種別の候補がプログラム仕様４２の記述で発生し得るかを調べるための脆弱性分析を実施し、分析結果を出力する（ステップＳ７）。
【００３０】
次に、図２の各ステップの動作を順次説明していく。
【００３１】
（図２のステップＳ１：第１の受付処理）
第１の受付部２１は、情報資産フロー４１（図３）と、プログラム仕様４２（図４）と、構成要素とプログラム仕様の対応関係４３（図５）と、脅威分析結果４４（図６）とを受け付ける。
【００３２】
具体的には、通信インタフェース１４を介して接続された入出力装置が利用者によって操作される。利用者の操作により、情報資産フロー４１と、プログラム仕様４２と、構成要素とプログラム仕様の対応関係４３と、脅威分析結果４４とが入力される。そして、第１の受付部２１は、通信インタフェース１４を介して入力された情報資産フロー４１と、プログラム仕様４２と、構成要素とプログラム仕様の対応関係４３と、脅威分析結果４４とを受け付ける。
更に、第１の受付部２１は、情報資産フロー４１と、プログラム仕様４２と、構成要素とプログラム仕様の対応関係４３と、脅威分析結果４４とを、それぞれメモリ１２に書き込む。
【００３３】
図３を参照して、情報資産フロー４１の一例を説明する。
【００３４】
情報資産フロー４１は、脅威分析が行われた後の情報資産の流れ（フロー）が整理されて得られる。情報資産フロー４１は、開発対象システムに含まれる機器ごとに生成される。
情報資産フロー４１には、開発対象システムを構成する構成要素（機器）である構成要素４１１と、構成要素４１１と関連する構成要素（機器）である関連要素４１２と、構成要素４１１と関連要素４１２との間の接続関係４１３と、情報資産の名称４１４と、情報資産の種別４１５とが含まれる。
情報資産の種別は、前述したように、入力情報資産、出力情報資産及び内部利用情報資産である。入力情報資産、出力情報資産及び内部利用情報資産以外の情報資産の種別があってもよい。
「入力」とは、構成要素４１１の外部から構成要素４１１に入力される情報資産のフローである。「出力」とは、構成要素４１１から構成要素４１１の外部に出力される情報資産のフローである。「内部利用」とは、構成要素４１１の内部のみで利用される情報資産のフローである。
【００３５】
情報資産フロー４１は、具体的には、図３に示すように、ＵＭＬのコミュニケーション図を拡張したような図で表わすことができる。図３において、矩形は構成要素４１１又は関連要素４１２を表わす。構成要素４１１は、図３の例では「コントローラ」である。また、関連要素４１２は、図３の例では、「ＨＭＩ」と「デバイス」である。
接続関係４１３は、構成要素４１１と関連要素４１２とを結ぶ実線で表される。
更に、図３では、接続関係４１３の付近に矢印が示されている。これら矢印は情報資産のフローを表す。矢印の方向が情報資産のフローの方向を表す。
また、コントローラから接続関係４１３とは無関係に始点が丸である線も伸びている。この線も情報資産のフローを表す。この線は、構成要素４１１と関連要素４１２との間ではフローがないこと、つまり、内部利用情報資産であることを示す。
情報資産のフローの線の付近に配置されている文字列がそのフローで扱う情報資産の名称４１４である。また≪≫で囲まれる文字列は、情報資産の種別４１５である。例えば、図３中のＨＭＩからコントローラに向かう矢印は情報資産「コマンド」が「ＨＭＩ」から「コントローラ」に向かって流れることを意味する。そして、当該矢印は「コントローラ」の立場では、情報資産の種別４１５が「入力」（入力情報資産）であることを示す。また、「コントローラ」から伸びる始点が丸の線は、情報資産「ＭＡＣ鍵」の種別４１５が「内部利用」（内部利用情報資産）であること、すなわち、情報資産「ＭＡＣ鍵」がコントローラの内部で利用されることを示す。
なお、情報資産フロー４１は、情報資産情報に相当する。
【００３６】
次に、図４を参照して、プログラム仕様４２の一例を説明する。
【００３７】
プログラム仕様４２は、脆弱性分析する対象のプログラムの名称４２１と変数の流れ（データフロー）や処理の流れ（制御フロー）を表現するプログラム処理内容４２２を含む。
具体的には、プログラム仕様４２には、脅威分析が行われた後の開発対象システムに含まれる機器（図３の構成要素４１１に対応）で実行されるプログラム全体もしくはその一部となるロジックが記述される。開発対象システムに含まれる機器ごとにプログラム仕様４２が記述される。
また、脆弱性分析の対象でない機器及びプログラムの一部については、プログラム仕様４２を脆弱性分析装置１０に入力しなくてもよい。
【００３８】
なお、プログラム仕様４２は、具体的には、ソースコードもしくはプログラムモデルである。
プログラムモデルとは、フローチャート、ＵＭＬ、ＳｙｓＭＬのようなプログラムの構造及び動作を図表で記述できる情報である。プログラムモデルは、例えば、プログラム言語で記述されたソースコード、処理／判断をＣ言語等のプログラム言語の形式で記述（ｍ＝ｎ＋１やｍ＝ａｄｄ（ｎ，１）等）されたフローチャートである。プログラムモデルは、また、ＵＭＬ又はＳｙｓＭＬのアクティビティ図又はシーケンス図、ＤＦＤ、制御工学等で用いられるブロック線図が該当する。プログラムモデルは、プロセッサ１１（変数判別部２２）でその内容を処理できるように、階層的な構造を表現できるデータ形式で記述されて保管される。プログラムモデルは、例えば、ＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）とＪＳＯＮ（ＪａｖａＳｃｒｉｐｔ（登録商標）  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ）といったデータ形式で記述される。例えば、図４は、構成要素「コントローラ」のＨＭＩとの通信処理に関するプログラム仕様４２の一例を示している。図４では、一般的なＣ言語のソースコードの形式で、コントローラで動作するプログラムの一部の動作内容が記述されている。
また、プログラムの名称４２１は、「ＰＲＯＧＲＡＭ＿Ｃ．Ｃ」であり、プログラム処理内容４２２は、Ｃ言語の記述内容である。図４の例では、プログラムの名称４２１は、Ｃ言語のソースコードのファイル名で示しているが、脆弱性分析装置１０が一意に各プログラム仕様４２を判別できる情報であればどのような形式でも良い。なお、プログラムの名称４２１は、後述する構成要素とプログラム仕様の対応関係４３で利用される。
【００３９】
次に、図５を参照して、構成要素とプログラム仕様の対応関係４３の一例を説明する。
【００４０】
構成要素とプログラム仕様の対応関係４３は、脆弱性分析の対象とする構成要素４３１とプログラム仕様４３２との対応関係を示す。
構成要素とプログラム仕様の対応関係４３は、例えば、図５のような表として表現することができる。図５では、構成要素「コントローラ」で検査対象となるプログラム仕様４２が２つあり、それぞれが「ＰＲＯＧＲＡＭ＿Ｃ．Ｃ」と「ＰＲＯＧＲＡＭ＿Ｄ．Ｃ」である。
【００４１】
次に、図６を参照して、脅威分析結果４４の一例を説明する。
【００４２】
脅威分析結果４４には、開発対象システムに対する脅威分析の結果が示される。
脅威分析結果４４には、脅威４４１、構成要素４４２、関係する情報資産４４３及び脅威の種別４４４が含まれる。
脅威４４１には、脅威の内容が示される。
構成要素４４２には、脅威が発生する構成要素または接続関係が示される。
関係する情報資産４４３には、脅威に関係する情報資産が示される。
脅威の種別４４４には、脅威が発生した際に情報資産に与える影響の種別が示される。脅威の種別４４４には、例えば、一般的に情報セキュリティの属性を示すのに使われるＣ、Ｉ、Ａのうちのいずれかが示される。なお、Ｃは機密性、Ｉは完全性、Ａは可用性を意味する。
脅威分析結果４４は、例えば、図６のように表の形式で表すことができる。図６の例では、１行目のレコードには、脅威４４１として「推測による漏洩」が示され、構成要素４４２として脅威が発生する構成要素である「リモート端末」が示され、関係する情報資産４４３として推測の漏洩に関係する「パスワード」が示され、また、脅威の種別４４４として「Ｃ」が示される。
【００４３】
（図２のステップＳ２：プログラム変数処理関係分析処理）
変数判別部２２は、ステップＳ１で受け入れられたプログラム仕様４２に含まれる変数が用いられている処理に基づいて、変数の種別を判別し、変数間の伝搬関係及び処理の順番を分析する。
より具体的には、変数判別部２２は、変数が用いられている処理が、入力処理、出力処理及び内部利用処理のいずれであるかを判別する。入力処理とは、機器の外部から値を入力する処理である。出力処理は、機器の外部に値を出力する処理である。内部利用処理とは、機器の内部で値を利用する処理である。変数判別部２２は、処理の種別に基づいて変数の種別を判別する。
また、変数間の伝搬関係とは、変数間でのプログラム内部での値の伝搬関係である。
【００４４】
図７は、変数判別部２２の動作例を説明するフローチャートである。
【００４５】
最初に、変数判別部２２は、分析に必要な各種情報をメモリ１２から読み込む（ステップＳ２１）。
【００４６】
次に、変数判別部２２は、プログラム仕様４２に含まれる変数を抽出する（ステップＳ２２）。
【００４７】
次に、変数判別部２２は、抽出した変数の種別を判別する（ステップＳ２３）。
【００４８】
次に、変数判別部２２は、種別が判別できた各変数の伝搬関係及び処理順番を分析する（ステップＳ２４）。
【００４９】
最後に、変数判別部２２は、分析した結果をメモリ１２に書き込む（ステップＳ２５）。
【００５０】
次に、図７のステップＳ２１〜Ｓ２６の詳細を説明する。
【００５１】
＜図７のステップＳ２１の詳細＞
ステップＳ２１では、変数判別部２２は、ストレージ１３から処理種別ＤＢ３１を読み出し、処理種別ＤＢ３１をメモリ１２に書き込む。
次に、変数判別部２２は、プログラム仕様４２と処理種別ＤＢ３１の情報をメモリ１２から読み出す。
ここで、プログラム仕様４２は、ステップＳ１で受け付けられたプログラム仕様４２である。
【００５２】
図８を参照して、処理種別ＤＢ３１の一例を説明する。
【００５３】
処理種別ＤＢ３１には、処理名３１１と処理種別３１２とが含まれる。
処理名３１１には、プログラム仕様４２に含まれる処理の名称が示される。
処理種別３１２には、処理名３１１に示される処理が、入力処理、出力処理及び内部利用処理（セキュリティ処理）のいずれに該当するかが示される。図８では、入力処理はＩｎｐｕｔと記されている。出力処理はＯｕｔｐｕｔと記されている。内部利用処理（セキュリティ処理）はＳｅｃｕｒｉｔｙと記されている。
処理名３１１に示される処理は、関数、メソッド等である。
図８の例では、例えば、処理名ｒｅｃｅｉｖｅＭｅｓｓａｇｅの処理種別は入力処理（Ｉｎｐｕｔ）である。
【００５４】
＜図７のステップＳ２２の詳細＞
ステップＳ２２では、変数判別部２２は、ステップＳ２１で読み込んだプログラム仕様４２から変数を抽出する。変数の抽出処理はプログラム仕様４２の記述方法による異なる。
本実施の形態で説明に用いているプログラム仕様４２（ソースコード）では、コンパイラで用いられる字句解析と構文解析の技術を用いることで、変数を抽出することができる。ソースコード以外の記述の場合も、変数判別部２２は、それぞれの記述ルールに従い変数を抽出する。
【００５５】
＜図７のステップＳ２３の詳細＞
ステップＳ２３では、変数判別部２２は、ステップＳ２２で抽出された各変数の種別を判別する。
変数判別部２２は、抽出した各変数が、処理種別ＤＢ３１の処理名３１１に示される関数、メソッド等の処理に用いられているか否かを調べる。「処理に用いられている」とは、関数又はメソッドの引数として変数が用いられている、もしくは、関数又はメソッドの戻り値として変数が用いられていることを意味する。
抽出した変数が、処理名３１１に示される処理に用いられている場合は、変数判別部２２は、対象の処理の処理種別３１２によって変数の種別を判別する。前述したように、変数判別部２２は、処理の種別に基づいて、変数の種別を判別する。
より具体的には、例えば、プログラム仕様４２がＣ言語で記述されている場合には、処理種別が「Ｉｎｐｕｔ」であれば、変数判別部２２は、戻り値又はアドレス渡しの引数（参照渡し引数も含む）で用いられた変数は「入力変数」と判定する。一方、処理種別が「Ｏｕｔｐｕｔ」であれば、変数判別部２２は、値渡しの引数で用いられた変数は「出力変数」と判別する。また、アドレス渡しの引数で用いられた変数は、変数判別部２２は「入力変数」と「出力変数」の両者に判別する。また、変数判別部２２は、戻値に用いられた変数は「入力変数」と判別する。更に、変数判別部２２は、すべての変数に対して前述の判定を行った結果、いずれの種別にも判別されない変数であって、条件文に利用されている変数と、処理種別が「Ｓｅｃｕｉｒｔｙ」の関数の引数又は戻り値に用いられている変数は、「内部利用変数」と判別する。
【００５６】
例えば、図４で示したプログラム仕様４２を、図８で示した処理種別ＤＢ３１を使って、上記の判定規則で解析した場合には、ｍｓｇ、ｌｅｎが「入力変数」になる。また、ｄｅｖ、ｖａｌ、ｒｅｔが「出力変数」になる。また、ｋｅｙ、ｓｔａｔｅが「内部利用変数」になる。また、ｃｍｄは、いずれにも分類されない。
【００５７】
なお、図４の例では存在しないが、２以上の同じ変数が、それぞれ別の種別として判別できる場合には、それぞれの変数は別に取り扱う。例えば、変数ｍｓｇを入力変数と判定した箇所とは異なる箇所で同じ変数ｍｓｇが別の変数種別と判定できる場合は、変数判別部２２は、それぞれを別の変数として取り扱う。また、変数判別部２２は、同じ変数名でも区別できるようにする。変数判別部２２は、例えば、ｍｓｇ：１２といったように、変数名：行番号等の形式で各変数を一意に識別できるようにする。
【００５８】
また、上記では、ステップＳ２３において、変数判別部２２が処理種別ＤＢ３１の情報を用いて変数の処理種別を判定する例を説明した。このように事前に生成されたルールに基づいて処理種別の判定が行われても良いし、変数判別部２２に設定されたロジックにより行われても良い。
【００５９】
また、上記では、変数の種別を判定する処理では、関数での変数の扱われ方又は関数に事前に割り当てた処理種別によって、「入力変数」又は「出力変数」を決定している。更に、上記では、一定の条件を満たす変数を「内部利用変数」と判定している。しかしながら、変数の種別の判定規則として、別の規則を用いてもよい。
また、本実施の形態では、上記の判定規則は、変数判別部２２の内部に保持されていることを想定しているが、ファイルやデータベースに判定規則が保持されていてもよい。また、判定規則を変更してもよい。
【００６０】
＜図７のステップＳ２４の詳細＞
ステップＳ２４では、変数判別部２２が、ステップＳ２３で種別が判定できた各変数の伝搬関係及び処理順番を分析する。伝搬関係とは、「入力変数」として判定した変数の値が他の変数に伝搬するデータフローのことである。変数判別部２２は、既存の静的コード解析と同様に変数の代入関係等から伝搬関係を分析することができる。
例えば、図４で示したプログラム仕様４２に、図８で示した処理種別ＤＢ３１を使った場合には、変数判別部２２は、図９の伝搬関係４５３を得ることになる。
【００６１】
＜図７のステップＳ２５の詳細＞
ステップＳ２５では、変数判別部２２は、ステップＳ２１〜Ｓ２４で分析した結果をプログラム変数処理関係４５（図９）としてメモリ１２に書き込む。
【００６２】
図９を参照して、プログラム変数処理関係４５の一例を説明する。
【００６３】
プログラム変数処理関係４５は、プログラム仕様４２内の変数について、変数判別部２２の分析結果を表す。
プログラム変数処理関係４５は、変数種別４５１、変数名４５２及び伝搬関係４５３を含む。
変数種別４５１には、変数判別部２２の分析により得られた変数の種別が示される。
変数名４５２には、変数の名称が示される。
伝搬関係４５３には、前述したように、「入力変数」として判定した変数の値が他の変数に伝搬するデータフロー（伝搬関係）が示される。
図９に示す例では、変数名ｍｓｇの変数種別は「入力変数」である。更に、伝搬関係４５３から、変数名ｍｓｇは、出力変数ｄｅｖ、ｖａｌに伝搬する。
【００６４】
（図２のステップＳ３：情報資産−変数対応推測処理）
候補生成部２３は、ステップＳ１で入力された情報資産フロー４１と、ステップＳ２で得られたプログラム変数処理関係４５に基づき、情報資産と変数の対応関係の候補を生成する。
【００６５】
具体的には、候補生成部２３は、情報資産フロー４１とプログラム変数処理関係４５とをメモリ１２から読み出す。
次に、候補生成部２３は、情報資産フロー４１の「入力」とプログラム変数処理関係４５の「入力変数」とをマッピングする。同様に、候補生成部２３は、情報資産フロー４１の「出力」とプログラム変数処理関係４５の「出力変数」とをマッピングする。更に、候補生成部２３は、情報資産フロー４１の「内部利用」とプログラム変数処理関係４５の「内部利用変数」とをマッピングする。このようにして、候補生成部２３は、情報資産とプログラム仕様４２の変数との組み合わせをすべて生成する。
そして、候補生成部２３は、生成した対応関係の候補を、情報資産−変数対応関係候補４６として、メモリ１２に書き込む。
【００６６】
図１０を参照して、情報資産−変数対応関係候補４６の一例を説明する。
【００６７】
情報資産−変数対応関係候補４６は、候補名４６１、入力または内部利用の情報資産４６２、変数名４６３、伝搬関係４６４、出力の情報資産４６５からなる。
図１０の例では、候補１では、入力の情報資産であるコマンドは、変数ｌｅｎ及びｍｓｇと対応付けられている。また、入力の情報資産である値は、変数ａｎｓと対応付けられている。また、内部利用の情報資産であるＭＡＣ鍵は、変数ｋｅｙと対応付けられている。また、出力の情報資産である指示は、変数ｄｅｖ及びｖａｌと対応付けられている。また、出力の情報資産である応答は、変数ｒｅｔと対応付けられている。
情報資産−変数対応関係候補４６に示される複数の候補は、各々異なっている。
【００６８】
（図２のステップＳ４：第２の受付処理）
ステップＳ３で生成された情報資産−変数対応関係候補４６（図１０）に複数の対応関係の候補が存在する場合は、第２の受付部２４が情報資産−変数対応関係候補４６を出力する。
そして、第２の受付部２４は、利用者が選択した情報資産と変数の対応関係の選択を受け付ける。
【００６９】
具体的には、第２の受付部２４は、情報資産−変数対応関係候補４６をメモリ１２から読み出す。情報資産−変数対応関係候補４６に複数の対応関係の候補が存在する場合には、第２の受付部２４は、情報資産−変数対応関係候補４６を、通信インタフェース１４を介して接続された入出力装置に送信する。
そして、入出力装置に情報資産−変数対応関係候補４６が表示される。利用者は入出力装置に対する操作を行って、情報資産−変数対応関係候補４６から情報資産−変数対応関係４７を選択する。選択された情報資産−変数対応関係４７が、通信インタフェース１４を介して第２の受付部２４に入力される。そして第２の受付部２４は、通信インタフェース１４を介して入力された情報資産−変数対応関係４７を受け付ける。さらに第２の受付部２４は、受け付けた情報資産−変数対応関係４７をメモリ１２に書き込む。情報資産−変数対応関係４７は、実際の情報資産と変数との対応関係が示される、情報資産−変数対応関係候補４６に含まれる対応関係の候補の１つである。
図１０に示すように、情報資産−変数対応関係候補４６には伝搬関係及び処理順番も含まれる。このため、利用者は伝搬関係及び処理順番を考慮して、情報資産−変数対応関係４７を選択することができる。
ここでは、図１０の候補１が、情報資産−変数対応関係４７として選択されたものとする。
なお、情報資産−変数対応関係候補４６に対応関係の候補が１つしかない場合は、ステップＳ４は行われないが、情報資産−変数対応関係候補４６に含まれる当該対応関係の候補も、以下では、情報資産−変数対応関係４７と称する。
【００７０】
（図２のステップＳ５：関連脅威抽出処理）
関連脅威抽出部２５は、情報資産−変数対応関係４７に基づき、プログラム仕様４２に関連する脅威の一覧を、関連脅威一覧４８として抽出する。なお、関連脅威一覧４８の抽出はそれぞれのプログラム仕様４２に対して行われる。
【００７１】
具体的には、関連脅威抽出部２５は、脅威分析結果４４（図６）と、構成要素とプログラム仕様の対応関係４３（図５）とをメモリ１２から読み込む。
そして、関連脅威抽出部２５は、構成要素とプログラム仕様の対応関係４３の各エントリを順に処理し、構成要素４３１の内容に対応する情報資産フロー４１（図３）と、プログラム仕様４３２の内容に対応する情報資産−変数対応関係４７とをメモリから読み込む。
そして、関連脅威抽出部２５は、情報資産フロー４１と、情報資産−変数対応関係４７とを使って、脅威分析結果４４（図６）からプログラム仕様４２に関連する脅威を抽出する（詳細は図１１を使い後述する）。
そして、関連脅威抽出部２５は、抽出した結果を、関連脅威一覧４８として、処理したプログラム仕様４２に関連付けてメモリ１２に書き込む。関連脅威抽出部２５は、これらの動作を、構成要素とプログラム仕様の対応関係４３（図５）のすべてのエントリについて行う。
【００７２】
関連脅威抽出部２５は、例えば、図１１に示す動作によって関連する脅威の抽出を行う。
【００７３】
まず、関連脅威抽出部２５は、構成要素とプログラム仕様の対応関係４３（図５）の構成要素４３１の記載内容が構成要素４４２に含まれるエントリを脅威分析結果４４（図６）上で探索する。そして、関連脅威抽出部２５は、探索により得られたエントリの脅威４４１の記載内容を仮に抽出する。
例えば、ＰＲＯＧＲＡＭ＿Ｃ．Ｃに対して脅威抽出を行っている場合には、構成要素とプログラム仕様の対応関係４３（図５）によれば、ＰＲＯＧＲＡＭ＿Ｃ．Ｃが動作する構成要素はコントローラである。このため、関連脅威抽出部２５は、構成要素４４２に「コントローラ」が含まれるエントリを脅威分析結果４４（図６）上で探索する。脅威分析結果４４（図６）では、「ＨＭＩ−コントローラ間」、「コントローラ」及び「コントローラ−デバイス間」のエントリが得られる（図１１の手順（１））。そして、関連脅威抽出部２５は、これらエントリの脅威４４１に記載の「未暗号通信の改ざん」、「推測による漏えい」、「再送による改ざん」及び「再送によるＤｏＳ」を仮に抽出する（図１１の手順（２））。
【００７４】
次に、関連脅威抽出部２５は、探索により得られたエントリの関係する情報資産４４３の記載内容が情報資産−変数対応関係４７において変数と対応付けられている場合に、該当するエントリの脅威４４１の記載内容を正式に抽出する。
関連脅威抽出部２５は、図１１の手順（１）で得られたエントリ（行番号４〜１３）の関係する情報資産４４３の「コマンド」、「応答」、「ＭＡＣ鍵」、「指示」、「値」及び「ステータス」のそれぞれが、情報資産−変数対応関係４７（図１０）において変数と対応付けられているか否かを判定する。
図１０の情報資産−変数対応関係４７では、「ステータス」以外の情報資産は変数と対応付けられている。
このため、関連脅威抽出部２５は、図１１の４行目〜１１行目の脅威４４１の記載内容を正式に抽出する（図１１の手順（３））。
そして、関連脅威抽出部２５は、抽出した脅威４４１の記載内容を、関連脅威一覧４８としてメモリ１２に書き込む。
【００７５】
また、図１２を参照して、関連脅威一覧４８の一例を説明する。
【００７６】
関連脅威一覧４８は、図１１で例示した抽出処理によって抽出された脅威分析結果４４の一部である。関連脅威一覧４８は、関連するプログラム仕様４２（図４）と対応付けて記憶される。また、関連脅威一覧４８は、構成要素とプログラム仕様の対応関係４３（図５）のエントリと対応付けされてもよい。
【００７７】
（図２のステップＳ６：関連脆弱性候補抽出処理）
脆弱性候補抽出部２６は、ステップＳ５で抽出された関連脅威一覧４８（図１２）と、脅威−脆弱性種別対応ＤＢ３２（図１３）の情報に基づき、該当のプログラム仕様４２（図４）に関連する脅威の攻撃に利用される可能性がある検査すべき脆弱性種別候補４９を、個々の関連する脅威毎に抽出する。
【００７８】
具体的には、脆弱性候補抽出部２６は、ストレージ１３から脅威−脆弱性種別対応ＤＢ３２を読み込み、脅威−脆弱性種別対応ＤＢ３２をメモリ１２に書き込む。
次に、脆弱性候補抽出部２６は、構成要素とプログラム仕様の対応関係４３（図５）をメモリ１２から読み込む。
そして、脆弱性候補抽出部２６は、構成要素とプログラム仕様の対応関係４３（図５）の各エントリを順に処理し、プログラム仕様４３２に対応する関連脅威一覧４８（図１２）をメモリ１２から読み込む。
次に、脆弱性候補抽出部２６は、関連脅威一覧４８に記載される脅威毎に脅威−脆弱性種別対応ＤＢ３２のエントリを参照して、脅威と関係する脆弱性種別の候補を脆弱性種別一覧３２２から取得する。そして、脆弱性候補抽出部２６は、取得した脆弱性種別の候補を脆弱性種別候補４９（図１４）として、個々の脅威と対応付けてメモリ１２に書き込む。脆弱性候補抽出部２６は、これをすべての脅威について行う。
そして、脆弱性候補抽出部２６は、構成要素とプログラム仕様の対応関係４３（図５）の次のエントリについても同様に処理を続け、すべてのエントリに対して脆弱性種別候補４９の抽出を行う。
【００７９】
図１３を参照して、脅威−脆弱性種別対応ＤＢ３２の一例を説明する。
【００８０】
脅威−脆弱性種別対応ＤＢ３２は、図１３のように表の形式で表すことができる。
脅威−脆弱性種別対応ＤＢ３２には、脅威３２１と、その脅威に対応する脆弱性種別一覧３２２の情報が含まれる。
脆弱性種別一覧３２２には、脅威に対応する脆弱性種別が列挙される。なお、脅威−脆弱性種別対応ＤＢ３２に脅威のエントリが存在しない場合、もしくは、脅威のエントリは存在するが対応する脆弱性種別の記載がない場合は、その脅威にはプログラム仕様４２で記述されるレベルで分析できる脆弱性種別が存在しない。例えば、図１３の「故障」には脆弱性種別がないが、これは故障が機器の不具合であり、プログラムに起因する脆弱性ではないからである。このような、脆弱性がない場合には、脆弱性候補抽出部２６は、後述するステップＳ７の脆弱性分析の結果出力において、脅威に対応する脆弱性の候補がないことを示す表示を含めてもよい。
【００８１】
図１４を参照して、脆弱性種別候補４９の一例を説明する。
【００８２】
脆弱性種別候補４９は、関連脅威一覧４８の脅威４４１と、構成要素４４２と、関係する情報資産４４３と、脅威の種別４４４と、脅威−脆弱性種別対応ＤＢ３２の脆弱性種別一覧３２２とを対応付けた情報である。なお、図１４と異なり、脆弱性種別候補４９は、脅威４４１、関係する情報資産４４３及び脆弱性種別一覧３２２のみで構成されてもよい。また、脆弱性種別候補４９に、図１４に示されていない要素が含まれていてもよい。
【００８３】
（図２のステップＳ７：脆弱性分析処理）
脆弱性分析部２７は、ステップＳ６で抽出された脆弱性種別候補４９の脆弱性種別一覧３２２に示される脆弱性種別がプログラム仕様４２に存在するかの分析を行う。そして、脆弱性分析部２７は、分析結果を出力する。
脆弱性分析は、背景技術で説明したような静的コード解析又は形式的検証の技術を使って行われる。脆弱性分析部２７は、脆弱性種別候補４９の情報に従って、各脅威に関連する脆弱性を検査する。
【００８４】
具体的には、脆弱性分析部２７は、脆弱性分析を行うプログラム仕様４２（図４）と、対応する関連脅威一覧４８（図１２）と、各関連脅威に対応する脆弱性種別候補４９（図１４）とをメモリ１２から読み出す。
次に、脆弱性分析部２７は、脆弱性分析を行う。つまり、脆弱性分析部２７は、脆弱性種別とそれに関連する変数を対応する関連脅威一覧４８と脆弱性種別候補４９に基づいて抽出し、脆弱性分析を行う。
そして、脆弱性分析部２７は、脆弱性を検出した場合には、脆弱性検出結果４１０（図１５）をメモリ１２に書き込む（既に他の脆弱性検出結果４１０が存在する場合には新たな脆弱性検出結果４１０を既存の脆弱性検出結果４１０に追記する）。
脆弱性分析部２７は、これをすべての検査対象のプログラム仕様４２について行う。
すべての検査対象のプログラム仕様４２に対してすべての脆弱性分析が完了した場合には、脆弱性分析部２７は、通信インタフェース１４を介して、接続された入出力装置に脆弱性検出結果４１０を送信する。
脆弱性検出結果４１０を受信した入出力装置は脆弱性検出結果４１０を表示する。また、脆弱性検出結果４１０をファイルに保存してもよい。
なお、脆弱性分析部２７は、情報資産に対応付けられた変数も考慮して脆弱性分析を行う。
【００８５】
図１５を参照して、脆弱性検出結果４１０の一例を説明する。
【００８６】
脆弱性検出結果４１０には、脆弱性種別４１１、変数４１２、箇所４１３、脅威４１４、構成要素４１５及び情報資産４１６が含まれる。
脆弱性種別４１１には、脆弱性分析部２７が検出した脆弱性種別が示される。
変数４１２には、脆弱性分析部２７が検出した脆弱性種別と関係する変数が示される。
箇所４１３には、脆弱性分析部２７が検出した脆弱性種別と関係する、プログラム仕様４２中の箇所が示される。
脅威４１４には、脆弱性分析部２７が検出した脆弱性種別に対する脅威が示される。
構成要素４１５には、脆弱性分析部２７が検出した脆弱性種別が存在する構成要素が示される。
情報資産４１６には、脆弱性分析部２７が検出した脆弱性種別が存在する情報資産が示される。
図１５は、ＰＲＯＧＲＡＭ＿Ｃ．Ｃの脅威＃６（推測による脅威）に関連する脆弱性検出結果４１０の一例を示している。図１５の例では脆弱性種別４１１として「脆弱性１」が示される。また、変数４１２として「ｋｅｙ」が示され、箇所４１３として「ＰＲＯＧＲＡＭ＿Ｃ．Ｃの１行目」が示され、脅威４１４として「推測による漏えい」が示される。また、構成要素４１５として「コントローラ」が示され、情報資産４１６として「ＭＡＣ鍵」が示される。
【００８７】
＊＊＊実施の形態の効果の説明＊＊＊
以上のように、本実施の形態によれば、機器で実行されるプログラムに含まれる変数と機器が用いる情報資産との対応関係の候補を生成するため、プログラム内の部分と情報資産と脆弱性との対応関係を明確にできる。
【００８８】
また、本実施の形態では、脅威分析の情報資産の流れと、プログラム仕様の変数の入力／出力の分類の対応関係に基づき、脅威分析の結果とプログラム仕様との対応関係を明確にできる。このため、本実施の形態によれば、脆弱性分析の時点において分析対象を絞り込むことできる。
【００８９】
また、本実施の形態では、脅威分析での情報資産の流れとプログラム仕様の変数の入出力関係の対応関係を分析して推測することができる。このため、本実施の形態によれば、脆弱性分析の利用者が個々にそれらを実行する手間を省くことができる。
【００９０】
更に、本実施の形態では、各脅威に結びつく攻撃に利用される脆弱性の対応関係を記憶している。このため、脆弱性分析の際に、脅威分析の結果から、対応関係を参照して、攻撃に利用される脆弱性を導出することができる。
【００９１】
実施の形態２．
実施の形態１では、脆弱性分析装置１０は、外部から取得した情報資産フロー４１（図３）から、脆弱性分析の対象のシステムの機器構成、情報資産の種別及び情報資産の流れを得る。
本実施の形態では、脆弱性分析装置１０が、脆弱性分析の対象のシステムの機器構成、情報資産の種別及び情報資産の流れを分析する例を説明する。
本実施の形態では、主に実施の形態１との差異を説明する。
なお、以下で説明していない事項は、実施の形態１と同様である。
【００９２】
＊＊＊構成の説明＊＊＊
図１６を参照して、実施の形態１に係る脆弱性分析装置１０の構成を説明する。
図１６では、図１の構成と比較して、情報資産判別部２８が追加されている。図１６に示す他の要素は、図１に示したものと同じである。
【００９３】
＊＊＊動作の説明＊＊＊
以下、図２を参照して、本実施の形態に係る脆弱性分析装置１０の動作例を説明する。
【００９４】
本実施の形態では、図２のステップＳ１において、第１の受付部２１が、情報資産フロー４１の替わりに、脅威分析入力情報５１を受け付ける。
【００９５】
具体的には、通信インタフェース１４を介して接続された入力装置が利用者によって操作され、脅威分析入力情報５１と、プログラム仕様４２と、構成要素とプログラム仕様の対応関係４３と、脅威分析結果４４とが入力される。
そして、第１の受付部２１は、通信インタフェース１４を介して脅威分析入力情報５１と、プログラム仕様４２と、構成要素とプログラム仕様の対応関係４３と、脅威分析結果４４とを受け付ける。
更に、第１の受付部２１は、脅威分析入力情報５１と、プログラム仕様４２と、構成要素とプログラム仕様の対応関係４３と、脅威分析結果４４とをメモリ１２に書き込む。
【００９６】
脅威分析入力情報５１は、脅威分析に用いられた情報である。
脅威分析入力情報５１は、脆弱性分析の対象となるシステムを構成する複数の構成要素、構成要素間の接続関係、情報資産の一覧および情報資産の流れを示す情報が含まれている。
【００９７】
次に、ステップＳ３を実施する前に、情報資産判別部２８が、関連情報資産フロー抽出処理を行う。
関連情報資産フロー抽出処理では、情報資産判別部２８は、ステップＳ１で受け付けられた脅威分析入力情報５１と、構成要素とプログラム仕様の対応関係４３とに基づき、脆弱性分析の対象となるプログラム仕様４２に関連する情報資産フローを、構成要素毎に抽出する。情報資産フローは、実施の形態１で示した図３の情報資産フロー４１と同じ形式である。
つまり、情報資産判別部２８は、脅威分析の対象となるシステムで用いられる情報資産の各々が、入力情報資産、出力情報資産、内部利用情報資産のいずれであるかを判別する。
【００９８】
＊＊＊実施の形態の効果の説明＊＊＊
以上のように、本実施の形態によれば、脆弱性分析装置１０が情報資産フローを生成することができるため、外部装置で情報資産フローを生成する必要がない。
【００９９】
実施の形態３．
実施の形態１及び２では、情報資産と変数との対応関係の候補を出力する場合に、候補の出力順序は考慮されていない。
本実施の形態では、脆弱性分析装置１０は、情報資産と変数との対応関係の候補を出力する際に、各候補の確かさに従って出力順序を制御する。つまり、本実施の形態では、第２の受付部２４が、複数の対応関係の候補を出力する場合に、複数の対応関係の候補の間に優先順位を設け、優先順位が高い対応関係の候補を優先して出力する。
本実施の形態では、主に実施の形態１との差異を説明する。
なお、以下で説明していない事項は、実施の形態１と同様である。
【０１００】
具体的には、図２のステップＳ３において、候補生成部２３がプログラム仕様４２内の変数と情報資産の対応を分析する際に、候補生成部２３は候補としての確かさを推測する。候補生成部２３は、例えば、事前に設定されたキーワードの組み合わせ等で変数と情報資産の対応関係の候補の確かさを推測する。
例えば、候補生成部２３は、情報資産「コマンド」と、変数ｃｏｍｍａｎｄ及び変数ｃｍｄは、表記が近似するため、候補としての確かさが高いと推測する。また、候補生成部２３は、対応する変数の組み合わせが多い候補はその確かさが高いと判定する。候補生成部２３は、確かさに従って複数の対応関係の候補の出力順序（優先順位）を指定するする。
そして、第２の受付部２４は、候補生成部２３により指定された出力順序に従って、複数の対応関係の候補を出力する。
【０１０１】
以上のように、本実施の形態では、対応関係の候補の確かさを推測し、確かさに基づいて対応関係の候補の出力順序を指定し、指定した出力順序で複数の対応関係の候補を出力する。このため、本実施の形態によれば、利用者は対応関係の候補が複数存在した場合でも、容易に正しい対応関係を選択することができる。
【０１０２】
実施の形態４．
実施の形態１〜３では、脆弱性候補抽出部２６は、脅威−脆弱性対応ＤＢ３２を使って、関連脅威に対応する脆弱性種別の候補を抽出する。
本実施の形態では、第１の受付部２１がアタックツリーを取得する。そして、脆弱性候補抽出部２６は、アタックツリーを用いて、脆弱性の種別の候補を抽出する。アタックツリーは、脅威分析結果４４（図６）の各脅威を達成するための一連の攻撃手順と当該攻撃手順に利用される脆弱性の種別が示される情報である。
脆弱性候補抽出部２６は、関連脅威一覧４８（図１２）の各脅威に対応する脆弱性の種別の候補を抽出する際に、脅威−脆弱性対応ＤＢ３２を使う替わりに、アタックツリーに含まれる脆弱性の種別の情報を抽出する。なお、脆弱性候補抽出部２６は、攻撃先が対応する構成要素であることを確認した後に、アタックツリーから脆弱性の種別を抽出する。
なお、本実施の形態で説明していない事項は、実施の形態１と同様である。
【０１０３】
以上のように、本実施の形態では、アタックツリーに含まれる脆弱性の種別の情報を使うことで、柔軟な分析を行うことができる（脅威−脆弱性種別対応ＤＢ３２を使った場合には、脅威と脆弱性の種別の対応関係は固定的である）。本実施の形態によれば、例えば、システムの構成や攻撃の仕方によって利用される脆弱性の種別が変化する場合に、柔軟な分析を行うことができる。
【０１０４】
実施の形態５．
実施の形態１〜４では、脆弱性分析の際にプログラム仕様４２をそのまま利用する。
本実施の形態では、脆弱性分析部２７は、情報資産と変数との対応付け又は／及び脅威の種別を参照して、脆弱性分析を行う。つまり、本実施の形態では、脆弱性分析部２７は、情報資産−変数対応関係４７（図１０）から得られる複数の情報資産と複数の変数との対応付けをプログラム仕様４２に追加して、脆弱性分析を行うことができる。また、脆弱性分析部２７は、脅威分析結果４４に記載の脅威の種別４４４（Ｃ、Ｉ、Ａ）を参照して、脆弱性分析を行うことができる。つまり、脆弱性分析部２７は、プログラム仕様４２に脅威の種別４４４（Ｃ、Ｉ、Ａ）を追加して、脆弱性分析を行うことができる。
また、本実施の形態では、脆弱性分析部２７は、脆弱性候補抽出部２６により抽出された脆弱性の種別の候補に関連する処理が記述される部分をプログラム仕様４２からプログラム断片として抽出することができる。そして、脆弱性分析部２７は、抽出したプログラム断片を用いて脆弱性分析を行うことができる。この場合には、脆弱性分析部２７は、プログラム仕様４２から、例えば、脅威に関連する変数を参照又は変更する処理、脅威に関連する変数に影響を与える他の変数を使った処理、分岐処理、判断処理等の上述の処理の実行を制御する処理を、プログラム断片として抽出することができる。
なお、本実施の形態で説明していない事項は、実施の形態１と同様である。
【０１０５】
以上のように、本実施の形態では、検査対象のプログラム仕様に、情報資産と変数との対応付け、情報資産の価値（Ｃ、Ｉ、Ａ）等のメタ情報を追加して脆弱性検査を行う。このため、本実施の形態では、検査式の生成又は／及びモデルの生成を効率化することができる。
また、本実施の形態では、プログラム断片を用いることで、プログラム仕様の全体を用いる場合に比べて、脆弱性分析を効率化することができる。
【０１０６】
以上、本発明の実施の形態について説明したが、これらの実施の形態のうち、２つ以上を組み合わせて実施しても構わない。
あるいは、これらの実施の形態のうち、１つを部分的に実施しても構わない。
あるいは、これらの実施の形態のうち、２つ以上を部分的に組み合わせて実施しても構わない。
なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【０１０７】
＊＊＊ハードウェア構成の説明＊＊＊
最後に、脆弱性分析装置１０のハードウェア構成の補足説明を行う。
【０１０８】
ストレージ１３には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が記憶されている。
そして、ＯＳの少なくとも一部がメモリ１２にロードされ、プロセッサ１１により実行される。
プロセッサ１１はＯＳの少なくとも一部を実行しながら、第１の受付部２１、変数判別部２２、候補生成部２３、第２の受付部２４、関連脅威抽出部２５、脆弱性候補抽出部２６、脆弱性分析部２７及び情報資産判別部２８の機能を実現するプログラムを実行する。
プロセッサ１１がＯＳを実行することで、タスク管理、メモリ管理、ファイル管理、通信制御等が行われる。
また、第１の受付部２１、変数判別部２２、候補生成部２３、第２の受付部２４、関連脅威抽出部２５、脆弱性候補抽出部２６、脆弱性分析部２７及び情報資産判別部２８の処理の結果を示す情報、データ、信号値及び変数値の少なくともいずれかが、メモリ１２、ストレージ１３、プロセッサ１１内のレジスタ及びキャッシュメモリの少なくともいずれかに記憶される。
また、第１の受付部２１、変数判別部２２、候補生成部２３、第２の受付部２４、関連脅威抽出部２５、脆弱性候補抽出部２６、脆弱性分析部２７及び情報資産判別部２８の機能を実現するプログラムは、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ等の可搬記録媒体に格納されていてもよい。そして、第１の受付部２１、変数判別部２２、候補生成部２３、第２の受付部２４、関連脅威抽出部２５、脆弱性候補抽出部２６、脆弱性分析部２７及び情報資産判別部２８の機能を実現するプログラムが格納された可搬記録媒体を商業的に流通させてもよい。
【０１０９】
また、第１の受付部２１、変数判別部２２、候補生成部２３、第２の受付部２４、関連脅威抽出部２５、脆弱性候補抽出部２６、脆弱性分析部２７及び情報資産判別部２８の「部」を、「回路」又は「工程」又は「手順」又は「処理」に読み替えてもよい。
また、脆弱性分析装置１０は、処理回路により実現されてもよい。処理回路は、例えば、ロジックＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＧＡ（Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）である。
なお、本明細書では、プロセッサと処理回路との上位概念を、「プロセッシングサーキットリー」という。
つまり、プロセッサと処理回路とは、それぞれ「プロセッシングサーキットリー」の具体例である。
【符号の説明】
【０１１０】
１０  脆弱性分析装置、１１  プロセッサ、１２  メモリ、１３  ストレージ、１４  通信インタフェース、２１  第１の受付部、２２  変数判別部、２３  候補生成部、２４  第２の受付部、２５  関連脅威抽出部、２６  脆弱性候補抽出部、２７  脆弱性分析部、２８  情報資産判別部、３１  処理種別ＤＢ、３２  脅威−脆弱性種別対応ＤＢ、４１  情報資産フロー、４２  プログラム仕様、４３  構成要素とプログラム仕様の対応関係、４４  脅威分析結果、４５  プログラム変数処理関係、４６  情報資産−変数対応関係候補、４７  情報資産−変数対応関係、４８  関連脅威一覧、４９  脆弱性種別候補、４１０  脆弱性検出結果。
【要約】
変数判別部（２２）は、機器で実行されるプログラムに含まれる複数の変数の各々の種別を判別する。候補生成部（２３）は、変数判別部（２２）により判別された複数の変数の各々の種別と、機器が用いる複数の情報資産の各々の種別とを比較し、複数の情報資産の各々と複数の変数の各々との対応関係の候補を１つ以上生成する。【図１】
0006599053.tif 000002
【図２】
0006599053.tif 000003
【図３】
0006599053.tif 000004
【図４】
0006599053.tif 000005
【図５】
0006599053.tif 000006
【図６】
0006599053.tif 000007
【図７】
0006599053.tif 000008
【図８】
0006599053.tif 000009
【図９】
0006599053.tif 000010
【図１０】
0006599053.tif 000011
【図１１】
0006599053.tif 000012
【図１２】
0006599053.tif 000013
【図１３】
0006599053.tif 000014
【図１４】
0006599053.tif 000015
【図１５】
0006599053.tif 000016
【図１６】
0006599053.tif 000017