JP2016115033A - 命令実行制御装置、命令実行制御方法 - Google Patents

命令実行制御装置、命令実行制御方法 Download PDF

Info

Publication number
JP2016115033A
JP2016115033A JP2014251644A JP2014251644A JP2016115033A JP 2016115033 A JP2016115033 A JP 2016115033A JP 2014251644 A JP2014251644 A JP 2014251644A JP 2014251644 A JP2014251644 A JP 2014251644A JP 2016115033 A JP2016115033 A JP 2016115033A
Authority
JP
Japan
Prior art keywords
instruction
return
label
unit
identification information
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.)
Granted
Application number
JP2014251644A
Other languages
English (en)
Other versions
JP6435834B2 (ja
Inventor
和快 古川
Kazuyoshi Furukawa
和快 古川
尚 兒島
Takashi Kojima
尚 兒島
武仲 正彦
Masahiko Takenaka
正彦 武仲
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014251644A priority Critical patent/JP6435834B2/ja
Priority to US14/881,464 priority patent/US20160171213A1/en
Publication of JP2016115033A publication Critical patent/JP2016115033A/ja
Application granted granted Critical
Publication of JP6435834B2 publication Critical patent/JP6435834B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

【課題】ROP攻撃を検出し、被害を未然に防ぐ命令実行制御装置、命令実行制御方法を提供する。【解決手段】コール命令を含む第1の命令群と、リターン命令を含む第2の命令群とを記憶する記憶部と、前記第1の命令群から前記コール命令によって呼び出された前記第2の命令群の実行時に、前記第2の命令群の前記リターン命令による、前記第1の命令群への戻り先アドレスの命令が識別情報を有するか否かを判定し、前記識別情報を有する場合に、前記第1の命令群の処理を続行し、前記識別情報を有しない場合に、命令実行処理を停止する処理部、とを有する。【選択図】図5

Description

本発明は、命令実行制御装置、命令実行制御方法に関する。
インターネットの発達に伴い、プロセッサへの不正なアクセスが増加している。この不正なアクセスを防止するため、セキュリティ機能を設けている。
プロセッサへの不正なアクセスには、例えば、バッファオーバーフローによって、攻撃コードをメモリ上に展開し、攻撃コードへ実行を遷移させる攻撃手法がある。また、この攻撃へのセキュリティ対策として、データ実行防止(Data Execution Prevention:DEP)機能がある。DEP機能は、データメモリ領域上でのプログラムの実行を禁止することにより、バッファオーバーフローによる攻撃を困難にする。
一方、DEP機能による制限を回避する攻撃手法として考え出された、ROP(Return Oriented Programming:ROP)攻撃がある。ROP攻撃は、スタックオーバーフローなどのプログラムの脆弱性を利用してスタック情報を改竄し、プログラムの実行遷移を制御するプログラミング手法である。
ROP攻撃については、例えば、特許文献1、2に記載される。
特開2013−228957号公報 特開2011−008778号公報
ROP攻撃は、スタックを改ざんする。そして、ROP攻撃は、改ざんしたスタックを実行することによって、実行したい疑似プログラムと同等の処理を実現する。ROP攻撃により、攻撃者は、スタックを改ざんすることによって、カーネル空間で、攻撃プログラムを実行することができる。
1つの側面は、本発明は、ROP攻撃を検出し、被害を未然に防ぐ命令実行制御装置、命令実行制御方法を提供することを目的とする。
第1の側面は、コール命令を含む第1の命令群と、リターン命令を含む第2の命令群とを記憶する記憶部と、前記第1の命令群から前記コール命令によって呼び出された前記第2の命令群の実行時に、前記第2の命令群の前記リターン命令による、前記第1の命令群への戻り先アドレスの命令が識別情報を有するか否かを判定し、前記識別情報を有する場合に、前記第1の命令群の処理を続行し、前記識別情報を有しない場合に、命令実行処理を停止する処理部、とを有する。
第1の側面によれば、ROP攻撃を検出し、被害を未然に防ぐ。
本実施の形態におけるROP攻撃を説明する図である。 図1で説明した、ROP攻撃におけるガジェットと疑似プログラムとの対応を説明する図である。 第1の実施の形態における、戻り先ラベルフィールドを付加した、アセンブリコードの一例を示す図である。 第1の実施の形態における、戻り先ラベルを付加した、アセンブリコードの一例を示す図である。 第1の実施の形態における情報処理装置のハードウェア構成を示す図である。 図5に示した情報処理装置の命令実行制御処理の流れを説明する図である。 図5に示した情報処理装置の処理を、図1に示したスタック領域が改ざんされていない場合に基づいて説明する図である。 図5に示した情報処理装置の処理を、図1に示したスタック領域が改ざんされている場合に基づいて説明する図(その1)である。 図5に示した情報処理装置の処理を、図1に示したスタック領域が改ざんされている場合に基づいて説明する図(その2)である。 第2の実施の形態におけるアセンブリコードの一例を示す図である。 第2の実施の形態における情報処理装置のハードウェア構成を示す図である。
以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
[第1の実施の形態]
(ROP攻撃)
図1は、本実施の形態におけるROP(Return-Oriented Programming:ROP)攻撃を説明する図である。ROP攻撃は、スタックオーバーフローなどのプログラムの脆弱性を利用して、スタック情報を改ざんし、実行する命令の遷移を制御するプログラミング手法である。
図1は、ROP攻撃によって疑似的に実行される疑似プログラムpbと、情報処理装置(プロセッサ、命令実行制御装置)のメモリ領域のカーネル空間内のプログラムpaと、メモリ領域内のスタック領域30とを示す。情報処理装置の構成は、図5にしたがって後述する。
図1に示す、情報処理装置のメモリ領域(図示せず)のカーネル空間内のプログラムpaは、カーネル空間で動作するプログラムを示す。メモリ領域は、カーネル空間と、ユーザ空間(図示せず)とを含む。
カーネル空間は、OS(Operating System:OS)のカーネルのプログラムpaを格納する仮想メモリ領域である。また、カーネルは、OSの基本機能を実装するソフトウェアである。カーネルのプログラムpaは、例えば、図1に示すライブラリプログラム(以下、ライブラリ)A〜C、及び、API(Application Programming Interface:API)を含む。一方、ユーザ空間では、カーネル以外のユーザのアプリケーションが動作する。カーネル空間で動作するプログラムpaは、一定以上の権限を有する。したがって、ユーザ空間で動作するプログラム(図示せず)は、カーネル空間で動作するプログラムpaにアクセスできない。
カーネル空間で不正なプログラムが動作した場合、情報処理装置自体に障害が生じてしまうことがある。これに対し、ユーザ空間で不正なプログラムが動作したとしても、ユーザ空間で動作するプログラムの権限が低いことから、情報処理装置に生じる影響は小さい。
図1に示すスタック領域30は、例えば、プログラムのリターンアドレスをスタックする領域である。リターンアドレスは、メインルーチンからのサブルーチンが呼び出された場合、サブルーチンの処理後に遷移するべきメインルーチンの命令アドレス(以下、戻り先アドレス)を示す。情報処理装置は、サブルーチンのリターン命令(return)の処理時に、スタック領域30から、メインルーチンへの戻り先アドレスを取得する。
なお、図1に示すスタック領域30は、改ざんされている。スタック領域30が改ざんされていない場合、図1に示す、通常スタックを保持する。これに対し、改ざんされているスタック領域30は、ガジェットga1〜ga3の呼出しスタックや、API呼出しスタックを保持する。ガジェットga1〜ga3(ガジェットgaともいう)は、プログラムpaのライブラリA〜C及びAPIの一部の命令列であって、疑似プログラムpbを構成するための命令列である。また、ガジェットga1〜ga3は、リターン命令を末尾に有する命令列である。
図1の例によると、プログラムpaのライブラリAが含むガジェットga1は、命令「mov G0, 0xffff」と命令「return」とを有する。また、プログラムpaのライブラリBが含むガジェットga2は、命令「mov G1, 0xffff」と命令「return」とを有する。また、プログラムpaのライブラリCが含むガジェットga3は、命令「mul G0, G1」と命令「return」とを有する。
ROPの攻撃者は、スタック領域30が、ガジェットga1〜ga3の先頭アドレス(ガジェット呼出しスタック)を有するように改ざんする。例えば、ROPの攻撃者は、ガジェットga1、ガジェットga2、ガジェットga3の順に、ガジェット呼出しスタックが取得されるように、スタック領域30を改ざんする。これにより、ROPの攻撃者は、情報処理装置に、ガジェットga1〜3を、連続的に呼び出させ実行させることができる。
具体的に、情報処理装置は、リターン命令を処理する時、改ざんされたスタック領域30から、ガジェットga1の先頭アドレスを読み出す。そして、情報処理装置は、ガジェットga1の命令「mov G0, 0xffff」、命令「return」を処理する。また、情報処理装置は、ガジェットga1の命令「return」の処理時、ガジェットga2の先頭アドレスをスタック領域30から読み出し、ガジェットga2の命令「mov G1, 0xffff」、命令「return」を処理する。同様にして、情報処理装置は、ガジェットga2の命令「return」の処理時、ガジェットga3の先頭アドレスをスタック領域30から読み出し、ガジェットga3の命令「mul G0, G1」、命令「return」を処理する。
これにより、ROPの攻撃者は、カーネル空間で、命令列「mov G0, 0xffff、mov G1, 0xffff、mul G0, G1…」を、情報処理装置に実行させることができる。つまり、ROPの攻撃者は、ガジェットga1〜ga3とスタック領域30を利用することにより、図1に示す疑似プログラムpbと同等の処理を、情報処理装置に実行させることができる。
図2は、図1で説明した、ROP攻撃におけるガジェットga1〜ga3と疑似プログラムpbとの対応を説明する図である。図2において、図1で示したものと同一のものは、同一の記号で示す。
図1で前述したとおり、ガジェットga1〜ga3は、プログラムpaの末尾にリターン命令を含む命令列である。図2に示すように、単体のガジェットga1〜ga3は、多くの命令を含んでいない。しかしながら、ROPの攻撃者は、複数のガジェットga1〜ga3を組み合わせることによって、疑似的に、疑似プログラムpbと同等の処理を実現することができる。
また、ROPの攻撃者は、カーネル空間で動作するプログラムpaの一部の命令列をガジェットga1〜ga3として悪用する。これにより、ROPの攻撃者は、昇格した権限にしたがって、カーネル空間で任意のプログラムを実行させることができる。したがって、ROP攻撃によって、例えば、カーネルに被害を与えることが可能になる。
(本実施の形態の概要)
図1、図2に示したように、ROP攻撃では、命令の実行が、通常はサブルーチンから戻り先にならないプログラムpa内の途中の命令に遷移する。したがって、本実施の形態における情報処理装置は、命令の実行が、サブルーチンコールからの戻り先アドレスが示す命令とは異なる命令に遷移するROP攻撃の特性を利用し、ROP攻撃を検出する。即ち、情報処理装置は、リターン命令による遷移先の命令が、戻り先アドレスの命令ではない場合に、ROP攻撃を検出する。
具体的に、本実施の形態において、命令列のうち、サブルーチンからの戻り先アドレスの命令は、戻り先のアドレスであることを示す戻り先ラベル(識別情報)を有する。そして、情報処理装置は、第1のルーチン(命令群)のコール命令によって呼び出された第2のルーチン(命令群)の実行時に、第2のルーチンのリターン命令による第1のルーチンへの戻り先アドレスの命令が戻り先ラベルを有するか否かを判定する。情報処理装置は、戻り先アドレスの命令が戻り先ラベルを有する場合に、第1のルーチンの処理を続行し、戻り先ラベルを有しない場合に命令実行処理を停止する。
戻り先アドレスの命令が戻り先ラベルを有しない場合、不正なアドレスに遷移したことを示し、スタック領域30が改ざんされていることを示す。したがって、情報処理装置は、命令の実行処理を停止する。このように、情報処理装置は、サブルーチンからの、通常の戻り先アドレスとは異なる、不正なアドレスへの遷移を検出することでROP攻撃を検出し、ROP攻撃による被害を未然に防ぐ。
前述したとおり、情報処理装置は、戻り先アドレスの命令が戻り先ラベルを有しない場合、命令の実行処理を停止する。これは、ROPの攻撃者が、戻り先アドレスの命令が戻り先ラベルを有するようにスタック領域30を改ざんすれば、情報処理装置は、命令の実行処理を停止しないことを意味する。
しかしながら、カーネル空間のプログラムpaが有する命令列のうち、戻り先ラベルを有する命令を含み、ROPの攻撃者が利用したい命令を含む命令列は少ない。より具体的に、戻り先ラベルを有する命令を先頭とし、ROPの攻撃者が利用したい命令を含み、リターン命令を末尾に有する命令列は、少ない。即ち、戻り先ラベルの制約があることにより、ガジェットgaとして利用可能な命令列は、大幅に限定される。
これにより、限定されたガジェットgaに基づいて、情報処理装置に実行させたい任意の疑似プログラムpbを構成することは、より困難になる。したがって、本実施の形態の情報処理装置は、ROP攻撃を検出しROP攻撃による被害を未然に防ぐとともに、ガジェットgaとして使用可能な命令列を制限することによって、ROP攻撃の容易性を低くすることができる。
(アセンブリコード)
第1の実施の形態におけるプログラムpaの一例として、図3、図4にしたがって、アセンブリコードの一例を説明する。図3、図4に示すアセンブリコードは、図1、図2に示したプログラムpaの一例であって、アセンブリコードで記述されたプログラムである。図3、図4のアセンブリコードは、戻り先ラベルの付加の形態が異なる。
図3は、第1の実施の形態における、戻り先ラベルフィールドを付加した、アセンブリコードpxの一例を示す図である。図3に示すアセンブリコードpxは、命令1「call lib_b」、命令2「mov G0, 0xffff, ret」、命令3「mov G1, 0xffff」、命令4「mov G2, 0xffff」、命令「…」、命令n「return」を有する。
図3に示すアセンブリコードpxをアセンブリした、バイナリエンコードの各命令は、戻り先ラベルのフィールドを有する。戻り先ラベルフィールドは、戻り先ラベルを付加するフィールドである。命令2「mov G0, 0xffff, ret」における3つ目の領域(「ret」の領域)は、戻り先ラベルフィールドを示す。また、命令2の値「ret」は、戻り先ラベルの値を示す。プログラムの作成者は、サブルーチンを呼び出す命令1「call lib_b」の戻り先アドレス(復帰先アドレス)の、命令2の戻り先ラベルフィールドに、戻り先ラベルを示す値「ret」を付加する。
したがって、図3の例では、情報処理装置は、戻り先アドレスの命令に、戻り先ラベルが付加されているか否かに基づいて、戻り先アドレスの命令が戻り先ラベルを有するか否かを判定する。
コンパイラは、図3に示すアセンブリコードpxをアセンブリし、情報処理装置で実行可能なバイナリエンコードを生成する。このとき、コンパイラは、命令2以外の命令1、命令3〜命令nに、戻り先ラベルフィールドのみを付加する。したがって、バイナリエンコードの命令2以外の命令1、命令3〜命令nの戻り先ラベルフィールドは、戻り先ラベルの値を有しない。一方、バイナリエンコードの命令2の戻り先ラベルフィールドは、例えば、1ビットの戻り先ラベルの値を有する。
このように、例えば、コンパイラは、各命令に、戻り先ラベルフィールドを付加する。これにより、プログラムの作成者は、戻り先ラベルの付加のために、アセンブリコードpxの命令2以外のすべての命令に対して、戻り先ラベルのフィールドを追加する必要がない。したがって、プログラム(アセンブリコードpx)に対する戻り先ラベルの付加が容易になる。
または、コンパイラは、コンパイル時に、サブルーチンを呼び出す命令1「call lib_b」の戻り先アドレスである命令2を検知し、命令2に「戻り先ラベル(ret)」を付加してもよい。このように、コンパイラが、サブルーチンを呼び出す命令の戻り先アドレスが示す命令を検知することにより、プログラムへの戻り先ラベルの付加が、より容易になる。
図4は、第1の実施の形態における、戻り先ラベルを付加した、アセンブリコードpyの一例を示す図である。図3のアセンブリコードpxに対して、図4のアセンブリコードpyは、戻り先アドレスに、命令「LABEL_RET(戻り先ラベル)」を有する。
図4に示すアセンブリコードpyは、命令11「call lib_b」、命令12「LABEL_RET(戻り先ラベル)」、命令13「mov G0, 0xffff, ret」、命令14「mov G1, 0xffff」、命令15「mov G2, 0xffff」、命令「…」、命令1n「return」を有する。命令12「LABEL_RET(戻り先ラベル)」は、例えば、1ビットの値であって、実行されない命令である。
プログラムの作成者は、サブルーチンを呼び出す命令11「call lib_b」の戻り先アドレス(復帰先アドレス)に、命令(ラベル)「LABEL_RET」を追加する。したがって、図4の例では、情報処理装置は、戻り先アドレスの命令が戻り先ラベルであるか否かに基づいて、戻り先アドレスの命令が戻り先ラベルを有するか否かを判定する。
コンパイラは、図4に示すアセンブリコードpyをアセンブリし、情報処理装置で実行可能なバイナリエンコードを生成する。なお、コンパイラは、サブルーチンを呼び出す命令11「call lib_b」の戻り先アドレスを検知し、戻り先ラベルを追加してもよい。コンパイラが、サブルーチンを呼び出す命令の戻り先アドレスを検知し、戻り先ラベルを追加することにより、プログラムに対する戻り先ラベルの付加が、より容易になる。
なお、図4の例において、アセンブリコードpyは、戻り先ラベルの代わりに、NOP命令等の所定の命令を有してもよい。戻り先ラベルと同様にして、情報処理装置は、所定の命令を実行しない。
なお、図3、図4に示すアセンブリコードpx、pyに対する、戻り先ラベルフィールド、または、戻り先ラベル(所定の命令)の追加による、プログラムコードの増加量は5%程度である。したがって、戻り先ラベルフィールド、または、戻り先ラベル(所定の命令)の追加によるプログラムコードの増加量は、多くはない。
なお、図3、図4では、アセンブリコードのプログラムを例示したが、戻り先ラベルを付加する対象のプログラムは、アセンブリコードのプログラムに限定されるものではない。
(情報処理装置のハードウェア構成)
図5は、第1の実施の形態における情報処理装置のハードウェア構成を示す図である。図5に示す情報処理装置100は、例えば、プログラムカウンタ(Program Counter:PC)10、命令メモリ11、命令フェッチ部12、命令デコード部13、命令実行部14等を有する。
プログラムカウンタ10は、次に実行すべき命令のアドレスを格納するレジスタである。命令メモリ11は、情報処理装置100が処理する命令を格納する領域である。命令メモリ11は、例えば、SRAM(Static Random Access Memory:SRAM)である。命令フェッチ部12は、プログラムカウンタ10の値に基づいて、命令を、命令メモリ11から読み出し、命令デコード部13に出力する。命令デコード部13は、命令フェッチ部12によって取得された命令をデコードし、命令実行部14に出力する。
命令実行部14は、演算部(図示せず)と分岐部19を有する。演算部は、例えば、加減算、乗算といった算術演算や、論理演算などの演算処理を実行し、演算結果をレジスタ(図示せず)等に書き込む。また、分岐部19は、例えば、リターン命令による分岐時に、スタック領域(図1)30から戻り先アドレスを取り出し、プログラムカウンタ10に設定する。なお、図5にはスタック領域30を図示していないが、スタック領域30は、例えば、メインメモリ(図示せず)、または、情報処理装置100のキャッシュメモリ(図示せず)に含まれる。分岐部19は、メインメモリやキャッシュメモリと接続する。
また、本実施の形態における命令デコード部13は、戻り先チェック部17を有する。さらに、本実施の形態における情報処理装置100は、戻り先ラベル検証部18を有する。
分岐部19は、リターン命令による分岐時に戻り先チェック部17を有効化する。有効化されている場合、戻り先チェック部17は、命令デコード部13がデコードした命令が、戻り先ラベルを有するか否かを判定し、自身を無効化する。命令が戻り先ラベルを有する場合、戻り先チェック部17は、戻り先ラベルを、戻り先ラベル検証部18に出力する。一方、命令が戻り先ラベルを有しない場合、戻り先チェック部17は、例外割り込みを発生させる。
戻り先チェック部17は、例えば、AND回路(図示せず)を有する。AND回路は、例えば、戻り先ラベルの値を示す信号と、戻り先チェック部17が有効か無効かを示す信号とを入力とする。AND回路は、戻り先チェック部17が有効であって、かつ、戻り先ラベルの値がある場合に、戻り先ラベルの値を出力する。
戻り先ラベル検証部18は、戻り先ラベルが適切な値であるか否かを検証する。戻り先ラベルが適切な値ではない場合、戻り先ラベル検証部18は、例外割り込みを発生させる。戻り先ラベル検証部18は、例えば、比較回路(図示せず)を有する。比較回路は、戻り先チェック部17が出力した戻り先ラベルの値と、適切な戻り先ラベルの値とを比較し、比較結果を出力する。
(命令実行制御処理の流れ)
図6は、図5に示した情報処理装置100の命令実行制御処理の流れを説明する図である。
S11:命令実行部14は、実行対象の命令がリターン命令か否かを判定する。
S12:リターン命令を実行する場合(S11のYes)、命令実行部14の分岐部19は、リターン命令の戻り先アドレスをスタック領域30から取得し、プログラムカウンタ10に設定する。また、分岐部19は、戻り先チェック部17を有効化する。
S13:命令フェッチ部12は、プログラムカウンタ10が示す命令を、命令メモリ11から読み出し、命令デコード部13に出力する。命令デコード部13は、命令フェッチ部12によって取得された命令をデコードする。
S14:命令デコード部13は、戻り先チェック部17が有効化されているか否かを判定する。なお、戻り先チェック部17が無効である場合(S14のNo)、命令デコード部13は、デコードした命令を、命令実行部14に出力する。
S15:一方、戻り先チェック部17が有効化されている場合(S14のYes)、命令デコード部13は、戻り先チェック部17を無効化する。
S16:工程S15の後、戻り先チェック部17は、工程S13でデコードした命令が戻り先ラベルを有するか否かを判定する。
S17:命令が戻り先ラベルを有する場合(S16のYes)、戻り先チェック部17は、戻り先ラベルを、戻り先ラベル検証部18に出力する。
S18:戻り先ラベル検証部18は、戻り先チェック部17が出力した、戻り先ラベルが所定の情報であるか否かを判定する。即ち、戻り先ラベル検証部18は、戻り先ラベルが適切な値であるか否かを判定する。戻り先ラベルが所定の情報であるか否かを判定することにより、より厳密に、戻り先アドレスが適切な値であるか否かを判定可能になる。
例えば、戻り先ラベル検証部18は、戻り先チェック部17が出力した戻り先ラベルと、予め定めた所定の情報とを比較し、一致するか否かに基づいて、戻り先ラベルが適切であるか否かを判定する。戻り先ラベルが適切である場合(S18のYes)、命令デコード部13は、デコードした命令を命令実行部14に出力する。
S19:一方、命令が戻り先ラベルを有していない場合(S16のNo)、戻り先チェック部17は、例外割り込みを発生させる。または、戻り先ラベルが不正なラベルである場合(S18のNo)、命令デコード部13は、例外割り込みを発生させる。
(スタック領域が改ざんされていない場合)
図7は、図5に示した情報処理装置100の処理を、図1に示したスタック領域30が改ざんされていない場合に基づいて説明する図である。図7において、図1で示したものと同一のものは、同一の記号で示す。図7は、プログラムpy−1と、プログラムpy−1が呼び出すライブラリ「lib_b」py−2と、スタック領域30とを示す。プログラムpy−1、及び、ライブラリ「lib_b」py−2は、カーネル空間で動作するプログラムである。
図7に示すプログラムpy−1は、命令31〜37を有する。アドレス「0xFF01」が示す命令31は、命令「call lib_b」である。アドレス「0xFF02」が示す命令32は、命令(ラベル)「LABEL_RET(戻り先ラベル)」である。アドレス「0xFF03」が示す命令33は、命令「mov G0, 0xffff」である。アドレス「0xFF04」が示す命令34は、命令「mov G1, 0xffff」である。アドレス「0xFF05」が示す命令35は、命令「mov G2, 0xffff」である。アドレス「0xFF07」が示す命令37は、命令「return」である。
つまり、図7に示すプログラムpy−1は、ライブラリ「lib_b」py−2を呼び出した後、レジスタG0〜G2が保持する値を順次、移動するプログラムである。
命令31「call lib_b」の呼出し時、命令実行部14は、スタック領域30に、戻り先アドレス「0xFF02」を追加する。そして、命令実行部14は、ライブラリ「lib_b」py−2の命令を順次、実行し、アドレス「0xFFF7」が示す、末尾のリターン命令を処理する(図6のS11のYes)。このとき、分岐部19は、スタック領域30から戻り先アドレス「0xFF02」を取得し、プログラムカウンタ10に設定するとともに、戻り先チェック部17を有効化する(S12)。
命令フェッチ部12は、プログラムカウンタ10が示す、命令(ラベル)「LABEL_RET(戻り先ラベル)」を取得し、命令デコード部13に出力する。命令デコード部13は、命令(ラベル)「LABEL_RET」をデコードし(S13)、戻り先チェック部17が有効化されているか否かを判定する(S14)。
工程S12によって、戻り先チェック部17は有効化されている(S14のYes)。したがって、命令デコード部13は、戻り先チェック部17を無効化するとともに(S15)、命令(ラベル)「LABEL_RET」が戻り先ラベルを有するか否かを判定する(S16)。命令(ラベル)「LABEL_RET」は戻り先ラベルであるため(S16のYes)、戻り先ラベル検証部18は、戻り先ラベルが適切な値であるか否かを判定する(S17、S18)。
戻り先ラベル検証部18は、命令(ラベル)「LABEL_RET」が、適切なラベル「LABEL_RET」と一致するか否かを判定する。図7の例に示す命令(ラベル)「LABEL_RET」は、適切な値であるため(S18のYes)、命令デコード部13は、例外割り込みを発生させない。なお、命令実行部14は、命令(ラベル)「LABEL_RET」を実行しない。
次に、命令フェッチ部12は、インクリメントしたプログラムカウンタ10が示す、アドレス「0xFF03」の命令「mov G0, 0xffff」を取得する。命令デコード部13は、命令「mov G0, 0xffff」をデコードし(S13)、戻り先チェック部17が有効化されているか否かを判定する(S14)。前回、処理した命令がリターン命令ではないことから、戻り先チェック部17は有効化されていない(S14のNo)。したがって、命令デコード部13は、デコードした命令を、命令実行部14に出力する。
(スタック領域が改ざんされている場合)
図8は、図5に示した情報処理装置100の処理を、図1に示したスタック領域30が改ざんされている場合に基づいて説明する図(その1)である。図8において、図1で示したものと同一のものは、同一の記号で示す。図8は、ライブラリ「lib_a」py−11と、ライブラリ「lib_b」py−12と、スタック領域30とを示す。ライブラリ「lib_a」py−11、及び、ライブラリ「lib_b」py−12は、カーネル空間で動作するプログラムである。
図8に示すライブラリ「lib_a」py−11は、命令41〜46を有する。アドレス「0xFF01」が示す命令41は、命令「mov G3, 0xffff」である。アドレス「0xFF02」が示す命令42は、命令「mov G0, 0xffff」である。アドレス「0xFF03」が示す命令43は、命令「mov G1, 0xffff」である。アドレス「0xFF04」が示す命令44は、命令「mov G2, 0xffff」である。アドレス「0xFF06」が示す命令46は、命令「return」である。
つまり、図8に示すライブラリ「lib_a」py−11は、レジスタG3が保持する値を移動した後、レジスタG0〜G2が保持する値を順次、移動するプログラムである。また、図8に示すスタック領域30は、攻撃者によって改ざんされており、先に取り出される順に、戻り先アドレス「0xFFF6」、「0xFF01」、「0xFD01」、「0xFFF8」を有する。
リターン命令(図示せず)を検出すると(図6のS11のYes)、分岐部19は、スタック領域30から戻り先アドレス「0xFFF6」を取得し、プログラムカウンタ10に設定するとともに、戻り先チェック部17を有効化する(S12)。戻り先アドレス「0xFFF6」は、改ざんされたアドレスであって、ライブラリ「lib_b」py−12内の命令「mov G2, 0xffff」を示す。
次に、命令フェッチ部12は、命令「mov G2, 0xffff」を取得し、命令デコード部13に出力する。命令デコード部13は、命令「mov G2, 0xffff」をデコードし(S13)、戻り先チェック部17が有効化されているか否かを判定する(S14)。
工程S12により、戻り先チェック部17が有効化されている(S14のYes)。したがって、命令デコード部13は、戻り先チェック部17を無効化するとともに(S15)、取得した命令「mov G2, 0xffff」が戻り先ラベルを有するか否かを判定する(S16)。命令「mov G2, 0xffff」は、戻り先ラベルを有していないため(S16のNo)、戻り先チェック部17は、例外割り込みを発生させる(S19)。
図9は、図5に示した情報処理装置100の処理を、図1に示したスタック領域30が改ざんされている場合に基づいて説明する図(その2)である。図9において、図1で示したものと同一のものは、同一の記号で示す。
図9に示す、ライブラリ「lib_a」py−11、及び、ライブラリ「lib_b」py−12は、図8と同一である。ただし、図8には図示していないが、ライブラリ「lib_b」py−12のアドレス「0xFFF5」は、命令(ラベル)「LABEL_NON_RET」を有する。命令(ラベル)「LABEL_NON_RET」は、不適切なラベルである。また、図9に示すスタック領域30は、図8に示すスタック領域30と異なる。図9に示すスタック領域30は、攻撃者によって改ざんされており、先に取り出される順に、戻り先アドレス「0xFFF5」、「0xFF01」、「0xFD01」、「0xFFF8」を有する。
リターン命令(図示せず)を検出すると(図6のS11のYes)、分岐部19は、スタック領域30から戻り先アドレス「0xFFF5」を取得し、プログラムカウンタ10に設定するとともに、戻り先チェック部17を有効化する(S12)。戻り先アドレス「0xFFF5」は、改ざんされたアドレスであって、ライブラリ「lib_b」py−12内の命令(ラベル)「LABEL_NON_RET」を示す。
次に、命令フェッチ部12は、命令(ラベル)「LABEL_NON_RET」を取得し、命令デコード部13に出力する。命令デコード部13は、命令(ラベル)「LABEL_NON_RET」をデコードし(S13)、戻り先チェック部17が有効化されているか否かを判定する(S14)。
工程S12により、戻り先チェック部17が有効化されている(S14のYes)。したがって、命令デコード部13は、戻り先チェック部17を無効化するとともに(S15)、取得した命令(ラベル)「LABEL_NON_RET」が戻り先ラベルを有するか否かを判定する(S16)。図9の例では、戻り先ラベルを有するため(S16のYes)、戻り先ラベル検証部18は、取得した命令(ラベル)「LABEL_NON_RET」が、適切なラベル「LABEL_RET」と一致するか否かを判定する(S17、S18)。取得した命令(ラベル)「LABEL_NON_RET」が適切なラベルと一致しないため(S18のNo)、戻り先ラベル検証部18は、例外割り込みを発生させる(S19)。
図7〜図9に示すように、第1の実施の形態における情報処理装置100は、リターン命令の戻り先アドレスを判定することによって、ROP攻撃を検出することができる。そして、情報処理装置100は、ROP攻撃を検出した場合に、例外割り込みを発生させることで、命令実行処理を停止することができる。また、第1の実施の形態によると、情報処理装置100に対するハードウェアの変更箇所は、極めて少ない。したがって、少ないハードウェアの変更により、効率的にROP攻撃を検出し、回避することが可能になる。
また、前述したとおり、第1の実施の形態における情報処理装置100は、攻撃者がガジェットgaとして使用可能な命令列を大幅に限定することができる。したがって、仮に、ROPの攻撃者が、図5に示した情報処理装置100の構成を検知している場合であっても、攻撃者がガジェットgaとして利用する命令列を限定することが可能になる。つまり、攻撃者が、本実施の形態における情報処理装置100の構成を検知したところで、ガジェットgaとして使用可能な命令列は少ない。
したがって、本実施の形態によると、情報処理装置100の構成が攻撃者に検知されている場合であっても、ガジェットgaに基づいて所望のプログラムを構成することを困難にし、ROP攻撃の容易性を低くすることが可能になる。したがって、ROP攻撃の実施を抑制することが可能になる。
[第2の実施の形態]
第2の実施の形態では、第1の実施の形態に加えて、情報処理装置がROP攻撃の検出の対象とするプログラムを限定する。第2の実施の形態では、図3、図4に示したアセンブリコードpx、pyは、リターン命令「return」の代わりに、検証用リターン命令「return_verify」を有する。第2の実施の形態における情報処理装置は、検証用のリターン命令を検出した場合に、戻り先アドレスの判定処理を行う。
より具体的に、第2の実施の形態における情報処理装置200は、リターン命令の処理時に、当該リターン命令が、検証用リターン命令「return_verify」であるか否かを判定する。情報処理装置200は、リターン命令が検証用リターン命令である場合に、第1の実施の形態で説明したように、戻り先アドレスの命令が戻り先ラベルを有するか否かを判定する。
一方、リターン命令が検証用リターン命令ではない場合、情報処理装置200は、戻り先アドレスの命令が戻り先ラベルを有するか否かを判定することなく、戻り先のルーチンの処理を続行する。
これにより、第2の実施の形態の情報処理装置は、一定のプログラムを、ROP攻撃の検出の対象外とすることができる。つまり、一定のプログラムに対する、ROP攻撃の検出処理を省略することが可能になる。これにより、検出処理の対象外とする一定のプログラムへの戻り先ラベルの付加を省略することが可能になる。
図1、図2で前述したとおり、ROPの攻撃者は、カーネル空間で動作するプログラムpaに基づいたガジェットgaを利用する。これにより、カーネル空間で、昇格した権限にしたがって疑似プログラムpb(図1、図2)と同様の処理を実行させ、カーネルを破壊させる。一方、ユーザ空間で動作するプログラムは、ガジェットgaとして利用され難い。したがって、情報処理装置は、ユーザ空間で動作するプログラムのROP攻撃の検出処理を、省略してもよい。
(アセンブリコード)
図10は、第2の実施の形態における、アセンブリコードpzの一例を示す図である。図10に示すアセンブリコードpzは、図1、図2に示したプログラムpaの一例であって、アセンブリコードで記述されたプログラムである。また、図10に示すアセンブリコードpzは、図3に示したアセンブリコードpxに対応する。
図10に示すアセンブリコードpzは、命令51「call lib_b」、命令52「mov G0, 0xffff, ret」、命令53「mov G1, 0xffff」、命令54「mov G2, 0xffff」、命令「…」、命令5n「return_verify」を有する。命令52「mov G0, 0xffff, ret」における値「ret」は、戻り先ラベルである。命令5n「return_verify」に示す、命令「return_verify」は検証用リターン命令である。
図10に示すアセンブリコードpzは、検証用リターン命令「return_verify」を有する。したがって、アセンブリコードpzは、ROP攻撃の検出の対象のプログラムであって、カーネル空間で動作するプログラム(図1)paである。また、第2の実施の形態例において、ユーザ空間で動作するプログラムは、検証用リターン命令「return_verify」、及び、戻り先ラベルを有しない。
(情報処理装置のハードウェア構成)
図11は、第2の実施の形態における情報処理装置のハードウェア構成を示す図である。図11において、図5で示したものと同一のものは、同一の記号で示す。図11に示す情報処理装置200は、図5に示す、第1の実施の形態の情報処理装置100と同様にして、プログラムカウンタ10、命令メモリ11、命令フェッチ部12、命令デコード部13、命令実行部14等を有する。
第2の実施の形態における情報処理装置200は、第1の実施の形態における情報処理装置100と、命令実行部14が異なる。第2の実施の形態の命令実行部14は、さらに、検証リターン命令実行部20を有する。検証リターン命令実行部20は、処理対象のリターン命令が、検証用リターン命令「return_verify」であるか否かを判定する。リターン命令が検証用リターン命令「return_verify」である場合、検証リターン命令実行部20は、戻り先チェック部17を有効化する。また、分岐部19は、スタック領域(図1)30から戻り先アドレスを取り出し、プログラムカウンタ10に設定する。後続の処理は、第1の実施の形態における図6のフローチャート図で説明したとおりである。
一方、リターン命令が通常のリターン命令「return」である場合、検証リターン命令実行部20は、リターン命令による分岐時であっても、戻り先チェック部17を有効化しない。命令実行部14の分岐部19は、リターン命令による分岐時に、スタック領域(図1)30から戻り先アドレスを取り出し、プログラムカウンタ10に設定する。検証リターン命令実行部20は、分岐部19による戻り先チェック部17の有効化を抑止する。
次に、命令フェッチ部12は、プログラムカウンタ10が示す命令を、命令メモリ11から読み出し、命令デコード部13は、命令フェッチ部12によって取得された命令をデコードする(図6のS13)。戻り先チェック部17が無効であるため(S14のNo)、命令デコード部13は、デコードした命令を命令実行部14に出力する。
図10、図11に示すように、第2の実施の形態における情報処理装置200は、検証用リターン命令「return_verify」を設けることによって、一部のプログラムをROP攻撃の検出の対象外とすることができる。
ユーザ空間で動作するプログラムは、様々な作成者によって作成され得る。したがって、すべての作成者に対して、プログラムへの戻り先ラベルの付加を要求することは容易ではない。また、ユーザ空間で動作するプログラムは、様々なコンパイラによって生成され得る。すべてのコンパイラに、図3に示した戻り先ラベルのフィールドの付加機能を追加することも容易ではない。
このように、ユーザ空間で動作するすべてのプログラムに、戻り先ラベルを付加することは容易ではない。情報処理装置100が、戻り先ラベルが付加されていないプログラムを実行した場合、リターン命令の実行時に例外割り込みが発生してしまう。
したがって、第2の実施の形態では、カーネル空間で動作するプログラムのみを対象としてROP攻撃を検出する。即ち、第2の実施の形態では、戻り先ラベルを付加するプログラムを、カーネル空間で動作するプログラムpa(図1)に限定する。これにより、プログラムへの変更範囲が最小限になることから、より効率的に、ROP攻撃を検出することが可能になる。また、本実施の形態における命令実行制御方法を適用することによる、ユーザへの負荷も抑えることが可能になる。
なお、図10では、検証用リターン命令が、命令「return_verify」である場合を例示した。ただし、この例に限定されるものではない。検証用リターン命令は、通常のリターン命令「return」に、所定のパラメータが付加された形態であってもよい。
[他の実施の形態]
第1の実施の形態では、戻り先ラベルが、予め定めた値(「LABEL_RET」)である場合を例示した。ただし、戻り先ラベルは、メインルーチンが呼び出したサブルーチンの種別に応じて値が異なっていてもよい。例えば、図3、図4に示したアセンブリコードpx、pyの戻り先ラベルは、コール命令によって呼び出したサブルーチンに応じて、異なる値を有する。
したがって、戻り先ラベル検証部18は、例えば、戻り先ラベル(コール命令によって呼び出したサブルーチンに応じた値)が、リターン命令が属するサブルーチンに応じたラベル値と一致するか否かを判定する(図6のS18)。
一致する場合(S18のYes)、コール命令によって呼び出したサブルーチンと、リターン命令が属するサブルーチンとが一致することを示し、ルーチン間の遷移が適切であることを示す。ルーチン間の遷移が適切である場合、スタック領域30が改ざんされていないことを示すため、命令デコード部13は、デコードした命令を命令実行部14に出力する。
一方、一致しない場合(S18のNo)、コール命令によって呼び出したサブルーチンと、リターン命令が属するサブルーチンとが異なることを示し、ルーチン間の遷移が不正であることを示す。ルーチン間の遷移が不正である場合、スタック領域30が改ざんされていることを示すため、戻り先ラベル検証部18は、例外割り込みを発生させる。
このように、他の実施の形態によると、戻り先ラベルの値に基づいて、ルーチン間の遷移が適切か否かを判定可能になる。これにより、スタック領域30の改ざんを検出可能になる。したがって、ROPの攻撃者が、仮に、第1、第2の実施の形態における情報処理装置100、200の構成を検知している場合であっても、ROP攻撃の容易性をより低くすることができ、ROP攻撃の実施を抑制することが可能になる。
以上の実施の形態をまとめると、次の付記のとおりである。
(付記1)
コール命令を含む第1の命令群と、リターン命令を含む第2の命令群とを記憶する記憶部と、
前記第1の命令群から前記コール命令によって呼び出された前記第2の命令群の実行時に、前記第2の命令群の前記リターン命令による、前記第1の命令群への戻り先アドレスの命令が識別情報を有するか否かを判定し、前記識別情報を有する場合に、前記第1の命令群の処理を続行し、前記識別情報を有しない場合に、命令実行処理を停止する処理部、とを有する、
命令実行制御装置。
(付記2)
付記1において、
前記処理部は、前記戻り先アドレスの命令に前記識別情報が付加されているか否かに基づいて、前記戻り先アドレスの命令が前記識別情報を有するか否かを判定する、
命令実行制御装置。
(付記3)
付記1において、
前記処理部は、前記戻り先アドレスの命令が前記識別情報であるか否かに基づいて、前記戻り先アドレスの命令が前記識別情報を有するか否かを判定する、
命令実行制御装置。
(付記4)
付記1乃至3のいずれかにおいて、
前記処理部は、さらに、前記戻り先アドレスの命令が前記識別情報を有する場合に前記識別情報が所定の情報であるか否かを判定し、前記識別情報が前記所定の情報である場合、前記第1の命令群の処理を続行し、前記所定の情報ではない場合、前記命令実行処理を停止する、
命令実行制御装置。
(付記5)
付記1乃至4のいずれかにおいて、
前記処理部は、さらに、前記第2の命令群の前記リターン命令が検証用のリターン命令であるか否かを判定し、前記検証用のリターン命令である場合に、前記戻り先アドレスの命令が前記識別情報を有するか否かを判定し、前記検証用のリターン命令ではない場合に、前記戻り先アドレスの命令が前記識別情報を有するか否かを判定せず前記第1の命令群の処理を続行する、
命令実行制御装置。
(付記6)
付記1乃至5のいずれかにおいて、
前記処理部は、前記識別情報を有しない場合に、例外割り込みを発生させる、
命令実行制御装置。
(付記7)
付記1乃至6のいずれかにおいて、
前記記憶部はスタック領域を含み、
前記処理部は、前記第2の命令群の前記リターン命令による前記第1の命令群への戻り先アドレスを前記スタック領域から取得し、前記戻り先アドレスの命令が前記識別情報を有するか否かを判定する、
命令実行制御装置。
(付記8)
付記1乃至7のいずれかにおいて、
前記処理部は、
判定部を含み命令をデコードする命令デコード部と、分岐部を含み前記命令を実行する命令実行部とを有し、
前記分岐部は、前記命令実行部による前記第2の命令群の前記リターン命令の実行時に、前記戻り先アドレスの命令の判定を前記判定部に指示し、
前記判定部は、前記命令デコード部がデコードした前記戻り先アドレスの命令が、前記識別情報を有するか否かを判定する、
命令実行制御装置。
(付記9)
第1の命令群のコール命令によって呼び出された、リターン命令を含む前記第2の命令群の実行時に、前記第2の命令群の前記リターン命令による、前記第1の命令群への戻り先アドレスの命令が識別情報を有するか否かを判定し、
前記識別情報を有する場合に、前記第1の命令群の処理を続行し、前記識別情報を有しない場合に、命令実行処理を停止する、
命令実行制御方法。
(付記10)
付記9において、
前記判定は、前記戻り先アドレスの命令に前記識別情報が付加されているか否かに基づいて、前記戻り先アドレスの命令が前記識別情報を有するか否かを判定する、
命令実行制御方法。
(付記11)
付記9において、
前記判定は、前記戻り先アドレスの命令が前記識別情報であるか否かに基づいて、前記戻り先アドレスの命令が前記識別情報を有するか否かを判定する、
命令実行制御方法。
(付記12)
付記9乃至11のいずれかにおいて、
前記判定は、さらに、前記戻り先アドレスの命令が前記識別情報を有する場合に前記識別情報が所定の情報であるか否かを判定し、
前記停止は、前記識別情報が前記所定の情報である場合に前記第1の命令群の処理を続行し、前記所定の情報ではない場合に前記命令実行処理を停止する、
命令実行制御方法。
(付記13)
付記9乃至12のいずれかにおいて、
前記判定は、さらに、前記第2の命令群の前記リターン命令が検証用のリターン命令であるか否かを判定し、前記検証用のリターン命令である場合に、前記戻り先アドレスの命令が前記識別情報を有するか否かを判定し、前記検証用のリターン命令ではない場合に、前記戻り先アドレスの命令が前記識別情報を有するか否かを判定せず前記第1の命令群の処理を続行する、
命令実行制御方法。
(付記14)
付記9乃至13のいずれかにおいて、
前記停止は、前記識別情報を有しない場合に、例外割り込みを発生させる、
命令実行制御方法。
(付記15)
付記9乃至14のいずれかにおいて、
前記判定は、前記第2の命令群の前記リターン命令による前記第1の命令群への戻り先アドレスをスタック領域から取得し、前記戻り先アドレスの命令が前記識別情報を有するか否かを判定する、
命令実行制御方法。
100:情報処理装置、10プログラムカウンタ、11:命令メモリ、12:命令フェッチ部、13:命令デコード部、14:命令実行部

Claims (7)

  1. コール命令を含む第1の命令群と、リターン命令を含む第2の命令群とを記憶する記憶部と、
    前記第1の命令群から前記コール命令によって呼び出された前記第2の命令群の実行時に、前記第2の命令群の前記リターン命令による、前記第1の命令群への戻り先アドレスの命令が識別情報を有するか否かを判定し、前記識別情報を有する場合に、前記第1の命令群の処理を続行し、前記識別情報を有しない場合に、命令実行処理を停止する処理部、とを有する、
    命令実行制御装置。
  2. 請求項1において、
    前記処理部は、前記戻り先アドレスの命令に前記識別情報が付加されているか否かに基づいて、前記戻り先アドレスの命令が前記識別情報を有するか否かを判定する、
    命令実行制御装置。
  3. 請求項1において、
    前記処理部は、前記戻り先アドレスの命令が前記識別情報であるか否かに基づいて、前記戻り先アドレスの命令が前記識別情報を有するか否かを判定する、
    命令実行制御装置。
  4. 請求項1乃至3のいずれかにおいて、
    前記処理部は、さらに、前記戻り先アドレスの命令が前記識別情報を有する場合に前記識別情報が所定の情報であるか否かを判定し、前記識別情報が前記所定の情報である場合、前記第1の命令群の処理を続行し、前記所定の情報ではない場合、前記命令実行処理を停止する、
    命令実行制御装置。
  5. 請求項1乃至4のいずれかにおいて、
    前記処理部は、さらに、前記第2の命令群の前記リターン命令が検証用のリターン命令であるか否かを判定し、前記検証用のリターン命令である場合に、前記戻り先アドレスの命令が前記識別情報を有するか否かを判定し、前記検証用のリターン命令ではない場合に、前記戻り先アドレスの命令が前記識別情報を有するか否かを判定せず前記第1の命令群の処理を続行する、
    命令実行制御装置。
  6. 請求項1乃至5のいずれかにおいて、
    前記処理部は、
    判定部を含み命令をデコードする命令デコード部と、分岐部を含み前記命令を実行する命令実行部とを有し、
    前記分岐部は、前記命令実行部による前記第2の命令群の前記リターン命令の実行時に、前記戻り先アドレスの命令の判定を前記判定部に指示し、
    前記判定部は、前記命令デコード部がデコードした前記戻り先アドレスの命令が、前記識別情報を有するか否かを判定する、
    命令実行制御装置。
  7. 第1の命令群のコール命令によって呼び出された、リターン命令を含む前記第2の命令群の実行時に、前記第2の命令群の前記リターン命令による、前記第1の命令群への戻り先アドレスの命令が識別情報を有するか否かを判定し、
    前記識別情報を有する場合に、前記第1の命令群の処理を続行し、前記識別情報を有しない場合に、命令実行処理を停止する、
    命令実行制御方法。
JP2014251644A 2014-12-12 2014-12-12 命令実行制御装置、命令実行制御方法 Active JP6435834B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014251644A JP6435834B2 (ja) 2014-12-12 2014-12-12 命令実行制御装置、命令実行制御方法
US14/881,464 US20160171213A1 (en) 2014-12-12 2015-10-13 Apparatus and method for controlling instruction execution to prevent illegal accesses to a computer

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014251644A JP6435834B2 (ja) 2014-12-12 2014-12-12 命令実行制御装置、命令実行制御方法

Publications (2)

Publication Number Publication Date
JP2016115033A true JP2016115033A (ja) 2016-06-23
JP6435834B2 JP6435834B2 (ja) 2018-12-12

Family

ID=56111429

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014251644A Active JP6435834B2 (ja) 2014-12-12 2014-12-12 命令実行制御装置、命令実行制御方法

Country Status (2)

Country Link
US (1) US20160171213A1 (ja)
JP (1) JP6435834B2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180038262A (ko) * 2016-10-06 2018-04-16 명지대학교 산학협력단 데이터 히든 장치 및 이에 있어서 프로그램 구동 방법
KR101851330B1 (ko) * 2016-10-11 2018-04-23 서울대학교산학협력단 코드 재사용 공격 탐지 장치 및 그 방법
JP2019012498A (ja) * 2017-07-03 2019-01-24 株式会社デンソー 電子制御装置
JP6460433B1 (ja) * 2018-08-15 2019-01-30 株式会社Attc 変換装置、変換プログラム、プログラム変換方法

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2554942B (en) * 2016-10-14 2018-11-21 Imagination Tech Ltd Verifying firmware binary images using a hardware design and formal assertions
WO2021148128A1 (en) * 2020-01-24 2021-07-29 Huawei Technologies Co., Ltd. Processing unit for safe execution of machine code

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05216721A (ja) * 1992-02-06 1993-08-27 Nec Corp 電子計算機
US7552477B1 (en) * 2005-02-23 2009-06-23 Symantec Corporation Detecting return-to-LIBC buffer overflows via dynamic disassembly of offsets
JP2011123658A (ja) * 2009-12-10 2011-06-23 Toyota Central R&D Labs Inc ソフトウェア検査装置及びプログラム
US20140096245A1 (en) * 2012-09-28 2014-04-03 Stephen A. Fischer Protection Against Return Oriented Programming Attacks
JP2015191658A (ja) * 2014-03-28 2015-11-02 インテル・コーポレーション プロシージャからの複数のリターンターゲット制限リターン命令、プロセッサ、方法、およびシステム

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7607122B2 (en) * 2005-06-17 2009-10-20 Microsoft Corporation Post build process to record stack and call tree information
US7581089B1 (en) * 2006-04-20 2009-08-25 The United States Of America As Represented By The Director Of The National Security Agency Method of protecting a computer stack
KR101445634B1 (ko) * 2014-01-27 2014-10-06 주식회사 이글루시큐리티 프로그램의 취약점을 이용한 공격의 탐지 장치 및 방법
US9767272B2 (en) * 2014-10-20 2017-09-19 Intel Corporation Attack Protection for valid gadget control transfers
US9646154B2 (en) * 2014-12-12 2017-05-09 Microsoft Technology Licensing, Llc Return oriented programming (ROP) attack protection
US10867031B2 (en) * 2015-07-23 2020-12-15 Apple Inc. Marking valid return targets

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05216721A (ja) * 1992-02-06 1993-08-27 Nec Corp 電子計算機
US7552477B1 (en) * 2005-02-23 2009-06-23 Symantec Corporation Detecting return-to-LIBC buffer overflows via dynamic disassembly of offsets
JP2011123658A (ja) * 2009-12-10 2011-06-23 Toyota Central R&D Labs Inc ソフトウェア検査装置及びプログラム
US20140096245A1 (en) * 2012-09-28 2014-04-03 Stephen A. Fischer Protection Against Return Oriented Programming Attacks
JP2015191658A (ja) * 2014-03-28 2015-11-02 インテル・コーポレーション プロシージャからの複数のリターンターゲット制限リターン命令、プロセッサ、方法、およびシステム

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180038262A (ko) * 2016-10-06 2018-04-16 명지대학교 산학협력단 데이터 히든 장치 및 이에 있어서 프로그램 구동 방법
KR101851330B1 (ko) * 2016-10-11 2018-04-23 서울대학교산학협력단 코드 재사용 공격 탐지 장치 및 그 방법
JP2019012498A (ja) * 2017-07-03 2019-01-24 株式会社デンソー 電子制御装置
JP6460433B1 (ja) * 2018-08-15 2019-01-30 株式会社Attc 変換装置、変換プログラム、プログラム変換方法
JP2020027512A (ja) * 2018-08-15 2020-02-20 株式会社Attc 変換装置、変換プログラム、プログラム変換方法

Also Published As

Publication number Publication date
US20160171213A1 (en) 2016-06-16
JP6435834B2 (ja) 2018-12-12

Similar Documents

Publication Publication Date Title
JP7101761B2 (ja) コール・パス依存認証
JP6435834B2 (ja) 命令実行制御装置、命令実行制御方法
AU2014348812B2 (en) Improved control flow integrity system and method
US10223528B2 (en) Technologies for deterministic code flow integrity protection
US20180211046A1 (en) Analysis and control of code flow and data flow
JP6189039B2 (ja) セキュアドメインおよび低セキュアドメインを使用するデータ処理装置および方法
CN107077562B (zh) 用于动态控制代码执行的计算机实现的方法和系统
US10635823B2 (en) Compiling techniques for hardening software programs against branching programming exploits
JP2019502197A (ja) ランタイム生成コードにおける悪意のあるコードの検出のためのシステムおよび方法
JP2022009556A (ja) ソフトウェアコードをセキュアにするための方法
JP2022503899A (ja) スタック・ポインタを検証すること
KR20220108176A (ko) 도메인 전이 디스에이블 구성 파라미터
CN108319850B (zh) 沙箱检测的方法、沙箱系统和沙箱设备
CN110717181B (zh) 基于新型程序依赖图的非控制数据攻击检测方法及装置
US11307856B2 (en) Branch target variant of branch-with-link instruction
US10579457B1 (en) Processor for achieving flow integrity and a method of providing notice of a fault in control flow
Lehniger et al. Combination of ROP Defense Mechanisms for Better Safety and Security in Embedded Systems
Pfeffer et al. Efficient and safe control flow recovery using a restricted intermediate language
US10289808B2 (en) Method and system for secure data processing
US20230418950A1 (en) Methods, Devices, and Systems for Control Flow Integrity
CN114489657A (zh) 用于编译源代码的系统和过程
Gerstmayer et al. Binary protection framework for embedded systems

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171113

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180615

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180731

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180928

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: 20181016

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181029

R150 Certificate of patent or registration of utility model

Ref document number: 6435834

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150