(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025040885
(43)【公開日】2025-03-25
(54)【発明の名称】情報処理装置、情報処理方法及びプログラム
(51)【国際特許分類】
G06F 11/36 20060101AFI20250317BHJP
G06F 21/57 20130101ALI20250317BHJP
【FI】
G06F11/36 104
G06F21/57 370
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2023147958
(22)【出願日】2023-09-12
(71)【出願人】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100103894
【弁理士】
【氏名又は名称】家入 健
(72)【発明者】
【氏名】田中 大樹
(72)【発明者】
【氏名】木下 峻一
(72)【発明者】
【氏名】嶋田 有佑
(72)【発明者】
【氏名】荒井 大地
【テーマコード(参考)】
5B042
【Fターム(参考)】
5B042GA05
5B042HH10
5B042HH42
5B042HH43
5B042MA08
5B042MA14
5B042MC13
(57)【要約】
【課題】検査対象プログラム内の関数が操作の対象とするリソースに応じて、適切に解析を行うことが可能な情報処理装置を提供すること。
【解決手段】本開示にかかる情報処理装置は、検査対象プログラムにおいて関数が呼び出される箇所を示す関数呼び出し箇所を抽出する抽出部と、関数が操作の対象とする操作対象リソースを特定する特定部と、操作対象リソースに対する関数の操作内容に基づいて、関数呼び出し箇所から処理フロー解析の対象である解析対象箇所を絞り込む絞り込み部と、を備える。検査対象プログラムは、操作対象リソースを示す変数を定義する変数定義処理を含む。特定部は、変数定義処理において定義された変数が示す操作対象リソースを特定する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
検査対象プログラムにおいて関数が呼び出される箇所を示す関数呼び出し箇所を抽出する抽出部と、
前記関数が操作の対象とする操作対象リソースを特定する特定部と、
前記操作対象リソースに対する前記関数の操作内容に基づいて、前記関数呼び出し箇所から処理フロー解析の対象である解析対象箇所を絞り込む絞り込み部と、を備え、
前記検査対象プログラムは、前記操作対象リソースを示す変数を定義する変数定義処理を含み、
前記特定部は、前記変数定義処理において定義された変数が示す前記操作対象リソースを特定する
情報処理装置。
【請求項2】
前記抽出部は、不正に実行された場合に、前記検査対象プログラムを含むシステムに対してセンシティブな操作を行い得る関数と、外部入力を取得する関数と、があらかじめ登録された登録関数リストに基づいて、前記関数呼び出し箇所を抽出する
請求項1に記載の情報処理装置。
【請求項3】
前記特定部は、前記操作対象リソースを示す引数番号が前記関数ごとに定められた引数情報リストと、前記変数定義処理で用いられる関数に対応するリソースの種別を示す対応リソースリストと、に基づいて、前記操作対象リソースを特定する
請求項1又は2に記載の情報処理装置。
【請求項4】
前記絞り込み部は、前記操作対象リソースに対する前記関数の操作内容に関する絞り込みルールを用いて前記解析対象箇所を絞り込む
請求項1又は2に記載の情報処理装置。
【請求項5】
前記絞り込みルールは、前記関数呼び出し箇所を前記処理フロー解析の解析対象とするルール、及び、前記関数呼び出し箇所を前記処理フロー解析の解析対象外とするルールの少なくとも一方を含む
請求項4に記載の情報処理装置。
【請求項6】
前記絞り込み部は、前記操作対象リソースを識別するリソース識別情報にさらに基づいて、前記解析対象箇所を絞り込む
請求項1又は2に記載の情報処理装置。
【請求項7】
前記絞り込み部は、前記リソース識別情報が示す前記操作対象リソースの機密性の高さに応じて、前記解析対象箇所を絞り込む
請求項6に記載の情報処理装置。
【請求項8】
前記絞り込み部において絞り込まれた解析対象箇所を起点又は終点とする処理フローに対する解析を行う解析部をさらに備える
請求項1又は2に記載の情報処理装置。
【請求項9】
前記抽出部において抽出された前記関数呼び出し箇所を起点又は終点とする処理フローに対する解析を行う解析部をさらに備え、
前記解析部は、不正な機能を含む可能性がある処理フローを特定し、
前記絞り込み部は、前記不正な機能を含む可能性がある処理フローにさらに基づいて、前記関数呼び出し箇所から前記解析対象箇所を絞り込む
請求項1又は2に記載の情報処理装置。
【請求項10】
前記解析部における解析結果をユーザに通知する通知部をさらに備える
請求項8に記載の情報処理装置。
【請求項11】
コンピュータが、
検査対象プログラムにおいて関数が呼び出される箇所を示す関数呼び出し箇所を抽出する抽出ステップと、
前記関数が操作の対象とする操作対象リソースを特定する特定ステップと、
前記操作対象リソースに対する前記関数の操作内容に基づいて、前記関数呼び出し箇所から処理フロー解析の対象である解析対象箇所を絞り込む絞り込みステップと、を実行し、
前記検査対象プログラムは、前記操作対象リソースを示す変数を定義する変数定義処理を含み、
前記特定ステップでは、前記変数定義処理において定義された変数が示す前記操作対象リソースを特定する
情報処理方法。
【請求項12】
検査対象プログラムにおいて関数が呼び出される箇所を示す関数呼び出し箇所を抽出する抽出ステップと、
前記関数が操作の対象とする操作対象リソースを特定する特定ステップと、
前記操作対象リソースに対する前記関数の操作内容に基づいて、前記関数呼び出し箇所から処理フロー解析の対象である解析対象箇所を絞り込む絞り込みステップと、をコンピュータに実行させ、
前記検査対象プログラムは、前記操作対象リソースを示す変数を定義する変数定義処理を含み、
前記特定ステップでは、前記変数定義処理において定義された変数が示す前記操作対象リソースを特定する
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、情報処理装置、情報処理方法及びプログラムに関する。
【背景技術】
【0002】
近年のインフラや企業システムは複雑化している。そのため、それらのインフラや企業システムは、単一の企業のデバイスだけで構成されるのではなく、様々な企業のデバイスを外部から調達し、それらのデバイスを組み合わせて構築されることが一般的になっている。このようにして構築されたサプライチェーンに関するリスク対策として、プログラム内の不正機能を検出する技術の重要性が増している。
【0003】
プログラム内の不正機能の一例として、外部のメーカーから調達したソフトウェア(又はファームウェア)やハードウェアにおいて、バックドアが発見される事例が多数報告されている。本明細書で言及する「バックドア」は、例えば、ソフトウェアを構成する複数の機能を含むプログラムに対して、当該プログラムの一部として組み込まれた、ユーザに知らされていない且つ望まれていない機能として定義することができる。
【0004】
インフラや企業システムの構築の取り纏めを行うメーカーは、外部のメーカーから調達したソフトウェアを構成するプログラムにおいて、バックドアが含まれていないかを検査する必要がある。例えば、プログラムの静的解析を行うことにより、プログラムに含まれる処理フローの解析を行うことが知られている。権限が必要な操作や不正に実行されると危険な操作を目印として処理フロー解析を行うことで、バックドアを検出することができる。
【0005】
関連する技術として、特許文献1は、脆弱なライブラリが適切に用いられていない箇所を検出することが可能な脆弱性監査装置を開示する。特許文献1が開示する脆弱性監査装置は、所定の判定ルールに従って、予め定義した外部入力を用いる関数の使用と、main関数へ渡された引数とにより、プログラム内の外部入力変数を抽出する。また、当該脆弱性監査装置は、抽出した外部入力変数の監査を行う。
【先行技術文献】
【特許文献】
【0006】
【発明の概要】
【発明が解決しようとする課題】
【0007】
処理フロー解析を行う場合、処理フローの起点又は終点として、広く利用されるライブラリ関数の呼び出し箇所を指定することができる。しかしながら、プログラム内には、このような関数呼び出し箇所が多く存在する。そのため、起点又は終点として用いる関数呼び出し箇所を適切に絞り込まずに処理フロー解析を行った場合、解析の必要性が高くない処理フローについても解析が行われることとなる。その結果、バックドアなどの不正機能の誤検出が増加するおそれがある。
【0008】
したがって、処理フロー解析の対象範囲は、不正機能が実行された場合に影響が及ぶ対象に応じて適切に設定されることが望ましい。特許文献1に開示された技術では、このような問題については十分に考慮されていない。
【0009】
本開示の目的は、上述した課題を鑑み、検査対象プログラム内の関数が操作の対象とするリソースに応じて、適切に解析を行うことが可能な情報処理装置、情報処理方法、及びプログラムを提供することにある。
【課題を解決するための手段】
【0010】
本開示にかかる情報処理装置は、
検査対象プログラムにおいて関数が呼び出される箇所を示す関数呼び出し箇所を抽出する抽出部と、
前記関数が操作の対象とする操作対象リソースを特定する特定部と、
前記操作対象リソースに対する前記関数の操作内容に基づいて、前記関数呼び出し箇所から処理フロー解析の対象である解析対象箇所を絞り込む絞り込み部と、を備え、
前記検査対象プログラムは、前記操作対象リソースを示す変数を定義する変数定義処理を含み、
前記特定部は、前記変数定義処理において定義された変数が示す前記操作対象リソースを特定する。
【0011】
本開示にかかる情報処理方法は、
コンピュータが、
検査対象プログラムにおいて関数が呼び出される箇所を示す関数呼び出し箇所を抽出する抽出ステップと、
前記関数が操作の対象とする操作対象リソースを特定する特定ステップと、
前記操作対象リソースに対する前記関数の操作内容に基づいて、前記関数呼び出し箇所から処理フロー解析の対象である解析対象箇所を絞り込む絞り込みステップと、を実行し、
前記検査対象プログラムは、前記操作対象リソースを示す変数を定義する変数定義処理を含み、
前記特定ステップでは、前記変数定義処理において定義された変数が示す前記操作対象リソースを特定する。
【0012】
本開示にかかるプログラムは、
検査対象プログラムにおいて関数が呼び出される箇所を示す関数呼び出し箇所を抽出する抽出ステップと、
前記関数が操作の対象とする操作対象リソースを特定する特定ステップと、
前記操作対象リソースに対する前記関数の操作内容に基づいて、前記関数呼び出し箇所から処理フロー解析の対象である解析対象箇所を絞り込む絞り込みステップと、をコンピュータに実行させ、
前記検査対象プログラムは、前記操作対象リソースを示す変数を定義する変数定義処理を含み、
前記特定ステップでは、前記変数定義処理において定義された変数が示す前記操作対象リソースを特定する。
【発明の効果】
【0013】
本開示にかかる情報処理装置、情報処理方法、及びプログラムは、検査対象プログラム内の関数が操作の対象とするリソースに応じて、適切に解析を行うことを可能とする。
【図面の簡単な説明】
【0014】
【
図1】本開示にかかる情報処理装置の機能的な構成を示すブロック図である。
【
図2】本開示にかかる情報処理装置が行う処理の流れを示すフローチャートである。
【
図3】本開示にかかるソフトウェアの制御フローに含まれるバックドアの例を示す図である。
【
図4】本開示にかかる情報処理装置が行う処理の要点を説明するソースコードを示す図である。
【
図5】ファイルポインタを用いたファイル書き込みの例を説明するソースコードを示す図である。
【
図6】ファイルポインタを用いたソケット書き込みの例を説明するソースコードを示す図である。
【
図7】本開示にかかる関数呼び出し箇所を絞り込むために、特定の対象とするコードの例を説明するソースコードを示す図である。
【
図8】本開示にかかる情報処理装置の機能的な構成を示すブロック図である。
【
図9】本開示にかかる情報処理装置の処理の流れを模式的に示す図である。
【
図10】本開示にかかる登録関数リストの一例を示す図である。
【
図11】本開示にかかる抽出関数リストの一例を示す図である。
【
図12】本開示にかかる引数情報リストの一例を示す図である。
【
図13】本開示にかかる対応リソースリストの一例を示す図である。
【
図14】本開示にかかる特定部の処理の流れを示すフローチャートである。
【
図15】本開示にかかるリソース特定関数リストの一例を示す図である。
【
図16】本開示にかかる絞り込みルールの一例を示す図である。
【
図17】本開示にかかる絞り込み部が行う処理の流れを示すフローチャートである。
【
図18】本開示にかかる解析対象関数リストの一例を示す図である。
【
図19】本開示にかかる情報処理装置が行う処理の全体的な流れを示すフローチャートである。
【
図20】本開示にかかる情報処理装置の処理を模式的に示す図である。
【
図21】本開示にかかる情報処理装置を実現するコンピュータのハードウェア構成を例示するブロック図である。
【発明を実施するための形態】
【0015】
以下では、本開示の実施形態について、図面を参照しながら詳細に説明する。各図面において、同一又は対応する要素には同一の符号が付されている。説明の明確化のため、必要に応じて重複説明は省略される。
【0016】
<実施形態1>
図1を参照して、本開示にかかる情報処理装置100について説明する。
図1は、情報処理装置100の機能的な構成を示すブロック図である。情報処理装置100は、抽出部101、特定部102、及び絞り込み部103を備える。
【0017】
抽出部101は、検査対象プログラムにおいて関数が呼び出される箇所を示す関数呼び出し箇所を抽出する。特定部102は、関数が操作の対象とする操作対象リソースを特定する。絞り込み部103は、操作対象リソースに対する関数の操作内容に基づいて、関数呼び出し箇所から処理フロー解析の対象である解析対象箇所を絞り込む。また、検査対象プログラムは、操作対象リソースを示す変数を定義する変数定義処理を含む。特定部102は、変数定義処理において定義された変数が示す操作対象リソースを特定する。
【0018】
情報処理装置100は、図示しない構成としてプロセッサ、メモリ及び記憶装置を備える。当該記憶装置には、本開示にかかる処理が実装されたコンピュータプログラムが記憶されている。プロセッサは、記憶装置からコンピュータプログラムをメモリへ読み込ませ、当該コンピュータプログラムを実行することができる。これにより、プロセッサは、抽出部101、特定部102、及び絞り込み部103の機能を実現する。
【0019】
抽出部101、特定部102、及び絞り込み部103は、それぞれが専用のハードウェアで実現されていてもよい。また、各装置の各構成要素の一部又は全部は、汎用または専用の回路(circuitry)、プロセッサ等やこれらの組合せによって実現されてもよい。これらは、単一のチップによって構成されてもよいし、バスを介して接続される複数のチップによって構成されてもよい。各装置の各構成要素の一部又は全部は、上述した回路等とプログラムとの組合せによって実現されてもよい。
【0020】
図2を参照して、情報処理装置100が行う処理の流れを説明する。
図2は、情報処理装置100が行う処理の流れを示すフローチャートである。検査対象プログラムは、操作対象リソースを示す変数を定義する変数定義処理を含んでいるものとする。まず、抽出部101は、検査対象プログラムから関数呼び出し箇所を抽出する(S1)。次に、特定部102は、関数が操作の対象とする操作対象リソースを特定する(S2)。特定部102は、変数定義処理において定義された変数が示す操作対象リソースを特定する。続いて、絞り込み部103は、操作対象リソースに対する関数の操作内容に基づいて、関数呼び出し箇所から解析対象箇所を絞り込む(S3)。
【0021】
このような構成により、本開示にかかる情報処理装置100によれば、検査対象プログラム内の関数が操作の対象とするリソースに応じて、適切に解析を行うことができる。
【0022】
<実施形態2>
続いて、実施形態2について説明する。実施形態2は、上述した実施形態1の具体例である。以下では、本開示にかかる情報処理装置10について説明する。情報処理装置10は、所定の処理を行うことで、検査対象プログラム内の関数が操作の対象とするリソースに応じて、処理フロー解析の起点又は終点となる関数呼び出し箇所を適切に絞り込むことが可能な装置である。また、これにより、情報処理装置10は、検査対象プログラムの解析を適切に行うことを可能とする。
【0023】
初めに、本開示に関連する技術として、プログラムの検査技術について説明する。プログラムに不正機能が含まれているか否かを検査するためには、検査対象プログラムに含まれるコードを解析する必要がある。以下では不正機能の一例として、バックドアを用いて説明する。これに限らず、本開示は、バックドア以外の不正機能に対しても適用することができる。
【0024】
プログラムの解析方法としては、検査対象プログラムのソースコードを用いて解析を行う方法と、検査対象プログラムのバイナリに含まれるコードを用いて解析を行う方法とがある。本実施形態では、情報処理装置10が検査対象プログラムのソースコードを用いて検査対象プログラムの処理フロー解析を行う例を用いて説明する。
【0025】
処理フロー解析を行うことで、情報処理装置10は、セキュリティ上、センシティブな操作を行うコードを検出することができる。ここで、センシティブな操作とは、不正に実行されると、検査対象プログラムや当該検査対象プログラムを実行する環境を含むシステムに重大な影響を及ぼすと考えられる操作を示す。センシティブな操作は、ユーザによって予め定められてよい。ユーザは、例えば、検査対象プログラムの検査を行う検査者、検査を依頼する依頼者、又はセキュリティ担当者などである。
【0026】
図3を参照して、プログラム内にバックドアが設置される例について説明する。
図3は、ソフトウェアの制御フローCF1及びCF2に含まれるバックドアの例を示す図である。図において、円は関数や手続きを示している。以下では、関数や手続きを「ノード」と称して説明する場合がある。また図において、細線の矢印は正規の処理フローを示し、太線の矢印はバックドアの処理フローを示している。なお、図では、ユーザとして検査者Uを示す。
【0027】
図3の上段に示される制御フローCF1において、ノードA1~A5は正規コードの実行パスである。通常、正規のユーザが制御フローCF1を実行する場合、ノードA1、A2、A3、A4、A5のような経路で処理が実行される。しかしながら、図の例では、ノードA4からノードA6に処理を進めるためのバックドアが設置されている。攻撃者は、ノードA4において所定の入力を行うことで、正規のノードA5を経由せずに、ノードA6の処理を実行することができる。攻撃者とは、例えばバックドアをプログラム内に設置した者、又はその関係者である。
【0028】
攻撃者が行う所定の入力は、不正機能を実現するための特殊な入力である。所定の入力は、例えば、正規の処理フローを経由せずに、プログラムにセンシティブな操作を実行させるための入力である。所定の入力は、例えば、攻撃者やその関係者のみが知る入力情報を含み得る。当該入力情報は、例えば、仕様書等に記載されない隠し機能に関する情報、認証機能を回避するための情報、又は所定のコマンド文字列などである。これらは一例であるので、当該入力情報は、不正機能を実現するための種々の入力データが含まれ得る。
【0029】
ノードA6は、システム等に対してセンシティブな操作(例えば、コマンド実行、ファイル出力等)を行うためのコードを含んでいる。攻撃者は、バックドアを設置することで、正規の処理フローとは異なる処理フローを形成して不正な操作の実行を試みる。例えば攻撃者は、隠し機能としてこのようなバックドアをプログラム内に設置する場合がある。
【0030】
図3の下段には、分岐を含む制御フローCF2の例が示されている。この例では、制御フローCF2において、ノードB1、B2、B3、B5の経路で不正な処理を実行するためのバックドアが設置されている。例えば、攻撃者は、ノードB1において所定のデータ入力を行うことで、ノードB1、B2、B3、B5の経路で処理を実行させる。ノードB5は、システム等に対してセンシティブな操作を行うためのコードを含んでいる。
【0031】
ここで、ノードB5は、正規の処理フローにおいても経由され得るノードである。例えば、ノードB4が、正規のユーザであることを認証するための認証機能であるとする。正規の処理フローでは、ノードB4において認証機能を実行し、認証に成功した場合にはノードB5の処理を実行し、失敗した場合にはノードB6の処理を実行する。このようにすることで、正規の処理フローでは、ユーザが認証に成功した場合にのみセンシティブな操作を実行させ、認証に失敗にした場合にはセンシティブな操作を実行させないようにすることができる。しかしながら、制御フローCF2では、ノードB4を経由しないバックドアを設置することで、攻撃者は認証機能を回避するフローを形成している。これにより、攻撃者は、認証機能を回避しつつ、センシティブな操作を実行することが可能となる。
【0032】
情報処理装置10は、検査対象プログラムにおける所定の起点と所定の終点とで規定される処理フローに対して処理フロー解析を行うことで、バックドアを検出するためのバックドア検査を行う。例えば、
図3の下段の例では、所定の起点は、攻撃者によるデータ入力が行われるノードB1である。また、所定の終点は、センシティブなコードを含むノードB5である。センシティブなコードは、センシティブな操作を実行し得る関数を含み得る。
【0033】
例えば情報処理装置10は、ノードB1を起点とし、ノードB5を終点とする処理フローPF1に対して解析を行う。これにより、情報処理装置10は、処理フローPF1にバックドアが存在しているか否かを検査する。情報処理装置10は、解析結果に基づいて、バックドア検査の結果を検査者Uに通知する。
【0034】
(本開示の概要)
上述したように、情報処理装置10は、処理フロー解析において、広く利用されるライブラリ関数の呼び出し箇所を処理フローの起点及び終点として指定することができる。しかしながら、このような関数呼び出し箇所を起点又は終点として指定した場合、情報処理装置10は、処理フロー解析の必要性が高くない処理フローについても解析を行うこととなる。その結果、バックドアの誤検出が増加するおそれがある。また、解析結果を確認する検査者Uの負担が増加するという問題もある。このような問題を解決するため、情報処理装置10は、不正機能が実行された場合に影響が及ぶ対象を考慮して処理フロー解析の対象範囲を設定する。
【0035】
本開示では、検査対象プログラム内の関数呼び出し箇所において、関数が操作の対象とする操作対象リソースに着目する。具体的には、検査対象プログラムにおいて、操作対象リソースを示す変数を定義する変数定義処理に利用される関数が、リソースごとに異なることに着目する。
【0036】
操作対象リソースの例としては、ファイル、ソケット、プロセス、ユーザなどへの操作、検出対象プログラム外にあるバッファ、パイプ、名前付きパイプ、又はメモリなどがある。操作対象リソースとして、他のリソースが用いられてもよい。これらの操作対象リソースを操作する関数の呼び出し箇所は、処理フロー解析の起点又は終点となり得る。
【0037】
また、操作対象リソースを示す変数としては、例えば、ファイルディスクリプタがある。ファイルディスクリプタは、プログラムからファイルを操作する際に、操作対象のファイルを識別するために割り当てられる識別情報である。ファイルディスクリプタは、例えば整数値で表される。また、ソケットのアクセスは、sockfsと呼ばれる特殊ファイルシステムのファイルへのアクセスによって行われる。よって、ソケットの通信もファイルディスクリプタを利用して読み書き(送受信)することができる。
【0038】
例えば、検査対象プログラムが、ファイルを操作対象とする関数の呼び出しと、操作対象ファイルを示すファイルディスクリプタを定義する変数定義処理と、を含んでいるとする。情報処理装置10は、変数定義処理において定義されたファイルディスクリプタが示すファイルを特定する。また、情報処理装置10は、特定したファイルに対する関数の操作内容(例えば、ファイルへの書き込み)に応じて、当該関数呼び出し箇所を処理フロー解析の対象とするか否かを判定する。
【0039】
このようにすることで、情報処理装置10は、検査対象プログラム内の関数が操作の対象とするリソースに応じて、解析対象箇所を絞り込むことができるので、処理フロー解析の対象とするフローの数を減らすことができる。
【0040】
(情報処理装置10が行う処理の要点)
ここで、情報処理装置10が行う処理の要点を具体的に説明する。通常、検査対象となるプログラムには、外部入力を取得する関数であるsrc(source)関数や、検査対象プログラムを含むシステムに対してセンシティブな操作を行い得るsink関数が含まれる。src関数やsink関数の引数には、ファイルディスクリプタやソケットディスクリプタなどのように、操作対象リソースを示す変数が含まれる。また、検査対象プログラムには、このような変数を定義する変数定義処理が含まれる。
【0041】
本開示では、操作対象のリソースによって、変数定義処理で利用される関数や、その関数に渡される引数などに特徴が表れることに着目する。例えば、関数がファイルを操作する場合には、変数定義処理においてopen関数が用いられる。また、関数がソケットを操作する場合には、変数定義処理においてsocket関数が用いられる。また、例えば機密ファイルの不正な書き換えを検出するために、プログラムに含まれるwrite関数を抽出するとする。この場合、書き換え対象が機密ファイルであるか機密ファイルでないファイルかは、open関数の引数に渡されるファイルパスに違いがある。
【0042】
本開示にかかる情報処理装置10は、操作対象リソースを示す変数が、src関数又はsink関数となりうる関数のどの引数に与えられるか、をあらかじめ定義する。以下では、関数の引数のうち、操作対象リソースを示す変数が与えられる引数を、「ターゲット引数」と称する場合がある。また、情報処理装置10は、リソースに対する操作の内容ごとに、検査対象プログラム内で用いられる関数についてもあらかじめ定義する。情報処理装置10は、これらの情報を解析時に参照することで、検査対象プログラムに含まれるsrc関数又はsink関数の呼び出し箇所を絞り込む。
【0043】
図4は、情報処理装置10が行う処理の要点を説明するソースコード110を示す図である。ソースコード110は、コード111及び112を含む。コード111のopen関数はsrc関数の一例であり、コード112のwrite関数はsink関数の一例である。図に示されるように、コード111において、ファイルディスクリプタを示す変数fdを定義する変数定義処理が行われている。open関数の第1引数であるpathは、open関数が操作対象とするリソースを示している。また、コード112において、コード111で定義された変数fdがwrite関数の第1引数として用いられている。変数fdは上述したターゲット引数に相当する。
【0044】
図4に示される矢印は、情報の伝搬を示す。当該矢印は、コード112の変数fdからコード111の変数fdへの伝搬を示す。情報処理装置10は、変数fdの伝搬を辿ることで、変数定義処理において定義された変数を特定し、当該変数が示す操作対象リソースを特定する。例えばバックドアなどの不正機能を検出するためのデータフロー解析は、src関数及びsink関数を起点又は終点とする処理フローごとに行われる。情報処理装置10は、処理フローの起点及び終点を適切に絞り込むことで適切に処理フロー解析を行うことができる。
【0045】
例えば、
図4の例では、コード112のwrite関数が処理フローの起点であり、コード111のopen関数が処理フローの終点である。なお、
図4では、絞り込みの起点をsrc関数又はsink関数に与えるディスクリプタとしているが、open系関数が出力するディスクリプタを起点としてもよい。つまり、
図4に示される矢印とは逆方向の変数fdの伝搬を考慮してもよい。
【0046】
なお、上記では絞り込みのポイントとしてディスクリプタを用いて説明したが、絞り込みのポイントはディスクリプタに限られない。例えば、fread関数やfwrite関数は、操作先のファイルのFILE構造体を示すポインタを引数に与える。これらの関数は、ディスクリプタの場合と同様に、FILE構造体を示すポインタの定義処理で用いる関数と、その処理で用いるディスクリプタと、を特定することで操作対象リソースを特定できる。
【0047】
図5は、ファイルポインタを用いたファイル書き込みの例を説明するソースコード120を示す図である。コード121に示される変数定義処理において、変数fpが定義されている。コード122において、fwrite関数の第4引数として変数fpが用いられている。
【0048】
図6は、ファイルポインタを用いたソケット書き込みの例を説明するソースコード130を示す図である。コード131に示される変数定義処理において、変数sockfdが定義されている。コード132において、変数sockfdが変数fpに変換されている。コード133において、fprintf関数の第1引数として変数fpが用いられている。
【0049】
図7は、関数呼び出し箇所を絞り込むために、特定の対象とするコードの例を説明するソースコード140を示す図である。
図7において、実線矢印は検出対象フローを示し、破線矢印は検出対象外フローを示す。
【0050】
コード141において、変数fpが定義されている。また、コード142において、変数sockfdが定義されている。コード141及び142の処理は、操作対象リソースを示す変数を定義する変数定義処理である。以下では説明のために、コード141が示す処理を変数定義処理V1と称する場合がある。また、コード142が示す処理を変数定義処理V2と称する場合がある。
【0051】
コード143において、read関数によってソケットから外部入力をbufに受け取る。コード144において、FuncAで何らかの加工を行い、bufがvar1に格納される。コード146において、FuncA関数のエラー処理内で、fwrite関数で外部入力のデータがファイルに書き込まれる。コード148に示す正常処理において、外部入力が伝搬したvar1がwrite関数によりソケットに書き込まれる。これによりvar1の内容が外部に送信される。
【0052】
例えば、処理フロー解析の対象として、外部へのデータ送信を行うsink関数を設定したとする。src関数には、コード143のread関数が含まれる。またsink関数には、コード146のfwrite関数及びコード148のwrite関数が含まれる。ここで、コード146のfwrite関数は、コード143で読み込まれたソケットを、エラー処理のために通常の書き込みを行っているに過ぎない。そのため、破線矢印に示すように、コード146のfwrite関数は、処理フロー解析の対象外とすることが望ましい。一方、コード148のwrite関数は、ソケットを書き込みの対象としている。そのため、実線矢印に示すように、コード148のwrite関数は、処理フロー解析の対象とする必要がある。
【0053】
(情報処理装置10の構成)
続いて、
図8及び
図9を参照して、本開示にかかる情報処理装置10の構成について説明する。
図8は、情報処理装置10の機能的な構成を示すブロック図である。
図9は、情報処理装置10の処理の流れを模式的に示す図である。
【0054】
また以下では、上述した
図7に示すソースコード140を用いて、情報処理装置10が行う処理を具体的に説明する。なお、以下では、
図7に示されるコード146のfwrite関数の呼び出し箇所のアドレスを「0x4000」とする。また、コード148のwrite関数の呼び出し箇所のアドレスを「0x3000」とする。
【0055】
図9に示される登録関数リスト210、対応リソースリスト240、及び絞り込みルール260は、例えば情報処理装置10の記憶部19にあらかじめ記憶されている。情報処理装置10は、記憶部19を参照してこれらの情報を取得する。これに限らず、登録関数リスト210、対応リソースリスト240、及び絞り込みルール260は情報処理装置10以外の装置に記憶されてもよい。情報処理装置10は、図示しないネットワークを介してこれらの情報を取得してもよい。なお、以下で説明する各種リストは、リスト形式以外の形式で構成されてもよい。
【0056】
情報処理装置10は、上述した情報処理装置100の一例である。
図8に示されるように、情報処理装置10は、抽出部11、特定部12、絞り込み部13、解析部14、通知部15、及び記憶部19を備える。
【0057】
抽出部11は、上述した抽出部101の一例である。抽出部11は、検査対象のプログラムである検査対象プログラムPにおいて、関数が呼び出される箇所を示す関数呼び出し箇所を抽出する。抽出部11は、不正に実行された場合に、検査対象プログラムPを含むシステムに対してセンシティブな操作を行い得る関数と、外部入力を取得する関数と、があらかじめ登録された登録関数リスト210に基づいて、関数呼び出し箇所を抽出する。
【0058】
図10は、登録関数リスト210の一例を示す図である。登録関数リスト210は、sink関数に関する登録関数リスト210a及びsrc関数に関する登録関数リスト210bを含む。sink関数は、検査対象プログラムPを含むシステムに対してセンシティブな操作を行い得る関数である。src関数は、外部入力を取得する関数である。抽出部11は、登録関数リスト210を参照し、検査対象プログラムP内でこれらの関数を呼び出す箇所を全て抽出する。抽出部11は抽出結果を抽出関数リスト220に格納し、抽出関数リスト220を特定部12に出力する。
【0059】
図11は、抽出関数リスト220の一例を示す図である。抽出関数リスト220は、、sink関数に関する抽出関数リスト220a及びsrc関数に関する抽出関数リスト220bを含む。抽出関数リスト220は、関数名と、呼び出し箇所を示す呼び出し元アドレスと、を対応付けたリストである。
【0060】
図8及び
図9に戻る。特定部12は、上述した特定部102の一例である。特定部12は、関数が操作の対象とする操作対象リソースを特定する。
図7に示されるソースコード140のコード141及び142に示されるように、検査対象プログラムPは、操作対象リソースを示す変数を定義する変数定義処理V1及びV2を含んでいる。特定部12は、変数定義処理V1及びV2において定義された変数が示す操作対象リソースを特定する。
【0061】
具体的には、特定部12は、操作対象リソースを示す引数番号が関数ごとに定められた引数情報リスト230と、変数定義処理V1及びV2で用いられる関数に対応するリソースの種別を示す対応リソースリスト240と、に基づいて、操作対象リソースを特定する。
【0062】
図12は、引数情報リスト230の一例を示す図である。引数情報リスト230は、sink関数に関する引数情報リスト230a及びsrc関数に関する引数情報リスト230bを含む。引数情報リスト230は、関数名、ターゲット引数入力、及び操作内容を対応付けたリストである。ターゲット引数入力は、関数の引数番号を示す。引数情報リスト230は、関数ごとにあらかじめ定義されている。特定部12は、抽出部11から出力された抽出関数リスト220に含まれる関数から、引数情報リスト230に含まれる関数を抽出する。
【0063】
また、特定部12は、抽出した関数について、引数情報リスト230に記載された引数番号の変数と、その変数を定義する変数定義処理を特定する。上述したように、特定部12は、ターゲット引数が示す変数にかかる情報の伝搬を辿ることにより、変数定義処理を特定することができる。
図7の例では、特定部12は、変数fpを定義する変数定義処理V1を特定する。また、特定部12は、変数sockfdを定義する変数定義処理V2を特定する。
【0064】
特定部12は、変数定義処理V1及びV2で用いられる関数に対応するリソースの種別を、対応リソースリスト240を参照して特定する。
図13は、対応リソースリスト240の一例を示す図である。対応リソースリスト240は、ファイル操作に関する対応リソースリスト240a及びソケット操作に関する対応リソースリスト240bを含む。対応リソースリスト240は、関数名と、ターゲット引数出力と、を対応付けたリストである。
【0065】
(特定部12の処理)
図14を参照して、特定部12の処理の流れを説明する。
図14は、特定部12の処理の流れを示すフローチャートである。まず、特定部12は、関数ごとの引数情報リスト230から、関数とターゲット引数を1つ取り出す(S11)。次に、特定部12は、ターゲット引数を返り値、又は引数に持つ関数呼び出しを抽出する(S12)。続いて、特定部12は、変数定義処理を特定する(S13)。
【0066】
続いて、特定部12は、取り出した関数が対応リソースリスト240に含まれるか否かを判定する(S14)。取り出した関数が対応リソースリスト240に含まれないと判定した場合(S14のNO)、特定部12は、処理をステップS12に戻す。取り出した関数が対応リソースリスト240に含まれると判定した場合(S14のYES)、特定部12は、当該関数に関する情報をリソース特定関数リスト250に格納する(S15)。またこの場合、特定部12は処理をステップS12に戻し、以降の処理を繰り返す。特定部12は、ステップS12~S15の処理を、引数情報リスト230に含まれる関数及びターゲット引数について終了するまで繰り返す。特定部12は、リソース特定関数リスト250を絞り込み部13に出力する。
【0067】
図15は、リソース特定関数リスト250の一例を示す図である。リソース特定関数リスト250は、関数名、src/sink、アドレス、操作対象リソース、及び操作内容を対応付けたリストである。src/sinkは、関数名に示される関数がsrc関数であるかsink関数であるかを示す。
【0068】
図8及び
図9に戻る。絞り込み部13は、上述した絞り込み部103の一例である。絞り込み部13は、操作対象リソースに対する関数の操作内容に基づいて、関数呼び出し箇所から処理フロー解析の対象である解析対象箇所を絞り込む。操作内容は、例えばread又はwriteである。絞り込み部13は、操作対象リソースに対する関数の操作内容に関する絞り込みルールを用いて解析対象箇所を絞り込んでもよい。具体的には、絞り込み部13は、特定部12から出力されたリソース特定関数リスト250と、操作対象リソースに対する関数の操作内容に関する絞り込みルール260と、に基づいて、解析対象箇所を絞り込む。
【0069】
絞り込みルール260は、関数呼び出し箇所を処理フロー解析の解析対象とするルール、及び、関数呼び出し箇所を処理フロー解析の解析対象外とするルールの少なくとも一方を含む。ここでは、絞り込みルール260は、関数呼び出し箇所を処理フロー解析の解析対象とするルールを含むものとして説明するが、絞り込みルール260は、関数呼び出し箇所を処理フロー解析の解析対象外とするルールを含んでもよい。絞り込みルール260は、検査者などにより、あらかじめ設定されてよい。絞り込み部13は、リソース特定関数リスト250に含まれる関数から、絞り込みルール260に合致する関数を、解析対象の関数として絞り込む。
【0070】
図16は、絞り込みルール260の一例を示す図である。絞り込みルール260は、操作対象リソース、src/sink、操作内容、及び対象フラグを対応付けたリストである。対象フラグは、関数呼び出し箇所が処理フロー解析の対象であるか否かを示す情報である。対象フラグが「True」の場合、絞り込み部13は、関数呼び出し箇所を処理フロー解析の対象であると判定する。また、対象フラグが「False」の場合、絞り込み部13は、関数呼び出し箇所は処理フロー解析の対象でないと判定する。
【0071】
絞り込みルール260は、操作対象リソースを識別するリソース識別情報をルールとして含んでもよい。リソース識別情報は、例えばリソースの名称である。具体的には、リソース識別情報は、例えば、操作対象リソースを示すパス、ファイル名、ソケット名、プロセス名などである。これらに限らず、リソース識別情報は、操作対象リソースを特定可能な任意の情報であってよい。絞り込み部13は、特定部12で特定された操作対象リソースを識別するリソース識別情報にさらに基づいて、解析対象箇所を絞り込んでよい。
【0072】
また、絞り込み部13は、リソース識別情報が示す操作対象リソースの機密性の高さに応じて、解析対象箇所を絞り込んでもよい。例えば、絞り込みルール260において、リソースを示すパスに「/etc/passwd」を含むことがルールとして設定されているとする。この場合、絞り込み部13は、操作対象のパスが「/etc/passwd」を含むことを絞り込みルールの1つとして、絞り込みを行う。
【0073】
(絞り込み部13の処理)
図17を参照して、絞り込み部13の処理の流れを説明する。
図17は、絞り込み部13が行う処理の流れを示すフローチャートである。まず、絞り込み部13は、リソース特定関数リスト250から関数を1つ取り出す(S21)。次に、絞り込み部13は、絞り込みルール260を参照し、リソース特定関数リスト250から取り出した関数に対応付けられた対象フラグを取得する(S22)。具体的には、絞り込み部13は、取り出した関数に対応付けられたsrc/sink、操作対象リソース、及び操作内容(Read又はwrite)が合致した関数の対象フラグを取り出す。
【0074】
例えばステップS21において、絞り込み部13が、リソース特定関数リスト250のwrite関数を取り出したとする。当該write関数のsrc/sinkは「sink」、操作対象リソースは「ソケット」、操作内容は「write」である。絞り込み部13は、絞り込みルール260を参照し、当該write関数のこれらの情報と合致するルールの対象フラグを取得する。
図16に示されるように、ここでは絞り込みルール260の上から3番目に、これらと情報と合致するルールがある。絞り込み部13は、対象フラグとして「True」を取得する。同様に、絞り込み部13がリソース特定関数リスト250のfwrite関数を取り出した場合、絞り込み部13は、対象フラグとして「False」を取得する。
【0075】
続いて、絞り込み部13は、対象フラグがTrueであるか否かを判定する(S23)。対象フラグがFalseであると判定した場合(S23のNo)、絞り込み部13はステップS22に処理を戻す。対象フラグがTrueであると判定した場合(S23のYES)、絞り込み部13は、取り出した関数に関する情報を解析対象関数リスト270に格納する(S24)。
【0076】
例えば上述したwrite関数及びfwrite関数の例では、絞り込み部13は、対象フラグが「True」のwrite関数に関する情報を解析対象関数リスト270に格納する。絞り込み部13は、当該write関数の呼び出し箇所のアドレス「0x3000」を含む情報を解析対象関数リスト270に格納する。一方、絞り込み部13は、対象フラグが「False」のfwrite関数に関する情報については解析対象関数リスト270に格納しない。
【0077】
また、絞り込み部13は処理をステップS22に戻し、以降の処理を繰り返す。絞り込み部13は、ステップS22~S24の処理を、リソース特定関数リスト250に含まれる関数について終了するまで繰り返す。このようにすることで、絞り込み部13は、リソース特定関数リスト250から、処理フロー解析の対象である解析対象箇所を絞り込んだ結果として解析対象関数リスト270を出力することができる。絞り込み部13は、解析対象関数リスト270を解析部14に出力する。
【0078】
図18は、解析対象関数リスト270の一例を示す図である。解析対象関数リスト270は、関数名、src/sink、アドレス、操作対象リソース、及び操作内容を対応付けたリストである。絞り込み部13において関数呼び出し箇所を絞り込んだことにより、解析対象関数リスト270では、リソース特定関数リスト250よりも関数呼び出し箇所が少なくなっている。
【0079】
図8及び
図9に戻る。解析部14は、絞り込み部13において絞り込まれた解析対象箇所を起点又は終点とする処理フローに対する解析を行う。解析部14は、解析対象関数リスト270に格納されたアドレスに基づいて、処理フロー解析を行う。解析部14は、任意の解析方法を用いて処理フロー解析を行ってよい。また、解析部14は、解析結果を通知部15に出力する。
【0080】
通知部15は、解析部14における解析結果を検査者U(ユーザ)に通知する。例えば、通知部15は、図示しない有線又は無線により通信を行うための通信インタフェースを介して、検査者Uが使用するPCなどに解析結果を通知する。通知部15は、検査レポートとして検査結果を出力することで通知を行ってもよい。検査レポートは、例えば、「外部からの隠しパスワード入力で、シェルプログラム起動」、「外部からの隠しコマンドで、ログファイルにパスワード情報を出力」のように、バックドアに関する情報を示すものである。検査レポートは、操作対象リソースに関する情報を含んでもよい。例えば、検査レポートは、「操作対象リソース:機密文書X」などの情報を含んでもよい。
【0081】
記憶部19は、半導体メモリ等で構成されており、各種のデータ及びプログラムを記憶する。記憶部19の少なくとも一部は、情報処理装置10の電源を切ってもデータが保持されるように、不揮発性のメモリで構成されている。記憶部19は、本実施形態にかかるプログラムの他、上述した各種のリストを記憶してもよい。
【0082】
(情報処理装置10の処理)
図19を参照して、情報処理装置10が処理の全体的な流れを説明する。
図19は、情報処理装置10が行う処理の全体的な流れを示すフローチャートである。
【0083】
まず、抽出部11は、検査対象プログラムPのソースコードを取得する(S31)。抽出部11は、取得したソースコードから関数呼び出し箇所を抽出する(S32)。抽出部11は、あらかじめ登録された登録関数リスト210を用いて関数呼び出し箇所を抽出してよい。抽出部11は、抽出結果として抽出関数リスト220を出力する。
【0084】
続いて、特定部12は、引数情報リスト230及び対応リソースリスト240を用いて、ステップS32で抽出された関数が操作の対象とする操作対象リソースを特定する(S33)。特定部12は、ターゲット引数が示す変数にかかる情報の伝搬を辿ることにより、変数定義処理を特定する。また特定部12は、変数定義処理において定義された変数が示す操作対象リソースを特定する。特定部12は、操作対象リソースの特定結果として、リソース特定関数リスト250を出力する。
【0085】
続いて、絞り込み部13は、特定部12で特定された操作対象リソースに対する関数の操作内容に基づいて、関数呼び出し箇所から解析対象箇所を絞り込む(S34)。具体的には、絞り込み部13は、絞り込みルール260を用いて、リソース特定関数リスト250に含まれる関数呼び出し箇所から解析対象箇所を絞り込む。絞り込み部13は、絞り込みの結果として解析対象関数リスト270を出力する。
【0086】
続いて、解析部14は、解析対象関数リスト270に含まれる解析対象箇所の処理フロー解析を行う(S35)。最後に、通知部15は、解析結果を検査者Uに通知する(S36)。
【0087】
以上説明したように、本開示にかかる情報処理装置10において、抽出部11は、検査対象プログラムにおいて関数が呼び出される箇所を示す関数呼び出し箇所を抽出する。特定部12は、関数が操作の対象とする操作対象リソースを特定する。検査対象プログラムは、操作対象リソースを示す変数を定義する変数定義処理を含んでいる。特定部12は、変数定義処理において定義された変数が示す操作対象リソースを特定する。絞り込み部13は、操作対象リソースに対する関数の操作内容に基づいて、関数呼び出し箇所から処理フロー解析の対象である解析対象箇所を絞り込む。
【0088】
また、情報処理装置10は、操作対象リソースに優先順位を付けて絞り込みを行うことができる。例えば、情報処理装置10は、操作対象リソースの機密性の高さに応じて、解析対象箇所を絞り込むことができる。
【0089】
このような構成により、情報処理装置10は、処理フロー解析の起点又は終点となる関数の数を削減することができる。これにより、処理フロー解析にかかる時間の短縮と、検査者に通知される結果の数を削減することができるので、検査者にかかる負担や検査にかかるコストを削減することができる。よって、本開示にかかる情報処理装置10は、検査対象プログラム内の関数が操作の対象とするリソースに応じて、適切に解析を行うことができる。
【0090】
<変形例>
上述した情報処理装置10の構成では、絞り込み部13によって検査対象のsrc関数又はsink関数の呼び出し箇所を絞り込み、絞り込んだ呼び出し箇所について、解析部14において処理フロー解析を行った。本変形例に示すように、情報処理装置10は、処理フロー解析を先に実行し、絞り込み部13において、検査者Uに通知する情報を絞り込む構成としてもよい。以下では本変形例にかかる情報処理装置10aについて説明する。実施形態2で説明した情報処理装置10と重複する内容については説明を省略し、情報処理装置10と異なる点を中心に説明する。
【0091】
情報処理装置10aの機能的な構成は、
図8に示される情報処理装置10と同等であるので図示を省略する。情報処理装置10aは、情報処理装置10と同様、抽出部11、特定部12、絞り込み部13、解析部14、通知部15、及び記憶部19を備える。情報処理装置10aにおいて、解析部14は、不正な機能を含む可能性がある処理フローを特定する。また、絞り込み部13は、解析部14において特定された、不正な機能を含む可能性がある処理フローにさらに基づいて、関数呼び出し箇所から解析対象箇所を絞り込む。
【0092】
図20は、本開示にかかる情報処理装置10aの処理を模式的に示す図である。実施形態2では、
図9を用いて説明したように、情報処理装置10は、抽出部11、特定部12、絞り込み部13、解析部14の順に処理を進めた。本変形例において、情報処理装置10aは、
図20に示されるような順序で処理を進める。情報処理装置10aは、細実線で示す経路A、及び太実線で示す経路Bにより処理を行う。経路Aにおいて、情報処理装置10aは、実施形態2の処理の流れと同様、抽出部11、特定部12、絞り込み部13の順に処理を行う。
【0093】
経路Bの処理について説明する。経路Bにおいて、情報処理装置10aは、抽出部11の処理の後に、解析部14の処理を行う。まず、抽出部11は、登録関数リスト210に基づいて、バックドアなどの不正機能を含む可能性がある処理フローを抽出する。抽出部11は、抽出された情報を含む関数リストL1を解析部14に出力する。関数リストL1は、不正機能を含む可能性がある処理フローに含まれるsrc関数及びsink関数の情報を含む。
【0094】
解析部14は、関数リストL1に基づいて処理フロー解析を行う。解析部14は、バックドアなどの不正機能が含まれる可能性のある処理フローの情報を含む処理フローリストL2を絞り込み部13に出力する。絞り込み部13は、特定部12から出力されたリソース特定関数リスト250と、処理フローリストL2と、に基づいて、解析対象箇所を絞り込む。
【0095】
本変形例の場合、絞り込み部13で解析対象箇所を絞り込む前に、解析部14において解析を行う。よって、絞り込みを行ってから解析を行う場合と比べると、本変形例では、解析部14が解析する解析対象箇所は多くなる。しかしながら、解析部14の解析対象データのサイズが小さい場合、解析部14の処理の負荷は所定の大きさ未満に抑えられる。そのため、情報処理装置10aは、解析対象データのサイズ等に応じて、実施形態2の処理と本変形例の処理とを選択してもよい。
【0096】
このような構成を備えることで、本変形例において、情報処理装置10aは、実施形態2にかかる情報処理装置10と同様の効果を奏することができる。また、情報処理装置10aは、経路A及びBの各処理を並列して行うことができるので、処理時間を短縮することができる。
【0097】
以上、情報処理装置100、10、及び10a(以下、「情報処理装置100等」と称する)が備える構成と、それぞれが行う処理について説明した。上述した情報処理装置100等の構成は一例に過ぎず、適宜変更され得る。例えば、情報処理装置100等の各構成要素の一部又は全部が複数の情報処理装置や回路等により実現される場合には、複数の情報処理装置や回路等は、集中配置されてもよいし、分散配置されてもよい。例えば、情報処理装置や回路等は、クライアントサーバシステム、クラウドコンピューティングシステム等、各々が通信ネットワークを介して接続される形態として実現されてもよい。また、情報処理装置100等の機能がSaaS(Software as a Service)形式で提供されてもよい。
【0098】
<ハードウェアの構成例>
情報処理装置100等の各機能構成部は、各機能構成部を実現するハードウェア(例:ハードワイヤードされた電子回路など)で実現されてもよいし、ハードウェアとソフトウェアとの組み合わせ(例:電子回路とそれを制御するプログラムの組み合わせなど)で実現されてもよい。以下、情報処理装置100等の各機能構成部がハードウェアとソフトウェアとの組み合わせで実現される場合について、さらに説明する。
【0099】
図21は、情報処理装置100等を実現するコンピュータ900のハードウェア構成を例示するブロック図である。コンピュータ900は、情報処理装置100等を実現するために設計された専用のコンピュータであってもよいし、汎用のコンピュータであってもよい。コンピュータ900は、スマートフォンやタブレット端末などといった可搬型のコンピュータであってもよい。
【0100】
例えば、コンピュータ900に対して所定のアプリケーションをインストールすることにより、コンピュータ900で、情報処理装置100等の各機能が実現される。上記アプリケーションは、情報処理装置100等の機能構成部を実現するためのプログラムで構成される。
【0101】
コンピュータ900は、バス902、プロセッサ904、メモリ906、ストレージデバイス908、入出力インタフェース910、及びネットワークインタフェース912を有する。バス902は、プロセッサ904、メモリ906、ストレージデバイス908、入出力インタフェース910、及びネットワークインタフェース912が、相互にデータを送受信するためのデータ伝送路である。ただし、プロセッサ904などを互いに接続する方法は、バス接続に限定されない。
【0102】
プロセッサ904は、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、FPGA(Field-Programmable Gate Array)、又は量子プロセッサ(量子コンピュータ制御チップ)などの種々のプロセッサである。メモリ906は、RAM(Random Access Memory)などを用いて実現される主記憶装置である。ストレージデバイス908は、ハードディスク、SSD(Solid State Drive)、メモリカード、又はROM(Read Only Memory)などを用いて実現される補助記憶装置である。
【0103】
入出力インタフェース910は、コンピュータ900と入出力デバイスとを接続するためのインタフェースである。例えば入出力インタフェース910には、キーボードなどの入力装置や、ディスプレイ装置などの出力装置が接続される。ネットワークインタフェース912は、コンピュータ900をネットワークに接続するためのインタフェースである。このネットワークは、LAN(Local Area Network)であってもよいし、WAN(Wide Area Network)であってもよい。
【0104】
ストレージデバイス908は、情報処理装置100等の各機能構成部を実現するプログラム(前述したアプリケーションを実現するプログラム)を記憶している。プロセッサ904は、このプログラムをメモリ906に読み出して実行することで、情報処理装置100等の各機能構成部を実現する。
【0105】
プロセッサの各々は、図面を用いて説明されたアルゴリズムをコンピュータに行わせるための命令群を含む1又はそれ以上のプログラムを実行する。このプログラムは、コンピュータに読み込まれた場合に、実施形態で説明された1又はそれ以上の機能をコンピュータに行わせるための命令群(又はソフトウェアコード)を含む。プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)又は実体のある記憶媒体(tangible storage medium)に格納されてもよい。限定ではなく例として、非一時的なコンピュータ可読媒体又は実体のある記憶媒体は、RAM、ROM、フラッシュメモリ、SSD又はその他のメモリ技術、CD-ROM、DVD(digital versatile disc)、Blu-ray(登録商標)ディスク又はその他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ又はその他の磁気ストレージデバイスを含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)又は通信媒体上で送信されてもよい。限定ではなく例として、一時的なコンピュータ可読媒体又は通信媒体は、電気的、光学的、音響的、又はその他の形式の伝搬信号を含む。
【0106】
以上、実施形態を参照して本開示を説明したが、本開示は上述の実施形態に限定されるものではない。本開示の構成や詳細には、本開示のスコープ内で当業者が理解し得る様々な変更をすることができる。そして、各実施の形態は、適宜他の実施の形態と組み合わせることができる。
【0107】
各図面は、1又はそれ以上の実施形態を説明するための単なる例示である。各図面は、1つの特定の実施形態のみに関連付けられるのではなく、1又はそれ以上の他の実施形態に関連付けられてもよい。当業者であれば理解できるように、いずれか1つの図面を参照して説明される様々な特徴又はステップは、例えば明示的に図示または説明されていない実施形態を作り出すために、1又はそれ以上の他の図に示された特徴又はステップと組み合わせることができる。例示的な実施形態を説明するためにいずれか1つの図に示された特徴またはステップの全てが必ずしも必須ではなく、一部の特徴またはステップが省略されてもよい。いずれかの図に記載されたステップの順序は、適宜変更されてもよい。
【0108】
なお、本開示は上記実施形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【0109】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
(付記1)
検査対象プログラムにおいて関数が呼び出される箇所を示す関数呼び出し箇所を抽出する抽出部と、
前記関数が操作の対象とする操作対象リソースを特定する特定部と、
前記操作対象リソースに対する前記関数の操作内容に基づいて、前記関数呼び出し箇所から処理フロー解析の対象である解析対象箇所を絞り込む絞り込み部と、を備え、
前記検査対象プログラムは、前記操作対象リソースを示す変数を定義する変数定義処理を含み、
前記特定部は、前記変数定義処理において定義された変数が示す前記操作対象リソースを特定する
情報処理装置。
(付記2)
前記抽出部は、不正に実行された場合に、前記検査対象プログラムを含むシステムに対してセンシティブな操作を行い得る関数と、外部入力を取得する関数と、があらかじめ登録された登録関数リストに基づいて、前記関数呼び出し箇所を抽出する
付記1に記載の情報処理装置。
(付記3)
前記特定部は、前記操作対象リソースを示す引数番号が前記関数ごとに定められた引数情報リストと、前記変数定義処理で用いられる関数に対応するリソースの種別を示す対応リソースリストと、に基づいて、前記操作対象リソースを特定する
付記1又は2に記載の情報処理装置。
(付記4)
前記絞り込み部は、前記操作対象リソースに対する前記関数の操作内容に関する絞り込みルールを用いて前記解析対象箇所を絞り込む
付記1~3のいずれか1項に記載の情報処理装置。
(付記5)
前記絞り込みルールは、前記関数呼び出し箇所を前記処理フロー解析の解析対象とするルール、及び、前記関数呼び出し箇所を前記処理フロー解析の解析対象外とするルールの少なくとも一方を含む
付記4に記載の情報処理装置。
(付記6)
前記絞り込み部は、前記操作対象リソースを識別するリソース識別情報にさらに基づいて、前記解析対象箇所を絞り込む
付記1~5のいずれか1項に記載の情報処理装置。
(付記7)
前記絞り込み部は、前記リソース識別情報が示す前記操作対象リソースの機密性の高さに応じて、前記解析対象箇所を絞り込む
付記6に記載の情報処理装置。
(付記8)
前記絞り込み部において絞り込まれた解析対象箇所を起点又は終点とする処理フローに対する解析を行う解析部をさらに備える
付記1~7のいずれか1項に記載の情報処理装置。
(付記9)
前記抽出部において抽出された前記関数呼び出し箇所を起点又は終点とする処理フローに対する解析を行う解析部をさらに備え、
前記解析部は、不正な機能を含む可能性がある処理フローを特定し、
前記絞り込み部は、前記不正な機能を含む可能性がある処理フローにさらに基づいて、前記関数呼び出し箇所から前記解析対象箇所を絞り込む
付記1~7のいずれか1項に記載の情報処理装置。
(付記10)
前記解析部における解析結果をユーザに通知する通知部をさらに備える
付記8又は9に記載の情報処理装置。
(付記11)
コンピュータが、
検査対象プログラムにおいて関数が呼び出される箇所を示す関数呼び出し箇所を抽出する抽出ステップと、
前記関数が操作の対象とする操作対象リソースを特定する特定ステップと、
前記操作対象リソースに対する前記関数の操作内容に基づいて、前記関数呼び出し箇所から処理フロー解析の対象である解析対象箇所を絞り込む絞り込みステップと、を実行し、
前記検査対象プログラムは、前記操作対象リソースを示す変数を定義する変数定義処理を含み、
前記特定ステップでは、前記変数定義処理において定義された変数が示す前記操作対象リソースを特定する
情報処理方法。
(付記12)
検査対象プログラムにおいて関数が呼び出される箇所を示す関数呼び出し箇所を抽出する抽出ステップと、
前記関数が操作の対象とする操作対象リソースを特定する特定ステップと、
前記操作対象リソースに対する前記関数の操作内容に基づいて、前記関数呼び出し箇所から処理フロー解析の対象である解析対象箇所を絞り込む絞り込みステップと、をコンピュータに実行させ、
前記検査対象プログラムは、前記操作対象リソースを示す変数を定義する変数定義処理を含み、
前記特定ステップでは、前記変数定義処理において定義された変数が示す前記操作対象リソースを特定する
プログラム。
【0110】
付記1に従属する付記2~付記10に記載した要素(例えば構成及び機能)の一部又は全ては、付記11及び付記12に対しても付記2~付記10と同様の従属関係により従属し得る。任意の付記に記載された要素の一部又は全ては、様々なハードウェア、ソフトウェア、ソフトウェアを記録するための記録手段、システム、及び方法に適用され得る。
【符号の説明】
【0111】
10、10a、100 情報処理装置
11、101 抽出部
12、102 特定部
13、103 絞り込み部
14 解析部
15 通知部
19 記憶部
110、120、130、140 ソースコード
210、210a、210b 登録関数リスト
220、220a、220b 抽出関数リスト
230、230a、230b 引数情報リスト
240、240a、240b 対応リソースリスト
250 リソース特定関数リスト
260 絞り込みルール
270 解析対象関数リスト
900 コンピュータ
902 バス
904 プロセッサ
906 メモリ
908 ストレージデバイス
910 入出力インタフェース
912 ネットワークインタフェース
A1~A6 ノード
B1~B6 ノード
CF1、CF2 制御フロー
L1 関数リスト
L2 処理フローリスト
P 検査対象プログラム
PF1 処理フロー
U 検査者
V1、V2 変数定義処理