JP2013196512A - 変換装置、変換方法、変換プログラム - Google Patents

変換装置、変換方法、変換プログラム Download PDF

Info

Publication number
JP2013196512A
JP2013196512A JP2012064500A JP2012064500A JP2013196512A JP 2013196512 A JP2013196512 A JP 2013196512A JP 2012064500 A JP2012064500 A JP 2012064500A JP 2012064500 A JP2012064500 A JP 2012064500A JP 2013196512 A JP2013196512 A JP 2013196512A
Authority
JP
Japan
Prior art keywords
address
branch instruction
program
jump destination
instruction
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
JP2012064500A
Other languages
English (en)
Other versions
JP5820754B2 (ja
Inventor
Masanobu Taira
昌展 平
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.)
NTT Data Group Corp
Original Assignee
NTT Data 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 NTT Data Corp filed Critical NTT Data Corp
Priority to JP2012064500A priority Critical patent/JP5820754B2/ja
Publication of JP2013196512A publication Critical patent/JP2013196512A/ja
Application granted granted Critical
Publication of JP5820754B2 publication Critical patent/JP5820754B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

【課題】バッファオーバーフローの発生を防ぐようにプログラムを変換する。
【解決手段】変換装置が、変換対象であるプログラムに含まれる分岐命令のうち、分岐命令に対応する被演算子が示すジャンプ先のアドレスにジャンプすることを示す分岐命令を検出する検出部と、検出部によって検出された分岐命令が含まれるプログラムの箇所に、ジャンプ先のアドレスが予め定められたアドレスであるか否かを判定し、ジャンプ先のアドレスが予め定められたアドレスであれば分岐命令を実行し、ジャンプ先のアドレスが予め定められたアドレスでなければ分岐命令を実行しない処理を示す命令文を挿入する命令文挿入部と、を備える。
【選択図】図1

Description

本発明は、バッファオーバーフローに対するセキュリティ技術に関する。
コンピュータ上でプログラムが動作する際には、実行開始時にそのプログラムを実行するためのメモリ空間が確保される。このメモリ空間には、外部から入力されるデータを一時的に格納するための特別なメモリ領域が存在する。このメモリ領域はスタックやヒープという名称で呼ばれている。このメモリ領域を超えたデータがプログラムに対して入力され、そのメモリ領域に対して、プログラムが予め想定した範囲を超えてデータが記憶されることにより不正な動作を起こすバッファオーバーフローが知られている。バッファオーバーフローは、プログラムが実行を制御するために管理している特殊なアドレス自体を外部から上書きし、その書き換えられたアドレスが、同様に外部から入力された不正な動作を起こすデータを指し示すことにより発生する。すなわち、バッファオーバーフローは、プログラムの逐次実行では発生せず、必ず分岐命令に伴って発生する。このようなバッファオーバーフローが起きると、攻撃者によって用意された不正なプログラムがコンピュータ上で実行されたり、これによりコンピュータが乗っ取られたりすることがある。特許文献1には、ソースプログラムを解析し、このようなバッファオーバーフローの原因と考えられる箇所を検出することが記載されている。特許文献2には、バッファオーバーフローによる攻撃が発生した際に、バッファオーバーフローの原因と考えられる箇所を検出することが記載されている。
特開2006−31363号公報 特開2006−53760号公報
しかしながら、攻撃が発生した後にバッファオーバーフローの原因と考えられる箇所を検出する方法では、事後的な解決ができるとしても、未知の脆弱性を突かれる新たな攻撃を防ぐことはできない。ソースプログラムにおいてバッファオーバーフローの原因と考えられる箇所を検出する方法では、一般的に容易とはいえない脆弱性の回避方法をソースコードレベルで熟知していなければ適切な対策ができないこと等から、効率良く運用することは困難であった。そこで、より簡単に、より確実にバッファオーバーフローに対するセキュリティ対策を行うことが望ましい。
本発明は、このような状況に鑑みてなされたもので、バッファオーバーフローの発生を防ぐようにプログラムを変換する変換装置、変換方法、変換プログラムを提供する。
上述した課題を解決するために、本発明は、変換対象であるプログラムに含まれる分岐命令のうち、分岐命令に対応する被演算子が示すジャンプ先のアドレスにジャンプすることを示す分岐命令を検出する検出部と、検出部によって検出された分岐命令が含まれるプログラムの箇所に、ジャンプ先のアドレスが予め定められたアドレスであるか否かを判定し、ジャンプ先のアドレスが予め定められたアドレスであれば分岐命令を実行し、ジャンプ先のアドレスが予め定められたアドレスでなければ分岐命令を実行しない処理を示す命令文を挿入する命令文挿入部と、を備えることを特徴とする。
また、本発明は、プログラムに、機械語命令を記憶させるメモリ領域を示すアドレス範囲を記憶部に書き込む処理を示す命令文を挿入するアドレス範囲書き込み命令文挿入部を備え、命令文挿入部は、検出部によって検出された分岐命令が含まれるプログラムの箇所に、被演算子が示すアドレスが記憶部に書き込まれたアドレス範囲内であるか否かを判定し、被演算子が示すアドレスが記憶部に書き込まれたアドレス範囲内であれば分岐命令を実行し、被演算子が示すアドレスが記憶部に書き込まれたアドレス範囲内でなければ分岐命令を実行しない処理を示す命令文を挿入することを特徴とする。
また、本発明は、命令文挿入部は、検出部が検出した分岐命令が含まれるプログラムの箇所に、検出部によって検出された分岐命令の被演算子が、共有ライブラリに含まれる関数を示すか否かを判定し、被演算子が、共有ライブラリに含まれる関数であれば分岐命令を実行し、被演算子が、共有ライブラリに含まれる関数でなければ分岐命令を実行しない処理を示す命令文を挿入することを特徴とする。
また、本発明は、プログラムは、アセンブリプログラムであることを特徴とする。
また、本発明は、変換対象であるプログラムに含まれる分岐命令のうち、分岐命令に対応する被演算子が示すジャンプ先のアドレスにジャンプすることを示す分岐命令を検出するステップと、検出した分岐命令が含まれるプログラムの箇所に、ジャンプ先のアドレスが予め定められたアドレスであるか否かを判定し、ジャンプ先のアドレスが予め定められたアドレスであれば分岐命令を実行し、ジャンプ先のアドレスが予め定められたアドレスでなければ分岐命令を実行しない処理を示す命令文を挿入するステップと、を備えることを特徴とする変換方法である。
また、本発明は、コンピュータに、変換対象であるプログラムに含まれる分岐命令のうち、分岐命令に対応する被演算子が示すジャンプ先のアドレスにジャンプすることを示す分岐命令を検出するステップと、検出した分岐命令が含まれるプログラムの箇所に、ジャンプ先のアドレスが予め定められたアドレスであるか否かを判定し、ジャンプ先のアドレスが予め定められたアドレスであれば分岐命令を実行し、ジャンプ先のアドレスが予め定められたアドレスでなければ分岐命令を実行しない処理を示す命令文を挿入するステップと、を実行させる変換プログラムである。
以上説明したように、本発明によれば、変換装置が、変換対象であるプログラムに含まれる分岐命令のうち、分岐命令に対応する被演算子が示すジャンプ先のアドレスにジャンプすることを示す分岐命令を検出する検出部と、検出部によって検出された分岐命令が含まれるプログラムの箇所に、ジャンプ先のアドレスが予め定められたアドレスであるか否かを判定し、ジャンプ先のアドレスが予め定められたアドレスであれば分岐命令を実行し、ジャンプ先のアドレスが予め定められたアドレスでなければ分岐命令を実行しない処理を示す命令文を挿入する命令文挿入部と、を備えるようにしたので、バッファオーバーフローの発生を防ぐようにプログラムを変換することができる。
本発明の一実施形態による変換装置の構成例を示すブロック図である。 本発明の一実施形態によるオブジェクトプログラムがコンピュータ上で動作する際にメモリ上に確保される領域の例を示す図である。 本発明の一実施形態によるオブジェクトプログラムに含まれるシンボルテーブルのデータ例を示す図である。 本発明の一実施形態による本実施形態による変換装置の動作例を示すフローチャートである。 本発明の一実施形態によるコンピュータにおいてオブジェクトプログラムが実行される際のデータの流れを示す図である。 本発明の一実施形態によって生成されたオブジェクトプログラムをコンピュータが実行する際の動作例を示すフローチャートである。
以下、本発明の一実施形態について、図面を参照して説明する。
図1は、本実施形態による変換装置100の構成を示すブロック図である。変換装置100は、記憶部110と、コンパイラ120と、プリアセンブラ130と、アセンブラ140とを備えたコンピュータ装置である。変換装置100は、ソースプログラムをコンパイルしてアセンブリプログラムを生成し、アセンブリプログラムを変換して機械語(マシンコード)によるオブジェクトプログラムを生成する。ここでは、ソースプログラムはC言語で記述されたプログラムであるとして説明する。
ここで、オブジェクトプログラムがコンピュータ上で動作する際のメモリ操作について説明し、バッファオーバーフローの根本的な発生原因について説明する。図2は、一般的なオブジェクトプログラムがコンピュータ上で動作する際にメモリ上に確保される領域の例を示す図である。ここでは、「0x00000000」から「0xFFFFFFFF」までのアドレスをもつ2GBのメモリ上におけるアドレス空間の例を示している。メモリ上には、符号aに示すカーネルモードのアドレス空間と、符号bに示すスタックセグメントと、符号cに示す共有ライブラリと、符号dに示すヒープセグメントと、符号eに示すデータセグメントと、符号fに示すテキストセグメントとのメモリ領域が確保される。
スタックセグメントには、自動変数等のデータが記憶される。記憶されるデータ量が予め割り当てられたメモリ領域よりも多くなると、アドレスが小さくなる方向に向かってスタックセグメントが拡張される。スタックセグメントには、プログラムに対する動的な入力値や、プログラムにおける子関数からのリターンアドレスが記憶される。
共有ライブラリには、プログラムの実行時に複数の関数から共有して利用されるユーザ独自の関数を実行するプログラム等が記憶される。
ヒープセグメントには、動的にメモリを割り付けることで動的変数を記憶することができ、アドレスが大きくなる方向に向かって領域が拡張される。
データセグメントには、静的変数、大域変数等のデータが記憶される。例えば、初期化なし静的変数であるBSS(block started by symbol)や、初期化あり静的変数であるデータ等が記憶される。
テキストセグメントには、機械語命令等が記憶される。
上述のように、プログラムにおける子関数からのリターンアドレスはスタックセグメントに記憶される。ここで、スタックセグメントは入力されるデータ量に応じて拡張される。このため、定められたデータ量を超えてデータが入力されると、入力されたデータによってリターンアドレスが上書きされることがある(バッファオーバーフロー)。そこで、攻撃対象のプログラムに対して大量のデータとともに不正なプログラムを入力してスタック上に記憶させておき、リターンアドレスを不正なプログラムが記憶されたアドレスに書き換えると、リターンアドレスに命令がジャンプした際に不正なプログラムが実行されることになる。
このように、バッファオーバーフローによる攻撃は、命令がジャンプした際のジャンプ先のアドレスが、本来プログラムが記憶されている領域ではないスタックセグメント等の領域内である場合に起きる。すなわち、本来プログラムが記憶されている領域は共有ライブラリとテキストセグメントとのいずれかであるため、命令がジャンプした際のジャンプ先のアドレスが、このいずれでもない場合には、不正な動作であると推定できる。そこで、本実施形態では、ソースプログラムをコンパイルして生成されたアセンブリプログラムを解析し、分岐命令のジャンプ先のアドレスが共有ライブラリとテキストセグメントとのいずれでもない場合にはプログラムの実行を強制終了させる命令文を挿入する。これにより、アセンブリプログラムをセキュアなアセンブリプログラムに変換する。このように変換したセキュアアセンブリプログラムをアセンブラにより機械語に変換し、オブジェクトプログラムを生成する。このようにして生成されたオブジェクトプログラムは、バッファオーバーフローによる攻撃を受けた際にはプログラムの実行を強制終了するため、不正なプログラムを実行することがない。以下、このようにアセンブリプログラムをセキュアアセンブリプログラムに変換する実施形態について、詳細に説明する。
図1に戻り、記憶部110には、ソースプログラムをオブジェクトプログラムに変換するために使用するデータが記憶される。例えば、記憶部110には、ソースプログラム(符号a)、アセンブリプログラム(符号b)、セキュアアセンブリプログラム(符号c)、オブジェクトプログラム(符号d)等が記憶される。ここでは、ソースプログラムは予め記憶されているものとし、ソースプログラムに基づいて他のプログラムが生成され、記憶される。
コンパイラ120は、記憶部110に記憶されているソースプログラムを読み出し、読み出したソースプログラムに基づいてアセンブリプログラムを生成し、生成したアセンブリプログラムを記憶部110に記憶させる。アセンブリプログラムは、アセンブリ言語で書かれたプログラムである。
プリアセンブラ130は、コンパイラ120によって生成されて記憶部110に記憶されたアセンブリプログラムを読み出して変換し、セキュアアセンブリプログラムを生成して記憶部110に記憶させる。プリアセンブラ130は、アドレス範囲書き込み命令文挿入部131と、検出部132と、命令文挿入部133とを備えている。
アドレス範囲書き込み命令文挿入部131は、変換対象であるアセンブリプログラムに、機械語がテキストセグメントとして配置されるアドレス範囲を、記憶部である汎用レジスタに書き込む処理を示す第1の命令文を挿入する。具体的には、アドレス範囲書き込み命令文挿入部131は、図2において、符号Aと符号Bとによって示されるような、テキストセグメントにおいて機械語が記憶されたアドレス範囲の上限値のアドレスと下限値のアドレスとを、汎用レジスタに書き込むための第1の命令文を自身の記憶領域に予め記憶しておき、アセンブリプログラムの冒頭部分に挿入する。このようなテキストセグメントのアドレス範囲は、プログラム実行開始時に決定される。ここで、機械語が記憶されたアドレス範囲の上限値のアドレスと下限値のアドレスは、例えばUNIX(登録商標)オペレーティングシステムの場合は、プロセス毎に存在するmm−struct構造体に格納されている。
検出部132は、変換対象であるアセンブリプログラムに含まれる分岐命令のうち、その分岐命令に対応する被演算子(オペランド)が示すジャンプ先のアドレスにジャンプすることを示す分岐命令を検出する。例えば、検出部132は、記憶部110に記憶されているアセンブリプログラムに含まれる命令文を一行ずつ読み出す。そして、読み出した命令文が予め定められた分岐命令であるか否かを判定する。予め定められた分岐命令とは、例えば、「JMP」、「JCXZ」、「JECXZ」、「LOOP」、「CALL」、「RET」等の分岐命令であり、検出部132は、このような分岐命令を予め自身の記憶領域に記憶しておく。このような分岐命令は、被演算子が対応付けられ、その被演算子が示すジャンプ先のアドレスにジャンプすることを示す命令文である。
命令文挿入部133は、検出部132によって検出された分岐命令が含まれるプログラムの箇所に、ジャンプ先のアドレスが予め定められたアドレスであるか否かを判定し、そのジャンプ先のアドレスが予め定められたアドレスであればその分岐命令を実行し、そのジャンプ先のアドレスが予め定められたアドレスでなければその分岐命令を実行しない処理を示す命令文を挿入する。
ここで、分岐命令に対応する被演算子は、ジャンプ先のアドレスを直接示す値である場合と、共有ライブラリに示される関数を示す文字列によって間接的にジャンプ先のアドレスを示す場合とが存在する。ここで、ジャンプ先のアドレスを直接示す値である場合は、上述のテキストセグメントに記憶されている命令にジャンプする場合である。一方、共有ライブラリに示される関数を示す文字列によって間接的にジャンプ先のアドレスを示す場合は、上述の共有ライブラリに記憶されている関数にジャンプする場合である。そこで、命令文挿入部133は、このようなふたつの場合を判定するふたつの命令文を挿入する。
すなわち、命令文挿入部133は、分岐命令に対応する被演算子が示すアドレスが、上述のアドレス範囲書き込み命令文挿入部131によって挿入された第1の命令文が実行されることによって汎用レジスタに書き込まれたアドレス範囲内であるか否かを判定し、その被演算子が示すアドレスが汎用レジスタに書き込まれたアドレス範囲内であればその分岐命令を実行し、その被演算子が示すアドレスが汎用レジスタに書き込まれたアドレス範囲内でなければその分岐命令を実行しない処理を示す第2の命令文を自身の記憶領域に予め記憶しておく。第2の命令文は、例えば被演算子が示すアドレスをXとし、テキストセグメントのアドレス範囲の上限値をAとし、下限値をBとすると、「CMP A<X」と「CMP B>X」とのような命令文である。命令文挿入部133は、この第2の命令文を、検出部132によって検出された分岐命令が含まれるプログラムの箇所に挿入する。ここで、命令文挿入部133が第2の命令文を挿入する箇所は、例えば検出部132によって検出された分岐命令の直前である。
また、命令文挿入部133は、分岐命令に対応する被演算子が、共有ライブラリに含まれる関数を示すか否かを判定し、その被演算子が、共有ライブラリに含まれる関数であればその分岐命令を実行し、その被演算子が、共有ライブラリに含まれる関数でなければその分岐命令を実行しない処理を示す第3の命令文を自身の記憶領域に予め記憶しておく。ここで、分岐命令に対応する被演算子が共有ライブラリに含まれる関数を示すか否かは、オブジェクトプログラムに含まれるシンボルテーブルを参照することにより判定できる。図3は、オブジェクトプログラムに含まれるシンボルテーブルのデータ例を示す図である。シンボルテーブルには、シンボル名と、データ型と、アドレスとが対応付けられて記憶される。シンボル名は、対象を示す記号であり、例えばユーザ関数を示す文字列が対応付けられる。データ型は、シンボル名が示す対象のデータ型である。アドレスは、シンボル名が示す対象が記憶されているメモリ上のアドレスである。命令文挿入部133は、このようなシンボルテーブルを参照して、分岐命令に対応する被演算子がシンボルテーブルに含まれるものであるか否かを判定する第3の命令文を、検出部132によって検出された分岐命令が含まれるプログラムの箇所に挿入する。命令文挿入部133が第3の命令文を挿入する箇所は、例えば検出部132によって検出された分岐命令の直前であり、第2の命令文の直後である。
また、命令文挿入部133は、上述の第2の命令文と第3の命令文とを挿入した箇所の直後に、第2の命令文に基づく処理によって被演算子が示すアドレスがテキストセグメント内でないと判定され、かつ第3の命令文に基づく処理によって被演算子が示す関数が共有ライブラリに含まれないと判定された場合に、プログラムの実行を強制終了させる第4の命令文を挿入する。
アセンブラ140は、プリアセンブラ130によって生成されて記憶部110に記憶されたセキュアアセンブリプログラムを読み出し、機械語によるオブジェクトプログラムを生成する。
次に、図面を参照して、本実施形態による変換装置100の動作例を説明する。図4は、本実施形態による変換装置100の動作例を示すフローチャートである。
ここでは、ソースプログラムに基づいてコンパイラ120によってアセンブリプログラムが生成され、記憶部110に記憶されているものとする。プリアセンブラ130は、記憶部110に記憶されている変換対象のアセンブリプログラムを読み出す(ステップS1)。アドレス範囲書き込み命令文挿入部131は、読み出したアセンブリプログラムの冒頭部分に、アドレス範囲書き込み命令文である第1の命令文を挿入する(ステップS2)。
そして、検出部132は、アセンブリプログラムに含まれる命令文を一行ずつ読み出す(ステップS3)。検出部132は、読み出した命令文が定められた分岐命令であるか否かを判定する(ステップS4)。検出部132は、読み出した命令文が定められた分岐命令でないと判定すると(ステップS4:NO)、ステップS7に進む。検出部132が、読み出した命令文が定められた分岐命令であると判定すると(ステップS4:YES)、命令文挿入部133が、その分岐命令に対応する被演算子が示すアドレスはテキストセグメント内であるか否かを判定する第2の命令文を挿入する(ステップS5)。また、命令文挿入部133は、被演算子が示す文字列がシンボルテーブルに含まれるか否かを判定する第3の命令文を挿入する(ステップS6)。さらに、命令文挿入部133は、第2の命令文と第3の命令文との後に第4の命令文を挿入する。プリアセンブラ130が読み出したアセンブリプログラムに含まれる全ての命令文についてステップS3からステップS6の処理を行っていなければ、ステップS7に戻る。アセンブリプログラムに含まれる全ての命令文についてステップS3からステップS6の処理を行うと、命令文挿入部133は、命令文を挿入したセキュアアセンブリプログラムを、記憶部110に記憶させる。アセンブラ140は、記憶部110に記憶されたセキュアアセンブリプログラムに基づいて、オブジェクトプログラムを生成し、記憶部110に記憶させる。
次に、このように生成されたオブジェクトプログラムが実行する際の動作例を説明する。図5は、コンピュータ200においてオブジェクトプログラムが実行される際のデータの流れを示す図である。符号aに示すオブジェクトプログラムが、符号bに示すメモリ上にロードされ実行されると、符号cに示すCPUによって命令が実行され、メモリ上のデータが更新される。例えば、符号dに示す制御ユニットが、メモリ上のテキストセグメントから命令文を読み出し(フェッチ)、読み出した命令文を解析し(デコード)、符号dに示す演算ユニットが、解析された命令を実行する。命令の実行の際には、メモリからデータが読み出されて符号fに示す汎用レジスタに書き込まれ、符号gに示す演算器によって演算される。演算結果は汎用レジスタに書き込まれ、メモリに記憶される。
図6は、本実施形態の変換装置100によって生成されたオブジェクトプログラムをコンピュータ200が実行する際の動作例を示すフローチャートである。
コンピュータ200は、ディスクに記憶されているオブジェクトプログラムをメモリ上に読み出すと、制御ユニットが、オブジェクトプログラムに含まれる第1の命令文に基づく処理を実行し、テキストセグメントのアドレス範囲を示す値を汎用レジスタに書き込む。また、制御ユニットは、オブジェクトプログラムに含まれる命令を読み出し(ステップS11)、読み出す命令が定められた分岐命令でなければ(ステップS12:NO)、プリアセンブラ130によって命令文は挿入されていないため、通常のデコード処理を行い(ステップS16)、演算ユニットが演算する。
制御ユニットが読み出す命令が定められた分岐命令であれば(ステップS12:YES)、プリアセンブラ130によって挿入された第2の命令文に基づいて、被演算子が示すアドレスと汎用レジスタに記憶されたアドレス範囲とを比較することにより、被演算子が示すアドレスがテキストセグメント内か否かを判定する(ステップS13)。被演算子が示すアドレスがテキストセグメント内であると判定すると(ステップS13:YES)、ステップS16に進む。
被演算子が示すアドレスがテキストセグメント内でないと判定すると(ステップS13:NO)、プリアセンブラ130によって挿入された第3の命令文に基づいて、被演算子が示す文字列がシンボルテーブルに含まれるか否かを判定する(ステップS14)。被演算子が示す文字列がシンボルテーブルに含まれると判定すると(ステップS14:YES)、ステップS16に進む。被演算子が示す文字列がシンボルテーブルに含まれないと判定すると(ステップS14:NO)、プリアセンブラ130によって挿入された第4の命令文に基づいて、処理を強制終了する(ステップS15)。
なお、本実施形態では、変換対象のソースプログラムはC言語によって記述されたものである例を示したが、C++等、上述のようにメモリを使用する他の言語によって記述されたものであってもよい。
また、本実施形態では、アドレス範囲書き込み命令文挿入部131が、プリアセンブラの冒頭部分に第1の命令文を挿入する例を示した。ただし、テキストセグメントのアドレス範囲は、分岐命令が実行される前までに汎用レジスタに書き込まれていればよいため、検出部132が最初に検出した分岐命令文の直前に挿入することもできる。
また、本実施形態では、第2の命令文の後に第3の命令文を挿入する例を示したが、第3の命令文の後に第2の命令文を挿入してもよい。また、第2の命令文と第3の命令文とのいずれかのみを挿入することによっても、セキュリティを向上することができる。
また、本実施形態では、アセンブリプログラムに対して、ジャンプ先のアドレスが予め定められたアドレスでなければプログラムの実行を強制終了する第4の命令文を挿入する例を示したが、第4の命令文には、さらにその時点の実行時のメモリ状態やジャンプ先のアドレスの値等をログファイル等に記憶させる処理を含ませることもできる。このようにすれば、どのような攻撃がされたかを事後的に解析することを支援できる。
また、本実施形態において説明したようなプリアセンブラ130の機能は、統合開発環境(IDE:Integrated Development Environment)等の開発ツールにおいてソースプログラムからオブジェクトプログラムを生成する過程に組み込むことにより、従来の開発環境に効率良く利用することができる。
以上説明したように、本実施形態の変換装置100によれば、定められたアドレスに記憶されたアドレスではないアドレスの命令を実行しようとすると処理の実行を強制終了するため、バッファオーバーフローによる攻撃を防ぐことができる。これにより、バッファオーバーフローについて、ソースプログラムのバグの問題として捉えるのではなく、外部から与えられた不正アドレスへのジャンプという本質的な問題として捉え、不正アドレスへのジャンプ時に処理を強制終了させることができる。
なお、本発明における処理部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによりアセンブリプログラムの変換を行ってもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、ホームページ提供環境(あるいは表示環境)を備えたWWWシステムも含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。
100 変換装置
110 記憶部
120 コンパイラ
130 プリアセンブラ
131 アドレス範囲書き込み命令文挿入部
132 検出部
133 命令文挿入部
140 アセンブラ

Claims (6)

  1. 変換対象であるプログラムに含まれる分岐命令のうち、当該分岐命令に対応する被演算子が示すジャンプ先のアドレスにジャンプすることを示す分岐命令を検出する検出部と、
    前記検出部によって検出された分岐命令が含まれる前記プログラムの箇所に、前記ジャンプ先のアドレスが予め定められたアドレスであるか否かを判定し、当該ジャンプ先のアドレスが予め定められたアドレスであれば当該分岐命令を実行し、当該ジャンプ先のアドレスが予め定められたアドレスでなければ当該分岐命令を実行しない処理を示す命令文を挿入する命令文挿入部と、
    を備えることを特徴とする変換装置。
  2. 前記プログラムに、機械語命令を記憶させるメモリ領域を示すアドレス範囲を記憶部に書き込む処理を示す命令文を挿入するアドレス範囲書き込み命令文挿入部を備え、
    前記命令文挿入部は、前記検出部によって検出された分岐命令が含まれる前記プログラムの箇所に、前記被演算子が示すアドレスが前記記憶部に書き込まれたアドレス範囲内であるか否かを判定し、当該被演算子が示すアドレスが前記記憶部に書き込まれたアドレス範囲内であれば当該分岐命令を実行し、当該被演算子が示すアドレスが前記記憶部に書き込まれたアドレス範囲内でなければ当該分岐命令を実行しない処理を示す命令文を挿入する
    ことを特徴とする請求項1に記載の変換装置。
  3. 前記命令文挿入部は、前記検出部が検出した分岐命令が含まれる前記プログラムの箇所に、前記検出部によって検出された分岐命令の被演算子が、共有ライブラリに含まれる関数を示すか否かを判定し、当該被演算子が、共有ライブラリに含まれる関数であれば当該分岐命令を実行し、当該被演算子が、共有ライブラリに含まれる関数でなければ当該分岐命令を実行しない処理を示す命令文を挿入する
    ことを特徴とする請求項1または請求項2に記載の変換装置。
  4. 前記プログラムは、アセンブリプログラムである
    ことを特徴とする請求項1から請求項3までのいずれか1項に記載の変換装置。
  5. 変換対象であるプログラムに含まれる分岐命令のうち、当該分岐命令に対応する被演算子が示すジャンプ先のアドレスにジャンプすることを示す分岐命令を検出するステップと、
    検出した分岐命令が含まれる前記プログラムの箇所に、前記ジャンプ先のアドレスが予め定められたアドレスであるか否かを判定し、当該ジャンプ先のアドレスが予め定められたアドレスであれば当該分岐命令を実行し、当該ジャンプ先のアドレスが予め定められたアドレスでなければ当該分岐命令を実行しない処理を示す命令文を挿入するステップと、
    を備えることを特徴とする変換方法。
  6. コンピュータに、
    変換対象であるプログラムに含まれる分岐命令のうち、当該分岐命令に対応する被演算子が示すジャンプ先のアドレスにジャンプすることを示す分岐命令を検出するステップと、
    検出した分岐命令が含まれる前記プログラムの箇所に、前記ジャンプ先のアドレスが予め定められたアドレスであるか否かを判定し、当該ジャンプ先のアドレスが予め定められたアドレスであれば当該分岐命令を実行し、当該ジャンプ先のアドレスが予め定められたアドレスでなければ当該分岐命令を実行しない処理を示す命令文を挿入するステップと、
    を実行させる変換プログラム。
JP2012064500A 2012-03-21 2012-03-21 変換装置、変換方法、変換プログラム Expired - Fee Related JP5820754B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012064500A JP5820754B2 (ja) 2012-03-21 2012-03-21 変換装置、変換方法、変換プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012064500A JP5820754B2 (ja) 2012-03-21 2012-03-21 変換装置、変換方法、変換プログラム

Publications (2)

Publication Number Publication Date
JP2013196512A true JP2013196512A (ja) 2013-09-30
JP5820754B2 JP5820754B2 (ja) 2015-11-24

Family

ID=49395337

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012064500A Expired - Fee Related JP5820754B2 (ja) 2012-03-21 2012-03-21 変換装置、変換方法、変換プログラム

Country Status (1)

Country Link
JP (1) JP5820754B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015044993A1 (ja) * 2013-09-24 2015-04-02 株式会社 エーティーティーコンサルティング プロセッサ、処理装置、プログラム作成方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006031363A (ja) * 2004-07-15 2006-02-02 Mitsubishi Research Institute Inc バッファオーバーフロー脆弱性検出プログラム及びバッファオーバーフロー脆弱性検出方法
JP2006243833A (ja) * 2005-02-28 2006-09-14 Ntt Docomo Inc プログラム実行装置及びプログラム実行方法
EP2256659A1 (en) * 2009-05-27 2010-12-01 NTT DoCoMo, Inc. Method and apparatus for preventing modification of a program execution flow
JP2011164972A (ja) * 2010-02-10 2011-08-25 Mitsubishi Electric Corp プログラムローダ、データ処理装置、プログラムロード方法及びロードプログラム

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006031363A (ja) * 2004-07-15 2006-02-02 Mitsubishi Research Institute Inc バッファオーバーフロー脆弱性検出プログラム及びバッファオーバーフロー脆弱性検出方法
JP2006243833A (ja) * 2005-02-28 2006-09-14 Ntt Docomo Inc プログラム実行装置及びプログラム実行方法
EP2256659A1 (en) * 2009-05-27 2010-12-01 NTT DoCoMo, Inc. Method and apparatus for preventing modification of a program execution flow
JP2011008778A (ja) * 2009-05-27 2011-01-13 Ntt Docomo Inc プログラム実行フローの修正を防止する方法及び装置
JP2011164972A (ja) * 2010-02-10 2011-08-25 Mitsubishi Electric Corp プログラムローダ、データ処理装置、プログラムロード方法及びロードプログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015044993A1 (ja) * 2013-09-24 2015-04-02 株式会社 エーティーティーコンサルティング プロセッサ、処理装置、プログラム作成方法

Also Published As

Publication number Publication date
JP5820754B2 (ja) 2015-11-24

Similar Documents

Publication Publication Date Title
US10963233B2 (en) Generating and caching software code
US9530006B2 (en) Method and system for performing a memory safety check of a program written in an unmanaged programming language
US10761905B2 (en) Enhanced code callback
US10635823B2 (en) Compiling techniques for hardening software programs against branching programming exploits
US9563424B2 (en) Native code instruction selection
US7730463B2 (en) Efficient generation of SIMD code in presence of multi-threading and other false sharing conditions and in machines having memory protection support
US9900324B1 (en) System to discover and analyze evasive malware
JP2011508317A (ja) コードエラーを減らすためのコントラクトプログラミング
KR20110087193A (ko) 실행 가능 텍스트를 포함하는 문서의 처리 장치 및 방법
JP4927231B1 (ja) プログラム、情報機器、及び不正アクセス検出方法
JP6435834B2 (ja) 命令実行制御装置、命令実行制御方法
JP2005316599A (ja) 割込制御装置
JP5820754B2 (ja) 変換装置、変換方法、変換プログラム
JP5777843B1 (ja) プロセッサ、処理装置、プログラム作成方法
JP2006048186A (ja) 動的コンパイラの生成コードを保護する言語処理系
JP6827244B1 (ja) 監査装置、監査方法、監査プログラムおよび監査システム
JP2012018641A (ja) ソフトウェア開発システム
US20230418950A1 (en) Methods, Devices, and Systems for Control Flow Integrity
JP5003557B2 (ja) 情報処理装置、情報処理方法、及び、情報処理プログラム
Reinders et al. Error Handling
Voorhees et al. Program Design and Security
Goyal et al. Polymorphism and Virtual Functions
Dahlin Software code optimisation

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20130816

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140827

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150526

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150630

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150818

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151005

R150 Certificate of patent or registration of utility model

Ref document number: 5820754

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees