JP4518564B2 - 不正コード実行の防止方法、不正コード実行の防止用プログラム、及び不正コード実行の防止用プログラムの記録媒体 - Google Patents

不正コード実行の防止方法、不正コード実行の防止用プログラム、及び不正コード実行の防止用プログラムの記録媒体 Download PDF

Info

Publication number
JP4518564B2
JP4518564B2 JP2005513686A JP2005513686A JP4518564B2 JP 4518564 B2 JP4518564 B2 JP 4518564B2 JP 2005513686 A JP2005513686 A JP 2005513686A JP 2005513686 A JP2005513686 A JP 2005513686A JP 4518564 B2 JP4518564 B2 JP 4518564B2
Authority
JP
Japan
Prior art keywords
function
program
return address
instruction
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
JP2005513686A
Other languages
English (en)
Other versions
JPWO2005024630A1 (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.)
Science Park Corp
Original Assignee
Science Park 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 Science Park Corp filed Critical Science Park Corp
Publication of JPWO2005024630A1 publication Critical patent/JPWO2005024630A1/ja
Application granted granted Critical
Publication of JP4518564B2 publication Critical patent/JP4518564B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1405Saving, restoring, recovering or retrying at machine instruction level
    • G06F11/141Saving, restoring, recovering or retrying at machine instruction level for bus or memory accesses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Executing Machine-Instructions (AREA)
  • Storage Device Security (AREA)

Description

本発明は、電子計算機で動作するプログラムが不正コードによる動作不備又は外部からの攻撃から保護する不正コード実行の防止方法、不正コード実行の防止用プログラム、及び不正コード実行の防止用プログラムの記録媒体に関する。詳しくは、バッファオーバーフローを検出し、プログラムの動作不備を改善する不正コード実行の防止方法、不正コード実行の防止用プログラム、及び不正コード実行の防止用プログラムの記録媒体に関する。
電子計算機のオペレーティングシステムは複雑に設計されている。このため、オペレーティングシステムには、セキュリティホールと呼ばれる弱点がある。セキュリティホールとは、ソフトウェアの設計の欠陥やバグにより生じる脆弱性の構造である。悪意のあるユーザは、オペレーティングシステムのこのセキュリティホールを利用して、オペレーティングシステムへ不正に侵入し、ハッキング、クラッキング等の悪意の行為を行うことがある。その手段としては、メモリのバッファオーバーフロー(Buffer over flow)を利用する方法がある。
ここで、バッファオーバーフローについて説明する。電子計算機で動作するプログラムは、プログラムコードとプログラムデータの2つの部分から構成される。プログラムコードは、機械語で書かれた読み出し専用のコードである。プログラムデータは、オペレーティングシステムの実行命令によって実行されるプログラムコードのメモリ上の位置等のインフォメーション部分である。
プログラムは、通常は、電子計算機のハードディスクに保存されている。プログラムはオペレーティングシステムによって呼び出され実行するとき、プログラム全体で又はその一部が電子計算機のメインメモリであるRAM(Random Access Memory)に格納されて動作する。メインメモリは、電子計算機のCPU(中央処理装置)から直接データの読み書きできるメモリで、データを格納する単位容量ごとに番地番号をつけて管理されている。メインメモリの番地番号の小さい方を上位番地(High Memory)領域、番地番号が大きくなると下位番地(Low Memory)領域としている。以下、メインメモリを単にメモリとして説明する。
プログラムがオペレーティングシステムによって読み出されると、メモリの一部がこのプログラムに割り当てられて、その割り与えられたメモリの上位番地(High Memory)領域にプログラムデータが格納され、下位番地(Low Memory)領域にプログラムコードが格納される。プログラムデータは、スタックデータ(Stack data)、ヒープデータ(Heap data)、スタティックデータ(Static data)の3つのデータ領域に分かれている。これらの3つの領域は、お互いに独立してメモリに配置されている。実行されるプログラムが、オペレーティングシステムによってハードディスクから呼び出されると、最初は、プログラムコードが読み出されメモリに格納される。続いて、プログラムデータが読み出されてメモリに格納される。
図5は、電子計算機のメモリの構造を示す概念図である。メモリの上位番地側はスタックメモリ領域になっている。スタックメモリ領域は、プログラムが実行されるごとに、そのプログラムとプログラム内のサブルーチン用のスタックメモリがここに確保されてメモリの下位番地へと順番に格納される。スタックメモリは、引数(Argument)領域、リターンアドレス(Return Address)領域、スタックデータ領域等から構成される。
メモリの下位番地側は、ヒープデータ領域、スタティックデータ領域、プログラムコード領域等の領域から構成されている。スタティックデータ領域は、プログラムコード領域より上位番地側に位置し、グローバル変数とstatic C++クラスメンバーが予約されるメモリ領域である。スタティックデータ領域より上位番地側にはヒープデータ領域が位置する。ヒープデータ領域はC言語のmalloc()、alloc()関数、C++言語のnewオペレータに割り当てられている領域である。
スタックメモリ領域はLIFO(Last-in,first-out)方式でアクセスされる。スタックメモリは、実行命令が終了後の次の命令が実行されるリターンアドレス等の関数パラメータやローカル変数等が格納される。このリターンアドレスはもっとも重要な値である。
図6には、C言語で書かれているプログラムを例示している。プログラムが実行されると、まずmain()関数が実行されて(行1〜3)、4行目のサブルーチンのsub(Data1)が呼び出されてプログラムの処理が10行目に移っている。sub()サブルーチンでは、16行目のreturn命令で、sub()を呼び出した元の位置へ処理を移している。このとき、メモリにどのようにデータが格納されるかを説明する。
サブルーチンが呼び出されると、図7に図示したように、スタックメモリ領域にデータが書き込まれる。スタックメモリ領域の上位番地側から「main()へのリターンアドレス」が格納されて、サブルーチン内のローカル変数が格納される領域が予約される。この例では、変数i(11行目)とbuf(12行目)がある。14行目のstrcpy命令でサブルーチンの引数Dataの値をbufにコピーしている。このとき、引数Dataの値がbufのサイズより大きい場合は、ローカル変数i、場合によっては、main()ルーチンへのリターンアドレスまで上書きしてしまうことになる。このように、データが確保されたメモリの領域に入りきれないで別の変数のための領域にまで書き込まれる。これは、バッファオーバーフローである。リターンアドレスが別の値に書き換えられているので、プログラムは正常の動作をしなくなる。
通常これらのプログラム、プログラムのサブルーチン、関数が実行されて終わると、リターンアドレスに示された位置に戻され、プログラムの実行が継続される。しかし、プログラムの作り方に不具合があると、上に説明したように、データを書き込みするときにローカル変数の確保領域を超えてリターンアドレスを上書きすることが可能になる。
通常リターンアドレスの書き換えによってバッファオーバーフローを起こしたプログラムは、不定な実行状態となる。場合によっては、プログラムが暴走、あるいは停止することが殆どである。リターンアドレスが意図的に用意したメモリ番地に戻されると、オペレーティングシステムはこれを不正なコードと分からずにこのメモリ番地に格納されている命令を継続して実行させる。バッファオーバーフローによる脆弱性を利用した攻撃は、このように意図的に用意したコードを実行させることである。
このようなバッファオーバーフローによる不正コードの実行は、プログラムの実行管理を行っているオペレーティングシステムでは全く把握できない。この不正コードの実行を防ぐには、リターンアドレスの改ざん、書き換えを如何に防ぐか、あるいは検知できるかが非常に重要である。
この問題を解決する方法としては、オペレーティングシステムに修正を加える方法や、コンパイラにバッファオーバーフローを防ぐ仕組みを作る方法等が提案されている。オペレーティングシステムに修正を加える方法としては、非特許文献1のプロジェクトがある。このプロジェクトでは、オープンソースのオペレーティングシステムのバッファオーバーフローを防ぐためには、スタックのリターンアドレス領域を関数が実行されない別のメモリ領域に移す方法で対処している。
コンパイラにバッファオーバーフローを防ぐ仕組みをする方法としては、非特許文献2がある。この方法は、GCCコンパイラに、スタックメモリの下位番地に保護セクションを設けてデータのオーバーライトを検知している。
また、特許文献1の場合は、記憶装置に保護数値の領域を定義し、スタックメモリのデータを保護数値の領域に保存して保護し、処理指令を実行している。保護数値の領域にリターンアドレス等が保護されているためサブルーチン等の処理指令が実行されてもプログラムカウンタが保護される。
Openwall Linux kernel patch project, URL:http://www.openwall.com/linux/ StackGuard: Simple Stack Smash Protection go GCC, URL: http://www.immunix.com/~wagle 米国公開特許番号 US2001013094 A1-2001-08-09、“Memory device, stack protection system, computer system, compiler, stack protection method, storage medium and program transmission apparatus”.
上記のいずれの方法においても、プログラムコードの変更及びリビルドが必要である。よって、これらの方法を実施しする際には、時間が掛かる。また、この不正コードの実行を利用している代表的なものは、コンピュータウィルスである。従来からコンピュータウィルスからの防止手法はシグネチャ方式であり、未知の攻撃パターンの場合は何の効果も無い。そのため、不具合が生じる度にオペレーティングシステムの変更、パッチファイルの提供が必要とされている。
本発明は上述のような技術背景のもとになされたものであり、下記の目的を達成する。
本発明の目的は、電子計算機のメモリの番地に格納されているデータの改ざん防止、データ改ざんの検出を行う方法、そのプログラム、プログラムの記録媒体を提供することである。
本発明の目的は、プログラムの実行時におけるスタックメモリ内のリターンアドレスへの改ざん防止と検出を行う方法を提供することである。
本発明の他の目的は、ハードウェア、オペレーティングシステム、カーネルモードソフトウェア、アプリケーションソフトウェアを変更することなく利用できる不正コード実行の防止機能を提供することである。
本発明の更に他の目的は、アプリケーションソフトウェア及び、カーネルモードソフトウェアがバッファオーバーフローによる脆弱性を有するときも有効に不正コード実行の防止機能を提供することである。
本発明の更に他の目的は、不正コードが実行される前に検出し、不正なコードの実行を抑止することである。
本発明は、前記目的を達成するため、次の手段を採る。
本発明の第の発明の不正コード実行の防止用プログラムは、電子計算機の記憶媒体に格納されているプログラムが、デバッグレジスタを有する構造を持つ中央演算処理装置によって実行されるとき、メモリのスタックメモリ領域に格納されているリターンアドレスが不正コードの実行によってオーバーライトされる前記メモリのバッファオーバーフローを検知し、前記バッファオーバーフローの発生を防止させるように前記電子計算機を機能させる不正コード実行の防止用プログラムである。
この不正コード実行の防止用プログラムは、前記電子計算機に、
前記プログラムが前記記憶媒体から呼び出されるとき、前記プログラムの中の分岐命令を取得して前記プログラムを解析するための解析機能と前記プログラムの中で一番最初に実行される命令の番地を、デバッグ機能に利用される前記デバッグレジスタに登録し、前記命令が実行されたとき、前記デバッグ機能によって、トレースコールバック関数が呼び出されるようにする登録機能と、
前記プログラムが実行され、前記中央演算処理装置によって前記分岐命令がトレースされ、前記分岐命令が前記解析機能で検知されたとき、前記デバッグ機能のトレースフラグをクリアにするトレース無効機能と、
前記中央演算処理装置によって最後に実行された前記分岐命令の情報を、汎用レジスタに読み取りする機能と、
前記汎用レジスタの内容から、前記分岐命令の種類を判別する判別機能と、
前記判別機能で前記分岐命令が前記プログラムのサブルーチンの呼び出し命令(CALL)である場合、前記呼び出し命令の前記リターンアドレスが格納されている、前記スタックメモリ領域のメモリ番地から、前記リターンアドレスを取得する機能と、
前記リターンアドレスを前記メモリに保存するリターンアドレス保存機能と、
前記クリアされた前記トレースフラグを設定し、前記分岐命令の前記トレースを再開する機能と、
前記判別機能で前記分岐命令が復帰命令(RET、RETxx)である場合、前記復帰命令で指定された前記リターンアドレスを前記スタックメモリ領域から読み取る読み取り機能と、
前記読み取り機能で読み取った値を、前記リターンアドレス保存機能で保存された値と比較するリターンアドレス比較機能と、
前記リターンアドレス比較機能で、前記読み取り機能で読み取った値と、前記リターンアドレス保存機能で保存された値が同じである場合、前記クリアされた前記トレースフラグを設定し、前記分岐命令の前記トレースを再開する機能と、
前記リターンアドレス比較機能で、前記読み取り機能で読み取った値と、前記リターンアドレス保存機能で保存された値が一致しない場合、前記呼び出し命令(CALL)の前記リターンアドレスが改ざんされたものと判定し、前記プログラムの流れを停止、前記プログラムの流れを一時停止、及びエラールーチンを実行する処理の内の1処理を行って、前記プログラムの流れを制御するための制御機能と
を実現させるためのプログラムであり、
更に、
前記制御機能は、前記読み取り機能で読み取った前記リターンアドレスを、前記リターンアドレス保存機能によって前記メモリに保存された前記リターンアドレスで、書き換えする機能と、
前記制御機能は、前記読み取り機能で読み取ったもので、書き換えられた後の値を保存し、前記値を用いて攻撃の種類、及び前記攻撃のパターンを解析する機能と
を前記電子計算機に実現させることを特徴とする。
また更に、前記プログラムは、アプリケーションソフトウェア、オペレーティングシス
テムのソフトウェアモジュール、カーネルモードソフトウェア、これらの中で使用する関
数、サブルーチンから選択される内1以上であると良い。
本発明の第の発明の不正コード実行の防止用プログラムの記録媒体は、上述の不正コ
ード実行の防止用プログラムを記録した記録媒体である。
本発明によると、次の効果が奏される。
本発明の不正コード防止方法は、ハードウェア、オペレーティングシステム、カーネルモードソフトウェア、アプリケーションソフトウェアを変更することなく、不正コードの実行を防止できる。
本発明の不正コード防止方法は、アプリケーションソフトウェア及び、カーネルモードソフトウェアが、バッファオーバーフローによる脆弱性を有するときも有効に対応できる。
本発明の不正コード防止方法は、不正コードが実行される前に検出し、不正なコードの実行を抑止できる。
以下、本発明の最良の実施の形態を図面によって具体的に説明する。
[実施の形態1]
以下、本発明の実施の形態1を説明する。
本発明は、電子計算機のメインメモリに格納されているデータが書き換えをされ、改ざんされる行為を検知する方法を提供するものである。また、この方法により、電子計算機のメインメモリに格納されているデータが書き換えをされ、改ざんされる行為を検知し、書き換えまたは改ざんされたデータを復元するためのプログラムを提供する。更に、本発明は、そのプログラムを記録した記録媒体を提供するものである。この本発明の実施の形態の概要を説明する。
CPUのデバッグ機能は、アプリケーションプログラムが実行されるときに発生するエラーを検出するための機能である。このためには、CPUにデバッグレジスタと呼ばれる複数のメモリを用意しており、メインメモリの特定の番地の動作を監視するために利用している。このデバッグレジスタに監視する番地のアドレス及びCPU動作を登録し、この番地の値が変更されるときにCPUがこれを検知してエラー信号を出している。そして、アプリケーションプログラムの実行に割り込みをして、別のプログラムを動作させることが可能である。
発明の実施の形態1では、バッファオーバーフローによる不正コードの実行を検知し、データ改ざん等を防止するプログラムの動作を説明する。電子計算機上にプログラムが動作するときに、従来技術で説明したように、プログラム、サブプログラム、関数が呼び出されるごとにそのリターンアドレスがスタックメモリ領域に格納される。電子計算機のCPUのデバッグレジスタには、プログラムの一番最初に実行する命令のポインタを指定して記録して、プロセス生成コールバック関数を登録して置く。そして、命令トレース機能を有効にする。命令トレース機能が有効のとき、CPUによって実行される命令をトレースし、分岐命令を検知し、リターンアドレスを取得する。
また同時に、リターンアドレスをメインメモリの別の領域にバックアップして置く。このバックアップされて保存されたリターンアドレスを、スタックメモリのリターンアドレスと比較して、リターンアドレスの改ざんを検知する。具体的には、分岐命令の実行をデバッグ機能によって無効にして、分岐命令を分析して、リターンアドレスの改ざんを検知する。スタックメモリに格納されているリターンアドレスが改ざんされると、実行されているプログラムに割り込みをし、制御を別のプログラムに移動させて、データ改ざん、不正コードの実行を防止することができる。バックアップしたリターンアドレスを、元の番地に書き換えし、プログラムを正常な動作に戻す。また、書き換えられたアドレスをバックアップして、バッファオーバーフローによるコンピュータウィルス攻撃のパターン解析にも利用することが可能である。
以下、本発明の実施の形態1の不正コード防止方法は、このデバッグレジスタを利用したデータの改ざんを検知し、改ざんされたデータを修復する方法を実現させるために、ドライバウェア層と、エラールーチンを提供するものである。このドライバウェア層は、上述のリターンアドレスを把握し、バックアップする機能を有する。エラールーチンは、リターンアドレスのデータが改ざんされると、この改ざんを修復するための機能を提供している。以下、本発明の実施の形態1を詳細に説明する。
図1には、本発明の実施の形態の概要を図示している。図1には、電子計算機上で動作するソフトウェア1、ドライバウェア2、ファイルシステムドライバ3、ハードディスク4が図示されている。通常、実行可能なプログラムはハードディスク4に実行可能ファイル5として保存され、オペレーティングシステムの呼び出し命令で読み出されメモリ6へ格納される。ソフトウェア1は、電子計算機上に動作しているアプリケーションプログラムを意味する。このアプリケーションプログラムは、オペレーティングシステムのカーネルモード又は、ユーザモードで動作するどのようなプログラムでも良い。
ドライバウェア2は、ファイルシステムドライバ3とオペレーティングシステムが提供するサービスとの間に位置するもので、オペレーティングシステムから電子計算機の各デバイスから/へ読み出し/書き込みをするときの制御を行うプログラムである。
ファイルシステムドライバ3は、電子計算機に内蔵又は接続されている記憶装置に格納されているデータを読み出し、この記憶装置にデータを書き込みするためのドライバである。ハードディスク4は、通常、電子計算機に内蔵されているハードディスクである。しかし、ソフトウェア1が格納され、オペレーティングシステムから呼び出されて実行可能であれば、外付けハードディスク、フラッシュメモリ、CD−ROMなどの外部記憶装置であっても良い。
発明の実施の形態1では、オペレーティングシステムからプログラム(図1の実行可能ファイル5)を呼び出しする命令は、ドライバウェア2を介してファイルシステムドライバ3へ送信される形式をとる。
ファイルシステムドライバ3はハードディスク4からプログラムを呼び出し、ドライバウェア2へ渡す。ドライバウェア2はプログラムを解析してメインルーチン、サブルーチンを把握し、それぞれのリターンアドレスを取得し、バッファオーバーフローを検出する制御を行う。リターンアドレスは、CALL命令等の分岐命令で出力されてスタックメモリに格納され、RET、RETxx命令で戻るためのアドレスである。
この一連の動作を図3のフローチャートを参照しながら説明する。オペレーティングシステム、又はアプリケーションプログラムからプログラム(図1の実行可能ファイル5)を起動する(ステップ1)。ドライバウェア2は、プログラムの起動を検出する(ステップ2)。ドライバウェア2は、プログラムを解析してメインルーチン、サブルーチンを把握し、それぞれのリターンアドレスを取得する。ドライバウェア2は、プログラムの起動によって生成される引数、ローカル変数、関数アドレスを調べ(ステップ3)、関数アドレスを保存する。具体的には、プログラム内で実行されるコール(CALL)、リターン(RET、RETN)、ジャンプ(JMP)等の分岐命令の実行するイベントを調べリターンアドレスを取得し、保存する(ステップ4)。
そして、ドライバウェア2は、プログラムが実行している間に、コール命令(Call命令)等の分岐命令をフックするようにしてドライバウェア2へ制御を移動できるようにする(ステップ5)。具体的には、OSが提供するPsSetLoadImageNotifyRoutine()を呼び出し、プロセス起動時に呼び出されるコールバック関数(LoadImageNotifyRoutine)を登録して行われる。スレッド生成の場合は、_beginthread()の開始アドレスを取得し、この開始アドレスにブレークポイントを設置する。ドライバウェア2は、プログラムの実行時に、スタックメモリ上のリターンアドレスの保護と改ざんの検出機能を組み込む(ステップ6)。
リターンアドレスの検知には、上述のCPUのデバッグ機能と命令トレース機能を利用する。このように、CPUのデバッグ機能の内、デバッグレジスタに格納された値のメモリ番地の命令実行されるとき、命令を命令トレースするトレース機能があり、制御が指定された番地へ移動させることが可能である。このとき、CPUのデバッグレジスタにプログラムの一番最初に実行される命令のアドレスを登録して、命令トレース機能を有効にしておく。プログラムが実行されると、命令トレース機能で実行される全ての命令から分岐命令を検知する。分岐命令が検知されるとき、オペレーティングシステムは割り込み命令を出し、ドライバウェア2へ制御を移す。
リターンアドレスにこの機能を適用する。よって、リターンアドレスが書き換えられると、ドライバウェア2へ制御が移動するように設定される。ドライバウェア2はステップ1で指定されたプログラムを実行する(ステップ7)。
図4は、プログラムが起動されて実行されるときのバッファオーバーフローを検出する手順を示すフローチャートである。
オペレーティングシステム又はアプリケーションプログラムからは、プログラムを実行するときに呼び出し命令(Call命令)が実行されると、CPUの割り込みが発生し、ドライバウェア2に制御が移る(ステップ10〜11)。ドライバウェア2はプログラムの実行によって生成される引数、ローカル変数、関数アドレスを調べ(ステップ12)、実行時におけるスタックメモリ上のリターンアドレスをデバッグ機能によって保護、又は、記憶する(ステップ13)。
上述の記憶は、スタックメモリ上のリターンアドレスをメモリの別の領域にバックアップして保存する。リターンアドレスが改ざんされたときは、このバックアップしてリターンアドレスと比較して改ざんを検証することが可能になる。
そして、ドライバウェア3が命令(IRET)を出し(ステップ14)、ステップ11で割り込まれた実行アドレスへ制御を戻す(ステップ15)、実行する(ステップ16)。
呼び出された関数からの戻る直前で、ドライバウェアがステップ13で記憶したリターンアドレスと、スタック上のリターンアドレスを比較する(ステップ17〜19)。ドライバウェア2がエラーを検出する(ステップ20)。そして、プログラムの実行を中断して、エラールーチンへ制御が移る(ステップ21)。エラールーチン(図示せず)は、エラーが検出されたときに実行され、プログラムの実行が停止、スタックメモリの内容の保存やリターンアドレスを事前に保存したデータで書き換えする等の機能を持つプログラムである。このエラールーチンによって、プログラムの実行を停止、継続、そして不正コードの保存ができる(ステップ22)。
図2には、電子計算機が外部から攻撃される例を図示している。ネットワークカード10を介して、ウィルスや不正コード等を有する外部データが送信されてくる。外部データはネットワークカード10、NDIS11、Winsock12を介してメモリ6に格納される。外部データがメモリ6に格納されるとき、プログラムのリターンアドレスの一部又は全部が書き換えられると、CPUがエラーを出力し制御がドライバウェア2に移る。ドライバウェア2はこのエラー検出を受けてエラールーチンをフックして対応する。
このように、バッファオーバーフローを利用した不正侵入、攻撃はすべて把握し、対処することができる。実行中のプロセスの停止、スタックメモリの内容の保存、元のプロセスの実行継続などができる。プロセスの停止によっては、実行しているプロセスを停止して、プログラムの暴走を止めることができる。スタックメモリの内容の保存によっては、不正コードを保存でき、その後の解析などの作業で攻撃、ウィルスの種類、そのパターンを把握できる。
発明の実施の形態は、ユーザモードだけで動作するアプリケーションプログラムだけはなくて、カーネルモードで動作するプログラムにも適応される。また、同様な方法でバッファオーバーフローの手法を利用するプログラムであれば全てに適応できる。
(実施例)
本発明の実施の形態1の実施例を示す。本実施例では、Intel社(登録商標)の32ビットアーキテクチャーのプロセッサで、命令トレース機能を実装しているものを想定している。具体的には、PentiumPro(登録商標)以後に開発されたプロセッサ、又はこのプロセッサと互換性のあるプロセッサである。オペレーティングシステムは、マイクロソフト社のWindows2000(登録商標)である。
ドライバウェア2が動作し、バッファオーバーフローの検知を行うための準備としての初期化処理、プログラムが実行されると発生されるプロセスとスレッドを検知し、メインルーチン、サブルーチンを把握する。そして、ドライバウェア2がバッファオーバーフローを検知すると、エラールーチンとしてプロセス中断処理を動作させて対処する。これらの動作について、詳細に説明する。
ドライバウェアが起動すると初期化処理を行う(図8を参照、説明は後述する。)。この初期化処理では、プログラムが呼び出されるとき生成されるプロセスとスレッドの検知を行う。この初期化処理の詳細は、図8〜10のフローチャート(後述する)で示している。
この初期化処理を行った後は、プログラムが動作を開始する。このプログラムの動作中に実行されるジャンプ(JMP)、コール(CALL)、リターン(RET)等の分岐命令をすべて登録し、トレースする。CALL、RET、RETxx命令が実行されるとき、バッファオーバーフローを検知している。CALL、RET、RETxx命令の検知は、図11、12に示すフローチャートに示している。
CALL、RET、RETxx命令の検知された後の処理は、図13〜図16のフローチャートと、このフローチャートに対応する説明中のプログラムコードに示している。
(初期化処理)
図8のフローチャートは、初期化処理の概要を示している。まずは、ドライバウェアが起動し、バッファオーバーフローを監視するプロセス名をレジストリから読み込む(ステップ100)。そして、監視対象のプロセスのプロセス生成コールバックを登録する(ステップ101)。このプロセス生成コールバックの登録について詳細には、図9のフローチャートに示している。その後、スタックレコーダを初期化し、メモリ領域を確保する(ステップ102)。そして、監視対象スレッドのスレッド生成イベントのフック設定を行う(ステップ103)。それから、実行命令のトレースを開始する。
プロセス生成コールバックの登録は、OSが提供するPsSetLoadImageNotifyRoutine()を呼び出し、プロセス起動時に呼び出されるコールバック関数(LoadImageNotifyRoutine)を登録して行われる。このコールバック関数は、次のプロトタイプで定義される。
Figure 0004518564
次に、図9のフローチャートには、プロセス生成コールバックの登録の手順を示している。プロセスが生成されるとLoadImageNotifyRoutine関数が呼び出される(ステップ110)。以下、LoadImageNotifyRoutine内での動作を示す。監視する対象のプロセスかを判定する(ステップ111)。この判定のときは、LoadImageNotifyRoutineの引数FullImageNameに、対象となるプロセスモジュール名が存在するかどうかを調べる。存在していた場合は次の処理に移る(はい)。
プロセスモジュールのエントリポイントアドレス取得する(ステップ112)。Windowsで使用される実行モジュールファイルの先頭部分(ヘッダ)を調査し、最初に実行される関数(エントリポイント)のアドレスを取得する。そして、エントリポイントに、ブレークポイントを設置する(ステップ113)。このときのプログラムコードの例は次の通りである。
Figure 0004518564
そして、IA-32命令のトレース機能を有効にして、トレースコールバック関数(ASO_Hook_INT01H)の登録のためにIDT(割り込みディスクリプタテーブル)の01Hを書き換える(ステップ114)。この登録のためのプログラムコードは以下の通りである。
Figure 0004518564
プロセスが起動した時に最初に実行される命令にハードウェアブレークポイントを設定し、実行された際にトレースコールバック関数(ASO_Hook_INT01H)が呼び出されるようにする(ステップ115)。このためのプログラムコードは以下の通りである。
Figure 0004518564
スタックレコーダの初期化(ステップ102を参照)は、指定された監視対象のプロセスのスレッドが生成される度に動的に実施される。スタックレコーダの各スタックは、次のように定義される。
Figure 0004518564
図10のフローチャートには、スレッド生成イベントのフック設定(ステップ103を参照)の手順を示している。スレッドが生成される(ステップ120)と、監視する対象のプロセスか否かを判定する(ステップ121)。生成されたスレッドが監視する対象のプロセスのときは、_beginthread()の開始アドレスを取得する(ステップ122)。この開始アドレスにブレークポイントを設置する(ステップ123)。それから、トレースを開始する(ステップ124)。
複数スレッドのシステムには、スレッドを生成するカーネルAPIであるNtCreateThreadをフックすることで適用させている。そのため、NtCreateThreadを呼び出す際に経由されるベクタ2Eの割り込みハンドラ(ASO_Hook_INT2EH)を書き換える。このときのプログラムコードは次のようになる。
Figure 0004518564
スレッド生成イベント(CreateThread())のフック設定で使用されるプログラムコードは次のとおりである。
Figure 0004518564
このように、一連の初期化処理が終了すると、プログラムが実行され、CALL、RET等の分岐命令をトレースする。次に、トレースしているときの処理を、図11、12のフローチャートに示している。トレース処理が開始されると(ステップ150)、DR6のトレースフラッグをクリアして(ステップ151)、CALL命令、RET命令を判別している。図11、図12の分岐判定のときは(ステップ154〜183)、CALL、RET、RETN命令を判別し、それぞれ「CALL処理へ」、「RET処理へ」、「RENT処理へ」となっている。「CALL処理へ」、「RET処理へ」、「RENT処理へ」は、それぞれ図13、図14、図15のフローチャートに示している。CALL、RET、RETN命令を判別するときのプログラムコードは、次のようになる。
Figure 0004518564
ここでは、CALL、RET、RETNの判別は、それぞれCALL_FOUND、RET_FOUND 、RETN_FOUNDとしてコード化されている。プログラムコードの分岐命令にてCALL_FOUNDにジャンプした場合、CALL命令が実行されたと見なして、図13のフローチャートに示す処理が行われる。RET、RETNの場合は同様である。
図13には、CALL命令が実行されるときの処理を示している。CALL命令の実行が開始されると(ステップ200)、CALL命令に割り与えられたスタックメモリのスタックセグメント(CS)のアドレスを取得する(ステップ201)。そして、CALL命令で格納されるリターンアドレスのスタックポイントを取得する(ステップ202)。その後、スタックメモリからリターンアドレスを取得する(ステップ203)。このときのプログラムコードは次のようになる。
Figure 0004518564
この取得したリターンアドレスをスタックレコーダに登録する(ステップ204)。このときのプログラムコードは、次のようになる。
Figure 0004518564
そして、MSRとEFLAGを設定して命令トレースを再開する(ステップ205、206)。IRETDにて処理を完了。
図14には、RET命令が実行されるときの処理を示している。RET命令の実行が開始されると(ステップ250)、RET命令に割り与えられたスタックメモリのスタックセグメント(CS)のアドレスを取得する(ステップ251)。そして、RET命令で指定されたリターンアドレスのスタックポインタを取得する(ステップ252)。その後、スタックメモリからリターンアドレスを取得する(ステップ253)。このときのプログラムコードは次のようになる。
Figure 0004518564
そして、スタックレコーダからリターンアドレスと同じ値があるかを検索する(ステップ254)。リターンアドレスは、このRET命令に対応するCALL命令のときにスタックレコーダに登録されているものである。しかし、リターンアドレスが改ざんされた場合は、スタックレコーダの中から同じアドレスが見つからない。このときは、プロセス中断処理(次のコードのTerminate_VirusCode())へ移る(ステップ260)。同じアドレスが見つかると、スタックレコーダから1レコードを削除(ステップ255)する。このときのプログラムコードは次のようになる。
Figure 0004518564
そして、MSRとEFLAGを設定して命令トレースを再開する(ステップ256、257)。IRETDにて処理を完了。図15には、RETN命令が実行されるときの処理を示している。RETN命令の実行が開始されると(ステップ300)、RETN命令に割り与えられたスタックメモリのスタックセグメント(CS)のアドレスを取得する(ステップ301)。そして、RETN命令で指定されたリターンアドレスのスタックポイントを取得する(ステップ302)。その後、スタックメモリからリターンアドレスを取得する(ステップ303)。このときのプログラムコードは次のようになる。
Figure 0004518564
そして、スタックレコーダからリターンアドレスと同じ値があるかを検索する(ステップ304)。リターンアドレスは、このRETN命令に対応するCALL命令のときにスタックレコーダに登録されているものである。しかし、リターンアドレスが改ざんされた場合は、スタックレコーダの中から同じアドレスが見つからない。このときは、プロセス中断処理(次のコードのTerminate_VirusCode())へ移る(ステップ310)。同じアドレスが見つかると、スタックレコーダから1レコードを削除(ステップ305)する。このときのプログラムコードは次のようになる。
Figure 0004518564
そして、MSRとEFLAGを設定して命令トレースを再開する(ステップ306、307)。IRETDにて処理を完了。
図16には、JMP ESP処理が実行されるときの処理を示している。JMP ESPは、例えばネットワークを経由して侵入するウィルス等がスタックメモリ上のプログラムコードを実行するために必要な命令である。そのためスタックのリターンアドレスの検索結果に依存することなく、JMPESP命令を使用する実行モジュールは稀であるため禁止対象としてある。JMP ESPが判別すると、プロセス中断処理を行う(ステップ351)。
ステップ260、310、351のプロセス中断処理は、RET、RETN命令の次に実行される命令のアドレスを取得し、そこを不正な命令(INT3等)に書き換える。プロセスの実行を継続させ、不正な命令でプロセスを停止させる。このときのプログラムコードは次のようになる。
Figure 0004518564
上述したように、バッファオーバーフローを利用した不正侵入、攻撃はすべて把握し、対処することができる。実行しているプロセスを停止して、プログラムの暴走を止めることができる。このような方法でバッファオーバーフローを実現可能な、すべてのオペレーティングシステムにも適応可能である。
本発明は、コンピュータウィルス対策、外部からの不正侵入の防止、セキュリティが要求される分野のすべてに利用される。特に、ネットワークに接続して利用されるパソコン、スーパーコンピュータ、サーバを利用したシステムに利用してよい。個人情報保護、電子ファイルのセキュリティが要求される電子政府、軍事、防衛関連のシステムに用いられる。また、プログラムの欠陥、不正コードの利用を検知するとき利用すると良い。
図1は、本発明の概要を図示している概念図である。 図2は、本発明のバッファオーバーフローによるエラー検出を示す概念図である。 図3は、実行ファイルのロード時の手順を示すフローチャートである。 図4は、実行ファイルの実行時の手順を示すフローチャートである 図5は、メモリの構造を示す図である。 図6は、プログラムのメインルーチン、サブルーチンを例示した図ある。 図7は、スタックメモリの構造を示す図ある。 図8は、ドライバウェアが起動するときの初期化処理の手順を示すフローチャートである。 図9は、プロセス生成コールバックの登録の手順を示すフローチャートである。 図10は、スレッド生成イベントのフック設定の手順を示しているフローチャートである。 図11は、CALL、RET等の分岐命令をトレースしているときの処理の流れを示すフローチャートである。 図12は、図11のCALLorJMP処理の処理手順を示すフローチャートである。 図13は、CALL命令が実行されるときの処理を示すフローチャートである。 図14は、RET命令が実行されるときの処理を示すフローチャートである。 図15は、RET命令が実行されるときの処理を示すフローチャートである。 図16は、JMP ESP処理の手順を示すフローチャートである。
符号の説明
1…ソフトウェア
2…ドライバウェア
3…ファイルシステムドライバ
4…ハードディスク
5…実行可能ファイル
6…メモリ
10…ネットワークカード
11…NDIS
12…Winsock

Claims (3)

  1. 電子計算機の記憶媒体に格納されているプログラムが、デバッグレジスタを有する構造を持つ中央演算処理装置によって実行されるとき、
    メモリのスタックメモリ領域に格納されているリターンアドレスが不正コードの実行によってオーバーライトされる前記メモリのバッファオーバーフローを検知し、前記バッファオーバーフローの発生を防止させるように前記電子計算機を機能させる不正コード実行の防止用プログラムにおいて、
    前記不正コード実行の防止用プログラムは、前記電子計算機に、
    前記プログラムが前記記憶媒体から呼び出されるとき、前記プログラムの中の分岐命令を取得して前記プログラムを解析するための解析機能と、
    前記プログラムの中で一番最初に実行される命令の番地を、デバッグ機能に利用される前記デバッグレジスタに登録し、前記命令が実行されたとき、前記デバッグ機能によって、トレースコールバック関数が呼び出されるようにする登録機能と、
    前記プログラムが実行され、前記中央演算処理装置によって前記分岐命令がトレースされ、前記分岐命令が前記解析機能で検知されたとき、前記デバッグ機能のトレースフラグをクリアにするトレース無効機能と、
    前記中央演算処理装置によって最後に実行された前記分岐命令の情報を、汎用レジスタに読み取りする機能と、
    前記汎用レジスタの内容から、前記分岐命令の種類を判別する判別機能と、
    前記判別機能で前記分岐命令が前記プログラムのサブルーチンの呼び出し命令(CALL)である場合、前記呼び出し命令の前記リターンアドレスが格納されている、前記スタックメモリ領域のメモリ番地から、前記リターンアドレスを取得する機能と、
    前記リターンアドレスを前記メモリに保存するリターンアドレス保存機能と、
    前記クリアされた前記トレースフラグを設定し、前記分岐命令の前記トレースを再開する機能と、
    前記判別機能で前記分岐命令が復帰命令(RET、RETxx)である場合、前記復帰命令で指定された前記リターンアドレスを前記スタックメモリ領域から読み取る読み取り機能と、
    前記読み取り機能で読み取った値を、前記リターンアドレス保存機能で保存された値と比較するリターンアドレス比較機能と、
    前記リターンアドレス比較機能で、前記読み取り機能で読み取った値と、前記リターンアドレス保存機能で保存された値が同じである場合、前記クリアされた前記トレースフラグを設定し、前記分岐命令の前記トレースを再開する機能と、
    前記リターンアドレス比較機能で、前記読み取り機能で読み取った値と、前記リターンアドレス保存機能で保存された値が一致しない場合、前記呼び出し命令(CALL)の前記リターンアドレスが改ざんされたものと判定し、前記プログラムの流れを停止、前記プログラムの流れを一時停止、及びエラールーチンを実行する処理の内の1処理を行って、前記プログラムの流れを制御するための制御機能と
    を実現させるためのプログラムであり、
    更に、
    前記制御機能は、前記読み取り機能で読み取った前記リターンアドレスを、前記リターンアドレス保存機能によって前記メモリに保存された前記リターンアドレスで、書き換えする機能と、
    前記制御機能は、前記読み取り機能で読み取ったもので、書き換えられた後の値を保存し、前記値を用いて攻撃の種類、及び前記攻撃のパターンを解析する機能と
    を前記電子計算機に実現させることを特徴とする不正コード実行の防止用プログラム。
  2. 請求項1において、
    前記プログラムは、アプリケーションソフトウェア、オペレーティングシステムのソフトウェアモジュール、カーネルモードソフトウェア、これらの中で使用する関数、サブルーチンから選択される内1以上である
    ことを特徴とする不正コード実行の防止用プログラム。
  3. 請求項1又は2に記載された、不正コード実行の防止用プログラムを記録した不正コード実行の防止用プログラムの記録媒体。
JP2005513686A 2003-09-04 2004-09-03 不正コード実行の防止方法、不正コード実行の防止用プログラム、及び不正コード実行の防止用プログラムの記録媒体 Active JP4518564B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2003312517 2003-09-04
JP2003312517 2003-09-04
PCT/JP2004/012858 WO2005024630A1 (ja) 2003-09-04 2004-09-03 不正コード実行の防止方法および防止プログラム

Publications (2)

Publication Number Publication Date
JPWO2005024630A1 JPWO2005024630A1 (ja) 2007-11-08
JP4518564B2 true JP4518564B2 (ja) 2010-08-04

Family

ID=34269739

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005513686A Active JP4518564B2 (ja) 2003-09-04 2004-09-03 不正コード実行の防止方法、不正コード実行の防止用プログラム、及び不正コード実行の防止用プログラムの記録媒体

Country Status (6)

Country Link
US (1) US8042179B2 (ja)
EP (1) EP1662379A4 (ja)
JP (1) JP4518564B2 (ja)
KR (1) KR100777938B1 (ja)
CN (1) CN1886728A (ja)
WO (1) WO2005024630A1 (ja)

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7971255B1 (en) * 2004-07-15 2011-06-28 The Trustees Of Columbia University In The City Of New York Detecting and preventing malcode execution
JP3768516B1 (ja) * 2004-12-03 2006-04-19 株式会社ソニー・コンピュータエンタテインメント マルチプロセッサシステムとそのシステムにおけるプログラム実行方法
US7849444B2 (en) * 2004-12-21 2010-12-07 National Instruments Corporation Test executive with buffer overwrite detection for parameters of user-supplied code modules
US7607122B2 (en) * 2005-06-17 2009-10-20 Microsoft Corporation Post build process to record stack and call tree information
US7930733B1 (en) * 2006-04-10 2011-04-19 At&T Intellectual Property Ii, L.P. Method and system for execution monitor-based trusted computing
US20080148399A1 (en) * 2006-10-18 2008-06-19 Microsoft Corporation Protection against stack buffer overrun exploitation
FR2910144A1 (fr) * 2006-12-18 2008-06-20 St Microelectronics Sa Procede et dispositif de detection errones au cours de l'execution d'un programme.
US8453245B2 (en) 2006-12-29 2013-05-28 Microsoft Corporation Automatic vulnerability detection and response
CN101241464B (zh) * 2007-02-05 2010-08-18 中兴通讯股份有限公司 一种检测堆栈帧破坏的方法
CN101295278B (zh) * 2007-04-23 2010-08-11 大唐移动通信设备有限公司 定位被改写代码段所在进程的方法及装置
US8141163B2 (en) * 2007-07-31 2012-03-20 Vmware, Inc. Malicious code detection
CN101414340B (zh) * 2007-10-15 2015-12-02 北京瑞星信息技术有限公司 一种防止远程线程启动的方法
US8352921B2 (en) * 2007-11-02 2013-01-08 Klocwork Corp. Static analysis defect detection in the presence of virtual function calls
US8099636B2 (en) * 2008-07-15 2012-01-17 Caterpillar Inc. System and method for protecting memory stacks using a debug unit
JP5316148B2 (ja) * 2009-03-24 2013-10-16 富士通セミコンダクター株式会社 情報処理装置およびデータ修復方法
JP4572259B1 (ja) * 2009-04-27 2010-11-04 株式会社フォティーンフォティ技術研究所 情報機器、プログラム及び不正なプログラムコードの実行防止方法
TW201128383A (en) * 2009-07-29 2011-08-16 Reversinglabs Corp Portable executable file analysis
US20120227033A1 (en) * 2011-03-02 2012-09-06 Lei Yu Method and apparatus for evaluating software performance
US8935674B2 (en) * 2012-08-15 2015-01-13 International Business Machines Corporation Determining correctness conditions for use in static analysis
US20140283060A1 (en) * 2013-03-15 2014-09-18 Oracle International Corporation Mitigating vulnerabilities associated with return-oriented programming
CN103514405B (zh) * 2013-07-08 2016-08-10 北京深思数盾科技股份有限公司 一种缓冲区溢出的检测方法及系统
WO2015044993A1 (ja) * 2013-09-24 2015-04-02 株式会社 エーティーティーコンサルティング プロセッサ、処理装置、プログラム作成方法
CN103559439A (zh) * 2013-11-19 2014-02-05 浪潮(北京)电子信息产业有限公司 一种缓冲区溢出检测方法及系统
US9245110B2 (en) 2013-12-17 2016-01-26 International Business Machines Corporation Stack entry overwrite protection
US9703948B2 (en) * 2014-03-28 2017-07-11 Intel Corporation Return-target restrictive return from procedure instructions, processors, methods, and systems
CN105426752A (zh) * 2015-11-24 2016-03-23 无锡江南计算技术研究所 缓冲区溢出保护方法
JP2017123119A (ja) * 2016-01-08 2017-07-13 株式会社デンソー 電子制御装置
CN106203069B (zh) * 2016-06-27 2019-10-15 珠海豹趣科技有限公司 一种动态链接库文件的拦截方法、装置及终端设备
US10540498B2 (en) * 2016-08-12 2020-01-21 Intel Corporation Technologies for hardware assisted native malware detection
US10481999B2 (en) 2016-12-05 2019-11-19 Microsoft Technology Licensing, Llc Partial process recording
US10467407B2 (en) * 2017-03-30 2019-11-05 Check Point Advanced Threat Prevention Ltd. Method and system for detecting kernel corruption exploits
US10613864B2 (en) * 2018-03-16 2020-04-07 Texas Instruments Incorporated Processor with hardware supported memory buffer overflow detection
CN109033821A (zh) * 2018-07-12 2018-12-18 郑州云海信息技术有限公司 一种栈溢出攻击防护系统及方法
JP2022502723A (ja) * 2018-10-18 2022-01-11 スターナム リミテッドSternum Ltd. スタック破損のエクスプロイトに対する中間コードファイルにおけるセキュリティ緩和手段の適用
WO2021059478A1 (ja) * 2019-09-27 2021-04-01 日本電気株式会社 情報処理装置、情報処理方法、及び、プログラムが記録された非一時的なコンピュータ可読媒体
US11182472B2 (en) * 2019-09-30 2021-11-23 Vmware, Inc. Security in a computing environment by monitoring expected operation of processes within the computing environment
CN112784261B (zh) * 2021-01-04 2023-10-27 北京蓝军网安科技发展有限责任公司 用于程序运行的方法及相应的系统、计算机设备和介质
US11900154B2 (en) * 2021-03-08 2024-02-13 Dell Products L.P. Enabling modern standby for unsupported applications

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02304635A (ja) * 1989-05-19 1990-12-18 Pfu Ltd プログラム暴走検知方法
JPH05216717A (ja) * 1992-01-31 1993-08-27 Nec Corp デバッガのトレース機能
JPH09128267A (ja) * 1995-10-31 1997-05-16 Nec Corp データ処理装置およびデータ処理方法
JPH11120028A (ja) * 1997-10-13 1999-04-30 Nec Corp プログラム移植サポート方式
JP2001511271A (ja) * 1997-01-15 2001-08-07 シーメンス アクチエンゲゼルシヤフト ソフトウェアプログラムの規定通りの実行を監視するための方法
JP2001216161A (ja) * 2000-02-04 2001-08-10 Internatl Business Mach Corp <Ibm> メモリ装置、スタック保護システム、コンピュータシステム、コンパイラ、スタック保護方法、記憶媒体及びプログラム伝送装置

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03175537A (ja) * 1989-12-04 1991-07-30 Nec Corp デバッグ用マイクロプロセッサのエラー制御装置
JPH09128277A (ja) * 1995-10-27 1997-05-16 Nec Software Ltd 複数os搭載システムにおけるファイル管理方式
JP3339482B2 (ja) * 1999-12-15 2002-10-28 日本電気株式会社 分散デバッグ装置及びデバッグ方法並びに制御プログラムを記録した記録媒体
US6915416B2 (en) * 2000-12-28 2005-07-05 Texas Instruments Incorporated Apparatus and method for microcontroller debugging
CA2345416C (en) * 2001-04-27 2005-05-03 Ibm Canada Limited-Ibm Canada Limitee High performance debugging in a message flow environment
US6947047B1 (en) * 2001-09-20 2005-09-20 Nvidia Corporation Method and system for programmable pipelined graphics processing with branching instructions
US7853803B2 (en) * 2001-09-28 2010-12-14 Verizon Corporate Services Group Inc. System and method for thwarting buffer overflow attacks using encrypted process pointers
US7243340B2 (en) * 2001-11-15 2007-07-10 Pace Anti-Piracy Method and system for obfuscation of computer program execution flow to increase computer program security
US20030126590A1 (en) * 2001-12-28 2003-07-03 Michael Burrows System and method for dynamic data-type checking
US6996677B2 (en) * 2002-11-25 2006-02-07 Nortel Networks Limited Method and apparatus for protecting memory stacks

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02304635A (ja) * 1989-05-19 1990-12-18 Pfu Ltd プログラム暴走検知方法
JPH05216717A (ja) * 1992-01-31 1993-08-27 Nec Corp デバッガのトレース機能
JPH09128267A (ja) * 1995-10-31 1997-05-16 Nec Corp データ処理装置およびデータ処理方法
JP2001511271A (ja) * 1997-01-15 2001-08-07 シーメンス アクチエンゲゼルシヤフト ソフトウェアプログラムの規定通りの実行を監視するための方法
JPH11120028A (ja) * 1997-10-13 1999-04-30 Nec Corp プログラム移植サポート方式
JP2001216161A (ja) * 2000-02-04 2001-08-10 Internatl Business Mach Corp <Ibm> メモリ装置、スタック保護システム、コンピュータシステム、コンパイラ、スタック保護方法、記憶媒体及びプログラム伝送装置

Also Published As

Publication number Publication date
KR20060056998A (ko) 2006-05-25
JPWO2005024630A1 (ja) 2007-11-08
KR100777938B1 (ko) 2007-11-21
EP1662379A1 (en) 2006-05-31
US20070101317A1 (en) 2007-05-03
CN1886728A (zh) 2006-12-27
US8042179B2 (en) 2011-10-18
WO2005024630A1 (ja) 2005-03-17
EP1662379A4 (en) 2008-12-03

Similar Documents

Publication Publication Date Title
JP4518564B2 (ja) 不正コード実行の防止方法、不正コード実行の防止用プログラム、及び不正コード実行の防止用プログラムの記録媒体
Kawakoya et al. Memory behavior-based automatic malware unpacking in stealth debugging environment
US7996904B1 (en) Automated unpacking of executables packed by multiple layers of arbitrary packers
Guo et al. A study of the packer problem and its solutions
US10460099B2 (en) System and method of detecting malicious code in files
US8510828B1 (en) Enforcing the execution exception to prevent packers from evading the scanning of dynamically created code
Volckaert et al. Cloning your gadgets: Complete ROP attack immunity with multi-variant execution
CN109583200B (zh) 一种基于动态污点传播的程序异常分析方法
US8104089B1 (en) Tracking memory mapping to prevent packers from evading the scanning of dynamically created code
US10984096B2 (en) Systems, methods, and apparatus for detecting control flow attacks
WO2012152479A1 (en) Malware detection
Kawakoya et al. Api chaser: Anti-analysis resistant malware analyzer
US10467410B2 (en) Apparatus and method for monitoring confidentiality and integrity of target system
JP2010257150A (ja) 不正処理検知装置、不正処理検知方法及びプログラム
KR101064164B1 (ko) 리눅스 커널 기반 스마트 플랫폼 내에서의 커널 무결성 검사 및 변조된 커널 데이터 복구 방법
Quist et al. Covert debugging circumventing software armoring techniques
Kim et al. Large-scale analysis on anti-analysis techniques in real-world malware
Bravo et al. Proactive detection of kernel-mode rootkits
CN113760770A (zh) 基于自动静态资源检测的反调试方法和系统
Canella et al. SFIP: Coarse-Grained Syscall-Flow-Integrity Protection in Modern Systems
Gupta et al. Dynamic code instrumentation to detect and recover from return address corruption
CN111931191A (zh) Linux平台二进制软件堆溢漏洞动态检测方法及系统
Shields Anti-debugging–a developers view
JP4643201B2 (ja) バッファオーバーフロー脆弱性分析方法、データ処理装置、分析情報提供装置、分析情報抽出処理用プログラムおよび分析情報提供処理用プログラム
Santos Filho et al. Evasion and countermeasures techniques to detect dynamic binary instrumentation frameworks

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080509

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080708

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081007

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081208

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20081211

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20090319

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090327

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20090518

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090813

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091008

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091102

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091228

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

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

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

Free format text: PAYMENT UNTIL: 20130528

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4518564

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

Year of fee payment: 4

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

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

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

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