JP5766648B2 - 制御監視装置、制御監視方法及び制御監視プログラム - Google Patents

制御監視装置、制御監視方法及び制御監視プログラム Download PDF

Info

Publication number
JP5766648B2
JP5766648B2 JP2012101753A JP2012101753A JP5766648B2 JP 5766648 B2 JP5766648 B2 JP 5766648B2 JP 2012101753 A JP2012101753 A JP 2012101753A JP 2012101753 A JP2012101753 A JP 2012101753A JP 5766648 B2 JP5766648 B2 JP 5766648B2
Authority
JP
Japan
Prior art keywords
instruction
control
address
value
memory
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
JP2012101753A
Other languages
English (en)
Other versions
JP2013228957A (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.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone 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 Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2012101753A priority Critical patent/JP5766648B2/ja
Publication of JP2013228957A publication Critical patent/JP2013228957A/ja
Application granted granted Critical
Publication of JP5766648B2 publication Critical patent/JP5766648B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)

Description

この発明は、制御監視装置、制御監視方法及び制御監視プログラムに関する。
従来、ソフトウェアに対する攻撃の中でも、メモリ上のコードを指すポインタ(以下、コードポインタと記す)をバッファオーバーフロー攻撃などによって書き換えることにより、攻撃者がプログラムの制御フローを奪取するような攻撃が脅威となっている。このような攻撃は、成功すると標的と同等の権限で攻撃者が自由に命令を実行することが可能となるため、その影響度は高い。このような攻撃を行う際には、攻撃者が用意した命令列をスタックやヒープなどの書き込み可能領域へ挿入してそこへ制御遷移させる方法(コード挿入)と、メモリ上に既に存在する命令列へ制御遷移させる方法(コード再利用) とがある。
最近のハードウェアやOS(Operating System)においては、指定したメモリ領域を実行不可能にさせる機能が備えられており、コード挿入を効果的に防ぐことができるようになっている。しかしながら、コード再利用については、有名なReturn-to-libc 攻撃だけでなく、その一般形であるROP (Return Oriented Programming) 攻撃などに見られるように、現在主流の攻撃方法として未だ多くの攻撃コードで利用されている。このような攻撃を行うためには、再利用の対象となる命令列がメモリ上のどのアドレス(位置)に存在するのかを攻撃者が把握し、それを攻撃コード内で指定することが多くの場合必要となる。
上述したコード再利用による攻撃に対する対策として、これまで様々な技術が提案されているが、例えば、非特許文献1のように、多くの場合、特殊なコンパイラによるソースコードからの再コンパイルが必要であるなど、一般用途で許容できる実用性を有していない。しかしながら、Windows(登録商標)を含む、最近の主要なOSの多くには、ASLR (Address Space Layout Randomization) という実用性に優れた対策技術が導入されている(例えば、非特許文献2)。
ASLRは、プログラムイメージがメモリ上にロードされる先のアドレスをランダマイズする手法であり、その効果としてプログラムイメージ内の各命令が配置されるアドレスが予測できなくなるため、攻撃時に遷移先のアドレスを指定することが困難となる。 さらに、ASLRは、あくまでも配置先を変えているだけであり、プログラムの構造や実行内容については、ASLRを適用しない場合と全く同じものを保持することができるため、再配置されることを意識して開発されたプログラムでさえあれば誤動作の心配が少なく、再コンパイルの必要もないことより実用性に優れている。
D. Williams et al., "Security through Diversity: Leveraging Virtual Machine Technology," IEEE Security and Privacy 7, 2009. MSDN Library, "Windows ISV Software Security Defenses", http://msdn.microsoft.com/en-us/library/bb430720.aspx
しかしながら、上述した従来技術では、アドレスの結びつけを利用した攻撃に対して脆弱性を有していた。例えば、上述した従来技術では、アドレス漏洩を利用した攻撃や、Partial Overwriteと呼ばれる攻撃などに対して脆弱性を有していた。
アドレス漏洩とは、コードポインタの内容が攻撃者に対して明らかになるような欠陥であり、例えば、format string脆弱性が悪用されることによってスタック上に保存された関数の戻り先アドレスが攻撃者に知られてしまうケースなどが該当する。ここで、攻撃者は、実行されているプログラムと同一のプログラムを保持している場合、メモリ上の命令Aのアドレスa が攻撃者へ漏洩すると、同プログラムイメージ上の別の任意の命令Xのメモリ上のアドレスxを、AとXの距離dを用いて「x=a+d」によって計算することが可能となる。これにより、攻撃者は、このプログラムイメージの任意の命令について、攻撃対象システム上でのアドレスを特定することが可能となる。
また、Partial Overwriteとは、アドレスの具体的な値の漏洩を必要とせず、書き換え先がアドレスであることさえ既知であれば実行可能な攻撃である。ASLRでは、メモリ割り当てサイズやページサイズの都合から上位ビットのみがランダマイズされることが一般的である(例えば、Windows7 32bit におけるASLRの実装では、ビット17〜24の8ビットがランダマイズされる仕様となっている)ため、上位ビットがランダマイズされていても、下位ビットのみのアドレスを書き換えることによってアドレスの指定が可能となり、Partial Overwriteは、これを利用した攻撃である。またx86のバイトオーダは、リトルエンディアンであり、メモリ上ではアドレスがバイト単位で下位から順に保存されているため、本攻撃はバッファオーバーフロー攻撃にも容易に適用できる。
ASLRは、プログラムイメージ全体を1つの塊として動かしているために、その中でのアドレスの結びつけを可能としてしまい、その結果、上述したような攻撃が成立することとなる。
そこで、本願に係る技術は、上述した従来技術の問題に鑑みてなされたものであって、アドレスの結びつけを利用した攻撃に対する安全性を向上させることを可能にする制御監視装置、制御監視方法及び制御監視プログラムを提供することを目的とする。
上述した課題を解決し、目的を達成するため、本願に係る制御監視装置は、メモリ上の任意の位置に存在する命令を次に実行する命令として指定する制御遷移の指定先となりうるメモリアドレスを所定の条件に従うように変換する変換部と、前記制御遷移の命令が実行される前に、当該制御遷移によって指定される命令のメモリアドレスが前記所定の条件に従っているか否かを判定し、従っていない場合に、前記制御遷移の命令が不正な命令であると判定する判定部とを備えることを特徴とする。
本願に係る装置は、アドレスの結びつけを利用した攻撃に対する安全性を向上させることを可能にする。
図1は、第1の実施形態に係る制御監視装置の概要を説明するための図である。 図2は、第1の実施形態に係る制御監視装置のモジュール構成要素を示した図である。 図3は、第1の実施形態に係る制御遷移の一例を示す図である。 図4は、第1の実施形態に係る制御監視装置による処理の手順を示すフローチャートである。 図5は、第2の実施形態に係る制御監視装置のモジュール構成要素を示した図である。 図6は、第2の実施形態に係る制御遷移の一例を示す図である。 図7は、第2の実施形態に係る制御監視装置による処理の手順を示すフローチャートである。 図8は、第3の実施形態に係る制御監視プログラムを実行するコンピュータを示す図である。
以下に添付図面を参照して、本願の開示する制御監視装置、制御監視方法及び制御監視プログラムの実施例を詳細に説明する。なお、本願の開示する制御監視装置、制御監視方法及び制御監視プログラムは、以下の実施例により限定されるものではない。
(第1の実施形態)
まず、第1の実施形態に係る制御監視装置の概要について説明する。図1は、第1の実施形態に係る制御監視装置100の概要を説明するための図である。図1に示すように、第1の実施形態に係る制御監視装置100は、OS(Operating System)がインストールされたハードウェア上で防御対象プログラム及び制御監視プログラムが動作する。防御対象プログラムは、攻撃者からの攻撃に対して防御の対象となるプログラムであり、再配置可能である。ここで、再配置とは、プログラムがロードされる位置に応じて、プログラム内に出現するアドレスの値を調整することである。これによりプログラムを任意の位置にロードすることが可能となる。すなわち、防御対象プログラムは、調整対象となるアドレスがプログラム内のどこに存在するかという情報が実行ファイル内に付加されている。
制御監視プログラムは、防御対象プログラムについて、それが実行するすべての命令をフックでき、かつ、そのメモリ空間に自由にアクセスできるプログラムである。そして、制御監視プログラムは、防御対象プログラムにおける制御遷移命令を監視することで、アドレスの結びつけを利用した攻撃に対する安全性を向上させる。なお、制御遷移命令の監視の詳細については、後述する。例えば、制御監視プログラムは、上記の性質を有していれば、VMM(Virtual Machine Monitor)の機能、OSの機能、ローダアプリケーションの機能、ハードウェアの機能、あるいはそれらの組み合わせとしての形態などとして実現できる。なお、上記したフックとは、プログラム中の特定の箇所にユーザが独自の処理を追加することである。
OSは、ハードウェア上で動作する各種アプリケーションに種々のサービスを提供する基本ソフトである。ハードウェアは、物理的な計算機であり、各種演算処理を実行するCPU(Central Processing Unit)や、各種情報を一時記憶するRAM(Random Access Memory)等を有する。なお、本実施形態に係る制御監視装置は、当該分野の技術者によって、以下の説明要綱に基づき適宜変形可能である。従って、本実施形態の説明は、当該分野に対して示される内容として広く理解されるべきであり、発明を限定するものではない。
また、本願の対象は、特定の命令セットアーキテクチャに限定されるものではないが、以下では、IA−32命令セットアーキテクチャを想定する。したがって、以下に記載するCALL命令などの具体的な制御遷移命令は、それぞれのアーキテクチャではそれに対応する制御遷移命令に置き換えることで実現できる。さらにここでは32bitメモリ空間のシステムでの動作を想定するが、これも必ずしもこれに限ったものではなく、例えば64bitメモリ空間でも実施可能である。
図2は、第1の実施形態に係る制御監視装置100のモジュール構成要素を示した図である。制御監視装置100は、図2に示すように、アドレス変換部101、アドレス判定部102、及びアドレス補正部103の三つのモジュールを備える。
アドレス変換部101は、メモリ上の任意の位置に存在する命令を次に実行する命令として指定する制御遷移の指定先となりうるメモリアドレスを所定の条件に従うように変換する。具体的には、アドレス変換部101は、アドレスの所定のビット位置(以下、被計算ビットと記す)の値から所定の計算方法によって計算された値を、そのアドレス自身の別のビット位置(以下、計算結果ビットと記す)の値として保持させるとする条件に基づいて、アドレスを変換する。これにより、プログラムのメモリアドレス空間の一部分は、nを計算結果ビット長として最大2n個の領域(以下、セグメントと記す)に分割され、各アドレスはその被計算ビットから計算された計算結果ビットの値に応じていずれかのセグメントに属することとなる。これにより攻撃者は、この特定の計算方法を把握していない限り、この規則に従ったアドレスを独自に生成することが困難になる。このような仕組みは、例えば、計算方法として他のハッシュ値を容易に推測できないようなハッシュ関数を用い、攻撃者から隠蔽される乱数値を被計算ビット列と共にその入力として与えることにより実現できる。
例えば、アドレス変換部101は、以下の条件に基づいてアドレスを変換する。ここで、各アドレスが「0xKKAXXXXX」で表されるとする。また、被計算ビットをアドレスの下位から「1−20ビット」の計20ビットとして「X‘=XXXXX」で表し、計算結果ビットを下位から「21−24ビット」の計4ビットとして「A」で表し、下位から「25−32ビット」の計8ビットを、本条件では特に利用しない余剰ビット列として「KK」で表す。ここで、20ビット空間から4ビット空間へのハッシュ関数を「Hash()」として、Rを20ビット空間から一様ランダムに選択された乱数としたときに、「A=Hash(R+X’)」を満たすことが正規のアドレスが満たしているべき条件であると定義する。これにより、アドレス変換部101は、プログラムにおける変換後の正規の遷移先アドレスを、Aの値に応じて、「0xKK000000〜0xKK0FFFFF」、「0xKK100000〜0xKK1FFFFF」、・・・、「0xKKF00000〜0xKKFFFFFF」の16個のセグメントのいずれかに振り分けることとなる。
例えば、アドレス変換部101は、「A=Hash(R+X’)=3」を満たすアドレス全体を4つ目のセグメントである「0xKK300000〜0xKK3FFFFF」に振り分ける。なお、ここで用いる被計算ビット列と計算結果ビット列について、ビット長や位置は、利用可能なメモリ空間のサイズ、プログラムのサイズ、及び保証したい安全性のレベルなどを考慮して設定することができる。さらに、どのアドレスがどのセグメントに属するかのパターンは、計算の入力として乱数を与え、それを(例えば、プロセスごとに)変動させることによって変化させることができる。これにより、攻撃者からは、あたかも制御遷移命令の遷移先がランダムに選ばれたセグメントを指しているように見えるため、遷移先として指定したい命令のアドレスがどのセグメントに属するかを指定することが困難になる。
ここで、アドレス変換部101は、上記した条件によるアドレスの変換を、アドレスが生成された直後に実行する。すなわち、アドレス変換部101は、正規のアドレスが攻撃者によって改ざんされる前にアドレスの変換を実行する。ここで、アドレスは、プログラムの実行開始前に生成されるアドレス(以下、初期アドレスと記す)と、プログラムの実行後に生成されるアドレスとがあるため、アドレス変換部101は、この両方のタイミングでアドレスの変換を行う。具体的には、アドレス変換部101は、初期アドレスの変換に関しては、プログラムイメージのロード処理をフックして、再配置情報によって指定されている全てのアドレスを条件に基づき変換する。
また、アドレス変換部101は、実行時に動的に生成されるアドレス、例えば、CALL 命令の実行時にスタックに積まれる戻りアドレスなどについては、CALL命令をフックし、積まれたアドレスを変換して、処理を戻す。
アドレス判定部102は、制御遷移の命令が実行される前に、当該制御遷移によって指定される命令のメモリアドレスが所定の条件に従っているか否かを判定し、従っていない場合に、制御遷移の命令が不正な命令であると判定する。具体的には、アドレス判定部102は、制御遷移命令が実行される直前に遷移先のアドレスをフックして、アドレス変換部101の変換処理と同様に被計算ビットから計算した値を、計算結果ビットと比較することによりアドレスの検証を行う。ここで、被計算ビットと計算結果ビットとが一致した場合、アドレス判定部102は、当該アドレスを正常であると判定する。一方、被計算ビットと計算結果ビットとが一致しなかった場合、アドレス判定部102は、アドレスを不正であると判定する。
例えば、アドレス判定部102は、絶対アドレスを指定した制御遷移命令、すなわち、絶対アドレスを指定したCALL命令、絶対アドレスを指定したJMP命令、およびRET命令をフックして、遷移先アドレスが条件に従っているか否かを検証する。そして、アドレス判定部102は、条件に従っていた場合はプログラムを再開させ、条件に従っていなかった場合は、当該アドレスは攻撃者によって不正に改ざんされたものと判定してプログラムを終了させたり、ログを残しつつ実行は再開させるなどの処置をポリシーに応じて実行する。
アドレス補正部103は、アドレス判定部102によって正常であると判定された遷移先のアドレスの制御遷移命令を実行する場合に、当該遷移先のアドレスを変換前のアドレスに補正する。具体的には、アドレス補正部103は、プログラムを再開する場合、その遷移先アドレスに対して、アドレス変換部101の変換処理の逆変換を行うことにより得られるアドレスへ制御を遷移させ、プログラムを続行させる。これにより、実際にコードが存在するセグメントに遷移させることができる。
図3は、第1の実施形態に係る制御遷移の一例を示す図である。図3においては、図3の(A)が通常の制御遷移を示し、図3の(B)が第1の実施形態に係る制御監視装置100における制御遷移を示す。ここで、図3においては、最小の各矩形がセグメントを示し、ハッチングされたセグメントは実際にコードが存在するセグメントを示す。また、実線の矢印は正常な制御フローを示し、傾いている実線の矢印は、制御遷移命令による実際の制御遷移を示し、点線の矢印は、アドレスによって指定されている制御遷移先を示す。
例えば、通常の制御遷移は、図3の(A)に示すように、アドレスに指定される制御遷移先と実際の制御遷移先とが重なり、1つのセグメント内で遷移される。一方、第1の実施形態に係る制御遷移は、図3の(B)の矢印10及び12に示すように、アドレスによって指定された制御遷移先は、先頭とは異なるセグメントである。ここで、図3の(B)に示すように、アドレスによって指定された制御遷移先のセグメントには、コードが存在していない。しかしながら、第1の実施形態に係る制御監視装置100においては、アドレス補正部103によってアドレスが補正されることで、図3の(B)の矢印11及び13に示すように、実際の制御遷移先がコードが存在するセグメントから飛び出すことはない。
次に、第1の実施形態に係る制御監視装置100による処理の手順について、図4を用いて説明する。図4は、第1の実施形態に係る制御監視装置100による処理の手順を示すフローチャートである。なお、図4における点線の枠内の処理が、アドレス変換部101、アドレス判定部102、及びアドレス補正部103の三つのモジュールによる処理を示す。
図4に示すように、第1の実施形態に係る制御監視装置100においては、プログラムがロードされると(ステップS101)、アドレス変換部101は、ロードされたプログラムの初期アドレスを変換する(ステップS102)。初期アドレスが変換された後、制御監視装置100においては、プログラムが実行開始され(ステップS103)、実行されたプログラムがCALL命令か否かが判定される(ステップS104)。
ここで、実行されたプログラムがCALL命令であった場合には(ステップS104肯定)、アドレス変換部101が戻りアドレスを変換して(ステップS105)、制御監視装置100において、絶対制御遷移命令か否かが判定される(ステップS106)。一方、実行されたプログラムがCALL命令ではなかった場合には(ステップS104否定)、制御監視装置100において、絶対制御遷移命令か否かが判定される(ステップS106)。
そして、ステップS106において、絶対制御遷移命令であった場合には(ステップS106肯定)、アドレス判定部102は、遷移先アドレスを検証して(ステップS107)、不正なアドレスであるか否かを判定する(ステップS108)。ここで、不正なアドレスでない場合には(ステップS108否定)、アドレス補正部103が遷移先アドレスを補正して(ステップS109)、制御監視装置100において命令が実行される(ステップS110)。一方、不正なアドレスである場合には(ステップS108肯定)、制御監視装置100においてプログラムが終了される。
なお、ステップS106において、絶対制御遷移命令ではなかった場合には(ステップS106否定)、制御監視装置100において命令が実行される(ステップS110)。ステップS110における命令の実行後は、次の命令がCALL命令か否かを判定する(ステップS104)、或いは、プログラムが終了される。
なお、図4に示すフローチャートにおいては、ステップS108において、不正なアドレスであると判定された場合に、プログラムを終了する場合について示すが、実施形態はこれに限定されるものではなく、例えば、ログを残しつつ実行は再開させるなどの処置をポリシーに応じて実行する場合であってもよい。
[第1の実施形態の効果]
上述したように、第1の実施形態によれば、アドレス変換部101は、メモリ上の任意の位置に存在する命令を次に実行する命令として指定する制御遷移の指定先となりうるメモリアドレスを所定の条件に従うように変換する。そして、アドレス判定部102は、制御遷移の命令が実行される前に、当該制御遷移によって指定される命令のメモリアドレスが所定の条件に従っているか否かを判定し、従っていない場合に、制御遷移の命令が不正な命令であると判定する。従って、第1の実施形態に係る制御監視装置100は、特定のアドレスが攻撃者に対して漏洩したとしても、結びつけによって別の命令を一意に指定することを困難にすることができ、アドレスの結びつけを利用した攻撃に対する安全性を向上させることを可能にする。さらに、第1の実施形態に係る制御監視装置100は、ASLRと同様に、特定の命令のアドレスを直接指定することを困難にすることも可能である。その結果、第1の実施形態に係る制御監視装置100は、アドレス漏洩を利用した攻撃やPartial Overwrite攻撃を含む、不正な制御遷移に基づいた攻撃を防御することを可能にする。
また、第1の実施形態によれば、アドレス変換部101は、メモリアドレスの第1のビット位置の値から所定の計算により算出された第1の値を、当該メモリアドレスの第2のビット位置の値となるような条件を前記所定の条件として用いる。そして、アドレス判定部102は、制御遷移によって指定される命令のメモリアドレスの第1の値が第2のビット位置の値と一致するか否かを判定し、一致しない場合に、制御遷移の命令が不正な命令であると判定する。従って、第1の実施形態に係る制御監視装置100は、攻撃者が独自にアドレスを生成することを困難にすることを可能にする。
また、第1の実施形態によれば、アドレス補正部103は、アドレス判定部102によって制御遷移によって指定される命令のメモリアドレスの第1の値が第2のビット位置の値と一致すると判定された場合に、当該メモリアドレスをアドレス変換部101による変換前の値に補正する。従って、第1の実施形態に係る制御監視装置100は、正規の制御遷移を確実にコードの存在するセグメントに実行させることを可能にする。
(第2の実施形態)
上述した第1に実施形態においては、遷移先のアドレスを補正することによりコードが存在するセグメントに遷移させる場合について説明した。第2の実施形態では、プログラムイメージをセグメントにコピーすることにより、遷移先のアドレスを補正することなく、コードが存在するセグメントに遷移させる場合について説明する。
図5は、第2の実施形態に係る制御監視装置のモジュール構成要素を示した図である。第2の実施形態に係るモジュール構成要素は、第1の実施形態と比較して、アドレス補正部103がなく、プログラムイメージ複製部104を新たに有する点が異なる。以下、これを中心に説明する。
プログラムイメージ複製部104は、ロードされたプログラムのプログラムイメージを複製して、全てのセグメント上にコピーする。図6は、第2の実施形態に係る制御遷移の一例を示す図である。図6においては、最小の各矩形がセグメントを示し、ハッチングされたセグメントは実際にコードが存在するセグメントを示す。また、実線の矢印は正常な制御フローを示し、傾いている実線の矢印は、制御遷移命令による実際の制御遷移を示し、点線の矢印は、アドレスによって指定されている制御遷移先を示す。
例えば、プログラムイメージ複製部104は、図6に示すように、すべてのセグメントにおいてプログラムイメージをコピーする。これにより、第2の実施形態に係る制御遷移では、遷移先アドレスを補正することなく、コードが存在するセグメントに遷移させることができる。すなわち、図6に示すように、第2の実施形態に係る制御遷移では、遷移先アドレスによって指定された矢印10及び矢印15と、実際の遷移である矢印14及び矢印16とが一致する。このように、第2の実施形態に係る制御遷移は、複数のセグメントを跨いで制御が進むこととなり、遷移先アドレスの逆変換をすることなく制御を続行することができる。
次に、第2の実施形態に係る制御監視装置100による処理の手順について、図7を用いて説明する。図7は、第2の実施形態に係る制御監視装置100による処理の手順を示すフローチャートである。なお、図7における点線の枠内の処理が、アドレス変換部101、アドレス判定部102、及びプログラムイメージ複製部104の三つのモジュールによる処理を示す。
図7に示すように、第2の実施形態に係る制御監視装置100においては、プログラムがロードされると(ステップS201)、プログラムイメージ複製部104は、ロードされたプログラムのプログラムイメージを複製して(ステップS202)、すべてのセグメントにコピーする。そして、アドレス変換部101は、ロードされたプログラムの初期アドレスを変換する(ステップS203)。初期アドレスが変換された後、制御監視装置100においては、プログラムが実行開始され(ステップS204)、実行されたプログラムがCALL命令か否かが判定される(ステップS205)。
ここで、実行されたプログラムがCALL命令であった場合には(ステップS205肯定)、アドレス変換部101が戻りアドレスを変換して(ステップS206)、制御監視装置100において、絶対制御遷移命令か否かが判定される(ステップS207)。一方、実行されたプログラムがCALL命令ではなかった場合には(ステップS205否定)、制御監視装置100において、絶対制御遷移命令か否かが判定される(ステップS207)。
そして、ステップS207において、絶対制御遷移命令であった場合には(ステップS207肯定)、アドレス判定部102は、遷移先アドレスを検証して(ステップS208)、不正なアドレスであるか否かを判定する(ステップS209)。ここで、不正なアドレスでない場合には(ステップS209否定)、制御監視装置100において命令が実行される(ステップS210)。一方、不正なアドレスである場合には(ステップS209肯定)、制御監視装置100においてプログラムが終了される。
なお、ステップS207において、絶対制御遷移命令ではなかった場合には(ステップS207否定)、制御監視装置100において命令が実行される(ステップS210)。ステップS210における命令の実行後は、次の命令がCALL命令か否かを判定する(ステップS205)、或いは、プログラムが終了される。
なお、図7に示すフローチャートにおいては、ステップS209において、不正なアドレスであると判定された場合に、プログラムを終了する場合について示すが、実施形態はこれに限定されるものではなく、例えば、ログを残しつつ実行は再開させるなどの処置をポリシーに応じて実行する場合であってもよい。
[第2の実施形態の効果]
上述した第2の実施形態によれば、プログラムイメージ複製部104は、メモリが所定の領域に分割された分割領域に、メモリ上の任意の位置に存在する命令を複製する。従って、第2の実施形態に係る制御監視装置100は、アドレスを実際にコードが存在するアドレスへ書き換えることなく、制御遷移を実行させることを可能にする。これにより、第2の実施形態に係る制御監視装置100は、プログラムロード時に発生するオーバーヘッドの増加と引き換えに、プログラム実行中のオーバーヘッドを減らすことができ、アプリケーションによっては有益な効果が得られる。
(第3の実施形態)
これまで第1の実施形態及び第2の実施形態について説明したが、本願に係る技術は第1の実施形態及び第2の実施形態に限定されるものではない。すなわち、第1の実施形態及び第2の実施形態は、その他の様々な形態で実施されることが可能であり、種々の省略、置き換え、変更を行うことができる。
上述した第2の実施形態では、全てのセグメントにプログラムイメージをコピーする場合について説明した。第3の実施形態では、仮想メモリにおける複数のセグメントに共通するデータが存在する場合に、物理メモリの消費量を削減する場合について説明する。
プログラムイメージ複製部104は、仮想メモリ空間におけるセグメントに、プログラムイメージを複製した場合に、当該セグメント全てを単一の物理メモリに対応させる。例えば、プログラムイメージ複製部104は、複製が行われるタイミングにおいてmmapやMapViewOfFileなどのAPI(Application Programming Interface)を用いることにより複数の仮想アドレス領域を同じ物理アドレスへ指すようにする。これにより、物理メモリの消費量を抑制することを可能にする。具体的には、プログラムイメージが複製された仮想メモリのセグメントについて、それぞれ消費される物理メモリ量を作成した複製の個数分から複製1つ分まで抑制することができる。
[システム構成等]
例えば、各装置の分散・統合の具体的形態(例えば、図2の形態)は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合することができる。一例を挙げると、アドレス判定部102とアドレス補正部103とを一つの処理部として統合してもよく、一方、アドレス判定部102を、ビットの値を算出する算出部と、ビットの値を比較して判定する判定部とに分散してもよい。
[制御監視プログラム]
上記実施形態で説明した制御監視装置100は、あらかじめ用意されたプログラムをコンピュータで実行することで実現することもできる。そこで、以下では、図1に示した制御監視装置100と同様の機能を実現する制御監視プログラムを実行するコンピュータの一例を説明する。
図8は、第3の実施形態に係る制御監視プログラムを実行するコンピュータ1000を示す図である。図8に示すように、コンピュータ1000は、例えば、メモリ1010と、CPU(Central Processing Unit)1020と、ハードディスクドライブインタフェース1030と、ディスクドライブインタフェース1040と、シリアルポートインタフェース1050と、ビデオアダプタ1060と、ネットワークインタフェース1070とを有する。これらの各部は、バス1080によって接続される。
メモリ1010は、ROM(Read Only Memory)1011およびRAM(Random Access Memory)1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、ハードディスクドライブ1090に接続される。ディスクドライブインタフェース1040は、ディスクドライブ1100に接続される。ディスクドライブ1100には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース1050には、例えば、マウス1110およびキーボード1120が接続される。ビデオアダプタ1060には、例えば、ディスプレイ1130が接続される。
ここで、図8に示すように、ハードディスクドライブ1090は、例えば、OS(Operating System)1091、アプリケーションプログラム1092、プログラムモジュール1093およびプログラムデータ1094を記憶する。本実施形態に係る制御監視プログラムは、例えば、コンピュータ1000によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ1090に記憶される。具体的には、上記実施形態で説明したアドレス変換部101と同様の情報処理を実行する変換手順と、アドレス判定部102と同様の情報処理を実行する判定手順と、アドレス補正部103と同様の情報処理を実行する補正手順とが記述されたプログラムモジュールが、ハードディスクドライブ1090に記憶される。
また、上記実施形態で説明した記憶領域に記憶されるデータのように、制御監視プログラムによる情報処理に用いられるデータは、プログラムデータとして、例えば、ハードディスクドライブ1090に記憶される。そして、CPU1020が、ハードディスクドライブ1090に記憶されたプログラムモジュールやプログラムデータを必要に応じてRAM1012に読み出して、変換手順と、判定手順と、補正手順とを実行する。
なお、制御監視プログラムに係るプログラムモジュールやプログラムデータは、ハードディスクドライブ1090に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ1100等を介してCPU1020によって読み出されてもよい。あるいは、情報送受信プログラムに係るプログラムモジュールやプログラムデータは、LAN(Local Area Network)やWAN(Wide Area Network)等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。
これらの実施例やその変形は、本願に係る技術に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
100 制御監視装置
101 アドレス変換部
102 アドレス判定部
103 アドレス補正部
104 プログラムイメージ複製部

Claims (6)

  1. メモリ上の任意の位置に存在する命令を次に実行する命令として指定する制御遷移の指定先となりうるメモリアドレスの第1のビット位置の値から所定の計算により算出された第1の値を、当該メモリアドレスの第2のビット位置の値となるように変換する変換部と、
    前記制御遷移の命令が実行される前に、当該制御遷移によって指定される命令のメモリアドレスの前記第1の値が前記第2のビット位置の値と一致するか否かを判定し、一致しない場合に、前記制御遷移の命令が不正な命令であると判定する判定部と、
    を備えたことを特徴とする制御監視装置。
  2. 前記判定部によって前記制御遷移によって指定される命令のメモリアドレスの前記第1の値が前記第2のビット位置の値と一致すると判定された場合に、当該メモリアドレスを前記変換部による変換前の値に補正する補正部をさらに備えたことを特徴とする請求項に記載の制御監視装置。
  3. 前記メモリが所定の領域に分割された分割領域に、前記メモリ上の任意の位置に存在する命令を複製する複製部をさらに備えたことを特徴とする請求項1又は2に記載の制御監視装置。
  4. 前記複製部は、仮想メモリにおける前記分割領域に、前記メモリ上の任意の位置に存在する命令を複製した場合に、当該分割領域全てを単一の物理メモリに対応させることを特徴とする請求項に記載の制御監視装置。
  5. メモリ上の任意の位置に存在する命令を次に実行する命令として指定する制御遷移の制御を監視する制御監視装置によって実行される制御監視方法であって、
    前記制御遷移の指定先となりうるメモリアドレスの第1のビット位置の値から所定の計算により算出された第1の値を、当該メモリアドレスの第2のビット位置の値となるように変換する変換工程と、
    前記制御遷移の命令が実行される前に、当該制御遷移によって指定される命令のメモリアドレスの前記第1の値が前記第2のビット位置の値と一致するか否かを判定し、一致しない場合に、前記制御遷移の命令が不正な命令であると判定する判定工程と、
    を含んだことを特徴とする制御監視方法。
  6. メモリ上の任意の位置に存在する命令を次に実行する命令として指定する制御遷移の指定先となりうるメモリアドレスの第1のビット位置の値から所定の計算により算出された第1の値を、当該メモリアドレスの第2のビット位置の値となるように変換する変換手順と、
    前記制御遷移の命令が実行される前に、当該制御遷移によって指定される命令のメモリアドレスの前記第1の値が前記第2のビット位置の値と一致するか否かを判定し、一致しない場合に、前記制御遷移の命令が不正な命令であると判定する判定手順と、
    をコンピュータに実行させることを特徴とする制御監視プログラム。
JP2012101753A 2012-04-26 2012-04-26 制御監視装置、制御監視方法及び制御監視プログラム Active JP5766648B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012101753A JP5766648B2 (ja) 2012-04-26 2012-04-26 制御監視装置、制御監視方法及び制御監視プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012101753A JP5766648B2 (ja) 2012-04-26 2012-04-26 制御監視装置、制御監視方法及び制御監視プログラム

Publications (2)

Publication Number Publication Date
JP2013228957A JP2013228957A (ja) 2013-11-07
JP5766648B2 true JP5766648B2 (ja) 2015-08-19

Family

ID=49676499

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012101753A Active JP5766648B2 (ja) 2012-04-26 2012-04-26 制御監視装置、制御監視方法及び制御監視プログラム

Country Status (1)

Country Link
JP (1) JP5766648B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016056120A1 (ja) * 2014-10-10 2016-04-14 株式会社日立製作所 情報処理装置、及び情報処理方法
KR101851330B1 (ko) 2016-10-11 2018-04-23 서울대학교산학협력단 코드 재사용 공격 탐지 장치 및 그 방법
JP7495371B2 (ja) * 2021-03-29 2024-06-04 株式会社日立製作所 制御装置、不正命令検知方法及びプログラム

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006048257A (ja) * 2004-08-03 2006-02-16 Hitachi Ltd 戻り先を限定するコンパイラ
EP2256659A1 (en) * 2009-05-27 2010-12-01 NTT DoCoMo, Inc. Method and apparatus for preventing modification of a program execution flow

Also Published As

Publication number Publication date
JP2013228957A (ja) 2013-11-07

Similar Documents

Publication Publication Date Title
US11163911B2 (en) Secure public cloud with protected guest-verified host control
US10325118B2 (en) Cryptographic cache lines for a trusted execution environment
Kil et al. Address space layout permutation (ASLP): Towards fine-grained randomization of commodity software
Davi et al. Isomeron: Code Randomization Resilient to (Just-In-Time) Return-Oriented Programming.
CN112149152A (zh) 使用加密的基地址和用于多租户环境的以密码方式的计算
CN112149149A (zh) 基于指针的数据加密
Seshadri et al. Pioneer: verifying code integrity and enforcing untampered code execution on legacy systems
US8904189B1 (en) System and method for validating program execution at run-time using control flow signatures
US9535855B2 (en) Reorganization of virtualized computer programs
Jackson et al. Compiler-generated software diversity
Younan et al. PAriCheck: an efficient pointer arithmetic checker for C programs
US8595510B2 (en) Methods, apparatus and systems to improve security in computer systems
US9165138B2 (en) Mitigation of function pointer overwrite attacks
US9250937B1 (en) Code randomization for just-in-time compilers
Portokalidis et al. Fast and practical instruction-set randomization for commodity systems
US8181035B1 (en) Methods, apparatus and systems to improve security in computer systems
EP4089556A1 (en) Code pointer authentication for hardware flow control
Mashtizadeh et al. Cryptographically enforced control flow integrity
US20120331308A1 (en) Methods, apparatus and systems to improve security in computer systems
JP2015537274A (ja) 低電力状態の間にメモリ領域を保護する方法及び装置
Gens et al. Lazarus: Practical side-channel resilient kernel-space randomization
US11947663B2 (en) Control flow protection based on phantom addressing
JP5766648B2 (ja) 制御監視装置、制御監視方法及び制御監視プログラム
JP6068325B2 (ja) セキュアなアプリケーションの実行を提供するプロセッサ
Ziad et al. Using Name Confusion to Enhance Security

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140711

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150220

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150224

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150414

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150617

R150 Certificate of patent (=grant) or registration of utility model

Ref document number: 5766648

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150