説明

ウィンドウズ・カーネル改変探知方法

本発明に係るカーネル改変探知方法は、改変探知ドライバがシステムモジュールインフォメーションから探知対象ドライバのドライバ名、開始アドレス及び終端アドレスに関する情報を読み取る第1段階と、前記探知対象ドライバのドライバ名を用いて、前記探知対象ドライバのドライバ客体が使用する関数を抽出する第2段階と、前記関数のアドレスが前記開始アドレスと終端アドレスとの間の値であれば、前記探知対象ドライバが改変されていないと認識し、前記関数のアドレスが前記開始アドレスと終端アドレスとの間の値でなければ、前記探知対象ドライバが改変されていると認識する第3段階と、を含んでなる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ウィンドウズ・カーネル改変探知方法に係り、より詳しくは、ウィンドウズ・カーネル中の不変情報であるシステムモジュールインフォメーションを用いて、カーネルのドライバ及びシステムの改変を探知する方法に関する。
【背景技術】
【0002】
一般に、メモリ上における実行イメージコードに対する改変行為は、大部分の場合、フッキング(hooking)という行為で起こり、一部のハッカー用ツール(Hacking Tool)では実行イメージの元来動作とは異なる動作を作り出すために任意に特定のコードを修正することにより発生する。
【0003】
このような改変行為は、実行イメージが実際遂行しようとする動作を操作することにより、多くのセキュリティ上の問題を誘発させる。例えば、悪性プログラムの場合、特定の実行イメージに対するフッキングによって、自分を探し出せないようにするルートキット(root-kit)を形成させることにより、実行イメージに対する持続的な誤動作を誘発させることができる。
【0004】
ウィンドウズ(登録商標)・カーネルシステムにおける代表的なカーネル改変行為としては、ドライバ改変やシステム改変などがある。上述した悪性プログラムだけでなく、セキュリティプログラムもカーネル改変を介して多様な保安機能を行う。
【0005】
例えば、韓国内で現在サービスしているキーボードセキュリティプログラムとしては、インカインターネットのアンプロデクトキークリプト、ソフトキャンプのセキュアーキーストローク、安哲秀研究所のアンラボ(AhnLab)オンラインセキュリティマイキーデフェンス、キングス情報通信のケイデフェンスなどの多様な製品が挙げられるが、これら大部分のキーボードセキュリティプログラムはカーネルを改変してキーボード保安機能を行う。
【0006】
すなわち、キーボードセキュリティプログラムは、ウィンドウズ・カーネルを改変することにより、キーボード入力データをフッキングし、キーボード入力データが正常なウィンドウズ処理手続きを従わず、キーボードセキュリティプログラムにより設定された処理手続きを従うようにする。よって、クライアントコンピュータにキーロガー(keylogger)が設置されていても、キーボード入力データが正常なウィンドウズ処理手続きを従わないため、キーロガーはキーボード入力データの読み取り或いは横取りができなくなる。
【0007】
今日、インターネットを介して多数のウェブサイトがユーザクライアントに多様なキーボードセキュリティプログラムをサービスするから、大部分のクライアントシステムでは少なくとも2つのキーボードセキュリティプログラムが設置される。このように一つのクライアントシステムに多数のキーボードセキュリティシステムが設置された場合、全てのキーボードセキュリティプログラムがそれぞれウィンドウズ・カーネルを改変するから、キーボードセキュリティプログラム間の衝突が発生することにより運営体制の安定性を保障することができなくなる。
【0008】
実際、キーボードセキュリティプログラムは、クライアントシステムにキーロガーが設置された場合にのみ実行されても充分である。すなわち、キーロガーがキーボード処理関連カーネルを改変した場合にのみキーボードセキュリティプログラムが実行されるようにすれば、上述したキーボードセキュリティプログラム間の衝突は発生しない。ところが、従来のキーボードプログラムは、キーロガーによるカーネル改変有無を探知することができないため、ユーザクライアントシステムが特定のウェブサイトに接続すれば無条件実行されるように設定されており、これによりキーボードセキュリティプログラム間の衝突は必然的に発生するという問題点がある。
【発明の概要】
【発明が解決しようとする課題】
【0009】
そこで、本発明は、上述した従来の技術の問題点を解決するために案出されたもので、その目的は、悪性プログラムによるカーネル改変有無を探知してユーザにセキュリティ上の危険を通知する方法を提供することにある。
【課題を解決するための手段】
【0010】
上記目的を達成するための本発明に係るカーネル改変探知方法は、改変探知ドライバがシステムモジュールインフォメーションから探知対象ドライバのドライバ名、開始アドレス及び終端アドレスに関する情報を読み取る第1段階と、前記探知対象ドライバのドライバ名を用いて、前記探知対象ドライバのドライバ客体が使用する関数を抽出する第2段階と、前記関数のアドレスが前記開始アドレスと終端アドレスとの間の値であれば、前記探知対象ドライバが改変されていないと認識し、前記関数のアドレスが前記開始アドレスと終端アドレスとの間の値でなければ、前記探知対象ドライバが改変されたと認識する第3段階とを含んでなることを特徴とする。
【発明の効果】
【0011】
上述した本発明によれば、カーネルのシステムモジュールインフォメーションを用いてカーネルのドライバ及びシステムの改変有無を探知することができるため、ユーザにセキュリティ上の危険を通知し、それに対応することができるようにするという効果がある。
【図面の簡単な説明】
【0012】
【図1】一般なウィンドウズ・カーネルメモリ構造を示す図である。
【図2】ウィンドウズ・カーネルメモリにロードされた悪性ドライバがドライバ客体空間のドライバ客体関数テーブルを改変した場合を示す図である。
【図3】図2のウィンドウズ・カーネルメモリに改変探知ドライバがロードされた状態を示す図である。
【図4】本発明の一実施例に係る改変探知ドライバのウィンドウズ・カーネル改変探知方法を示す動作流れ図である。
【発明を実施するための形態】
【0013】
以下、添付図面を参照して本発明の一実施例に係るカーネル改変探知方法を詳細に説明する。
図1は一般なウィンドウズ(登録商標)・カーネルメモリ構造を示す図である。
【0014】
ウィンドウズ・カーネルメモリには、ウィンドウズ運営体制上で実行される全てのドライバに関する情報が多様な形態で格納される。このウィンドウズ・カーネルメモリに格納される情報には、システムモジュールインフォメーション11、ドライバ客体空間12、ドライバイメージ空間(PE(Portable Executable)構造体)13、IDT(Interrupt Descriptor Table)14、及びSSDT(System Service Descriptor Table)16が含まれる。
【0015】
NTカーネル17は、ウィンドウズ・カーネルメモリの内部で一般に使用される多様なデータ構造体の管理、ドライバロード、装置の入出力、システムコール提供などを担当する。
【0016】
システムモジュールインフォメーション11には、現在ロードされたドライバの目録が格納されるが、各ドライバイメージのドライバ名と、そのドライバイメージがロードされた箇所の開始アドレス及び終端アドレスに関する情報が格納される。
【0017】
ドライバ客体空間12には各ドライバ客体の関数テーブルが格納されるが、任意のドライバのドライバ客体を構成する関数が参照するアドレス値は、該当ドライバのドライバイメージ空間(PE構造体)13内のアドレス値でなければならない。
【0018】
ドライバイメージ空間(PE構造体)13には、ドライバファイルが現在メモリにロードされたドライバのイメージ(ドライバファイルがメモリにロードされた状態をイメージという)が格納される。ドライバファイルとドライバイメージはPE構造体の形で構成されており、PE構造体は実行ファイルの機械語の位置、外部関数使用目録(Import Table)、外部公開関数目録(Export Table)の位置、該当ファイルが実行できるプラットフォームの種類、運営体制がファイルを実行させるときに開始コードの位置などの情報を格納する。
【0019】
IDT14はインタラプトハンドラーアドレスを格納する。SSDT16はシステムコール発生の際に各機能毎に呼び出さなければならないルーチンのアドレスを格納する。
キーロガーを始めとした悪性プログラムは、メモリのドライバ客体空間12、ドライバイメージ空間(PE構造体)13、IDT14、SSDT16及びフックコールバックなどを改変してクラッキングを試みる。ところが、この悪性プログラムは、カーネル領域のシステムモジュールインフォメーション11は絶対改変することができない。もしシステムモジュールインフォメーション11が改変されると、運営体制が誤動作してシステムが再びブートされる。
【0020】
図2はウィンドウズ・カーネルメモリにロードされた悪性ドライバがドライバ客体空間のドライバ客体関数テーブルを改変した場合を示す図である。
悪性プログラムがメモリにロードされると、該当悪性プログラムの実行ドライバイメージ(悪性.sys)もドライバイメージ空間(PE構造体)13にロードされる。また、システムモジュールインフォメーション11には該当悪性ドライバのドライバ名と、実行ドライバイメージが格納された箇所の開始アドレス及び終端アドレスが格納される。また、該当悪性ドライバ客体が使用する関数のテーブルがドライバ客体空間12に格納され、図示されていないIDT、SSDT及びドライバイメージ空間(PE構造体)13それ自体にもそれぞれ該当する情報が格納される。
【0021】
例えば、このコンピュータシステムに3つのドライバ(hello.sys、world.sys、悪性.sys)がロードされた場合、各ドライバイメージはドライバイメージ空間(PE構造体)13にそれぞれロードされて格納され、システムモジュールインフォメーション11にはメモリにロードされたドライバイメージ目録が格納されるが、各ドライバイメージのドライバ名、開始アドレス及び終端アドレスがそれぞれ格納される。
【0022】
一方、実際各ドライバが駆動されるために必要な関数は、ドライバ客体空間12に纏められて格納されるが、悪性ドライバがworld.sysドライバ客体の任意の関数が参照するアドレス値を悪性ドライバイメージ内のアドレス値に改変する場合、フッキング(Hooking)が発生する。例えば、world.sysドライバ客体のキーボード値処理関数の参照アドレス値を悪性ドライバイメージ内のアドレス値(例えば、530)に改変すると、world.sysドライバはキーボード値を悪性ドライバへ出力し、悪性ドライバの立場ではそのキーボード値を横取りすることができる。
【0023】
本発明は、このように悪性ドライバがカーネルを改変したか否かを探知する方法を提案する。
本発明のカーネル改変探知方法は、改変探知プログラムとして提供されてユーザコンピュータで実行される。図3は図2のウィンドウズ・カーネルメモリに改変探知ドライバがロードされた状態を示す図である。
【0024】
カーネル改変探知プログラムが実行されると、改変探知ドライバイメージがドライバイメージ空間(PE構造体)13にロードされ、システムモジュールインフォメーション11にその改変探知ドライバのドライバ名とイメージ空間における開始アドレス及び終端アドレスが格納される。しかも、ドライバ客体空間12には改変探知ドライバで使用される関数テーブルが格納される。
【0025】
本発明は、このようにウィンドウズ・カーネルメモリにロードされた改変探知ドライバによって実現されるところ、カーネルドライバの改変有無を探知する。
図4は本発明の一実施例に係る改変探知ドライバのウィンドウズ・カーネル改変探知方法を示す動作流れ図である。
【0026】
まず、改変探知ドライバは、システムモジュールインフォメーションからドライバ目録を読み取るが、現在システムで実行中のドライバ名と開始アドレス及び終端アドレスに関する情報を抽出する(S41)。
【0027】
改変探知ドライバは、システムモジュールインフォメーションから読み取ったドライバ目録中の探知対象ドライバを設定し、探知対象ドライバの開始アドレスを変数iに設定し、探知対象ドライバの終端アドレスを変数jに設定する(S42)。
【0028】
次に、改変探知ドライバは、探知対象ドライバ客体が使用する関数の引数を抽出する(S43)。この際、改変探知ドライバは、ObReferenceObject関数、ObReferenceObjectByName関数、ObReferenceObjectByHandle関数、ObReferenceObjectByPointer関数などを用いると、探知対象ドライバのドライバ客体の関数テーブルが格納された位置を把握することができ、その探知対象ドライバ客体の関数テーブルから各関数のアドレスを抽出することができる。
【0029】
改変探知ドライバは、段階S43で抽出されたアドレスが変数iと変数jとの間の値であるか否かを判断し(S44)、抽出されたアドレスが変数iと変数jとの間の値であれば、該当探知対象ドライバには改変が発生していないと判断し(S45)、全てのドライバ目録の改変探知が完了したか否かを判断する(S46)。
【0030】
改変探知を行うべきドライバが残っていれば、段階S42に進んで探知対象ドライバの設定過程から繰り返し行い、改変探知を行うべきドライバが残っていなければ、終了する。
【0031】
一方、段階S44の判断段階で、段階S43で抽出されたアドレスが変数iと変数jとの間の値でなければ、改変探知ドライバは、該当探知対象ドライバが改変されていると認識し(S47)、ユーザに該当実行プログラムの改変事実を警告した(S48)後、段階S46に進む。
【0032】
本発明は、上述したドライバ客体の改変有無だけでなく、IDTとドライバイメージ空間(PE構造体)、SSDT及びフックコールバックの改変有無を探知することができる。
【0033】
IDT14の場合、HalGetInterruptVector関数を用いて探知対象デバイスのインタラプト番号を求め、asm sidt命令を用いて該当探知対象デバイスのIDTを求める。そのIDTアドレス及びサービスルーチンアドレスを検査すると、IDT改変有無を探知することができる。
【0034】
ドライバイメージ空間(PE構造体)13の場合、探知対象ドライバを開き、探知対象ドライバの開始部分をIMAGE_DOS_HEADER構造体として設定し、そのIMAGE_DOS_HEADER構造体からIMAGE_OPTIONAL_HEADER構造体の位置を求め、IMAGE_OPTIONAL_HEADER構造体からIMAGE_IMPORT_DESCRIPTOR構造体の位置を求める。そして、IMAGE_IMPORT_DESCRIPTOR構造体に含まれた関数テーブルを調査し、各関数のアドレス改変有無を確認する。
【0035】
SSDTの場合、KeServiceDescriptorTableに含まれた関数アドレスを検査して改変有無を確認する。
フックコールバックの場合、ObReferenceObject関数、ObReferenceObjectByName関数、ObReferenceObjectByHandle関数、ObReferenceObjectByPointer関数などを用いて探知対象ドライバのドライバ客体を求め、求められたドライバ客体を用いてデバイス客体を求める。そして、そのデバイス客体に含まれたフックコールバックアドレスを検査して改変有無を確認する。
【0036】
以上、本発明の技術思想を添付図面に基づいて述べたが、これは本発明の好適な実施例を例示的に説明するもので、本発明を限定するためのものではない。なお、当該技術分野における通常の知識の有する者であれば、本発明の技術思想の範囲を逸脱することなく、多様な変形及び変更を加え得ることを理解するであろう。

【特許請求の範囲】
【請求項1】
ウィンドウズ・カーネル改変探知方法であって、
改変探知ドライバがシステムモジュールインフォメーションから探知対象ドライバのドライバ名、開始アドレス及び終端アドレスに関する情報を読み取る第1段階と、
前記探知対象ドライバのドライバ名を用いて、前記探知対象ドライバのドライバ客体が使用する関数を抽出する第2段階と、
前記関数のアドレスが前記開始アドレスと終端アドレスとの間の値であれば、前記探知対象ドライバが改変されていないと認識し、前記関数のアドレスが前記開始アドレスと終端アドレスとの間の値でなければ、前記探知対象ドライバが改変されていると認識する第3段階と、を含むことを特徴とする、ウィンドウズ・カーネル改変探知方法。
【請求項2】
前記第2段階はObReferenceObject関数、ObReferenceObjectByName関数、ObReferenceObjectByHandle関数、及びObReferenceObjectByPointer関数のいずれか一つを用いることを特徴とする、請求項1に記載のウィンドウズ・カーネル改変探知方法。
【請求項3】
前記改変探知ドライバが前記探知対象ドライバのドライバ客体、IDT、PE構造体、SSDT及びフックコールバックの改変有無をさらに探知することを特徴とする、請求項1に記載のウィンドウズ・カーネル改変探知方法。
【請求項4】
前記改変探知ドライバは前記探知対象ドライバが改変されていると認識し、ユーザに前記探知対象ドライバの実行プログラムの改変事実を警告することを特徴とする、請求項1に記載のウィンドウズ・カーネル改変探知方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate


【公表番号】特表2013−506185(P2013−506185A)
【公表日】平成25年2月21日(2013.2.21)
【国際特許分類】
【出願番号】特願2012−530763(P2012−530763)
【出願日】平成22年8月12日(2010.8.12)
【国際出願番号】PCT/KR2010/005297
【国際公開番号】WO2011/037321
【国際公開日】平成23年3月31日(2011.3.31)
【出願人】(506216774)インカ インターネット カンパニー リミテッド (7)