Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP7207519B2 - 情報処理装置、情報処理方法及びプログラム - Google Patents
[go: Go Back, main page]

JP7207519B2 - 情報処理装置、情報処理方法及びプログラム - Google Patents

情報処理装置、情報処理方法及びプログラム Download PDF

Info

Publication number
JP7207519B2
JP7207519B2 JP2021506878A JP2021506878A JP7207519B2 JP 7207519 B2 JP7207519 B2 JP 7207519B2 JP 2021506878 A JP2021506878 A JP 2021506878A JP 2021506878 A JP2021506878 A JP 2021506878A JP 7207519 B2 JP7207519 B2 JP 7207519B2
Authority
JP
Japan
Prior art keywords
branch
program
verification
information
eigenvalue
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2021506878A
Other languages
English (en)
Other versions
JPWO2020188731A1 (ja
Inventor
俊輝 小林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Publication of JPWO2020188731A1 publication Critical patent/JPWO2020188731A1/ja
Application granted granted Critical
Publication of JP7207519B2 publication Critical patent/JP7207519B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/554Detecting local intrusion or implementing counter-measures involving event detection and direct action
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/556Detecting local intrusion or implementing counter-measures involving covert channels, i.e. data leakage between processes
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、情報処理装置、情報処理方法及びプログラムに関し、特にプログラムの検証を行う情報処理装置、情報処理方法及びプログラムに関する。
セキュリティ対策として、プログラムの改ざんがなされているか否かを検証する技術が提案されている。近年、IoTデバイスの普及により、ネットワークカメラやスマートメータ等の計算能力の低いデバイスにおいてもセキュリティ対策が必要になっている。こうしたセキュリティ対策では計算能力の低さに対応する必要がある(例えば非特許文献1)。
また、この技術に関連し、特許文献1は、動的な記憶領域に対する改竄を検出できるようにする改竄検出方法を開示する。特許文献1にかかる方法では、プログラムコードに係る処理の実行に伴って変更され得る情報を記憶する動的な記憶領域に記憶されたアドレス情報を参照する。そして、静的な記憶領域に記憶された情報に基づく制御に移行する場合に、第2の改竄検出部により動的な記憶領域から参照したアドレス情報が静的記憶領域の範囲内を指定するものであるか否かをチェックする。これにより、参照したアドレス情報が静的記憶領域の範囲内を指定するものでなければ、動的な記憶領域に記憶されたアドレス情報に対して改竄が行われたと判断する。
特開2011-048851号公報
Kobayashi, Toshiki, et al. "SAFES: Sand-boxed Architecture for Frequent Environment Self-measurement." Proceedings of the 3rd Workshop on System Software for Trusted Execution. ACM, 2018.
上記の特許文献1の技術では、プログラムの分岐条件に対応したプログラムの部分について考慮されていない。したがって、実際のプログラムの実行中には実行されないプログラムの部分についても検証を行ってしまうおそれがあるので、検証時間が増大するおそれがあった。
本開示の目的は、このような課題を解決するためになされたものであり、プログラムの検証時間を削減することが可能な情報処理装置、情報処理方法及びプログラムを提供することにある。
本開示にかかる情報処理装置は、実行前にプログラムを解析して、前記プログラムにおける分岐を抽出し、前記分岐に関する分岐情報と、前記分岐における分岐先から次の分岐までに実行され得る前記プログラムの部分に関するプログラム部分情報とを取得する解析手段と、前記分岐情報と、前記プログラム部分情報と、前記プログラム部分情報に関するプログラム部分について予め取得され検証のために使用される第1の固有値とを記憶する記憶手段と、前記プログラムが実行されて実行箇所が前記分岐に到達すると、前記プログラム部分についての検証のために使用される第2の固有値を取得し、前記第2の固有値と前記第1の固有値とが一致するか否かを判定することで、前記プログラム部分の完全性を検証する検証手段とを有する。
また、本開示にかかる情報処理方法は、実行前にプログラムを解析して、前記プログラムにおける分岐を抽出し、前記分岐に関する分岐情報と、前記分岐における分岐先から次の分岐までに実行され得る前記プログラムの部分に関するプログラム部分情報とを取得し、前記分岐情報と、前記プログラム部分情報と、前記プログラム部分情報に関するプログラム部分について予め取得され検証のために使用される第1の固有値とを記憶し、前記プログラムが実行されて実行箇所が前記分岐に到達すると、前記プログラム部分についての検証のために使用される第2の固有値を取得し、前記第2の固有値と前記第1の固有値とが一致するか否かを判定することで、前記プログラム部分の完全性を検証する。
また、本開示にかかるプログラムは、実行前にプログラムを解析して、前記プログラムにおける分岐を抽出し、前記分岐に関する分岐情報と、前記分岐における分岐先から次の分岐までに実行され得る前記プログラムの部分に関するプログラム部分情報とを取得するステップと、前記分岐情報と、前記プログラム部分情報と、前記プログラム部分情報に関するプログラム部分について予め取得され検証のために使用される第1の固有値とを記憶するステップと、前記プログラムが実行されて実行箇所が前記分岐に到達すると、前記プログラム部分についての検証のために使用される第2の固有値を取得し、前記第2の固有値と前記第1の固有値とが一致するか否かを判定することで、前記プログラム部分の完全性を検証するステップとをコンピュータに実行させる。
本開示によれば、プログラムの検証時間を削減することが可能な情報処理装置、情報処理方法及びプログラムを提供できる。
本開示の実施の形態にかかる情報処理装置の概要を示す図である。 実施の形態1に係る情報処理装置の機能を示すブロック図である。 実施の形態1にかかる検証情報記憶部によって記憶される検証情報を示すテーブルを例示する図である。 実施の形態1に係る情報処理装置の検証処理を示すフローチャートである。 実施の形態2に係る情報処理装置の機能を示すブロック図である。 実施の形態2にかかる解析部の解析処理で抽出されたデータを列挙したテーブルを例示する図である。 図6に例示したテーブルに関するプログラムの構造を示すグラフである。 実施の形態2にかかる解析部によって集約された分岐を列挙したテーブルを例示する図である。 実施の形態2にかかる検証情報記憶部によって記憶される検証情報を示すテーブルを例示する図である。 実施の形態2にかかる解析部によって実行される解析処理を示すフローチャートである。 実施の形態2に係る情報処理装置の検証処理を示すフローチャートである。 実施の形態2に係る情報処理装置の検証処理を示すフローチャートである。 実施の形態3に係る情報処理装置の機能を示すブロック図である。
(本開示にかかる実施の形態の概要)
本開示の実施の形態の説明に先立って、本開示にかかる実施の形態の概要について説明する。図1は、本開示の実施の形態にかかる情報処理装置1の概要を示す図である。情報処理装置1は、例えばコンピュータである。情報処理装置1は、解析部2と、記憶部4と、検証部6とを有する。解析部2は、解析手段として機能する。記憶部4は、記憶手段として機能する。検証部6は、検証手段として機能する。
解析部2は、実行前にプログラムを解析して、プログラム中の分岐を抽出する。解析部2は、分岐に関する分岐情報と、分岐における分岐先から次の分岐までに実行され得るプログラムの部分に関するプログラム部分情報とを取得する。記憶部4は、分岐情報と、プログラム部分情報と、プログラム部分情報に関するプログラム部分について予め取得された第1の固有値とを記憶する。なお、「第1の固有値」は、プログラム部分についての検証のために使用されるデータである。
検証部6は、プログラムが実行されて実行箇所が分岐に到達すると、プログラム部分について第2の固有値を取得する。なお、「第2の固有値」は、プログラム部分についての検証のために使用されるデータである。そして、検証部6は、第2の固有値と第1の固有値とが一致するか否かを判定することで、プログラム部分の完全性を検証する。検証部6は、第2の固有値と第1の固有値とが一致する場合に、プログラム部分が改ざんされていないと判定する。
以下、関連技術の問題点について説明する。上述した非特許文献1では、入出力の内容に応じてプログラム検証の検証範囲を削減する。これにより検証にかかる計算時間を削減している。非特許文献1にかかるプログラム検証方法は、デバイスの入出力を監視し、入出力の内容を取得する。また、非特許文献1にかかるプログラム検証方法は、この内容に応じて検証すべきプログラムの部分を特定し、検証を行う。非特許文献1にかかるプログラム検証方法は、検証においては該当部分に対する固有値を算出し、予め記憶しておいた固有値と比較することで、プログラムが改ざんされていないというプログラムの完全性を検証する。
非特許文献1に記載の方法では、入出力のタイミングにおいて、入出力の内容を利用して限定的なプログラムの部分のみの完全性の検証を行うが、内部に含まれる分岐条件などは考慮されていない。入出力によるプログラムの部分については、入力されたコマンドなどを利用して、各コマンドに対応するプログラムの部分のみが検証される。一方で、内部に含まれる分岐条件が考慮されない問題は、入出力のタイミングでは、内部の分岐条件が確定していないことに起因する。この問題点は、実際のプログラムの実行中には実行されないプログラムの部分についても検証を行ってしまうため、検証不要で削減可能な計算量が存在してしまうことを誘発し得る。これは、検証時間及び電力消費の増大につながる。また一方で、こうした分岐の情報を取得することで、プログラムの完全性に加えてプログラムの実行フローの完全性を検証できる。こうしたプログラムの実行フローの完全性の検証は、プログラムの悪用の検知につながり、デバイスをより堅牢化できる。以下、プログラムの完全性の検証を「第1のインテグリティチェック」と呼び、プログラムの実行フローの完全性の検証を「第2のインテグリティチェック」と呼ぶ。
ここで、本開示の実施の形態にかかる情報処理装置1は、上記のように、事前にプログラムを解析しプログラム中の分岐と各分岐以降に実行されるプログラムの部分の情報を収集する。また、情報処理装置1は、プログラム実行中の各分岐時点において該当するプログラムの部分の完全性を検証する。これにより、情報処理装置1は、情報処理装置1におけるプログラムの完全性とプログラムの実行フローの完全性とを検証する。これにより、情報処理装置1は、プログラムの分岐を考慮した第1のインテグリティチェックを行うことができる。したがって、情報処理装置1は、検証不要なプログラム部分について検証されることが抑制されるので、プログラムの検証時間を削減することが可能となる。また、情報処理装置1によって実行される情報処理方法及び情報処理方法を実行するプログラムも、プログラムの検証時間を削減することが可能となる。
また、情報処理装置1は、プログラム実行中の各分岐時点において該当するプログラムの部分の完全性およびプログラムの実行フローの完全性を検証する。具体的には、記憶部4は、分岐元アドレスと分岐先アドレスとの組を含む分岐情報を記憶する。そして、検証部6は、実行されているプログラムの分岐元のアドレスと分岐先のアドレスとの組が、記憶部4に存在するか否かを判定することで、プログラムの実行フローの完全性を検証する。これにより、情報処理装置1は、情報処理装置1におけるプログラムの完全性とプログラムの実行フローの完全性とを検証する。したがって、情報処理装置1は、第1のインテグリティチェックに加えて第2のインテグリティチェックを同時に実行できるので、効率的に、より確実なプログラムの検証を行うことができる。
(実施の形態1)
以下、実施の形態について、図面を参照しながら説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
図2は、実施の形態1に係る情報処理装置100の機能を示すブロック図である。情報処理装置100は、例えばコンピュータである。なお、情報処理装置100は、中央演算装置においてソフトウェアプログラムを実行することで、図2に示す各構成要素を実現してもよい。また、情報処理装置100において実現される各構成要素は、個々の装置、又は機能部もしくは電子回路として実現してもよい。このことは、後述する他の実施の形態についても同様である。
情報処理装置100は、制御部101、プログラム記憶部102、通信部103、解析部104、検証情報記憶部105、及び検証部106を備える。解析部104、検証情報記憶部105及び検証部106は、それぞれ、図1に示した解析部2、記憶部4及び検証部6に対応する。
制御部101は、情報処理装置100の全体の制御及び演算処理を行う制御装置である。プログラム記憶部102は、制御部101において実行されるプログラムを記憶する記憶装置である。通信部103は、インターネット等のネットワーク(図示せず)を介して接続先の装置との通信を行う。
解析部104は、プログラム記憶部102に記憶されるプログラムを事前に(プログラムの実行前に)解析し、分岐箇所の抽出を行う。加えて、解析部104は、プログラム中の各分岐の直前又は直後に、検証部106への呼び出しを挿入する。ここで、解析部104は、分岐として、条件分岐のみを抽出してもよいし、関数コール、リターン、及び、条件ジャンプなどのプログラムの実行フローに関わる命令を全て抽出してもよい。また、解析部104は、短い命令のループ処理、及び、内部にI/O処理がなく攻撃を受けるおそれがないループ処理などに係る条件分岐を、分岐抽出の対象外と設定してもよい。なお、検証部106への呼び出しは、実際のプログラム中に命令として記載されてもよいし、ブレイクポイントとして割り込むように設定されてもよいし、デバッグポートを利用して特定のタイミングで割り込むように設定されてもよい。
また、分岐抽出の解析の例として、例えば、解析部104は、ソースコードが利用できる場合は、IF文及びWHILE文などの特定の構文を抽出し、コンパイル後の実行形式のバイナリデータで対応するアドレス番地を収集することで、分岐を抽出してもよい。また、例えば、解析部104は、ソースコードがなくバイナリデータのみ利用可能である場合は、逆アセンブルを行いCALL命令及びJMP命令等の特定の命令セットに対してアドレス番地を収集することで、分岐を抽出してもよい。
解析部104は、得られた分岐箇所を基に、各分岐箇所に対する分岐先と、その分岐先から次の分岐箇所までに実行されるプログラムの部分(プログラム部分)とを取得する。そして、解析部104は、これらの情報を、検証情報記憶部105に格納(登録)する。また、解析部104は、各分岐箇所から分岐し得る分岐先の情報を取得し、検証情報記憶部105に格納(登録)する。なお、本実施の形態では、解析部104は、情報処理装置100に含まれる。しかしながら、情報処理装置100の外の情報処理装置などの他の装置が、解析部104の役割を担ってもよい。
検証情報記憶部105は、解析部104で登録された各分岐箇所の情報(分岐情報)とプログラムの部分の情報(プログラム部分情報)とを含む検証情報を記憶する。具体的には、検証情報記憶部105は、図3に例示するようなテーブルを記憶する。
図3は、実施の形態1にかかる検証情報記憶部105によって記憶される検証情報を示すテーブルを例示する図である。図3に例示するように、ここで、検証情報記憶部105に記憶されるテーブルは、分岐元のアドレス値(分岐元アドレス)と分岐先のアドレス値(分岐先アドレス)との組と、アドレス値の個数と、1つ以上の開始アドレス及び終了アドレスと、固有値とを含む。
図3に例示するテーブルでは、各分岐元アドレスと分岐先アドレスとの組に対して、次の分岐先までに実行されるプログラムの部分のアドレス値が記憶される。ここで、図3の例では、検証情報記憶部105は、プログラム部分のアドレス値については、連続するアドレス値をひとまとめにして、開始アドレス値と終了アドレス値とで記憶している。また、図3の例では、検証情報記憶部105は、この開始アドレスの個数を、アドレス値の個数として登録している。なお、このアドレス値の記憶方法として、開始アドレス値及びサイズが記憶されてもよい。また、ここでいうアドレス値とは、プログラムが実行される際の物理メモリのアドレス値、又は、仮想メモリのアドレス値を指す。例えば、OSが存在しプログラムが仮想メモリ上で動作する場合は、仮想メモリのアドレス値が、「アドレス値」に対応し得る。一方、仮想メモリを持たないシステムの場合は、物理メモリのアドレスが、「アドレス値」に対応し得る。
また、検証情報記憶部105は、図3に示すように、プログラムの部分に対する固有値(以下、第1の値ともいう)を記憶する。第1の値は、「第1の固有値」に対応する。第1の値は、プログラムの実行前に取得(算出)され、第1のインテグリティチェックで使用される。第1の値として、プログラム記憶部102に記憶されるプログラムの実体(例えば、バイナリデータ)から算出でき改ざんの有無が確認できるような指標値を用いることができる。指標値として、例えば、ハッシュ値、チェックサム、又は誤り訂正符号の値を用いることができる。また、第1の値として、プログラムの実体そのものを用いることもできる。
検証部106は、プログラム実行中に分岐に差し掛かると呼び出され、第1のインテグリティチェックと第2のインテグリティチェックとを行う。つまり、検証部106は、プログラムの実行中に、解析部104によって挿入された呼び出しに応じて処理を開始する。第2のインテグリティチェックとして、検証部106は、プログラムがどこに分岐しようとしているかを確認し、実行中のプログラムの分岐に関する分岐情報と、検証情報記憶部105の記憶する分岐情報との整合性を確認する。具体的には、検証部106は、現在の(つまり実行中のプログラムの)分岐元アドレスと分岐先アドレスとの組が、検証情報記憶部105に記憶された分岐元アドレスと分岐先アドレスとの組に含まれるか否かを確認する。検証部106は、現在の分岐元アドレスと分岐先アドレスとの組が検証情報記憶部105に含まれていた場合に、検証が成功した、すなわち、情報処理装置100におけるプログラムの実行フローに関する不正は生じていない、と判定する。
さらに、検証部106は、現在の分岐元アドレスと分岐先アドレスとの組に対応するプログラムの部分に対して、第1のインテグリティチェックを行う。第1のインテグリティチェックでは、検証部106は、実行中のプログラムについて、検証情報記憶部105に記憶されるアドレス範囲で指定されるプログラムの部分の固有値(以下、第2の値ともいう)を算出(取得)する。第2の値は、「第2の固有値」に対応する。第2の値の算出方法は、第1の値の算出方法と同じであり得る。つまり、第1の値がハッシュ値である場合、第2の値もハッシュ値であり得る。検証部106は、この第2の値と検証情報記憶部105に記憶される第1の値とを比較することによって、検証の成否を判断する。検証部106は、第1の値と第2の値とが一致した場合に、検証が成功した、すなわち、情報処理装置100におけるプログラムに関する不正は生じていない、と判定する。
検証部106は、第1のインテグリティチェック又は第2のインテグリティチェックに失敗した場合、セキュリティ違反を報告する。つまり、検証部106は、実行中のプログラムについての分岐先アドレスと分岐元アドレスとの組が検証情報記憶部105に存在しない場合、又は、第1の値と第2の値とが一致しない場合に、セキュリティ違反を報告する。セキュリティ違反の報告の例として、検証部106は、情報処理装置100内部でのソフトウェア違反割り込みの発生、セキュリティ違反のログの記録、又は、通信部103を介した外部への異常報告などを行う。本実施の形態では、セキュリティ違反の報告後は、プログラムの実行を継続せず、プログラムの実行を停止する。しかしながら、違反報告後にプログラムの実行を継続してもよい。
図4は、実施の形態1に係る情報処理装置100の検証処理を示すフローチャートである。この処理は、検証部106によって実行される。まず、検証処理は、制御部101のプログラム実行中に分岐に差し掛かり、検証部106が検証呼び出しを受けることで開始される(ステップS101)。これにより、検証部106の処理が開始する。呼び出された検証部106は、差し掛かった分岐の先の分岐先アドレスを算出する(ステップS102)。そして、検証部106は、第2のインテグリティチェックを行う。つまり、検証部106は、このときに得られる分岐元アドレスと分岐先アドレスとの組が、検証情報記憶部105に存在するか否かを判定する(ステップS103)。
分岐元アドレスと分岐先アドレスとの組が検証情報記憶部105に存在しない場合(S103のNO)、検証部106は、検証が失敗したと判定する。したがって、処理はS108に進む。一方、検証情報記憶部105に該当する項目が存在する場合(S103のYES)、検証部106は、プログラムの部分に対応するアドレスの範囲を取得する(ステップS104)。そして、検証部106は、第1のインテグリティチェックを行う。つまり、検証部106は、取得したアドレス範囲のメモリ上に存在するプログラムに対して第2の値を算出し(ステップS105)、得られた第2の値が検証情報記憶部105の第1の値と等しいか否かを判定する(ステップS106)。
第1の値と第2の値とが等しい場合(S106のYES)、検証部106は、検証が成功したと判定する。したがって、検証部106は、プログラムの実行を検証部106の呼び出し元つまり分岐元に返し、検証を終了する(ステップS106)。一方、第1の値と第2の値とが等しくない場合(S106のNO)、検証部106は、検証が失敗したと判定する。第1のインテグリティチェック(S106)又は第2のインテグリティチェック(S103)で違反を検知した場合(S103のNO,S106のNO)、検証部106は、検証の失敗を報告し、検証処理を終了する(ステップS108)。
以上説明したように、実施の形態1にかかる情報処理装置100は、プログラムの解析結果を検証情報として用いて、各分岐において、制御部101によって実行されているプログラムの完全性の検証及びプログラムの実行フローの完全性の検証を行う。したがって、非特許文献1の入出力を基にプログラムの一部の完全性を検証する場合に比べ、より少ない範囲のプログラムの部分について検証を行うことができ、同時に分岐に対する実行フローの完全性も検証される。つまり、情報処理装置100は、プログラムの解析の結果得られた分岐情報に対応するプログラム部分について取得された第1の値と、そのプログラム部分に対応するアドレス範囲のプログラムに対して取得された第2の値とを比較する。これによってプログラム部分それぞれについて検証を行うことで、非特許文献1の入出力を基にプログラムの一部の完全性を検証する場合に比べ、より少ない範囲のプログラムの部分について検証を行うことができる。したがって、検証時間を削減することが可能となる。
さらに、解析部104は、プログラムを解析することによって、分岐元アドレスと分岐先アドレスとの組を含む分岐情報を取得して、検証情報記憶部105に格納する。そして、検証部106は、実行されているプログラムについての分岐元アドレスと分岐先アドレスとの組が検証情報記憶部105に存在するか否かを判定することで、プログラムの実行フローの完全性の検証を行う。したがって、第1のインテグリティチェックに加えて第2のインテグリティチェックを同じタイミングで実行できるので、効率的に、より確実なプログラムの検証を行うことができる。
(実施の形態2)
次に、実施の形態2について、図面を参照しながら説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。したがって、以下の説明では、上述した実施の形態1と異なる箇所について説明する。
図5は、実施の形態2に係る情報処理装置200の機能を示すブロック図である。情報処理装置200は、制御部101、プログラム記憶部102、通信部103、解析部204、検証情報記憶部105、及び検証部206を備える。解析部204、検証情報記憶部105及び検証部206は、それぞれ、図1に示した解析部2、記憶部4及び検証部6に対応する。
実施の形態2では、解析部204が、事前の解析において、各分岐に対して分岐条件の確定するタイミングを解析する。このタイミングに応じて、検証部206が、検証対象として、複数の分岐を集約する。この集約によって、情報処理装置200による検証処理の呼び出し回数を削減することができる。したがって、検証領域のサイズによらないで、検証処理の呼び出し毎に要する計算時間(検証時間)を削減することが可能となる。
例えば、各分岐条件に対して、分岐条件の判定直前には既に分岐先は確定している。また、判定直前の命令が分岐条件を変えないような命令であれば、その命令以前に分岐先は確定している。この分岐条件を変えない命令を省いた際に、分岐条件の判定直前に当たる命令の実行直後を、分岐先が確定するタイミングとする。ここで、ある分岐条件の判定時点で、その後に実行される次の分岐条件が確定しているのであれば、検証部206は、同時にこれらの2つの分岐条件を判定し、まとめて検証を行う。このように2つの分岐条件をまとめることを、分岐の集約と呼ぶ。実施の形態2における例では2つの分岐条件を集約したが、実際には2つ以上の分岐を集約してもよい。
解析部204は、実施の形態1と同様にして抽出された分岐元アドレスと分岐先アドレスとの組に対して、その分岐条件が確定するタイミングに対応する分岐確定アドレスおよび分岐条件を解析する。さらに、解析部204は、分岐先アドレスの次に現れる分岐に対応する次分岐元アドレスを解析する。分岐確定アドレスの解析には、プログラムスライシングと呼ばれる、プログラム中の特定の命令又はデータに対してデータ依存性および制御依存性がある部分のみを切り出す技術を用いてもよい。例えば、ソースコード中の特定の命令を指定すると、命令中に含まれるデータを扱う他の命令が、データ依存関係にある命令として抽出される。また、例えば、指定された命令が実行されるか否かに関わる他の命令が、制御依存関係にある命令として抽出される。このデータ依存関係又は制御依存関係にあるデータ又は命令を再帰的に抽出することで、プログラム全体から、指定された命令に関与する部分が抽出される。このプログラムスライシングを分岐条件の判定部分に対して行うことで、分岐条件に関わるプログラムの一部が抽出される。このプログラムの一部の実行の流れを確認することで、分岐条件に関与するデータが最後に取り扱われる命令の実行タイミングとして、分岐確定アドレスが抽出され得る。
図6は、実施の形態2にかかる解析部204の解析処理で抽出されたデータを列挙したテーブルを例示する図である。また、図7は、図6に例示したテーブルに関するプログラムの構造を示すグラフである。図6に例示するように、解析処理で抽出されたデータは、各分岐a~dそれぞれについて、分岐元アドレスと、分岐先アドレスと、分岐確定アドレスと、次分岐元アドレスと、分岐条件とを含む。なお、図6の例では、単一の分岐確定アドレスが得られているが、実際には並列した複数のアドレスが抽出されてもよい。
例えば、分岐a及び分岐bについて、アドレス「0x1010」のxの値が確定すれば、分岐元アドレス「0x1100」に対する分岐先アドレスは、「0x1200」(x>y)となるか「0x1300」(x≦y)となるかが決定される。したがって、分岐元アドレス「0x1100」の分岐a(分岐先アドレス「0x1200」)及び分岐b(分岐先アドレス「0x1300」)の分岐確定アドレスは、「0x1010」となる。また、分岐aについて、分岐先アドレス「0x1200」の次の分岐元アドレスは「0x1210」である。分岐bについて、分岐先アドレス「0x1300」の次の分岐元アドレスは「0x1310」である。
また、分岐c及び分岐dについて、アドレス「0x1020」のzの値が確定すれば、分岐元アドレス「0x1310」に対する分岐先アドレスは、「0x1400」(z>w)となるか「0x1500」(z≦w)となるかが決定される。したがって、分岐元アドレス「0x1310」の分岐c(分岐先アドレス「0x1400」)及び分岐d(分岐先アドレス「0x1500」)の分岐確定アドレスは、「0x1020」となる。
続いて、解析部204は、図6に例示するような、解析処理で抽出されたデータから、集約可能な分岐の組を探索する。ここで、集約可能な分岐の組とは、ある分岐Aに対して、次分岐である分岐Bの分岐条件が分岐Aの条件判定以前に確定しているような、分岐Aと分岐Bとの組み合わせを言う。手順として、まず、解析部204は、連続した実行順序関係にある分岐の組を抽出する。具体的には、解析部204は、分岐A及び分岐Bを選び、分岐Aの次分岐元アドレスと分岐Bの分岐元アドレスとが一致する組み合わせを探索する。例えば、図6の例では、太枠で示される「0x1310」といったデータがこれに該当する。つまり、分岐bの次分岐元アドレスは、分岐c及び分岐dの分岐元アドレスと一致している。したがって、分岐bは上述した分岐Aに対応し、分岐c及び分岐dは、上述した分岐Bに対応する。つまり、解析部204は、分岐bと分岐cとの組み合わせ、及び、分岐bと分岐dとの組み合わせを探索する。
続いて、解析部204は、この該当した分岐Aと分岐Bとが集約可能か否かを判定する。具体的には、解析部204は、分岐Aの分岐元アドレスよりも、分岐Bの分岐確定アドレスの方が、実行フロー上で先に現れる場合に、二つの分岐を集約可能とみなす。例えば、図6及び図7の例における分岐bと分岐c,dとの組について、分岐bの分岐元アドレス「0x1100」に対し、分岐c,dの分岐確定アドレス「0x1020」が先に現れる。したがって、解析部204は、分岐bと分岐cとを集約可能とし、分岐bと分岐dとを集約可能とする。
図8は、実施の形態2にかかる解析部204によって集約された分岐を列挙したテーブルを例示する図である。解析部204は、集約可能な2つの分岐を集約する。具体的には、解析部204は、図8に例示するように、分岐A及び分岐Bの、分岐確定アドレス、次分岐元アドレス、分岐先アドレス及び分岐条件について全て列挙する形で保存する。例えば、図6に示した分岐b及び分岐cは、分岐eとして集約される。また、図6に示した分岐b及び分岐dは、分岐fとして集約される。なお、分岐aは、いずれの分岐とも集約できなかったので、図6に示したものと同じデータとなっている。ここで、分岐確定アドレス及び次分岐元アドレスの列挙されたものについて、分岐B(分岐c,d)のアドレスのみを保存することで情報量を節約してもよい。また、解析部204は、分岐条件について、具体的にプログラム中で評価できるように、各変数値が保存されるメモリアドレス、データ型の情報、又は実際に評価を行うために必要な命令セット等を、検証情報として保存し得る。
解析部204は、集約可能な組み合わせがなくなるまで、集約処理を繰り返す。その後、実施の形態1と同様に、解析部204は、プログラムの部分に対するアドレス値の個数、開始アドレスと終了アドレスの組、および第1の値(固有値)の算出を行い、検証情報記憶部105に記憶する。
図9は、実施の形態2にかかる検証情報記憶部105によって記憶される検証情報を示すテーブルを例示する図である。図9に例示するように、実施の形態2にかかる検証情報記憶部105に記憶されるテーブルは、分岐元アドレスと分岐先アドレスとの組と、次分岐元アドレスと、分岐条件と、アドレス値の個数と、1つ以上の開始アドレス及び終了アドレスと、固有値とを含む。なお、分岐確定アドレスは、検証に不要のため省略され得る。また、次分岐元アドレスについても、最後に現れるもののみが保存され得る。
さらに、解析部204は、検証を行うタイミングとして、集約後の分岐元アドレスに、検証部206への呼び出しを挿入する。検証部206への呼び出しは、実際のプログラム中に命令として記載されてもよいし、ブレイクポイントとして割り込むように設定されてもよいし、デバッグポートを利用して特定のタイミングで割り込むように設定されてもよい。
図10は、実施の形態2にかかる解析部204によって実行される解析処理を示すフローチャートである。まず、解析部204は、プログラムにおける分岐の抽出を行う(ステップS201)。続いて、解析部204は、得られた分岐の分岐元アドレスと分岐先アドレスとの組に対して、次分岐元アドレス、分岐確定アドレス及び分岐条件を解析する(ステップS202)。そして、解析部204は、各分岐に対して、当該分岐よりも先に分岐条件が確定する次分岐が存在するか否かを判定する(ステップS203)。このような分岐が存在する場合(S203のYES)、解析部204は、分岐確定アドレス及び次分岐元アドレスと、分岐先アドレスと、分岐条件とについて全て列挙する形で集約する(ステップS204)。そして、処理はS203に戻る。
集約する対象がなくなった場合(S203のNO)、解析部204は、各項目に対して、該当するプログラムの部分のアドレス値の個数、開始アドレスと終了アドレスとの組、および第1の値(固有値)を算出する(ステップS205)。解析部204は、得られた結果を検証情報記憶部105に記憶し、解析処理を終了する(ステップS206)。
検証部206(図5)は、実施の形態1にかかる検証部106が行う検証処理に加えて、検証情報記憶部105に記憶されるデータに示される分岐条件を基に、実行中のプログラムについて分岐先アドレスの算出を行う。この算出された分岐先アドレスに対応する項目について、検証部206は、プログラム部分のアドレス範囲を取得し、第2の値を算出する。検証部206は、得られた第2の値を第1の値と比較することで検証の成否を判断する。検証部206は、第1の値と第2の値とが一致した場合に、第1のインテグリティチェックに成功した、すなわち、情報処理装置100におけるプログラムに関する不正は生じていない、と判定する。
さらに、検証部206は、検証後に、実行中のプログラムについての次分岐元アドレスを検証情報記憶部105に保存する。この次分岐元アドレスは、次回の分岐において呼び出された検証部206が前回の検証において予想されていた分岐に正しく到達したかどうかを判定するために使用される。すなわち、検証呼び出しの際には、検証部206は、保存された次分岐元アドレスの存在の有無を確認し、保存された次分岐元アドレスが正しく現在の分岐元アドレスと一致していることを確認することで、集約された分岐の実行フローの検証を行う。そのため、実施の形態1にかかる第2のインテグリティチェックに加え、現在の分岐元アドレスと保存された次分岐元アドレスとの比較を行うことが、実施の形態2における第2のインテグリティチェックとなる。
図11及び図12は、実施の形態2に係る情報処理装置200の検証処理を示すフローチャートである。この処理は、検証部206によって実行される。まず、検証処理は、制御部101のプログラム実行中に分岐に差し掛かり、検証部206が検証呼び出しを受けることで開始される(ステップS211)。これにより、検証部206の処理が開始する。呼び出された検証部206は、以前に検証(分岐検証)が行われていたか否かを判定する(ステップS212)。具体的には、検証部206は、後述するS220の処理が以前の分岐検証において行われることによって次分岐元アドレスが保存されているか否かを判定する。次分岐元アドレスが保存されていない場合、つまり検証が行われていなかった場合(S212のNO)、S213の処理は行われず、処理はS214に進む。
一方、次分岐元アドレスが保存されている場合、つまり検証が行われていた場合(S212のYES)、検証部206は、第2のインテグリティチェックとして、検証部206は、保存されている次分岐元アドレスと現在の分岐元アドレスとが一致するか否かを判定する(ステップS213)。両者が一致しなかった場合(S213のNO)、検証部206は、検証が失敗したと判定する。したがって、処理はS222に進む。一方、両者が一致した場合(S213のYES)、処理はS214に進み、検証部206は、引き続き検証処理を実行する。
検証部206は、現在の分岐の分岐先アドレスを算出する(ステップS214)。検証部206は、第2のインテグリティチェックとして、このときに得られる分岐元アドレスと分岐先アドレスとの組が、検証情報記憶部105に存在するか否かを判定する(ステップS215)。分岐元アドレスと分岐先アドレスとの組が検証情報記憶部105に存在しない場合(S215のNO)、検証部206は、検証が失敗したと判定する。したがって、処理はS222に進む。
一方、検証情報記憶部105に該当する項目があった場合(S215のYES)、検証部206は、検証情報記憶部105に記載される分岐条件を基に、集約された分岐の分岐先アドレスを算出する(ステップS216)。検証部206は、得られた分岐先アドレスの組に対応するプログラムの部分のアドレスの範囲を取得する(ステップS217)。そして、検証部206は、第1のインテグリティチェックを行う。つまり、検証部206は、取得したアドレス範囲のメモリ上に存在するプログラムに対して第2の値を算出し(ステップS218)、得られた第2の値が検証情報記憶部105の第1の値と等しいか否かを判定する(ステップS219)。
第1の値と第2の値とが等しい場合(S219のYES)、検証部206は、検証が成功したと判定する。この場合、検証部206は、次分岐元アドレスを次回の検証(S213)のために保存する(ステップS220)。その後、検証部206は、プログラムの実行を検証部206の呼び出し元つまり分岐元に返し、検証を終了する(ステップS221)。一方、第1の値と第2の値とが等しくない場合(S219のNO)、検証部206は、検証が失敗したと判定する。第1のインテグリティチェック又は第2のインテグリティチェックで違反を検知した場合(S219のNO,S213のNO,S215のNO)、検証部206は、検証の失敗を報告し、検証処理を終了する(ステップS222)。
以上説明したように、実施の形態2かかる情報処理装置200は、プログラムの解析結果を検証情報として用いて、集約された分岐情報に対して、制御部101によって実行されているプログラムの完全性の検証及びプログラムの実行フローの完全性の検証を行う。これにより、実施の形態1と比較して少ない検証の呼び出し回数で、第1のインテグリティチェック及び第2のインテグリティチェックを実行することができる。したがって、実施の形態2かかる情報処理装置200は、実施の形態1の場合と比較して、検証時間をさらに削減することが可能となる。
また、実施の形態2にかかる情報処理装置200は、検証後に、実行中のプログラムについての次分岐元アドレスを保存する。そして、この保存された次分岐元アドレスは、次回の分岐において呼び出された検証部206が前回の検証において予想されていた分岐に正しく到達したかどうかを判定するために使用される。つまり、検証部206は、第1の分岐に対する検証が成功した場合に、分岐条件が確定している次の分岐(第2の分岐)に関する分岐情報(次分岐元アドレス)を保存する。そして、検証部206は、第1の分岐の次の分岐(第2の分岐)の検証の際に、保存された分岐情報を用いて、プログラムの実行フローの完全性を検証する。これにより、実施の形態2にかかる情報処理装置200は、第2のインテグリティチェックとして、さらに、分岐元アドレスと保存された次分岐元アドレスとの比較を行う。したがって、実施の形態2にかかる情報処理装置200は、実施の形態1の場合と比較して、効率的に、より確実なプログラムの検証を行うことができる。
(実施の形態3)
次に、実施の形態3について、図面を参照しながら説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。したがって、以下の説明では、上述した実施の形態1及び実施の形態2と異なる箇所について説明する。
図13は、実施の形態3に係る情報処理装置300の機能を示すブロック図である。情報処理装置300は、制御部101、プログラム記憶部102、通信部103、解析部304、検証情報記憶部105、及び検証部306を備える。また、情報処理装置300は、通常のプログラム実行環境であるノーマル空間301と、セキュア空間302とを有する。セキュア空間302は、ハードウェア的にノーマル空間301側からのアクセスが制限されたセキュアな実行環境である。セキュア空間302は、例えばIntel SGX(Software Guard Extensions)、又は、ARM Trust Zone(登録商標)を利用することで構築され得る。
ノーマル空間301には、制御部101、プログラム記憶部102、及び通信部103が配置される。これに対し、セキュア空間302には、解析部304、検証情報記憶部105、及び検証部306が配置される。なお、本実施の形態では、解析部304は、情報処理装置300に含まれる。しかしながら、情報処理装置300の外の情報処理装置などの他の信頼できる装置が、解析部304の役割を担ってもよい。
解析部304は、実施の形態1にかかる解析部104と同様に、検証情報を検証情報記憶部105に登録する。さらに、解析部304は、プログラム中の各分岐に埋め込まれた検証部306への呼び出しのアドレス値と、このアドレス値に対応するプログラムの部分の第1の値とを、検証情報記憶部105に登録する。つまり、検証情報記憶部105は、検証の呼び出しについての第1の値(第1の固有値)を記憶する。
検証部306は、実施の形態1にかかる検証部106と同様に、制御部101の行うプログラム実行中に分岐に差し掛かると呼び出され、上述した検証を行う。さらに、検証部306は、設定された特定の周期で、分岐ごとに検証部306を呼び出すプログラムの部分の完全性を確認する。つまり、検証部306は、周期的に、検証の呼び出しについての第2の値(第2の固有値)を算出する。そして、検証部306は、算出された第2の値と、検証情報記憶部105に記憶された第1の値とを比較することで、検証の呼び出しの完全性を検証する。
このように、実施の形態3に係る情報処理装置300は、周期的に検証部306への呼び出しを監視するように構成されている。これにより、非セキュアな実行環境にあるプログラム中の検証部306の呼び出しの無効化を検出できる。
(変形例)
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、上述したフローチャートの各ステップの処理の1つ以上は、省略され得る。例えば、図4のS103の処理はなくてもよい。しかしながら、S103の処理(第2のインテグリティチェック)が実行されることで、より確実に、プログラムの検証処理を行うことが可能となる。図11のS215の処理、及びS212,S213の処理についても同様である。
上述の例において、プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD-ROM、CD-R、CD-R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM)を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記によって限定されるものではない。本願発明の構成や詳細には、発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
上記の実施の形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
(付記1)
実行前にプログラムを解析して、前記プログラムにおける分岐を抽出し、前記分岐に関する分岐情報と、前記分岐における分岐先から次の分岐までに実行され得る前記プログラムの部分に関するプログラム部分情報とを取得する解析手段と、
前記分岐情報と、前記プログラム部分情報と、前記プログラム部分情報に関するプログラム部分について予め取得され検証のために使用される第1の固有値とを記憶する記憶手段と、
前記プログラムが実行されて実行箇所が前記分岐に到達すると、前記プログラム部分についての検証のために使用される第2の固有値を取得し、前記第2の固有値と前記第1の固有値とが一致するか否かを判定することで、前記プログラム部分の完全性を検証する検証手段と
を有する情報処理装置。
(付記2)
前記記憶手段は、分岐元アドレスと分岐先アドレスとの組を含む前記分岐情報を記憶し、
前記検証手段は、実行されているプログラムの分岐元のアドレスと分岐先のアドレスとの組が前記記憶手段に存在するか否かを判定することで、前記プログラムの実行フローの完全性を検証する
付記1に記載の情報処理装置。
(付記3)
前記解析手段は、プログラム中の前記分岐の分岐条件の確定するタイミングを解析して、複数の分岐を集約し、
前記検証手段は、集約された分岐ごとに前記プログラム部分の完全性を検証する
付記1又は2に記載の情報処理装置。
(付記4)
前記解析手段は、前記タイミングの前に前記分岐の次の分岐の分岐条件が確定している場合に、当該分岐と前記次の分岐とを集約する
付記3に記載の情報処理装置。
(付記5)
前記検証手段は、
第1の分岐に対する検証が成功した場合に、前記分岐条件が確定している次の分岐に関する前記分岐情報を保存し、
前記第1の分岐の次の分岐の検証の際に、保存された前記分岐情報を用いて、前記プログラムの実行フローの完全性を検証する
付記4に記載の情報処理装置。
(付記6)
前記解析手段は、前記プログラムにおける前記分岐に対して検証の呼び出しを挿入し、
前記検証手段は、前記プログラムの実行中に、前記解析手段によって挿入された前記呼び出しに応じて、処理を開始する
付記1~5のいずれか1項に記載の情報処理装置。
(付記7)
前記解析手段、前記記憶手段、及び前記検証手段が配置されるセキュアな実行環境
をさらに有し、
前記記憶手段は、前記呼び出しについての第1の固有値を記憶し、
前記検証手段は、周期的に、前記呼び出しについての第2の固有値を算出し、算出された前記第2の固有値と前記第1の固有値とを比較することで、検証の呼び出しの完全性を検証する
付記6に記載の情報処理装置。
(付記8)
実行前にプログラムを解析して、前記プログラムにおける分岐を抽出し、前記分岐に関する分岐情報と、前記分岐における分岐先から次の分岐までに実行され得る前記プログラムの部分に関するプログラム部分情報とを取得し、
前記分岐情報と、前記プログラム部分情報と、前記プログラム部分情報に関するプログラム部分について予め取得され検証のために使用される第1の固有値とを記憶し、
前記プログラムが実行されて実行箇所が前記分岐に到達すると、前記プログラム部分についての検証のために使用される第2の固有値を取得し、前記第2の固有値と前記第1の固有値とが一致するか否かを判定することで、前記プログラム部分の完全性を検証する
情報処理方法。
(付記9)
分岐元アドレスと分岐先アドレスとの組を含む前記分岐情報を記憶し、
実行されているプログラムの分岐元のアドレスと分岐先のアドレスとの組が記憶されているか否かを判定することで、前記プログラムの実行フローの完全性を検証する
付記8に記載の情報処理方法。
(付記10)
プログラム中の前記分岐の分岐条件の確定するタイミングを解析して、複数の分岐を集約し、
集約された分岐ごとに前記プログラム部分の完全性を検証する
付記8又は9に記載の情報処理方法。
(付記11)
前記タイミングの前に前記分岐の次の分岐の分岐条件が確定している場合に、当該分岐と前記次の分岐とを集約する
付記10に記載の情報処理方法。
(付記12)
第1の分岐に対する検証が成功した場合に、前記分岐条件が確定している次の分岐に関する前記分岐情報を保存し、
前記第1の分岐の次の分岐の検証の際に、保存された前記分岐情報を用いて、前記プログラムの実行フローの完全性を検証する
付記11に記載の情報処理方法。
(付記13)
前記プログラムにおける前記分岐に対して検証の呼び出しを挿入し、
前記プログラムの実行中に、挿入された前記呼び出しに応じて、処理を開始する
付記8~12のいずれか1項に記載の情報処理方法。
(付記14)
前記解析する処理、前記記憶する処理、及び前記検証する処理は、セキュアな実行環境で実行され、
前記呼び出しについての第1の固有値を記憶し、
周期的に、前記呼び出しについての第2の固有値を算出し、算出された前記第2の固有値と前記第1の固有値とを比較することで、検証の呼び出しの完全性を検証する
付記13に記載の情報処理方法。
(付記15)
実行前にプログラムを解析して、前記プログラムにおける分岐を抽出し、前記分岐に関する分岐情報と、前記分岐における分岐先から次の分岐までに実行され得る前記プログラムの部分に関するプログラム部分情報とを取得するステップと、
前記分岐情報と、前記プログラム部分情報と、前記プログラム部分情報に関するプログラム部分について予め取得され検証のために使用される第1の固有値とを記憶するステップと、
前記プログラムが実行されて実行箇所が前記分岐に到達すると、前記プログラム部分についての検証のために使用される第2の固有値を取得し、前記第2の固有値と前記第1の固有値とが一致するか否かを判定することで、前記プログラム部分の完全性を検証するステップと
をコンピュータに実行させるプログラムが格納された非一時的なコンピュータ可読媒体。
1・・・情報処理装置
2・・・解析部
4・・・記憶部
6・・・検証部
100,200,300・・・情報処理装置
101・・・制御部
102・・・プログラム記憶部
103・・・通信部
104,204,304・・・解析部
105・・・検証情報記憶部
106,206,306・・・検証部
301・・・ノーマル空間
302・・・セキュア空間

Claims (13)

  1. 実行前にプログラムを解析して、前記プログラムにおける分岐を抽出し、前記分岐に関する分岐情報と、前記分岐における分岐先から次の分岐までに実行され得る前記プログラムの部分に関するプログラム部分情報とを取得する解析手段と、
    前記分岐情報と、前記プログラム部分情報と、前記プログラム部分情報に関するプログラム部分について予め取得され検証のために使用される第1の固有値とを記憶する記憶手段と、
    前記プログラムが実行されて実行箇所が前記分岐に到達すると、前記プログラム部分についての検証のために使用される第2の固有値を取得し、前記第2の固有値と前記第1の固有値とが一致するか否かを判定することで、前記プログラム部分の完全性を検証する検証手段と
    を有し、
    前記解析手段は、プログラム中の前記分岐の分岐条件の確定するタイミングを解析して、複数の分岐を集約し、
    前記検証手段は、集約された分岐ごとに前記プログラム部分の完全性を検証する
    情報処理装置。
  2. 前記記憶手段は、分岐元アドレスと分岐先アドレスとの組を含む前記分岐情報を記憶し、
    前記検証手段は、実行されているプログラムの分岐元のアドレスと分岐先のアドレスとの組が前記記憶手段に存在するか否かを判定することで、前記プログラムの実行フローの完全性を検証する
    請求項1に記載の情報処理装置。
  3. 前記解析手段は、前記タイミングの前に前記分岐の次の分岐の分岐条件が確定している場合に、当該分岐と前記次の分岐とを集約する
    請求項に記載の情報処理装置。
  4. 前記検証手段は、
    第1の分岐に対する検証が成功した場合に、前記分岐条件が確定している次の分岐に関する前記分岐情報を保存し、
    前記第1の分岐の次の分岐の検証の際に、保存された前記分岐情報を用いて、前記プログラムの実行フローの完全性を検証する
    請求項に記載の情報処理装置。
  5. 前記解析手段は、前記プログラムにおける前記分岐に対して検証の呼び出しを挿入し、
    前記検証手段は、前記プログラムの実行中に、前記解析手段によって挿入された前記呼び出しに応じて、処理を開始する
    請求項1~のいずれか1項に記載の情報処理装置。
  6. 前記解析手段、前記記憶手段、及び前記検証手段が配置されるセキュアな実行環境
    をさらに有し、
    前記記憶手段は、前記呼び出しについての第1の固有値を記憶し、
    前記検証手段は、周期的に、前記呼び出しについての第2の固有値を算出し、算出された前記第2の固有値と前記第1の固有値とを比較することで、検証の呼び出しの完全性を検証する
    請求項に記載の情報処理装置。
  7. コンピュータによって実行される情報処理方法であって、前記コンピュータが、
    実行前にプログラムを解析して、前記プログラムにおける分岐を抽出し、前記分岐に関する分岐情報と、前記分岐における分岐先から次の分岐までに実行され得る前記プログラムの部分に関するプログラム部分情報とを取得し、
    プログラム中の前記分岐の分岐条件の確定するタイミングを解析して、複数の分岐を集約し、
    前記分岐情報と、前記プログラム部分情報と、前記プログラム部分情報に関するプログラム部分について予め取得され検証のために使用される第1の固有値とを記憶し、
    前記プログラムが実行されて実行箇所が前記分岐に到達すると、前記プログラム部分についての検証のために使用される第2の固有値を取得し、前記第2の固有値と前記第1の固有値とが一致するか否かを判定することで、集約された分岐ごとに前記プログラム部分の完全性を検証する
    情報処理方法。
  8. 前記コンピュータが、
    分岐元アドレスと分岐先アドレスとの組を含む前記分岐情報を記憶し、
    実行されているプログラムの分岐元のアドレスと分岐先のアドレスとの組が記憶されているか否かを判定することで、前記プログラムの実行フローの完全性を検証する
    請求項に記載の情報処理方法。
  9. 前記コンピュータが、
    前記タイミングの前に前記分岐の次の分岐の分岐条件が確定している場合に、当該分岐と前記次の分岐とを集約する
    請求項に記載の情報処理方法。
  10. 前記コンピュータが、
    第1の分岐に対する検証が成功した場合に、前記分岐条件が確定している次の分岐に関する前記分岐情報を保存し、
    前記第1の分岐の次の分岐の検証の際に、保存された前記分岐情報を用いて、前記プログラムの実行フローの完全性を検証する
    請求項に記載の情報処理方法。
  11. 前記コンピュータが、
    前記プログラムにおける前記分岐に対して検証の呼び出しを挿入し、
    前記プログラムの実行中に、挿入された前記呼び出しに応じて、処理を開始する
    請求項7~10のいずれか1項に記載の情報処理方法。
  12. 前記解析する処理、前記記憶する処理、及び前記検証する処理は、前記コンピュータによって、セキュアな実行環境で実行され、
    前記コンピュータが、
    前記呼び出しについての第1の固有値を記憶し、
    周期的に、前記呼び出しについての第2の固有値を算出し、算出された前記第2の固有値と前記第1の固有値とを比較することで、検証の呼び出しの完全性を検証する
    請求項11に記載の情報処理方法。
  13. 実行前にプログラムを解析して、前記プログラムにおける分岐を抽出し、前記分岐に関する分岐情報と、前記分岐における分岐先から次の分岐までに実行され得る前記プログラムの部分に関するプログラム部分情報とを取得し、プログラム中の前記分岐の分岐条件の確定するタイミングを解析して、複数の分岐を集約するステップと、
    前記分岐情報と、前記プログラム部分情報と、前記プログラム部分情報に関するプログラム部分について予め取得され検証のために使用される第1の固有値とを記憶するステップと、
    前記プログラムが実行されて実行箇所が前記分岐に到達すると、前記プログラム部分についての検証のために使用される第2の固有値を取得し、前記第2の固有値と前記第1の固有値とが一致するか否かを判定することで、集約された分岐ごとに前記プログラム部分の完全性を検証するステップと
    をコンピュータに実行させるプログラム。
JP2021506878A 2019-03-19 2019-03-19 情報処理装置、情報処理方法及びプログラム Active JP7207519B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2019/011366 WO2020188731A1 (ja) 2019-03-19 2019-03-19 情報処理装置、情報処理方法及び記録媒体

Publications (2)

Publication Number Publication Date
JPWO2020188731A1 JPWO2020188731A1 (ja) 2020-09-24
JP7207519B2 true JP7207519B2 (ja) 2023-01-18

Family

ID=72520690

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021506878A Active JP7207519B2 (ja) 2019-03-19 2019-03-19 情報処理装置、情報処理方法及びプログラム

Country Status (3)

Country Link
US (1) US20220147617A1 (ja)
JP (1) JP7207519B2 (ja)
WO (1) WO2020188731A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US12008370B2 (en) * 2021-05-06 2024-06-11 Purdue Research Foundation Method for preventing security attacks during speculative execution
JPWO2025004158A1 (ja) * 2023-06-26 2025-01-02

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060195906A1 (en) 2005-02-26 2006-08-31 International Business Machines Corporation System, method, and service for detecting improper manipulation of an application
JP2007226277A (ja) 2004-04-02 2007-09-06 Matsushita Electric Ind Co Ltd 仮想マシン改ざん検査方法、および仮想マシン改ざん検査装置

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003186699A (ja) * 2001-12-17 2003-07-04 Fujitsu Ltd 情報処理装置のトレース情報出力方法、トレース情報出力システム
US8006078B2 (en) * 2007-04-13 2011-08-23 Samsung Electronics Co., Ltd. Central processing unit having branch instruction verification unit for secure program execution
JP5287058B2 (ja) * 2008-09-08 2013-09-11 富士通株式会社 検証支援プログラム、検証支援装置および検証支援方法
KR101625129B1 (ko) * 2013-12-31 2016-05-27 고려대학교 산학협력단 프로그램의 간접 분기 모니터링 방법 및 시스템
WO2016147334A1 (ja) * 2015-03-18 2016-09-22 株式会社日立製作所 プロセッサの診断装置及び診断方法
JP6427053B2 (ja) * 2015-03-31 2018-11-21 株式会社デンソー 並列化コンパイル方法、及び並列化コンパイラ
JP6544054B2 (ja) * 2015-06-02 2019-07-17 富士通株式会社 情報処理装置、実行情報記録プログラムおよび実行情報記録方法
US10579791B2 (en) * 2016-03-04 2020-03-03 Intel Corporation Technologies to defeat secure enclave side-channel attacks using fault-oriented programming
KR102131689B1 (ko) * 2018-01-30 2020-08-06 고려대학교 산학협력단 예측 불가능성에 기반한 효율적인 소프트웨어 제어흐름 무결성 검증 방법

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007226277A (ja) 2004-04-02 2007-09-06 Matsushita Electric Ind Co Ltd 仮想マシン改ざん検査方法、および仮想マシン改ざん検査装置
US20060195906A1 (en) 2005-02-26 2006-08-31 International Business Machines Corporation System, method, and service for detecting improper manipulation of an application

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
DANGER, Jean-Luc et al.,HCODE: Hardware-Enhanced Real-Time CFI,Proceedings of the 4th Program Protection and Reverse Engineering Workshop,米国,ACM,2014年12月09日,Article No. 6,pp. 1-11,https://dl.acm.org/citation.cfm_id=2689708,ISBN: 978-1-60558-637-3

Also Published As

Publication number Publication date
WO2020188731A1 (ja) 2020-09-24
US20220147617A1 (en) 2022-05-12
JPWO2020188731A1 (ja) 2020-09-24

Similar Documents

Publication Publication Date Title
JP7164017B2 (ja) フォールトツリー分析を使用して機能安全のため制御フローグラフを最適化するシステム及び方法
Malone et al. Are hardware performance counters a cost effective way for integrity checking of programs
CN109101815B (zh) 一种恶意软件检测方法及相关设备
US10162966B1 (en) Anti-malware system with evasion code detection and rectification
CN112286828B (zh) 一种区块链智能合约的测试方法和系统
JPWO2006087780A1 (ja) 脆弱性監査プログラム、脆弱性監査装置、脆弱性監査方法
CN112925524B (zh) 一种检测驱动程序中不安全直接存储器访问的方法及装置
US10324816B2 (en) Checking a computer processor design for soft error handling
CN108491213A (zh) 软件持续集成方法、软件持续集成装置及电子设备
CN105868626B (zh) 基于控制流粗粒度完整性的监控软件业务行为的方法
JP7207519B2 (ja) 情報処理装置、情報処理方法及びプログラム
KR101594701B1 (ko) 이상 접속 검출 장치 및 방법
CN107220175B (zh) 应用程序死循环定位方法、装置、计算机设备和存储介质
US20150193617A1 (en) Signature verification device, signature verification method, and program
US20240054213A1 (en) Attack information generation apparatus, control method, and non-transitory computer readable medium
CN114282221A (zh) 注入类漏洞检测方法、系统、终端及存储介质
JP5077455B2 (ja) 脆弱性監査プログラム、脆弱性監査装置、脆弱性監査方法
CN117076301A (zh) 系统性能测试方法、装置及电子设备
US20220284109A1 (en) Backdoor inspection apparatus, backdoor inspection method, and non-transitory computer readable medium
CN119597293B (zh) 代码自动修复方法、装置及电子设备
CN117909956B (zh) 一种硬件辅助的嵌入式系统程序控制流安全认证方法
CN117971670A (zh) 一种基于跨平台迁移的软件性能检测方法、系统及介质
CN113742724B (zh) 一种网络协议软件的安全机制缺陷检测方法
US20220245054A1 (en) Semiconductor device, control flow inspection method, non-transitory computer readable medium, and electronic device
JP4913353B2 (ja) ソフトウェア動作モデル化装置及びソフトウェア動作監視装置

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210830

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210830

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20221004

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221129

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20221206

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20221219

R151 Written notification of patent or utility model registration

Ref document number: 7207519

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151