説明

不正処理検知装置、不正処理検知方法及びプログラム

【課題】コンピュータウィルスなどによる不正処理を検知する場合において誤検知の発生を軽減することのできる技術を提供する。
【解決手段】コンピュータ装置300は、不正処理の検査を行う前に、検査する挙動をフィルタリングすることにより、誤検知を低減する。フィルタリング処理においては、コンピュータ装置300は、コールスタックに積まれるリターンアドレス列を取得し、取得したリターンアドレス列と、予め生成されたリターンアドレス列とを比較し、比較結果に応じて、監視対象となるソフトウェアの挙動が異常か否かを判定する。異常でないと判定された場合にはソフトウェアの実行を継続する一方、異常であると判定された場合には、コンピュータ装置300は、取得したリターンアドレス列に対応するコードを解析し、解析結果に応じて不正処理の有無を検出する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソフトウェアが実行されるときの挙動を利用して不正処理を検知する技術に関する。
【背景技術】
【0002】
パーソナルコンピュータ(以下、PCという)等の計算機器は、コンピュータウィルス(以下、ウィルスという)による攻撃にさらされている。PCに対するウィルスによる被害は年々増加し、さらに悪質化している。例えば、以前はいたずらを目的としたウィルスが主流であったが、近年では金銭目的のウィルスが増加している。さらにウィルスはPCのみでなく携帯電話機にも感染する恐れがある。実際、携帯電話機に対するウィルス被害が報告されている。また、携帯電話機はPCよりも多くの個人情報を多く含んでいる可能性が高く、特に高機能化された携帯電話機では電子マネーなど価値の高い情報が多く含まれていることもある。
【0003】
現在、PC向けのウィルス対策技術としては、ウィルススキャンと呼ばれる手法が主流となっている。この手法では、ウィルスの特徴点をパターンデータとして予め記録しておき、検査時にはこのパターンデータとマッチするものがないかを調べる。そのため、新種ウィルス等のパターンデータが定義されていない未知のウィルスは検知することができず、新たなパターンデータが追加されるまでの期間に被害が拡大してしまうという問題点を有している。そこで、既知のパターンデータとの照合によりウィルスを発見するのではなく、ソフトウェアが実行されているときの挙動を解析し、異常が発生していないかを調べる方法が検討されている。例えば、ウィルスがよく行う処理(例えば、ウィルス自身をコピーするという処理など)を予め登録しておき、その処理をしたときに異常と判断する、というビヘイビア法がある。また、ソフトウェアの正常な挙動を予め学習して正常モデルを作成し、実行時にこれと異なる挙動が発見されたら異常と判断する方法もある。
【0004】
例えば特許文献1には、コンピュータウィルスや不正アクセスを抑制することを目的として、オペレーティングシステムが、プログラムから要求されたAPI(Application Program Interface)を実行する前に、メモリ装置上におけるプログラムの格納アドレスを取得し、そのアドレスが適正な位置を示しているか否かを比較判定することにより、APIをコールしたプログラムが適正か不正かを判断する技術が提案されている。また、特許文献2には、バッファオーバーフローによるリターンアドレスの改ざんを防止するために、プログラムが実行されてリターンアドレスが書き換えられた場合、中央演算処理装置のデバッグ機能を利用してリターンアドレスの改ざんを検知し、予め保存された値で改ざんされたリターンアドレスを書き直し、プログラムを正常な動作に戻す技術が提案されている。また、特許文献3には、システムコールやAPI関数にブレークポイントを設定してシステムコールなどの呼び出しを監視し、監視対象プロセスの振る舞い(処理)と過去のコンピュータウィルスの特徴的な振る舞い(処理)とを比較することにより、コンピュータウィルスによるデータ改ざん等を防止する技術が提案されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】国際公開第2005/029328号
【特許文献2】国際公開第2005/024630号
【特許文献3】国際公開第2004/075060号
【発明の概要】
【発明が解決しようとする課題】
【0006】
ところで、ビヘイビア法では、ウィルスがよく行う処理を正常なソフトウェアが実行することもあるため、正常か異常かを正確に判断することは非常に難しい。そのため、異常が発生していないのに異常であると判断してしまう誤検知が発生し、ユーザの利便性を悪化させる。また、正常モデルを利用する方法では、ソフトウェアの挙動を全てモデル化することは一般に困難であり、特にユーザインタラクションがある場合はソフトウェアの挙動の数は無限に近くなる。そのため、正常モデルから外れる挙動を全て異常と判断してしまい、誤検知が発生するという問題を解消することはできない。
【0007】
本発明は、コンピュータウィルスなどによる不正処理を検知する場合において誤検知の発生を軽減することを目的とする。
【課題を解決するための手段】
【0008】
上記課題を解決するために、本発明は、ソフトウェアを実行する実行手段と、ソフトウェアが実行されるときにコールスタックに格納される複数のリターンアドレスを含み、当該複数のリターンアドレスによって当該ソフトウェアの挙動を表した挙動モデルデータを複数記憶する挙動モデルデータ記憶手段と、ソフトウェアが実行されるときの不正な処理の内容を表す不正処理定義データを複数記憶する不正処理定義データ記憶手段と、不正処理の検知対象となるソフトウェアが前記実行手段によって実行されるときにコールスタックに格納されるリターンアドレスを取得するリターンアドレス取得手段と、前記リターンアドレス取得手段によって取得されたリターンアドレスと、前記挙動モデルデータ記憶手段に記憶された各挙動モデルデータに含まれるリターンアドレスとを比較し、その比較結果に応じて、前記不正処理の検知対象となるソフトウェアの挙動が正常か否かを判定する挙動判定手段と、前記挙動判定手段によって正常でないと判定された場合に、前記リターンアドレス取得手段によって取得されたリターンアドレスに対応するコードを解析し、その解析結果から特定される処理の内容と、前記不正処理定義データ記憶手段に記憶された各不正処理定義データによって表される不正な処理の内容とを比較することによって、不正な処理を検知する不正処理検知手段とを具備することを特徴とする不正処理検知装置を提供する。
【0009】
本発明の好ましい態様において、前記挙動モデルデータ記憶手段は、ソフトウェアが実行されるときにコールスタックに格納される各リターンアドレスからなるリターンアドレス列を前記挙動モデルデータとして複数記憶し、前記リターンアドレス取得手段は、前記実行手段によってソフトウェアが実行されるときにコールスタックに格納される各リターンアドレスからなるリターンアドレス列を取得し、前記挙動判定手段は、前記リターンアドレス取得手段によって取得されたリターンアドレス列と前記挙動モデルデータ記憶手段に挙動モデルデータとして記憶されたリターンアドレス列との一致度が予め定められた条件を満たすか否かにより、前記不正処理の検知対象となるソフトウェアの挙動が正常か否かを判定してもよい。
【0010】
また、本発明の別の好ましい態様において、前記挙動モデルデータ記憶手段は、ソフトウェアが実行されるときにコールスタックに格納される各リターンアドレスからなるリターンアドレス列と当該リターンアドレス列が格納されているタイミングと異なるタイミングにおいて前記コールスタックに格納されているリターンアドレス列との差分を表すデータを前記挙動モデルデータとして複数記憶し、前記リターンアドレス取得手段は、前記実行手段によってソフトウェアが実行されるときにコールスタックに格納される各リターンアドレスからなるリターンアドレス列を取得し、前記挙動判定手段は、前記リターンアドレス取得手段によって取得されたリターンアドレス列と前記異なるタイミングにおいて前記コールスタックに格納されている各リターンアドレスからなるリターンアドレス列との差分を、前記挙動モデルデータ記憶手段に挙動モデルデータとして記憶されたデータと比較することにより、前記不正処理の検知対象となるソフトウェアの挙動が正常か否かを判定してもよい。
【0011】
また、本発明の別の好ましい態様において、前記挙動判定手段は、前記リターンアドレス取得手段によって取得されたリターンアドレスの少なくとも一部が、前記挙動モデルデータ記憶手段に記憶された複数の挙動モデルデータのうちのいずれかと一致する場合に、前記不正処理の検知対象となるソフトウェアの挙動が正常であると判定してもよい。
【発明の効果】
【0012】
本発明によれば、不正処理を検知する場合において誤検知の発生を軽減することができる。
【図面の簡単な説明】
【0013】
【図1】コンピュータ装置のハードウェア構成の一例を示すブロック図である。
【図2】異常検知装置の構成例を示すブロック図である。
【図3】コールスタックの変化の一例を示す模式図である。
【図4】コールスタックの構成の一例を示す模式図である。
【図5】バッファオーバーフロー攻撃時のコールスタックの変化の一例を示す模式図である。
【発明を実施するための形態】
【0014】
本発明を実施するための形態について説明する。なお、以下の説明において、「ソフトウェア」を動作の主体として表現することがあるが、これは、その「ソフトウェア」に記述された手順を実行するCPU(Central Processing Unit)が動作の主体であることを意味している。
図1は、この発明の一実施形態に係る不正処理検知装置としてのコンピュータ装置300の構成の一例を示すブロック図である。このコンピュータ装置300は、どのようなコンピュータ装置であってもよく、例えばパーソナルコンピュータやサーバ装置のほか、携帯電話機やPDA(Personal Digital Assistants)などを含む。図において、CPU301は、ROM(Read Only Memory)303又は記憶部305に格納されたコンピュータプログラムを、RAM(Random Access Memory)302をワークエリアとして実行することによって、コンピュータ装置300の制御を行う。記憶部305は、ハードディスク等の記憶手段であり、コンピュータ装置300の制御に関するプログラム等の各種プログラムが格納されている。入力部304は、外部装置と通信する通信手段である。ここにおいて、外部装置とは、例えば、外付けのフロッピー(登録商標)ディスクドライバやハードディスクなどの記録装置や、ネットワークを介して接続されるサーバ装置等である。入力部304は、外部装置と有線により通信を行ってもよいし、無線により通信を行ってもよい。なお、コンピュータ装置300は、図1に示した構成以外に、例えば表示を行う表示部や利用者の操作を受け付ける操作部などの他の構成を有していてもよい。
【0015】
コンピュータ装置300の記憶部305には、OS(Operating System)プログラム(図示略)が記憶されているほかに、監視対象ソフトウェアプログラムPRG1と、ソフトウェア挙動異常検知プログラムPRG2と、不正検査プログラムPRG3とが記憶されている。なお、以下の説明では、説明の便宜上、コンピュータ装置300のCPU301が記憶部305に記憶されたプログラムを実行することを、「ソフトウェアを実行する」という。また、記憶部305は、挙動モデル記憶領域3051と、不正処理定義記憶領域3052とを有している。挙動モデル記憶領域3051には、ソフトウェアが実行されるときにコールスタックに格納される複数のリターンアドレスを含み、当該複数のリターンアドレスによって当該ソフトウェアの挙動を表した挙動モデルデータが複数記憶される。ソフトウェアの挙動とは、CPU301がそのソフトウェアに記述された手順に従って処理を行うときの、そのCPU301による処理内容のことである。この挙動モデルデータの内容は後述するため、ここではその詳細な説明を省略する。
【0016】
次に、不正処理定義記憶領域3052には、ソフトウェアが実行されるときの不正な処理の内容を表す不正処理定義データが複数記憶されている。この不正処理定義データは、ウィルス等を原因とする不正な処理を検出する際に参照されるデータである。例えば、ウィルスである可能性が高い処理の特徴がリスト形式で列挙されたものが、不正処理定義データとして用いられる。具体的には、例えば、以下の(1)乃至(5)のような処理の内容を表すデータが不正処理定義データとして用いられる。
(1)ディスクをフォーマット、(2)自分自身を他へコピー、(3)実行ファイル書き換え、(4)メール大量送信、(5)特定のTCP(Transmission Control Protocol)ポートから発信
これらの不正処理定義データの内容は、いわゆるビヘイビア法において事前にソフトウェアが実行されているときの挙動を解析する手法を用いて特定されたものである。
【0017】
次に、コンピュータ装置300の機能的構成について図2を参照しつつ説明する。図2は、コンピュータ装置300の機能的構成の一例を示す図である。図において、ソフトウェア実行手段10は、コンピュータ装置300のCPU301が記憶部305に記憶されている監視対象ソフトウェアプログラムPRG1を読み出して実行することによって実現される。また、ソフトウェア挙動異常検知手段110は、CPU301が記憶部305に記憶されているソフトウェア挙動異常検知プログラムPRG2を読み出して実行することによって実現される。不正検査手段120は、CPU301が記憶部305に記憶されている不正検査プログラムPRG3を読み出して実行することによって実現される。ソフトウェア実行手段10は、監視対象となるソフトウェアを実行する手段であるが、図2においては、図が煩雑になるのを防ぐために、1つのソフトウェア実行手段10のみを図示している。監視対象となるソフトウェアの数は1に限らず複数であってもよいから、CPU301が複数のソフトウェアを並列的に実行している場合には、ソフトウェア実行手段10は複数構成されることになる。
【0018】
不正検査手段120は、ウィルス等による不正処理を検知する手段である。不正検査手段120は、不正処理定義記憶領域3052に記憶されている不正処理定義データを用い、ビヘイビア法に従って不正処理を検出する。ソフトウェア挙動異常検知手段110は、不正検査手段120がソフトウェアによる不正処理を検知する処理を行う前に、そのソフトウェアの挙動をフィルタリングする手段である。本実施形態ではソフトウェア挙動異常検知手段110がこのフィルタリングによってソフトウェアが不正である可能性があるか否かを判断し、不正検査手段120が、その可能性があるソフトウェアについてのみ不正処理の検知を行うという2段階の処理工程を経ることで、そのような2段階の処理工程を経ない場合と比べて、誤検知を低減することが可能となっている。
【0019】
ソフトウェア挙動異常検知手段110は、ソフトウェア実行手段10によって実行されている監視対象となるソフトウェア(以下「監視対象ソフトウェア」という)の挙動を表すデータ(以下「ソフトウェア挙動データ」という)を取得し、取得したソフトウェア挙動データを用いてソフトウェアの挙動が異常か否かを判定し、その判定結果を出力する。このソフトウェア挙動異常検知手段110は、ソフトウェア挙動取得手段210、モデル取得手段220、異常度合い判定手段230、及び異常判定情報取得手段240から構成されている。以下、これらの各手段の機能を説明する。
【0020】
まず、ソフトウェア挙動取得手段210は、監視対象ソフトウェアの挙動を表すソフトウェア挙動データを取得する。ここでは、ソフトウェア挙動取得手段210は、ソフトウェアの挙動を表すソフトウェア挙動データとして、不正処理の検知対象となるソフトウェア(監視対象ソフトウェア)がソフトウェア実行手段10によって実行されるときにコールスタックに格納されるリターンアドレスを取得する。コールスタックには、監視対象ソフトウェアに記述されたサブルーチンのうち、呼び出し元から呼び出された(コールされた)サブルーチンのリターンアドレスなどの情報が積まれており、監視対象ソフトウェアはこのリターンアドレスを元に、呼び出し元に戻る(リターンする)。なお、コールスタックにリターンアドレスを積む、とは、コールスタックに対し新たにリターンアドレスを格納するという意味である。このように、ソフトウェア挙動取得手段210は、ソフトウェア実行手段10によって実行されている監視対象ソフトウェアが利用するリターンアドレスを取得する。
【0021】
ここで、コールスタックに積まれるリターンアドレスの内容の一例について図面を参照しつつ説明する。図3(a)はソースコードの内容の一例を示す図であり、図3(b)はコールスタックに積まれるリターンアドレスの一例を示す図である。
例えば図3(a)に示すようなソースコードを有するソフトウェアをCPUが実行したとき、コールスタックの状態は図3(b)のように変化する。図3(a)における(i)〜(v)と、図3(b)における(i)〜(v)とは対応しており、例えば図3(a)の(i)のソースコードを実行しているときのコールスタックの状態は図3(b)の(i)である。順を追って説明すると、まず、ソフトウェアにより、サブルーチンに相当する関数Aがコールされ(i)、その関数Aがコールされた状態でさらに関数Bがコールされるときに、関数AのリターンアドレスReAdd(A)がコールスタックに積まれる(ii)。さらに関数Bがコールされた状態でさらに関数Cがコールされると、コールスタックに関数BのリターンアドレスReAdd(B)が積まれる(iii)。つまり、関数Cを実行中のコールスタックの状態は、ReAdd(A)とRetAdd(B)が積まれた状態である。そして、関数Cの実行が終わると、コールスタックに積まれた最上位のリターンアドレスReAdd(B)がコールスタックから取り出されることにより(iv)、関数Bにリターンし、その関数Bの実行が終わると、最上位のリターンアドレスReAdd(A)がコールスタックから取り出されて(v)、関数Aにリターンする。このように、ソフトウェア挙動取得手段210は、コールスタックの状態の変化を調べることにより、監視対象ソフトウェアがコールおよびリターンするサブルーチンを推測することができる。また、監視対象ソフトウェアにおいて実行中の関数(サブルーチン)のリターンアドレスは、コールスタックには積まれていないので、その場合は、ソフトウェア挙動取得手段210はレジスタに格納された値を取得する。
【0022】
次に、コールスタックの構成の一例について図面を参照しつつ説明する。図4は、コールスタックの構成の一例を示す模式図である。コールスタックには、サブルーチン毎にスタックフレームが積まれている。これらの各スタックフレームは、変数や引数などのサブルーチンに関する各種情報を格納しているが、リターンアドレスはその中の一つの要素である。つまり、ソフトウェア挙動取得手段210がリターンアドレスを取得する場合には、コールスタックのどの位置にリターンアドレスが積まれているかを把握する必要がある。例えばx86アーキテクチャのようなフレームポインタを利用するような場合、そのフレームポインタが、コールスタックにおいてリターンアドレスが積まれている格納アドレスを示すので、ソフトウェア挙動取得手段210はこの値を利用してリターンアドレスを取得することができる。また、ARMアーキテクチャのようにフレームポインタを利用しないものもあるが、この場合は、ソフトウェア挙動取得手段210は、各コードの先頭数命令を逆アセンブルすることによりコールスタックの積み方を調べて格納アドレスを取得する方法や、デバッグ情報を利用して格納アドレスを取得する方法が考えられる。
【0023】
ソフトウェア挙動取得手段210がリターンアドレスを取得するタイミングは、例えば、予め定められた時間が経過するたびであってもよく、また、例えば、システムコールが発行されるたびであってよく、また、例えば、インストラクションが発行されるたびであってもよい。また、ソフトウェア挙動取得手段210はこれらのタイミングを組み合わせて用いるようにしてもよい。具体的には、例えば、システムコールが発行されるたびにリターンアドレスを取得する場合、Linux(登録商標)の場合は、システムコールはptraceを利用して取得することができるし、また、カーネルを改変してトレース機能を埋め込んでおくことでリターンアドレスを取得するようにしてもよい。また、Windows(登録商標)で利用する場合は、システムコールはAPIと呼ばれており、或るAPIが呼び出される際にそこに割り込むAPIフックを実現することができるから、この割り込みを利用してリターンアドレスを取得してもよい。
【0024】
図2の説明に戻る。モデル取得手段220は、ソフトウェアが実行されるときにコールスタックに格納される複数のリターンアドレスを含み、当該複数のリターンアドレスによって当該ソフトウェアの挙動を表した挙動モデルデータを作成し、作成した挙動モデルデータを挙動モデル記憶領域3051に記憶する。モデル取得手段220は、監視対象ソフトウェアが実行されているときにリアルタイムで挙動モデルデータを生成するようにしてもよく、また、例えば、監視対象ソフトウェアが実行される前に挙動モデルデータの生成処理を済ませておくようにしてもよい。また、モデル取得手段220がこの挙動モデルデータの生成処理を行うタイミングは、例えば、予め定められた単位時間が経過する毎に行うようにしてもよく、また、例えば、予め定められた日時に行うようにしてもよい。また、例えば、入力部304からの指示に応じて挙動モデルデータを生成するようにしてもよい。ソフトウェアの挙動とは、前述したように、CPU301がそのソフトウェアに記述された手順に従って処理を行うときの、そのCPU301による処理内容のことであるが、ここでは特に、ソフトウェア挙動取得手段210が取得するリターンアドレスに関する情報(例えばリターンアドレスの列や、リターンアドレスとシステムコールの種別との組み合わせ等を含む)を、ソフトウェア挙動を表わす挙動モデルデータとする。
【0025】
より、具体的には、モデル取得手段220が挙動モデルデータを生成する際、例えばソフトウェア挙動(リターンアドレス)の種類を表す挙動モデルデータを生成し、さらに、ソフトウェア挙動の種類ごとの出現頻度や出現順をその挙動モデルデータに含めるようにしてもよい。例えば、出現順を記録する場合は、ある時点でコールスタックにつまれているリターンアドレスを、ソフトウェアの実行を開始したときからカウントされる出現順と共に記録しておき、そのリターンアドレス及び出現順のセットを集めたものをモデルとする方法や、取得されるリターンアドレス全てをソフトウェアの実行を開始したときからカウントされる出現順に並べ、N(Nは任意の自然数)個ずつをセットとしてモデルとする方法がある。さらに、ある時点でコールスタックに積まれているリターンアドレス列と別の時点でコールスタックに積まれているリターンアドレス列との差分を取得し、これを集めたものをモデルとしてもよい。また、リターンアドレスだけでなく、システムコールの種類も利用することができる。例えば、あるシステムコールが発行されたときのリターンアドレスもしくはリターンアドレス列という組み合わせをモデルとしてもよい。
【0026】
モデル取得手段220によって生成される挙動モデルデータは、監視対象ソフトウェアの正常な挙動をできる限り網羅的に含んでいる必要がある。そのため、モデル取得手段220がソフトウェアの挙動を取得するときには監視対象ソフトウェアの機能を網羅的に利用するように動作させる。また、モデル取得手段220は、監視対象ソフトウェアを実際に動かさなくても、オートマトン等の利用によりソースコード等を利用して静的にソフトウェア挙動を取得することが可能であるから、この方法を利用して挙動モデルデータの作成を行ってもよい。
【0027】
次に、異常度合い判定手段230は、ソフトウェア挙動取得手段210によって取得されたソフトウェア挙動データと、モデル取得手段220によって得られた挙動モデルデータとを比較し、その比較結果に応じて、監視対象ソフトウェアの挙動が異常か否かを判定する。この判定は、挙動モデルデータによって表されるモデルにある挙動は正常とし、そのモデルにない挙動は異常としてもよいし、そのモデルにある挙動と類似した挙動を正常とし、類似していない挙動を異常としてもよい。類似した挙動であるかどうかを判断する手法として、例えば、挙動に関してあるルールを決めておき、監視対象ソフトウェアの挙動がそのルールに合っているかを判断する方法が考えられる。例えばリターンアドレス列を挙動とし、リターンアドレスAのあとにBがあれば正常というルールを挙動モデルデータで表している場合、リターンアドレス列A→B→Xが実際に得られたときには、その挙動モデルデータが表すルールに合致するA→Bが含まれているので正常と判断するといったような方法が利用できる。このように、異常度合い判定手段230は、ソフトウェア挙動取得手段210によって取得されたリターンアドレス列とモデル取得手段220によって取得されたリターンアドレス列との一致度が予め定められた条件を満たすか否かにより、不正処理の検知対象となるソフトウェアの挙動が正常か否かを判定してもよい。より具体的には、異常度合い判定手段230は、ソフトウェア挙動取得手段210によって取得されたリターンアドレスの少なくとも一部が、モデル取得手段220によって取得された複数の挙動モデルデータのうちのいずれかと一致する場合に、不正処理の検知対象となるソフトウェアの挙動が正常であると判定するようにしてもよい。また、システムコールを利用したルール作成を行ってもよい。例えば、あるシステムコールS1が呼ばれたときにコールスタックにはリターンアドレスaが必要というルールを利用することができる。ルールの作成には、モデル作成時に得られた挙動の統計を利用することができる。
【0028】
また、挙動モデルデータとして、ソフトウェアが実行されるときにコールスタックに格納される各リターンアドレスからなるリターンアドレス列と当該リターンアドレス列が格納されているタイミングと異なるタイミングにおいてコールスタックに格納されているリターンアドレス列との差分を表すデータを用いる場合には、異常度合い判定手段230は、ソフトウェア挙動取得手段210によって取得されたリターンアドレスの列と上記予め定められたタイミングにおいてコールスタックに格納されているリターンアドレス列との差分を特定し、特定した差分とモデル取得手段220によって取得された挙動モデルデータとを比較することによって判定を行う。
【0029】
ところで、バッファオーバーフローと呼ばれる不正な攻撃手法の主流は、コールスタックのリターンアドレスを書き換え、攻撃者が実行したい悪意あるコードへと処理フローを変えるというものである。図5は、バッファオーバーフローによる攻撃時のあるスタックフレームの様子を示したものであり、図5(a)はtmp変数の格納領域が確保されている状態を示し、図5(b)はtmp変数が記録された状態を示す。図5(a)のようにtmp変数の格納領域には8バイトの領域が確保されているが、この変数のサイズをチェックしないという脆弱性を有するソフトウェアでは、tmp変数として8バイトを超える非常に大きな値を入れることができてしまう。このように、非常に大きいtmp変数がスタックフレームに格納されたことで、図5(b)のように、その先のリターンアドレスが書き換えられてしまう(スタックは図中上から下へと使われる)。この例ではリターンアドレスAが正常なリターン先であり、リターンアドレスXは悪意あるルーチンへのリターン先である。こうすることで、このスタックフレームがコールスタックに積まれたときに悪意あるコードに処理を移すことが可能となる。このように、実行前にコールスタックのデータが上書きされ、且つ、システムコールのみが監視されている場合、上記のような不正なリターンアドレスの書き換えは検知できず、悪意あるルーチンが実行されたときに初めて異常が検知される。これに対し、本実施形態によれば、システムコールのみを監視するのではなく、システムコールの呼び出しの有無に関わらずコールスタックに積まれたリターンアドレスを用いて監視対象ソフトウェアの挙動が正常かを判定するから、悪意あるルーチンにリターンされる前に書き換えを検知でき、被害を未然に防ぐことが可能となる。
【0030】
異常判定情報取得手段240は、異常度合い判定手段230により異常の度合いが高い、つまり、監視対象ソフトウェが不正なソフトウェアの可能性があると判断された場合、不正処理検知に必要な情報を取得する。必要な情報とは、リターンアドレスの指すアドレスに格納された情報が利用できる。
【0031】
次に、不正検査手段120による処理に移行する。この不正検査手段120は、不正処理定義取得手段250及び異常判定手段260で構成される。
まず、不正処理定義取得手段250は、不正処理定義記憶領域3052から不正処理定義データを取得する。次に、異常判定手段260は異常判定情報取得手段240により得られた情報から、ソフトウェアの処理内容を調べ、その処理が不正処理定義取得手段250により取得された不正処理定義に含まれているかどうかを調べる。具体的には、異常判定手段260は、異常判定情報取得手段240が取得したリターンアドレスが示す格納領域に記憶されているデータを読み出し、異常発生時点でのソフトウェアの処理の内容を特定し、その内容が不正処理定義取得手段250により取得された不正処理定義に含まれているかどうかを調べる。含まれていない場合は何もせずにソフトウェアの実行を続け、含まれている場合は、異常が発生したと判断する。
【0032】
このように、異常判定手段260は、異常度合い判定手段230によって正常でないと判定された場合に、ソフトウェア挙動取得手段210によって取得されたリターンアドレスに対応するコード(オブジェクトコード等)を解析し、解析結果から特定される処理の内容と、不正処理定義記憶領域3052に記憶された不正処理定義データとを比較することによって、不正な処理を検知する。不正処理が検知された場合には、その旨を表示部を用いてユーザに通知してもよいし、監視対象ソフトウェアに実行を停止してもよい。また、ユーザには知らせず、その情報をホストとなる外部装置に対し、入力部304を介して通知してもよい。以上説明したように本実施形態によれば、ソフトウェア挙動異常検知手段110がフィルタリングによってソフトウェアが不正である可能性があるか否かを判断することによって、誤検知の可能性があるものをできるだけ除外して不正処理の検査の対象とするから、誤検知を低減することができる。
【0033】
<変形例>
上述した実施形態は以下のような変形が可能である。なお、これらの各変形を適宜に組み合わせてもよい。
(1)上述の実施形態では、コンピュータ装置300の機能的構成の一例として図2を例示したが、コンピュータ装置300の機能的構成はこれに限らず、他の構成であってもよい。例えば、異常判定情報取得手段240が不正検査手段120に含まれる構成であってもよい。
【0034】
(2)上述の実施形態では、モデル取得手段220がソフトウェアを正常に動作させたときのソフトウェア挙動から挙動モデルデータを作成したが、これに限らず、挙動モデルデータを予めコンピュータ装置300の記憶部305に記憶しておくようにしてもよい。また、上述の実施形態では、モデル取得手段220が挙動モデルデータを作成したが、これに限らず、他の装置で挙動モデルデータの作成処理を行うようにしてもよい。この場合は、挙動モデルデータを生成した装置がコンピュータ装置300へ挙動モデルデータを送信するようにし、コンピュータ装置300は、他の装置から受信される挙動モデルデータを用いてソフトウェア挙動の異常判定処理を行う。
【0035】
(3)上述の実施形態では、ビヘイビア法による不正検知を行うに先立ってソフトウェア挙動のフィルタリングを行うようにしたが、不正検知を行う手法はビヘイビア法に限らず、他の手法を用いて不正検知を行うようにしてもよい。要は、不正検知処理を実行するに先立って、ソフトウェア挙動のフィルタリングを行うものであればよい。
例えば、リターン先がライブラリであることを不正処理定義データとして用いてもよい。リターンアドレスを書き換えてリターン先をライブラリに変更することにより攻撃を行う、return-to-libc攻撃と呼ばれるものがあり、その一例として、例えばLinux(登録商標)のsystem関数を、引数を/bin/shとしてコールすることにより、攻撃者がシェルを実行する、という不正行為が知られている。このような攻撃を見つけるために、リターン先がライブラリである場合に不正処理であると検出するようにしてもよい。
【0036】
(4)上述の実施形態では、不正処理定義記憶領域3052に不正な処理の内容を表すデータを予め記憶しておく構成としたが、これに限らず、正常な処理の内容を表すデータを予め記憶しておく構成とし、記憶された正常な処理と一致する場合にソフトウェア挙動が正常であるとCPU301が判定するようにしてもよい。
【0037】
(5)上述の実施形態では、不正処理定義取得手段250と異常判定手段260とがコンピュータ装置300に含まれる構成の例について説明したが、これに限らず、コンピュータ装置300と通信ネットワーク等を介して接続されたサーバ装置が、不正処理定義取得手段250と異常判定手段260とを備える構成であってもよい。この場合は、コンピュータ装置300は、異常判定情報取得手段240によって取得された情報をサーバ装置に通知し、サーバ装置が、コンピュータ装置300から通知された情報を用いて不正処理の検出処理を実行する。また、サーバ装置で情報を収集する場合は、複数のコンピュータ装置からの情報を集約し、統計を取ってもよい。例えば、同じ内容の通知がたくさん集まった場合は、すぐに対処すべき等の判断に利用できる。
【0038】
(6)上述の実施形態では、コンピュータ装置300の記憶部305が、挙動モデル記憶領域3051及び不正処理定義記憶領域3052を備える構成となっていたが、これに限らず、コンピュータ装置300が、挙動モデル記憶領域や不正処理定義記憶領域3052を備えるサーバ装置と、通信ネットワーク等を介して接続されている構成であってもよい。この場合は、コンピュータ装置300は、通信ネットワーク等を介して接続されたサーバ装置にアクセスして、挙動モデルデータや不正処理定義データを受信するようにすればよい。
【0039】
(7)上述の実施形態では、図2に示したソフトウェア挙動異常検知手段110と、不正検査手段120とは、CPU301がそれぞれ異なるプログラムを実行することによって実現されるようにしたが、これに限らず、ソフトウェア挙動異常検知手段110と不正検査手段120とがひとつのプログラムによって実現される構成であってもよい。
【0040】
(8)上述の実施形態におけるコンピュータ装置300のCPU301によって実行されるプログラムは、磁気記録媒体(磁気テープ、磁気ディスクなど)、光記録媒体(光ディスクなど)、光磁気記録媒体、半導体メモリなどのコンピュータが読取可能な記録媒体に記憶した状態で提供し得る。また、インターネットのようなネットワーク経由でコンピュータ装置300にダウンロードさせることも可能である。なお、このような制御を行う制御手段としてはCPU以外にも種々の装置を適用することができ、例えば、専用のプロセッサなどを用いてもよい。
【符号の説明】
【0041】
110…ソフトウェア挙動異常検知手段、120…不正検査手段、210…ソフトウェア挙動取得手段、220…モデル取得手段、230…異常度合い判定手段、240…異常判定情報取得手段、250…不正処理定義取得手段、260…異常判定手段、300…コンピュータ装置、301…CPU、302…RAM、303…ROM、304…入力部、305…記憶部。

【特許請求の範囲】
【請求項1】
ソフトウェアを実行する実行手段と、
ソフトウェアが実行されるときにコールスタックに格納される複数のリターンアドレスを含み、当該複数のリターンアドレスによって当該ソフトウェアの挙動を表した挙動モデルデータを複数記憶する挙動モデルデータ記憶手段と、
ソフトウェアが実行されるときの不正な処理の内容を表す不正処理定義データを複数記憶する不正処理定義データ記憶手段と、
不正処理の検知対象となるソフトウェアが前記実行手段によって実行されるときにコールスタックに格納されるリターンアドレスを取得するリターンアドレス取得手段と、
前記リターンアドレス取得手段によって取得されたリターンアドレスと、前記挙動モデルデータ記憶手段に記憶された各挙動モデルデータに含まれるリターンアドレスとを比較し、その比較結果に応じて、前記不正処理の検知対象となるソフトウェアの挙動が正常か否かを判定する挙動判定手段と、
前記挙動判定手段によって正常でないと判定された場合に、前記リターンアドレス取得手段によって取得されたリターンアドレスに対応するコードを解析し、その解析結果から特定される処理の内容と、前記不正処理定義データ記憶手段に記憶された各不正処理定義データによって表される不正な処理の内容とを比較することによって、不正な処理を検知する不正処理検知手段と
を具備することを特徴とする不正処理検知装置。
【請求項2】
前記挙動モデルデータ記憶手段は、ソフトウェアが実行されるときにコールスタックに格納される各リターンアドレスからなるリターンアドレス列を前記挙動モデルデータとして複数記憶し、
前記リターンアドレス取得手段は、前記実行手段によってソフトウェアが実行されるときにコールスタックに格納される各リターンアドレスからなるリターンアドレス列を取得し、
前記挙動判定手段は、前記リターンアドレス取得手段によって取得されたリターンアドレス列と前記挙動モデルデータ記憶手段に挙動モデルデータとして記憶されたリターンアドレス列との一致度が予め定められた条件を満たすか否かにより、前記不正処理の検知対象となるソフトウェアの挙動が正常か否かを判定する
ことを特徴とする請求項1に記載の不正処理検知装置。
【請求項3】
前記挙動モデルデータ記憶手段は、ソフトウェアが実行されるときにコールスタックに格納される各リターンアドレスからなるリターンアドレス列と当該リターンアドレス列が格納されているタイミングと異なるタイミングにおいて前記コールスタックに格納されているリターンアドレス列との差分を表すデータを前記挙動モデルデータとして複数記憶し、
前記リターンアドレス取得手段は、前記実行手段によってソフトウェアが実行されるときにコールスタックに格納される各リターンアドレスからなるリターンアドレス列を取得し、
前記挙動判定手段は、前記リターンアドレス取得手段によって取得されたリターンアドレス列と前記異なるタイミングにおいて前記コールスタックに格納されている各リターンアドレスからなるリターンアドレス列との差分を、前記挙動モデルデータ記憶手段に挙動モデルデータとして記憶されたデータと比較することにより、前記不正処理の検知対象となるソフトウェアの挙動が正常か否かを判定する
ことを特徴とする請求項1に記載の不正処理検知装置。
【請求項4】
前記挙動判定手段は、前記リターンアドレス取得手段によって取得されたリターンアドレスの少なくとも一部が、前記挙動モデルデータ記憶手段に記憶された複数の挙動モデルデータのうちのいずれかと一致する場合に、前記不正処理の検知対象となるソフトウェアの挙動が正常であると判定する
ことを特徴とする請求項1に記載の不正処理検知装置。
【請求項5】
ソフトウェアが実行されるときにコールスタックに格納される複数のリターンアドレスを含み、当該複数のリターンアドレスによって当該ソフトウェアの挙動を表した挙動モデルデータを記憶する挙動モデルデータ記憶手段と、ソフトウェアが実行されるときの不正な処理の内容を表す不正処理定義データを記憶する不正処理定義データ記憶手段と、ソフトウェアを実行する実行手段とを備えた不正処理検知装置が行う不正処理検知方法であって、
不正処理の検知対象となるソフトウェアが前記実行手段により実行されるときにコールスタックに格納されるリターンアドレスを取得するステップと、
取得された前記リターンアドレスと、前記挙動モデルデータ記憶手段に記憶された挙動モデルデータに含まれるリターンアドレスとを比較し、その比較結果に応じて、前記不正処理の検知対象となるソフトウェアの挙動が正常か否かを判定するステップと、
前記不正処理の検知対象となるソフトウェアの挙動が正常でないと判定された場合に、取得された前記リターンアドレスに対応するコードを解析し、その解析結果から特定される処理の内容と、前記不正処理定義データ記憶手段に記憶された不正処理定義データによって表される不正な処理の内容とを比較することによって、不正な処理を検知するステップと
を有することを特徴とする不正処理検知方法。
【請求項6】
ソフトウェアが実行されるときにコールスタックに格納される複数のリターンアドレスを含み、当該複数のリターンアドレスによって当該ソフトウェアの挙動を表した挙動モデルデータを記憶する挙動モデルデータ記憶手段と、ソフトウェアが実行されるときの不正な処理の内容を表す不正処理定義データを記憶する不正処理定義データ記憶手段と、ソフトウェアを実行する実行手段とを備えたコンピュータに、
不正処理の検知対象となるソフトウェアが前記実行手段により実行されるときにコールスタックに格納されるリターンアドレスを取得するステップと、
取得された前記リターンアドレスと、前記挙動モデルデータ記憶手段に記憶された挙動モデルデータに含まれるリターンアドレスとを比較し、その比較結果に応じて、前記不正処理の検知対象となるソフトウェアの挙動が正常か否かを判定するステップと、
前記不正処理の検知対象となるソフトウェアの挙動が正常でないと判定された場合に、取得された前記リターンアドレスに対応するコードを解析し、その解析結果から特定される処理の内容と、前記不正処理定義データ記憶手段に記憶された不正処理定義データによって表される不正な処理の内容とを比較することによって、不正な処理を検知するステップと
を実行させるためのプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公開番号】特開2010−257150(P2010−257150A)
【公開日】平成22年11月11日(2010.11.11)
【国際特許分類】
【出願番号】特願2009−105582(P2009−105582)
【出願日】平成21年4月23日(2009.4.23)
【出願人】(392026693)株式会社エヌ・ティ・ティ・ドコモ (5,876)
【出願人】(504171134)国立大学法人 筑波大学 (510)
【Fターム(参考)】