JP2006106939A - 侵入検知方法及び侵入検知装置並びにプログラム - Google Patents

侵入検知方法及び侵入検知装置並びにプログラム Download PDF

Info

Publication number
JP2006106939A
JP2006106939A JP2004290053A JP2004290053A JP2006106939A JP 2006106939 A JP2006106939 A JP 2006106939A JP 2004290053 A JP2004290053 A JP 2004290053A JP 2004290053 A JP2004290053 A JP 2004290053A JP 2006106939 A JP2006106939 A JP 2006106939A
Authority
JP
Japan
Prior art keywords
system call
program
monitoring target
intrusion detection
target 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.)
Pending
Application number
JP2004290053A
Other languages
English (en)
Inventor
Hiroyasu Nishiyama
博泰 西山
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2004290053A priority Critical patent/JP2006106939A/ja
Publication of JP2006106939A publication Critical patent/JP2006106939A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】 コンピュータへの不正プログラムの進入を検知する侵入検知方法及び侵入検知装置並びにプログラムを提供する。
【解決手段】 予め監視対象プログラムを静的に解析し、システムコールと、当該システムコールまでの経路情報とを対応付けて記憶する。監視対象プログラムを実行し、システムコールを要求すると、当該システムコール及び当該システムコールまでの経路情報が、予め解析したシステムコール及び当該システムコールに対応する経路情報に一致するか否か判定する。一致しない場合、不正侵入があったと判定し、システム管理者への通知、監視対象プログラムの停止やスローダウン等を指示する。
【選択図】 図1

Description

本発明は、コンピュータへの不正プログラムの進入を検知する侵入検知方法及び侵入検知装置並びにプログラムに関するものである。
コンピュータシステムのセキュリティホールを攻撃して侵入するウイルスやワーム等の不正プログラムは、侵入したコンピュータの制御を奪い、コンピュータそのものや当該コンピュータに格納されているデータの破壊、他コンピュータへの不正なデータの送信等を行う。このような不正プログラムに対応するため、プログラムやシステムの挙動を監視して、コンピュータの制御が奪われたか否かを検知する侵入検知システム(IDS:Intrusion Detection System)がある。
侵入検知の例として、Wagnerらによって提唱された、不正プログラムによるプログラムの実行制御の異常を、プログラムの静的解析と外部からのプログラム実行状態の監視により確認する方法がある(非特許文献1)。
この方法では、予め、監視対象プログラムの制御フローを解析して、当該プログラムの発行するシステムコール(system call)の発行シーケンスを解析しておく。システムコールとは、OS(Operating System)の機能を、OS上で動作するアプリケーションプログラムで呼び出すことである。監視対象プログラム実行時に、システムコールの発行過程を外部から監視し、その発行シーケンスが、予め解析したシステムコール発行シーケンスと合致するかを判定することにより、当該プログラムが不正な動作を行ったかどうか確認する。
Wagnerらの方法を具体的に説明する。図10は、Wagnerらによる侵入検知の方法を説明する図である。図10(a)は、監視対象プログラム1001の制御フローを示している。ここで、丸で囲んだ要素は、監視対象プログラムのシステムコールの発行を、矢印はシステムコール間の制御の遷移を表している。
図10(b)は、図10(a)に示す監視対象プログラム1001のシステムコール発行シーケンスを示す。ここでは、監視対象プログラムのシステムコール発行シーケンスを文脈自由な文法形式で表したものをマッチング用文法として説明する。図10(b)は、監視対象プログラム1001のマッチング用文法1002の一例である。ここで、「Entry」はプログラムの開始点を示し、「*」は0回以上の繰り返しを示す。
マッチング用文法1002は、「open」システムコールを発行した後に、「read」システムコールを0回以上繰り返し発行し、その後、「close」、「exec」、「exit」の順でシステムコールを発行することを示している。
図10(c)は、Wagnerらの方法による侵入検知システムの概要を示している。Wagnerらの方法による侵入検知システムは、監視対象プログラム1001、マッチング用文法1002、監視プログラム1003等を備える。
予め、監視対象プログラム1001を解析し、マッチング用文法1002を生成しておく。監視対象プログラム1001は、システムコールを発行する場合、当該システムコールを示す情報を監視プログラム1003に送信する。監視プログラム1003は、マッチング用文法1002を参照し、監視対象プログラム1001のシステムコール発行シーケンスが、マッチング用文法1002に示すシステムコール発行シーケンスと一致するか否か判定する。システムコールシーケンスが一致しない場合は、外部からの侵入によってプログラムの制御が奪われた可能性があるので、監視プログラム1003は、監視対象プログラム1001の停止、スローダウン、システム管理者への通知を行う。
D.Wagner and D.Dean. Intrusion Detection via Static Analysis,2001 IEEE Symposium on Security and Privacy,IEEE,2001.
上述したWagnerらの侵入検知方法では、不正プログラムの攻撃により監視対象プログラムの制御が奪われた後のシステムコールの発行シーケンスが、元のシステムコール発行シーケンスと一致する場合、不正侵入があったか否か検知することができない。
不正侵入を検知できない場合の例を図11を参照して説明する。図11(a)において、監視対象プログラム1101は、関数「main」から関数「foo」を呼び出している。関数「foo」の中で、大きさ10バイトの配列「buf」を宣言し、システムコール「gets」により、配列「buf」にデータを読み込んでいる。「gets」を呼び出した後、「return」で関数「main」に戻り、システムコール「exec」、「exit」を発行している。
監視対象プログラム1101の、Wagnerらの方法によるマッチング用文法の一例を、図11(b)のマッチング用文法1102に示す。マッチング用文法1102に示すように、監視対象プログラム1101はシステムコールを「gets」、「exec」、「exit」の順に発行する。
図11(c)は、監視対象プログラム1101が不正プログラムに攻撃される前、即ち、監視対象プログラム1101が正常に実行された場合のスタックフレームの状態の一例を示す。配列「buf」1103に対応する領域は、関数「foo」のアクティベーションレコード中に確保されている。宣言した配列「buf」1103の下の「PC」1104には、関数「foo」の戻りアドレス「main+m1」が格納されている。
監視対象プログラム1101は次のように動作する。監視対象プログラム1101は、関数「main」から呼び出した関数「foo」の中で「gets」により配列「buf」にデータを読み込んだ後、「return」で「PC」1104を参照し、関数「foo」の戻りアドレス「main+m1」を得て、関数「main」に戻り、システムコール「exec」、「exit」を実行する。
図11(d)は、不正プログラムが実行された後に監視対象プログラム1101が実行された場合のスタックフレームの状態の一例を示す。配列「buf」1103に対応する領域は、関数「foo」のアクティベーションレコード中に確保されている。
監視対象プログラム1101は次のように動作する。監視対象プログラム1101は、関数「main」から呼び出した関数「foo」の中で、システムコール「gets」により配列「buf」にデータを読み込む。ここまでは、監視対象プログラム1101が正常に実行された場合と同じである。
不正プログラムによる攻撃を受けたことにより、「gets」の呼び出しで、配列「buf」1103の領域長10バイトを超えた不正なデータが読み込まれる。すると、本来正しい戻りアドレスが格納されているはずの「PC」1104に、「gets」の呼び出しにより読み込まれた不正なデータが書き込まれ、関数「foo」の戻りアドレスが、攻撃コード1105のアドレスを示すように変更される。また、不正プログラムにより、スタック上に攻撃コード1105が書き込まれる。当該アドレスに従って戻った先の不正プログラムのシステムコールが「exec」であれば、不正なプログラムは実行される。
Wagnerらの侵入検知方法では、システムコールの発行シーケンスのマッチングにより不正侵入を検知している。従って、上述したような、システムコールの発行シーケンスが、元のプログラムと、不正プログラムにより攻撃された後のプログラムとで一致する場合、不正侵入を検知することができない。
本発明はこのような事情に鑑みてなされたもので、コンピュータへの不正侵入を検知する侵入検知方法及び侵入検知装置並びにプログラムを提供することを目的とする。
本発明は上記の目的を達成するためになされたもので、監視対象プログラムへの不正侵入がない場合のシステムコール及び当該システムコールまでの経路情報を、監視対象プログラムの実行によるシステムコール要求及び当該システムコールまでの経路情報と比較することにより、当該プログラムを実行するコンピュータが不正侵入されたか否か判定するものである。
具体的には、例えば、コンピュータが、監視対象プログラムへの不正侵入を検知する侵入検知方法であって、前記監視対象プログラムへの不正侵入がない場合のシステムコールと、当該システムコールまでの経路情報とを対応付けて記憶部へ記憶する第1のステップと、前記監視対象プログラムの実行によりシステムコールを要求する場合、当該システムコールを示す情報と、当該システムコールまでの経路情報とを取得する第2のステップと、前記要求したシステムコールを示す情報と当該システムコールまでの経路情報とが、前記記憶したシステムコールと当該システムコールに対応する経路情報とに一致するか否か判定する第3のステップと、前記第3のステップで一致すると判定した場合、前記要求したシステムコールを実行する第4のステップと、を備えることを特徴とする。
また、例えば、システムコールまでの経路情報とは、監視対象プログラム内の経路、又は、監視対象プログラムを実行するコンピュータのメモリ領域の経路であることを特徴とする。
また、例えば、システムコールまでの経路情報とは、分岐アドレスであることを特徴とする。
本発明による情報処理装置及びプログラムによれば、コンピュータへの不正侵入を検知することができる。特に、不正侵入されたコンピュータが不正なプログラムにより攻撃され、自身で動作するプログラムの制御が奪われることを検知することができる。これにより、不正侵入されたコンピュータで実行するプログラムの停止、スローダウン、システム管理者への通知等の対応が可能となる。
以下、本発明の一実施形態を図面を参照して詳細に説明する。図1は、本実施形態の侵入検知装置の構成の一例を示す図である。図1において、侵入検知装置1は、中央演算装置(CPU:Central Processing Unit)2、メモリ3、HDD(Hard Disk Drive)4、出力部5、入力部6、通信部7等を備える。
侵入検知装置1は、例えば計算機システム等である。本実施形態では、侵入検知装置1は、監視対象プログラム102を実行し、さらに、監視対象プログラム102を監視する監視プログラム101を実行するものとする。監視対象プログラム102を実行する侵入検知装置1は特定の機能の装置に限定されるものではないが、例えば、Webサーバやネットワークファイルサーバなど、通信ネットワークを介して他装置と通信する装置に適用するのが好適である。
中央演算装置2は、監視プログラム101、監視対象プログラム102、OS103、経路取得プログラム104をメモリ3にロードして実行するものとする。
監視プログラム101は、監視対象プログラム102を監視するプログラムである。具体的には、監視プログラム101は、監視対象プログラム102の実行により要求するシステムコール及び当該システムコールまでの経路情報と、監視対象プログラム102が不正な侵入を受けていない場合のシステムコール及び当該システムコールに対応する経路情報とが一致するか否かにより、監視対象プログラム102を監視する。本実施形態の侵入検知装置1では、中央演算装置2は、OS103を実行した上で、監視対象プログラム102を実行するものとする。
経路取得プログラム104とは、監視対象プログラム102を実行した場合、当該プログラムのシステムコールまでの経路情報を取得するプログラムである。システムコールまでの経路とは、例えば、監視対象プログラム102内の経路、又は、管理対象プログラム103を実行するメモリ3の領域の経路等である。
ここでは、システムコールまでの経路とは、監視対象プログラム102内の経路であるものとし、具体的には、監視対象プログラム102の分岐アドレスであるものとする。この分岐アドレスは、例えば、分岐トレースバッファの機能を用いることにより取得できる。分岐トレースバッファとは、一部の中央演算装置に備えられている機能であり、プログラムの実行により発生した分岐に関する情報を、中央演算装置上のレジスタ又はメモリ上の領域に記憶する機能である。
本実施形態では、経路取得プログラム104に、分岐トレースバッファの機能を用いるのとする。経路取得プログラム104は、取得した経路情報を、分岐トレースバッファの機能により取得した情報を、中央演算装置2上のレジスタに格納するものとする。以下、分岐トレースバッファの機能により取得した情報を格納するレジスタの領域を経路記憶部105として説明する。
経路取得プログラム104は、経路記憶部105に、図2に一例を示すような分岐に関する情報201を複数格納する。図2において、分岐に関する情報201には、分岐元アドレス、分岐先アドレス、分岐命令の分岐予測結果が含まれる。この経路記憶部105に格納する分岐に関する情報の個数は、利用者が入力部6を用いて指定することにより変更することができる。中央演算装置2は、OS103の実行等により、経路記憶部105へ格納する分岐に関する情報の個数を、特定のアクセス権を持つ利用者にのみ設定可能とする。
なお、分岐トレースバッファに関しては、例えば、“Intel,IA-32 Intel Architecture Software Developer's Manual Volume3:System Programming Guide,2003.”に記載されている。
図1において、解析プログラム106とは、監視対象プログラム102を静的に解析し、当該プログラムのシステムコールと、当該システムコールまでの経路情報とを取得するためのプログラムである。中央演算装置2は、解析プログラム106を実行し、監視対象プログラム102のシステムコールと、当該システムコールまでの経路情報とを取得し、取得したシステムコールと当該システムコールまでの経路情報とを対応付けてメモリ3に格納する。ここでは、中央演算装置2は、システムコールを示す情報と、当該システムコールまでの経路情報とを任意の文法表現で示したものをメモリ3に格納するものとし、以下、これをマッチング用文法として説明する。
システムコールまでの経路情報が分岐アドレスである場合のマッチング用文法の例を、図3を参照して説明する。図3において、マッチング用文法301は、中央演算装置2が、解析プログラム106を実行することにより、図10(a)の監視対象プログラム1001から生成した例である。
マッチング用文法301の「read.trace in {{0x2000,0x2001}}」は、「read」というシステムコールが「0x2000」、「0x2001」という順で分岐アドレスを経由することを示している。また、「open.trace in {{0x1000,0x1002},{0x1010,0x1002}}」は、「open」というシステムコールが、「{0x1000,0x1002}」又は「{0x1010,0x1002}」いずれかの分岐アドレスを経由することを示している。
図1において、メモリ3は、マッチング用文法107を記憶する。
出力部5は、例えば、ディスプレイ、スピーカ、プリンタ等の出力装置と、当該出力装置のドライバ等の制御部を備えるものである。
入力部6は、例えば、キーボード、マウス、マイク等の入力装置と、当該入力装置のドライバ等の制御部を備えるものである。
通信部7は、例えば、LAN(Local Area Network)ポート等の通信インタフェースと、当該インタフェースの制御部を備えるものである。侵入検知装置1は、LANを介するなどして、インターネットや他装置等(いずれも図示略)に接続されていてもよい。
なお、上述の実施形態において、図1を例とする侵入検出装置1の中央演算装置2内の各部及びマッチング用文法を、同一装置の中央演算装置及びメモリが備えるものとしたが、これに限られるわけではなく、各部の一部を他の装置の中央演算装置及びメモリが備えてもよい。例えば、第1の装置の中央演算装置は、監視対象プログラム102、経路取得プログラム104、経路記憶部105を備え、第1の装置と通信ネットワークを介して接続される第2の装置の中央演算装置は、解析プログラム106及び監視プログラム101、第2の装置のメモリがマッチング用文法107を備えてもよい。
次に、侵入検知装置1の動作を説明する。侵入検知装置1の中央演算装置2は、予め、解析プログラム106を実行して、マッチング用文法107を生成しておく。
なお、解析プログラム106の実行は、システム管理者の実行要求によるものや監視対象プログラム102の侵入検知装置1へのインストール時など、監視対象プログラム102が不正プログラムにより攻撃される前であればよく、特に限定するものではない。
マッチング用文法107を生成する動作を、図4を参照して説明する。なお、図4を参照して説明する動作は、中央演算装置2が解析プログラム106をメモリ3にロードして実行することにより実現する動作である。
中央演算装置2は、解析プログラム106を実行して、監視対象プログラム102を読み込み、制御フローグラフ(CFG:control flow graph)を作成する。
制御フローグラフは、プログラムの制御構造をグラフで表現したものであり、判定も分岐もせず順次実行する命令文の列から構成される基本ブロックノードと、基本ブロックノード間の制御の推移関係を示すエッジ等から構成される。制御フローグラフを生成する技術は、コンパイラ等に用いられ公知であるが、例えば、中央演算装置2は、監視対象プログラム102を記載した文字列を、プログラム言語として意味を持つ単位に分割し、当該分割した文字列の構成を、監視対象プログラム102が記載されたプログラム言語の文法に従って解析することで制御フローグラフを生成する。
なお、制御フローグラフの生成に関しては、例えば、“A.V.Aho, R.Sethi and J.D. Ullman. Compilers:Principles,Techniques,and Tools,Addisoin-Wesley,1986.”に記載されている。
図11(a)に示す監視対象プログラム1101の制御フローグラフの一例を図5に示す。図5において、制御フローグラフは、基本ブロックノード501〜503を備える。基本ブロックノード501は、関数「main」内の命令文「foo()」を備える。基本ブロックノード502は、関数「foo」内の命令文「gets()」及び「return」を備える。基本ブロックノード503は、命令文「exec」及び「exit」を備える。
中央演算装置2は、生成した制御フローグラフを変数Gに格納する。さらに、変数Gに格納した制御フローグラフを構成する基本ブロックノード集合を変数Nに格納する(図4におけるステップ401)。例えば、図5に一例を示す制御フローグラフを用いて説明すると、中央演算装置2は、変数Gに、図5に示す制御フローグラフを格納し、変数Nには、図5に示す制御フローグラフの基本ブロックノード集合、即ち、基本ブロックノード501、基本ブロックノード502、基本ブロックノード503を格納する。
次に、中央演算装置2は、基本ブロックノード集合Nが空集合(N=Φ)であるか否か判定する(図4におけるステップ402)。
基本ブロックノード集合Nが空集合である(N=Φ)場合、中央演算装置2は、後述する処理で取得するシステムコールと、当該システムコールまでの経路情報とからマッチング用文法107を生成する(図4におけるS408)。
基本ブロックノード集合Nが空集合でない(N≠Φ)場合、中央演算装置2は、基本ブロックノード集合Nから1つの基本ブロックノードを取り出し、変数nに格納する。さらに、基本ブロックノードnに到達する分岐集合を変数Tに格納する。さらに、基本ブロックノードn中の分集合を変数Sに格納する(図4におけるステップ403)。
例えば、図5に一例を示す制御フローグラフを用いて説明すると、基本ブロックノード集合Nに基本ブロックノード501〜503が格納されている場合、中央演算装置2は、N≠Φであるので、基本ブロックノード集合Nから基本ブロックノード501を取り出してnとする。これにより、基本ブロックノード集合Nは、基本ブロックノード502及び503となる。n(基本ブロックノード501)に到達する分岐集合は無いので、分岐集合T=Φ(空集合)とする。n中の命令文は「foo()」であるので、これを文集合Sとする。
次に、中央演算装置2は、基本ブロックノードn中の文集合Sが空集合(S=Φ)であるか否か判定する(図4におけるステップ404)。
基本ブロックノードn中の文集合Sが空集合である(S=Φ)場合、中央演算装置2は、ステップ402の処理を再度実行する。
基本ブロックノードn中の文集合Sが空集合でない(S≠Φ)場合、中央演算装置2は、基本ブロックノード中の文集合Sから1の文を取り出し、変数sに格納する(図4におけるステップ405)。
例えば、図5に一例を示す制御フローグラフを用いて説明すると、基本ブロックノードnが基本ブロックノード501である場合、中央演算装置2は、S≠Φであるので、文集合Sから「foo()」を取り出して文sとする。文集合Sは、「foo()」を取り出したことにより空集合となる。
次に、中央演算装置2は、文sがシステムコールを実行する文であるか否か判定する(図4におけるステップ406)。
文sがシステムコールを実行する文でない場合、中央演算装置2は、ステップ404の処理を再度実行する。
文sがシステムコールを実行する文である場合、中央演算装置2は、文sに到達する分岐集合を「T+{s}」とし(図4におけるステップ407)、当該情報をメモリ3内の特定の記憶部に格納した後、ステップ404の処理を再度実行する。なお、文sに到達する分岐集合「T+{s}」の「T」は、基本ブロックノードnに至るまでの分岐集合であり、「{s}」は、システムコールである文sの分岐である。即ち、ここで得られた分岐集合「T+{s}」が、文sのシステムコールまでの経路情報である。
例えば、図5に一例を示す制御フローグラフを用いて説明すると、文sが「foo()」である場合、中央演算装置2は、システムコールを実行する文ではないと判定し、ステップ404の処理を再度実行する。
以下、図5に一例を示す制御フローグラフを用いて、上述したステップによる処理を続けて説明する。中央演算装置2は、ステップ404の処理を再度実行する。文集合Sは、「foo()」を取り出したことにより空集合(S=Φ)であるので、中央演算装置2は、ステップ402の処理を再度実行する。即ち、基本ブロックノード集合NがN≠Φであるので、基本ブロックノード集合Nから基本ブロックノード502を取り出して基本ブロックノードnに格納する。これにより、基本ブロックノード集合Nは、基本ブロックノード503のみとなる。基本ブロックノードn(基本ブロックノード502)に到達する分岐集合は「main+m0」であるので、中央演算装置2は、これを分岐集合Tとする。さらに、n中の命令文は「gets()」,「return」であるので、これを文集合Sとする(図4におけるステップ403)。
次に、中央演算装置2は、基本ブロックノード中の文集合Sが空集合(S=Φ)であるか否か判定する(図4におけるステップ404)。この例では、文集合Sは空集合でない(S≠Φ)ので、文集合Sから命令文「gets()」を取り出して文sとする。文集合Sには、命令文「gets()」を取り出したことにより命令文「return」が残る。
次に、中央演算装置2は、文sがシステムコールを実行する文であるか否か判定する(図4におけるステップ406)。この例では、文s(gets())はシステムコールを実行する文であるので、文sに到達する分岐集合を「T+{s}」、即ち「main+m0,foo+n0」とする(図4におけるステップ407)。中央演算装置2は、経路情報である分岐集合をメモリ3内の特定の記憶部に格納等した後、ステップ404の処理を再度実行する。
中央演算装置2は、上述した処理を繰り返し、監視対象プログラム102のすべてのシステムコールの経路情報を取得する。ステップ402の処理にて基本ブロックノード集合Nが空集合である(N=Φ)場合、即ち、全てのシステムコールに関し経路情報を取得した場合、中央演算装置2は、上記した処理により取得したシステムコールと、当該システムコールまでの経路情報とからマッチング用文法107を生成する(図4におけるS408)。具体的には、例えば、中央演算装置2は、制御フローグラフGの基本ブロックノードからシステムコールを順次抽出し、予め定めておいた書式に従う等して文法表現に変換する。さらに、中央演算装置2は、各システムコールまでの経路情報(分岐集合「T+{s}」)を特定の記憶部から読み出して順次追加し、マッチング用文法107を生成する。
図6に、中央演算装置2が解析プログラム106を実行することにより、図11(a)に示す監視対象プログラム1101から生成したマッチング用文法の一例を示す。図6において、マッチング用文法601は、「gets」というシステムコールを「main+m0」、「foo+n0」という順で分岐アドレスを経由して実行することを示している。「exec」というシステムコールを「main+m1」という分岐アドレスを経由して実行することを示している。「exit」というシステムコールを「main+m2」という分岐アドレスを経由して実行することを示している。
監視対象プログラム102を監視する動作を図7及び図8を参照して説明する。図7では監視プログラム101の動作を、図8では経路取得プログラム104を拡張モジュールとして実現するOS103の動作を説明する。なお、図7を参照して説明する動作は、中央演算装置2が監視プログラム101をメモリ3にロードして実行することにより実現される動作である。また、図8を参照して説明する動作は、中央演算装置2が、経路取得プログラム104を拡張モジュールとするOS103をメモリ3にロードして実行することにより実現する動作である。
ここでは、中央演算装置2は、OS103及び経路取得プログラム104により、少なくとも監視対象プログラム102を含む、侵入検知装置1で実行する全て又は一部のプログラムで分岐が発生する度に、当該分岐の分岐に関する情報を経路記憶部105に格納しておくものとする。
監視プログラム101の実行により、中央演算装置2は、マッチング用文法107をメモリ3から読み込んで、変数Gに格納する(図7における701)。この状態で、システムコールを示す情報と、当該システムコールまでの経路情報とを取得するまで待機する。監視プログラム101の実行開始は、入力部6を用いて利用者等が指示してもよく、また、タイマによる実行開始時間の設定や、侵入検知装置1の起動又はOS103の起動と同時に実行されるようにしてもよい。
利用者の実行要求又はタイマによる開始時間の設定等により、中央演算装置2は、監視対象プログラム102を実行する。
監視対象プログラム102によりシステムコールを要求すると、中央演算装置2は、図8に一例を示す動作を、OS103を実行することで実現する。まず、中央演算装置2は、監視対象プログラム102がトレース中であるか否か判定する(図8におけるステップ801)。
この判定のために、例えば、中央演算装置2は、監視対象プログラム102を実行した場合、OS103の実行により、監視対象プログラム102を実行したことを通知するフラグを立てる等する。中央演算装置2は、このフラグを確認する等して、監視対象プログラム102がトレース中であるか否か判定する。
監視対象プログラム102がトレース中でない場合、中央演算装置2は、OS103を実行することにより、要求したシステムコールを実行する(図8におけるステップ804)。
監視対象プログラム102がトレース中である場合、中央演算装置2は、OS103の実行により、経路記憶部105から、要求したシステムコールまでの経路情報を読み出し、要求したシステムコールを示す情報を変数Sに、読み出した経路情報を変数Tに格納する(図8におけるステップ802)。ここでは、中央演算装置2は、経路記憶部105内に格納している複数の分岐に関する情報から、要求したシステムコールまでの分岐アドレスを読み出し、当該情報を経路情報として変数Tに格納する。
このようにシステムコールを示す情報S及び経路情報Tを取得すると、中央演算装置2は、監視プログラム101の実行により、システムコールを示す情報を変数Sに、当該システムコールまでの経路情報を変数BHに格納する(図7におけるステップ702)。ここでは、経路情報として、上述したシステムコールまでの分岐アドレスを示す情報がBHに格納される。
次に、中央演算装置2は、システムコールを示す情報Sが「S=exit」であるか否か判定する(図7におけるステップ703)。
「S=exit」である場合、監視対象プログラム102は終了するので、中央演算装置2は、監視プログラム101の処理を終了する。
「S=exit」でない場合、中央演算装置2は、変数Gに格納したマッチング用文法Gを参照し、システムコールを示す情報Sと、マッチング用文法Gのシステムコールとが一致するか否か判定する(図7におけるステップ704)。
システムコールを示す情報Sとマッチング用文法Gのシステムコールとが一致しない場合、中央演算装置2は、監視対象プログラム102が不正なプログラムにより制御を奪われた可能性があると判定し、侵入警告の出力、又は、監視対象プログラム102の停止やスローダウンを行う(図7におけるステップ707)。侵入警告の出力とは、例えば、ディスプレイへの侵入警告の表示、スピーカへの警告音の出力、プリンタへの出力、通信ネットワークにより接続されたPC(Personal Computer)や携帯電話等の通信装置(図示略)への電子メールや音声による通知等である。また、中央演算装置2は、侵入警告の出力、監視対象プログラム102の停止、監視対象プログラム102のスローダウンのうち全て又は一部を実行してもよい。
システムコールを示す情報Sとマッチング用文法Gのシステムコールとが一致する場合、中央演算装置2は、経路情報BHと、マッチング用文法Gの経路情報とが一致するか否か判定する(図7におけるステップ705)。ここでは、中央演算装置2は、システムコールを示す情報Sまでの分岐アドレスである経路情報BHと、ステップ704にて判定したマッチング用文法Gのシステムコールに対応する分岐アドレスとが一致するか否か判定する。
経路情報BHとマッチング用文法Gの経路情報とが一致しない場合、中央演算装置2は、不正なプログラムにより監視対象プログラム102の制御が奪われた可能性があると判定し、侵入警告の出力、又は、監視対象プログラム102の停止又はスローダウンを行う(図7におけるステップ707)。
経路情報BHとマッチング用文法Gの経路情報とが一致する場合、中央演算装置2は、監視対象プログラム102が不正な侵入を受けていないと判定し、監視対象プログラム102の実行再開要求を行う(図7におけるステップ706)。そのために、中央演算装置2は、例えば、上述の判定結果を示すフラグを立てる等する。
OS103の実行により、中央演算装置2は、要求したシステムコール及び当該システムコールまでの経路情報が、マッチング用文法のシステムコール及び当該システムコールの経路情報と一致するか否かの判定結果により、システムコールが実行可能か否か判定する(図8におけるステップ803)。判定結果は、例えば、監視プログラム101の実行により立てられた判定結果を示すフラグ、又は、侵入警告の出力を実行するためのフラグや信号等の有無、又は、監視対象プログラム102の停止やスローダウン等を実行するためのフラグや信号の有無等を確認することにより取得することができる。
判定結果が、監視対象プログラム102が不正な侵入を受けていないと判定したことを示すものである場合、中央演算装置2は、要求したシステムコールを実行する(図8におけるステップ804)。
判定結果が、不正なプログラムにより監視対象プログラム102の制御が奪われた可能性があると判定されたことを示すものである場合、中央演算装置2は、図8に一例を示すOS103の実行を終了する。
中央演算装置2は、監視対象プログラム102の実行により別のシステムコールを要求する場合でも、上述した処理を再度実行することにより、システムコールと当該システムコールまでの経路情報とのマッチングを行う。その場合、中央演算装置2は、例えば、次に実行するはずのシステムコール及び当該システムコールに対応する経路情報をマッチング用文法107から読み出してメモリ3等の特定の記憶部に格納し、要求したシステムコールを示す情報及び当該システムコールまでの経路情報を、当該特定の記憶部に格納したシステムコール及び当該システムコールまでの経路情報と比較することにより、マッチングを行ってもよい。
上述のように動作することで、侵入検知装置1への不正侵入を検知することが可能となる。図9に、中央演算装置2がOS103を実行することにより取得する、システムコール及び当該システムコールまでの経路情報の一例を示す。図9において、情報901は、図11(a)に一例を示す監視対象プログラム1101が不正プログラムにより攻撃されていない場合に、中央演算装置2が取得する情報の一例である。また、図9の情報902は、図11(a)に一例を示す監視対象プログラム1101が不正プログラムにより攻撃された場合に、中央演算装置2が取得する情報の一例である。なお、この不正プログラムにより攻撃された場合とは、図11(d)に示すような、「gets」の呼び出しで、配列「buf」1103の領域長10バイトを超えた不正なデータが読み込まれ、関数「foo」の戻りアドレスが、攻撃コード1105のアドレスを示すように変更される場合を示す。
中央演算装置2が図9(a)に一例を示す情報901を取得する場合、図6に一例を示すマッチング用文法601のシステムコール及び経路情報と、図9(a)に一例を示す情報901とのシステムコール及び経路情報とは一致する。従って、中央演算装置2は、監視対象プログラム102が不正なプログラムにより攻撃されていないと判定する。
中央演算装置2が図9(b)に一例を示す情報902を取得する場合、図6に一例を示すマッチング用文法601のシステムコール及び経路情報と、図9(b)に一例を示す情報902とのシステムコール及び経路情報とは一致しない。即ち、「exec」というシステムコールまでの経路情報が、図6に一例を示すマッチング用文法601では「main+m1」であるのに対し、図9(b)に一例を示す情報902では「STACK+x0」である。また、「exit」というシステムコールまでの経路情報が、図6に一例を示すマッチング用文法601では「main+m2」であるのに対し、図9(b)に一例を示す情報902では「STACK+x2」である。このようにシステムコールまでの経路情報が異なるので、中央演算装置2は、監視対象プログラム102が不正なプログラムにより攻撃された可能性があると判定する。その場合、中央演算装置2は、侵入警告の出力や、監視対象プログラム102の停止やスローダウンを実行する。
このように、システムコールが、元のプログラムと、不正プログラムにより攻撃された後のプログラムとで一致する場合でも、不正侵入を検知することが可能となる。
以上、この発明の実施形態を図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計変更等も含まれる。
例えば、上述の実施形態では、経路情報は、分岐トレースバッファの機能により取得する分岐アドレスであるものとしたが、これに限られるものではない。経路情報の例として、プログラムを、特定の大きさに区切ったページのページ番号、メモリ領域の種別(コード領域やスタック領域等)などを用いてもよい。
また、経路情報は分岐トレースバッファの機能により取得するものとしたが、これに限られたわけではない。例えば、監視対象プログラムに、分岐の経路情報を取得してメモリ等に格納する機能を備えておき、分岐命令を実行する前に当該機能を実行することにより、経路取得プログラムの機能を実現させてもよい。その場合、経路情報を取得するのはOSの実行に限られるものではなく、例えば、監視プログラムを実行することにより経路情報を取得してもよい。
また、上述の実施形態では、監視対象プログラムの実行をマッチング用文法と比較して監視するものとしたが、必ずしも文法表現であるものと比較する必要はない。監視対象プログラムが不正プログラムにより攻撃されていない場合のシステムコールと、当該システムコールまでの経路情報とが対応付けられていればよい。例えば、システムコール及び経路情報と、当該システムコールによる制御の遷移状態を示す状態遷移表等を参照して、監視対象プログラムを監視してもよい。
本実施形態の侵入検知装置の構成の一例を示す図である。 同実施形態において、分岐に関する情報の例を示す図である。 同実施形態において、マッチング用文法の一例を示す図である。 同実施形態において、マッチング用文法を生成する動作例を説明する図である。 同実施形態において、制御フローグラフの一例を説明する図である。 同実施形態において、マッチング用文法の一例を示す図である。 同実施形態において、監視プログラムの動作例を説明する図である。 同実施形態において、OSの動作例を説明する図である。 同実施形態において、監視対象プログラムが実行された場合のシステムコールと、当該システムコールの経路情報との例である。 従来の侵入検知の方法を説明する図である。 従来の侵入検知方法において、不正侵入を検知できない例を説明する図である。
符号の説明
1: 侵入検知装置、2:中央演算装置、3:メモリ、4:HDD、5:出力部、6:入力部、7:通信部、101:監視プログラム、102:監視対象プログラム、103:OS、104:経路取得プログラム、105:経路記憶部、106:解析プログラム、107:マッチング用文法、201:分岐に関する情報、301:マッチング用文法、501:基本ブロックノード、502:基本ブロックノード、503:基本ブロックノード、601:マッチング用文法、901:システムコールと当該システムコールまでの経路情報、901:システムコールと当該システムコールまでの経路情報、1001:監視対象プログラム、1002:マッチング用文法、1003:監視プログラム、1101:監視対象プログラム、1102:マッチング用文法、1103:配列「buf」、1104:配列「PC」、1105:攻撃コード

Claims (7)

  1. コンピュータが、監視対象プログラムへの不正侵入を検知する侵入検知方法であって、
    前記監視対象プログラムへの不正侵入がない場合のシステムコールと、当該システムコールまでの経路情報とを対応付けて記憶部へ記憶する第1のステップと、
    前記監視対象プログラムの実行によりシステムコールを要求する場合、当該システムコールを示す情報と、当該システムコールまでの経路情報とを取得する第2のステップと、
    前記要求したシステムコールを示す情報と当該システムコールまでの経路情報とが、前記記憶したシステムコールと当該システムコールに対応する経路情報とに一致するか否か判定する第3のステップと、
    前記第3のステップで一致すると判定した場合、前記要求したシステムコールを実行する第4のステップと、
    を備えることを特徴とする侵入検知方法。
  2. 請求項1記載の侵入検知方法において、システムコールまでの経路情報とは、監視対象プログラム内の経路、又は、監視対象プログラムを実行するコンピュータのメモリ領域の経路であることを特徴とする侵入検知方法。
  3. 請求項1記載の侵入検知方法において、システムコールまでの経路情報とは、分岐アドレスであることを特徴とする侵入検知方法。
  4. 請求項3記載の侵入検知方法において、分岐アドレスは、分岐トレースバッファの機能により取得することを特徴とする侵入検知方法。
  5. 請求項1乃至4記載の侵入検知方法において、前記第3のステップで一致しないと判定した場合、出力手段への侵入警告の出力、前記監視対象プログラムの実行停止、前記監視対象プログラムのスローダウンのうち少なくとも一つを実行する第5のステップと
    をさらに備えることを特徴とする侵入検知方法。
  6. コンピュータが、監視対象プログラムへの不正侵入を検知する侵入検知装置であって、
    前記監視対象プログラムへの不正侵入がない場合のシステムコールと、当該システムコールまでの経路情報とを対応付けて記憶する記憶手段と、
    前記監視対象プログラムの実行によりシステムコールを要求する場合、当該システムコールを示す情報と、当該システムコールまでの経路情報とを取得する取得手段と、
    前記要求したシステムコールを示す情報と当該システムコールまでの経路情報とが、前記記憶したシステムコールと当該システムコールに対応する経路情報とに一致するか否か判定する判定手段と、
    前記判定手段により一致すると判定した場合、前記要求したシステムコールを実行する実行手段と、
    を備えることを特徴とする侵入検知装置。
  7. 監視対象プログラムへの不正侵入を検知する侵入検知プログラムであって、
    コンピュータが、
    前記監視対象プログラムへの不正侵入がない場合のシステムコールと、当該システムコールまでの経路情報とを対応付けて記憶部へ記憶する第1のステップと、
    前記監視対象プログラムの実行によりシステムコールを要求する場合、当該システムコールを示す情報と、当該システムコールまでの経路情報とを取得する第2のステップと、
    前記要求したシステムコールを示す情報と当該システムコールまでの経路情報とが、前記記憶したシステムコールと当該システムコールに対応する経路情報とに一致するか否か判定する第3のステップと、
    前記第3のステップで一致すると判定した場合、前記要求したシステムコールを実行する第4のステップと、
    をコンピュータに実行させることを特徴とする侵入検知プログラム。
JP2004290053A 2004-10-01 2004-10-01 侵入検知方法及び侵入検知装置並びにプログラム Pending JP2006106939A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004290053A JP2006106939A (ja) 2004-10-01 2004-10-01 侵入検知方法及び侵入検知装置並びにプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004290053A JP2006106939A (ja) 2004-10-01 2004-10-01 侵入検知方法及び侵入検知装置並びにプログラム

Publications (1)

Publication Number Publication Date
JP2006106939A true JP2006106939A (ja) 2006-04-20

Family

ID=36376637

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004290053A Pending JP2006106939A (ja) 2004-10-01 2004-10-01 侵入検知方法及び侵入検知装置並びにプログラム

Country Status (1)

Country Link
JP (1) JP2006106939A (ja)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9507933B2 (en) 2012-08-01 2016-11-29 Mitsubishi Electric Corporation Program execution apparatus and program analysis apparatus
US10769273B2 (en) 2017-07-03 2020-09-08 Denso Corporation Electronic control unit
WO2021132880A1 (en) * 2019-12-23 2021-07-01 Samsung Electronics Co., Ltd. Terminal device and controlling method thereof
JP2022533715A (ja) * 2019-05-20 2022-07-25 センチネル ラブス イスラエル リミテッド 実行可能コード検出、自動特徴抽出及び位置独立コード検出のためのシステム及び方法
US11496506B2 (en) 2017-07-03 2022-11-08 Denso Corporation Program generation method and electronic control unit for changing importance of functions based on detected operation state in a vehicle
JP2023537815A (ja) * 2020-08-14 2023-09-06 エヌイーシー ラボラトリーズ アメリカ インク プログラムレベルのコンテキスト情報のマイニングと低レベルのシステムの来歴グラフへの統合
US12235962B2 (en) 2014-08-11 2025-02-25 Sentinel Labs Israel Ltd. Method of remediating operations performed by a program and system thereof
US12244626B2 (en) 2017-08-08 2025-03-04 Sentinel Labs Israel Ltd. Methods, systems, and devices for dynamically modeling and grouping endpoints for edge networking
US12259967B2 (en) 2021-07-13 2025-03-25 SentinelOne, Inc. Preserving DLL hooks
US12418565B2 (en) 2016-12-19 2025-09-16 SentinelOne, Inc. Deceiving attackers accessing network data
US12450351B2 (en) 2014-08-11 2025-10-21 Sentinel Labs Israel Ltd. Method of malware detection and system thereof
US12452273B2 (en) 2022-03-30 2025-10-21 SentinelOne, Inc Systems, methods, and devices for preventing credential passing attacks
US12468810B2 (en) 2023-01-13 2025-11-11 SentinelOne, Inc. Classifying cybersecurity threats using machine learning on non-euclidean data
US12579268B2 (en) 2022-08-22 2026-03-17 SentinelOne, Inc. Systems and methods of data selection for iterative training using zero knowledge clustering

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9507933B2 (en) 2012-08-01 2016-11-29 Mitsubishi Electric Corporation Program execution apparatus and program analysis apparatus
US12450351B2 (en) 2014-08-11 2025-10-21 Sentinel Labs Israel Ltd. Method of malware detection and system thereof
US12235962B2 (en) 2014-08-11 2025-02-25 Sentinel Labs Israel Ltd. Method of remediating operations performed by a program and system thereof
US12432253B2 (en) 2016-12-19 2025-09-30 SentinelOne, Inc. Deceiving attackers accessing network data
US12418565B2 (en) 2016-12-19 2025-09-16 SentinelOne, Inc. Deceiving attackers accessing network data
US10769273B2 (en) 2017-07-03 2020-09-08 Denso Corporation Electronic control unit
US11496506B2 (en) 2017-07-03 2022-11-08 Denso Corporation Program generation method and electronic control unit for changing importance of functions based on detected operation state in a vehicle
US12363151B2 (en) 2017-08-08 2025-07-15 Sentinel Labs Israel Ltd. Methods, systems, and devices for dynamically modeling and grouping endpoints for edge networking
US12244626B2 (en) 2017-08-08 2025-03-04 Sentinel Labs Israel Ltd. Methods, systems, and devices for dynamically modeling and grouping endpoints for edge networking
JP2022533715A (ja) * 2019-05-20 2022-07-25 センチネル ラブス イスラエル リミテッド 実行可能コード検出、自動特徴抽出及び位置独立コード検出のためのシステム及び方法
JP7278423B2 (ja) 2019-05-20 2023-05-19 センチネル ラブス イスラエル リミテッド 実行可能コード検出、自動特徴抽出及び位置独立コード検出のためのシステム及び方法
US11470098B2 (en) 2019-12-23 2022-10-11 Samsung Electronics Co., Ltd. Terminal device and controlling method thereof
WO2021132880A1 (en) * 2019-12-23 2021-07-01 Samsung Electronics Co., Ltd. Terminal device and controlling method thereof
JP7489495B2 (ja) 2020-08-14 2024-05-23 エヌイーシー ラボラトリーズ アメリカ インク プログラムレベルのコンテキスト情報のマイニングと低レベルのシステムの来歴グラフへの統合
JP2023537815A (ja) * 2020-08-14 2023-09-06 エヌイーシー ラボラトリーズ アメリカ インク プログラムレベルのコンテキスト情報のマイニングと低レベルのシステムの来歴グラフへの統合
US12259967B2 (en) 2021-07-13 2025-03-25 SentinelOne, Inc. Preserving DLL hooks
US12452273B2 (en) 2022-03-30 2025-10-21 SentinelOne, Inc Systems, methods, and devices for preventing credential passing attacks
US12579268B2 (en) 2022-08-22 2026-03-17 SentinelOne, Inc. Systems and methods of data selection for iterative training using zero knowledge clustering
US12468810B2 (en) 2023-01-13 2025-11-11 SentinelOne, Inc. Classifying cybersecurity threats using machine learning on non-euclidean data

Similar Documents

Publication Publication Date Title
KR101051722B1 (ko) 모니터 장치, 모니터링 방법 및 그에 관한 하드웨어용 컴퓨터 프로그램 산출물
JP6583838B2 (ja) アプリケーションのシミュレーション
US7849509B2 (en) Detection of security vulnerabilities in computer programs
JP6734481B2 (ja) コールスタック取得装置、コールスタック取得方法、および、コールスタック取得プログラム
US20130246038A1 (en) Emulator updating system and method
US8782615B2 (en) System, method, and computer program product for simulating at least one of a virtual environment and a debugging environment to prevent unwanted code from executing
CN102651061A (zh) 用于检测复杂恶意软件的系统和方法
JP2021022400A (ja) 分析システム、方法、及び、プログラム
CN107912064B (zh) 壳代码检测
JP2006106939A (ja) 侵入検知方法及び侵入検知装置並びにプログラム
EP2973177A1 (en) Generic unpacking of applications for malware detection
CN110659478A (zh) 在隔离的环境中检测阻止分析的恶意文件的方法
CN117807595B (zh) 反弹shell检测方法、装置、电子设备及存储介质
CN116488872A (zh) JavaWeb应用的攻击行为的识别和防御方法及其装置
JP2015166952A (ja) 情報処理装置、情報処理監視方法、プログラム、及び記録媒体
CN113176926B (zh) 一种基于虚拟机自省技术的api动态监控方法及系统
CN106462704B (zh) 动态读入代码分析装置和动态读入代码分析方法
JP6258189B2 (ja) 特定装置、特定方法および特定プログラム
WO2020111482A1 (ko) 프로그램 실행 컨텍스트 기반의 빅데이터를 활용한 역공학 방법 및 시스템
JP2020160679A (ja) スクリプト検出装置、方法及びプログラム
US10002253B2 (en) Execution of test inputs with applications in computer security assessment
Jilcott Securing the supply chain for commodity IT devices by automated scenario generation
JP7076014B2 (ja) プログラム保護のためのJavaデバッガ遮断方法およびシステム
RU2697951C2 (ru) Система и способ прекращения работы функционально ограниченного приложения, взаимосвязанного с веб-сайтом, запускаемого без установки
JP6687844B2 (ja) マルウエア解析装置、マルウエア解析方法及びマルウエア解析プログラム