JP4728619B2 - ソフトウェアの改竄検出装置、改竄防止装置、改竄検出方法及び改竄防止方法 - Google Patents

ソフトウェアの改竄検出装置、改竄防止装置、改竄検出方法及び改竄防止方法 Download PDF

Info

Publication number
JP4728619B2
JP4728619B2 JP2004290241A JP2004290241A JP4728619B2 JP 4728619 B2 JP4728619 B2 JP 4728619B2 JP 2004290241 A JP2004290241 A JP 2004290241A JP 2004290241 A JP2004290241 A JP 2004290241A JP 4728619 B2 JP4728619 B2 JP 4728619B2
Authority
JP
Japan
Prior art keywords
storage area
address information
destination address
information
stored
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.)
Expired - Lifetime
Application number
JP2004290241A
Other languages
English (en)
Other versions
JP2006106956A (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.)
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 JP2004290241A priority Critical patent/JP4728619B2/ja
Publication of JP2006106956A publication Critical patent/JP2006106956A/ja
Application granted granted Critical
Publication of JP4728619B2 publication Critical patent/JP4728619B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Landscapes

  • Storage Device Security (AREA)

Description

本発明は、ソフトウェアの改竄検出技術に関し、例えばPC(パーソナル・コンピュータ)等の仕様が公開された計算機システムに用いて好適なものである。
従来、一般的なソフトウェア製品において、プログラムやデータ等の権利保護が必要な場合、プログラムやデータを難読化したり暗号化したりするなどして権利の保護を図っている。しかし、PC環境に見られるように、ユーザーが様々なツールを用いてソフトウェアの改竄を容易に行える環境下では、上述したような権利保護手法は単なる時間稼ぎに過ぎない面がある。例えば、プログラムやデータを暗号化しても、ソフトウェアで復号化することから暗号強度に意味はない。
ソフトウェアの改竄等の不正を検出する、あるいは防止する技術が求められており、ハードウェアを併用した改竄検出手法が有効である。これは、予め用意した正解との比較を行う外部ハードウェアを搭載し、この外部ハードウェアを用いてプログラムやデータ等が改竄されていないか監視する手法である。
また、コンピュータウィルスに対するウィルス診断機能をソフトウェアであるオブジェクトプログラム自身の中に生成し、オブジェクトプログラム自身でウィルス感染によるオブジェクトプログラムの改竄を検出するようにしたものがある(例えば、特許文献1参照。)。
特開平7−146788号公報
しかしながら、上述のようにハードウェアを用いて改竄を防止する場合には、実行時に確定するデータ・コード以外の改竄は検出して防止することができるが、実行時に確定するデータ・コードの改竄は検出及び防止が困難であるという問題があった。言い換えれば、コンパイル時に確定するプログラムコードや固定データ等の静的な記憶領域に対する改竄は容易に防止できるが、実行時(実行開始時や実行中)に作成されるデータ等の動的にデータが変更される記憶領域に対する改竄は防止することが非常に困難であった。
例えば、CPUが実行するプログラムコード列は、ユーザー空間に展開される主プログラム以外に、実行時にリンクされるプログラムコード(ダイナミックリンクライブラリ:DLL)、実行時にスタックやヒープに確保される関数へのポインタ(クラスなどのインスタンスを含む。)、及びデータ領域にある関数ポインタの影響を受けながら順次実行される1次元の列として考えられ、この列から逸脱することはない。
しかし、この列のいかなるところにおいても、プログラムやデータ等の改竄により攻撃者が用意したプログラムコードへ分岐して、攻撃者にとって必要な処理の追加や不要な処理のスキップ(不要な処理を飛ばす)等の処理を行った後、再び正規のルートに戻るといったバイパスを作成することができる。上述したように、ハードウェアを併用することで実行前に確定しているデータ・コード、つまり静的なメモリ領域のデータ・コードは保護することができるが、これだけの保護では十分でない。スタックやヒープに展開される、いわゆるクラスのインスタンス等に含まれる関数へのポインタは実行時に確定するものであり、例えばインスタンスの個数もメモリ位置も動的な記憶領域に記憶されるデータであり外部から簡単に特定できるものではない。そのため、上述した従来の手法でチェックすることは困難であり、仮に行ったとしても非常に効率が悪く、スタックやヒープにおける関数ポインタ等の動的な記憶領域におけるデータを改竄してバイパスされうるおそれがある。
本発明は、このような問題に鑑みてなされたものであり、動的な記憶領域に対する改竄を検出できるようにすることを目的とする。
本発明のソフトウェアの改竄検出装置は、プログラムコードに係る処理の実行前に確定した情報が記憶され当該情報の改竄が定期的に検査される静的記憶領域及び処理の実行に伴って変更される情報が記憶される動的記憶領域を有する記憶手段と、静的記憶領域の範囲を示すアドレス情報を記憶する領域情報記憶手段と、動的記憶領域に記憶された分岐先アドレス情報を参照して、静的記憶領域に記憶された情報に基づく処理を実行する場合に、分岐先アドレス情報が静的記憶領域の範囲内を指定するものであるか否かを判定することで、分岐先アドレス情報が動的記憶領域に挿入されるバイパスコードを実行するためのアドレス情報であるか否かを判定し、動的記憶領域に記憶された復帰先アドレス情報を参照して、静的記憶領域に記憶された情報に基づく処理を実行する場合に、復帰先アドレス情報が静的記憶領域の範囲内を指定するものであるか否かを判定することで、復帰先アドレス情報が動的記憶領域に挿入されるバイパスコードを実行するためのアドレス情報であるか否かを判定し、情報の改竄を検出する検出手段とを備える。
上記構成によれば、分岐処理や復帰処理等の制御処理を行うために参照する動的記憶領域に記憶されている分岐先アドレス情報又は復帰先アドレス情報が静的記憶領域の範囲内を指定するものであるか否かをチェックすることで、動的記憶領域に記憶されている分岐先アドレス情報又は復帰先アドレス情報の改竄を検出可能になる。参照した分岐先アドレス情報又は復帰先アドレス情報が静的記憶領域の範囲内を指定するものでなければ、動的記憶領域に記憶されたアドレス情報に対して改竄が行われたことが検出できる。
本発明によれば、処理の実行に伴って変更され得る情報を記憶する動的記憶領域に記憶された分岐先アドレス情報又は復帰先アドレス情報を参照して、処理の実行前に確定している情報を記憶する静的記憶領域に記憶された情報に基づく処理を実行する場合に、動的記憶領域から参照した分岐先アドレス情報又は復帰先アドレス情報が静的記憶領域の範囲内を指定するものであるか否かを判定することで、分岐先アドレス情報又は復帰先アドレス情報が動的記憶領域に挿入されるバイパスコードを実行するためのアドレス情報であるか否かを判定する。これにより、動的記憶領域から参照した分岐先アドレス情報又は復帰先アドレス情報が静的記憶領域の範囲内を指定するものでない場合には、動的記憶領域に記憶されたアドレス情報に対する改竄が行われたことを検出することができる。したがって、簡単なアドレス情報の比較のみで動的記憶領域に記憶された情報に対する改竄を検出し情報の改竄を防止することが可能となる。
以下、本発明の実施形態を図面に基づいて説明する。
図1は、本発明の実施形態による改竄検出装置を適用した計算機システム100のハードウェア構成例を示すブロック図である。
本実施形態における計算機システム100は、図1に示すように、CPU101と、ROM102と、RAM103と、キーボード(KB)109のキーボードコントローラ(KBC)105と、表示部としてのCRTディスプレイ(CRT)110のCRTコントローラ(CRTC)106と、ハードディスク(HD)111及びフレキシブルディスク(FD)112のディスクコントローラ(DKC)107と、ネットワークインタフェースカード(NIC)108と、改竄検出装置(DTC)114とが、システムバス104を介して互いに通信可能に接続された構成としている。
CPU101は、ROM102あるいはHD111に記憶されたソフトウェア(プログラム)、あるいはFD112より供給されるソフトウェア(プログラム)を実行することで、システムバス104に接続された各構成部を総括的に制御し、実行するソフトウェアに基づく所望の機能を実現する。すなわち、CPU101は、所望の機能を実現するための処理プログラムを、ROM102、あるいはHD111、あるいはFD112から読み出して実行することで、要求される動作を実現するための制御を行う。
RAM103は、CPU101の主メモリあるいはワークエリア等として機能する。RAM103は、後述するようにプログラムコードや固定データが記憶され、かつ改竄検出装置(DTC)114により定期的にデータ改竄の有無が検出される静的な記憶(メモリ)領域と、実行時に確定するデータが記憶される動的な記憶(メモリ)領域とからなる。
KBC105は、KB109や図示していないポインティングデバイス等からの指示入力を制御する。CRTC106は、CRT110の表示を制御する。DKC107は、ブートプログラム、種々のアプリケーション、ユーザファイル、ネットワーク管理プログラム、および処理プログラム等を記憶するHD111およびFD112とのアクセスを制御する。NIC108はネットワーク113上の他の装置と双方向にデータをやりとりするためのものである。
改竄検出装置(DTC)114は、RAM103等においてROM102、HD111、あるいはFD112からロードされたプログラムコードや固定データが記憶される静的な記憶領域(例えば、ユーザプログラム領域)に記憶されたデータを定期的に調べて改竄が行われたか否かを検出する。この改竄検出装置114としては、ハードウェアにより静的な記憶領域を定期的にチェックする公知の改竄検出機構を適用すれば良い。
図2(A)は、図1に示した計算機システムの機能構成例を示すブロック図である。なお、図2(A)においては、計算機システムにて改竄検出を実現するための主要的特徴部のみを図示している。
図2(A)において、処理実行部201は、メモリ202にロードされたプログラムコードを読み出して実行し、所望の動作を実現するための制御等を行う。処理実行部201は、プログラムコードを実行する際、必要に応じてメモリ202に記憶されているデータを参照する。メモリ202は、静的な記憶領域202aと動的な記憶領域202bとからなり、静的な記憶領域202aにはロードされたプログラムコードや当該プログラムコードの実行時に不変の固定データが記憶され、動的な記憶領域202bにはプログラムコードの実行に際して変更されうるデータ(例えば、スタックやヒープにおけるデータ)が記憶される。
第1の改竄検出部203は、図1に示した改竄検出装置114に相当するものであり、ハードウェアにより構成され、メモリ202内の静的な記憶領域202aに記憶されたデータ(プログラムコードを含む。)を定期的に調べて改竄が行われたか否かを検出する。具体的には、第1の改竄検出部203は、静的な記憶領域202aに記憶されたデータが正しいもの(改竄が行われていないもの)であるか否かを判定するための正解データを外部あるいは内部に保持しておき、静的な記憶領域202aに記憶されたデータと正解データとを比較し改竄の有無を判定する。
このようにして、第1の改竄検出部203により定期的なチェックを行い、ユーザプログラム領域等を含むメモリ202内の静的な記憶領域202aに対しては不正を行えないようにしておく。したがって、不正なバイパスコードは、正規の(プログラム)コードが存在するメモリ空間(静的な記憶領域202a)には確保することができない。
なお、第1の改竄検出部203は、判定の結果、静的な記憶領域202aに記憶されたデータが改竄されていると判定した場合には、処理実行部201や外部に通知するようにしても良い。
第2の改竄検出部204は、メモリ202内の動的な記憶領域202bに記憶されたデータに対して改竄が行われたか否かを検出するものであり、アドレス比較部205、判定部206、及び検出情報記憶部207を有する。
アドレス比較部205は、処理実行部201によるプログラムコード実行中の、例えば復帰処理や分岐処理等において、動的な記憶領域202bに記憶されているデータを参照して静的な記憶領域202aに復帰あるいは分岐する際、復帰先あるいは分岐先として指定されるアドレスと静的領域情報記憶部208に記憶されているアドレス情報とを比較する。静的領域情報記憶部208には、メモリ202における静的な記憶領域202aの領域範囲を示すアドレス情報(例えば、領域のスタートアドレスとエンドアドレス)が予め記憶されている。
つまり、アドレス比較部205は、動的な記憶領域202bに記憶されているデータに基づいて処理を行った後、静的な記憶領域202aに記憶されているデータに基づいて処理を行うようにする場合に、静的領域情報記憶部208に記憶されている静的な記憶領域202aの範囲を示すアドレス値と復帰先あるいは分岐先として指定されるアドレスとを比較する。
判定部206は、アドレス比較部205での比較結果に基づいて、動的な記憶領域202bに記憶されているデータに対して改竄等の不正が行われたか否かを判定する。具体的には、判定部206は、アドレス比較部205での比較結果、復帰先あるいは分岐先として指定されるアドレスが静的な記憶領域202aの範囲に含まれない場合には、動的な記憶領域202bのデータに対して改竄が行われたと判定する。
検出情報記憶部207は、判定部206にて動的な記憶領域202bのデータに対して改竄等の不正が行われたと判定した場合に、例えば不正が行われた箇所や不正の内容等の不正に係る情報を記憶する。検出情報記憶部207に記憶した不正に係る情報は、外部から読み出し可能である。したがって、検出情報記憶部207に記憶した不正に係る情報を解析することにより、検出した不正に対する対策を施すことができる。
なお、判定部206にて動的な記憶領域202bのデータに対して改竄等の不正が行われたと判定した場合に直ちに不正に対する対策を施すようにしても良いが、検出情報記憶部207に不正に係る情報を記憶しておき、後から検出した不正に対する対策を施すことにより、どの動作で不正が検出されたかを不正を行ったものに特定されることを防止することができ、より高い改竄防止効果を期待することができる。
なお、図2(A)においては、メモリ202が静的な記憶領域202aと動的な記憶領域202bとからなる、つまり、静的な記憶領域202aと動的な記憶領域202bとのいずれもが連続した1つの領域で構成される場合を一例として示しているが、メモリにおける領域の分割は任意であり、例えば図2(B)に示すように、複数の静的な記憶領域209a、209c、209eと複数の動的な記憶領域209b、209d、209fとにメモリ209が領域分割されていても良い。
図2(B)に示すようにメモリ209の領域を分割した場合には、第1の改竄検出部203により静的な記憶領域209a、209c、209eに対する改竄の有無を検出し、第2の改竄検出部204により動的な記憶領域209b、209d、209fに対する改竄の有無を検出する。このとき、静的領域情報記憶部208には、各静的な記憶領域209a、209c、209eを示すアドレス情報をテーブル等により記憶する。
次に、上述した本実施形態による改竄検出装置を適用した計算機システムの動作を、具定例を挙げて説明する。なお、以下の説明において、「保護された領域」は、第1の改竄検出部203によりデータ(プログラムコードを含む。)が定期的に調べられ改竄の検出が行われるメモリ202内の静的な記憶領域であり、上述したように当該領域内には不正なバイパスコード(不正コード)を確保することはできない。一方、「保護されていない領域」は、第2の改竄検出部203によりデータ改竄の検出が行われるメモリ202内の動的な記憶領域である。
(動作例1)
図3及び図4は、本実施形態における計算機システムの具体的な動作例を説明するための図である。
例えば、図3(A)に示すように、処理Aを実行し(ステップS1)、その後分岐処理1にてポインタ(変数の関数ポインタ、クラスのインスタンス内の仮想関数テーブルへのポインタ)等のアドレス値P1を参照して分岐・制御を行い(ステップS2)、処理Bを実行する(ステップS3)場合を考える。ステップS1〜S3の処理A、分岐処理1、及び処理Bは、保護された領域内のプログラムコード及びデータに基づいて実行される。また、分岐処理1にて参照するアドレス値P1は、プログラムが動作しながら生成される、つまり動的に生成されるものであり、保護されていない領域に記憶されている。
図3(A)に示したような処理を実行させる場合、従来技術によれば、保護されていない領域に挿入した不正コード列C1を読み出すためのアドレス値(不正コード列C1が記憶されているアドレス値)を、分岐処理1にて参照するアドレス値P1に指定し、不正コードC1に処理Bに係る分岐先アドレスを指定することで、図3(B)に示すように処理A→分岐処理1→不正コード→処理Bと処理を実行させ、処理Bの実行前に不正コードC1に応じた処理を実行させることが可能である。
本実施形態における計算機システムでは、図3(A)に示したような処理を処理実行部201にて実行させる場合、図4に示すようにして処理を実行する。
まず、ステップS1にて保護された領域内のプログラムコード及びデータに基づいて処理Aを実行する。
次に、ステップS2での分岐処理1により保護された領域内のコード列から分岐する場合、ステップS2の前段であるステップS1Aにて、第2の改竄検出部204により分岐先を示すアドレス値P1に係る認証を行う。すなわち、ステップS1Aにて、第2の改竄検出部204が分岐先を示すアドレス値P1を評価し、分岐先が保護された領域内であるか否かを判定する。
具体的には、ステップS1Aにて、アドレス比較部205が分岐先のアドレス値P1を参照し、それを静的領域情報記憶部208に記憶された静的な記憶領域202aの範囲を示すアドレス情報と比較する。比較の結果、アドレス値P1が静的な記憶領域202aの範囲内である場合には、判定部206は改竄が行われていないと判定する。一方、アドレス値P1が静的な記憶領域202aの範囲内でない場合には、判定部206はアドレス値P1に対して改竄が行われたと判定し、不正に係る情報を検出情報記憶部207に格納する。
その後、ステップS2での分岐処理1にて、アドレス値P1を参照して分岐処理を実行し、さらに不正コードC1、及びステップS3での処理Bを順次実行する。
(動作例2)
図5及び図6は、本実施形態における計算機システムの他の具体的な動作例を説明するための図である。
図5(A)に示すように、処理Aを実行し(ステップS11)、その後分岐処理1にてアドレス値P11を参照して処理Bに分岐し(ステップS12)、処理Bを実行する(ステップS13)。さらに、処理Bを実行した後、復帰処理1にてアドレス値P12を参照して処理Cに復帰し(ステップS14)、処理Cを実行する(ステップS15)場合を考える。ステップS11〜S15の処理A、分岐処理1、処理B、復帰処理1、及び処理Cは、保護された領域内のプログラムコード及びデータに基づいて実行され、かつ分岐処理1にて参照するアドレス値P11は、保護された領域に記憶される。一方、復帰処理1にて参照するアドレス値P12は、プログラムが動作しながら動的に生成されるものであり、保護されていない領域(スタック)に記憶される。
図5(A)に示したような処理を実行させる場合、従来技術によれば、保護されていない領域に挿入した不正コード列C11が記憶されているアドレス値を、復帰処理1にて参照するアドレス値P12に指定し、不正コードC11に処理Cに係る復帰先アドレスを指定することで、図5(B)に示すように、復帰処理1にて処理Cの実行前に不正コードC11に応じた処理を実行させることが可能である。
本実施形態における計算機システムでは、図5(A)に示したような処理を処理実行部201にて実行させる場合、図6に示すようにして処理を実行する。
まず、ステップS11にて保護された領域内のプログラムコード及びデータに基づいて処理Aを実行する。次に、ステップS12での分岐処理1にて、保護された領域に記憶されているアドレス値P11を参照して分岐処理を実行し、ステップS13にて処理Bを実行する。
続いて、ステップS14での復帰処理1により保護された領域外のアドレス値P12を参照して復帰する場合、ステップS14の前段であるステップS13Aにて、第2の改竄検出部204により復帰先を示すアドレス値P12に係る認証を行う。ステップS13Aでの処理は、上述した図のステップS1Aと同様に、第2の改竄検出部204が復帰先を示すアドレス値P12を評価し、復帰先が保護された領域内であるか否かを判定する。
その後、ステップS14での復帰処理1にて、アドレス値P12を参照して復帰処理を実行し、さらに不正コードC11、及びステップS15での処理Cを順次実行する。
なお、動作例1、2において、保護されていない領域に記憶されているアドレス値に対する改竄を検出したら直ちに不正に対する対策(処理の停止等)を行うようにしても良いが、上述したように参照したアドレス値に従って不正コードC1、C11を実行し、後から検出した不正に対する対策を施すことにより、どの動作で不正が検出されたかを不正を行ったものに特定されることを防止することができ、より高い改竄防止効果を期待することができる。また、動作例1、2においては、分岐処理及び復帰処理を一例として示したが、スタック、ヒープ、コールスタック等の保護されていない領域に記憶された任意の情報を参照して保護された領域に記憶されたプログラムコード及びデータに基づく制御(処理)に移行する任意の処理に適用可能である。
以上、説明したように本実施形態によれば、実行時には既に確定しているプログラムコードや固定データが記憶されるメモリ202内の静的な記憶領域(保護された領域)202aについては第1の改竄検出部203が定期的に改竄の有無をチェックする。また、スタックやヒープに展開される分岐アドレスや復帰アドレスなどの実行時に変更され得るデータが記憶されるメモリ202内の動的な記憶領域(保護されていない領域)202bについては、動的な記憶領域202bに記憶されているアドレスを参照して、静的な記憶領域202aに記憶されたプログラムコード及びデータに基づく制御処理を実行するときに、第2の改竄検出部204が動的な記憶領域202bから取得したアドレスが静的な記憶領域の範囲内を指定するものか否か判定し改竄の有無をチェックする。
これにより、メモリ202内の動的な記憶領域202bから参照したアドレスが静的な記憶領域202aの範囲内を指定するものでない場合には、動的な記憶領域202bに記憶されたアドレスに対する改竄が行われたことを検出することができ、静的な記憶領域202aに対する改竄の有無に加え、簡単なアドレスの比較のみで動的な記憶領域202bに対する改竄を検出し情報の改竄を防止することができる。
また、保護されていない領域に存在するコードからは、保護された領域内の関数等のコードを直接呼び出せないようにしても良い。具体的には、保護された領域内の関数の入り口でコールスタックを読み出し、読み出したアドレスが保護された領域外、つまり保護されていない領域を指定するものである場合には不正であるとみなす。これにより、保護されていない領域に存在する不正コードから、保護された領域内のコードが呼び出されることを防止することが可能となる。
また、他のソフトウェア・アプリケーション等と共有可能なように、プログラムコードの実行時に動的にリンクされるダイナミックリンクライブラリ(DLL)を利用する場合には、改竄や不正が予め防止されているセキュアなDLLであれば、それに制御を移す際に、正規のものであることを認証した後に制御を移すようにすれば、改竄や不正が行われることを防止することが可能である。DLLが正規のものであることは、例えばハッシュ等を用いて予め保護された領域内に記憶した正解データと比較することで確認することができる。
一方、セキュアでないDLLの場合には、DLLを利用する場合に予め静的にリンク(スタティックリンク)しておき保護された領域に含めてしまったり、認証部を設けて安全が確認されたDLLの複製を保護された領域内に作成して(他のアプリケーションが使用する場合、同じコードではあるが別なDLLとなるようにして)使用したり、DLL内で不正コードにバイパスされても影響が及ばないように適切な処理を行ってから制御を移すようにしたりすれば、改竄や不正が行われることを防止することが可能である。
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
本発明の諸態様を付記として以下に示す。
(付記1)
少なくともプログラムコードを含む当該プログラムコードに係る処理を実行する前に確定した情報が記憶され当該情報の改竄が定期的に検査される静的記憶領域と、プログラムコードに係る処理の実行に伴って変更され得る情報が記憶される動的記憶領域とを有する記憶手段と、
上記記憶手段における静的記憶領域の範囲を示すアドレス情報を記憶する領域情報記憶手段と、
上記動的記憶領域に記憶されたアドレス情報を参照して、上記静的記憶領域に記憶された情報に基づく処理を実行する場合に、上記動的記憶領域から参照したアドレス情報が上記領域情報記憶手段に記憶されたアドレス情報で示される静的記憶領域の範囲内を指定するものであるか否かを判定し、上記動的記憶領域に記憶された情報の改竄を検出する検出手段とを備えることを特徴とするソフトウェアの改竄検出装置。
(付記2)
上記検出手段は、上記動的記憶領域に記憶された情報の改竄を検出した場合に、当該検出した改竄に係る情報をさらに記憶することを特徴とする付記1記載のソフトウェアの改竄検出装置。
(付記3)
上記検出手段は、上記動的記憶領域から参照したアドレス情報と、上記領域情報記憶手段に記憶されたアドレス情報とを比較する比較手段と、
上記比較手段による比較結果に基づいて、上記動的記憶領域から参照したアドレス情報が上記静的記憶領域の範囲内を指定するものであるか否かを判定する判定手段とを備えることを特徴とする付記1又は2記載のソフトウェアの改竄検出装置。
(付記4)
上記動的記憶領域に記憶されたアドレス情報は、上記プログラムコードに係る分岐処理における分岐先アドレス及び復帰処理における復帰アドレスの少なくとも一方であることを特徴とする付記1〜3の何れか1項に記載のソフトウェアの改竄検出装置。
(付記5)
上記プログラムコードに係る分岐処理又は復帰処理を実行する前に、上記動的記憶領域に記憶されたアドレス情報を参照して、当該アドレス情報が上記静的記憶領域の範囲内を指定するものであるか否かを判定することを特徴とする付記4記載のソフトウェアの改竄検出装置。
(付記6)
上記記憶手段における静的記憶領域及び動的記憶領域の少なくとも一方が、複数かつ各々が連続した領域であることを特徴とする付記1〜5の何れか1項に記載のソフトウェアの改竄検出装置。
(付記7)
少なくともプログラムコードを含む当該プログラムコードに係る処理を実行する前に確定した情報が記憶され当該情報の改竄が定期的に検査される静的記憶領域と、プログラムコードに係る処理の実行に伴って変更され得る情報が記憶される動的記憶領域とを有する記憶部を備える情報処理システムでのソフトウェアの改竄検出方法であって、
上記動的記憶領域に記憶されたアドレス情報を参照して、上記静的記憶領域に記憶された情報に基づく処理を実行する場合に、上記動的記憶領域から参照したアドレス情報が、上記静的記憶領域の範囲を示すアドレス情報により予め規定した静的記憶領域の範囲内を指定するものであるか否かを判定する判定工程と、
上記判定工程での判定結果に基づいて、上記動的記憶領域に記憶された情報の改竄を検出する検出工程とを有することを特徴とするソフトウェアの改竄検出方法。
(付記8)
上記検出工程にて、上記動的記憶領域に記憶された情報の改竄を検出した場合に、当該検出した改竄に係る情報を記憶部に記憶する検出情報記憶工程をさらに有することを特徴とする付記7記載のソフトウェアの改竄検出方法。
本実施形態による改竄検出装置を適用した計算機システムのハードウェア構成例を示すブロック図である。 本実施形態における計算機システムの機能構成例を示すブロック図である。 本実施形態における計算機システムの具体的な動作例を説明するための図である。 本実施形態における計算機システムの具体的な動作例を説明するための図である。 本実施形態における計算機システムの他の具体的な動作例を説明するための図である。 本実施形態における計算機システムの他の具体的な動作例を説明するための図である。
符号の説明
100 計算機システム
101 CPU
102 ROM
103 RAM
104 システムバス
114 改竄検出装置
201 処理実行部
202 メモリ
202a 静的な記憶領域
202b 動的な記憶領域
203 第1の改竄検出部
204 第2の改竄検出部
205 アドレス比較部
206 判定部
207 検出情報記憶部
208 静的領域情報記憶部

Claims (20)

  1. 少なくともプログラムコードを含む当該プログラムコードに係る処理を実行する前に確定した情報が記憶され当該情報の改竄が定期的に検査される静的記憶領域と、プログラムコードに係る処理の実行に伴って変更され得る情報が記憶される動的記憶領域とを有する記憶手段と、
    上記記憶手段における静的記憶領域の範囲を示すアドレス情報を記憶する領域情報記憶手段と、
    上記動的記憶領域に記憶された分岐先アドレス情報を参照して、上記静的記憶領域に記憶された情報に基づく処理を実行する場合に、上記分岐先アドレス情報が上記領域情報記憶手段に記憶されたアドレス情報で示される静的記憶領域の範囲内を指定するものであるか否かを判定することで、上記分岐先アドレス情報が上記動的記憶領域に挿入されるバイパスコードを実行するためのアドレス情報であるか否かを判定するとともに、上記動的記憶領域に記憶された復帰先アドレス情報を参照して、上記静的記憶領域に記憶された情報に基づく処理を実行する場合に、上記復帰先アドレス情報が上記領域情報記憶手段に記憶されたアドレス情報で示される静的記憶領域の範囲内を指定するものであるか否かを判定することで、上記復帰先アドレス情報が上記動的記憶領域に挿入されるバイパスコードを実行するためのアドレス情報であるか否かを判定して、上記動的記憶領域に記憶された情報の改竄を検出する検出手段とを備えることを特徴とするソフトウェアの改竄検出装置。
  2. 上記検出手段は、上記動的記憶領域から参照した上記分岐先アドレス情報又は上記復帰先アドレス情報と、上記領域情報記憶手段に記憶されたアドレス情報とを比較する比較手段と、
    上記比較手段による比較結果に基づいて、上記動的記憶領域から参照した上記分岐先アドレス情報又は上記復帰先アドレス情報が上記静的記憶領域の範囲内を指定するものであるか否かを判定する判定手段とを備えることを特徴とする請求項1記載のソフトウェアの改竄検出装置。
  3. 上記分岐先アドレス情報又は上記復帰先アドレス情報が上記動的記憶領域に挿入されるバイパスコードを実行するためのアドレス情報であるとき、上記バイパスコードを実行した後に不正対策を施すことを特徴とする請求項1又は2記載のソフトウェアの改竄検出装置。
  4. 上記プログラムコードに係る分岐処理又は復帰処理を実行する前に、上記動的記憶領域に記憶された上記分岐先アドレス情報又は上記復帰先アドレス情報を参照して、当該アドレス情報が上記静的記憶領域の範囲内を指定するものであるか否かを判定することを特徴とする請求項1〜3の何れか1項に記載のソフトウェアの改竄検出装置。
  5. 少なくともプログラムコードを含む当該プログラムコードに係る処理を実行する前に確定した情報が記憶され当該情報の改竄が定期的に検査される静的記憶領域と、プログラムコードに係る処理の実行に伴って変更され得る情報が記憶される動的記憶領域とを有する記憶部を備える情報処理システムでのソフトウェアの改竄検出方法であって、
    上記動的記憶領域に記憶された分岐先アドレス情報を参照して、上記静的記憶領域に記憶された情報に基づく処理を実行する場合に、上記分岐先アドレス情報が、上記静的記憶領域の範囲を示すアドレス情報により予め規定した静的記憶領域の範囲内を指定するものであるか否かを判定することで、上記分岐先アドレス情報が上記動的記憶領域に挿入されるバイパスコードを実行するためのアドレス情報であるか否かを判定するとともに、上記動的記憶領域に記憶された復帰先アドレス情報を参照して、上記静的記憶領域に記憶された情報に基づく処理を実行する場合に、上記復帰先アドレス情報が上記静的記憶領域の範囲を示すアドレス情報により予め規定した静的記憶領域の範囲内を指定するものであるか否かを判定することで、上記復帰先アドレス情報が上記動的記憶領域に挿入されるバイパスコードを実行するためのアドレス情報であるか否かを判定し、判定結果に基づいて、上記動的記憶領域に記憶された情報の改竄を検出する検出工程を有することを特徴とするソフトウェアの改竄検出方法。
  6. 上記検出工程は、
    上記動的記憶領域から参照した上記分岐先アドレス情報又は上記復帰先アドレス情報と、上記静的記憶領域の範囲を示すアドレス情報とを比較し、
    比較結果に基づいて、上記動的記憶領域から参照した上記分岐先アドレス情報又は上記復帰先アドレス情報が上記静的記憶領域の範囲内を指定するものであるか否かを判定することを特徴とする請求項5記載のソフトウェアの改竄検出方法。
  7. 上記分岐先アドレス情報又は上記復帰先アドレス情報が上記動的記憶領域に挿入されるバイパスコードを実行するためのアドレス情報であるとき、上記バイパスコードを実行した後に不正対策処理を行うことを特徴とする請求項5又は6記載のソフトウェアの改竄検出方法。
  8. 上記プログラムコードに係る分岐処理又は復帰処理を実行する前に、上記動的記憶領域に記憶された上記分岐先アドレス情報又は上記復帰先アドレス情報を参照して、当該アドレス情報が上記静的記憶領域の範囲内を指定するものであるか否かを判定することを特徴とする請求項5〜7の何れか1項に記載のソフトウェアの改竄検出方法。
  9. 上記検出手段は、上記動的記憶領域に記憶された情報の改竄を検出した場合に、当該検出した改竄に係る情報を記憶することを特徴とする請求項1〜4の何れか1項に記載のソフトウェアの改竄検出装置。
  10. 上記動的記憶領域に記憶された情報の改竄を検出した場合に、当該検出した改竄に係る情報を記憶することを特徴とする請求項5〜8の何れか1項に記載のソフトウェアの改竄検出方法。
  11. 少なくともプログラムコードを含む当該プログラムコードに係る処理を実行する前に確定した情報が記憶され当該情報の改竄が定期的に検査される静的記憶領域と、プログラムコードに係る処理の実行に伴って変更され得る情報が記憶される動的記憶領域とを有する記憶手段と、
    上記記憶手段における静的記憶領域の範囲を示すアドレス情報を記憶する領域情報記憶手段と、
    上記動的記憶領域に記憶された分岐先アドレス情報を参照して、上記静的記憶領域に記憶された情報に基づく処理を実行する場合に、上記分岐先アドレス情報が上記領域情報記憶手段に記憶されたアドレス情報で示される静的記憶領域の範囲内を指定するものであるか否かを判定することで、上記分岐先アドレス情報が上記動的記憶領域に挿入されるバイパスコードを実行するためのアドレス情報であるか否かを判定するとともに、上記動的記憶領域に記憶された復帰先アドレス情報を参照して、上記静的記憶領域に記憶された情報に基づく処理を実行する場合に、上記復帰先アドレス情報が上記領域情報記憶手段に記憶されたアドレス情報で示される静的記憶領域の範囲内を指定するものであるか否かを判定することで、上記復帰先アドレス情報が上記動的記憶領域に挿入されるバイパスコードを実行するためのアドレス情報であるか否かを判定して、上記動的記憶領域に記憶された情報の改竄を防止する防止手段とを備えることを特徴とするソフトウェアの改竄防止装置。
  12. 上記防止手段は、
    上記動的記憶領域から参照した上記分岐先アドレス情報又は上記復帰先アドレス情報と、上記領域情報記憶手段に記憶されたアドレス情報とを比較する比較手段と、
    上記比較手段による比較結果に基づいて、上記動的記憶領域から参照した上記分岐先アドレス情報又は上記復帰先アドレス情報が上記静的記憶領域の範囲内を指定するものであるか否かを判定する判定手段とを備えることを特徴とする請求項11記載のソフトウェアの改竄防止装置。
  13. 上記分岐先アドレス情報又は上記復帰先アドレス情報が上記動的記憶領域に挿入されるバイパスコードを実行するためのアドレス情報であるとき、上記バイパスコードを実行した後に不正対策を施すことを特徴とする請求項11又は12記載のソフトウェアの改竄防止装置。
  14. 上記プログラムコードに係る分岐処理又は復帰処理を実行する前に、上記動的記憶領域に記憶された上記分岐先アドレス情報又は上記復帰先アドレス情報を参照して、当該アドレス情報が上記静的記憶領域の範囲内を指定するものであるか否かを判定することを特徴とする請求項11〜13の何れか1項に記載のソフトウェアの改竄防止装置。
  15. 検出される改竄に係る情報を記憶する検出情報記憶手段を含むことを特徴とする請求項11〜14の何れか1項に記載のソフトウェアの改竄防止装置。
  16. 少なくともプログラムコードを含む当該プログラムコードに係る処理を実行する前に確定した情報が記憶され当該情報の改竄が定期的に検査される静的記憶領域と、プログラムコードに係る処理の実行に伴って変更され得る情報が記憶される動的記憶領域とを有する記憶部を備える情報処理システムでのソフトウェアの改竄防止方法であって、
    上記動的記憶領域に記憶された分岐先アドレス情報を参照して、上記静的記憶領域に記憶された情報に基づく処理を実行する場合に、上記分岐先アドレス情報が、上記静的記憶領域の範囲を示すアドレス情報により予め規定した静的記憶領域の範囲内を指定するものであるか否かを判定することで、上記分岐先アドレス情報が上記動的記憶領域に挿入されるバイパスコードを実行するためのアドレス情報であるか否かを判定するとともに、上記動的記憶領域に記憶された復帰先アドレス情報を参照して、上記静的記憶領域に記憶された情報に基づく処理を実行する場合に、上記復帰先アドレス情報が上記静的記憶領域の範囲を示すアドレス情報により予め規定した静的記憶領域の範囲内を指定するものであるか否かを判定することで、上記復帰先アドレス情報が上記動的記憶領域に挿入されるバイパスコードを実行するためのアドレス情報であるか否かを判定し、判定結果に基づいて上記動的記憶領域に記憶された情報の改竄を防止する防止工程を有することを特徴とするソフトウェアの改竄防止方法。
  17. 上記防止工程は、
    上記動的記憶領域から参照した上記分岐先アドレス情報又は上記復帰先アドレス情報と、上記静的記憶領域の範囲を示すアドレス情報とを比較し、
    比較結果に基づいて、上記動的記憶領域から参照した上記分岐先アドレス情報又は上記復帰先アドレス情報が上記静的記憶領域の範囲内を指定するものであるか否かを判定することを特徴とする請求項16記載のソフトウェアの改竄防止方法。
  18. 上記分岐先アドレス情報又は上記復帰先アドレス情報が上記動的記憶領域に挿入されるバイパスコードを実行するためのアドレス情報であるとき、上記バイパスコードを実行した後に不正対策処理を行うことを特徴とする請求項16又は17記載のソフトウェアの改竄防止方法。
  19. 上記プログラムコードに係る分岐処理又は復帰処理を実行する前に、上記動的記憶領域に記憶された上記分岐先アドレス情報又は上記復帰先アドレス情報を参照して、当該アドレス情報が上記静的記憶領域の範囲内を指定するものであるか否かを判定することを特徴とする請求項16〜18の何れか1項に記載のソフトウェアの改竄防止方法。
  20. 検出される改竄に係る情報を記憶することを特徴とする請求項16〜19の何れか1項に記載のソフトウェアの改竄防止方法。
JP2004290241A 2004-10-01 2004-10-01 ソフトウェアの改竄検出装置、改竄防止装置、改竄検出方法及び改竄防止方法 Expired - Lifetime JP4728619B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004290241A JP4728619B2 (ja) 2004-10-01 2004-10-01 ソフトウェアの改竄検出装置、改竄防止装置、改竄検出方法及び改竄防止方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004290241A JP4728619B2 (ja) 2004-10-01 2004-10-01 ソフトウェアの改竄検出装置、改竄防止装置、改竄検出方法及び改竄防止方法

Related Child Applications (2)

Application Number Title Priority Date Filing Date
JP2010243792A Division JP5177205B2 (ja) 2010-10-29 2010-10-29 ソフトウェアの改竄防止装置及び改竄防止方法
JP2010243816A Division JP5177206B2 (ja) 2010-10-29 2010-10-29 ソフトウェアの改竄検出装置及び改竄検出方法

Publications (2)

Publication Number Publication Date
JP2006106956A JP2006106956A (ja) 2006-04-20
JP4728619B2 true JP4728619B2 (ja) 2011-07-20

Family

ID=36376652

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004290241A Expired - Lifetime JP4728619B2 (ja) 2004-10-01 2004-10-01 ソフトウェアの改竄検出装置、改竄防止装置、改竄検出方法及び改竄防止方法

Country Status (1)

Country Link
JP (1) JP4728619B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080184358A1 (en) * 2007-01-26 2008-07-31 Verdasys, Inc. Ensuring trusted transactions with compromised customer machines
KR100945247B1 (ko) * 2007-10-04 2010-03-03 한국전자통신연구원 가상 환경을 이용한 비실행 파일 내의 악성 코드 분석 방법및 장치
WO2011114621A1 (ja) * 2010-03-19 2011-09-22 パナソニック株式会社 プログラム実行装置、情報処理方法、情報処理プログラム、記録媒体及び集積回路
WO2015045043A1 (ja) 2013-09-25 2015-04-02 三菱電機株式会社 プロセス検査装置、プロセス検査プログラムおよびプロセス検査方法
JP7351421B2 (ja) 2020-03-17 2023-09-27 日本電気株式会社 処理装置、セキュリティ制御方法、及び制御プログラム

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04241032A (ja) * 1991-01-25 1992-08-28 Matsushita Electric Ind Co Ltd システムコール実行装置
JPH1173372A (ja) * 1997-08-27 1999-03-16 Hideo Takeda コンピュータ・ウィルスによる不正アクセス検出方法
JP2001051742A (ja) * 1999-07-13 2001-02-23 Internatl Business Mach Corp <Ibm> 実行可能モジュールおよび関連する保護サービス・プロバイダ・モジュールの完全性検査方法および装置
JP2004509392A (ja) * 2000-09-08 2004-03-25 インターナショナル・ビジネス・マシーンズ・コーポレーション ソフトウェアのセキュア認証済チャネル

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04241032A (ja) * 1991-01-25 1992-08-28 Matsushita Electric Ind Co Ltd システムコール実行装置
JPH1173372A (ja) * 1997-08-27 1999-03-16 Hideo Takeda コンピュータ・ウィルスによる不正アクセス検出方法
JP2001051742A (ja) * 1999-07-13 2001-02-23 Internatl Business Mach Corp <Ibm> 実行可能モジュールおよび関連する保護サービス・プロバイダ・モジュールの完全性検査方法および装置
JP2004509392A (ja) * 2000-09-08 2004-03-25 インターナショナル・ビジネス・マシーンズ・コーポレーション ソフトウェアのセキュア認証済チャネル

Also Published As

Publication number Publication date
JP2006106956A (ja) 2006-04-20

Similar Documents

Publication Publication Date Title
US7716495B2 (en) Protection against runtime function attacks
US7665138B2 (en) Detecting method and architecture thereof for malicious codes
JP4451884B2 (ja) コンピュータ保安装置、コンピュータ保安方法、及び記録媒体
US7631356B2 (en) System and method for foreign code detection
US12001554B2 (en) Just in time memory analysis for malware detection
US7607122B2 (en) Post build process to record stack and call tree information
US7251735B2 (en) Buffer overflow protection and prevention
US20070266435A1 (en) System and method for intrusion detection in a computer system
US20070136728A1 (en) Computer readable medium in which program is stored, computer data signal embodied in carrier wave, information processing apparatus that executes program, and program control method for executing program
JP2011170836A (ja) 情報処理装置及びプログラム、情報処理方法、記録媒体
US10902122B2 (en) Just in time memory analysis for malware detection
CN110717181B (zh) 基于新型程序依赖图的非控制数据攻击检测方法及装置
JP4728619B2 (ja) ソフトウェアの改竄検出装置、改竄防止装置、改竄検出方法及び改竄防止方法
JP5177206B2 (ja) ソフトウェアの改竄検出装置及び改竄検出方法
KR101042858B1 (ko) 윈도우즈 커널 변조 탐지방법
JP5177205B2 (ja) ソフトウェアの改竄防止装置及び改竄防止方法
KR100985071B1 (ko) 스크립트 언어를 사용한 취약점 공격 코드의 실시간 탐지및 차단 방법, 및 그 장치
CN110520860B (zh) 用于防护软件代码的方法
US20050010752A1 (en) Method and system for operating system anti-tampering
JP2012008825A (ja) プログラム難読化装置、プログラム制御装置、プログラム難読化方法及びプログラム
KR20100100488A (ko) 메모리 조작유무를 감지하는 방법 및 이를 이용한 장치
JP2004362077A (ja) データ変換システム
US20240370561A1 (en) Just in time memory analysis for malware detection
KR100557340B1 (ko) 보안 입력 디바이스 드라이버를 이용한 컴퓨터 보안 장치및 보안 방법
JP2012185547A (ja) 改ざん検出装置、監視システム、改ざん検出方法、およびプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070703

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100831

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101029

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20101130

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110415

R150 Certificate of patent or registration of utility model

Ref document number: 4728619

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140422

Year of fee payment: 3