(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024098521
(43)【公開日】2024-07-24
(54)【発明の名称】ソースコード修正支援装置およびソースコード修正支援方法
(51)【国際特許分類】
G06F 21/57 20130101AFI20240717BHJP
G06F 8/76 20180101ALI20240717BHJP
G06F 8/77 20180101ALI20240717BHJP
【FI】
G06F21/57 370
G06F8/76
G06F8/77
【審査請求】未請求
【請求項の数】5
【出願形態】OL
(21)【出願番号】P 2023002045
(22)【出願日】2023-01-11
(71)【出願人】
【識別番号】000005234
【氏名又は名称】富士電機株式会社
(74)【代理人】
【識別番号】110004185
【氏名又は名称】インフォート弁理士法人
(74)【代理人】
【識別番号】100121083
【弁理士】
【氏名又は名称】青木 宏義
(74)【代理人】
【識別番号】100138391
【弁理士】
【氏名又は名称】天田 昌行
(74)【代理人】
【識別番号】100132067
【弁理士】
【氏名又は名称】岡田 喜雅
(74)【代理人】
【識別番号】100131521
【弁理士】
【氏名又は名称】堀口 忍
(72)【発明者】
【氏名】澤田 孝雄
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BC26
5B376BC38
(57)【要約】
【課題】ソースコードの一部を他の言語による記述に置き替えることでソフトウェアの脆弱性を低減させる。
【解決手段】ソースコード修正支援装置は、リスク評価部、構造解析部、および判定部を備える。リスク評価部は、情報資産を構成する複数の情報資産要素それぞれについてリスク値を計算する。構造解析部は、第1の言語で記述されたソースコードを解析することにより、複数の情報資産要素のうちで、ソースコード中のプログラムモジュールがアクセスする情報資産要素を検出する。判定部は、プログラムモジュールがアクセスする情報資産要素のリスク値に基づいて、プログラムモジュールに対する対処方針を判定する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
情報資産を構成する複数の情報資産要素それぞれについてリスク値を計算するリスク評価部と、
第1の言語で記述されたソースコードを解析することにより、前記複数の情報資産要素のうちで、前記ソースコード中のプログラムモジュールがアクセスする情報資産要素を検出する構造解析部と、
前記プログラムモジュールがアクセスする情報資産要素のリスク値に基づいて、前記プログラムモジュールに対する対処方針を判定する判定部と、
を備えるソースコード修正支援装置。
【請求項2】
前記リスク評価部は、前記複数の情報資産要素それぞれに対して、当該情報資産要素の重要度を表す第1の値、当該情報資産要素の脅威レベルを表す第2の値、および当該情報資産要素の脆弱性レベルを表す第3の値のうちの少なくとも1つに基づいてリスク値を計算する
ことを特徴とする請求項1に記載のソースコード修正支援装置。
【請求項3】
前記第1の値は、当該情報資産要素の重要度が高いほど大きな値を表し、前記第2の値は、当該情報資産要素の脅威レベルが高いほど大きな値を表し、前記第3の値は、当該情報資産要素の脆弱性レベルが高いほど大きな値を表し、
前記リスク評価部は、前記複数の情報資産要素それぞれに対して、前記第1の値、前記第2の値、および前記第3の値を掛け合わせることで前記リスク値を計算し、
前記判定部は、前記プログラムモジュールがアクセスする情報資産要素のリスク値が所定の閾値を超えているときに、前記プログラムモジュールを、前記第1の言語よりも信頼性の高い第2の言語による記述に置き換える、ことを指示する情報を出力する
ことを特徴とする請求項2に記載のソースコード修正支援装置。
【請求項4】
情報資産を構成する複数の情報資産要素それぞれについてリスク値を計算するリスク評価部と、
第1の言語で記述されたソースコードを解析することにより、前記複数の情報資産要素のうちで、前記ソースコード中のプログラムモジュールがアクセスする情報資産要素を検出する構造解析部と、
前記プログラムモジュールがアクセスする情報資産要素のリスク値に基づいて、前記プログラムモジュールを、前記第1の言語よりも信頼性の高い第2の言語による記述に置き換えるか否かを判定する判定部と、
前記判定部により前記第2の言語による記述に置き換えるべきと判定されたプログラムモジュールを、前記第2の言語による記述に変換する変換部と、
を備えるソースコード修正システム。
【請求項5】
情報資産を構成する複数の情報資産要素それぞれについてリスク値を計算し、
第1の言語で記述されたソースコードを解析することにより、前記複数の情報資産要素のうちで、前記ソースコード中のプログラムモジュールがアクセスする情報資産要素を検出し、
前記プログラムモジュールがアクセスする情報資産要素のリスク値に基づいて、前記プログラムモジュールに対する対処方針を判定する
ことを特徴とするソースコード修正支援方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソースコード内の記述を他の言語による記述に置き替える作業を支援する装置および方法に係わる。
【背景技術】
【0002】
ネットワークに接続する機会が増加したことに伴い、悪意ある第三者によりソフトウェアの脆弱性が狙われて不具合が発生するケースも増加してきている。このため、所定の言語(例えば、C言語など)で記述されているソフトウェアのソースコードを、Rust等の信頼性の高いプログラミング言語で書き換える作業が行われることがある。なお、不正な入力によってプログラムが特定の不都合な状態に到達する可能性の有無を確認する方法が提案されている(例えば、特許文献1)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
既存のソフトウェアの脆弱性に対処するために、静的解析ツールを利用して脆弱性を含む箇所を特定し、特定した箇所のみを信頼性の高い言語による記述に置き換えることが可能である。この場合、既存のソフトウェアを流用できるので、プログラム開発に要するコストおよび時間を抑制できる。ただし、静的解析ツールにより問題が検出されない箇所であっても、信頼性の高い言語による記述に置き換えることが好ましいケースもある。
【0005】
本発明の1つの側面に係わる目的は、ある言語で記述されたソースコードの一部を他の言語による記述に置き替えることでソフトウェアの脆弱性を低減させることである。
【課題を解決するための手段】
【0006】
本発明の1つの態様のソースコード修正支援装置は、情報資産を構成する複数の情報資産要素それぞれについてリスク値を計算するリスク評価部と、第1の言語で記述されたソースコードを解析することにより、前記複数の情報資産要素のうちで、前記ソースコード中のプログラムモジュールがアクセスする情報資産要素を検出する構造解析部と、前記プログラムモジュールがアクセスする情報資産要素のリスク値に基づいて、前記プログラムモジュールに対する対処方針を判定する判定部と、を備える。
【発明の効果】
【0007】
上述の態様によれば、ある言語で記述されたソースコードの一部を他の言語による記述に置き替えることで、既存のソフトウェアを利用しながら脆弱性を低減させることができる。
【図面の簡単な説明】
【0008】
【
図1】本発明の実施形態に係わるソースコード修正支援装置の一例を示す図である。
【
図3】脅威レベル定義および脆弱性レベル定義の一例を示す図である。
【
図4】脅威レベル/脆弱性レベル紐づけ情報の一例を示す図である。
【
図5】リスク評価部により得られるリスク評価結果の一例を示す図である。
【
図6】構造解析部の処理の一例を示すフローチャートである。
【
図7】構造解析部によるソースコードの解析の一例を示す図(その1)である。
【
図8】構造解析部によるソースコードの解析の一例を示す図(その2)である。
【
図9】構造解析部によるソースコードの解析の一例を示す図(その3)である。
【
図10】構造解析部によるソースコードの解析の一例を示す図(その4)である。
【
図11】構造解析部によるソースコードの解析の一例を示す図(その5)である。
【
図12】情報資産アクセスモジュールリストの一例を示す図である。
【
図13】判定部の処理の一例を示すフローチャートである。
【
図14】他言語置換え対象リストおよび置換え対象外リストの一例を示す図である。
【
図15】ソースコード修正装置および試験装置による処理の一例を示すフローチャートである。
【
図16】ソースコード修正支援装置のハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【0009】
ネットワークに接続する機会が増加したことに伴い、悪意ある第三者によりソフトウェアの脆弱性が狙われて不具合が発生するケースも増加してきている。このため、開発段階で、所定のセキュアコーディングルールに基づいてソースコードを解析することで、ソフトウェアの脆弱性を発見する作業が行われることがある。これにより、ソフトウェアの安全性が担保される。例えば、車載機器、産業機器、医療機器などの分野では、CERT(Computer Emergency Response Team)、MISRA(The Motor Industry Software Reliability Association)、AUTOSAR(Automotive Open System Architecture)などのセキュアコーディングルールが使用されている。
【0010】
加えて、ソフトウェアの脆弱性を小さくするプログラミング言語が普及してきている。例えば、Rustは、メモリの安全性を保証する言語であり、C言語またはC++に代わる言語の1つとして注目されている。
【0011】
他方、プログラム開発に要するコストおよび時間を抑制するために、可能な限り既存のソフトウェア製品を使い続けたいという要求がある。このため、既存のソフトウェアの脆弱性に対処するために、静的解析ツールを利用して脆弱性を含む箇所を特定し、特定した箇所のみを信頼性の高い言語による記述で置き換えることがある。
【0012】
ただし、静的解析ツールまたはメトリクス分析等によって、脆弱性を含む箇所のすべてを抽出できるわけではない。換言すると、静的解析ツールまたはメトリクス分析等により問題が検出されない箇所であっても、信頼性の高い言語による記述に置き換えることが好ましいケースがある。
【0013】
図1は、本発明の実施形態に係わるソースコード修正支援装置の一例を示す。本発明の実施形態に係わるソースコード修正支援装置1は、ソースコード2の中からリスクの高いプログラムモジュールを抽出し、抽出した各プログラムモジュールに対して対処方針を表す情報を出力する。
【0014】
ソースコード2は、所定のプログラミング言語で記述された、コンパイル前のプログラムコードである。特に限定されるものではないが、この実施例では、ソースコード2は、C言語またはC++で記述されているものとする。また、ソースコード2は、既存のソフトウェア製品として使用されているプログラムコードであってもよい。さらに、ソースコード2は、複数のプログラムモジュールを含む。プログラムモジュールは、特に限定されるものではないが、例えば、1個の関数に対応する1まとまりの記述または処理を意味する。この場合、関数は、メソッドを含むものとする。
【0015】
情報資産リスト3は、ユーザが所有する、守るべき情報資産の内容を表す。なお、情報資産は、複数の情報資産要素から構成される。
【0016】
図2は、情報資産リスト3の一例を示す。この実施例では、情報資産は、情報資産要素として、認証情報、設定情報、動作ログ、暗号鍵、ファームウェアを含む。情報資産リスト3においては、各情報資産要素について、重要度を表す情報およびオブジェクト情報が設定されている。
【0017】
重要度は、この実施例では、「1」~「3」の数値で表される。具体的には、最も重要な情報資産要素に対して「3」が付与され、比較的重要な情報資産要素に対して「2」が付与され、さほど重要ではない情報資産要素に対して「1」が付与される。すなわち、重要度が高い情報資産要素ほど、大きな値が付与される。
図2に示す例では、認証情報および暗号鍵の重要度が最も高く、重要度値として「3」が付与されている。設定情報は、比較的重要度が高い情報資産であり、重要度値として「2」が付与されている。動作ログおよびファームウェアは、比較的重要度が低い情報資産であり、重要度値として「1」が付与されている。なお、各情報資産要素の重要度は、例えば、情報資産の所有者により予め決定される。また、重要度は、2レベルで表されてもよいし、4以上のレベルで表されてもよい。
【0018】
オブジェクト情報は、ソースコード上での定義または変数名などを表す。また、オブジェクト情報は、グローバル変数のシンボル名またはアドレス情報であってもよい。この実施例では、認証情報のオブジェクト情報は「AuthInfo」であり、設定情報のオブジェクト情報は「ConfData」である。各情報資産要素のオブジェクト情報も予め決められているものとする。
【0019】
脅威レベル/脆弱性レベル定義4(4a、4b)は、情報資産に対する脅威レベルおよび情報資産についての脆弱性レベルの定義を表す。脅威レベルは、情報資産に対して脅威が発生する可能性を表す。また、脆弱性レベルは、発生した脅威を受け入れてしまう可能性、攻撃が成功してしまう可能性、及び/又は、脅威に対して対策が実施されている程度を表す。
【0020】
図3(a)は、脅威レベル定義4aの一例を示す。脅威レベルは、たとえば、「1」~「3」の数値で情報資産に対する脅威の深刻さを表す。具体的には、脅威が発生する可能性が高い状況に「3」が付与され、脅威が発生する可能性がさほど高くない状況に「2」が付与され、脅威が発生する可能性が低い状況に「1」が付与されている。すなわち、脅威が発生する可能性が高い状況ほど、大きな値が付与される。なお、脅威レベルは、例えば、情報資産の所有者により予め定義される。また、脅威レベルは、2レベルで表されてもよいし、4以上のレベルで表されてもよい。
【0021】
図3(b)は、脆弱性レベル定義4bの一例を示す。脆弱性レベルは、例えば、「1」~「3」の数値で情報資産の脆弱性を表す。具体的には、脅威が発生したときにその脅威を容易に受け入れる可能性が高く、また、脅威に対する対策が実施されておらず、攻撃が成功する可能性が高い状況に対して「3」が付与されている。脅威が発生したときにその脅威を受け入れる可能性はさほど高くなく、また、脅威に対する対策が実施されているが十分ではなく、攻撃が成功する可能性がある状況に対して「2」が付与されている。脅威が発生したときにその脅威を受け入れる可能性は低く、また、脅威に対する対策が十分に実施されており、攻撃が成功する可能性が低い状況に対して「1」が付与されている。即ち、脆弱性が高い、或いは、攻撃が成功する可能性が高い状況ほど、大きな値が付与される。なお、脆弱性レベルは、例えば、情報資産の所有者により予め定義される。また、脆弱性レベルは、2レベルで表されてもよいし、4以上のレベルで表されてもよい。
【0022】
ソースコード修正支援装置1は、
図1に示すように、脅威/脆弱性分析部11、リスク評価部12、構造解析部13、判定部14を備える。なお、ソースコード修正支援装置1は、
図1に示していない他の機能またはデバイスを備えてもよい。
【0023】
脅威/脆弱性分析部11には、情報資産リスト3、脅威レベル定義4a、および脆弱性レベル定義4bが与えられる。そして、脅威/脆弱性分析部11は、情報資産リスト3に登録されている各情報資産要素に対して、対応する脅威レベルおよび対応する脆弱性レベルを紐づける。これにより、
図4に示す脅威レベル/脆弱性レベル紐づけ情報21が作成される。
【0024】
この実施例では、例えば、「認証情報」に対して脅威が発生した場合、その脅威を受け入れてしまう可能性が高く、且つ、それらの脅威に対する対策が実施されてないものとする。この場合、「認証情報」に対して「脅威レベル:3」および「脆弱性レベル:3」が紐づけられる。また、「ファームウェア」に対して脅威が発生した場合、その脅威を受け入れてしまう可能性が低く、且つ、それらの脅威に対して十分な対策が実施されているものとする。この場合、「ファームウェア」に対して「脅威レベル:1」および「脆弱性レベル:1」が紐づけられる。なお、脅威/脆弱性分析部11は、例えば、ソースコード2を修正する作業者がコンピュータを操作することで実現される。
【0025】
リスク評価部12は、情報資産を構成する複数の情報資産要素それぞれについてリスク値を計算する。このとき、リスク評価部12は、情報資産リスト3により指定されている重要度、脅威レベル定義4aにより定義されている脅威レベル、および脆弱性レベル定義4bにより定義されている脆弱性レベルに基づいて、各情報資産要素のリスク値を計算する。この実施例では、各情報資産要素について、重要度、脅威レベル、脆弱性レベルを掛け合わせることでリスク値が計算される。
【0026】
図5は、リスク評価部12により得られるリスク評価結果22の一例を示す。
図5に示すリスク評価結果22においては、例えば、「認証情報」は、重要な情報なので重要度が「3」であり、脅威が発生する可能性が高いので脅威レベルが「3」であり、攻撃に対する対策が実施されておらず脆弱なので脆弱性レベルが「3」である。よって、「認証情報」のリスク値は、3つの数値を掛け合わせることで「27」である。また、「ファームウェア」は、重要な情報ではないので重要度が「1」であり、脅威が発生する可能性が低いので脅威レベルが「1」であり、攻撃に対する対策が実施されていて脆弱ではないので脆弱性レベルが「1」である。したがって、「ファームウェア」のリスク値は、3つの数値を掛け合わせることで「1」である。このように、リスク値は、情報資産としての価値(即ち、重要度)が高いほど、及び/又は、脅威が発生する可能性が高いほど、及び/又は、攻撃が成功する可能性が高いほど、大きな値となる。
【0027】
なお、
図5に示す実施例では、重要度、脅威レベル、および脆弱性レベルを掛け合わせることでリスク値が計算されるが、本発明の実施形態はこの方式に限定されるものではない。例えば、重要度、脅威レベル、および脆弱性レベルを足し合わせることでリスク値を計算してもよい。また、重要度、脅威レベル、脆弱性レベルのうちの任意の1つまたは2つの数値に基づいてリスク値を計算してもよい。
【0028】
構造解析部13は、ソースコード2を解析することにより、情報資産を構成する複数の情報資産要素のうちで、ソースコード2の中のプログラムモジュールがアクセスする情報資産要素を検出する。なお、情報資産を構成する情報資産要素は、情報資産リスト3に登録されている。
【0029】
図6は、構造解析部13の処理の一例を示すフローチャートである。このフローチャートの処理は、ソースコード修正支援装置1にソースコード2が与えられたときに実行される。また、このフローチャートの処理が実行される前に、情報資産リスト3が作成されているものとする。
【0030】
S1において、構造解析部13は、ソースコード2を取得する。なお、ソフトウェアの派生開発を行う場合は、改版されたソースコードを取得してもよい。S2において、構造解析部13は、情報資産リスト3を取得する。情報資産リスト3は、
図2に示すように、各情報資産要素についてのオブジェクト情報を含む。
【0031】
S3において、構造解析部13は、S1で取得したソースコード2を解析する。このとき、構造解析部13は、情報資産リスト3に登録されている各情報資産要素についてのオブジェクト情報(AuthInfo、ConfData、LogInfo、Enckeyなど)をキーとしてソースコード2を解析する。例えば、「認証情報」について解析するときは、構造解析部13は、ソースコード2において文字列「AuthInfo」が現れる箇所を検索する。「設定情報」について解析するときは、構造解析部13は、ソースコード2において文字列「ConfData」が現れる箇所を検索する。そして、構造解析部13は、検索された情報資産要素(すなわち、オブジェクト)にアクセスするプログラムモジュールを検出する。なお、プログラムモジュールは、特に限定されるものではないが、例えば、1個の関数に対応する1まとまりの記述または処理を意味する。また、「アクセスする」は、「参照する」を含むものとする。
【0032】
ここで、
図7~
図11を参照して、構造解析部13によるソースコードの解析処理の一例を説明する。すなわち、
図7~
図11に示すソースコード2が構造解析部13に与えられるものとする。そうすると、構造解析部13は、各情報資産要素についてのオブジェクト情報(AuthInfo、ConfData、LogInfo、Enckeyなど)をキーとしてソースコード2を解析する。
【0033】
例えば、
図9に示すように、オブジェクトを表す文字列「AuthInfo」が検索されたときは、構造解析部13は、このオブジェクトにアクセスするプログラムモジュールを検出する。この例では、プログラムモジュール「Func10」および「Func11」が検出される。また、
図10~
図11に示すように、オブジェクトを表す文字列「ConfData」が検索されたときは、プログラムモジュール「Func30」「Func50」および「Func60」が検出される。
【0034】
S4において、構造解析部13は、S3の検索結果を表す情報資産アクセスモジュールリストを作成して出力する。情報資産アクセスモジュールリスト23には、
図12に示すように、ソースコード2の中で使用される各オブジェクトに対して、対応するオブジェクトにアクセスするプログラムモジュールが記録されている。この実施例では、例えば、プログラムモジュール「Func10」「Func11」が情報資産要素「認証情報」にアクセスしている。即ち、情報資産要素「認証情報」がプログラムモジュール「Func10」「Func11」によりアクセスされている。また、プログラムモジュール「Func30」「Func50」「Func60」が情報資産要素「設定情報」にアクセスしている。即ち、情報資産要素「設定情報」がプログラムモジュール「Func30」「Func50」「Func60」によりアクセスされている。
【0035】
判定部14は、リスク評価部12により作成されるリスク評価結果22および構造解析部13により作成される情報資産アクセスモジュールリスト23に基づいて、ソースコード2の中に記述されている各プログラムモジュールに対する対処方針を判定する。このとき、判定部14は、各プログラムモジュールがアクセスする情報資産要素のリスク値に基づいて、プログラムモジュールに対する対処方針が判定される。
【0036】
図13は、判定部14の処理の一例を示すフローチャートである。このフローチャートの処理は、例えば、ソースコード修正支援装置1にソースコード2が与えられたときに実行される。なお、このフローチャートの処理が実行される前に、リスク評価結果22および情報資産アクセスモジュールリスト23が作成されているものとする。
【0037】
S11において、判定部14は、情報資産リスト3を取得する。S12において、判定部14は、リスク評価部12により作成されるリスク評価結果22を取得する。S13において、判定部14は、構造解析部13により作成される情報資産アクセスモジュールリスト23を取得する。この後、情報資産アクセスモジュールリスト23に書き込まれている各プログラムモジュールについてS14~S17の処理が実行される。すなわち、判定部14は、情報資産アクセスモジュールリスト23に書き込まれているプログラムモジュールを1つずつ選択してS14~S17の処理を実行する。以下の記載では、S14~S17の処理が実行されるプログラムモジュールを「処理対象プログラムモジュール」と呼ぶことがある。
【0038】
S14において、判定部14は、処理対象プログラムモジュールに対応する情報資産要素のリスク値を取得する。具体的には、処理対象プログラムモジュールがアクセスする情報資産要素に対して計算されているリスク値が取得される。例えば、処理対象プログラムモジュールとして、
図12に示す情報資産アクセスモジュールリスト23からプログラムモジュール「Func10」が選択されるものとする。ここで、「Func10」は「AuthInfo」にアクセスしている。この場合、判定部14は、
図2に示す情報資産リスト3を参照することにより、処理対象プログラムモジュールが「認証情報」にアクセスしていることを認識する。また、判定部14は、
図5に示すリスク評価結果22を参照することにより、「認証情報」のリスク値が「27」であることを認識する。したがって、判定部14は、処理対象プログラムモジュールに対応するリスク値として「27」を取得する。
【0039】
S15において、判定部14は、処理対象プログラムモジュールに対応する情報資産要素のリスク値と所定の閾値とを比較する。そして、リスク値が閾値より大きいときは、判定部14は、処理対象プログラムモジュールのリスクが高いので、信頼性の高い言語による記述に置き換えることが好ましいと判定する。この場合、判定部14は、S16において、処理対象プログラムモジュールを
図14(a)に示す他言語置換え対象リスト24に追加する。他言語置換え対象リスト24は、信頼性の高い他の言語による記述に置き換えることが必要なプログラムモジュールを登録するためのリストである。
【0040】
リスク値が閾値以下であるときは、判定部14は、処理対象プログラムモジュールのリスクが低いので、信頼性の高い言語による記述に置き換える必要性が低いと判定する。この場合、判定部14は、S17において、処理対象プログラムモジュールを
図14(b)に示す置換え対象外リスト25に追加する。置換え対象外リスト25は、信頼性の高い他の言語による記述に置き換える必要性が低いプログラムモジュールを登録するためのリストである。
【0041】
例えば、プログラムモジュール「Func10」に対応するリスク値は、「27」である。ここで、信頼性の高い言語による記述に置き換えるか否かを判定するための閾値が「10」であるものとする。この場合、プログラムモジュール「Func10」に対応するリスク値は閾値より大きい。即ち、プログラムモジュール「Func10」は、信頼性の高い言語による記述に置き換えることが好ましいと判定される。よって、プログラムモジュール「Func10」は他言語置換え対象リスト24に追加される。これに対して、例えば、プログラムモジュール「Func61」は、「動作ログ」にアクセスしているので、対応するリスク値は「4」である。この場合、プログラムモジュール「Func61」に対応するリスク値は閾値より小さい。即ち、プログラムモジュール「Func61」は、信頼性の高い言語による記述に置き換える必要がないと判定される。よって、プログラムモジュール「Func61」は置換え対象外リスト25に追加される。
【0042】
なお、1つのプログラムモジュールが複数の情報資産要素にアクセスするケースでは、そのプログラムモジュールに対して複数の異なるリスク値が対応づけられることがある。この場合は、このプログラムモジュールは、最も大きいリスク値に基づいて、信頼性の高い言語による記述に置き換えるか否かを判定することが好ましい。
【0043】
他言語置換え対象リスト24は、リスク値が閾値を超えるプログラムモジュールへの対処方針として、第1の言語(C/C++)よりも信頼性の高い第2の言語(Rust)による記述に置き換えることを指示する情報の一例である。また、
図13に示す手順は1つの実施例であり、本発明の実施形態はこの手順に限定されるものではない。例えば、
図13に示す手順では、リスク値に応じて2つの対処方針のいずれかが判定されるが、リスク値に応じて3以上の対処方針のいずれかを判定してもよい。この場合、例えば、リスク値が10を超えていれば他の言語による記述に置き換え、リスク値が5~10であれば現在の言語のまま記述を修正し、リスク値が5より小さければ何もしないようにしてもよい。
【0044】
このように、ソースコード修正支援装置1は、情報資産を構成する各情報資産要素の重要度、脅威レベル、および脆弱性レベルに基づいて、ソースコード2の中の各プログラムモジュールのリスクを分析する。このとき、各プログラムモジュールに対して、セキュリティ上のリスクの深刻度(または、信頼性の高いプログラミング言語による記述に置き換える必要性の程度)を表すリスク値が計算される。そして、ソースコード修正支援装置1は、このリスク値を用いて各プログラムモジュールをグループ化することにより、他言語置換え対象リスト24および置換え対象外リスト25を作成する。この後、他言語置換え対象リスト24および置換え対象外リスト25は、
図1に示すソースコード修正装置5に与えられる。
【0045】
ソースコード修正装置5は、ソースコード修正支援装置1により作成された他言語置換え対象リスト24および置換え対象外リスト25に基づいてソースコード2を修正する。そして、試験装置6は、ソースコード修正装置5により修正されたソースコード2を実行することで動作確認を行う。なお、ソースコード修正装置5および試験装置6は、たとえば、ソースコード2を修正する作業者がコンピュータを操作することで実現される。
【0046】
図15は、ソースコード修正装置5および試験装置6による処理の一例を示すフローチャートである。この実施例では、S21において、ソースコード修正装置5は、ソースコード2を取得する。また、ソースコード修正装置5は、S22およびS25において、ソースコード修正支援装置1により作成された他言語置換え対象リスト24および置換え対象外リスト25をそれぞれ取得する。
【0047】
S23~S24の処理は、他言語置換え対象リスト24に登録されている各プログラムモジュールに対して実行される。即ち、S23において、ソースコード修正装置5は、他言語置換え対象リスト24に登録されている各プログラムモジュールを他の言語による記述に置き換える。以下の記載では、これらのプログラムモジュールを「置換え対象プログラムモジュール」と呼ぶことがある。
【0048】
例えば、ソースコード2がC言語で記述されているときに、各置換え対象プログラムモジュールは、Rust言語による記述に置き換えられる。このとき、ソースコード2を修正する作業者が、ソースコード修正装置5を実現するコンピュータを用いて手作業でコードを書き換えてもよい。あるいは、ソースコード修正装置5がC言語からRust言語への変換機能を有するときは、ソースコード修正装置5により置換え対象プログラムモジュールがRust言語の記述に置き換えられる。この場合、ソースコード修正装置5は、置換え対象プログラムモジュールをRustによる記述に変換する変換部として動作する。また、ソースコード修正支援装置1およびソースコード修正装置5は、ソースコード修正システムを構成する。なお、プログラムコード全体をソフトウェア処理で他の言語に変換することは容易ではないが、一部の記述を他の言語に変換することは既存の技術で可能である。
【0049】
S24において、試験装置6は、他の言語に置き換えられた記述をコンパイルして実行する。すなわち、置換え対象プログラムモジュールが正しく他の言語に置き換えられたか否かについての試験が行われる。そして、試験結果は、ソースコード修正装置5にフィードバックされる。このとき、置換え対象プログラムモジュールが正しく他の言語に置き換えられていなければ、ソースコード修正装置5においてその記述がさらに修正される。これにより、他言語置換え対象リスト24に登録されている各置換え対象プログラムモジュールが正しく他の言語に置き換えられる。
【0050】
S26~S27の処理は、置換え対象外リスト25に登録されている各プログラムモジュールに対して実行される。すなわち、ソースコード修正装置5は、S26において、置換え対象外リスト25に登録されている各プログラムモジュールを、ソースコード2の言語のまま修正する。以下の記載では、これらのプログラムモジュールを「置換え対象外プログラムモジュール」と呼ぶことがある。
【0051】
例えば、ソースコード2がC言語で記述されているときは、置換え対象外プログラムモジュールは、C言語のままその内容が修正される。このとき、ソースコード2を修正する作業者が、ソースコード修正装置5を実現するコンピュータを用いて手作業でコードを修正してもよい。或いは、ソースコード修正装置5は、置換え対象外プログラムモジュールを修正することなく、置換え対象外プログラムモジュールが修正されてないことを表すレポートを出力してもよい。
【0052】
S27において、試験装置6は、修正後の記述をコンパイルして実行する。すなわち、置換え対象外プログラムモジュールが正しく修正されたか否かについて試験が行われる。そして、この試験結果は、ソースコード修正装置5にフィードバックされる。このとき、置換え対象外プログラムモジュールが正しく修正されていなければ、ソースコード修正装置5においてその記述がさらに修正される。これにより、置換え対象外リスト25に登録されている各置換え対象外プログラムモジュールが正しく修正される。なお、S26において置換え対象外プログラムモジュールを修正しないときは、ソースコード修正装置5はS27の処理を実行しなくてもよい。
【0053】
S28において、試験装置6は、他の言語に置き換えられた記述および修正された記述をソースコード2に結合する。そして、試験装置6は、他の言語に置き換えられた記述および修正された記述を含むプログラムを試験する。
【0054】
このように、ソースコード修正支援装置1は、情報資産を構成する各情報資産要素の重要度、脅威レベル、および脆弱性レベルに基づいて、ソースコード2の中の各プログラムモジュールのリスクを分析する。このとき、各プログラムモジュールに対して、セキュリティ上のリスクの深刻度(または、信頼性の高いプログラミング言語による記述に置き換える必要性の程度)を表すリスク値が計算される。そして、リスク値が高い情報資産要素にアクセスするプログラムモジュールが検出される。
【0055】
よって、ソースコード2を修正する作業者は、ソースコードのサイズが大きい場合であっても、セキュリティ上のリスクの深刻度が高いプログラムモジュールを容易に認識できる。すなわち、コストまたは作業量の観点でソースコード全体を他の言語で書き換えることが困難なケースであっても、セキュリティ上のリスクの深刻度が高いプログラムモジュールを確実に信頼性の高いプログラミング言語による記述に置き換えることができる。加えて、脆弱性を含む箇所を検出する静的解析ツール等により検出されなかったプログラムモジュールであっても、情報資産の重要度、脅威レベル、および脆弱性レベルの観点でリスクの高い場合には、本発明の実施形態により検出される。したがって、既存のソフトウェアを利用しながら脆弱性を十分に低減させることができる。これにより、コストまたは作業量の制限がある場合であっても、信頼性が低い既存のプログラムのリスクを十分に小さくできる。
【0056】
<ハードウェア構成>
図16は、ソースコード修正支援装置1のハードウェア構成の一例を示す。ソースコード修正支援装置1は、プロセッサ101、メモリ102、記憶装置103、入出力デバイス104、記録媒体読取り装置105、および通信インタフェース106を備えるコンピュータ100により実現される。
【0057】
プロセッサ101は、記憶装置103に保存されている修正支援プログラムを実行することにより、ソースコード修正支援装置1の動作を制御する。修正支援プログラムは、
図6、
図13、および
図15に示すフローチャートの手順を記述したプログラムコードを含む。よって、プロセッサ101がこのプログラムを実行することで、
図1に示すリスク評価部12、構造解析部13、および判定部14の機能が提供される。メモリ102は、プロセッサ101の作業領域として使用される。記憶装置103は、上述した修正支援プログラムおよび他のプログラムを保存する。
【0058】
入出力デバイス104は、キーボード、マウス、タッチパネル、マイクなどの入力デバイスを含む。また、入出力デバイス104は、表示装置、スピーカーなどの出力デバイスを含む。記録媒体読取り装置105は、記録媒体110に記録されているデータおよび情報を取得できる。記録媒体110は、コンピュータ100に着脱可能なリムーバブル記録媒体である。また、記録媒体110は、例えば、半導体メモリ、光学的作用で信号を記録する媒体、または磁気的作用で信号を記録する媒体により実現される。なお、修正支援プログラムは、記録媒体110からコンピュータ100に与えられてもよい。通信インタフェース106は、ネットワークに接続する機能を提供する。なお、修正支援プログラムがプログラムサーバ120に保存されているときは、コンピュータ100は、プログラムサーバ120から修正支援プログラムを取得してもよい。
【0059】
図16に示すコンピュータ100は、ソースコード修正支援装置1の機能に加えて、ソースコード修正装置5、および試験装置6の機能を提供してもよい。また、ソースコード修正支援装置1、ソースコード修正装置5、および試験装置6は、別々のコンピュータで実現してもよい。
【符号の説明】
【0060】
1 ソースコード修正支援装置
2 ソースコード
3 情報資産リスト
4a 脅威レベル定義
4b 脆弱性レベル定義
5 ソースコード修正装置
6 試験装置
11 脅威/脆弱性分析部
12 リスク評価部
13 構造解析部
14 判定部
21 脅威レベル/脆弱性レベル紐づけ情報
22 リスク評価結果
23 情報資産アクセスモジュールリスト
24 他言語置換え対象リスト
25 置換え対象外リスト
100 コンピュータ
101 プロセッサ