JP2006053760A - バッファオーバーフロー脆弱性分析方法、データ処理装置、分析情報提供装置、分析情報抽出処理用プログラムおよび分析情報提供処理用プログラム - Google Patents

バッファオーバーフロー脆弱性分析方法、データ処理装置、分析情報提供装置、分析情報抽出処理用プログラムおよび分析情報提供処理用プログラム Download PDF

Info

Publication number
JP2006053760A
JP2006053760A JP2004234978A JP2004234978A JP2006053760A JP 2006053760 A JP2006053760 A JP 2006053760A JP 2004234978 A JP2004234978 A JP 2004234978A JP 2004234978 A JP2004234978 A JP 2004234978A JP 2006053760 A JP2006053760 A JP 2006053760A
Authority
JP
Japan
Prior art keywords
information
buffer
function
analysis information
program
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
JP2004234978A
Other languages
English (en)
Other versions
JP4643201B2 (ja
Inventor
Makoto Iwamura
誠 岩村
Hitoshi Fuji
仁 冨士
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 JP2004234978A priority Critical patent/JP4643201B2/ja
Publication of JP2006053760A publication Critical patent/JP2006053760A/ja
Application granted granted Critical
Publication of JP4643201B2 publication Critical patent/JP4643201B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Executing Machine-Instructions (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】本発明は、バッファオーバーフローに対して、根本的な対処であるプログラムソースの修正や修正パッチの適用を迅速に行えるようにする技術の提供を目的とする。
【解決手段】バッファオーバーフロー攻撃の発生を検知すると、プログラム開発者に提供する分析情報として、攻撃の対象となったバッファの存在する場所の情報と、そのバッファを確保した関数の情報とを抽出するとともに、そのバッファ確保からバッファオーバーフロー攻撃までの関数の呼び出し履歴の情報を抽出できる場合には、その情報を抽出する。この分析情報を受けて、プログラム開発者がプログラムを修正し対処情報を作成するので、既知分析情報記憶手段に分析情報に対応付ける形で対処情報を記憶しておき、抽出した分析情報が既知分析情報記憶手段が登録されている場合には、その分析情報に対応付けられる対処情報に基づいてバッファオーバーフロー攻撃に対する対処処理を実行する。
【選択図】図1

Description

本発明は、バッファオーバーフロー攻撃の対象となったプログラムの修正を行う上で必要となる分析情報を、そのプログラムの開発者に提供するための処理を行うバッファオーバーフロー脆弱性分析方法と、そのバッファオーバーフロー脆弱性分析方法を実現するシステムで用いられるデータ処理装置及び分析情報提供装置と、そのデータ処理装置の実現に用いられる分析情報抽出処理用プログラムと、その分析情報提供装置の実現に用いられる分析情報提供処理用プログラムとに関する。
スタックメモリ上には、サブルーチン呼び出しの際に呼び出し元へ戻るためのリターンアドレスや、フレームポインタや、サブルーチン内でのみ利用される局所変数等が格納され、さらに、オペレーティングシステムによっては例外ハンドラ(例外発生時に実行されるサブルーチン)のアドレス等が格納される。
これから、サブルーチン内でのみ利用される局所変数として宣言されたバッファに対して、バッファの境界を越えた書き込み(バッファオーバーフロー)が発生すると、リターンアドレス等が書き換わることになる。
バッファオーバーフロー攻撃(スタックスマッシング攻撃)は、この書き換えによりプログラムの処理フローを変更して、任意のプログラムを実行させるという攻撃である。
このバッファオーバーフロー攻撃は、具体的には、コピー元のバッファに攻撃用データを書き込むことで実行され、攻撃用データが書き込まれると、攻撃対象のプロセスが標準コピー関数(呼び出し元のプロセスにより指定されるコピー元のバッファからコピー先のバッファへのコピー処理を実行する関数)を呼び出してコピーを行うと、コピー先のバッファがオーバーフローしてリターンアドレス等が書き換わり、これにより攻撃が行われることになる。
バッファオーバーフロー攻撃に対する防御を実現する従来技術として、動的リンカを使って、標準的なメモリコピー関数の呼び出しをプロセス実行時にフックすることで、コピー先のバッファのサイズをあらかじめチェックして、バッファオーバーフローを検出するという手法がある(例えば、非特許文献1参照)。
なお、『関数をフックする』とは、ある関数が呼び出されるときに制御を横取りすることをいう。デバッグ目的で、ある関数が正確に呼び出されているのかを調べるために、一旦制御を横取りしてログ出力する、といった利用方法がある。
また、保護対象のプロセスに対して、コンパイル時にリターンアドレス等の保護のための特別の値であるガード変数を挿入して、関数のリターン処理の直前に、ガード変数の有効性を確認し、ガード変数が破壊されているときはプロセスを異常終了する、という処理を挿入するものがある(例えば、特許文献1参照)。
これらの従来技術により、バッファオーバーフロー攻撃によるサーバの乗っ取りやデータの改竄といった不正侵入からホストを防御できるようになる。
White Paper 「Libsafe: Protecting critical elements of stacks.」"http://www.research.avayalabs.com/project/libsafe/" A.Baratloo, N.Singh, and T.Tsai, December 1999. 特開2001−216161
しかしながら、このような従来技術に従っていたのでは、バッファオーバーフローが発生したことを検知することは可能であるものの、その原因の特定が困難であるという問題がある。
したがって、従来技術に従っていると、根本的な対処であるプログラムソースの修正や修正パッチの適用を迅速に行えないという問題がある。
本発明はかかる事情に鑑みてなされたものであって、発生したバッファオーバーフローの原因を明確にすることで、根本的な対処であるプログラムソースの修正や修正パッチの適用を迅速に行えるようにする新たな技術の提供を目的とする。
本発明により実現されるバッファオーバーフロー脆弱性分析システムは、複数のデータ処理装置と分析情報提供装置とがネットワークを介して接続されることで構成されて、バッファオーバーフロー攻撃の対象となったプログラムの修正を行う上で必要となる分析情報を、そのプログラムの開発者に提供するための処理を行う。
〔1〕本発明のデータ処理装置
本発明のデータ処理装置は、上記の分析情報提供処理を実現するために、(イ)バッファオーバーフロー攻撃の発生を検知する検知手段と、(ロ)プログラム開発者に提供する分析情報として、攻撃の対象となったバッファの存在する場所の情報と、そのバッファを確保した関数の情報とを抽出するとともに、そのバッファ確保からバッファオーバーフロー攻撃までの関数の呼び出し履歴の情報を抽出できる場合には、その情報を抽出する抽出手段とを備える。
この構成を採るときにあって、抽出手段は、オーバーフロー発生時のフレームポインタから攻撃対象となったバッファの先頭をまたぐまでスタックトレースを行い、最終的にたどり着くフレームポインタの直前のフレームポインタに近接するリターンアドレスを抽出することで、バッファを確保した関数の情報を抽出することがある。
また、抽出手段は、オーバーフロー発生時のフレームポインタから攻撃対象となったバッファを確保した関数までスタックトレースを行うことで、バッファ確保からバッファオーバーフロー攻撃までの関数の呼び出し履歴の情報を抽出することがある。
また、ヒープメモリ確保関数が呼び出されたときにスタックトップまでスタックトレースを行うことで関数の呼び出し履歴の情報を取得して、その情報をヒープメモリ上に確保されたバッファの情報に対応付けて記憶手段に記録する記録手段が備えられる場合には、抽出手段は、攻撃の対象となったバッファがヒープメモリに存在することを抽出する場合には、記憶手段に記録される情報を参照することで、そのバッファを確保した関数の情報を抽出することがある。
ここで、本発明のデータ処理装置を構成する各処理手段はコンピュータプログラムでも実現できるものであり、このコンピュータプログラムは、適当な記録媒体に記録して提供されたり、ネットワークを介して提供され、本発明を実施する際にインストールされてCPUなどの制御手段上で動作することにより本発明を実現することになる。
〔2〕本発明の分析情報提供装置
本発明の分析情報提供装置は、上記の分析情報提供処理を実現するために、(イ)バッファオーバーフロー攻撃の発生を検知したデータ処理装置より送られてくる、攻撃の対象となったバッファの存在する場所の情報と、そのバッファを確保した関数の情報とを受信するとともに、これらの情報に加えて、そのバッファ確保からバッファオーバーフロー攻撃までの関数の呼び出し履歴の情報が送られてくる場合には、その情報を受信することで、プログラム開発者に提供する分析情報を受信する受信手段と、(ロ)プログラム開発者に提供済みの分析情報を記憶する既知分析情報記憶手段を参照することで、受信手段の受信した分析情報が既にプログラム開発者に提供済みであるのか否かを判断する判断手段と、(ハ)受信手段の受信した分析情報が既知分析情報記憶手段に登録されていない場合に、その受信した分析情報をプログラム開発者に提供する提供手段と、(ニ)受信手段の受信した分析情報が既知分析情報記憶手段に登録されている場合に、その分析情報に対応付けて既知分析情報記憶手段に登録されている対処情報に基づいて、バッファオーバーフロー攻撃に対する対処処理を実行する実行手段とを備える。
この構成を採るときにあって、判断手段は、受信手段の受信した分析情報が既知分析情報記憶手段に登録されているのか否かを判断するにあたって、攻撃対象となったバッファを確保した関数からプログラム修正の施された関数までの呼び出し履歴が同じものとなるものについては、それ以降の関数呼び出し履歴が異なるものであっても同一のものとして扱って判断を行うことがある。
ここで、本発明の分析情報提供装置を構成する各処理手段はコンピュータプログラムでも実現できるものであり、このコンピュータプログラムは、適当な記録媒体に記録して提供されたり、ネットワークを介して提供され、本発明を実施する際にインストールされてCPUなどの制御手段上で動作することにより本発明を実現することになる。
〔3〕本発明の処理について
このように構成される本発明では、データ処理装置は、バッファオーバーフロー攻撃の発生を検知すると、プログラム開発者に提供する分析情報として、攻撃の対象となったバッファの存在する場所の情報と、そのバッファを確保した関数の情報とを抽出するとともに、そのバッファ確保からバッファオーバーフロー攻撃までの関数の呼び出し履歴の情報を抽出できる場合には、その情報を抽出する。
バッファオーバーフローの修正方法は大きく分けて、
(i)確保するバッファのサイズを拡張する
(ii)バッファ書き込み時にバッファサイズをチェックする
という二つが挙げられる。
(i)の修正を行うには、どのバッファをどの程度拡張すべきかを知る必要がある。
そこで、本発明では、バッファを特定するために、バッファが存在する場所とバッファを確保した場所とを利用する。バッファが存在する場所としては、主にスタックメモリとヒープメモリがある。
スタックメモリ上のバッファが確保されるのは、関数が呼び出された直後であり、本発明では、オーバーフロー発生時のフレームポインタから攻撃対象となったバッファの先頭をまたぐまでスタックトレースを行い、最終的にたどり着くフレームポインタの直前のフレームポインタに近接するリターンアドレスを抽出することで、バッファを確保した関数を特定する。
また、ヒープメモリ上のバッファが確保されるのは、ヒープメモリ確保関数が呼ばれたときであり、本発明では、ヒープメモリ確保関数が呼び出されたときにスタックトップまでスタックトレースを行うことで関数の呼び出し履歴の情報(どのようなモジュール構成に従って呼び出されたのかについての情報)を取得して、その情報をヒープメモリ上に確保されたバッファの情報に対応付けて記録しておき、攻撃の対象となったバッファがヒープメモリに存在するときには、その記録情報を参照することで、バッファを確保した関数の情報を特定する。
一方、(ii)の修正を行うには、(i)の情報に加えて、どこでバッファのサイズをチェックするべきかを知る必要がある。バッファサイズのチェックを行うべき契機は、バッファが確保されてからオーバーフローが発生するまでである。
そこで、本発明では、その場所を特定するために、オーバーフロー発生時のフレームポインタからバッファを確保した関数までスタックトレースを行うことで、バッファ確保からバッファオーバーフロー攻撃までの関数の呼び出し履歴の情報を抽出する。
データ処理装置は、このようにして取得した情報をプログラム開発者に提供する分析情報として分析情報提供装置に通知し、これを受けて、分析情報提供装置は、既知分析情報記憶手段を参照することで、通知された分析情報が既にプログラム開発者に提供済みであるのか否かを判断して、未だ提供していないことを判断するときには、通知された分析情報をプログラム開発者に提供する。
この分析情報の提供を受けて、プログラム開発者は、提供された分析情報を元にプログラムを(1)又は(2)の方法で修正し、既知分析情報記憶手段に登録される分析情報に、その修正方法((1)または(2)であることを示す情報)を反映する。さらに、(2)の方法で修正した場合には、既知分析情報記憶手段に登録される分析情報に、そのバッファのサイズチェックを行った場所を反映する。その他に、修正パッチの在処などの対処情報もあれば、それについても既知分析情報記憶手段に登録される分析情報に反映する。
このようにして修正方法を分析情報に反映することで、同一のバッファが異なった関数呼び出し履歴でオーバーフローしたときにも、既知の分析情報であるのか否かの判断を適切に行えるようにする。
そして、分析情報提供装置は、データ処理装置から通知された分析情報が既知分析情報記憶手段に登録されていることを判断する場合には、その分析情報に対応付けて既知分析情報記憶手段に登録されている対処情報に基づいて、そのバッファオーバーフロー攻撃に対する対処処理を実行する。例えば、利用者にその対処情報を提示したり、その対処情報に基づいて自動的に対処するなどの対処処理を実行するのである。
本発明によって得られる効果は、根本的な対処であるプログラムソースの修正や修正パッチの適用を迅速に行えるようになることである。
従来のバッファオーバーフロー攻撃に対する検出手法では、バッファオーバーフローが発生したことがわかっても、その原因の特定が困難であるため、根本的な対処であるプログラムソースの修正や修正パッチの適用が遅れてしまっていた。
これに対して、本発明では、発生したバッファオーバーフローが既知の脆弱性か否かを判断し、未知の脆弱性の場合には、プログラムを修正する上で必要な情報を抽出してプログラム開発者に伝達することで、迅速なプログラム修正が可能となる。そして、既知の脆弱性の場合には、プログラム開発者により登録された対処情報を提示したり、その対処情報に従って自動的に対処を行うことで、迅速に修正パッチを適用できるようになる。
次に、本発明の実施の形態について図面を参照して詳細に説明する。
図1に、本発明により実現されるバッファオーバーフロー脆弱性分析システムの一実施形態例を図示する。
この図に示すように、本発明により実現されるバッファオーバーフロー脆弱性分析システムは、バッファオーバーフローを検知するバッファオーバーフロー検知部1と、プログラム開発者がプログラムの修正箇所を特定するための情報(修正箇所情報)を抽出する修正箇所抽出部2と、発生したバッファオーバーフローが既知脆弱性(過去に発生したもの)かどうかを判定する既知脆弱性判定部3と、既知脆弱性情報(バッファオーバーフローの原因や対処情報など)を格納する既知脆弱性情報格納部4と、プログラム開発者と対話することで既知脆弱性情報を既知脆弱性情報格納部4に登録する対話登録部5と、既知脆弱性情報格納部4に格納されている既知脆弱性情報を元に、バッファオーバーフローに対する対処処理を実行する対処部6とから構成される。
ここで、図中に示す7はスタックメモリ、8はヒープメモリ確保関数呼び出し履歴格納部、9はヒープメモリ確保関数呼び出し履歴記録部である。
このヒープメモリ確保関数呼び出し履歴格納部8は、図2に示すように、ヒープメモリ上に確保されたバッファのアドレスに対応付けて、ヒープメモリ確保関数の呼び出し履歴の情報(どのようなモジュール構成に従って呼び出されたのかについての情報)を格納するものであり、ヒープメモリ確保関数呼び出し履歴記録部9は、図3に示すように、ヒープメモリ確保関数が呼び出されるときに(ヒープメモリ上にバッファが確保されるときに呼び出される)、スタックトップまでスタックトレースを行い、ヒープメモリ確保関数が呼び出されるまでの関数履歴を特定して、それをヒープメモリ上に確保されたバッファのアドレスに対応付けてヒープメモリ確保関数呼び出し履歴格納部8に記録する処理を実行する。
このバッファオーバーフロー脆弱性分析システムは、具体的には、図4に示すように、バッファオーバーフロー攻撃の対象となるプログラムを展開する複数の利用者端末10と修正箇所情報提供装置11とプログラム開発者端末12とがネットワーク13を介して接続されるシステムで構築されるものであり、利用者端末10には、図1に示したバッファオーバーフロー検知部1/修正箇所抽出部2/ヒープメモリ確保関数呼び出し履歴格納部8/ヒープメモリ確保関数呼び出し履歴記録部9が備えられ、修正箇所情報提供装置11には、図1に示した既知脆弱性判定部3/既知脆弱性情報格納部4/対話登録部5/対処部6が備えられることになる。
なお、修正箇所情報提供装置11については、プログラム開発者端末12に組み込まれる形で用意されることもある。
次に、このように構成されるバッファオーバーフロー脆弱性分析システムの大まかな処理の流れについて説明する。
先ず最初に、バッファオーバーフロー検知部1がバッファオーバーフローを検知すると、オーバーフローの発生したバッファの場所(スタックメモリまたはヒープメモリ)を特定した上で、修正箇所抽出部2に制御を渡す。
これを受けて、修正箇所抽出部2は、バッファを確保した場所(どの関数がバッファを確保したのかの情報)を抽出する。さらに、バッファサイズのチェックを行うべき場所を特定するために、オーバーフロー発生時のフレームポインタを用いてバッファを確保した関数までスタックトレースを行うことで、バッファ確保からバッファオーバーフロー攻撃までの関数の呼び出し履歴を抽出する。そして、このようにして抽出した修正箇所情報を既知脆弱性判定部3に渡す。
これを受けて、既知脆弱性判定部3は、修正箇所抽出部2より渡された修正箇所情報が既知脆弱性情報格納部4に格納されているのか否かをチェックして、その修正箇所情報が既知脆弱性情報格納部4に格納されていないことを判断する場合には、その修正箇所情報を既知脆弱性情報格納部4に格納するとともに、対話登録部5を介して、プログラム開発者にその修正箇所情報を伝達する。
これを受けて、プログラム開発者が既知脆弱性情報(バッファオーバーフローの原因や対処情報など)を入力してくるので、対話登録部5は、それを入力して、既知脆弱性情報格納部4に格納する。
一方、既知脆弱性判定部3は、修正箇所抽出部2より渡された修正箇所情報が既知脆弱性情報格納部4に格納されていることを判断する場合には、該当する既知脆弱性情報からプログラム開発者が作成した対処情報を取得して、それを対処部6に伝達する。
これを受けて、対処部6は、既知脆弱性判定部3から受け取った対処情報を元に、その対処情報を利用者に提示したり、その対処情報に基づいて自動的に対処を行う。
次に、このように構成されるバッファオーバーフロー脆弱性分析システムの詳細な処理について説明する。
〔1〕バッファオーバーフロー検知部1の処理
先ず最初に、バッファオーバーフロー検知部1の処理について説明する。
バッファオーバーフロー検知部1には、本発明者らが先に出願した特願2004-40962で開示したバッファオーバーフロー検知技術を利用することができる。
この本発明者らが開示したバッファオーバーフロー検知技術では、標準コピー関数の呼び出しをプログラム実行時にフックして、コピー先のバッファがスタックメモリに存在しない場合には、ヒープ管理ブロックを探索することで、ヒープメモリ上に確保されたバッファのバッファオーバーフローについても検知できるようにしている。
これまでのバッファオーバーフロー検知の従来技術では、ヒープメモリ上に確保されたバッファのバッファオーバーフローについては検知できないが、この本発明者らが開示したバッファオーバーフロー検知技術では、その検知が可能となるという点に大きな特徴があり、これにより本発明を構成するバッファオーバーフロー検知部1を実現できるようになる。
図5に、本発明者らが開示した発明により構成されるバッファオーバーフロー検知部1の一構成例を図示する。
この図に示すように、バッファオーバーフロー検知部1は、攻撃対象プロセス20に対して行われるバッファオーバーフロー攻撃を検知するために、バッファオーバーフロー攻撃の検知処理を行う標準コピー関数フック用ライブラリ21と、攻撃対象プロセス20に標準コピー関数フック用ライブラリ21をロードさせる処理を行うライブラリ注入プログラム22とを備える。
バッファオーバーフロー攻撃とは、コピー元バッファに攻撃用データを書き込むことで実行され、攻撃対象プロセス20がコピー元及びコピー先のバッファを指定して標準コピー関数を呼び出すことで、コピー元バッファからコピー先バッファへコピーを行うと、コピー先バッファがオーバーフローさせられることでリターンアドレス等が書き換えられてしまうという攻撃である。
バッファオーバーフロー検知部1は、このようなバッファオーバーフロー攻撃を検知する処理を実行するものである。
図6に、この検知処理を実現すべく用意される標準コピー関数フック用ライブラリ21の一構成例を図示する。
この図に示すように、標準コピー関数フック用ライブラリ21は、ライブラリがロードされた際にOSやローダから呼び出されるライブラリ初期化関数210と、各標準コピー関数に対応するフック関数(バッファオーバーフロー攻撃が行われているのか否かを検出する機能を持つ)の集まりである標準コピー関数用フック関数群211と、標準コピー関数のエントリポイントのコピー先であるトランポリンコード領域212とを備える。
このように構成されるバッファオーバーフロー検知部1では、まず、ライブラリ注入プログラム22を起動することにより、標準コピー関数フック用ライブラリ21を攻撃対象プロセス空間内に注入する。
注入された標準コピー関数フック用ライブラリ21のライブラリ初期化関数210は、攻撃対象プロセス20を書き換えることにより、攻撃対象プロセス20による標準コピー関数の呼び出しをフックする。このフックによりフック関数に制御が渡り、バッファオーバーフロー攻撃が発生している場合には、フック関数がそれを検知し、攻撃対象プロセス20を強制終了する。
次に、図7と図8とを用いて、標準コピー関数フック用ライブラリ21内のライブラリ初期化関数210が行う処理について説明する。
ここで、図7中に示す30は攻撃対象プロセス20に係るプログラム部分であって、標準コピー関数の一例である“strcpy関数”の呼び出し部分と、その“strcpy関数”の先頭部分とを示している。ここで、“strcpy関数”の呼び出しの際に指定される"dst" はコピー先バッファのアドレスを示し、“strcpy関数”の呼び出しの際に指定される"src" はコピー元バッファのアドレスを示している。
また、31は図6のトランポリンコード領域212に対応している。また、32はライブラリ初期化関数210が実行された直後の“strcpy関数”の呼び出し部分と、その“strcpy関数”の先頭部分とを示している。また、33はライブラリ初期化関数210が実行された直後のトランポリンコード領域212を示している。また、34は“strcpy関数”に対応するフック関数を示している。
標準コピー関数フック用ライブラリ21内のライブラリ初期化関数210は、先ず最初に、30にある“strcpy関数”の先頭部分を、31のトランポリンコード領域内にある空きスペースにコピーする。この結果、31は33に示す状態になる。
続いて、30にある“strcpy関数”の先頭部分を、この“strcpy関数”に対応するフック関数にジャンプする命令(jmp hook-strcpy)に書き換える。この結果、30は32に示す状態になる。
これにより、攻撃対象プロセス20から“strcpy関数”が呼び出されると、ジャンプ命令に従って、34に示すこの“strcpy関数”に対応するフック関数に制御が渡り、バッファサイズのチェックを行うことができるようになる。
このフック関数は、バッファサイズをチェックした結果、バッファオーバーフロー攻撃が発生していないことを判断するときには、“call trampoline-strcpy”という命令コードに従って、トランポリンコード領域33にコピーされた“strcpy関数”の先頭部分を実行し、その後、トランポリンコード領域33に記述される“jmp strcpy+N”という命令コードに従って、“strcpy関数”に制御を戻すことになる。
図8に、標準コピー関数フック用ライブラリ21内のライブラリ初期化関数210が実行する処理フローを図示する。
次に、この処理フローに従って、ライブラリ初期化関数210の実行する処理について詳細に説明する。
ライブラリ初期化関数210は、図8の処理フローに示すように、先ず最初に、ステップ20で、ライブラリ初期化関数210を処理するスレッド以外の全てのスレッドを一時停止する。
続いて、ステップ21で、標準コピー関数のエントリポイントを取得し、続くステップ22で、その取得したエントリポイントをフック関数へジャンプする命令に書き換える際に上書きされることになる命令を、トランポリンコード領域212(図7の31)へコピーする。
続いて、ステップ23で、標準コピー関数のエントリポイント(後述する処理で書き換えることになる)を実行中のスレッドが存在しないかどうかを判断して、存在する場合には、ステップ24に進んで、標準コピー関数のエントリポイントを実行中のスレッドを再開し、処理を進めてエントリポイントが実行中とならないようにした後に再度停止してから、ステップ23に戻る。
そして、ステップ23に戻ることを繰り返していくことで、全スレッドが標準コピー関数のエントリポイントを実行していない状態を作り出すと、ステップ25に進んで、CPUの命令キャッシュの内容を消去する。続いて、ステップ26で、標準コピー関数のエントリポイントをフック関数へジャンプする命令に書き換える。
続いて、ステップ27で、全ての標準コピー関数のエントリポイントを書き換えたかどうか判断して、まだ書き換えていない標準コピー関数のエントリポイントがある場合には、ステップ21に戻る。
そして、ステップ21に戻ることを繰り返していくことで、全ての標準コピー関数のエントリポイントを書き換えたことを判断すると、ステップ28に進んで、全てのスレッドを再開して、処理を終了する。
このようにして、ライブラリ初期化関数210は、攻撃対象プロセス20により呼び出される標準コピー関数のエントリポイントをフック関数へジャンプする命令に書き換えることにより、攻撃対象プロセス20による標準コピー関数の呼び出しをフックしてフック関数に制御が渡るように処理するのである。
次に、図9〜図11を用いて、標準コピー関数用フック関数群211を構成するフック関数が行う処理について説明する。
ここで、図9及び図10中に示す40は攻撃対象プロセス20のスタックメモリ(図1の7に相当するもので、呼び出された関数についての情報を記録するフレームが関数を単位としてスタックされている)を示し、図10中に示す41はヒープメモリ(プロセスの実行時に動的にバッファを割り当てる場合に使われるメモリ領域)を示し、図10中に示す42はヒープメモリ41を管理するヒープ管理ブロックを示している。
フック関数は、攻撃対象プロセス20のスタックメモリ40を探索対象として、現在のフレームポインタが指す領域から呼び出し元関数のフレームポインタを順に辿ることで、コピー先バッファの先頭(攻撃対象プロセス20が標準コピー関数を呼び出すときに指定したコピー先バッファのアドレス)がどの関数フレームに属するのかを求めて、その属する関数フレームを求めると、図9に示すように、コピー先バッファの先頭からその求めた関数フレームの持つフレームポインタの直前までの距離をコピー先バッファのサイズとして求める。
このようにして、フック関数は、現在のフレームポインタが指す領域から呼び出し元関数のフレームポインタを順に辿ることになるが、図10に示すように、コピー先バッファの先頭がヒープメモリ41上を指している場合は、スタックメモリ40にはコピー先バッファが存在しないので、最終的にスタックボトムに到達することになる。
これから、フック関数は、フレームポインタを順に辿ることでスタックボトムに到達すると、コピー先バッファが動的に割り当てられたことでヒープメモリ41に存在する可能性があることを考慮して、図10に示すように、ヒープ管理ブロック42でコピー先バッファが管理されているかどうかを探し出し(コピー先バッファの先頭アドレスが管理されているのかをチェックすることで探し出し)、管理されている場合には、その管理されているバッファサイズをコピー先バッファのサイズとして求める。
ここで、スタックメモリ41のスタックボトムのアドレスについては実行環境によって固定であることがあり、その場合には、その固定値をスタックボトムとして取得することになるが、スタックボトムが固定ではない実行環境では、スレッド環境ブロック(TEB:Thread Environment Block)によって管理されているため、これを参照することで取得することになる。
図11に、標準コピー関数用フック関数群211を構成するフック関数が実行する処理フローを図示する。
次に、この処理フローに従って、フック関数の実行する処理について詳細に説明する。
フック関数は、図11の処理フローに示すように、先ず最初に、ステップ30で、各標準コピー関数の仕様からコピー元バッファのサイズを求める。続いて、ステップ31で、スタックトップとスタックボトムのアドレスを取得し、続くステップ32で、フレームポインタ(起点は自関数が呼び出された時点でのフレームポインタ)が指す領域がスタック内であるのかどうかを判断する。
このステップ32の判断処理に従って、フレームポインタが指す領域がスタック内であることを判断する場合には、ステップ33に進んで、呼び出し元関数のフレームを取得し、続くステップ34で、呼び出し元関数のフレームにコピー先バッファが属するのかどうかを判断する。
このステップ34の判断処理に従って、呼び出し元関数のフレームにコピー先バッファが属さないことを判断する場合には、ステップ35に進んで、フレームポインタを格納する変数を呼び出し元関数のフレームポインタに更新し、ステップ32に戻る。
一方、ステップ34の判断処理に従って、呼び出し元関数のフレームにコピー先バッファが属することを判断する場合には、ステップ36に進んで、図9に示すように、コピー先バッファの先頭からその呼び出し元関数のフレームポインタの直前までの距離をコピー先バッファのサイズとして求めてから、後述するステップ39の処理を行う。
一方、ステップ32の判断処理に従って、フレームポインタが指す領域がスタック内でないことを判断する場合には、ステップ37に進んで、コピー先バッファがヒープ管理ブロック42で管理されているかを調べる。
このステップ37の判断処理に従って、コピー先バッファがヒープ管理ブロック42で管理されていないことを判断する場合には、バッファサイズのチェックは行わずに、ステップ41に進んで、トランポリンコード領域212(図7の31)にコピーされた標準コピー関数の先頭部分を呼び出すことにより、標準コピー関数に制御を渡すことで攻撃対象プロセス20の処理を継続する。
一方、ステップ37の判断処理に従って、コピー先バッファがヒープ管理ブロック42で管理されていることを判断する場合には、ステップ38に進んで、その管理されているバッファサイズに従ってコピー先バッファのサイズを取得する。
続いて、ステップ39で、取得したコピー元バッファのサイズと取得したコピー先バッファのサイズとを比較して、コピー先バッファのサイズの方がコピー元バッファのサイズよりも小さいことを判断する場合には、バッファオーバーフロー攻撃が行われたことを検出して、ステップ40に進んで、攻撃対象プロセス20を強制終了する。
一方、ステップ39の判断処理に従って、コピー先バッファのサイズの方がコピー元バッファのサイズよりも大きいことを判断する場合には、バッファオーバーフロー攻撃が行われなかったことを検出して、ステップ41に進んで、トランポリンコード領域212(図3の31)にコピーされた標準コピー関数の先頭部分を呼び出すことにより、標準コピー関数に制御を渡すことで攻撃対象プロセス20の処理を継続する。
このようにして、フック関数は、攻撃対象プロセス20が標準コピー関数を呼び出すときに動作に入って、コピー元バッファのサイズとコピー先バッファのサイズとを取得して比較し、それに従って、攻撃対象プロセス20に対してバッファオーバーフロー攻撃が行われたのか否かを検出するように処理するのである。
この構成に従って、図1に示したバッファオーバーフロー検知部1は、標準コピー関数の呼び出しをプログラム実行時にフックして、コピー先のバッファがスタックメモリに存在しない場合には、ヒープ管理ブロックを探索することで、ヒープメモリ上に確保されたバッファのバッファオーバーフロー攻撃についても検知できるようにしている。
〔2〕修正箇所抽出部2の処理
次に、図1に示した修正箇所抽出部2の処理について説明する。
修正箇所抽出部2は、オーバーフローしたバッファの場所に応じた方法で、バッファを確保した場所の情報(どの関数がバッファを確保したのかの情報)を抽出して、それを既知脆弱性判定部3に渡す処理を行う。
すなわち、修正箇所抽出部2は、オーバーフローしたバッファがスタックメモリ7上に存在した場合には、図12に示すように、まず、オーバーフローが発生した際のフレームポインタを用いて、オーバーフローしたバッファの先頭をまたぐまでスタックトレースを行う。その後、最終的にたどり着くフレームポインタの直前のフレームポインタに隣接するリターンアドレスを、オーバーフローしたバッファを確保した場所として抽出する。
さらに、バッファを確保した関数からバッファオーバーフロー攻撃までの関数がバッファサイズのチェックを行うべき場所となることに対応して、修正箇所抽出部2は、バッファサイズのチェックを行うべき場所として、図12に示す関数の呼び出し履歴も抽出する。
このようにして、修正箇所抽出部2は、オーバーフローしたバッファがスタックメモリ7上に存在した場合には、図13に示すような修正箇所情報(プログラム開発者がプログラムの修正を行う上で必要となる情報)を抽出するように処理するのである。
一方、修正箇所抽出部2は、オーバーフローしたバッファがヒープメモリ上に存在した場合には、そのバッファのアドレスをキーにして、図2に示すようなデータ構造を持つヒープメモリ確保関数呼び出し履歴格納部8を検索することで、オーバーフローしたバッファを確保した場所を抽出する。
ヒープメモリ上にバッファを確保するためには、ヒープメモリ確保関数を呼び出す必要がある。そこで、バッファが確保された場所を特定可能とするために、ヒープメモリ確保関数呼び出し履歴記録部9は、あらかじめヒープメモリ確保関数をフックしておき、ヒープメモリ確保関数が呼び出される度に、図14に示すように、スタックトップまでスタックトレースを行って、ヒープメモリ確保関数が呼ばれるまでの関数履歴をヒープメモリ確保関数呼び出し履歴格納部8(図2に示したデータ構造を持つ)に記録しておく。
これから、修正箇所抽出部2は、オーバーフローしたバッファがヒープメモリ上に存在した場合には、そのバッファのアドレスをキーにしてヒープメモリ確保関数呼び出し履歴格納部8を検索することで、オーバーフローしたバッファを確保した場所を抽出するのである。
このようにして、修正箇所抽出部2は、オーバーフローしたバッファがヒープメモリ上に存在した場合には、図15に示すような修正箇所情報を抽出するように処理するのである。
次に、図16に示す処理フローに従って、修正箇所抽出部2の実行する処理について説明する。
すなわち、修正箇所抽出部2は、バッファオーバーフロー検知部1がバッファオーバーフロー攻撃を検知すると、図16の処理フローに示すように、先ず最初に、ステップ40で、バッファオーバーフロー検知部1から通知される検知結果に従って、オーバーフローしたバッファの存在する場所がスタックメモリ上にあるのか、ヒープメモリ上にあるのかを判定する。
この判定処理に従って、オーバーフローしたバッファがヒープメモリ上にあることを判断する場合には、ステップ41に進んで、ヒープメモリ確保関数呼び出し履歴格納部8を参照することで、バッファ確保時の関数呼び出し履歴を取得する。
そして、続くステップ42で、この取得した関数呼び出し履歴の情報を修正箇所情報(図15に示すもの)として通知しつつ、既知脆弱性判定部3に制御を渡す。
一方、オーバーフローしたバッファがスタックメモリ上にあることを判断する場合には、ステップ43に進んで、オーバーフローしたバッファの先頭をまたぐまでスタックトレースを行うことでバッファを確保した関数を特定する。続いて、ステップ44で、バッファを確保した関数からオーバーフローした関数までの関数履歴を取得する。
そして、続くステップ45で、この特定したバッファ確保の関数の情報と、この取得した関数呼び出し履歴の情報とを修正箇所情報(図13に示すもの)として通知しつつ、既知脆弱性判定部3に制御を渡す。
このようにして、修正箇所抽出部2は、オーバーフローしたバッファの場所に応じた方法で修正箇所情報を抽出して、それを既知脆弱性判定部3に通知するように処理するのである。
〔3〕既知脆弱性判定部3の処理
次に、図1に示した既知脆弱性判定部3の処理について説明する。
既知脆弱性判定部3は、修正箇所抽出部2より渡された修正箇所情報が既知脆弱性情報格納部4に格納されているのか否かをチェックして、その修正箇所情報が既知脆弱性情報格納部4に格納されていないことを判断する場合には、その修正箇所情報を既知脆弱性情報格納部4に格納するとともに、対話登録部5を介して、プログラム開発者に伝達し、一方、格納されていることを判断する場合には、該当する既知脆弱性情報からプログラム開発者の作成した対処情報を取得して、それを対処部6に伝達する処理を行う。
図17に、既知脆弱性情報格納部4に格納される既知脆弱性情報の一例を図示する。
この図に示すように、既知脆弱性情報格納部4は、既知脆弱性情報として、バッファが存在する場所の情報と、バッファを確保した場所の情報と、バッファオーバーフローの脆弱性についての修正方法の情報と、バッファのサイズチェックを行う場所の情報と、バッファオーバーフローが発生したときの対処情報とを格納する。
ここで、バッファが存在する場所の情報と、バッファを確保した場所の情報と、バッファのサイズチェックを行う場所の情報とについては、修正箇所抽出部2から修正箇所情報として通知されることになる。
また、バッファオーバーフローの脆弱性についての修正方法の情報(未修正であるとか、バッファサイズを拡張したとか、バッファサイズをチェックするプログラムを挿入したという情報)については、プログラム開発者が修正箇所抽出部2の抽出した修正箇所情報に基づいてプログラムを修正した場合に、その修正の元となった修正箇所情報に対応付ける形で格納されることになる。
ここで、このプログラムの修正で、バッファサイズをチェックするプログラムを挿入するという修正方法がとられた場合には、図17に示すリターンアドレスYに示すように、どの場所でその修正が行われたのかが記録されることになる。
また、バッファオーバーフローが発生したときの対処情報(例えば、修正パッチのあるURLの情報など)については、プログラム開発者により作成されて、修正箇所情報に対応付ける形で格納されることになる。
図18に、既知脆弱性判定部3の実行する処理フローを図示する。次に、この処理フローに従って、既知脆弱性判定部3の実行する処理について説明する。
既知脆弱性判定部3は、修正箇所抽出部2から修正箇所情報が渡されると、図18の処理フローに示すように、先ず最初に、ステップ50で、修正箇所抽出部2より受け取った修正箇所情報の“バッファが存在する場所”と“バッファを確保した場所”とが既知脆弱性情報格納部4に存在するのか否かをチェックする。
このチェック処理に従って、修正箇所抽出部2より受け取った修正箇所情報の“バッファが存在する場所”と“バッファを確保した場所”とが既知脆弱性情報格納部4に存在しないことを判断するときには、ステップ55に進んで、その受け取った修正箇所情報を既知脆弱性情報格納部4に格納し、続くステップ56で、対話登録部5を介して、その受け取った修正箇所情報をプログラム開発者へ伝達する。
これを受けて、プログラム開発者は、伝達された修正箇所情報に従い、この脆弱性を修正するので(バッファサイズを拡張したり、バッファサイズをチェックする修正を行う)、対話登録部5は、それに応じて、既知脆弱性情報格納部4に格納される既知脆弱性情報を更新する。すなわち、修正方法を登録するとともに、対処情報が入力される場合には、それを登録し、そして、バッファサイズをチェックする修正を行った場合には、バッファのサイズチェック場所に実際にサイズチェックした場所をマークすることにより、既知脆弱性情報格納部4に格納される既知脆弱性情報を更新するのである。
一方、既知脆弱性判定部3は、ステップ50で、修正箇所抽出部2より受け取った修正箇所情報の“バッファが存在する場所”と“バッファを確保した場所”とが既知脆弱性情報格納部4に存在することを判断するときには、ステップ51に進んで、その受け取った修正箇所情報に対応付けて格納されている修正方法が“未修正”であるのか否かをチェックする。
このチェック処理に従って、受け取った修正箇所情報に対応付けられる修正方法が“未修正”であることを判断するときには、ステップ54に進んで、バッファのサイズチェック場所が全て等しいかどうかを調べ(関数履歴が全て等しいかどうかを調べ)、等しいことを判断するときには、ステップ57に進んで、既知脆弱性情報格納部4に格納されている該当する対処情報を対処部6へ伝達する。一方、全て等しくないことを判断するときには、ステップ55に進んで、受け取った修正箇所情報を既知脆弱性情報格納部4に格納し、続くステップ56で、対話登録部5を介して、その受け取った修正箇所情報をプログラム開発者へ伝達する。
一方、ステップ51のチェック処理に従って、受け取った修正箇所情報に対応付けられる修正方法が“未修正”でないことを判断するときには、ステップ52に進んで、受け取った修正箇所情報に対応付けられる修正方法が“バッファサイズ拡張”であるのか否かをチェックする。
このチェック処理に従って、受け取った修正箇所情報に対応付けられる修正方法が“バッファサイズ拡張”であることを判断するときには、ステップ57に進んで、既知脆弱性情報格納部4に格納されている該当する対処情報を対処部6へ伝達する。一方、その修正方法が“バッファサイズ拡張”でないことを判断するとき、すなわち、その修正方法が“バッファサイズチェック”であることを判断するときには、ステップ53に進んで、バッファを確保した場所から修正箇所までに関してのみ、バッファのサイズチェック場所が等しいかどうかをチェックする。
このチェック処理に従って、バッファを確保した場所から修正箇所までのサイズチェック場所が等しいことを判断するときには、それ以降の関数履歴に関係なく既知脆弱性情報であると見なして、ステップ57に進んで、既知脆弱性情報格納部4に格納されている該当する対処情報を対処部6へ伝達する。一方、等しくないことを判断するときには、ステップ55に進んで、受け取った修正箇所情報を既知脆弱性情報格納部4に格納し、続くステップ56で、対話登録部5を介して、その受け取った修正箇所情報をプログラム開発者へ伝達する。
そして、ステップ57の処理に従って、対処部6へ該当する対処情報が伝達されるときには、これを受けて、対処部6は、利用者にその対処情報(対処法)を提示したり、その対処情報に従って自動的にバッファオーバーフローに対しての対処を実施する。
このようにして、本発明により実現されるバッファオーバーフロー脆弱性分析システムでは、発生したバッファオーバーフローが既知の脆弱性か否かを判断し、未知の脆弱性の場合には、プログラムを修正する上で必要な情報を抽出してプログラム開発者に伝達することで、迅速なプログラム修正を可能とするとともに、既知の脆弱性の場合には、プログラム開発者により登録された対処情報を提示したり、その対処情報に従って自動的に対処を行うことで、迅速に修正パッチを適用できるようになる。
本発明により実現されるバッファオーバーフロー脆弱性分析システムの一実施形態例である。 ヒープメモリ確保関数呼び出し履歴格納部のデータ構造の説明図である。 ヒープメモリ確保関数呼び出し履歴記録部の実行する処理フローである。 本発明により構成されるバッファオーバーフロー脆弱性分析システムのシステム構成例である。 バッファオーバーフロー検知部の一構成例である。 標準コピー関数フック用ライブラリの一構成例である。 ライブラリ初期化関数の行う処理の説明図である。 ライブラリ初期化関数の実行する処理フローである。 フック関数の行う処理の説明図である。 フック関数の行う処理の説明図である。 フック関数の実行する処理フローである。 修正箇所抽出部の行う処理の説明図である。 修正箇所抽出部の抽出する修正箇所情報の説明図である。 ヒープメモリ確保関数呼び出し履歴記録部の行う処理の説明図である。 修正箇所抽出部の抽出する修正箇所情報の説明図である。 修正箇所抽出部の実行する処理フローである。 既知脆弱性情報格納部に格納される既知脆弱性情報の説明図である。 既知脆弱性判定部の実行する処理フローである。
符号の説明
1 バッファオーバーフロー検知部
2 修正箇所抽出部
3 既知脆弱性判定部
4 既知脆弱性情報格納部
5 対話登録部
6 対処部
7 スタックメモリ
8 ヒープメモリ確保関数呼び出し履歴格納部
9 ヒープメモリ確保関数呼び出し履歴記録部

Claims (16)

  1. バッファオーバーフロー攻撃の対象となったプログラムの修正を行う上で必要となる分析情報を、そのプログラムの開発者に提供するための処理を行うバッファオーバーフロー脆弱性分析方法であって、
    バッファオーバーフロー攻撃の発生を検知する過程と、
    プログラム開発者に提供する分析情報として、攻撃の対象となったバッファの存在する場所の情報と、そのバッファを確保した関数の情報とを抽出するとともに、そのバッファ確保からバッファオーバーフロー攻撃までの関数の呼び出し履歴の情報を抽出できる場合には、その情報を抽出する過程とを備えることを、
    特徴とするバッファオーバーフロー脆弱性分析方法。
  2. 請求項1に記載のバッファオーバーフロー脆弱性分析方法において、
    上記抽出する過程では、オーバーフロー発生時のフレームポインタから攻撃対象となったバッファの先頭をまたぐまでスタックトレースを行い、最終的にたどり着くフレームポインタの直前のフレームポインタに近接するリターンアドレスを抽出することで、バッファを確保した関数の情報を抽出することを、
    特徴とするバッファオーバーフロー脆弱性分析方法。
  3. 請求項1に記載のバッファオーバーフロー脆弱性分析方法において、
    上記抽出する過程では、オーバーフロー発生時のフレームポインタから攻撃対象となったバッファを確保した関数までスタックトレースを行うことで、バッファ確保からバッファオーバーフロー攻撃までの関数の呼び出し履歴の情報を抽出することを、
    特徴とするバッファオーバーフロー脆弱性分析方法。
  4. 請求項1に記載のバッファオーバーフロー脆弱性分析方法において、
    ヒープメモリ確保関数が呼び出されたときにスタックトップまでスタックトレースを行うことで関数の呼び出し履歴の情報を取得して、その情報をヒープメモリ上に確保されたバッファの情報に対応付けて記憶手段に記録する過程を備え、
    上記抽出する過程では、攻撃の対象となったバッファがヒープメモリに存在することを抽出する場合には、上記記憶手段に記録される情報を参照することで、そのバッファを確保した関数の情報を抽出することを、
    特徴とするバッファオーバーフロー脆弱性分析方法。
  5. 請求項1ないし4のいずれか1項に記載のバッファオーバーフロー脆弱性分析方法において、
    プログラム開発者に提供済みの分析情報を記憶する既知分析情報記憶手段を参照することで、上記抽出した分析情報が既にプログラム開発者に提供済みであるのか否かを判断する過程と、
    上記抽出した分析情報が上記既知分析情報記憶手段に登録されていない場合に、その抽出した分析情報をプログラム開発者に提供する過程とを備えることを、
    特徴とするバッファオーバーフロー脆弱性分析方法。
  6. 請求項5に記載のバッファオーバーフロー脆弱性分析方法において、
    上記判断する過程では、上記抽出した分析情報が上記既知分析情報記憶手段に登録されているのか否かを判断するにあたって、攻撃対象となったバッファを確保した関数からプログラム修正の施された関数までの呼び出し履歴が同じものとなるものについては、それ以降の関数呼び出し履歴が異なるものであっても同一のものとして扱って判断を行うことを、
    特徴とするバッファオーバーフロー脆弱性分析方法。
  7. 請求項5又は6に記載のバッファオーバーフロー脆弱性分析方法において、
    上記抽出した分析情報が上記既知分析情報記憶手段に登録されている場合に、その分析情報に対応付けて上記既知分析情報記憶手段に登録されている対処情報に基づいて、バッファオーバーフロー攻撃に対する対処処理を実行する過程を備えることを、
    特徴とするバッファオーバーフロー脆弱性分析方法。
  8. バッファオーバーフロー攻撃の対象となったプログラムの修正を行う上で必要となる分析情報を、そのプログラムの開発者に提供するための処理を行うバッファオーバーフロー脆弱性分析システムで用いられるデータ処理装置であって、
    バッファオーバーフロー攻撃の発生を検知する手段と、
    プログラム開発者に提供する分析情報として、攻撃の対象となったバッファの存在する場所の情報と、そのバッファを確保した関数の情報とを抽出するとともに、そのバッファ確保からバッファオーバーフロー攻撃までの関数の呼び出し履歴の情報を抽出できる場合には、その情報を抽出する手段とを備えることを、
    特徴とするデータ処理装置。
  9. 請求項8に記載のデータ処理装置において、
    上記抽出する手段は、オーバーフロー発生時のフレームポインタから攻撃対象となったバッファの先頭をまたぐまでスタックトレースを行い、最終的にたどり着くフレームポインタの直前のフレームポインタに近接するリターンアドレスを抽出することで、バッファを確保した関数の情報を抽出することを、
    特徴とするデータ処理装置。
  10. 請求項8に記載のデータ処理装置において、
    上記抽出する手段は、オーバーフロー発生時のフレームポインタから攻撃対象となったバッファを確保した関数までスタックトレースを行うことで、バッファ確保からバッファオーバーフロー攻撃までの関数の呼び出し履歴の情報を抽出することを、
    特徴とするデータ処理装置。
  11. 請求項8に記載のデータ処理装置において、
    ヒープメモリ確保関数が呼び出されたときにスタックトップまでスタックトレースを行うことで関数の呼び出し履歴の情報を取得して、その情報をヒープメモリ上に確保されたバッファの情報に対応付けて記憶手段に記録する手段を備え、
    上記抽出する手段は、攻撃の対象となったバッファがヒープメモリに存在することを抽出する場合には、上記記憶手段に記録される情報を参照することで、そのバッファを確保した関数の情報を抽出することを、
    特徴とするデータ処理装置。
  12. バッファオーバーフロー攻撃の対象となったプログラムの修正を行う上で必要となる分析情報を、そのプログラムの開発者に提供するための処理を行うバッファオーバーフロー脆弱性分析システムで用いられる分析情報提供装置であって、
    バッファオーバーフロー攻撃の発生を検知したデータ処理装置より送られてくる、攻撃の対象となったバッファの存在する場所の情報と、そのバッファを確保した関数の情報とを受信するとともに、これらの情報に加えて、そのバッファ確保からバッファオーバーフロー攻撃までの関数の呼び出し履歴の情報が送られてくる場合には、その情報を受信することで、プログラム開発者に提供する分析情報を受信する手段と、
    プログラム開発者に提供済みの分析情報を記憶する既知分析情報記憶手段を参照することで、上記受信した分析情報が既にプログラム開発者に提供済みであるのか否かを判断する手段と、
    上記受信した分析情報が上記既知分析情報記憶手段に登録されていない場合に、その受信した分析情報をプログラム開発者に提供する手段とを備えることを、
    特徴とする分析情報提供装置。
  13. 請求項12に記載の分析情報提供装置において、
    上記判断する手段は、上記受信した分析情報が上記既知分析情報記憶手段に登録されているのか否かを判断するにあたって、攻撃対象となったバッファを確保した関数からプログラム修正の施された関数までの呼び出し履歴が同じものとなるものについては、それ以降の関数呼び出し履歴が異なるものであっても同一のものとして扱って判断を行うことを、
    特徴とする分析情報提供装置。
  14. 請求項12又は13に記載の分析情報提供装置において、
    上記受信した分析情報が上記既知分析情報記憶手段に登録されている場合に、その分析情報に対応付けて上記既知分析情報記憶手段に登録されている対処情報に基づいて、バッファオーバーフロー攻撃に対する対処処理を実行する手段を備えることを、
    特徴とする分析情報提供装置。
  15. 請求項8ないし11のいずれか1項に記載のデータ処理装置の持つ機能をコンピュータに実現させるための分析情報抽出処理用プログラム。
  16. 請求項12ないし14のいずれか1項に記載の分析情報提供装置の持つ機能をコンピュータに実現させるための分析情報提供処理用プログラム。
JP2004234978A 2004-08-12 2004-08-12 バッファオーバーフロー脆弱性分析方法、データ処理装置、分析情報提供装置、分析情報抽出処理用プログラムおよび分析情報提供処理用プログラム Expired - Fee Related JP4643201B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004234978A JP4643201B2 (ja) 2004-08-12 2004-08-12 バッファオーバーフロー脆弱性分析方法、データ処理装置、分析情報提供装置、分析情報抽出処理用プログラムおよび分析情報提供処理用プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004234978A JP4643201B2 (ja) 2004-08-12 2004-08-12 バッファオーバーフロー脆弱性分析方法、データ処理装置、分析情報提供装置、分析情報抽出処理用プログラムおよび分析情報提供処理用プログラム

Publications (2)

Publication Number Publication Date
JP2006053760A true JP2006053760A (ja) 2006-02-23
JP4643201B2 JP4643201B2 (ja) 2011-03-02

Family

ID=36031200

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004234978A Expired - Fee Related JP4643201B2 (ja) 2004-08-12 2004-08-12 バッファオーバーフロー脆弱性分析方法、データ処理装置、分析情報提供装置、分析情報抽出処理用プログラムおよび分析情報提供処理用プログラム

Country Status (1)

Country Link
JP (1) JP4643201B2 (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019519056A (ja) * 2016-06-16 2019-07-04 ヴァーセック システムズ,インコーポレイテッド コンピュータアプリケーション内のメモリ破損を修復するためのシステム及び方法
JP2019215847A (ja) * 2018-06-11 2019-12-19 富士通株式会社 バッファオーバーフローの低減
JP2021051745A (ja) * 2019-09-23 2021-04-01 株式会社デンソー コンピュータ装置およびメモリ管理方法
US11113407B2 (en) 2014-06-24 2021-09-07 Virsec Systems, Inc. System and methods for automated detection of input and output validation and resource management vulnerability
US11146572B2 (en) 2013-09-12 2021-10-12 Virsec Systems, Inc. Automated runtime detection of malware
US11599634B1 (en) 2006-02-09 2023-03-07 Virsec Systems, Inc. System and methods for run time detection and correction of memory corruption
US11816217B2 (en) * 2020-04-10 2023-11-14 Vmware, Inc. Decoy memory allocation

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0922369A (ja) * 1995-07-07 1997-01-21 Fujitsu Ltd マルチタスキング方式のカーネルにおける不正動作検出方法
JPH09128267A (ja) * 1995-10-31 1997-05-16 Nec Corp データ処理装置およびデータ処理方法
JP2001216161A (ja) * 2000-02-04 2001-08-10 Internatl Business Mach Corp <Ibm> メモリ装置、スタック保護システム、コンピュータシステム、コンパイラ、スタック保護方法、記憶媒体及びプログラム伝送装置
JP2002328896A (ja) * 2001-04-27 2002-11-15 Nippon Telegr & Teleph Corp <Ntt> 不正アクセス対処ルール自動設定装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0922369A (ja) * 1995-07-07 1997-01-21 Fujitsu Ltd マルチタスキング方式のカーネルにおける不正動作検出方法
JPH09128267A (ja) * 1995-10-31 1997-05-16 Nec Corp データ処理装置およびデータ処理方法
JP2001216161A (ja) * 2000-02-04 2001-08-10 Internatl Business Mach Corp <Ibm> メモリ装置、スタック保護システム、コンピュータシステム、コンパイラ、スタック保護方法、記憶媒体及びプログラム伝送装置
JP2002328896A (ja) * 2001-04-27 2002-11-15 Nippon Telegr & Teleph Corp <Ntt> 不正アクセス対処ルール自動設定装置

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11599634B1 (en) 2006-02-09 2023-03-07 Virsec Systems, Inc. System and methods for run time detection and correction of memory corruption
US11146572B2 (en) 2013-09-12 2021-10-12 Virsec Systems, Inc. Automated runtime detection of malware
US11113407B2 (en) 2014-06-24 2021-09-07 Virsec Systems, Inc. System and methods for automated detection of input and output validation and resource management vulnerability
JP2019519056A (ja) * 2016-06-16 2019-07-04 ヴァーセック システムズ,インコーポレイテッド コンピュータアプリケーション内のメモリ破損を修復するためのシステム及び方法
US11409870B2 (en) 2016-06-16 2022-08-09 Virsec Systems, Inc. Systems and methods for remediating memory corruption in a computer application
JP2019215847A (ja) * 2018-06-11 2019-12-19 富士通株式会社 バッファオーバーフローの低減
JP2021051745A (ja) * 2019-09-23 2021-04-01 株式会社デンソー コンピュータ装置およびメモリ管理方法
US11816217B2 (en) * 2020-04-10 2023-11-14 Vmware, Inc. Decoy memory allocation

Also Published As

Publication number Publication date
JP4643201B2 (ja) 2011-03-02

Similar Documents

Publication Publication Date Title
US10460099B2 (en) System and method of detecting malicious code in files
US9846779B2 (en) Detecting a return-oriented programming exploit
JP4518564B2 (ja) 不正コード実行の防止方法、不正コード実行の防止用プログラム、及び不正コード実行の防止用プログラムの記録媒体
CN106991324B (zh) 一种基于内存保护类型监控的恶意代码跟踪识别方法
US8719935B2 (en) Mitigating false positives in malware detection
US10691800B2 (en) System and method for detection of malicious code in the address space of processes
KR102075372B1 (ko) 안전한 도메인과 덜 안전한 도메인을 갖는 데이터 처리장치에서의 예외처리
AU2006210698B2 (en) Intrusion detection for computer programs
US8763128B2 (en) Apparatus and method for detecting malicious files
US20080148399A1 (en) Protection against stack buffer overrun exploitation
US20130239214A1 (en) Method for detecting and removing malware
CN102737188A (zh) 检测恶意网页的方法及装置
CN107330328B (zh) 防御病毒攻击的方法、装置及服务器
US9910983B2 (en) Malware detection
KR101064164B1 (ko) 리눅스 커널 기반 스마트 플랫폼 내에서의 커널 무결성 검사 및 변조된 커널 데이터 복구 방법
JP4643201B2 (ja) バッファオーバーフロー脆弱性分析方法、データ処理装置、分析情報提供装置、分析情報抽出処理用プログラムおよび分析情報提供処理用プログラム
CN109472135B (zh) 一种检测进程注入的方法、装置及存储介质
US11194899B2 (en) Apparatus and methods for transitioning between a secure area and a less-secure area
CN109583206B (zh) 监控应用程序的访问进程的方法、装置、设备及存储介质
KR20100026195A (ko) 시스템 보호 장치 및 방법
CN112784261A (zh) 用于程序运行的方法及相应的系统、计算机设备和介质
EP3040895A1 (en) System and method for protecting a device against return-oriented programming attacks
EP3293660A1 (en) System and method of detecting malicious code in files
JP4358648B2 (ja) スタックスマッシング攻撃防御方法、スタックスマッシング攻撃防御装置及びスタックスマッシング攻撃防御プログラム
JP7476140B2 (ja) 情報処理装置、情報処理方法、およびプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060725

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091006

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091204

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20091204

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20100331

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100420

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100601

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

R150 Certificate of patent or registration of utility model

Ref document number: 4643201

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

Year of fee payment: 3

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees