(57)【要約】【課題】ネットワーク側でコードリユース等を用いたコンピュータへの攻撃を検知することを可能とする技術を提供する。【解決手段】ネットワークを流れるデータに基づいて、コンピュータへの攻撃を検出するための異常検出装置において、第１の特徴データ列と第２の特徴データ列を格納する特徴データ列格納手段と、前記ネットワークから取得された所定のデータ長の比較対象データ列と、前記特徴データ列格納手段に格納されている前記第１の特徴データ列及び前記第２の特徴データ列との比較を行うことにより、前記コンピュータへの攻撃があるか否かを判定する異常判定手段とを備える。【選択図】図２
2015127906.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを流れるデータに基づいて、コンピュータへの攻撃を検出するための異常検出装置であって、
第１の特徴データ列と第２の特徴データ列を格納する特徴データ列格納手段と、
前記ネットワークから取得された所定のデータ長の比較対象データ列と、前記特徴データ列格納手段に格納されている前記第１の特徴データ列及び前記第２の特徴データ列との比較を行うことにより、前記コンピュータへの攻撃があるか否かを判定する異常判定手段と
を備えることを特徴とする異常検出装置。
【請求項２】
前記第２の特徴データ列は攻撃対象のコンピュータにおけるデータ実行防止設定を解除するための命令が格納されたメモリのアドレスを示すデータ列である
ことを特徴とする請求項１に記載の異常検出装置。
【請求項３】
前記第１の特徴データ列は、コードリユースを用いて前記命令の実行をさせるために、前記攻撃対象のコンピュータのメモリにおけるスタック領域に格納されるデータである
ことを特徴とする請求項２に記載の異常検出装置。
【請求項４】
前記第１の特徴データ列は、前記命令の引数、又は、前記コンピュータに存在する既存の命令を実行させるためのアドレスである
ことを特徴とする請求項３に記載の異常検出装置。
【請求項５】
前記異常判定手段は、前記比較対象データ列と前記第２の特徴データ列との一致を検知した場合において、当該比較対象データ列の前後における他の比較対象データ列と前記第１の特徴データ列との比較結果が所定の条件を満たす場合に前記コンピュータへの攻撃があると判定する
ことを特徴とする請求項１ないし４のうちいずれか１項に記載の異常検出装置。
【請求項６】
前記第１の特徴データ列は複数種類存在し、前記異常判定手段は、前記所定の条件の判定において、当該種類毎に前記第１の特徴データ列の重み付けを行う
ことを特徴とする請求項５に記載の異常検出装置。
【請求項７】
ネットワークを流れるデータに基づいて、コンピュータへの攻撃を検出するための異常検出装置が実行する異常判定方法であって、
前記異常検出装置は、第１の特徴データ列と第２の特徴データ列を格納する特徴データ列格納手段を備えており、
前記ネットワークから取得された所定のデータ長の比較対象データ列と、前記特徴データ列格納手段に格納されている前記第１の特徴データ列及び前記第２の特徴データ列との比較を行うことにより、前記コンピュータへの攻撃があるか否かを判定する異常判定ステップ
を備えることを特徴とする異常検出方法。
【請求項８】
コンピュータを、請求項１ないし６のうちいずれか１項に記載の前記異常検出装置における各手段として機能させるための異常検出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータの脆弱性を狙った不正プログラムによる攻撃を検出する技術に関連するものである。
【背景技術】
【０００２】
コンピュータの脆弱性を狙った不正プログラムによる攻撃が重要な問題となっている。通常、そのような攻撃により、コンピュータシステムの脆弱性が明らかになると、脆弱性を無くすための脆弱性パッチがリリースされ、ユーザに配布される。
【０００３】
しかし、脆弱性パッチがリリースされる前に、攻撃手法やツールが公になって、攻撃が行われるゼロデイ攻撃が後を絶たない。
【０００４】
上記の攻撃の特徴は、ＤＥＰ（Ｄａｔａ  Ｅｘｅｃｕｔｉｏｎ  Ｐｒｅｖｅｎｔｉｏｎ、データ実行防止）やＡＳＬＲ（Ａｄｄｒｅｓｓ  Ｓｐａｃｅ  Ｌａｙｏｕｔ  Ｒａｎｄｏｍｉｚａｔｉｏｎ）等のコンピュータ側の防御手法を回避するために、ＲＯＰ（Ｒｅｔｕｒｎ  Ｏｒｉｅｎｔｅｄ  Ｐｒｏｇｒａｍｍｉｎｇ）に代表されるコードリユースという攻撃手法が多く用いられることである。コードリユースを正確にとらえるためにはその性質上、コンピュータ側のメモリ状態を把握する必要がある。例えば、特許文献１には、ホストコンピュータ側でメモリ状態を把握して攻撃を回避する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−２５８０１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、特許文献１に記載されたようにコンピュータ側で攻撃防御機能を実装する方式では、各ユーザのコンピュータに当該方式に対応したソフトウェア等をインストールしなければならず、コンピュータの数が多い場合にはその実施負担や管理負担が非常に大きなものとなる。
【０００７】
本発明は上記の点に鑑みてなされたものであり、ネットワーク側でコードリユース等を用いたコンピュータへの攻撃を検知することを可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の実施の形態によれば、ネットワークを流れるデータに基づいて、コンピュータへの攻撃を検出するための異常検出装置であって、
第１の特徴データ列と第２の特徴データ列を格納する特徴データ列格納手段と、
前記ネットワークから取得された所定のデータ長の比較対象データ列と、前記特徴データ列格納手段に格納されている前記第１の特徴データ列及び前記第２の特徴データ列との比較を行うことにより、前記コンピュータへの攻撃があるか否かを判定する異常判定手段とを備えることを特徴とする異常検出装置が提供される。
【０００９】
また、本発明の実施の形態によれば、ネットワークを流れるデータに基づいて、コンピュータへの攻撃を検出するための異常検出装置が実行する異常判定方法であって、
前記異常検出装置は、第１の特徴データ列と第２の特徴データ列を格納する特徴データ列格納手段を備えており、
前記ネットワークから取得された所定のデータ長の比較対象データ列と、前記特徴データ列格納手段に格納されている前記第１の特徴データ列及び前記第２の特徴データ列との比較を行うことにより、前記コンピュータへの攻撃があるか否かを判定する異常判定ステップを備えることを特徴とする異常検出方法が提供される。
【発明の効果】
【００１０】
本発明の実施の形態によれば、ネットワーク側でコードリユース等を用いたコンピュータへの攻撃を検知することが可能となる。
【図面の簡単な説明】
【００１１】
【図１】攻撃パケットの例を示す図である。
【図２】本発明の実施の形態に係る異常検出装置１０の機能構成図である。
【図３】攻撃パケットのデータの流れのイメージを示す図である。
【図４】本発明の実施の形態に係る異常検出装置１０の動作例を示す図である。
【図５】特徴データ列２が検知されても異常と判定しない場合の例を示す図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して本発明の実施の形態を説明する。なお、以下で説明する実施の形態は一例に過ぎず、本発明が適用される実施の形態は、以下の実施の形態に限られるわけではない。例えば、本実施の形態では、Ｗｉｎｄｏｗｓ（登録商標）等のＯＳを実行させているコンピュータに対する攻撃を通信の異常として検知するが、本発明はこのような攻撃以外の異常の検知に適用してもよい。また、本実施の形態では、ＤＥＰを回避するＲＯＰの手法に基づく攻撃の検知を例として説明しているが、本発明の適用先はこれに限らず、他の攻撃にも適用可能である。
【００１３】
（実施の形態の概要）
まず、本実施の形態において検知の対象として想定している攻撃について説明する。図１は、ネットワーク上で攻撃に使用される攻撃パケットの内部構成（攻撃コード）の例を示す図である。
【００１４】
図１（ａ）は通常の攻撃パケットを示す。攻撃パケットは数十バイトといった小さいサイズである。図１（ａ）のエクスプロイトコードは、例えば脆弱性毎に作成されるコードであり、コンピュータ内の脆弱性を利用して、所望のプログラムを実行させるコードである。ペーロードには、例えば、次のコードをダウンロードする機能を持つコードが格納されていることが多い。すなわち、攻撃対象のコンピュータにおいて、攻撃コードは小さなバッファ領域等に格納させる必要があるから、攻撃コード自体は小さいものでなければならず、ここに全ての目的のコード（コンピュータから情報を盗むマルウェア等）を入れることができないため、ペイロードに、次のコードをダウンロードさせる機能を持たせているのである。
【００１５】
ＩＤＳ（Ｉｎｔｒｕｓｉｏｎ  Ｄｅｔｅｃｔｉｏｎ  Ｓｙｓｔｅｍ）等では、図１（ａ）に示すエクスプロイトコード部分もしくはペイロード部分からシグニチャを作成し、シグニチャにより攻撃判定を行う。ペイロード部分は暗号化が可能なため、攻撃者は図１（ｂ）のように暗号化を行いシグニチャ検出の回避を試みる。エクスプロイトコード部分は暗号化されないのでシグニチャ検知に好都合であり一般に多くのＩＤＳでシグニチャとして活用されているが、特にゼロデイ攻撃の場合、このエクスプロイトコードに対するシグニチャ提供が間に合わず攻撃の検出が困難である。エクスプロイトコードに対するシグニチャは脆弱性毎に作る必要があり、また攻撃のバリエーションを変えることでこのシグニチャの回避が可能という側面もある。
【００１６】
このように、ペイロードが暗号化された場合、ネットワーク側ではこれを復号することができないので、ＩＤＳ等を使用したネットワーク側の仕組みでは、これを検出することは一般に困難である。
【００１７】
図１（ｃ）は、コードリユースを用いた攻撃パケットの例である。図１（ｃ）に示す攻撃パケットには、ＤＥＰ制御コードが存在する。ここで、ＤＥＰ、及び、ＤＥＰを回避するコードリユースの手法の例を説明する。
【００１８】
例えば、スタックバッファオーバーフローを利用してシェルコード（攻撃者が実行したいコードであり、上記ペイロードと同義と考えてよい）を実行させる場合、通常、攻撃者は、メモリのスタック領域にシェルコードを送り込み、そこへプロセスの制御を移すことによりシェルコードを実行させようとする。ＤＥＰはそのような攻撃を防止するために、スタック中（データ領域中）でのコードの実行を防止する機能である。ＤＥＰはスタック領域とは限らずに、メモリの特定の部分がデータの保持のみを目的にしていることをマークし、プロセッサがその領域を実行不可能であると認識することによって機能するものである。
【００１９】
ただし、場合によっては、ＤＥＰは正当なソフトウェアの実行を妨げる場合があるため、データ領域のデータ（コード）の実行権を変更できような命令（関数）がＤＬＬ等で用意されており、所定の引数で当該命令を実行することで、所定のデータ領域のデータ（コード）を実行可能とすることができる。具体的には、データ領域にコードの実行を許すようなフラグが立てられる。このように、ＤＥＰにより実行権がない設定から、実行権を付与する設定にすることをＤＥＰを解除するとも呼ぶ。
【００２０】
ＤＥＰによりデータ領域のデータ実行防止が機能している場合、上記のようにシェルコードをスタック領域に送り込んでも実行させることができない。そこで、攻撃者は、ＤＥＰを回避するためにＲＯＰの手法を使用する。ＲＯＰは、リターン（ｒｅｔ命令）で終わるコードの断片をつなぎ合わせて、実行させたい処理を実現するものであり、スタックに実行したいコードのアドレスを積み上げておき、それに従って処理がジャンプしていくように調整することで、攻撃者が意図した様々なコード実行を可能とする。この場合、コードの実行は通常のコード領域で行われるため、ＤＥＰによる防御は働かないことになる。
【００２１】
ただし、ＲＯＰのみで複雑な処理を行うことは困難であるため、ＲＯＰを利用して、データ領域の実行権を変更させる命令、つまり、ＤＥＰを解除する命令（例：ＶｉｒｔｕａｌＰｒｏｔｅｃｔ関数）を実行させることで、データ領域に送り込んだシェルコードを実行可能にして、当該シェルコードを実行させるといった制御が行われる。
【００２２】
本願の発明者は、多数の攻撃ツールの攻撃コードを研究した結果、上記のＲＯＰのようなコードリユースを用いた攻撃コードでは、図１（ｃ）に示すように、コードリユースを利用し最終的にＤＥＰ制御を行うコードが平文で流れることを見出した。本願ではこの点に着目している。当該ＤＥＰ制御を行うコードとは、前述したデータ領域の実行権を変更する命令が格納されているコード領域のアドレス（絶対アドレス）である。また、当該命令の引数（例：実行権を与えるデータ領域のアドレス、サイズ、実行権を与えることを示すパラメータ等）もＤＥＰ制御を行うコードに含まれる。
【００２３】
また、データ領域の実行権を変更する命令を実行させるまでに、ＲＯＰ等のコードリユースの手法を用いて実行させる命令（ｐｏｐ、ｐｕｓｈ等のスタック操作を行う命令等）のアドレス、引数等も上記のＤＥＰ制御を行うコードに含まれる。
【００２４】
上記のデータ領域の実行権を変更する命令のアドレス、当該命令の引数、ＲＯＰ等のコードリユースの手法を用いて実行させる命令のアドレス、当該命令の引数等は、スタック領域に格納され、ＲＯＰの手法で実行される。
【００２５】
（装置構成）
図２に、本発明の実施の形態に係る異常検出装置１０の機能構成図を示す。当該異常検出装置１０は、インターネット等のネットワーク上でパケットが流れる経路上に設置され、当該パケットを取得して、後述する方法で判定を行い、異常検出を行う。なお、特定のプロトコルのパケットのペイロードのみを取得して検査したり、特定サイズ以上（あるいは特定サイズ以下）のパケットのみを検査することとしてもよい。
【００２６】
図２に示すように、本実施の形態に係る異常検出装置は、パケット取得部１１、異常判定処理部１２、特徴データ列格納部１３、異常時制御部１４を備える。
【００２７】
パケット取得部１１は、ネットワークを流れるパケットを順次取得し、当該パケットを異常判定処理部１２に渡す。特徴データ列格納部１３には、後述するように、特徴データ列１と特徴データ列２が格納されている。異常判定処理部１２は、パケット取得部１１から受信したパケットにおける所定の長さ（例：４ｂｙｔｅ）のデータ列毎に、特徴データ列格納部１３に格納された特徴データ列１及び特徴データ列２との一致判定を行って通信の異常があるかどうか（具体的には、コードリユースを利用した攻撃があるかどうか）を判定する。異常判定処理部１２における判定処理についての詳細は後述する。
【００２８】
異常時制御部１４は、異常判定処理部１２により異常が検知された場合の処理を行う機能部である。異常時制御部１４は、例えば、異常が検知された場合に、ネットワーク管理者への通知を行う。また、異常時制御部１４は、異常が検知された場合に、異常に係るパケットのフローの通信を停止するようにネットワーク上の通信装置に対して制御命令を送る動作を行ってもよい。
【００２９】
本実施の形態に係る異常検出装置１０は、１つ又は複数のコンピュータに、本実施の形態で説明する処理内容を記述したプログラムを実行させることにより実現可能である。すなわち、異常検出装置１０が有する機能は、当該コンピュータに内蔵されるＣＰＵやメモリ、ハードディスクなどのハードウェア資源を用いて、異常検出装置１０で実施される処理に対応するプログラムを実行することによって実現することが可能である。また、上記プログラムは、コンピュータが読み取り可能な記録媒体（可搬メモリ等）に記録して、保存したり、配布したりすることが可能である。また、上記プログラムをインターネットや電子メールなど、ネットワークを通して提供することも可能である。
【００３０】
（異常検出装置１０の動作例）
以下、異常検出装置１０の動作をより詳細に説明する。本実施の形態では、研究の結果、ネットワーク上で、データが図３に示すようなイメージで流れることを想定している。
【００３１】
つまり、前述したメモリのデータ領域に実行権を与える（ＤＥＰフラグを書き換える）ための命令に対応するアドレスを示すデータ列（これを特徴データ列２とする）の前後に、当該アドレス以外の特徴的なデータ列（これを特徴データ列１とする）流れることを想定している。
【００３２】
特徴データ列１、特徴データ列２ともに、攻撃パケットを解析することにより、あるいは、コンピュータのソフトウェアを分析することにより、それぞれ予め複数種類を特定し、特徴データ列格納部１３に格納しておくものである。
【００３３】
特徴データ列１は、ＤＥＰを解除するための命令の引数（例：実行権を与えるデータ領域のアドレス、サイズ、実行権を与えることを示すパラメータ等）、ＤＥＰを解除する命令を実行させるまでに、ＲＯＰ等のコードリユースの手法を用いて実行させる命令（例：ｐｏｐ、ｐｕｓｈ等のスタック操作を行う命令等）のアドレス（絶対アドレス）、その引数等も特徴データ列１に含まれる。前述したように、これらは攻撃対象のコンピュータ内でスタック領域に積まれ、ＲＯＰにより、コード領域のコードの実行等のために使用される。特徴データ列１は、攻撃によってバリエーションがあり、例えば１０〜２０種類程度存在する。判定に際しては、この中で重み付けを行ってもよい。例えば、ＤＥＰを解除する命令の引数に相当する特徴データ列１の重みを、ＲＯＰの手順の途中で実行させる命令（ＤＥＰを解除する命令以外の命令）のアドレスに相当する特徴データ列１の重みよりも大きくすることが考えられる。
【００３４】
特徴データ列２は、上記のとおり、メモリのデータ領域のデータに実行権を与える（ＤＥＰを解除する）ための命令に対応するアドレス（絶対アドレス）を示すデータ列である。
【００３５】
通常、当該命令（関数）を有するＤＬＬファイルはＡＳＬＲ付きでコンパイルされている。ＡＳＬＲとは、ＯＳにおいて、関数等のメモリ上への読み込みアドレスをプロセス起動の度に異ならせるようにする仕組みである。つまり、当該命令がメモリ上のコード領域のどのアドレスに配置されるかは通常はわからない。ただし、実際上、ＤＬＬによっては、ＡＳＲＬ付でないものもあり、このようなＤＬＬファイルを解析することによって、ＤＥＰ制御に有効なアドレスが判明し、それが攻撃に利用される場合がある。本願の発明者は、ＲＯＰ等のコードリユース攻撃のパケットを解析することで、このアドレスがある程度固定化されていることを発見し、これを特徴データ列２として使用しているのである。
【００３６】
図３において、特徴データ列２の前に流れる特徴データ列１は、ＤＥＰ解除の命令実行のための引数、当該命令にジャンプするためのＲＯＰ手順の一例の命令実行のためのアドレス等であり、特徴データ列２の前に流れる特徴データ列１は、ＤＥＰ解除の命令実行の後処理におけるスタック操作のための命令のアドレス等に対応すると考えられる。
【００３７】
なお、特徴データ列２のみを使用して、ネットワークから取得したパケットにおけるデータ列が、特徴データ列２と一致したことを検出した場合に異常であると判定してもよいが、本実施の形態では、特徴データ列１も使用することで、誤検出を防止して確実な検出を行うこととしている。
【００３８】
また、本実施の形態においては、ネットワーク上を流れるデータがエンコードされている場合も想定して、特徴データ列１、特徴データ列２のそれぞれについてオリジナルの固定長バイト列とエンコードしたバイト列の２種類を特徴データ列格納部１３に格納して、取得したデータ列との比較を行うこととしている。
【００３９】
例えば、オリジナルの固定長バイト列（３２ｂｉｔマシンであれば４ｂｙｔｅ）が「６６  ４ｃ  ３６  ７ｃ」であるとして、これを％ｕエンコードした場合のデータ列は「％ｕ３６７ｃ％ｕ６６４ｃ」となり、当該％ｕエンコードデータがネットワーク上を流れた場合には、「２５  ７５  ３３  ３６  ３７  ６３  ２５  ７５  ３６  ３６  ３４  ６３」となる。本実施の形態では、特徴データ列として「６６  ４ｃ  ３６  ７ｃ」と「２５  ７５  ３３  ３６  ３７  ６３  ２５  ７５  ３６  ３６  ３４  ６３」を特徴データ列格納部１３内に保持し、比較対象のデータ列との比較を行う。
【００４０】
次に、図４のフローチャートを参照して、異常検出装置１０の異常判定処理部１２により実行される判定処理の手順を説明する。このフローチャートでは、上記の２種類のデータのうちの一方（例えばオリジナルデータ列）についての比較を示すが、他方についても全く同様の手順で実行される。
【００４１】
また、図４の手順は、パケットから取得した、特徴データ列の長さのデータ毎（比較対象データ列と呼ぶ）の比較処理を示している。更に、図４のフローにおける「ｄ」は、比較対象データ列と特徴データ列２が一致した場合に１とする変数であり、これらが一致しなかった場合は１以外の値をとる。また、ｂｙ、ｓｙは、特徴データ列２との一致があった後における特徴データ列１との一致のスコアを示す変数であり、ｂｘ、ｓｘは、特徴データ列２の一致の前における特徴データ列１との一致のスコアを示す変数である。これらはいずれも初期値は０である。また、以下の例では、特徴データ列１との一致が検知されたときに、ｂｙ、ｂｘを１増加させることとしているが、前述したように、一致した特徴データ列１の種類に応じて重み付けを行って、例えば、ある特徴データ列１と一致した場合には、２増加させ、別の特徴データ列１と一致した場合には、１増加させるといった処理を行うことも可能である。
【００４２】
まず、異常判定処理部１２は、ｄ＝１か否か（前回、比較対象データ列と特徴データ列２が一致したかどうか）を判定する（ステップ１０１）。ｄ＝１でない場合（ステップ１０１のＮｏ）、比較対象データ列が特徴データ列１に一致するかどうかを判定する（ステップ１０２）。比較対象データ列が特徴データ列１に一致する場合（ステップ１０２のＹｅｓ）、異常判定処理部１２は、ｂｘを１増加させるとともに、ｓｘ＝ｓｘ＋ｂｘとし（ステップ１０３）、次の比較対象データ列を取得して、ステップ１０１に戻る。なお、比較対象データ列がなければ未検出との結果で処理は終了する。他の場合も同様である。
【００４３】
ステップ１０２において、比較対象データ列が特徴データ列１に一致しない場合（ステップ１０２のＮｏ）、異常判定処理部１２は、比較対象データ列が特徴データ列２に一致するかどうか判定する（ステップ１０４）。比較対象データ列が特徴データ列２に一致する場合（ステップ１０４のＹｅｓ）、ｄ＝１として（ステップ１０５）、次の比較対象データ列に進む。
【００４４】
ステップ１０４において、比較対象データ列が特徴データ列２に一致しない場合（ステップ１０４のＮｏ）、ｓｘを１減算し、ｂｘを１減算して（ステップ１０６）、次の比較対象データ列に進む。
【００４５】
ステップ１０１において、ｄ＝１である場合（ステップ１０１のＹｅｓ）、すなわち、前回のデータ列の比較で特徴データ列２と一致している場合、異常判定処理部１２は、比較対象データ列が特徴データ列１に一致するかどうかを判定する（ステップ１０７）。比較対象データ列が特徴データ列１に一致しない場合（ステップ１０７のＮｏ）、ｓｙを１減算し、ｂｙを１減算して（ステップ１０８）、次の比較対象データ列に進む。
【００４６】
ステップ１０７で比較対象データ列が特徴データ列１に一致する場合（ステップ１０７のＹｅｓ）、異常判定処理部１２は、ｂｙを１増加させるとともに、ｓｙ＝ｓｙ＋ｂｙとする（ステップ１０９）。次に、異常判定処理部１２は、「ｓｘ＞閾値１  かつ  ｓｙ＞閾値２」であるか否かを判定する（ステップ１１０）。閾値１と閾値２は同じでもよいし、異なっていてもよい。「ｓｘ＞閾値１  かつ  ｓｙ＞閾値２」でない場合（ステップ１１０のＮｏ）、次の比較対象データ列に進む。「ｓｘ＞閾値１  かつ  ｓｙ＞閾値２」である場合（ステップ１１０のＹｅｓ）、「異常検出」であるとの結果を出力して処理を終了する。
【００４７】
結果が異常検出である場合、例えば、異常時制御部１４が、異常検出したことをネットワーク管理者に通知したり、パケットの通信を停止したりする。
【００４８】
すなわち、図４に示す処理では、比較対象データ列が特徴データ列２に一致する前後で特徴データ列１にマッチした場合に、それぞれに対応するスコアを１加算する。また、特徴データ列１との一致が連続した場合には、ｓｙ＝ｓｙ＋ｂｙ、ｓｘ＝ｓｘ＋ｂｘのようにボーナススコアを加算することとしている。特徴データ列１が連続する場合、コードの断片をつなぎあわせて実行させるＲＯＰ手順が行われている蓋然性が高いためである。比較対象データ列が特徴データ列１，２のいずれにも一致しなかった場合には、スコアを１減算する。ただし、スコアを負にはしない。そして、特徴データ列２との一致がある場合において、その前後における特徴データ列１との一致の度合を示すスコア（ｓｘ、ｓｙ）が一定の閾値を超えた場合に、異常と判定している。つまり、コードリユース攻撃があったものと判断する。
【００４９】
例えば、図５（ａ）に示すように、特徴データ列２との一致があっても、その前に特徴データ列１との一致がない場合（少ない場合を含む）には異常と判定せず、また、図５（ｂ）に示すように、特徴データ列２との一致があっても、その後に特徴データ列１との一致がない場合（少ない場合を含む）には異常と判定しないこととしている。また、図５（ｃ）に示すように、特徴データ列２との一致があっても、その前と後のいずれにも特徴データ列１との一致がない場合（少ない場合を含む）にも異常と判定しないこととしている。
【００５０】
（実施の形態のまとめ、効果等）
以上、説明したように、本実施の形態により、ネットワークを流れるデータに基づいて、コンピュータへの攻撃等の通信の異常を検出するための異常検出装置であって、第１の特徴データ列と第２の特徴データ列を格納する特徴データ列格納手段と、前記ネットワークから取得された所定のデータ長の比較対象データ列と、前記特徴データ列格納手段に格納されている前記第１の特徴データ列及び前記第２の特徴データ列との比較を行うことにより、前記通信の異常があるか否かを判定する異常判定手段とを備えることを特徴とする異常検出装置が提供される。
【００５１】
前記通信の異常は、例えば攻撃対象コンピュータに対する攻撃であり、前記第２の特徴データ列は当該攻撃対象コンピュータにおけるデータ実行防止（ＤＥＰ）設定を解除するための命令が格納されたメモリのアドレスを示すデータ列である。
【００５２】
前記第１の特徴データ列は、コードリユースを用いて前記命令の実行をさせるために、前記攻撃対象コンピュータのメモリにおけるスタック領域に格納されるデータであり、例えば、前記命令の引数、又は、前記コンピュータに存在する既存の命令を実行させるためのアドレスである。
【００５３】
前記異常判定手段は、例えば、前記比較対象データ列と前記第２の特徴データ列との一致を検知した場合において、当該比較対象データ列の前後における他の比較対象データ列と前記第１の特徴データ列との比較結果が所定の条件を満たす場合に前記通信の異常があると判定する。前記第１の特徴データ列は複数種類存在し、前記異常判定手段は、前記所定の条件の判定において、当該種類毎に前記第１の特徴データ列の重み付けを行うこととしてもよい。
【００５４】
本実施の形態によれば、ＲＯＰに代表されるコードリユース攻撃を、ネットワーク上で検出することが可能となる。これにより、コードリユースを用いるゼロデイ攻撃を低コストで検出できる。
【００５５】
本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において、種々変更・応用が可能である。
【符号の説明】
【００５６】
１０  異常検出装置
１１  パケット取得部
１２  異常判定処理部
１３  特徴データ列格納部
１４  異常時制御部
【図１】
2015127906.tif 000003
【図２】
2015127906.tif 000004
【図３】
2015127906.tif 000005
【図４】
2015127906.tif 000006
【図５】
2015127906.tif 000007