(57)【要約】本発明に係るカーネル改変探知方法は、改変探知ドライバがシステムモジュールインフォメーションから探知対象ドライバのドライバ名、開始アドレス及び終端アドレスに関する情報を読み取る第１段階と、前記探知対象ドライバのドライバ名を用いて、前記探知対象ドライバのドライバ客体が使用する関数を抽出する第２段階と、前記関数のアドレスが前記開始アドレスと終端アドレスとの間の値であれば、前記探知対象ドライバが改変されていないと認識し、前記関数のアドレスが前記開始アドレスと終端アドレスとの間の値でなければ、前記探知対象ドライバが改変されていると認識する第３段階と、を含んでなる。
2013506185.tif 000002
【特許請求の範囲】
【請求項１】
ウィンドウズ・カーネル改変探知方法であって、
改変探知ドライバがシステムモジュールインフォメーションから探知対象ドライバのドライバ名、開始アドレス及び終端アドレスに関する情報を読み取る第１段階と、
前記探知対象ドライバのドライバ名を用いて、前記探知対象ドライバのドライバ客体が使用する関数を抽出する第２段階と、
前記関数のアドレスが前記開始アドレスと終端アドレスとの間の値であれば、前記探知対象ドライバが改変されていないと認識し、前記関数のアドレスが前記開始アドレスと終端アドレスとの間の値でなければ、前記探知対象ドライバが改変されていると認識する第３段階と、を含むことを特徴とする、ウィンドウズ・カーネル改変探知方法。
【請求項２】
前記第２段階はＯｂＲｅｆｅｒｅｎｃｅＯｂｊｅｃｔ関数、ＯｂＲｅｆｅｒｅｎｃｅＯｂｊｅｃｔＢｙＮａｍｅ関数、ＯｂＲｅｆｅｒｅｎｃｅＯｂｊｅｃｔＢｙＨａｎｄｌｅ関数、及びＯｂＲｅｆｅｒｅｎｃｅＯｂｊｅｃｔＢｙＰｏｉｎｔｅｒ関数のいずれか一つを用いることを特徴とする、請求項１に記載のウィンドウズ・カーネル改変探知方法。
【請求項３】
前記改変探知ドライバが前記探知対象ドライバのドライバ客体、ＩＤＴ、ＰＥ構造体、ＳＳＤＴ及びフックコールバックの改変有無をさらに探知することを特徴とする、請求項１に記載のウィンドウズ・カーネル改変探知方法。
【請求項４】
前記改変探知ドライバは前記探知対象ドライバが改変されていると認識し、ユーザに前記探知対象ドライバの実行プログラムの改変事実を警告することを特徴とする、請求項１に記載のウィンドウズ・カーネル改変探知方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ウィンドウズ・カーネル改変探知方法に係り、より詳しくは、ウィンドウズ・カーネル中の不変情報であるシステムモジュールインフォメーションを用いて、カーネルのドライバ及びシステムの改変を探知する方法に関する。
【背景技術】
【０００２】
一般に、メモリ上における実行イメージコードに対する改変行為は、大部分の場合、フッキング(hooking)という行為で起こり、一部のハッカー用ツール(Hacking Tool)では実行イメージの元来動作とは異なる動作を作り出すために任意に特定のコードを修正することにより発生する。
【０００３】
このような改変行為は、実行イメージが実際遂行しようとする動作を操作することにより、多くのセキュリティ上の問題を誘発させる。例えば、悪性プログラムの場合、特定の実行イメージに対するフッキングによって、自分を探し出せないようにするルートキット(root-kit)を形成させることにより、実行イメージに対する持続的な誤動作を誘発させることができる。
【０００４】
ウィンドウズ（登録商標）・カーネルシステムにおける代表的なカーネル改変行為としては、ドライバ改変やシステム改変などがある。上述した悪性プログラムだけでなく、セキュリティプログラムもカーネル改変を介して多様な保安機能を行う。
【０００５】
例えば、韓国内で現在サービスしているキーボードセキュリティプログラムとしては、インカインターネットのアンプロデクトキークリプト、ソフトキャンプのセキュアーキーストローク、安哲秀研究所のアンラボ（ＡｈｎＬａｂ）オンラインセキュリティマイキーデフェンス、キングス情報通信のケイデフェンスなどの多様な製品が挙げられるが、これら大部分のキーボードセキュリティプログラムはカーネルを改変してキーボード保安機能を行う。
【０００６】
すなわち、キーボードセキュリティプログラムは、ウィンドウズ・カーネルを改変することにより、キーボード入力データをフッキングし、キーボード入力データが正常なウィンドウズ処理手続きを従わず、キーボードセキュリティプログラムにより設定された処理手続きを従うようにする。よって、クライアントコンピュータにキーロガー(keylogger)が設置されていても、キーボード入力データが正常なウィンドウズ処理手続きを従わないため、キーロガーはキーボード入力データの読み取り或いは横取りができなくなる。
【０００７】
今日、インターネットを介して多数のウェブサイトがユーザクライアントに多様なキーボードセキュリティプログラムをサービスするから、大部分のクライアントシステムでは少なくとも２つのキーボードセキュリティプログラムが設置される。このように一つのクライアントシステムに多数のキーボードセキュリティシステムが設置された場合、全てのキーボードセキュリティプログラムがそれぞれウィンドウズ・カーネルを改変するから、キーボードセキュリティプログラム間の衝突が発生することにより運営体制の安定性を保障することができなくなる。
【０００８】
実際、キーボードセキュリティプログラムは、クライアントシステムにキーロガーが設置された場合にのみ実行されても充分である。すなわち、キーロガーがキーボード処理関連カーネルを改変した場合にのみキーボードセキュリティプログラムが実行されるようにすれば、上述したキーボードセキュリティプログラム間の衝突は発生しない。ところが、従来のキーボードプログラムは、キーロガーによるカーネル改変有無を探知することができないため、ユーザクライアントシステムが特定のウェブサイトに接続すれば無条件実行されるように設定されており、これによりキーボードセキュリティプログラム間の衝突は必然的に発生するという問題点がある。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
そこで、本発明は、上述した従来の技術の問題点を解決するために案出されたもので、その目的は、悪性プログラムによるカーネル改変有無を探知してユーザにセキュリティ上の危険を通知する方法を提供することにある。
【課題を解決するための手段】
【００１０】
上記目的を達成するための本発明に係るカーネル改変探知方法は、改変探知ドライバがシステムモジュールインフォメーションから探知対象ドライバのドライバ名、開始アドレス及び終端アドレスに関する情報を読み取る第１段階と、前記探知対象ドライバのドライバ名を用いて、前記探知対象ドライバのドライバ客体が使用する関数を抽出する第２段階と、前記関数のアドレスが前記開始アドレスと終端アドレスとの間の値であれば、前記探知対象ドライバが改変されていないと認識し、前記関数のアドレスが前記開始アドレスと終端アドレスとの間の値でなければ、前記探知対象ドライバが改変されたと認識する第３段階とを含んでなることを特徴とする。
【発明の効果】
【００１１】
上述した本発明によれば、カーネルのシステムモジュールインフォメーションを用いてカーネルのドライバ及びシステムの改変有無を探知することができるため、ユーザにセキュリティ上の危険を通知し、それに対応することができるようにするという効果がある。
【図面の簡単な説明】
【００１２】
【図１】一般なウィンドウズ・カーネルメモリ構造を示す図である。
【図２】ウィンドウズ・カーネルメモリにロードされた悪性ドライバがドライバ客体空間のドライバ客体関数テーブルを改変した場合を示す図である。
【図３】図２のウィンドウズ・カーネルメモリに改変探知ドライバがロードされた状態を示す図である。
【図４】本発明の一実施例に係る改変探知ドライバのウィンドウズ・カーネル改変探知方法を示す動作流れ図である。
【発明を実施するための形態】
【００１３】
以下、添付図面を参照して本発明の一実施例に係るカーネル改変探知方法を詳細に説明する。
図１は一般なウィンドウズ（登録商標）・カーネルメモリ構造を示す図である。
【００１４】
ウィンドウズ・カーネルメモリには、ウィンドウズ運営体制上で実行される全てのドライバに関する情報が多様な形態で格納される。このウィンドウズ・カーネルメモリに格納される情報には、システムモジュールインフォメーション１１、ドライバ客体空間１２、ドライバイメージ空間（ＰＥ(Portable Executable)構造体）１３、ＩＤＴ(Interrupt Descriptor Table)１４、及びＳＳＤＴ(System Service Descriptor Table)１６が含まれる。
【００１５】
ＮＴカーネル１７は、ウィンドウズ・カーネルメモリの内部で一般に使用される多様なデータ構造体の管理、ドライバロード、装置の入出力、システムコール提供などを担当する。
【００１６】
システムモジュールインフォメーション１１には、現在ロードされたドライバの目録が格納されるが、各ドライバイメージのドライバ名と、そのドライバイメージがロードされた箇所の開始アドレス及び終端アドレスに関する情報が格納される。
【００１７】
ドライバ客体空間１２には各ドライバ客体の関数テーブルが格納されるが、任意のドライバのドライバ客体を構成する関数が参照するアドレス値は、該当ドライバのドライバイメージ空間（ＰＥ構造体）１３内のアドレス値でなければならない。
【００１８】
ドライバイメージ空間（ＰＥ構造体）１３には、ドライバファイルが現在メモリにロードされたドライバのイメージ（ドライバファイルがメモリにロードされた状態をイメージという）が格納される。ドライバファイルとドライバイメージはＰＥ構造体の形で構成されており、ＰＥ構造体は実行ファイルの機械語の位置、外部関数使用目録（Import Table）、外部公開関数目録(Export Table)の位置、該当ファイルが実行できるプラットフォームの種類、運営体制がファイルを実行させるときに開始コードの位置などの情報を格納する。
【００１９】
ＩＤＴ１４はインタラプトハンドラーアドレスを格納する。ＳＳＤＴ１６はシステムコール発生の際に各機能毎に呼び出さなければならないルーチンのアドレスを格納する。
キーロガーを始めとした悪性プログラムは、メモリのドライバ客体空間１２、ドライバイメージ空間（ＰＥ構造体）１３、ＩＤＴ１４、ＳＳＤＴ１６及びフックコールバックなどを改変してクラッキングを試みる。ところが、この悪性プログラムは、カーネル領域のシステムモジュールインフォメーション１１は絶対改変することができない。もしシステムモジュールインフォメーション１１が改変されると、運営体制が誤動作してシステムが再びブートされる。
【００２０】
図２はウィンドウズ・カーネルメモリにロードされた悪性ドライバがドライバ客体空間のドライバ客体関数テーブルを改変した場合を示す図である。
悪性プログラムがメモリにロードされると、該当悪性プログラムの実行ドライバイメージ（悪性．ｓｙｓ）もドライバイメージ空間（ＰＥ構造体）１３にロードされる。また、システムモジュールインフォメーション１１には該当悪性ドライバのドライバ名と、実行ドライバイメージが格納された箇所の開始アドレス及び終端アドレスが格納される。また、該当悪性ドライバ客体が使用する関数のテーブルがドライバ客体空間１２に格納され、図示されていないＩＤＴ、ＳＳＤＴ及びドライバイメージ空間（ＰＥ構造体）１３それ自体にもそれぞれ該当する情報が格納される。
【００２１】
例えば、このコンピュータシステムに３つのドライバ（ｈｅｌｌｏ．ｓｙｓ、ｗｏｒｌｄ．ｓｙｓ、悪性．ｓｙｓ）がロードされた場合、各ドライバイメージはドライバイメージ空間（ＰＥ構造体）１３にそれぞれロードされて格納され、システムモジュールインフォメーション１１にはメモリにロードされたドライバイメージ目録が格納されるが、各ドライバイメージのドライバ名、開始アドレス及び終端アドレスがそれぞれ格納される。
【００２２】
一方、実際各ドライバが駆動されるために必要な関数は、ドライバ客体空間１２に纏められて格納されるが、悪性ドライバがｗｏｒｌｄ．ｓｙｓドライバ客体の任意の関数が参照するアドレス値を悪性ドライバイメージ内のアドレス値に改変する場合、フッキング(Hooking)が発生する。例えば、ｗｏｒｌｄ．ｓｙｓドライバ客体のキーボード値処理関数の参照アドレス値を悪性ドライバイメージ内のアドレス値（例えば、５３０）に改変すると、ｗｏｒｌｄ．ｓｙｓドライバはキーボード値を悪性ドライバへ出力し、悪性ドライバの立場ではそのキーボード値を横取りすることができる。
【００２３】
本発明は、このように悪性ドライバがカーネルを改変したか否かを探知する方法を提案する。
本発明のカーネル改変探知方法は、改変探知プログラムとして提供されてユーザコンピュータで実行される。図３は図２のウィンドウズ・カーネルメモリに改変探知ドライバがロードされた状態を示す図である。
【００２４】
カーネル改変探知プログラムが実行されると、改変探知ドライバイメージがドライバイメージ空間（ＰＥ構造体）１３にロードされ、システムモジュールインフォメーション１１にその改変探知ドライバのドライバ名とイメージ空間における開始アドレス及び終端アドレスが格納される。しかも、ドライバ客体空間１２には改変探知ドライバで使用される関数テーブルが格納される。
【００２５】
本発明は、このようにウィンドウズ・カーネルメモリにロードされた改変探知ドライバによって実現されるところ、カーネルドライバの改変有無を探知する。
図４は本発明の一実施例に係る改変探知ドライバのウィンドウズ・カーネル改変探知方法を示す動作流れ図である。
【００２６】
まず、改変探知ドライバは、システムモジュールインフォメーションからドライバ目録を読み取るが、現在システムで実行中のドライバ名と開始アドレス及び終端アドレスに関する情報を抽出する（Ｓ４１）。
【００２７】
改変探知ドライバは、システムモジュールインフォメーションから読み取ったドライバ目録中の探知対象ドライバを設定し、探知対象ドライバの開始アドレスを変数ｉに設定し、探知対象ドライバの終端アドレスを変数ｊに設定する（Ｓ４２）。
【００２８】
次に、改変探知ドライバは、探知対象ドライバ客体が使用する関数の引数を抽出する（Ｓ４３）。この際、改変探知ドライバは、ＯｂＲｅｆｅｒｅｎｃｅＯｂｊｅｃｔ関数、ＯｂＲｅｆｅｒｅｎｃｅＯｂｊｅｃｔＢｙＮａｍｅ関数、ＯｂＲｅｆｅｒｅｎｃｅＯｂｊｅｃｔＢｙＨａｎｄｌｅ関数、ＯｂＲｅｆｅｒｅｎｃｅＯｂｊｅｃｔＢｙＰｏｉｎｔｅｒ関数などを用いると、探知対象ドライバのドライバ客体の関数テーブルが格納された位置を把握することができ、その探知対象ドライバ客体の関数テーブルから各関数のアドレスを抽出することができる。
【００２９】
改変探知ドライバは、段階Ｓ４３で抽出されたアドレスが変数ｉと変数ｊとの間の値であるか否かを判断し（Ｓ４４）、抽出されたアドレスが変数ｉと変数ｊとの間の値であれば、該当探知対象ドライバには改変が発生していないと判断し（Ｓ４５）、全てのドライバ目録の改変探知が完了したか否かを判断する（Ｓ４６）。
【００３０】
改変探知を行うべきドライバが残っていれば、段階Ｓ４２に進んで探知対象ドライバの設定過程から繰り返し行い、改変探知を行うべきドライバが残っていなければ、終了する。
【００３１】
一方、段階Ｓ４４の判断段階で、段階Ｓ４３で抽出されたアドレスが変数ｉと変数ｊとの間の値でなければ、改変探知ドライバは、該当探知対象ドライバが改変されていると認識し（Ｓ４７）、ユーザに該当実行プログラムの改変事実を警告した（Ｓ４８）後、段階Ｓ４６に進む。
【００３２】
本発明は、上述したドライバ客体の改変有無だけでなく、ＩＤＴとドライバイメージ空間（ＰＥ構造体）、ＳＳＤＴ及びフックコールバックの改変有無を探知することができる。
【００３３】
ＩＤＴ１４の場合、ＨａｌＧｅｔＩｎｔｅｒｒｕｐｔＶｅｃｔｏｒ関数を用いて探知対象デバイスのインタラプト番号を求め、ａｓｍ ｓｉｄｔ命令を用いて該当探知対象デバイスのＩＤＴを求める。そのＩＤＴアドレス及びサービスルーチンアドレスを検査すると、ＩＤＴ改変有無を探知することができる。
【００３４】
ドライバイメージ空間（ＰＥ構造体）１３の場合、探知対象ドライバを開き、探知対象ドライバの開始部分をＩＭＡＧＥ＿ＤＯＳ＿ＨＥＡＤＥＲ構造体として設定し、そのＩＭＡＧＥ＿ＤＯＳ＿ＨＥＡＤＥＲ構造体からＩＭＡＧＥ＿ＯＰＴＩＯＮＡＬ＿ＨＥＡＤＥＲ構造体の位置を求め、ＩＭＡＧＥ＿ＯＰＴＩＯＮＡＬ＿ＨＥＡＤＥＲ構造体からＩＭＡＧＥ＿ＩＭＰＯＲＴ＿ＤＥＳＣＲＩＰＴＯＲ構造体の位置を求める。そして、ＩＭＡＧＥ＿ＩＭＰＯＲＴ＿ＤＥＳＣＲＩＰＴＯＲ構造体に含まれた関数テーブルを調査し、各関数のアドレス改変有無を確認する。
【００３５】
ＳＳＤＴの場合、ＫｅＳｅｒｖｉｃｅＤｅｓｃｒｉｐｔｏｒＴａｂｌｅに含まれた関数アドレスを検査して改変有無を確認する。
フックコールバックの場合、ＯｂＲｅｆｅｒｅｎｃｅＯｂｊｅｃｔ関数、ＯｂＲｅｆｅｒｅｎｃｅＯｂｊｅｃｔＢｙＮａｍｅ関数、ＯｂＲｅｆｅｒｅｎｃｅＯｂｊｅｃｔＢｙＨａｎｄｌｅ関数、ＯｂＲｅｆｅｒｅｎｃｅＯｂｊｅｃｔＢｙＰｏｉｎｔｅｒ関数などを用いて探知対象ドライバのドライバ客体を求め、求められたドライバ客体を用いてデバイス客体を求める。そして、そのデバイス客体に含まれたフックコールバックアドレスを検査して改変有無を確認する。
【００３６】
以上、本発明の技術思想を添付図面に基づいて述べたが、これは本発明の好適な実施例を例示的に説明するもので、本発明を限定するためのものではない。なお、当該技術分野における通常の知識の有する者であれば、本発明の技術思想の範囲を逸脱することなく、多様な変形及び変更を加え得ることを理解するであろう。
【図１】
2013506185.tif 000003
【図２】
2013506185.tif 000004
【図３】
2013506185.tif 000005
【図４】
2013506185.tif 000006
【国際調査報告】
2013506185.tif 000007
2013506185.tif 000008
2013506185.tif 000009
2013506185.tif 000010