IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

特開2024-168862情報処理プログラム、情報処理方法および情報処理装置
<>
  • 特開-情報処理プログラム、情報処理方法および情報処理装置 図1
  • 特開-情報処理プログラム、情報処理方法および情報処理装置 図2
  • 特開-情報処理プログラム、情報処理方法および情報処理装置 図3
  • 特開-情報処理プログラム、情報処理方法および情報処理装置 図4
  • 特開-情報処理プログラム、情報処理方法および情報処理装置 図5
  • 特開-情報処理プログラム、情報処理方法および情報処理装置 図6
  • 特開-情報処理プログラム、情報処理方法および情報処理装置 図7
  • 特開-情報処理プログラム、情報処理方法および情報処理装置 図8
  • 特開-情報処理プログラム、情報処理方法および情報処理装置 図9
  • 特開-情報処理プログラム、情報処理方法および情報処理装置 図10
  • 特開-情報処理プログラム、情報処理方法および情報処理装置 図11
  • 特開-情報処理プログラム、情報処理方法および情報処理装置 図12
  • 特開-情報処理プログラム、情報処理方法および情報処理装置 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024168862
(43)【公開日】2024-12-05
(54)【発明の名称】情報処理プログラム、情報処理方法および情報処理装置
(51)【国際特許分類】
   G06F 8/65 20180101AFI20241128BHJP
   G06F 21/51 20130101ALI20241128BHJP
   G06F 21/57 20130101ALI20241128BHJP
【FI】
G06F8/65
G06F21/51
G06F21/57 370
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2023085881
(22)【出願日】2023-05-25
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】藤井 泰希
(72)【発明者】
【氏名】野田 敏達
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376CA48
(57)【要約】
【課題】優先適用対象のパッチを効率的に判断可能にする。
【解決手段】処理部は、プログラムのロード時に、プログラムに含まれる複数の関数それぞれと当該関数に対応する実行コードが配置されるメモリブロックとを対応付ける対応情報を作成する。処理部は、プログラムの実行コードに関連する複数のメモリブロックをアクセス禁止に設定する。処理部は、プログラムの実行時に、アクセス禁止に設定されたメモリブロックへのアクセスを検出すると、当該メモリブロックのアクセス禁止を解除する。処理部は、アクセス禁止が解除されたメモリブロックを示すブロック情報を取得する。処理部は、複数の関数のうち、脆弱性情報を基に特定される第1関数を示す情報と対応情報とブロック情報とに基づいて、プログラムに対し、当該脆弱性情報で示される脆弱性に関するパッチを優先的な適用の対象とするか否かを判断する。
【選択図】図4
【特許請求の範囲】
【請求項1】
コンピュータに、
プログラムのロード時に、前記プログラムに含まれる複数の関数それぞれと当該関数に対応する実行コードが配置されるメモリブロックとを対応付ける対応情報を作成し、
前記プログラムの実行コードに関連する複数のメモリブロックをアクセス禁止に設定し、
前記プログラムの実行時に、アクセス禁止に設定された前記メモリブロックへのアクセスを検出すると、当該メモリブロックの前記アクセス禁止を解除し、
前記アクセス禁止が解除された前記メモリブロックを示すブロック情報を取得し、
前記複数の関数のうち、脆弱性情報を基に特定される第1関数を示す情報と前記対応情報と前記ブロック情報とに基づいて、前記プログラムに対し、前記脆弱性情報で示される脆弱性に関するパッチを優先的な適用の対象とするか否かを判断する、
処理を実行させる情報処理プログラム。
【請求項2】
前記アクセス禁止に設定された前記メモリブロックへのアクセスを例外として検出する、
処理を前記コンピュータに実行させる請求項1記載の情報処理プログラム。
【請求項3】
前記対応情報に基づいて、前記第1関数に対応する実行コードが配置される第1メモリブロックを特定し、前記ブロック情報に基づいて、前記第1メモリブロックの前記アクセス禁止が解除されているか否かを判定し、
前記第1メモリブロックの前記アクセス禁止が解除されている場合、前記パッチを優先的な適用の対象とすると判断し、前記第1メモリブロックの前記アクセス禁止が解除されていない場合、前記パッチを優先的な適用の対象外とすると判断する、
処理を前記コンピュータに実行させる請求項1記載の情報処理プログラム。
【請求項4】
前記コンピュータの停止または前記プログラムの実行停止の際に、揮発性の第1記憶装置に記憶される前記ブロック情報を不揮発性の第2記憶装置に保存し、
前記コンピュータの起動または前記プログラムの実行開始の際に、前記第2記憶装置に保存される前記ブロック情報を読み出し、前記ブロック情報を前記第1記憶装置に格納する、
処理を前記コンピュータに実行させる請求項1記載の情報処理プログラム。
【請求項5】
前記脆弱性情報は、第1プログラム部品に対して発見された脆弱性を示し、
前記脆弱性情報、および、前記複数の関数それぞれと当該関数で使用されるプログラム部品との対応関係を示す情報に基づいて、前記第1プログラム部品が使用される前記第1関数を特定する、
処理を前記コンピュータに実行させる請求項1記載の情報処理プログラム。
【請求項6】
コンピュータが、
プログラムのロード時に、前記プログラムに含まれる複数の関数それぞれと当該関数に対応する実行コードが配置されるメモリブロックとを対応付ける対応情報を作成し、
前記プログラムの実行コードに関連する複数のメモリブロックをアクセス禁止に設定し、
前記プログラムの実行時に、アクセス禁止に設定された前記メモリブロックへのアクセスを検出すると、当該メモリブロックの前記アクセス禁止を解除し、
前記アクセス禁止が解除された前記メモリブロックを示すブロック情報を取得し、
前記複数の関数のうち、脆弱性情報を基に特定される第1関数を示す情報と前記対応情報と前記ブロック情報とに基づいて、前記プログラムに対し、前記脆弱性情報で示される脆弱性に関するパッチを優先的な適用の対象とするか否かを判断する、
情報処理方法。
【請求項7】
プログラムに含まれる複数の関数それぞれと当該関数に対応する実行コードが配置されるメモリブロックとを対応付ける対応情報を記憶する記憶部と、
前記プログラムのロード時に前記対応情報を作成し、前記プログラムの実行コードに関連する複数のメモリブロックをアクセス禁止に設定し、前記プログラムの実行時に、アクセス禁止に設定された前記メモリブロックへのアクセスを検出すると、当該メモリブロックのアクセス禁止を解除し、前記アクセス禁止が解除された前記メモリブロックを示すブロック情報を取得し、前記複数の関数のうち、脆弱性情報を基に特定される第1関数を示す情報と前記対応情報と前記ブロック情報とに基づいて、前記プログラムに対し、前記脆弱性情報で示される脆弱性に関するパッチを優先的な適用の対象とするか否かを判断する処理部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は情報処理プログラム、情報処理方法および情報処理装置に関する。
【背景技術】
【0002】
ソフトウェアに脆弱性が発見されると、ソフトウェアの開発元などにより、脆弱性対策のためのパッチの提供が行われる。そこで、パッチの適用によりソフトウェアを更新するための技術が考えられている。
【0003】
例えば、アプリケーションソフトウェアの起動回数を示す起動情報に基づいて当該アプリケーションソフトウェアを更新すべきか否かを自動判定し、更新条件を満たすものであるときには、最新のアプリケーションソフトウェアに自動更新する方法の提案がある。
【0004】
また、コンピュータなどのエンドポイントにおいて、実行可能コンテンツの使用を監視し、実行可能コンテンツの使用頻度を示すスコアを計算し、当該スコアに基づいて実行可能コンテンツに対するパッチ適用を選択的に実行する方法の提案がある。
【0005】
また、計算器によって、顧客別のデータセットの形態の、ソフトウェア製品のライセンスオプションの使用に関する動作特性数を収集する方法の提案がある。提案の方法では、計算器によって、このデータセットを評価することによって、アップデートを必要としているソフトウェア製品のコンポーネントを求め、アップデートを実行する。
【0006】
なお、透過的にパッチが適用されたシードデータテーブルを使用してデータベース環境をオンラインでアップグレードするシステムの提案がある。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2004-355563号公報
【特許文献2】米国特許出願公開第2012/0054729号明細書
【特許文献3】特開2015-141719号公報
【特許文献4】米国特許出願公開第2014/0101645号明細書
【発明の概要】
【発明が解決しようとする課題】
【0008】
ソフトウェアのプログラムに含まれる一部の関数に関連するパッチの提供が行われることがある。しかし、パッチの適用時には、これまで動作していたプログラムが動作しなくなる可能性があり、提供されるパッチを無暗に適用することは好ましくない。
【0009】
そこで、例えばデバッガなどによりプログラム実行時に関数の呼び出しのたびに当該関数の呼び出し履歴を記録し、新たな脆弱性の情報が取得された際には、当該呼び出し履歴を基に、実際に実行された関数に関連するパッチのみを至急適用する方法が考えられる。
【0010】
しかし、この方法では、関数の呼び出しのたびに呼び出し履歴が記録される。このため、呼び出し履歴の記録のための処理負荷がプログラムの実行速度に影響を及ぼしたり、呼び出し履歴を保持するためのメモリ消費量が多くなったりするという問題がある。
【0011】
1つの側面では、本発明は、優先適用対象のパッチを効率的に判断可能にすることを目的とする。
【課題を解決するための手段】
【0012】
1つの態様では、情報処理プログラムが提供される。情報処理プログラムは、コンピュータに次の処理を実行させる。コンピュータは、プログラムのロード時に、プログラムに含まれる複数の関数それぞれと当該関数に対応する実行コードが配置されるメモリブロックとを対応付ける対応情報を作成する。コンピュータは、プログラムの実行コードに関連する複数のメモリブロックをアクセス禁止に設定する。コンピュータは、プログラムの実行時に、アクセス禁止に設定されたメモリブロックへのアクセスを検出すると、当該メモリブロックのアクセス禁止を解除する。コンピュータは、アクセス禁止が解除されたメモリブロックを示すブロック情報を取得する。コンピュータは、複数の関数のうち、脆弱性情報を基に特定される第1関数を示す情報と対応情報とブロック情報とに基づいて、プログラムに対し、脆弱性情報で示される脆弱性に関するパッチを優先的な適用の対象とするか否かを判断する。
【0013】
また、1つの態様では、コンピュータによって実行される情報処理方法が提供される。また、1つの態様では、記憶部と処理部とを有する情報処理装置が提供される。
【発明の効果】
【0014】
1つの側面では、優先適用対象のパッチを効率的に判断できる。
【図面の簡単な説明】
【0015】
図1】第1の実施の形態の情報処理装置を説明する図である。
図2】第2の実施の形態の情報処理装置のハードウェア例を示す図である。
図3】情報処理装置の機能例を示す図である。
図4】関数テーブルおよびアクセス管理テーブルの例を示す図である。
図5】プログラム実行時処理の例を示すフローチャートである。
図6】パッチ適用判定処理の例を示すフローチャートである。
図7】再起動前処理の例を示すフローチャートである。
図8】再起動後プログラム実行時処理の例を示すフローチャートである。
図9】関数テーブルの設定例を示す図である。
図10】アクセス管理テーブルの更新例を示す図である。
図11】パッチ適用判定の例を示す図である。
図12】脆弱性情報に関連する関数の特定例を示す図である。
図13】比較例を示す図である。
【発明を実施するための形態】
【0016】
以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0017】
図1は、第1の実施の形態の情報処理装置を説明する図である。
情報処理装置10は、プログラムに対して優先的に適用するパッチの判定を行う。情報処理装置10は、コンピュータと言われてもよい。情報処理装置10は、記憶部11および処理部12を有する。
【0018】
記憶部11は、RAM(Random Access Memory)などの揮発性の半導体メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性ストレージでもよい。処理部12は、例えば、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、DSP(Digital Signal Processor)などのプロセッサである。ただし、処理部12は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路を含んでもよい。プロセッサは、RAMなどのメモリ(記憶部11でもよい)に記憶されたプログラムを実行する。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【0019】
処理部12は、プログラムのロード時に、対応情報11aを作成し、記憶部11に格納する。対応情報11aはプログラムに含まれる複数の関数それぞれと当該関数に対応する実行コードが配置されるメモリブロックとを対応付ける情報である。実行コードは、実行可能コードやオブジェクトコードなどとも言われる。メモリブロックは、プログラムのロード先となるRAMなどのメモリの領域の一単位である。例えば、対応情報11aは、関数名とメモリブロックの識別情報との対応関係を保持する。具体的には、対応情報11aは、関数名「関数F1」とメモリブロックの識別情報「#1」との対応関係を含む。ここで、関数名「関数F1」の関数を単に関数F1と表記する。また、識別情報「#1」のメモリブロックを、単にメモリブロック#1と表記する。また、対応情報11aは、関数F2とメモリブロック#1との対応関係や関数F3とメモリブロック#2との対応関係も含む。
【0020】
処理部12は、プログラムの実行コードに関連する複数のメモリブロックをアクセス禁止に設定する。処理部12は、プログラムの実行時に、アクセス禁止に設定されたメモリブロックへのアクセスを検出すると、当該メモリブロックに対するアクセス禁止を解除する。ここで、処理部12は、アクセス禁止に設定されたメモリブロックへのアクセスを、OS(Operating System)における例外として検出可能である。また、当該メモリブロックへのアクセス禁止が一旦解除されると、当該メモリブロックへのアクセスが可能となり、当該メモリブロックへのアクセス禁止の解除が維持された状態でプログラムの処理が継続される。処理部12は、アクセス禁止が解除されたメモリブロックを示すブロック情報を取得する。
【0021】
ここで、ブロック情報には次のような例が考えられる。処理部12は、プログラムの実行コードに関連する複数のメモリブロックをアクセス禁止に設定すると、複数のメモリブロックそれぞれに対してアクセス禁止フラグを「1」(または「TRUE」)に設定したブロック情報11b1を生成する。ここで、アクセス禁止フラグ=「1」(または「TRUE」)はアクセス禁止であることを示す。アクセス禁止フラグ=「0」(または「FALSE」)はアクセス禁止が解除されていることを示す。
【0022】
処理部12は、プログラム実行時に、あるメモリブロックに対するアクセスを検出すると、ブロック情報11b1における当該メモリブロックのアクセス禁止フラグを「1」から「0」に更新する。ブロック情報11b2は、プログラム実行時にメモリブロック#1に対するアクセスを検出し、メモリブロック#1のアクセス禁止フラグ「1」が「0」に更新された場合を例示する。この場合、処理部12は、ブロック情報11b2に基づいて、アクセス禁止が解除されたメモリブロック#1を特定可能である。
【0023】
処理部12は、複数の関数のうち、脆弱性情報を基に特定される第1関数を示す情報と対応情報11aとブロック情報11b2とに基づいて、プログラムに対し、脆弱性情報で示される脆弱性に関するパッチを優先的な適用の対象とするか否かを判断する。ここで、脆弱性情報は、あるライブラリやコンポーネントなどのプログラム部品に関する脆弱性を示す情報である。脆弱性情報は、例えばネットワークを介してダウンロードされる。パッチは、脆弱性が発見されたプログラム部品の脆弱性を修正するためのデータであり、修正プログラムなどとも言われる。
【0024】
例えば、脆弱性情報D1において、あるプログラム部品の脆弱性が示されており、当該プログラム部品が関数F2で使用されているとする。この場合、処理部12は、脆弱性情報D1を基に特定される関数F2を示す情報を取得する。関数F2は、第1関数の一例である。脆弱性情報D1に基づく関数F2の特定は、処理部12により行われてもよいし、ユーザにより行われてもよい。例えば、プログラム部品と当該プログラム部品を使用する関数との対応関係を示す情報を記憶部11に予め格納しておくことで、処理部12は、当該情報と脆弱性情報D1とに基づき、脆弱性情報D1で示されるプログラム部品から関数F2を特定し得る。
【0025】
処理部12は、対応情報11aに基づいて、関数F2に対応するメモリブロック#1を特定する。処理部12は、ブロック情報11b2に基づいて、メモリブロック#1に対応するアクセス禁止フラグが「0」であることを特定する。すると、関数F2が実行された可能性があることから脆弱性のあるコードが実行された可能性があるため、処理部12は、脆弱性情報D1で示される脆弱性に関するパッチを優先的な適用の対象とする。ここで、プログラムの実行実績において関数F2が実行された可能性がある場合、今後も関数F2が実行される可能性が高い。そして、関数F2が実行されることにより脆弱性による被害が発生する可能性が、実行されない関数に比べて高い。よって、脆弱性情報D1で示される脆弱性に関するパッチは至急適用する必要性が高いことになる。
【0026】
また、例えば脆弱性情報D2において、あるプログラム部品の脆弱性が示されており、当該プログラム部品が関数F3で使用されているとする。この場合、処理部12は、脆弱性情報D2を基に特定される関数F3を示す情報を取得する。関数F3は、第1関数の一例である。前述のように、脆弱性情報D2に基づく関数F3の特定は、処理部12により行われてもよいし、ユーザにより行われてもよい。
【0027】
処理部12は、対応情報11aに基づいて、関数F3に対応するメモリブロック#2を特定する。処理部12は、ブロック情報11b2に基づいて、メモリブロック#2に対応するアクセス禁止フラグが「1」であることを特定する。すると、関数F3は実行されていないため、処理部12は、脆弱性情報D2で示される脆弱性に関するパッチを優先的な適用の対象外とする。ここで、プログラムの実行実績において関数F3が実行されていない場合、今後も関数F3が実行されない可能性が高い。したがって、関数F3に含まれる脆弱性による被害が発生する可能性が、実行された可能性のある関数に比べて低い。よって、脆弱性情報D2で示される脆弱性に関するパッチは、至急適用する必要性が低く、例えばプログラムの動作への影響がないことが確認されてから適用されてもよいものである。
【0028】
例えば、処理部12は、脆弱性情報D1に対するパッチを優先的な適用の対象とし、脆弱性情報D2に対するパッチを優先的な適用の対象外とすることを示す情報を出力してもよい。ユーザは、当該情報を参照することで、該当のプログラムに対して脆弱性情報D1に対するパッチを優先的に適用すべきであること、および、脆弱性情報D2に対するパッチを優先的に適用しなくてもよいことを確認できる。この場合、ユーザは、該当のプログラムに対して脆弱性情報D1に対するパッチを優先して適用し、脆弱性情報D2に対するパッチを当面の間は適用しない。
【0029】
以上説明したように、情報処理装置10によれば、プログラムのロード時に、プログラムに含まれる複数の関数それぞれと当該関数に対応する実行コードが配置されるメモリブロックとを対応付ける対応情報11aが作成される。プログラムの実行コードに関連する複数のメモリブロックがアクセス禁止に設定される。プログラムの実行時に、アクセス禁止に設定されたメモリブロックへのアクセスが検出されると、当該メモリブロックのアクセス禁止が解除される。アクセス禁止が解除されたメモリブロックを示すブロック情報11b2が取得される。複数の関数のうち、脆弱性情報から特定される第1関数を示す情報と対応情報11aとブロック情報11b2とに基づいて、プログラムに対し、当該脆弱性情報で示される脆弱性に関するパッチを優先的な適用の対象とするか否かが判断される。
【0030】
これにより、情報処理装置10は、優先適用対象のパッチを効率的に判断できる。プログラムの実行時に、1つのメモリブロックに対するアクセス禁止の検知、および、アクセス解除が発生する回数は高々1回である。このため、情報処理装置10は、プログラムの実行に対する影響を抑えて、実際に実行された可能性がある関数を特定可能である。したがって、情報処理装置10は、例えば実運用中のプログラムに対する脆弱性への対策において、至急適用すべきパッチを絞り込むために有用である。また、情報処理装置10は、パッチ適用判定の処理に用いる情報量を、対応情報11aおよびブロック情報11b1(またはブロック情報11b2)に相当する情報量に抑えられる。このため、関数の呼び出しのたびに当該関数の呼び出し履歴を記録する方法に比べて、メモリ消費量が低減される。
【0031】
情報処理装置10は、こうして優先適用対象のパッチと優先適用対象外のパッチとを判別することで、プログラムに対してパッチが無暗に適用されることを回避できる。これにより、情報処理装置10は、パッチ適用に伴ってプログラムが動作しなくなるリスクを低減できる。
【0032】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の情報処理装置のハードウェア例を示す図である。
【0033】
情報処理装置100は、プロセッサ101、RAM102、HDD103、GPU104、入力インタフェース105、媒体リーダ106および通信インタフェース107を有する。情報処理装置100が有するこれらのユニットは、情報処理装置100の内部でバスに接続されている。プロセッサ101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。
【0034】
プロセッサ101は、プログラムの命令を実行する演算装置である。プロセッサ101は、例えばCPUである。プロセッサ101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、プロセッサ101は複数のプロセッサコアを含んでもよい。また、情報処理装置100は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【0035】
RAM102は、プロセッサ101が実行するプログラムやプロセッサ101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、情報処理装置100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【0036】
HDD103は、OSやミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、情報処理装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【0037】
GPU104は、プロセッサ101からの命令に従って、情報処理装置100に接続されたディスプレイ111に画像を出力する。ディスプレイ111としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
【0038】
入力インタフェース105は、情報処理装置100に接続された入力デバイス112から入力信号を取得し、プロセッサ101に出力する。入力デバイス112としては、マウス、タッチパネル、タッチパッド、トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、情報処理装置100に、複数の種類の入力デバイスが接続されていてもよい。
【0039】
媒体リーダ106は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
【0040】
媒体リーダ106は、例えば、記録媒体113から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、プロセッサ101によって実行される。なお、記録媒体113は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体113やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
【0041】
通信インタフェース107は、ネットワーク114に接続され、ネットワーク114を介して他の情報処理装置と通信する。通信インタフェース107は、スイッチやルータなどの有線通信装置に接続される有線通信インタフェースでもよいし、基地局やアクセスポイントなどの無線通信装置に接続される無線通信インタフェースでもよい。
【0042】
図3は、情報処理装置の機能例を示す図である。
情報処理装置100は、メモリ領域120、管理情報記憶部130、脆弱性情報記憶部140、プログラムロード部150、例外処理部160およびパッチ適用判定部170を有する。メモリ領域120は、RAM102の記憶領域の一部である。管理情報記憶部130および脆弱性情報記憶部140には、RAM102やHDD103の記憶領域が用いられる。プログラムロード部150、例外処理部160およびパッチ適用判定部170は、RAM102に記憶された情報処理プログラムがCPU101により実行されることで実現される。
【0043】
メモリ領域120は、ユーザにより利用されるプログラムの実行コードがロードされるRAM102上の領域である。メモリ領域120は、所定サイズに区切られた複数のメモリブロックを有する。複数のメモリブロックは、メモリブロック#1、#2、#3、…を含む。プログラムは複数の関数を含む。複数の関数それぞれに対応する実行コードは、複数のメモリブロックの何れかに配置される。プログラムには、例えば様々なOSS(Open Source Software)が組み込まれている。例えば、プログラムに含まれる関数は、OSSのライブラリまたはコンポーネントを使用する。また、OSSに関して脆弱性が発見されると、例えば、当該脆弱性を示す脆弱性情報がインターネット上の所定のWebサイト上で公開される。
【0044】
管理情報記憶部130は、関数テーブル131およびアクセス管理テーブル132を有する。関数テーブル131およびアクセス管理テーブル132を記憶する。
関数テーブル131は、各関数に対応する実行コードが、メモリ領域120の何れのメモリブロックに配置されているかを示す情報である。関数テーブル131は、管理情報記憶部130のうち不揮発性の記憶領域に保持される。
【0045】
アクセス管理テーブル132は、メモリ領域120の各メモリブロックについて、当該メモリブロックがアクセス禁止に設定されているか否かを示す情報である。ここで、後述されるように、プログラムのロード時に、当該プログラムの各実行コードの配置先となる全てのメモリブロックがアクセス禁止に設定される。
【0046】
なお、アクセス管理テーブル132は、OSなどによるメモリブロックへのアクセス禁止制御に用いられる制御情報そのものでもよいし、当該制御情報とは別個に、単にメモリブロックごとのアクセス禁止状況を参照可能にするために設けられる情報でもよい。
【0047】
脆弱性情報記憶部140は、脆弱性情報141を記憶する。脆弱性情報141は、OSSのライブラリまたはコンポーネントなどに対して発見された脆弱性に関する情報である。例えば、脆弱性情報141は、インターネットを介して、所定のサーバコンピュータからダウンロードされる。
【0048】
プログラムロード部150は、プログラムのロードを行う。すなわち、プログラムロード部150は、プログラムの実行コードをメモリ領域120に配置する。プログラムロード部150は、プログラムロード時に、当該プログラム全体の実行コードを解析することで、各関数に対応する実行コードの配置先のメモリブロックを特定し、関数テーブル131を生成する。また、プログラムロード部150は、各関数に対応する実行コードの配置先の全メモリブロックをアクセス禁止に設定する。このとき、プログラムロード部150は、当該全メモリブロックがアクセス禁止である旨をアクセス管理テーブル132に設定する。
【0049】
例外処理部160は、プログラムの実行時に、アクセス禁止に設定されたメモリブロックへのアクセスを例外として検出し、例外処理として当該メモリブロックのアクセス禁止を解除する。例外処理部160は、当該メモリブロックのアクセス禁止が解除されたことをアクセス管理テーブル132に設定する。アクセス禁止が解除されることで、該当のメモリブロックへのアクセスを行えるようになり、プログラムの処理が継続される。また、例外処理部160は、アクセス禁止に設定されたメモリブロックへのアクセスを、例えばOSの例外として検知し得る。
【0050】
パッチ適用判定部170は、関数テーブル131とアクセス管理テーブル132とに基づいて、脆弱性情報141で示される脆弱性を対策するパッチを、プログラムに対する優先的な適用の対象にするか否かを判定する。パッチ適用判定部170は、関数テーブル131およびアクセス管理テーブル132に基づいて該当の関数が実行された可能性があるか否かを判定する。パッチ適用判定部170は、該当の関数が実行された可能性がある場合、当該パッチを優先的な適用の対象にすると判定する。一方、パッチ適用判定部170は、該当の関数が実行されていない場合、当該パッチを優先的な適用の対象外にすると判定する。
【0051】
図4は、関数テーブルおよびアクセス管理テーブルの例を示す図である。
関数テーブル131は、関数名および配置ブロックの項目を含む。関数名の項目には、関数名が登録される。配置ブロックの項目には、当該関数名の関数に対応する実行コードが配置されるメモリブロックの識別情報(例えば識別番号)が登録される。
【0052】
例えば、関数テーブル131は、関数名「関数F1」、配置ブロック「#1」のレコードを有する。このレコードは、関数名「関数F1」の関数がメモリブロック#1に配置されることを示す。ここで、以下の説明では、関数名「関数F1」の関数を、単に関数F1のように表記する。
【0053】
また、関数テーブル131は、例えば関数F2がメモリブロック#1に配置され、関数F3がメモリブロック#2に配置されることなどを示すレコードを更に有する。
関数テーブル131は、第1の実施の形態の対応情報11aの一例である。
【0054】
アクセス管理テーブル132は、メモリブロックおよびアクセス禁止フラグの項目を含む。メモリブロックの項目には、メモリブロックの識別情報が登録される。アクセス禁止フラグの項目には、アクセス禁止フラグが登録される。ここで、アクセス禁止フラグ=「1」は、当該メモリブロックがアクセス禁止であることを示す。アクセス禁止フラグ=「0」は、当該メモリブロックがアクセス禁止でない、すなわち、当該メモリブロックのアクセス禁止が解除されていることを示す。
【0055】
アクセス管理テーブル132は、第1の実施の形態のブロック情報11b1およびブロック情報11b2の一例である。
プログラムロード部150は、プログラムロード時には、アクセス管理テーブル132における全てのメモリブロックのアクセス禁止フラグを「1」に設定する。例外処理部160は、アクセス禁止のメモリブロックへのアクセスが発生したことを示す例外を検出すると、当該メモリブロックのアクセス禁止を解除し、アクセス管理テーブル132の当該メモリブロックのアクセス禁止フラグを「0」に更新する。
【0056】
このとき、例外の発生は、各メモリブロックに対して高々1回である。すなわち、一度「0」にリセットされたメモリブロックがその後アクセスされても例外は発生しない。このため、例外処理部160の処理によるプログラムの実行速度への影響は小さい。
【0057】
次に、情報処理装置100の処理手順を説明する。
図5は、プログラム実行時処理の例を示すフローチャートである。
(S10)プログラムロード部150は、プログラムの実行ファイルを解析することで、当該プログラムに含まれる各関数の配置先のメモリブロックを特定する。
【0058】
(S11)プログラムロード部150は、ステップS10の解析結果に基づいて、関数テーブル131の設定を行い、関数テーブル131を保存する。関数テーブル131は、例えばHDD103などの不揮発性の記憶領域に格納される。
【0059】
(S12)プログラムロード部150は、アクセス管理テーブル132を作成し、アクセス禁止フラグを全て1にセットする。それに伴って、各関数に対応する実行コードの配置先の全メモリブロックがアクセス禁止に設定される。
【0060】
(S13)プログラムロード部150は、プログラムの実行を開始させる。
(S14)情報処理装置100のOSは、メモリブロックへのアクセスが発生すると、該当のメモリブロックへの初めてのアクセスであるか否かを判定する。該当のメモリブロックへの初めてのアクセスである場合、アクセス禁止のメモリブロックへのアクセスであるため、OSは例外を発生させて、ステップS15に処理が進む。該当のメモリブロックへの2回目以降のアクセスである場合、ステップS17に処理が進む。
【0061】
(S15)例外処理部160は、アクセス禁止に設定されたメモリブロックへのアクセスに伴う例外発生を検知する。
(S16)例外処理部160は、アクセス管理テーブル132の該当メモリブロックのアクセス禁止フラグを0にリセットする。それに伴って、該当メモリブロックへのアクセス禁止が解除される。
【0062】
(S17)情報処理装置100のOSは、プログラムの実行を続行させる。そして、ステップS14に処理が進む。その後、プログラムの実行が完了するまで、ステップS14以降の処理が繰り返される。
【0063】
図6は、パッチ適用判定処理の例を示すフローチャートである。
下記の手順は、例えば情報処理装置100により新たな脆弱性情報141が取得されると実行される。下記の手順は、図5の手順による実行対象のプログラムの実行中に実行されてもよい。
【0064】
(S20)パッチ適用判定部170は、脆弱性情報141を取得すると、脆弱性情報記憶部140に格納する。
(S21)パッチ適用判定部170は、プログラムに含まれる複数の関数のうち、脆弱性情報141から脆弱性のある関数を取得する。例えば、パッチ適用判定部170は、脆弱性情報141を基に、脆弱性が発見されたOSSのライブラリを特定し、当該ライブラリを使用する関数を、脆弱性のある関数として取得する。
【0065】
(S22)パッチ適用判定部170は、脆弱性のある関数と関数テーブル131から脆弱性のある関数に対応するメモリブロック(配置ブロック)を取得する。
(S23)パッチ適用判定部170は、アクセス管理テーブル132の該当のメモリブロックのアクセス禁止フラグが0であるか否かを判定する。該当のメモリブロックのアクセス禁止フラグが0の場合、ステップS24に処理が進む。該当のメモリブロックのアクセス禁止フラグが1の場合、ステップS25に処理が進む。
【0066】
(S24)パッチ適用判定部170は、該当の脆弱性に関するパッチを優先適用対象と判断する。パッチ適用判定部170は、当該脆弱性に関するパッチが優先適用対象であることを示す情報を出力する。例えば、パッチ適用判定部170は、当該脆弱性に関するパッチについて至急適用を要する旨をディスプレイ111に表示してもよい。そして、パッチ適用判定処理が終了する。
【0067】
(S25)パッチ適用判定部170は、該当の脆弱性に関するパッチを優先適用対象外と判断する。パッチ適用判定部170は、当該脆弱性に関するパッチが優先適用対象外であることを示す情報を出力する。例えば、パッチ適用判定部170は、当該脆弱性に関するパッチについて至急適用を要しない旨をディスプレイ111に表示してもよい。そして、パッチ適用判定処理が終了する。
【0068】
このように、パッチ適用判定部170は、実運用において使用されていない関数に関連するパッチ適用の優先度を下げることができる。
次に、情報処理装置100の再起動または運用されるプログラムの再起動を行う場合の処理手順を説明する。
【0069】
図7は、再起動前処理の例を示すフローチャートである。
(S30)パッチ適用判定部170は、アクセス管理テーブル132の情報をHDD103などの不揮発性の記憶装置に保存する。
【0070】
(S31)情報処理装置100のOSは、情報処理装置100の再起動または運用されるプログラムの再起動を行う。
このように、パッチ適用判定部170は、アクセス管理テーブル132の情報をHDD103などの不揮発性の記憶装置に保存することで、長期間のプログラム運用に亘りアクセス状況のデータを保存することが可能になる。
【0071】
図8は、再起動後プログラム実行時処理の例を示すフローチャートである。
再起動後プログラム実行時処理では、ステップS10~S12に代えて、ステップS10aを実行する点が図5の手順と異なる。そこで、以下では、ステップS10aを主に説明し、ステップS13~S17の説明を省略する。
【0072】
(S10a)パッチ適用判定部170は、不揮発性の記憶領域に保存したアクセス管理テーブル132の情報を読み出し、RAM102上のアクセス管理テーブル132へ設定する。これにより、アクセス管理テーブル132が、再起動前の状態に復元される。そして、ステップS13に処理が進む。
【0073】
このように、情報処理装置100は、プログラムの運用中に情報処理装置100や当該プログラムの再起動が行われる場合にも、再起動前のアクセス管理テーブル132の内容を、再起動後にも引き継いで、プログラムを実行開始できる。
【0074】
次に、関数テーブル131の設定方法の具体例を説明する。
図9は、関数テーブルの設定例を示す図である。
例えば、メモリ領域120のメモリブロック#1に関数F1,F2の実行コードが配置される。また、メモリ領域120のメモリブロック#2に関数F3の実行コードが配置される。この場合、プログラムロード部150は、関数名「関数F1」と配置ブロック「#1」のレコードと、関数名「関数F2」と配置ブロック「#1」のレコードと、関数名「関数F3」と配置ブロック「#2」とを関数テーブル131に設定する。
【0075】
図10は、アクセス管理テーブルの更新例を示す図である。
図10(A)は、初期状態、すなわち、プログラムロード時に全メモリブロックがアクセス禁止に設定された際のアクセス管理テーブル132を例示する。初期状態では、アクセス管理テーブル132の全てのメモリブロックに対して、アクセス禁止フラグ「1」が設定される。
【0076】
図10(B)は、プログラムロード後に、メモリブロック#1が初めてアクセスされ、メモリブロック#1のアクセス禁止が解除される時のアクセス管理テーブル132の更新例を示す。例えば、関数F2または関数F1が実行されることで、メモリブロック#1へのアクセスが発生し、メモリブロック#1のアクセス禁止が解除される。この場合、メモリブロック#1に対応するアクセス禁止フラグが「1」から「0」に更新される。
【0077】
次に、脆弱性情報141、関数テーブル131およびアクセス管理テーブル132に基づくパッチ適用可否判定の具体例を説明する。
図11は、パッチ適用判定の例を示す図である。
【0078】
パッチ適用判定部170は、脆弱性情報141から、脆弱性ありと報告されたOSSのライブラリを特定する。パッチ適用判定部170は、保守対象のプログラムに含まれる複数の関数と、当該関数で用いられるライブラリとの対応情報を基に、当該ライブラリを使用する関数F2を特定する。なお、脆弱性情報141に基づく関数F2の特定は、ユーザによって行われてもよく、パッチ適用判定部170は、特定された関数F2のユーザによる入力を受け付けてもよい。
【0079】
次に、パッチ適用判定部170は、関数テーブル131に基づいて、脆弱性情報141から特定された関数F2に対応するメモリブロック#1を特定する。更に、パッチ適用判定部170は、アクセス管理テーブル132に基づいて、当該メモリブロック#1に対応するアクセス禁止フラグが「0」(アクセス禁止解除)であるか否かを判定する。
【0080】
パッチ適用判定部170は、メモリブロック#1に対応するアクセス禁止フラグが「0」(アクセス禁止解除)であると判定すると、脆弱性情報141で示される脆弱性に関するパッチを優先適用対象であると判断する。メモリブロック#1に対応するアクセス禁止フラグが「0」(アクセス禁止解除)の場合、関数F2が実行された可能性があり、今後も関数F2が実行される可能性があるためである。
【0081】
次に、脆弱性情報141に関連する関数を特定する処理の例を説明する。
図12は、脆弱性情報に関連する関数の特定例を示す図である。
例えば、管理情報記憶部130は、関数管理テーブル133を予め記憶してもよい。関数管理テーブル133は、関数名と、当該関数名の関数で使用されるプログラム部品の名称(プログラム部品名)との対応関係を示す。プログラム部品は、例えばOSSのライブラリやコンポーネントなどである。例えば、関数管理テーブル133は、関数F1と関数F1で使用されるプログラム部品Xとの対応関係や、関数F2と関数F2で使用されるプログラム部品Yとの対応関係などを示す。
【0082】
ここで、脆弱性情報141は、プログラム部品Yに脆弱性がある旨を示すとする。この場合、パッチ適用判定部170は、脆弱性情報141と、関数管理テーブル133とに基づいて、脆弱性が発見されたプログラム部品Yが使用される関数F2を特定することができる。ただし、前述のように、パッチ適用判定部170は、脆弱性情報141を基にユーザによって特定された関数F2の入力を受け付けて、関数テーブル131およびアクセス管理テーブル132に基づくパッチ適用判定を行ってもよい。
【0083】
次に、関数の実行実績を取得するための比較例を説明する。
図13は、比較例を示す図である。
比較例の情報処理装置200は、プログラム211をデバッガ上で実行し、プログラム221に含まれる関数が呼び出されるたびに、当該関数の呼び出し履歴を記録する。情報処理装置200は、メモリ領域210と関数呼び出し履歴テーブル220と関数呼び出し監視部230とを有する。
【0084】
メモリ領域210は、プログラム211がロードされるRAM上の領域である。関数呼び出し履歴テーブル220は、関数呼び出し履歴を保持する情報である。関数呼び出し監視部230は、関数が呼び出されるたびに、当該関数が呼び出されたことを示すレコードを、関数呼び出し履歴テーブル220に記録する。関数呼び出し監視部230は、例えばデバッガの機能として実装される。そして、脆弱性情報取得時には、関数呼び出し履歴テーブル220を基に、脆弱性情報に関連する関数が実行されたか否かを判定し、実行されている場合には当該脆弱性情報に対するパッチを適用対象と判断する。
【0085】
比較例の方法では、関数が呼び出されるたびに、関数呼び出し履歴テーブル220にレコードが追加されるため、メモリ消費量が多い。また、関数が呼び出されるたびに関数呼び出し監視部230が実行されるため、処理負荷が高く、プログラム211の実行速度に影響する。また、プログラム211をデバッガ上で動作させるため、実運用中のプログラムに対して、比較例の方法を利用することは難しい。
【0086】
一方、情報処理装置100によれば、メモリブロックを関数と対応付けて、メモリブロック単位にアクセス有無を得ることで、関数の実行実績を取得する粒度は粗くなるが、実行中のプログラムの実行速度への影響を抑えられる。このため、情報処理装置100は、優先適用対象のパッチを効率的に判断できる。
【0087】
例えば、情報処理装置100は、上記のデバッガを用いる比較例の方法と比べて、負荷を数万分の1程度に抑えることができる。情報処理装置100によれば、実行中のプログラムの実行速度への影響が比較例に比べて小さいため、情報処理装置100の機能は、実運用中のプログラムに対する脆弱性対策に特に有用である。また、情報処理装置100は、パッチ適用判定の処理に用いる情報量を、関数テーブル131およびアクセス管理テーブル132に相当する情報量に抑えられる。このため、関数の呼び出しのたびに当該関数の呼び出し履歴を記録する比較例の方法のように、呼び出し履歴のデータが追加され続けることはないので、比較例の方法に比べて、メモリ消費量が低減される。
【0088】
情報処理装置100は、こうして優先適用対象のパッチと優先適用対象外のパッチとを判別することで、プログラムに対してパッチが無暗に適用されることを回避でき、パッチ適用に伴ってプログラムが動作しなくなるリスクを低減できる。
【0089】
以上説明したように、情報処理装置100は例えば次の処理を実行する。
プロセッサ101は、プログラムのロード時に、プログラムに含まれる複数の関数それぞれと当該関数に対応する実行コードが配置されるメモリブロックとを対応付ける対応情報を作成する。プロセッサ101は、プログラムの実行コードに関連する複数のメモリブロックをアクセス禁止に設定する。プロセッサ101は、プログラムの実行時に、アクセス禁止に設定されたメモリブロックへのアクセスを検出すると、当該メモリブロックのアクセス禁止を解除する。プロセッサ101は、アクセス禁止が解除されたメモリブロックを示すブロック情報を取得する。プロセッサ101は、複数の関数のうち、脆弱性情報を基に特定される第1関数を示す情報と対応情報とブロック情報とに基づいて、当該プログラムに対し、脆弱性情報で示される脆弱性に関するパッチを優先的な適用の対象とするか否かを判断する。
【0090】
これにより、情報処理装置100は、優先適用対象のパッチを効率的に判断できる。ここで、関数テーブル131は、対応情報の一例である。アクセス管理テーブル132は、ブロック情報の一例である。
【0091】
例えば、プロセッサ101は、アクセス禁止に設定されたメモリブロックへのアクセスを例外として検出する。これにより、情報処理装置100は、デバッガなどの特別なソフトウェアを実行しなくても、実行された可能性のある関数を簡便に特定可能になる。
【0092】
また、プロセッサ101は、対応情報に基づいて、第1関数に対応する実行コードが配置される第1メモリブロックを特定する。プロセッサ101は、ブロック情報に基づいて、第1メモリブロックのアクセス禁止が解除されているか否かを判定する。プロセッサ101は、第1メモリブロックのアクセス禁止が解除されている場合、脆弱性情報で示される脆弱性に関するパッチを優先的な適用の対象とすると判断する。プロセッサ101は、第1メモリブロックのアクセス禁止が解除されていない場合、当該パッチを優先的な適用の対象外とすると判断する。
【0093】
これにより、情報処理装置100は、優先適用対象のパッチを適切に絞り込むことができ、プログラムに対して無暗にパッチが適用されることにより当該プログラムが動作しなくなるリスクを低減できる。また、優先適用対象のパッチを絞り込むことで、至急適用するパッチの数を減らせるため、パッチ適用に伴うプログラムの実行中断時間を減らせる利点もある。例えば、至急適用する必要性の低いパッチの適用については、定期メンテナンス時など、プログラムによるサービス中断がスケジュールされているタイミングで行うことも考えられる。
【0094】
プロセッサ101は、情報処理装置100(コンピュータ)の停止またはプログラムの実行停止の際に、揮発性の第1記憶装置に記憶されるブロック情報を不揮発性の第2記憶装置に保存する。プロセッサ101は、情報処理装置100の起動またはプログラムの実行開始の際に、第2記憶装置に保存されるブロック情報を読み出し、当該ブロック情報を第1記憶装置に格納する。
【0095】
これにより、情報処理装置100は、アクセス管理テーブル132に相当するブロック情報を長期に亘って保存することができる。ここで、RAM102は、第1記憶装置の一例である。HDD103は、第2記憶装置の一例である。
【0096】
更に、脆弱性情報は、例えば、第1プログラム部品に対して発見された脆弱性を示す。この場合、プロセッサ101は、当該脆弱性情報、および、複数の関数それぞれと当該関数で使用されるプログラム部品との対応関係を示す情報に基づいて、第1プログラム部品が使用される第1関数を特定してもよい。
【0097】
これにより、情報処理装置100は、脆弱性情報141に基づいて第1関数を特定するためのユーザの作業を省力化でき、優先適用対象のパッチの判断を更に効率化できる。ここで、前述の関数管理テーブル133は、複数の関数それぞれと当該関数で使用されるプログラム部品との対応関係を示す情報の一例である。
【0098】
なお、第1の実施の形態の情報処理は、処理部12にプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、プロセッサ101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体113に記録できる。
【0099】
例えば、プログラムを記録した記録媒体113を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体113に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【0100】
10 情報処理装置
11 記憶部
11a 対応情報
11b1,11b2 ブロック情報
12 処理部
D1,D2 脆弱性情報
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13