(57)【特許請求の範囲】
【請求項１】
データ実行保護（DEP）が有効化されたシステムについて脆弱性監視を行うための脆弱性監視方法であって、
前記データ実行保護（DEP）に関する操作の監視を行うステップと、
前記データ実行保護（DEP）を終了する操作を検出した際に、前記システムにおいて脆弱性を悪用する行為が発生したとみなすステップと、
を含み、
前記データ実行保護（DEP）に関する前記操作の前記監視が、
前記システムにおける前記データ実行保護（DEP）を終了するのに必要な、NtSetInformationProcess()およびNtSetSystemInformation()を含む複数の関数、とりわけこれら複数の関数における、関連する関数番号に対してフック(hook)処理を行い、これらの関数をコールする操作があれば、これらの関数をコールするパラメータを分析することにより、この操作が、前記データ実行保護（DEP）を終了する操作であるかどうかを判定することを含む
ことを特徴とする脆弱性監視方法。
【請求項２】
前記データ実行保護（DEP）に関する前記操作の前記監視は、
前記システムにおける前記データ実行保護を終了するのに必要な一つ以上の関数のうち、少なくとも一つの関数についての監視を含む
ことを特徴とする請求項１に記載の脆弱性監視方法。
【請求項３】
前記システムにおいて前記脆弱性を悪用する行為が発生したとみなした場合、前記行為をログに記録する、または前記行為に関するメッセージをシステム管理者に通知するための警告を発するステップをさらに含む
ことを特徴とする請求項１または２のいずれかに記載の脆弱性監視方法。
【請求項４】
データ実行保護（DEP）が有効化されたシステムについて脆弱性監視を行うための脆弱性監視装置であって、
前記データ実行保護（DEP）に関する操作の監視を行う監視部と、
前記データ実行保護（DEP）を終了する操作を前記監視部が検出した際に、前記システムにおいて脆弱性を悪用する行為が発生したと判定する判定部と、
を含み、
前記データ実行保護（DEP）に関する前記操作の前記監視が、
前記システムにおける前記データ実行保護（DEP）を終了するのに必要な、NtSetInformationProcess()およびNtSetSystemInformation()を含む複数の関数、とりわけこれら複数の関数における、関連する関数番号に対してフック(hook)処理を行い、これらの関数をコールする操作があれば、これらの関数をコールするパラメータを分析することにより、この操作が、前記データ実行保護（DEP）を終了する操作であるかどうかを判定することを含む
ことを特徴とする脆弱性監視装置。
【請求項５】
前記監視部は、前記システムにおける前記データ実行保護を終了するのに必要な一つ以上の関数のいずれかを監視する
ことを特徴とする請求項４に記載の脆弱性監視装置。
【請求項６】
前記システムにおいて前記脆弱性を悪用する行為が発生したと前記判定部が判定した場合、前記行為をログに記録する、または前記行為に関するメッセージをシステム管理者に通知するための警告を発する警告部をさらに含む
ことを特徴とする請求項４または５のいずれかに記載の脆弱性監視装置。
【請求項７】
サーバ上で実行されるとそのサーバに請求項１乃至３のいずれかに記載の脆弱性監視方法を実行させるコンピュータ読み取り可能コードを含む、コンピュータプログラム。
【請求項８】
請求項７に記載のコンピュータプログラムを記憶するコンピュータ読み取り可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータネットワークセキュリティの分野に関し、特に、データ実行保護(DEP)に基づき脆弱性を検出する装置および方法に関する。
【背景技術】
【０００２】
コンピュータネットワークの発達にともない、ネットワークアプリケーションがますます普及している。ネットワークアプリケーションが存在するオペレーティングシステムやネットワークサーバのアプリケーション層ソフトウェアには、不可避的に脆弱性が存在するため、ハッカーはこのような脆弱性を悪用してこれらのネットワークサーバに不正に侵入し、ネットワークアプリケーション、特にネットワークアプリケーションを利用するユーザーの資産に対し、大きな脅威を与える可能性がある。
【０００３】
脆弱性悪用の手順は、一般的に二つのパートを含む。すなわち、脆弱性の誘発と、shellcodeの実行である。まず、ハッカーは、対象マシンの脆弱性を誘発させ、脆弱性を誘発させた後にshellcodeを実行することによって、対象マシンに侵入する。shellcodeとは、脆弱性悪用の手順において用いられる小さなコードのことである。通例、このコードはコマンドラインコンソールを起動し、ハッカーはそのコンソールを利用して、侵入したマシンをコントロールできるようにすることから、ネットワークセキュリティの分野において、このコードはshellcodeと呼ばれている。脆弱性悪用の手順の典型的な例は、以下のとおりである。まず、対象マシン上の特定のプロセスにおける脆弱性を利用して命令レジスタを支配し、それと同時に、あるいはそれに先立って、そのプロセスにshellcodeを挿入する。そして、そのshellcodeをポイントするように命令レジスタを調整し、それによりshellcodeが実行され、対象マシンへの侵入が成功する。
【０００４】
脆弱性を誘発する方法は個々の脆弱性によって異なり、また、脆弱性を誘発する行為の検出も、個々の脆弱性によって異なる方法で処理する必要がある。したがって、対象マシン上の脆弱性を悪用する不正な操作の監視には、いまだ統一的な方法が存在しない。
マイクロソフトWindows(登録商標)オペレーティングシステムを採用する装置（たとえばネットワークサーバやクライアントなど）が増加していることから、装置上の脆弱性を悪用する不正な操作をどのように監視するかという問題は、ますます重要になっている。
【０００５】
現在のマイクロソフトWindows(登録商標)オペレーティングシステムは、データ実行保護(DEP)と呼ばれるセキュリティ技術をソフトウェアやハードウェアと組み合わせて採用することで、オペレーティングシステム上に存在するアプリケーションやサービスが非実行メモリからのコードを実行するのを防止している。マイクロソフトWindows(登録商標)オペレーティングシステムを採用する大抵のネットワーク装置では、システムセキュリティの強化のため、データ実行保護(DEP)が有効化されている。
【０００６】
しかし、マイクロソフトWindows(登録商標)オペレーティングシステムを採用する既存の装置において、脆弱性を悪用する不正な操作を包括的かつ効率的に監視可能な方法や装置は、いまだ存在しない。
そのため、このような脆弱性を悪用する不正な操作を監視可能な、統一的、包括的、かつ効率的な新たな脆弱性監視装置および方法が求められている。
【発明の概要】
【０００７】
本発明は、上記の課題に鑑みて提案されるものであり、上記課題を克服または少なくとも部分的に解決、または緩和する脆弱性検出装置および方法を提供する。
出願人は、以下の事象に着目した。すなわち、マイクロソフトWindows(登録商標)オペレーティングシステムを採用し、かつデータ実行保護(DEP)が有効化されている装置における脆弱性悪用の手順では、通常、shellcodeは、実行不可とマークアップされたデータ領域に置かれ、そのshellcodeを直接実行する行為は例外を誘発し、これが最終的にはshellcodeの実行失敗を招く。shellcodeが正常に実行されるには、DEPに対して、終了あるいは迂回操作の実行が必要である。DEPを終了させる操作を監視すれば、装置の脆弱性を悪用する例外的行為が検出可能であり、本発明はこれに基づくものである。
【０００８】
本発明の一態様によれば、データ実行保護（DEP）が有効化されたシステムについて脆弱性監視を行うための脆弱性監視方法であって、前記データ実行保護（DEP）に関する操作の監視を行うステップと、前記データ実行保護（DEP）を終了する操作を検出した際に、前記システムにおいて脆弱性を悪用する行為が発生したとみなすステップとを含むことを特徴とする脆弱性監視方法が提供される。
【０００９】
ここで、前記データ実行保護（DEP）に関する前記操作の前記監視は、前記システムにおける前記データ実行保護を終了するのに必要な一つ以上の関数のうちいずれかについての監視を含み得る。また、これらの関数はNtSetInformationProcess()とNtSetSystemInformation()のいずれか一つまたは両方であってもよい。DEPを終了する操作は、一般的に、NtSetInformationProcess()やNtSetSystemInformation()などのような関数の、特定の機能番号をコールことによって実現されるため、shellcodeを実行しようとする行為を監視するという目的は、このような関数へのコールを監視することによって達成可能である。
【００１０】
さらに、前記システムにおける前記データ実行保護を終了するのに必要な一つ以上の関数のいずれかについての監視を処理するのに、フック(hook)技術が利用可能である。hookとは、Windows(登録商標)オペレーティングシステムのメッセージハンドリングメカニズムにおける、あるポイントであって、このポイントにいくつかのサブルーチンを挿入して、メッセージを監視したり、メッセージが宛先アプリケーションに到達する前に、そのメッセージを修正したりすることができる。hookを用いる技術は一般にhook技術と呼ばれ、これはセキュリティソフトウェアで広く用いられる技術である。hook技術では、ソフトウェアコードの実行フローを修正することにより、ソフトウェアコードの監査やアクセス制御などの機能を実現可能である。Windows(登録商標)オペレーティングシステムでは、hook技術を用いることで、特定の関数の監視が実現可能である。
【００１１】
本発明の別の態様によれば、データ実行保護（DEP）が有効化されたシステムについて脆弱性監視を行うための脆弱性監視装置であって、前記データ実行保護（DEP）に関する操作の監視を行う監視部と、前記データ実行保護（DEP）を終了する操作を前記監視部が検出した際に、前記システムにおいて脆弱性を悪用する行為が発生したと判定する判定部とを含むことを特徴とする脆弱性監視装置が提供される。
【００１２】
本発明による脆弱性監視方法および装置は、DEPが有効化されたシステムにおいて、そのシステムに存在する脆弱性を悪用する不正な操作には一般的にshellcodeを実行する前にDEPを終了させることが必要であるため、DEPに関する操作を監視することで効率的に不正な操作を監視できるということを考慮に入れ、不正な操作を監視するための統一的な方法を提供する。
【図面の簡単な説明】
【００１３】
上記以外の各種効果及び利点については、好適な実施の形態に関する以下の詳細な記述を読むことで、当業者には明らかになるであろう。図面は好適な実施の形態の例示のみを目的としており、本発明を限定するものではない。全ての図面を通じて、同じ参照符号は同じ構成要素を示すのに用いられている。
【図１】本発明の実施の形態による脆弱性監視方法を概略的に示すフローチャートである。
【図２】本発明の実施の形態による脆弱性監視装置を概略的に示すブロック図である。
【図３】本発明による方法を実行するためのコンピュータを概略的に示すブロック図である。
【図４】本発明による方法を実現するプログラムコードを保持または搬送するためのストレージユニットを示す概略図である。
【発明を実施するための形態】
【００１４】
以下、図面及び特定の実施の形態と関連付けながら、本発明についてさらに説明する。
図１は、本発明の実施の形態による脆弱性監視方法100のフローチャートを示す。脆弱性監視方法100は、データ実行保護（DEP）が有効化されたシステムを採用した装置上で脆弱性監視を行うのに適した方法である。DEPが有効化されたシステムとは、一般的にはマイクロソフトWindows(登録商標)オペレーティングシステムである。図１に示すように、この方法はステップS110で始まり、システム内のDEPに関するすべての操作が監視される。上述のように、DEPが有効化されたシステムにおいては、脆弱性を悪用する悪意ある行為は、shellcodeを実行可能とするためにDEPを終了させる必要があるため、DEPに関する操作を監視することによって、このような悪意ある行為を適時発見できる。
【００１５】
また、マイクロソフトWindows(登録商標)オペレーティングシステムでは、DEPに関する操作、特に、DEPを終了させる操作は、必然的に一つ以上のシステム関数を含む。したがって、監視操作は、DEPを終了させるために必要な一つ以上のシステム関数のうち、少なくとも一つを監視する操作を含む。これらの関数は、たとえばNtSetInformationProcess()やNtSetSystemInformation()などである。もちろん、Windows(登録商標)オペレーティングシステムの発展にともない、関数が上述の関数に限られない可能性もある。したがって、DEPの終了に含まれるすべての関数が本発明の保護範囲に含まれる。
【００１６】
また、Windows(登録商標)オペレーティングシステムでは、関数を監視するためにフック(hook)技術が採用されており、すなわち、オペレーティングシステムのメッセージハンドリングメカニズムにおける特定のポイントを監視して、これらの関数に対するコールを、そのコールに含まれるメッセージの内容とともに監視する。特に、実施の形態では、モジュールがオペレーティングシステムのカーネルにロードされ、モジュールはSSDT（System Service Descriptor Table）における関数NtSetInformationProcess()および／またはNtSetSystemInformation()、特に、これらの関数における、関連する機能番号をhookする。もしこれらの関数をコールする行為があれば、これらの関数をコールするパラメーターを解析し、これがDEPを終了する行為かどうか判定する。
【００１７】
次に、ステップS110でDEPを終了する操作が検出された場合、ステップS120において、脆弱性を悪用する行為が対象システム内に生じたとみなされる。また、ステップS130において、脆弱性を悪用する行為が検出されたことがシステム管理者に対して様々な方法で通知される。これらの方法は、たとえば、そうした行為をログに記録することや、システム管理者に通知するために警告を発することなどを含む。なお、脆弱性を悪用する行為の記録および／あるいはシステム管理者への通知のために対象システムで採用し得るその他あらゆる方法が、本発明の保護範囲に含まれる。
【００１８】
本発明による脆弱性監視方法では、DEPを終了する操作を監視することにより、対象システムの脆弱性を悪用する操作を実行するための行為を効率的に検出する。
図２は、本発明の実施の形態による脆弱性監視装置200を概略的に示すブロック図である。脆弱性監視装置200は、データ実行保護（DEP）が有効化されたシステムを採用した装置上で脆弱性監視を行うのに適した装置である。図２に示すように、脆弱性監視装置200は、監視部210と判定部220とを含む。
【００１９】
監視部210は、DEPに関する操作を監視する。上述のとおり、DEPが有効化されたシステムにおいては、脆弱性を悪用する悪意ある行為は、shellcodeを実行可能とするためにDEPを終了させる必要があるため、監視部210は、DEPに関する操作を監視することによって、このような悪意ある行為を適時発見できる。
また、マイクロソフトWindows(登録商標)オペレーティングシステムでは、DEPに関する操作、特に、DEPを終了させる操作は、必然的に一つ以上のシステム関数を含む。したがって、監視部210は、DEPを終了させるために必要な一つ以上のシステム関数のうち、少なくとも一つを監視する。これらの関数は、たとえば、NtSetInformationProcess()やNtSetSystemInformation()などである。もちろん、Windows(登録商標)オペレーティングシステムの発展にともない、これらの関数が上述の関数に限られない可能性もある。したがって、DEPの終了に含まれるすべての関数が本発明の保護範囲に含まれる。
【００２０】
また、Windows(登録商標)オペレーティングシステムでは、関数を監視するためにhook技術が採用されており、すなわち、オペレーティングシステムのメッセージハンドリングメカニズムにおける特定のポイントを監視して、これらの関数に対するコールを、そのコールに含まれるメッセージの内容とともに監視する。特に、実施の形態では、監視部210はオペレーティングシステムのカーネルにロードされたモジュールを含み、モジュールはSSDT（system service descriptor table）における関数NtSetInformationProcess()および／またはNtSetSystemInformation()、特に、これらの関数における、関連する関数番号をフック(hook)する。もしこれらの関数をコールする操作があれば、これらの関数をコールするパラメーターを解析し、これがDEPを終了する操作か判定する。概して、監視部210は上述の監視方法のステップS110を実行する。
【００２１】
判定部220は、監視部210によって監視された操作を解析する。DEPを終了する操作を監視部210が検出した場合、判定部220は、脆弱性を悪用する行為が対象システム内に生じたとみなす。また、判定部220は、判定結果を警告部230に送信し、それにより、警告部230は、脆弱性を悪用する行為が検出されたことをシステム管理者に対し様々な方法で通知する。これらの方法は、たとえば、そうした行為をログに記録することや、システム管理者に通知するために警告を発することなどを含む。なお、脆弱性を悪用する行為の記録および／あるいはシステム管理者への通知のために対象システムで採用し得るその他あらゆる方法が、本発明の保護範囲に含まれる。概して、判定部220は上述の監視方法のステップS120を実行し、警告部230は上述の監視方法のステップS130を実行する。
【００２２】
本発明による脆弱性監視装置200は、DEPを終了する操作を監視することにより、対象システムの脆弱性を悪用する操作を実行するための行為を効率的に検出する。
なお、本発明の脆弱性監視装置200の個々の構成要素については、それら構成要素が実行する機能に応じて論理的に分割されているが、本発明はこれに限定されるものではなく、個々の構成要素を必要に応じてさらに分割したり組み合わせたりしてもよい。たとえば、いくつかの構成要素を組み合わせて一つの構成要素としてもよいし、いくつかの構成要素をさらに複数の副構成要素に分割してもよい。
【００２３】
本発明の個々の構成要素の実施の形態は、ハードウェアで、または一つ以上のプロセッサ上で実行されるソフトウェアモジュールで、またはこれらの組合せで実現可能である。当業者なら理解するところではあるが、実際には、本発明の実施の形態によるウェブサイトスキャン装置における構成要素の一部または全ての機能の一部または全ては、マイクロプロセッサまたはデジタル信号プロセッサ（DSP）を用いて実現可能である。本発明はまた、本文に記述した方法の一部または全体を実行する装置または装置プログラム（たとえば、コンピュータプログラムまたはコンピュータプログラム製品）の形で実現することもできる。本発明を実現するプログラムは、コンピュータ読取可能な媒体に保存される場合もあれば、一つ以上の信号の形とされる場合もある。こうした信号は、インターネットウェブサイトからのダウンロードによって取得される場合もあれば、キャリア信号で提供される場合もあり、また、それ以外のいかなる形で提供されてもよい。
【００２４】
たとえば、図３は、本発明によるネットワークスキャン方法を実行するコンピュータを示し、その一例として、アプリケーションサーバーが示されている。このコンピュータは従来同様、プロセッサ310と、コンピュータ読取り可能媒体またはコンピュータプログラム製品の形をとるメモリ320とを含む。メモリ320は、フラッシュメモリ、EEPROM（Electrically Erasable Programmable Read-Only Memory）、EPROM、ハードディスク、またはROMといった電子メモリとすればよい。メモリ320は、上述のいずれか一つの方法の方法ステップを実行するプログラムコード331のためのメモリ空間330を有する。たとえば、プログラムコード用のメモリ空間330は、それぞれが上記の方法におけるステップを実行する複数の個別のプログラムコード331を含む。これらのプログラムコードは、一つ以上のコンピュータプログラム製品から読み出されるか、またはこれに書き込まれることとすればよい。これらのコンピュータプログラム製品は、ハードディスク、コンパクトディスク（CD）、メモリーカード、フロッピディスクなどのプログラムコードキャリアを含む。こうしたコンピュータプログラム製品は通常、図４に示されるような可搬型または据置型のストレージユニットである。ストレージユニットは、図３のコンピュータにおけるメモリ320と同様に配置された、メモリセグメント、メモリ空間などを有するものとすればよい。プログラムコードは、たとえば、適切な形で圧縮してあってもよい。一般に、ストレージユニットは、コンピュータ読取可能なコード331'、すなわち、プロセッサ310などで読取可能なコードを含み、サーバによって実行されると、これらのコードがサーバに、上述した方法の個々のステップを実行させる。
【００２５】
なお、上記の実施の形態は本発明の例を示すものであって、本発明を限定するものではなく、当業者であれば、添付の特許請求の範囲から逸脱することなしに上記以外の実施の形態を設計可能である。特許請求の範囲において、括弧で閉じられた参照符号は、特許請求の範囲を限定するものと解釈されるべきものではない。「含む」という語は、特許請求の範囲に挙げられていない要素またはステップの存在を除外するものではない。要素に先行する「一の」または「一つの」という語は、当該要素が複数存在する構成を排除するものではない。本発明は、異なる複数の要素を含むハードウェア、及び、適切にプログラムされたコンピュータを用いて実現される。複数の装置を列挙した一つの請求項において、いくつかの装置が単一のハードウェアで実体化される場合もある。「第１」、「第２」、「第３」などの語を用いる場合、これらは順番を意図するものではない。こうした語は、名称として解釈すべきである。
【図１】
0005711824.tif 000002
【図２】
0005711824.tif 000003
【図３】
0005711824.tif 000004
【図４】
0005711824.tif 000005