(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-24
(45)【発行日】2024-07-02
(54)【発明の名称】プログラム解析装置、プログラム解析方法、及び、プログラム
(51)【国際特許分類】
G06F 21/57 20130101AFI20240625BHJP
【FI】
G06F21/57 370
(21)【出願番号】P 2023508229
(86)(22)【出願日】2021-03-23
(86)【国際出願番号】 JP2021012048
(87)【国際公開番号】W WO2022201324
(87)【国際公開日】2022-09-29
【審査請求日】2023-07-12
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100103894
【氏名又は名称】家入 健
(72)【発明者】
【氏名】嶋田 有佑
(72)【発明者】
【氏名】山垣 則夫
【審査官】岸野 徹
(56)【参考文献】
【文献】国際公開第2021/038705(WO,A1)
【文献】国際公開第2020/240830(WO,A1)
【文献】米国特許出願公開第2019/0220596(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/57
(57)【特許請求の範囲】
【請求項1】
プログラムのバイナリに含まれるコードの中から、特定の性質を持つコードブロックである第1コードブロックを抽出する第1コードブロック抽出手段と、
プログラムのバイナリに含まれるコードの中から、所定のセンシティブな操作を行うコードブロックである第2コードブロックを抽出する第2コードブロック抽出手段と、
前記第1コードブロックと前記第2コードブロックとの間のコントロールフロー上での関係を示す関係情報を取得する関係情報取得手段と、
前記第1コードブロックにおける前記所定のセンシティブな操作の内容に基づいて、当該第1コードブロックがバックドアコードである可能性を示すスコア、又は、当該第1コードブロックが実行された際にシステムに及ぼす影響の大きさを示すスコアである、バックドアスコアを算出するとともに、前記関係情報取得手段によって取得された前記関係情報に基づいて、前記第1コードブロックに対する前記バックドアスコアの加減算を行う、バックドアスコア算出手段と、
前記第1コードブロック抽出手段により抽出された前記第1コードブロックと、前記バックドアスコア算出手段によって算出された当該第1コードブロックに対する前記バックドアスコアと、を出力する出力手段と、
を備えた、プログラム解析装置。
【請求項2】
前記関係情報取得手段によって、前記所定のセンシティブな操作を行う一つ以上の前記第2コードブロックを子ノードに持つ前記第1コードブロックが検出された場合、前記バックドアスコア算出手段は、前記一つ以上の第2コードブロックにおける前記所定のセンシティブな操作の内容に応じたスコアを、前記検出された第1コードブロックのバックドアスコアに加算する、
請求項1に記載のプログラム解析装置。
【請求項3】
前記関係情報取得手段によって、前記所定のセンシティブな操作を行う一つ以上の前記第2コードブロックを共に子ノードに持つような所定数以上の前記第1コードブロックが検出された場合、前記バックドアスコア算出手段は、前記検出された所定数以上の第1コードブロックのそれぞれのバックドアスコアから第1所定スコアを減算する、
請求項2に記載のプログラム解析装置。
【請求項4】
前記関係情報取得手段によって、前記所定のセンシティブな操作を行う一つ以上の前記第2コードブロックを子ノードに持ち、且つ、当該一つ以上の第2コードブロックの全てが通常のコントロールフローを構成する複数のコードブロックの何れかに含まれる、前記第1コードブロックが検出された場合、前記バックドアスコア算出手段は、前記検出された第1コードブロックのバックドアスコアから第2所定スコアを減算する、
請求項2に記載のプログラム解析装置。
【請求項5】
前記第1コードブロック抽出手段は、前記プログラムを実行した際に、通常のコントロールフローでは到達することのできないコードブロックを、前記特定の性質を持つコードブロックである前記第1コードブロックとして、前記バイナリに含まれるコードの中から抽出する、
請求項1~4の何れか一項に記載のプログラム解析装置。
【請求項6】
前記第1コードブロック抽出手段は、前記プログラムを実行した際に、通常のコントロールフローでは経由するパーサー機能を有するコードブロック、を経由しないコードブロックを、前記特定の性質を持つコードブロックである前記第1コードブロックとして、前記バイナリに含まれるコードの中から抽出する、
請求項1~4の何れか一項に記載のプログラム解析装置。
【請求項7】
前記第1コードブロック抽出手段は、前記プログラムを実行した際に、通常のコントロールフローでは経由する認証機能を有するコードブロック、を経由しないコードブロックを、前記特定の性質を持つコードブロックである前記第1コードブロックとして、前記バイナリに含まれるコードの中から抽出する、
請求項1~3の何れか一項に記載のプログラム解析装置。
【請求項8】
前記第1コードブロック抽出手段は、前記プログラムを実行した際に、通常のコントロールフローでは経由する認証機能を有するコードブロック、を経由しないコードブロックを、前記特定の性質を持つコードブロックである前記第1コードブロックとして、前記バイナリに含まれるコードの中から抽出するように構成され、
前記関係情報取得手段によって、前記所定のセンシティブな操作を行う一つ以上の前記第2コードブロックを子ノードに持ち、且つ、当該一つ以上の第2コードブロックの何れかが、認証機能を有するコードブロックの子ノードである前記第1コードブロックが検出された場合、前記バックドアスコア算出手段は、前記検出された第1コードブロックのバックドアスコアから第3所定スコアを加算する、
請求項2に記載のプログラム解析装置。
【請求項9】
前記所定のセンシティブな操作は、ユーザによって予め定められた、所定の関数を呼び出す操作、所定の変数にアクセスする操作、所定の命令を実行する操作、の少なくとも何れかである、
請求項1~8の何れか一項に記載のプログラム解析装置。
【請求項10】
前記所定の関数を呼び出す操作は、システムコール、所定のライブラリ関数、所定のAPI(Application Programming Interface)の少なくとも何れかを呼び出す操作を含む、
請求項9に記載のプログラム解析装置。
【請求項11】
前記所定の変数にアクセスする操作は、前記プログラムのグローバル変数にアクセスする操作を含む、
請求項9に記載のプログラム解析装置。
【請求項12】
プログラム解析装置が実行するプログラム解析方法であって、
プログラムのバイナリに含まれるコードの中から、特定の性質を持つコードブロックである第1コードブロックを抽出する第1コードブロック抽出ステップと、
プログラムのバイナリに含まれるコードの中から、所定のセンシティブな操作を行うコードブロックである第2コードブロックを抽出する第2コードブロック抽出ステップと、
前記第1コードブロックと前記第2コードブロックとの間のコントロールフロー上での関係を示す関係情報を取得する関係情報取得ステップと、
前記第1コードブロックにおける前記所定のセンシティブな操作の内容に基づいて、当該第1コードブロックがバックドアコードである可能性を示すスコア、又は、当該第1コードブロックが実行された際にシステムに及ぼす影響の大きさを示すスコアである、バックドアスコアを算出するとともに、取得された前記関係情報に基づいて、前記第1コードブロックに対する前記バックドアスコアの加減算を行う、スコア算出ステップと、
第1コードブロック抽出ステップにおいて抽出された前記第1コードブロックと、スコア算出ステップにおいて算出された当該第1コードブロックに対する前記バックドアスコアと、を出力する出力ステップと、
を備えた、プログラム解析方法。
【請求項13】
プログラムのバイナリに含まれるコードの中から、特定の性質を持つコードブロックである第1コードブロックを抽出する第1コードブロック抽出処理と、
プログラムのバイナリに含まれるコードの中から、所定のセンシティブな操作を行うコードブロックである第2コードブロックを抽出する第2コードブロック抽出処理と、
前記第1コードブロックと前記第2コードブロックとの間のコントロールフロー上での関係を示す関係情報を取得する関係情報取得処理と、
前記第1コードブロックにおける前記所定のセンシティブな操作の内容に基づいて、当該第1コードブロックがバックドアコードである可能性を示すスコア、又は、当該第1コードブロックが実行された際にシステムに及ぼす影響の大きさを示すスコアである、バックドアスコアを算出するとともに、取得された前記関係情報に基づいて、前記第1コードブロックに対する前記バックドアスコアの加減算を行う、スコア算出処理と、
第1コードブロック抽出処理において抽出された前記第1コードブロックと、スコア算出処理において算出された当該第1コードブロックに対する前記バックドアスコアと、を出力する出力処理と、
をコンピュータに実行させるプログラ
ム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、プログラム解析装置、プログラム解析方法、及び、プログラムが格納された非一時的なコンピュータ可読媒体に関する。
【背景技術】
【0002】
近年のインフラや企業システムは複雑化している。そのため、それらのインフラや企業システムは、単一の企業のデバイスやソフトウェアだけで構成されるのではなく、様々な企業のデバイスやソフトウェアを外部から調達し、それらを組み合わせて構築されることが一般的になっている。
【0003】
しかしながら、外部のメーカーから調達したソフトウェア(又はファームウェア)やハードウェアにおいて、バックドアが発見される事例が多数報告されている。本明細書で言及する「バックドア」とは、例えば、ソフトウェアを構成する複数の機能を含むプログラムに対して、該プログラムの一部として組み込まれた、ユーザに知らされていない且つ望まれていない機能として定義できる。
【0004】
そのため、インフラや企業システムの構築の取り纏めを行うメーカーは、外部のメーカーから調達したソフトウェアを構成するプログラムにおいて、バックドアが含まれていないか検査する必要がある。
【0005】
例えば、非特許文献1には、検査対象のバイナリに含まれるコードに対してスコアリングを行うことにより、バックドアコードの候補を抽出することが記載されている。ここで、非特許文献1では、対象バイナリに含まれるコードの中から、静的なデータの比較を行っている関数を特定し、その特定された関数による比較結果がその後の実行パスにどの程度影響を与えるのかについてのスコアリングを行うことにより、バックドアコードの候補を抽出している。
【先行技術文献】
【非特許文献】
【0006】
【文献】Sam L. Thomas, Tom Chothia, and Flavio D. Garcia, "Stringer: Measuring the Importance of Static Data Comparisons to Detect Backdoors and Undocumented Functionality", Computer Security ESORICS 2017, pp.513-531
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、非特許文献1では、スコアリング対象が一部のバックドアタイプに限定されてしまっているため、他のバックドアタイプの検査に適用することができない、という課題があった。
【0008】
本開示は、このような課題を解決するためになされたものであり、様々なバックドアタイプの検査に用いることが可能な、プログラム解析装置、プログラム解析方法、及び、プログラムが格納された非一時的なコンピュータ可読媒体を提供することを目的とする。
【課題を解決するための手段】
【0009】
本開示の第1の態様に係るプログラム解析装置は、プログラムのバイナリに含まれるコードの中から、特定の性質を持つコードブロックである第1コードブロックを抽出する第1コードブロック抽出手段と、プログラムのバイナリに含まれるコードの中から、所定のセンシティブな操作を行うコードブロックである第2コードブロックを抽出する第2コードブロック抽出手段と、前記第1コードブロックと前記第2コードブロックとの間のコントロールフロー上での関係を示す関係情報を取得する関係情報取得手段と、前記第1コードブロックにおける前記所定のセンシティブな操作の内容に基づいて、当該第1コードブロックがバックドアコードである可能性を示すスコア、又は、当該第1コードブロックが実行された際にシステムに及ぼす影響の大きさを示すスコアである、バックドアスコアを算出するとともに、前記関係情報取得手段によって取得された前記関係情報に基づいて、前記第1コードブロックに対する前記バックドアスコアの加減算を行う、バックドアスコア算出手段と、前記第1コードブロック抽出手段により抽出された前記第1コードブロックと、前記バックドアスコア算出手段によって算出された当該第1コードブロックに対する前記バックドアスコアと、を出力する出力手段と、を備える。
【0010】
本開示の第2の態様に係るプログラム解析方法は、プログラム解析装置が実行するプログラム解析方法であって、プログラムのバイナリに含まれるコードの中から、特定の性質を持つコードブロックである第1コードブロックを抽出する第1コードブロック抽出ステップと、プログラムのバイナリに含まれるコードの中から、所定のセンシティブな操作を行うコードブロックである第2コードブロックを抽出する第2コードブロック抽出ステップと、前記第1コードブロックと前記第2コードブロックとの間のコントロールフロー上での関係を示す関係情報を取得する関係情報取得ステップと、前記第1コードブロックにおける前記所定のセンシティブな操作の内容に基づいて、当該第1コードブロックがバックドアコードである可能性を示すスコア、又は、当該第1コードブロックが実行された際にシステムに及ぼす影響の大きさを示すスコアである、バックドアスコアを算出するとともに、取得された前記関係情報に基づいて、前記第1コードブロックに対する前記バックドアスコアの加減算を行う、スコア算出ステップと、第1コードブロック抽出ステップにおいて抽出された前記第1コードブロックと、スコア算出ステップにおいて算出された当該第1コードブロックに対する前記バックドアスコアと、を出力する出力ステップと、を備える。
【0011】
本開示の第3の態様に係る非一時的なコンピュータ可読媒体は、プログラムのバイナリに含まれるコードの中から、特定の性質を持つコードブロックである第1コードブロックを抽出する第1コードブロック抽出処理と、プログラムのバイナリに含まれるコードの中から、所定のセンシティブな操作を行うコードブロックである第2コードブロックを抽出する第2コードブロック抽出処理と、前記第1コードブロックと前記第2コードブロックとの間のコントロールフロー上での関係を示す関係情報を取得する関係情報取得処理と、前記第1コードブロックにおける前記所定のセンシティブな操作の内容に基づいて、当該第1コードブロックがバックドアコードである可能性を示すスコア、又は、当該第1コードブロックが実行された際にシステムに及ぼす影響の大きさを示すスコアである、バックドアスコアを算出するとともに、取得された前記関係情報に基づいて、前記第1コードブロックに対する前記バックドアスコアの加減算を行う、スコア算出処理と、第1コードブロック抽出処理において抽出された前記第1コードブロックと、スコア算出処理において算出された当該第1コードブロックに対する前記バックドアスコアと、を出力する出力処理と、をコンピュータに実行させるプログラムが格納されている。
【発明の効果】
【0012】
本開示により、様々なバックドアタイプの検査に用いることが可能な、プログラム解析装置、プログラム解析方法、及び、プログラムが格納された非一時的なコンピュータ可読媒体を提供することができる。
【図面の簡単な説明】
【0013】
【
図1】実施の形態1に係るプログラム解析装置の構成例を示すブロック図である。
【
図2】実施の形態1に係るプログラム解析装置の処理の流れの一例を示すフローチャートである。
【
図3】実施の形態2に係るプログラム解析装置の構成例を示すブロック図である。
【
図4】特定の性質を持つコードブロックの一例であるデッドコードブロックについて説明するための、あるプログラムのコントロールフローグラフの例を示す模式図である。
【
図5】特定の性質を持つコードブロックの一例であるデッドコードブロックについて説明するための、あるプログラムのコントロールフローグラフの例を示す模式図である。
【
図6】特定の性質を持つコードブロックの一例であるデッドコードブロックについて説明するための、あるプログラムのコントロールフローグラフの例を示す模式図である。
【
図7】特定の性質を持つコードブロックの他の例について説明するための、あるプログラムのコントロールフローグラフの例を示す模式図である。
【
図8】
図3に示すプログラム解析装置に設けられた関係情報取得部によって取得される関係情報について説明するための、あるプログラムのコントロールフローグラフの例を示す模式図である。
【
図9】
図3に示すプログラム解析装置に設けられた関係情報取得部によって取得される関係情報について説明するための、あるプログラムのコントロールフローグラフの例を示す模式図である。
【
図10】
図3に示すプログラム解析装置に設けられた関係情報取得部によって取得される関係情報について説明するための、あるプログラムのコントロールフローグラフの例を示す模式図である。
【
図11】実施の形態2に係るプログラム解析装置の処理の流れの一例を示すフローチャートである。
【
図12】実施の形態2に係るプログラム解析装置の処理の流れの一例を示すフローチャートである。
【
図13】実施の形態3に係るプログラム解析装置のハードウェア構成例を示す図である。
【
図14】構想段階のプログラム解析装置の構成例を示すブロック図である。
【
図15】プログラムの最適化によって生成された見かけ上のデッドコードブロックについて説明する模式図である。
【発明を実施するための形態】
【0014】
以下、図面を参照しつつ、実施形態について説明する。なお、実施形態において、同一又は同等の要素には、同一の符号を付し、重複する説明は省略される。
【0015】
<発明者による事前検討>
実施の形態1に係るプログラム解析装置について説明する前に、発明者が事前検討した内容について説明する。
【0016】
図14は、実施の形態1に至る前の構想段階のプログラム解析装置50の構成例を示すブロック図である。
図14に示すように、プログラム解析装置50は、コードブロック抽出部51と、バックドアスコア算出部52と、出力部53と、を備える。
【0017】
コードブロック抽出部51は、解析対象のプログラムのバイナリ(以下、対象バイナリと称す)に含まれるコードの中から、特定の性質を持つコードブロックをすべて抽出する。ここで述べるコードブロックとは、例えば、プログラム内における関数単位、又は、ベーシックブロック単位のコード群を指す。特定の性質を持つコードブロックとは、例えばデッドコードブロックのことである。また、デッドコードブロックとは、プログラムを実行した際に、通常のコントロールフローでは到達することのできないコードブロックのことである。
【0018】
バックドアスコア算出部52は、コードブロック抽出部51によって抽出された各コードブロックに対して、当該コードブロックの操作内容に基づいて、当該コードブロックがバックドアコードである可能性を示すスコア、又は、当該コードブロックが実行された際に、システムに及ぼす影響の大きさを示すスコアなどであるバックドアスコアを算出する。ここで述べるシステムとは、例えば、解析対象のプログラムを実行する環境を含むコンピュータのことである。
【0019】
例えば、バックドアスコア算出部52は、コードブロック抽出部51によって抽出されたコードブロックの中に所定のセンシティブな操作が存在する場合、当該操作に対して予め設定されたスコアを、当該コードブロックに対するバックドアスコアに加算する処理を行う。ここで述べる所定のセンシティブな操作とは、例えば、不正に実行されると、プログラムや当該プログラムを実行する環境を含むシステムに重大な影響を及ぼすと考えられる操作であって、ユーザ(例えば、プログラムの検査を依頼する依頼者や、検査を行う解析者など)によって予め定められた操作のことである。
【0020】
出力部53は、コードブロック抽出部51によって抽出されたコードブロックと、バックドアスコア算出部52によって算出された当該コードブロックに対するバックドアスコアと、を解析結果として出力する。
【0021】
以上により、プログラム解析装置50は、解析対象のプログラムに含まれるバックドアコードの候補であるコードブロックと、それに対するバックドアスコアとを、例えばプログラムの解析者に提示することができる。そのため、プログラムの解析者は、解析対象のプログラムのコードと仕様書とを比較したり、当該プログラムのコードを手動でつぶさに調べたりすることなく、当該プログラムからバックドアコードの候補を抽出することができる。また、プログラム解析装置50は、関連技術の場合と異なり、様々なバックドアタイプの検査に用いることができる。
【0022】
ところで、スコア化に用いられるシステムコール関数は、プログラム中に数百個単位で存在する。そのため、そのようなシステムコール関数の呼び出しを行うコードブロック、即ち、所定のセンシティブな操作を行うコードブロック、の数も増加傾向にある。また、コンパイラによるプログラムの最適化によって関数のインライン化が行われた結果、見かけ上はデッドコードであるがバックドアコードである可能性の低いデッドコードの数が増大している。
図15のコントロールフローグラフの例を参照すると、最適化前には通常のフローに含まれていたノードD51が、最適化後には通常のフローから外れてデッドコードになっている。なお、
図15において、実線の円は通常のノードを、破線の円はデッドコードブロックとなるノードを、矢印はコントロールフローを、それぞれ表している。これらのことから、所定のセンシティブな操作を行うコードにつながるデッドコードの数も増大している。
【0023】
しかしながら、プログラム解析装置50は、上述したようなバックドアコードである可能性の低いデッドコードに対しても、他のデッドコードと区別することなく、当該他のデッドコードと同じ条件でバックドアスコアを算出している。そのため、プログラム解析装置50は、信頼性の高いバックドアスコアを算出することができず、その結果、バックドアコードである可能性の高いコードブロックを精度良く抽出することができないという課題があった。
【0024】
そこで、各コードブロックに対して信頼性の高いバックドアスコアを算出することにより、バックドアコードである可能性の高いコードブロックを精度良く抽出することが可能なプログラム解析装置10が見いだされた。
【0025】
<実施の形態1>
図1は、実施の形態1にかかるプログラム解析装置10の構成例を示すブロック図である。
図1に示すように、プログラム解析装置10は、第1コードブロック抽出部11と、第2コードブロック抽出部12と、関係情報取得部13と、バックドアスコア算出部14と、を備える。
【0026】
第1コードブロック抽出部11は、解析対象のプログラムのバイナリ(以下、対象バイナリと称す)に含まれるコードの中から、特定の性質を持つコードブロックを第1コードブロックとしてすべて抽出する。ここで述べるコードブロックとは、例えば、プログラム内における関数単位、又は、ベーシックブロック単位のコード群を指す。特定の性質を持つコードブロックとは、例えばデッドコードブロックのことである。また、デッドコードブロックとは、プログラムを実行した際に、通常のコントロールフローでは到達することのできないコードブロックのことである。
【0027】
第2コードブロック抽出部12は、対象バイナリに含まれるコードの中から、所定のセンシティブな操作を行うコードブロックを第2コードブロックとして抽出する。ここで述べる所定のセンシティブな操作とは、詳しくは後述するが、例えば、不正に実行されると、プログラムや当該プログラムを実行する環境を含むシステムに重大な影響を及ぼすと考えられる操作であって、ユーザによって予め定められた操作のことである。また、システムとは、例えば、解析対象のプログラムを実行する環境を含むコンピュータのことである。
【0028】
関係情報取得部13は、デッドコードブロック等の第1コードブロックと、所定のセンシティブな操作を行う第2コードブロックと、の間のコントロールフロー上での関係を示す関係情報を取得する。
【0029】
例えば、関係情報取得部13は、第1コードブロックのうち、所定のセンシティブな操作を行う一つ以上の第2コードブロックを子ノードに持つ第1コードブロックを、当該一つ以上の第2コードブロックとの関係性を表す情報である関係情報A1として取得する。また、関係情報取得部13は、第1コードブロックのうち、所定のセンシティブな操作を行う一つ以上の第2コードブロックを子ノードに持ち、且つ、当該一つ以上の第2コードブロックの全てが通常のコントロールフローから辿れるような(換言すると、当該一つ以上の第2コードブロックの全てが通常のコントロールフローを構成する複数のコードブロックに含まれるような)、第1コードブロックを、当該一つ以上の第2コードブロックとの関係性を表す情報である関係情報A2として取得する。関係情報A1,A2以外の関係情報については、後述する。
【0030】
バックドアスコア算出部14は、第1コードブロック抽出部11によって抽出された各第1コードブロックに対して、当該第1コードブロックの操作内容(所定のセンシティブな操作の内容)に基づいて、当該第1コードブロックがバックドアコードである可能性を示すスコア、又は、当該第1コードブロックが実行された際にシステムに及ぼす影響の大きさを示すスコアである、バックドアスコアを算出する。
【0031】
さらに、バックドアスコア算出部14は、関係情報取得部13によって取得された関係情報に基づいて、各第1コードブロックに対するバックドアスコアの加減算を行う。
【0032】
例えば、関係情報取得部13によって上述の関係情報A1が取得された場合、換言すると、関係情報取得部13によって、所定のセンシティブな操作を行う一つ以上の第2コードブロックを子ノードに持つような第1コードブロックが検出(取得)された場合、検出された第1コードブロックは、バックドアコードである可能性が比較的高いと考えられる。この場合、バックドアスコア算出部14は、前記一つ以上の第2コードブロックに含まれる所定のセンシティブな操作の内容に応じたスコアを、検出された第1コードブロックに対するバックドアスコアに加算する。
【0033】
また、例えば、関係情報取得部13によって上述の関係情報A2が取得された場合、換言すると、関係情報取得部13によって、所定のセンシティブな操作を行う一つ以上の第2コードブロックを子ノードに持ち、且つ、当該一つ以上の第2コードブロックが何れも通常のコントロールフローから辿れるような、第1コードブロックが検出(取得)された場合、検出された第1コードブロックは、プログラムの最適化に伴う関数のインライン化などによって生成されたデッドコードである可能性が高いため、バックドアコードである可能性は低い。この場合、バックドアスコア算出部14は、例えば検出された第1コードブロックに対するバックドアスコアから所定のスコアを減算する。
【0034】
出力部15は、第1コードブロック抽出部11によって抽出された第1コードブロックと、バックドアスコア算出部14によって算出された当該第1コードブロックに対するバックドアスコアと、を解析結果として出力する。このとき、出力部15は、例えば、第1コードブロックに当該コードブロックに対するバックドアスコアを付与した態様で、解析結果を出力することができる。
【0035】
続いて、
図2を用いて、プログラム解析装置10の処理の流れの一例を説明する。
図2は、プログラム解析装置10の処理の流れの一例を示すフローチャートである。
【0036】
図2に示すように、まず、第1コードブロック抽出部11は、対象バイナリに含まれるコードの中から、特定の性質を持つコードブロックを第1コードブロックとしてすべて抽出する(ステップS101)。その後、第2コードブロック抽出部12は、対象バイナリに含まれるコードの中から、所定のセンシティブな操作を行うコードブロックを第2コードブロックとして抽出する(ステップS102)。その後、関係情報取得部13は、第1コードブロックと、第2コードブロックと、の間のコントロールフロー上での関係を示す関係情報を取得する(ステップS103)。その後、バックドアスコア算出部14は、第1コードブロック抽出部11によって抽出された各第1コードブロックに対して、当該第1コードブロックの操作内容(所定のセンシティブな操作の内容)に基づいて、バックドアスコアを算出する(ステップS104)。さらに、バックドアスコア算出部14は、関係情報取得部13によって取得された関係情報に基づいて、各第1コードブロックに対するバックドアスコアの加減算を行う(ステップS105)。その後、出力部15は、第1コードブロック抽出部11によって抽出された第1コードブロックと、バックドアスコア算出部14によって算出された当該第1コードブロックに対するバックドアスコアと、を解析結果として出力する(ステップS106)。
【0037】
以上により、本実施の形態にかかるプログラム解析装置10は、解析対象のプログラムに含まれるバックドアコードの候補である第1コードブロックと、それに対するバックドアスコアとを、例えばプログラムの解析者に提示することができる。それにより、プログラムの解析者は、解析対象のプログラムのコードと仕様書とを比較したり、当該プログラムのコードを手動でつぶさに調べたりすることなく、当該プログラムからバックドアコードの候補を抽出することができる。
【0038】
ここで、本実施の形態にかかるプログラム解析装置10は、特定の性質を持つコードブロックである第1コードブロックと、所定のセンシティブな操作を行うコードブロックである第2コードブロックと、の間のコントロールフロー上での関係を考慮して、各第1コードブロックに対するバックドアスコアの算出を行う。それにより、プログラム解析装置10は、例えば、コンパイラによるプログラムの最適化によって関数のインライン化が行われた結果、見かけ上はデッドコードであるが、バックドアコードである可能性の低い第1コードブロック、に対するバックドアスコアを低くすることなどができる。つまり、プログラム解析装置10は、各第1コードブロックに対してより信頼性の高いバックドアスコアを算出することができる。その結果、プログラムの解析者は、当該プログラムからバックドアコードである可能性の高いコードブロックを精度良く抽出することができる。
【0039】
<実施の形態2>
図3は、実施の形態2にかかるプログラム解析装置20の構成例を示すブロック図である。
図3に示すように、プログラム解析装置20は、第1コードブロック抽出部21と、第2コードブロック抽出部22と、関係情報取得部23と、バックドアスコア算出部24と、出力部25と、対象操作テーブル26と、を備える。
【0040】
第1コードブロック抽出部21は、対象バイナリに含まれるコードの中から、特定の性質を持つコードブロックを第1コードブロックとしてすべて抽出する。
【0041】
より具体的には、第1コードブロック抽出部21は、対象バイナリに対して、静的解析などを行い、プログラム全体のコントロールフローグラフを作成する。その後、第1コードブロック抽出部21は、作成したコントロールフローグラフなどの情報に基づいて、対象バイナリに含まれるコードの中から、特定の性質を持つコードブロックを第1コードブロックとしてすべて抽出する。
【0042】
特定の性質を持つコードブロックとは、上述したように、例えばデッドコードブロックのことである。また、デッドコードブロックとは、プログラムを実行した際に、通常のコントロールフローでは到達することのできないコードブロックのことである。
【0043】
ここで、
図4及び
図5を参照して、デッドコードブロックを抽出する方法の例について説明する。
図4及び
図5は、デッドコードブロックについて説明するための、あるプログラムのコントロールフローグラフの例を示す模式図である。なお、
図4及び
図5において、実線の円は通常のノードを、破線の円はデッドコードブロックとなるノードを、矢印はコントロールフローを、それぞれ表している(以降の
図6及び
図7において同じ)。
【0044】
図4に示すように、第1コードブロック抽出部21は、コントロールフローグラフ上において親ノードを持たないノードを、デッドコードブロック(即ち、第1コードブロック)として抽出する。また、
図5に示すように、第1コードブロック抽出部21は、コントロールフローグラフ上において親ノードを持たないノードに加えて、その子ノードも、デッドコードブロック(即ち、第1コードブロック)として抽出してもよい。
【0045】
上述したデッドコードブロックは、プログラムへの通常の入力値が与えられている限りは、実行されることはない。しかし、
図6に示すように、プログラムに脆弱性がある場合、デッドコードブロックは、特殊な入力値を与えるなどの特定の条件下において、脆弱性のある関数により呼び出され、実行されることがある。
【0046】
なお、特定の性質を持つコードブロックは、上述したデッドコードブロックに限られない。例えば、プログラムを通常実行する上で、必ず経由するような起点となる所定の機能、具体的には、認証機能やパーサー機能などを経由しないコードブロックを、特定の性質を持つコードブロックとしてもよい。
図7の例では、コントロールフロー上に、起点となる認証機能が存在する。この場合、第1コードブロック抽出部21は、認証機能を経由しないコードブロックを、特定の性質を持つコードブロックとして抽出してもよい。
【0047】
第2コードブロック抽出部22は、対象バイナリに含まれるコードの中から、所定のセンシティブな操作を行うコードブロックを第2コードブロックとして抽出する。
【0048】
所定のセンシティブな操作とは、上述したように、例えば、不正に実行されると、プログラムや当該プログラムを実行する環境を含むシステムに重大な影響を及ぼすと考えられる操作であって、ユーザによって予め定められた操作のことである。
【0049】
例えば、所定のセンシティブな操作とは、ユーザ(例えば、プログラムの検査を依頼する依頼者や、検査を行う解析者など)によって予め定められた、所定の関数を呼び出す操作、所定の変数にアクセスする操作、及び、所定の命令を実行する操作の少なくとも何れかの操作のことである。所定の関数を呼び出す操作とは、システムコール、所定のライブラリ関数、及び、所定のAPI(Application Programming Interface)の少なくとも何れかを呼び出す操作のことである。所定の変数にアクセスする操作とは、例えば、前記プログラムのグローバル変数にアクセスする操作のことである。これらの所定のセンシティブな操作は、それらに対応するスコアとともに、ユーザによって予め対象操作テーブル26に格納されている。
【0050】
関係情報取得部23は、デッドコードブロック等の第1コードブロックと、所定のセンシティブな操作を行う第2コードブロックと、の間のコントロールフロー上での関係を示す関係情報を取得する。
【0051】
例えば、関係情報取得部23は、第1コードブロックのうち、所定のセンシティブな操作を行う一つ以上の第2コードブロックを子ノードに持つ第1コードブロックを、当該一つ以上の第2コードブロックとの関係性を表す情報である関係情報A1として取得する。
【0052】
また、関係情報取得部23は、第1コードブロックのうち、所定のセンシティブな操作を行う一つ以上の第2コードブロックを子ノードに持ち、且つ、当該一つ以上の第2コードブロックの全てが通常のコントロールフローから辿れるような(換言すると、当該一つ以上の第2コードブロックの全てが通常のコントロールフローを構成する複数のコードブロックに含まれるような)、第1コードブロックを、当該一つ以上の第2コードブロックとの関係性を表す関係情報A2として取得する。但し、関係情報取得部23は、デッドコードブロックや、パーサー機能を経由しない(パーサーから辿ることのできない)コードブロック等の第1コードブロックについての関係情報A2を取得対象としており、通常のコントロールフローで経由する認証機能を有するコードブロック、を経由しない第1コードブロック(以下、単に認証機能を経由しないコードブロックとも称す)については、関係情報A2の取得対象としていない。
【0053】
図8は、関係情報取得部23によって取得される関係情報A1,A2について説明するための、あるプログラムのコントロールフローグラフの例を示す模式図である。
図8の例では、コントロールフローグラフ上において親ノードを持たないノードである9個のデッドコードブロックが、スコアリング対象の第1コードブロックD1~D9として抽出されている。また、
図8の例では、所定のセンシティブな操作を行うノードである7個のコードブロックが、第2コードブロックE1~E7として抽出されている。なお、
図8の例では、第2コードブロックE1~E7が、それぞれ所定のセンシティブな関数S1~S7の呼び出し操作を行っているものとする。
【0054】
図8を参照すると、関係情報取得部23は、第1コードブロックD1~D9のうち、第2コードブロックE1~E7の少なくとも何れかを子ノードに持つ第1コードブロックD2~D9を、それらに繋がる第2コードブロックとの関係性を表す情報である関係情報A1として取得する。また、関係情報取得部23は、第1コードブロックD1~D9のうち、第2コードブロックE1~E7の少なくとも何れかを子ノードに持ち、且つ、子ノードに持つ第2コードブロックの全てが通常のコントロールフロー(例えばC言語の場合にはmain関数)から辿れるような第1コードブロックD3~D5を、そられに繋がる第2コードブロックとの関係性を表す情報である関係情報A2として取得する。
【0055】
なお、関係情報取得部23は、上述の関係情報A1,A2を取得する場合に限られず、バックコードである可能性が低いとしてユーザに予め設定された任意の関係情報を取得してもよい。
【0056】
例えば、関係情報取得部23は、一つ以上の第2コードブロックを共に子ノードに持つような所定数以上の第1コードブロックが存在する場合、当該所定数以上の第1コードブロックを、当該一つ以上の第2コードブロックとの関係性を表す情報である関係情報A3として取得してもよい。ここで、多数の第1コードブロックから共通の第2コードブロックに到達可能であるということは、あらゆるユーザ入力や実行条件によって共通の第2コードブロックに到達可能であることになるため、これらの多数の第1コードブロックがバックドアコードである可能性は低い。
【0057】
図9は、関係情報取得部23によって取得される関係情報A3について説明するための、あるプログラムのコントロールフローグラフの例を示す模式図である。
図9の例では、コントロールフローグラフ上において親ノードを持たないノードである7個のデッドコードブロックが、スコアリング対象の第1コードブロックD11~D17として抽出されている。また、
図9の例では、所定のセンシティブな操作を行うノードである1個のコードブロックが、第2コードブロックE11として抽出されている。なお、
図9の例では、第2コードブロックE11が、所定のセンシティブな関数S11の呼び出し操作を行っているものとする。
【0058】
図9を参照すると、所定数が5である場合、共通の第2コードブロックE11を子ノードに持つような第1コードブロックが所定数以上である。そのため、関係情報取得部23は、共通の第2コードブロックE11を子ノードに持つ所定数以上の第1コードブロックD11~D17のすべてを、当該第2コードブロックE11との関係性を表す情報である関係情報A3として取得する。
【0059】
また、
図10は、関係情報取得部23によって取得される関係情報A3について説明するための、あるプログラムのコントロールフローグラフの他の例を示す模式図である。
図10の例では、コントロールフローグラフ上において親ノードを持たないノードである7個のデッドコードブロックが、スコアリング対象の第1コードブロックD21~D27として抽出されている。また、
図10の例では、所定のセンシティブな操作を行うノードである7個のコードブロックが、第2コードブロックE21~E27として抽出されている。なお、
図10の例では、第2コードブロックE21~E27が、それぞれ所定のセンシティブな関数S21~S27の呼び出し操作を行っているものとする。
【0060】
図10を参照すると、所定数が5である場合、共通の第2コードブロックE21~E27を子ノードに持つような第1コードブロックが所定数以上である。そのため、関係情報取得部23は、共通の第2コードブロックE21~E27を子ノードに持つ所定数以上の第1コードブロックD21~D27のすべてを、当該第2コードブロックE21~E27との関係性を表す情報である関係情報A3として取得する。
【0061】
また、例えば、関係情報取得部23は、通常のコントロールフローで経由する認証機能を有するコードブロック、を経由しない第1コードブロックであって、所定のセンシティブな操作を行う一つ以上の第2コードブロックを子ノードに持ち、且つ、当該一つ以上の第2コードブロックの何れかが、認証機能を有するコードブロックの子ノードであるような、第1コードブロックを、当該一つ以上の第2コードブロックとの関係性を表す情報である関係情報A4として取得してもよい。
【0062】
バックドアスコア算出部24は、第1コードブロック抽出部21によって抽出された各第1コードブロックに対して、当該第1コードブロックの操作内容(所定のセンシティブな操作)に基づいて、バックドアスコアを算出する。
【0063】
より具体的には、バックドアスコア算出部24は、第1コードブロック抽出部21によって抽出された第1コードブロック毎に、当該第1コードブロックの操作内容に応じたスコアを対象操作テーブル26から読み出して、当該第1コードブロックのバックドアスコアに加算する。
【0064】
なお、対象操作テーブル26には、対象操作(所定のセンシティブな操作)とそれに対応するスコアとの組み合わせが複数登録されている。対象操作テーブル26は、プログラム解析装置20の内部に設けられる場合に限られず、プログラム解析装置20の外部の記憶装置などに設けられてもよい。
【0065】
さらに、バックドアスコア算出部24は、関係情報取得部23によって取得された関係情報に基づいて、各第1コードブロックに対するバックドアスコアの加減算を行う。
【0066】
例えば、関係情報取得部23によって上述の関係情報A1が取得された場合、換言すると、関係情報取得部23によって、所定のセンシティブな操作を行う一つ以上の第2コードブロックを子ノードに持つような第1コードブロックが検出(取得)された場合、検出された第1コードブロックは、バックドアコードである可能性が比較的高いと考えられる。この場合、バックドアスコア算出部24は、前記一つ以上の第2コードブロックに含まれる所定のセンシティブな操作の内容に応じたスコアを、検出された第1コードブロックに対するバックドアスコアに加算する。なお、このときのスコアには、対象操作テーブル26に登録された対象操作に応じたスコアが用いられる。
【0067】
また、例えば、関係情報取得部23によって上述の関係情報A2が取得された場合、換言すると、関係情報取得部23によって、所定のセンシティブな操作を行う一つ以上の第2コードブロックを子ノードに持ち、且つ、当該一つ以上の第2コードブロックが何れも通常のコントロールフローから辿れるような、第1コードブロックが検出(取得)された場合、検出された第1コードブロックは、プログラムの最適化に伴う関数のインライン化などによって生成されたデッドコードである可能性が高いため、バックドアコードである可能性は低い。この場合、バックドアスコア算出部24は、例えば検出された第1コードブロックに対するバックドアスコアから所定のスコアを減算する(或いは、関係情報A1が取得されたことによって加算されたスコア分を減算する)。但し、既に説明したように、このとき検出された第1コードブロックには、認証機能を経由しないコードブロックは含まれていない。なお、このときのスコアには、対象操作テーブル26に登録された対象操作に応じたスコアが用いられてもよい。
【0068】
また、例えば、関係情報取得部23によって上述の関係情報A3が取得された場合、換言すると、一つ以上の第2コードブロックを共に子ノードに持つ所定数以上の第1コードブロックが検出(取得)された場合、検出された第1コードブロックは、バックドアコードである可能性は低い。この場合、バックドアスコア算出部24は、例えば検出された第1コードブロックに対するバックドアスコアから所定のスコアを減算する(或いは、関係情報A1が取得されたことによって加算されたスコア分を減算する)。なお、このときのスコアには、対象操作テーブル26に登録された対象操作に応じたスコアが用いられてもよい。
【0069】
さらに、例えば、関係情報取得部23によって上述の関係情報A4が取得された場合、換言すると、認証機能を経由しない第1コードブロックであって、所定のセンシティブな操作を行う一つ以上の第2コードブロックを子ノードに持ち、且つ、当該一つ以上の第2コードブロックの何れかが、認証機能を有するコードブロックの子ノードであるような、第1コードブロックが検出(取得)された場合、検出された第1コードブロックは、バックドアコードである可能性が比較的高いと考えられる。この場合、バックドアスコア算出部24は、例えば検出された第1コードブロックに対するバックドアスコアに所定のスコアを加算する(或いは、関係情報A1が取得されたことによって加算されたスコアの減算を行わない)。なお、このときのスコアには、対象操作テーブル26に登録された対象操作に応じたスコアが用いられてもよい。
【0070】
出力部25は、第1コードブロック抽出部21によって抽出された第1コードブロックと、バックドアスコア算出部24によって算出された当該第1コードブロックに対するバックドアスコアと、を解析結果として出力する。
【0071】
出力部25による各第1コードブロックの出力形式は、対象バイナリ内におけるシンボル情報、該コードブロックの相対アドレス、プログラムの解析時に命名したコードブロック名などでよい。また、第1コードブロックは、そのコードブロックに対するバックドアスコアが付与された態様で、出力されてもよい。
【0072】
なお、プログラム解析装置20では、解析対象のプログラムがバイナリ形式であり、該プログラムのバイナリが入力されることを想定しているが、ソースコードを解析対象としてもよい。その場合は、第1コードブロック抽出部21が、解析対象のソースコードをコンパイルし、バイナリ形式に変換すればよい。また、第1コードブロック抽出部21、第2コードブロック抽出部22、関係情報取得部23、バックドアスコア算出部24、又は不図示の処理部が、ソースコードから得られる情報を適宜解析に利用してもよい。
【0073】
続いて、
図11及び
図12を用いて、プログラム解析装置20の処理の流れの一例を説明する。
図11及び
図12は、プログラム解析装置20の処理の流れの一例を示すフローチャートである。なお、
図11及び
図12のそれぞれの記号Aは、連結しており、
図11及び
図12のそれぞれの記号Bは、連結している。
【0074】
図11及び
図12に示すように、まず、第1コードブロック抽出部21は、対象バイナリに対して、静的解析などを行い、コントロールフローグラフを作成する(ステップS201)。その後、第1コードブロック抽出部21は、作成したコントロールフローグラフなどの情報に基づいて、対象バイナリに含まれるコードの中から、特定の性質を持つコードブロック群を第1コードブロック群(集合D)としてすべて抽出する(ステップS202)。
【0075】
その後、第2コードブロック抽出部22は、対象バイナリに含まれるコードの中から、所定のセンシティブな操作を行うコードブロック群を第2コードブロック群(集合E)として抽出する(ステップS203)。
【0076】
また、このとき、第2コードブロック抽出部22は、第2コードブロック群(集合E)の中から、通常のコントロールフローから辿れる第2コードブロック群(集合Ea)と、第1コードブロック群(集合D)に含まれる所定数以上の第1コードブロックの全てから辿れる第2コードブロック群(集合Eb)と、を抽出する(ステップS204)。
【0077】
その後、関係情報取得部23は、デッドコードブロック等の第1コードブロックと、所定のセンシティブな操作を行う第2コードブロックと、の間のコントロールフロー上での関係を示す関係情報を取得する。その後、バックドアスコア算出部24は、第1コードブロック抽出部21によって抽出された各第1コードブロックに対して、当該第1コードブロックの操作内容に基づいて、バックドアスコアを算出する。さらに、バックドアスコア算出部24は、関係情報取得部23によって取得された関係情報に基づいて、各第1コードブロックに対するバックドアスコアの加減算を行う。
【0078】
関係情報取得部23及びバックドアスコア算出部24による具体的な処理の流れは、例えば、以下の通りである。
【0079】
まず、第1コードブロック群(集合D)の中から、検査未実施の第1コードブロックが検査対象として一つ選択される(ステップS205)。その後、検査対象の第1コードブロック内の操作内容(所定のセンシティブな操作の内容)に応じたバックドアスコアの算出が行われる(ステップS206)。
【0080】
このとき、検査対象の第1コードブロックが、子ノードに、集合Eの要素を持つか否かの判定が行われる(ステップS207)。即ち、検査対象の第1コードブロックが、子ノードに、所定のセンシティブな操作を行う第2コードブロックを持つか否かの判定が行われる。
【0081】
例えば、検査対象の第1コードブロックが、子ノードに、集合Eの要素を持つ場合(ステップS207のYES)、検査対象の第1コードブロックに対するバックドアスコアには、所定のセンシティブな操作の内容に応じたスコアが加算される(ステップS208)。一方、検査対象の第1コードブロックが、子ノードに、集合Eの要素を持たない場合(ステップS207のNO)、検査対象の第1コードブロックに対するバックドアスコアの加減算は行われない。
【0082】
また、このとき、検査対象の第1コードブロックが、認証機能を経由しないコードブロックであるか否かの判定が行われる(ステップS209)。
【0083】
例えば、検査対象の第1コードブロックが、認証機能を経由しないコードブロックではない場合(ステップS209のNO)、即ち、例えば、デッドコードブロックや、パーサーから辿れないコードブロックである場合、続けて、ステップS210の処理が行われる。
【0084】
具体的には、検査対象の第1コードブロックが子ノードに持つ集合Eの要素が、集合Ea又は集合Ebの要素であるか否かの判定が行われる(ステップS210)。即ち、検査対象の第1コードブロックが子ノードに持つ第2コードブロックの全てが、通常のコントロールフローから辿れるか、又は、所定数以上の第1コードブロックの全てから辿れるか、の判定が行われる。
【0085】
例えば、検査対象の第1コードブロックが子ノードに持つ集合Eの要素が、集合Ea又は集合Ebの要素である場合(ステップS210のYES)、検査対象の第1コードブロックに対するバックドアスコアから、集合Eaに応じた所定スコア又は集合Ebに応じた所定スコアが減算される(ステップS211)。一方、検査対象の第1コードブロックが子ノードに持つ集合Eの要素が、集合Ea及び集合Ebの何れの要素でもない場合(ステップS210のNO)、検査対象の第1コードブロックに対するバックドアスコアの加減算は行われない。
【0086】
ステップS209の処理において、検査対象の第1コードブロックが、認証機能を経由しないコードブロックである場合(ステップS209のYES)、続けて、ステップS212の処理が行われる。
【0087】
具体的には、検査対象の第1コードブロックが子ノードに持つ集合Eの要素が、認証機能を有するコードブロックから辿れる要素であるか否かの判定が行われる(ステップS212)。即ち、検査対象の第1コードブロックが子ノードに持つ第2コードブロックの何れかが、認証機能を有するコードブロックから辿れるか(認証機能を有するコードブロックの子ノードであるか)否かの判定が行われる。
【0088】
検査対象の第1コードブロックが子ノードに持つ集合Eの要素が、認証機能を有するコードブロックから辿れる要素である場合(ステップS212のYES)、検査対象の第1コードブロックに対するバックドアスコアに、所定スコアが加算される(ステップS213)。一方、検査対象の第1コードブロックが子ノードに持つ集合Eの要素が、認証機能を有するコードブロックから辿れる要素でない場合(ステップS212のNO)、検査対象の第1コードブロックに対するバックドアスコアの加算は行われない。
【0089】
これで、検査対象の第1コードブロックに対するバックドアスコアの算出が完了する。
【0090】
その後、検査未実施の第1コードブロックが残っている場合には(ステップS214のYES)、検査未実施の第1コードブロックが検査対象として一つ選択され(ステップS205)、ステップS206~S213の処理が行われる。検査未実施の第1コードブロックが残っていない場合には(ステップS214のNO)、各第1コードブロック及び当該第1コードブロックに対するバックドアスコアが、解析結果として出力部25から出力される(ステップS215)。
【0091】
以上により、本実施の形態にかかるプログラム解析装置20は、解析対象のプログラムに含まれるバックドアコードの候補である第1コードブロックと、それに対するバックドアスコアとを、例えばプログラムの解析者に提示することができる。それにより、プログラムの解析者は、解析対象のプログラムのコードと仕様書とを比較したり、当該プログラムのコードを手動でつぶさに調べたりすることなく、当該プログラムからバックドアコードの候補を抽出することができる。
【0092】
ここで、本実施の形態にかかるプログラム解析装置20は、特定の性質を持つコードブロックである第1コードブロックと、所定のセンシティブな操作を行うコードブロックである第2コードブロックと、の間のコントロールフロー上での関係を考慮して、各第1コードブロックに対するバックドアスコアの算出を行う。それにより、プログラム解析装置10は、例えば、コンパイラによるプログラムの最適化によって関数のインライン化が行われた結果、見かけ上はデッドコードであるが、バックドアコードである可能性の低い第1コードブロック、に対するバックドアスコアを低くすることなどができる。つまり、プログラム解析装置20は、各第1コードブロックに対してより信頼性の高いバックドアスコアを算出することができる。その結果、プログラムの解析者は、当該プログラムからバックドアコードである可能性の高いコードブロックを精度良く抽出することができる。
【0093】
また、解析者などであるユーザは、バックドアコードの候補となるコードブロック及びその子ノードが持つ可能性のある操作を、自ら、対象操作テーブル26に登録することができる。そのため、ユーザは、どのようなコードブロックを、バックドアコードの候補として抽出するかを決めることができる。
【0094】
<実施の形態3>
図13は、実施の形態3に係るプログラム解析装置100のハードウェア構成例を示す図である。
図13において、プログラム解析装置100は、プロセッサ101と、メモリ102と、を備えている。プロセッサ101は、例えば、マイクロプロセッサ、MPU(Micro Processing Unit)、又はCPU(Central Processing Unit)であってもよい。プロセッサ101は、複数のプロセッサを含んでもよい。メモリ102は、揮発性メモリ及び不揮発性メモリの組み合わせによって構成される。メモリ102は、プロセッサ101から離れて配置されたストレージを含んでもよい。この場合、プロセッサ101は、図示されていないI/O(Input/Output)インタフェースを介してメモリ102にアクセスしてもよい。
【0095】
実施の形態1に係るプログラム解析装置10は、
図13に示したハードウェア構成を有することができる。また、プログラム解析装置10における第1コードブロック抽出部11、第2コードブロック抽出部12、関係情報取得部13、バックドアスコア算出部14、及び、出力部15は、プロセッサ101がメモリ102に記憶されたプログラムを読み込んで実行することにより実現されてもよい。
【0096】
同様に、実施の形態2に係るプログラム解析装置20は、
図13に示したハードウェア構成を有することができる。また、プログラム解析装置20における第1コードブロック抽出部21、第2コードブロック抽出部22、関係情報取得部23、バックドアスコア算出部24、及び、出力部25は、プロセッサ101がメモリ102に記憶されたプログラムを読み込んで実行することにより実現されてもよい。また、プログラム解析装置20における対象操作テーブル26は、メモリ102に記憶されてもよい。
【0097】
プログラム解析装置10,20を実現するための上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えば、フレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば、光磁気ディスク)、CD-ROM(Compact Disc-Read Only Memory)、CD-R(CD-Recordable)、CD-R/W(CD-ReWritable)、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory)を含む。また、上述したプログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバなどの有線通信路、又は無線通信路を介して、プログラムをプログラム解析装置10,20に供給できる。
【0098】
以上、実施の形態を参照して本開示を説明したが、本開示は上述した実施の形態に限定されるものではない。本開示の構成や詳細には、本開示のスコープ内で当業者が理解し得る様々な変更をすることができる。
【0099】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【0100】
(付記1)
プログラムのバイナリに含まれるコードの中から、特定の性質を持つコードブロックである第1コードブロックを抽出する第1コードブロック抽出手段と、
プログラムのバイナリに含まれるコードの中から、所定のセンシティブな操作を行うコードブロックである第2コードブロックを抽出する第2コードブロック抽出手段と、
前記第1コードブロックと前記第2コードブロックとの間のコントロールフロー上での関係を示す関係情報を取得する関係情報取得手段と、
前記第1コードブロックにおける前記所定のセンシティブな操作の内容に基づいて、当該第1コードブロックがバックドアコードである可能性を示すスコア、又は、当該第1コードブロックが実行された際にシステムに及ぼす影響の大きさを示すスコアである、バックドアスコアを算出するとともに、前記関係情報取得手段によって取得された前記関係情報に基づいて、前記第1コードブロックに対する前記バックドアスコアの加減算を行う、バックドアスコア算出手段と、
前記第1コードブロック抽出手段により抽出された前記第1コードブロックと、前記バックドアスコア算出手段によって算出された当該第1コードブロックに対する前記バックドアスコアと、を出力する出力手段と、
を備えた、プログラム解析装置。
【0101】
(付記2)
前記関係情報取得手段によって、前記所定のセンシティブな操作を行う一つ以上の前記第2コードブロックを子ノードに持つ前記第1コードブロックが検出された場合、前記バックドアスコア算出手段は、前記一つ以上の第2コードブロックにおける前記所定のセンシティブな操作の内容に応じたスコアを、前記検出された第1コードブロックのバックドアスコアに加算する、
付記1に記載のプログラム解析装置。
【0102】
(付記3)
前記関係情報取得手段によって、前記所定のセンシティブな操作を行う一つ以上の前記第2コードブロックを共に子ノードに持つような所定数以上の前記第1コードブロックが検出された場合、前記バックドアスコア算出手段は、前記検出された所定数以上の第1コードブロックのそれぞれのバックドアスコアから第1所定スコアを減算する、
付記2に記載のプログラム解析装置。
【0103】
(付記4)
前記関係情報取得手段によって、前記所定のセンシティブな操作を行う一つ以上の前記第2コードブロックを子ノードに持ち、且つ、当該一つ以上の第2コードブロックの全てが通常のコントロールフローを構成する複数のコードブロックの何れかに含まれる、前記第1コードブロックが検出された場合、前記バックドアスコア算出手段は、前記検出された第1コードブロックのバックドアスコアから第2所定スコアを減算する、
付記2に記載のプログラム解析装置。
【0104】
(付記5)
前記第1コードブロック抽出手段は、前記プログラムを実行した際に、通常のコントロールフローでは到達することのできないコードブロックを、前記特定の性質を持つコードブロックである前記第1コードブロックとして、前記バイナリに含まれるコードの中から抽出する、
付記1~4の何れか一項に記載のプログラム解析装置。
【0105】
(付記6)
前記第1コードブロック抽出手段は、前記プログラムを実行した際に、通常のコントロールフローでは経由するパーサー機能を有するコードブロック、を経由しないコードブロックを、前記特定の性質を持つコードブロックである前記第1コードブロックとして、前記バイナリに含まれるコードの中から抽出する、
付記1~4の何れか一項に記載のプログラム解析装置。
【0106】
(付記7)
前記第1コードブロック抽出手段は、前記プログラムを実行した際に、通常のコントロールフローでは経由する認証機能を有するコードブロック、を経由しないコードブロックを、前記特定の性質を持つコードブロックである前記第1コードブロックとして、前記バイナリに含まれるコードの中から抽出する、
付記1~3の何れか一項に記載のプログラム解析装置。
【0107】
(付記8)
前記第1コードブロック抽出手段は、前記プログラムを実行した際に、通常のコントロールフローでは経由する認証機能を有するコードブロック、を経由しないコードブロックを、前記特定の性質を持つコードブロックである前記第1コードブロックとして、前記バイナリに含まれるコードの中から抽出するように構成され、
前記関係情報取得手段によって、前記所定のセンシティブな操作を行う一つ以上の前記第2コードブロックを子ノードに持ち、且つ、当該一つ以上の第2コードブロックの何れかが、認証機能を有するコードブロックの子ノードである前記第1コードブロックが検出された場合、前記バックドアスコア算出手段は、前記検出された第1コードブロックのバックドアスコアから第3所定スコアを加算する、
付記2に記載のプログラム解析装置。
【0108】
(付記9)
前記所定のセンシティブな操作は、ユーザによって予め定められた、所定の関数を呼び出す操作、所定の変数にアクセスする操作、所定の命令を実行する操作、の少なくとも何れかである、
付記1~8の何れか一項に記載のプログラム解析装置。
【0109】
(付記10)
前記所定の関数を呼び出す操作は、システムコール、所定のライブラリ関数、所定のAPI(Application Programming Interface)の少なくとも何れかを呼び出す操作を含む、
付記9に記載のプログラム解析装置。
【0110】
(付記11)
前記所定の変数にアクセスする操作は、前記プログラムのグローバル変数にアクセスする操作を含む、
付記9に記載のプログラム解析装置。
【0111】
(付記12)
プログラム解析装置が実行するプログラム解析方法であって、
プログラムのバイナリに含まれるコードの中から、特定の性質を持つコードブロックである第1コードブロックを抽出する第1コードブロック抽出ステップと、
プログラムのバイナリに含まれるコードの中から、所定のセンシティブな操作を行うコードブロックである第2コードブロックを抽出する第2コードブロック抽出ステップと、
前記第1コードブロックと前記第2コードブロックとの間のコントロールフロー上での関係を示す関係情報を取得する関係情報取得ステップと、
前記第1コードブロックにおける前記所定のセンシティブな操作の内容に基づいて、当該第1コードブロックがバックドアコードである可能性を示すスコア、又は、当該第1コードブロックが実行された際にシステムに及ぼす影響の大きさを示すスコアである、バックドアスコアを算出するとともに、取得された前記関係情報に基づいて、前記第1コードブロックに対する前記バックドアスコアの加減算を行う、スコア算出ステップと、
第1コードブロック抽出ステップにおいて抽出された前記第1コードブロックと、スコア算出ステップにおいて算出された当該第1コードブロックに対する前記バックドアスコアと、を出力する出力ステップと、
を備えた、プログラム解析方法。
【0112】
(付記13)
プログラムのバイナリに含まれるコードの中から、特定の性質を持つコードブロックである第1コードブロックを抽出する第1コードブロック抽出処理と、
プログラムのバイナリに含まれるコードの中から、所定のセンシティブな操作を行うコードブロックである第2コードブロックを抽出する第2コードブロック抽出処理と、
前記第1コードブロックと前記第2コードブロックとの間のコントロールフロー上での関係を示す関係情報を取得する関係情報取得処理と、
前記第1コードブロックにおける前記所定のセンシティブな操作の内容に基づいて、当該第1コードブロックがバックドアコードである可能性を示すスコア、又は、当該第1コードブロックが実行された際にシステムに及ぼす影響の大きさを示すスコアである、バックドアスコアを算出するとともに、取得された前記関係情報に基づいて、前記第1コードブロックに対する前記バックドアスコアの加減算を行う、スコア算出処理と、
第1コードブロック抽出処理において抽出された前記第1コードブロックと、スコア算出処理において算出された当該第1コードブロックに対する前記バックドアスコアと、を出力する出力処理と、
をコンピュータに実行させるプログラムが格納された非一時的なコンピュータ可読媒体。
【符号の説明】
【0113】
10 プログラム解析装置
11 第1コードブロック抽出部
12 第2コードブロック抽出部
13 関係情報取得部
14 バックドアスコア算出部
15 出力部
20 プログラム解析装置
21 第1コードブロック抽出部
22 第2コードブロック抽出部
23 関係情報取得部
24 バックドアスコア算出部
25 出力部
26 対象操作テーブル
50 プログラム解析装置
51 コードブロック抽出部
52 バックドアスコア算出部
53 出力部
100 プログラム解析装置
101 プロセッサ
102 メモリ