JP6005761B2 - 監視装置および監視方法 - Google Patents
監視装置および監視方法 Download PDFInfo
- Publication number
- JP6005761B2 JP6005761B2 JP2014553231A JP2014553231A JP6005761B2 JP 6005761 B2 JP6005761 B2 JP 6005761B2 JP 2014553231 A JP2014553231 A JP 2014553231A JP 2014553231 A JP2014553231 A JP 2014553231A JP 6005761 B2 JP6005761 B2 JP 6005761B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- program
- monitoring
- api
- conditional branch
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000012544 monitoring process Methods 0.000 title claims description 149
- 238000000034 method Methods 0.000 title claims description 67
- 238000012806 monitoring device Methods 0.000 title claims description 7
- 238000012545 processing Methods 0.000 description 26
- 238000010586 diagram Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 12
- 230000007704 transition Effects 0.000 description 10
- 239000008186 active pharmaceutical agent Substances 0.000 description 8
- 230000006399 behavior Effects 0.000 description 7
- 230000000694 effects Effects 0.000 description 2
- 241000700605 Viruses Species 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000004886 process control Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/552—Detecting local intrusion or implementing counter-measures involving long-term monitoring or reporting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/54—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2125—Just-in-time application of countermeasures, e.g., on-the-fly decryption, just-in-time obfuscation or de-obfuscation
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Virology (AREA)
- General Health & Medical Sciences (AREA)
- Quality & Reliability (AREA)
- Technology Law (AREA)
- Multimedia (AREA)
- Debugging And Monitoring (AREA)
Description
本発明は、監視装置および監視方法に関する。
従来、コンピュータシステム上において、攻撃者からの不正侵入や悪意のあるプログラムが動作している事を検知するために、システムの挙動から不審な動作を検知するホスト型侵入検知手法が提案されている(例えば、非特許文献1参照)。
システム上のアプリケーションの動作を監視する方法として、API(Application Program Interface)呼び出しを監視する方法が行われている。このAPIとは、各種システムコールを抽象化している関数である。例えば、アプリケーションは、APIを通じて、直接ハードウェアを意識することなく簡略的にファイル入出力や通信制御等を行うことができる。このようなAPI呼び出しを監視することによって、APIの種類やどのような引数を入力したか等のログ情報が取得でき、その結果、アプリケーションの一連の動作を監視することができる。
また、このようなログ情報を取得する方法として、API呼び出しもしくはAPIの実行途中に制御フローを遷移させてログ情報を取得させるAPIフックが利用されている。例えば、APIフックによってログ情報を取得する方法として、各APIの先頭命令にジャンプ命令やコール命令を挿入して、別の命令列へ処理フローを遷移させ、ログ情報の取得を行い、元のAPIに処理フローを戻す方法が知られている。
"Detours: Binary Interception of Win32 Functions"、3rd USENIX Windows(登録商標) NT Symposium、USENIX、Galen Hunt著、July 1999
しかしながら、上記した従来の技術では、APIフックを利用するために、先頭命令にジャンプ命令やコール命令を挿入するため、悪性プログラムが、本来の悪性動作をしなくなってしまい、API呼び出しを適切に監視することができない場合がある。
例えば、上記したAPIフックを利用する方法では、APIの先頭命令にジャンプ命令やコール命令を挿入することで、別の命令列へ処理フローを遷移させるので、悪性プログラムがAPIの先頭命令を確認することでAPIがフックされているかどうかを判別できてしまう。このため、悪性プログラムは、APIがフックされていると判断した場合には、本来の悪性動作をしなくなってしまい、API呼び出しを適切に監視することができない可能性がある。
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、API呼び出しを監視していることが悪性プログラム側で分からないようにし、API呼び出しを適切に監視することを目的とする。
上述した課題を解決し、目的を達成するため、監視装置は、実行するプログラムが監視対象のプログラムであるか否かを判定する判定部と、前記判定部によって実行するプログラムが監視対象のプログラムであると判定された場合には、該監視対象のプログラムによって呼び出される関数に含まれる命令列の前に、所定の条件を満たす第1命令列と、前記所定の条件を満たした場合に所定の制御処理を開始する命令である条件分岐命令とを順に付与する命令付与部と、を備えたことを特徴とする。
また、監視方法は、実行するプログラムが監視対象のプログラムであるか否かを判定する判定工程と、前記判定工程によって実行するプログラムが監視対象のプログラムであると判定された場合には、該監視対象のプログラムによって呼び出される関数に含まれる命令列の前に、所定の条件を満たす第1命令列と、前記所定の条件を満たした場合に所定の制御処理を開始する命令である条件分岐命令とを順に付与する命令付与工程と、を含んだことを特徴とする。
本願に開示する監視装置および監視方法は、API呼び出しを監視していることが悪性なプログラム側で分からないようにし、API呼び出しを適切に監視することが可能である。
以下に添付図面を参照して、この発明に係る監視装置および監視方法の好適な実施形態を詳細に説明する。なお、この実施形態によりこの発明が限定されるものではない。
[第一の実施の形態]
まず、図1を用いて、第一の実施の形態に係る監視システムの概要について説明する。図1は、本実施例に係る監視システムの構成を示すブロック図である。同図に示すように、本実施例に係る監視システムは、監視部10と、監視対象プログラム20と、監視対象外プログラム20aと、OS(Operating System)30とを有する。なお、ここで説明する構成はあくまで一例であり、監視システムは他のさまざまな形態でも実施が可能である。
まず、図1を用いて、第一の実施の形態に係る監視システムの概要について説明する。図1は、本実施例に係る監視システムの構成を示すブロック図である。同図に示すように、本実施例に係る監視システムは、監視部10と、監視対象プログラム20と、監視対象外プログラム20aと、OS(Operating System)30とを有する。なお、ここで説明する構成はあくまで一例であり、監視システムは他のさまざまな形態でも実施が可能である。
監視部10は、OS30上で動作するプログラムであり、監視対象プログラム20からホスト資源やプロセスに関するアクセスを監視する。例えば、この監視部10は、複数のモジュールから構成されるモジュールライブラリとして実装される。各監視部10は、プロセス単位(プログラム単位)またはモジュール単位で、監視対象プログラム20の動作を監視する。
監視対象プログラム20は、監視システムによる監視の対象となるプログラムであり、監視部10と一緒に動作する。例えば、この監視対象プログラム20は、コンピュータウィルスやワームなどの悪性プログラムや、脆弱性を有する可能性がある信頼できないプログラムなどである。
第一の実施の形態に係る監視システムにおいては、監視対象プログラム20によって呼び出されるAPI(Application Programming Interface)の先頭命令が、条件分岐命令と条件分岐命令の前にその条件分岐命令を常に満たす命令列とを付与したフック用命令列に置換される。
また、監視対象外プログラム20aは、監視システムによる監視の対象外となるプログラムである。なお、監視部10は、監視対象外プログラム20aとなる悪性プログラムの特徴を事前に把握しているものとし、監視対象プログラム20と監視対象外プログラム20aとを判別できるものとする。
OS30は、各種プログラムを動作させるためのソフトウェアであり、システムコールにより呼び出された各種機能を監視対象プログラム20または監視対象外プログラム20aに提供する。
第一の実施の形態に係る監視システムの監視部10では、監視対象プログラム20を実行すると判定した場合には、フック対象のAPIをフックする「hook_API」を監視対象プログラム20に挿入する。そして、この監視対象プログラム20がフックされたAPIを実行すると、フックAPIを経由してシステムコールを実行するため、監視部10は、監視対象プログラム20のAPI実行をすべて監視することができる。
つまり、監視対象プログラム20がフックされたAPIを実行してフックAPIを経由することで、監視対象プログラム20の挙動を監視する処理(例えば、APIの入力値等のログ情報を取得する処理)を行う結果、監視対象プログラム20のAPI実行を監視することが可能となる。
次に、図2を用いて、監視部10の構成について説明する。図2は、監視部10の構成を示す機能ブロック図である。図2に示すように、監視部10は、特に、プログラム実行部11と、判定部12と、DLL(Dynamic Link Library)監視部13と、DLL読込制御部14と、命令付与部15とを有する。なお、ここでは、各機能部が有する機能の概要について説明し、各機能部によって行われる処理については、後に詳細に説明する。
プログラム実行部11は、監視対象プログラム20または監視対象外プログラム20aを動作させる。まず、監視対象外プログラム20aを実行する場合の通常の処理について、図3を用いて説明する。図3は、通常時のAPIの実行手順を説明する図である。図3に例示するように、監視対象外プログラム20aがAPI_1Aを利用する場合には、API_1Aが実装されているDLL_1をプログラムが動作しているプロセスのメモリ上に読み込む。そして、監視対象外プログラム20aが、DLL_1で定義されているAPI_1Aを実行する。
また、プログラム実行部11は、監視対象プログラム20を動作させる場合には、hook_API」を呼び出すためのAPIが記述されたコードが監視対象プログラム20に挿入されたうえで、監視対象プログラム20を実行させる。具体的には、プログラム実行部11は、監視対象プログラム20を動作させる場合には、「hook_API」を呼び出すためのAPIが記述されたコードが監視対象プログラム20に挿入され、そのうえで、監視システムが提供する半透過的な仮想隔離環境で監視対象プログラム20を実行させる。
このように、プログラム実行部11は、「hook_API」を呼び出すためのAPIが記述されたコードが監視対象プログラム20に挿入された後に、監視対象プログラム20を実行することで、監視対象プログラム20の挙動を監視する処理(例えば、APIの入力値等のログ情報を取得する処理)を行い、監視対象プログラム20のAPI実行を監視する。
判定部12は、実行するプログラムが監視対象のプログラムであるか否かを判定する。具体的には、判定部12は、プログラム実行部11によって実行されるプログラムが監視対象プログラム20であるか監視対象外プログラム20aであるかを判定し、判定の結果をDLL監視部13に通知する。
DLL監視部13は、フック対象APIを実装するDLLがロードされたか否かを監視する。具体的には、DLL監視部13は、判定部12から監視対象プログラム20が実行する旨の判定結果を受け付けると、フック対象APIを実装するDLLが、監視対象プログラム20が動作するプロセスのメモリに読み込まれたかどうかを監視する。そして、DLL監視部13は、フック対象APIを実装するDLLがメモリに読み込まれた場合には、読み込まれたことをDLL読込制御部14に通知する。
DLL読込制御部14は、フックDLLを対象プログラムのプロセスメモリにロードする。具体的には、DLL読込制御部14は、DLL監視部13からフック対象APIを実装するDLLがメモリに読み込まれた旨の通知を受け付けた場合には、フックAPIを実装するDLLを対象のプロセスのメモリに読み込ませる。
命令付与部15は、監視対象プログラム20が実行される際に、該監視対象プログラム20によって呼び出されるAPIに含まれる命令列の前に、所定の条件を満たす命令列と、所定の条件を満たした場合に所定の制御処理を開始する命令である条件分岐命令とを順に付与する。
具体的には、命令付与部15は、DLL読込制御部14によってフックAPIを実装するDLLが対象のプロセスのメモリに読み込まれた場合には、DLLの初期化処理としてフック対象のAPIの先頭周辺命令を、所定の条件を常に満たす算術演算や比較などの命令列と、所定の条件を満たした場合に、監視対象プログラム20の挙動を監視する処理(例えば、ログ情報等を取得する処理)を実行する制御フローに遷移させる条件分岐命令とに書き換える。
例えば、所定の条件を常に満たす命令列と、所定の条件を満たした場合にログ情報等を取得する制御フローに遷移させる条件分岐命令を対応付けた組が予め複数設定されており、命令付与部15は、複数の組から一つの組をランダムに取得し、取得した組で対応付けられた条件分岐命令と命令列とを、監視対象プログラム20によって呼び出されるAPI先頭命令に付与するようにしてもよい。また、命令付与部15は、所定の条件を常に満たす命令列と、所定の条件を満たした場合にログ情報等を取得する制御フローに遷移させる条件分岐命令とを生成するようにしてもよい。
ここで、図4を用いて、通常のAPI呼び出しについて説明する。図4は、通常時のAPI呼び出しを説明する図である。図4に例示するように、監視対象プログラムに含まれるAPIの呼び出しが行われると、APIの内部処理を実行する。
そして、このようなAPIの先頭命令を書き換えることで、別の命令列へ処理を遷移させ、ログ取得等を行うAPIフックによるAPI呼び出し監視方法が用いられている。例えば、図5に示すように、APIの先頭命令にフック関数の呼び出し命令を付与することで、APIの入力値等のログを取得する処理フローへ遷移し、その後、元のAPIに処理フローを戻す。
ここで、従来では、フック関数の呼び出し命令として、APIの先頭命令がジャンプ命令やコール命令に書き換えられていた。これに対して、本実施形態に係る監視部10では、フック関数の呼び出し命令として、APIの先頭命令を、条件分岐命令と、条件分岐命令を常に満たす算術演算や比較などの命令列とに書き換える。
例えば、条件分岐命令は、フラグレジスタの状態に応じて、指定されたアドレスに制御フローを遷移させるかどうかを決定する命令であるものとする。ここで、フラグレジスタとは、算術演算や比較などの命令の結果として「0」や「1」が格納されているレジスタである。また、上記の命令列は、条件分岐命令の条件を満たす算術演算や比較などの命令列である。この命令列によって算術演算や比較の処理が実行されると、フラグレジスタの状態が常に条件分岐命令の条件を満たす状態となるようになっているものとする。
つまり、APIの先頭命令を、条件分岐命令とその条件分岐命令の条件を常に満たす算術演算や比較などの命令列とに書き換えることで、必ず指定したアドレスに制御フローが遷移するジャンプ命令と同義の命令列を生成できる。この条件分岐命令とその条件分岐命令を常に満たす命令列との組み合わせは、無数の組み合わせを生成することが可能であり、プログラム側から推測不可能な命令列にすることが可能であり、フックされているかどうかの判別を困難にすることが可能である。
つまり、監視部10は、制御フローの遷移はジャンプ命令やコール命令の代わりに、条件分岐命令と条件分岐命令の条件を常に満たす命令列を付与することで、APIの呼び出し元のプログラムにAPIはフックされていないと判断させることができ、APIを実行させるように仕向けることができるため、API呼び出しを監視していることが悪性プログラム側で分からないようにし、API呼び出しを適切に監視することができる。
さらに、APIをフックする際に毎回動的に命令列を生成することも可能である。このため、API呼び出し元のプログラムからは、APIの先頭と特定の命令列のパターンとの比較によりフックされているかどうかを判断することができない。これにより、悪性プログラムにばれることなくAPIフックを行い、プログラムの動作を監視することができる。
ここで、図6の例を用いて、APIの先頭命令を、条件分岐命令と条件分岐命令の条件を常に満たす命令列とに書き換えた場合について説明する。図6は、APIの先頭命令を、条件分岐命令と条件分岐命令の条件を常に満たす命令列とに書き換えた場合の処理を説明する図である。図6に例示するように、監視対象プログラム20によって呼びされるAPI_Aの先頭命令を、フラグレジスタ調整用コードと条件分岐命令とに書き換える。ここで、フラグレジスタ調整用コードとは、算術演算や比較などを行う命令列であり、この命令列によって算術演算や比較の処理が実行されると、フラグレジスタの状態が条件分岐命令の条件を満たす状態となるように調整させる命令コードである。
また、条件分岐命令とは、フラグレジスタの状態が、所定の条件を満たす場合に、指定されたアドレスに制御フローを遷移させる命令であるものとする。上記したように、条件分岐命令の前に付与されたフラグレジスタ調整用コードは、フラグレジスタの状態が所定の条件を満たす状態となるように調整するので、指定されたアドレスに制御フローを遷移させることができる。この制御フローとは、例えば、API_Aの入力値等のログを取得する処理を行う制御フローである。
また、APIの先頭は、条件分岐命令と条件分岐命令の条件を常に満たす命令列とに書き換えられるので、元のAPIに制御フローを戻す前に、上書きされたオリジナルの処理を実行した後に、元のAPIに制御フローに戻って、上書きされていないオリジナル処理、すなわちAPIの内部処理を行う。これにより、矛盾無くAPIを実行できる。
次に、図7を用いて、APIの実行手順を説明する。監視対象プログラム20(図7では、「プログラム」と記載)が実行されると、該監視対象プログラム20が、API_1Aが実装されているDLL_1を読み込む(図7の「1」参照)。そして、監視対象プログラム20は、DLL_1がロードされた後に、API_1Aをフックして処理を行うhook_API_1Aが実装されているDLL_1_hookを読み込む(図7の「2」参照)。
ここで、監視部10は、DLL_1_hookが監視対象プログラム20によって読み込まれると、API_1Aを実行した場合においてhook_API_1Aへ命令が遷移するように、API_1Aの先頭命令列に、条件分岐命令とその条件分岐命令の前に条件分岐命令の条件を常に満たす命令列とを付与する。その後、監視対象プログラム20が、DLL_1で定義されているAPI_1Aを実行すると、フック処理が実行されたのちに、APIが実行される(図7の「3」参照)。
このように、監視部10は、DLL_1_hookが監視対象プログラム20によって読み込まれた際に、API_1Aを実行した場合に、hook_API_1Aへ命令が遷移するようにAPI_1Aの先頭命令列に、条件分岐命令とその条件分岐命令を常に満たす命令列とを付与している。なお、DLL_1のファイル自体をあらかじめ書き換えておくことも考えられるが、ソースコードを修正してコンパイルしなければならないため、フック対象のAPIを実装するDLLのソースコードが公開されている必要がある。また、バイナリ自体を直接書き換えることも技術的には可能であるが、バイナリのリバースエンジニアリングが必要になり、プログラムによっては禁じられているものもあり、書き換えることができない場合がある。
[監視部による処理]
次に、図8を用いて、第一の実施の形態に係る監視部10による処理を説明する。図8は、第一の実施の形態に係る監視部の処理動作を示すフローチャートである。
次に、図8を用いて、第一の実施の形態に係る監視部10による処理を説明する。図8は、第一の実施の形態に係る監視部の処理動作を示すフローチャートである。
図8に示すように、監視部10の判定部12は、監視対象プログラムが実行されたか否かを判定し(ステップS101)、監視対象プログラムが実行されたと判定された場合には(ステップS101肯定)、フック対象APIを実装するDLLがロードされたか否かを判定する(ステップS102)。
この結果、監視部10のDLL監視部13は、フック対象APIを実装するDLLがロードされていないと判定した場合には(ステップS102否定)、ステップS102の処理に戻る。また、フック対象APIを実装するDLLがロードされたと判定した場合には(ステップS102肯定)、監視部10のDLL読込制御部14は、フックDLLを対象プログラムのプロセスメモリにロードする(ステップS103)。
そして、監視部10の命令付与部15は、フック対象APIに対して先頭命令をフックAPIへ遷移するように書き換える(ステップS104)。具体的には、命令付与部15は、DLL読込制御部14によってフックAPIを実装するDLLを対象のプロセスのメモリに読み込まれると、DLLの初期化処理としてフック対象のAPIに対して先頭周辺命令を、条件分岐命令と、条件分岐命令の条件を常に満たす算術演算や比較などの命令列とに書き換える。
そして、監視部10は、全てのフック対象APIをフックしたかを判定する(ステップS105)。つまり、フック対象APIは、複数のDLLで実装されている場合もあるし、DLLの読み込みタイミングがプログラムの起動時であるとは限らないため、フック対象APIがすべてフックできるまで、監視対象プログラムを監視する必要がある。
この結果、監視部10は、全てのフック対象APIをフックしていないと判定した場合には(ステップS105否定)、ステップS102の処理に戻る。また、監視部10は、全てのフック対象APIをフックしたと判定した場合には(ステップS105肯定)、処理を終了する。
[第一の実施形態の効果]
上述してきたように、第一の実施形態にかかる監視部10は、実行するプログラムが監視対象のプログラムであるか否かを判定する。そして、監視部10は、実行するプログラムが監視対象のプログラムであると判定された場合には、該監視対象のプログラムによって呼び出される関数に含まれる命令列の前に、所定の条件を満たす命令列と、所定の条件を満たした場合に所定の制御処理を開始する命令である条件分岐命令とを順に付与する。
上述してきたように、第一の実施形態にかかる監視部10は、実行するプログラムが監視対象のプログラムであるか否かを判定する。そして、監視部10は、実行するプログラムが監視対象のプログラムであると判定された場合には、該監視対象のプログラムによって呼び出される関数に含まれる命令列の前に、所定の条件を満たす命令列と、所定の条件を満たした場合に所定の制御処理を開始する命令である条件分岐命令とを順に付与する。
このため、第一の実施形態にかかる監視部10は、制御フローを遷移させるための命令列と、条件分岐命令のパターンを無数に生成することができるため、監視対象プログラム20側からAPIがフックされていることが判別困難であるため、プログラムの動作監視を阻害されることなく、監視対象プログラム20の動作を監視できる。このように、監視部10では、API呼び出しを監視していることが悪性プログラム側で分からないようにし、API呼び出しを適切に監視することが可能となる。
また、第一の実施形態にかかる監視部10は、所定の条件を常に満たす命令列と、所定の条件を満たした場合にログ情報等を取得する制御フローに遷移させる条件分岐命令とを対応付けた複数の組から、一つの組をランダムに取得し、取得した組で対応付けられた条件分岐命令と命令列とを、監視対象プログラム20によって呼び出されるAPI先頭命令に付与する。このため、制御フローを遷移させるための命令列と、条件分岐命令の組み合わせを予め複数生成しておくことができるため、APIの先頭命令に、所定の条件を満たす命令列と、所定の条件を満たした場合に所定の制御処理を開始する命令である条件分岐命令とを付与することが容易となる。また、ランダムに取得するため、監視対象プログラム20側からAPIがフックされていることが判別困難であるようにすることができる。
また、第一の実施形態にかかる監視部10は、フラグレジスタに格納される値が所定の条件を満たすように演算または比較を行う第1命令列と、フラグレジスタが所定の条件を満たした場合に所定の制御処理を開始する命令である条件分岐命令とを順に付与する。このため、既存のフラグレジスタを利用して、制御フローを遷移させるための命令列と、条件分岐命令とのパターンを無数に生成することが可能となる。
また、第一の実施形態にかかる監視部10は、条件分岐命令と命令列とを含むAPIを実行し、制御処理として、監視対象プログラム20の挙動を監視する処理を行う。例えば、監視部10は、APIの入力値等のログを取得することで、監視対象プログラム20の挙動を監視することができ、監視対象プログラムの動作を適切に監視することが可能である。
また、カーネルレイヤでのシステムコール監視を行った場合には、監視対象プログラムだけでなく無関係なプログラムも含めたOS上の全てのシステムコールイベントをトラップし、その中から監視対象のプログラムかどうかをプロセスID等から判別して処理する必要がある。このため、カーネルレイヤでのシステムコール監視は、無関係なシステムコールイベントを処理するためのオーバーヘッドが発生する。一方で、第一の実施形態にかかる監視部10は、監視対象プログラム20に対してのみ監視を行うため、前述のオーバーヘッドが発生しない。
[第二の実施形態]
さて、これまで本発明の実施例について説明したが、本発明は上述した実施形態以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では第二の実施形態として本発明に含まれる他の実施形態を説明する。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施形態以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では第二の実施形態として本発明に含まれる他の実施形態を説明する。
(1)システム構成等
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、判定部12と命令付与部15とを統合してもよい。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、判定部12と命令付与部15とを統合してもよい。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
(2)プログラム
また、上記実施形態において説明した監視部10が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。例えば、監視部10が実行する処理をコンピュータが実行可能な言語で記述した監視プログラムを作成することもできる。この場合、コンピュータが監視プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかる監視プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録された監視プログラムをコンピュータに読み込ませて実行することにより上記第一の実施形態と同様の処理を実現してもよい。以下に、図2に示した監視部10と同様の機能を実現する監視プログラムを実行するコンピュータの一例を説明する。
また、上記実施形態において説明した監視部10が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。例えば、監視部10が実行する処理をコンピュータが実行可能な言語で記述した監視プログラムを作成することもできる。この場合、コンピュータが監視プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかる監視プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録された監視プログラムをコンピュータに読み込ませて実行することにより上記第一の実施形態と同様の処理を実現してもよい。以下に、図2に示した監視部10と同様の機能を実現する監視プログラムを実行するコンピュータの一例を説明する。
図9は、監視プログラムを実行するコンピュータ1000を示す図である。図9に例示するように、コンピュータ1000は、例えば、メモリ1010と、CPU1020と、ハードディスクドライブインタフェース1030と、ディスクドライブインタフェース1040と、シリアルポートインタフェース1050と、ビデオアダプタ1060と、ネットワークインタフェース1070とを有し、これらの各部はバス1080によって接続される。
メモリ1010は、図9に例示するように、ROM(Read Only Memory)1011及びRAM1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、図9に例示するように、ハードディスクドライブ1031に接続される。ディスクドライブインタフェース1040は、図9に例示するように、ディスクドライブ1041に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブに挿入される。シリアルポートインタフェース1050は、図9に例示するように、例えばマウス1051、キーボード1052に接続される。ビデオアダプタ1060は、図9に例示するように、例えばディスプレイ1061に接続される。
ここで、図9に例示するように、ハードディスクドライブ1031は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093、プログラムデータ1094を記憶する。すなわち、上記の監視プログラムは、コンピュータ1000によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ1031に記憶される。
また、上記実施形態で説明した各種データは、プログラムデータとして、例えばメモリ1010やハードディスクドライブ1031に記憶される。そして、CPU1020が、メモリ1010やハードディスクドライブ1031に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出し、アクセス監視手順、アクセス制御手順、プロセス監視手順、プロセス制御手順を実行する。
なお、監視プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1031に記憶される場合に限られず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ等を介してCPU1020によって読み出されてもよい。あるいは、監視プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ネットワーク(LAN(Local Area Network)、WAN(Wide Area Network)等)を介して接続された他のコンピュータに記憶され、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。
10 監視部
11 プログラム実行部
12 判定部
13 DLL監視部
14 DLL読込制御部
15 命令付与部
20 監視対象プログラム
20a 監視対象外プログラム
30 OS
11 プログラム実行部
12 判定部
13 DLL監視部
14 DLL読込制御部
15 命令付与部
20 監視対象プログラム
20a 監視対象外プログラム
30 OS
Claims (5)
- 実行するプログラムが監視対象のプログラムであるか否かを判定する判定部と、
前記判定部によって実行するプログラムが監視対象のプログラムであると判定された場合には、該監視対象のプログラムによって呼び出されるフック対象のAPIを実装するDLLがロードされるたびに、条件分岐命令を実行する条件を常に満たす第1命令列と前記条件を満たした場合に前記監視対象のプログラムの挙動を監視する処理を開始する命令である前記条件分岐命令とを動的に生成し、前記フック対象のAPIに含まれる命令列の前に、前記第1命令列と、前記条件分岐命令とを順に付与する命令付与部と、
を備えたことを特徴とする監視装置。 - 前記命令付与部は、フラグレジスタに格納される値が前記条件を満たすように演算または比較を行う第1命令列と、前記フラグレジスタが前記条件を満たした場合に前記監視対象のプログラムの挙動を監視する処理を開始する命令である条件分岐命令とを順に付与することを特徴とする請求項1に記載の監視装置。
- 前記命令付与部によって条件分岐命令と前記第1命令列とが付与された命令列を含む前記フック対象のAPIを実行し、前記監視対象のプログラムの挙動を監視する処理を行う実行部をさらに備えることを特徴とする請求項1に記載の監視装置。
- 前記命令付与部によって条件分岐命令と前記第1命令列とが付与された命令列を含む前記フック対象のAPIを実行し、前記監視対象のプログラムの挙動を監視する処理を行う実行部をさらに備えることを特徴とする請求項2に記載の監視装置。
- 監視装置で実行される監視方法であって、
実行するプログラムが監視対象のプログラムであるか否かを判定する判定工程と、
前記判定工程によって実行するプログラムが監視対象のプログラムであると判定された場合には、該監視対象のプログラムによって呼び出されるフック対象のAPIを実装するDLLがロードされるたびに、条件分岐命令を実行する条件を常に満たす第1命令列と前記条件を満たした場合に前記監視対象のプログラムの挙動を監視する処理を開始する命令である前記条件分岐命令とを動的に生成し、前記フック対象のAPIに含まれる命令列の前に、前記第1命令列と、前記条件分岐命令とを順に付与する命令付与工程と、
を含んだことを特徴とする監視方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012279085 | 2012-12-21 | ||
JP2012279085 | 2012-12-21 | ||
PCT/JP2013/084351 WO2014098239A1 (ja) | 2012-12-21 | 2013-12-20 | 監視装置および監視方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP6005761B2 true JP6005761B2 (ja) | 2016-10-12 |
JPWO2014098239A1 JPWO2014098239A1 (ja) | 2017-01-12 |
Family
ID=50978552
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014553231A Active JP6005761B2 (ja) | 2012-12-21 | 2013-12-20 | 監視装置および監視方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9600665B2 (ja) |
EP (1) | EP2937807B1 (ja) |
JP (1) | JP6005761B2 (ja) |
CN (1) | CN104871173B (ja) |
WO (1) | WO2014098239A1 (ja) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6421436B2 (ja) * | 2014-04-11 | 2018-11-14 | 富士ゼロックス株式会社 | 不正通信検知装置及びプログラム |
WO2016093182A1 (ja) | 2014-12-09 | 2016-06-16 | 日本電信電話株式会社 | 特定装置、特定方法および特定プログラム |
CN106778234A (zh) * | 2015-11-19 | 2017-05-31 | 珠海市君天电子科技有限公司 | 应用程序的防护方法及装置 |
KR20170108330A (ko) * | 2016-03-17 | 2017-09-27 | 한국전자통신연구원 | 악성 코드 탐지 장치 및 방법 |
US10540498B2 (en) * | 2016-08-12 | 2020-01-21 | Intel Corporation | Technologies for hardware assisted native malware detection |
JP2019008503A (ja) * | 2017-06-23 | 2019-01-17 | 杉中 順子 | 情報処理監視装置、情報処理監視方法、プログラム、記録媒体及び情報処理装置 |
US10728269B2 (en) * | 2018-05-03 | 2020-07-28 | Sophos Limited | Method for conditionally hooking endpoint processes with a security agent |
US11989292B2 (en) * | 2018-10-11 | 2024-05-21 | Nippon Telegraph And Telephone Corporation | Analysis function imparting device, analysis function imparting method, and recording medium |
CN110413505A (zh) * | 2019-06-18 | 2019-11-05 | 平安普惠企业管理有限公司 | 造数工具接入处理方法、装置、存储介质和计算机设备 |
US11238154B2 (en) * | 2019-07-05 | 2022-02-01 | Mcafee, Llc | Multi-lateral process trees for malware remediation |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004185064A (ja) * | 2002-11-29 | 2004-07-02 | Matsushita Electric Ind Co Ltd | プログラムの難読化装置及び難読化方法 |
JP2009031859A (ja) * | 2007-07-24 | 2009-02-12 | Nippon Telegr & Teleph Corp <Ntt> | 情報収集システムおよび情報収集方法 |
JP2011028506A (ja) * | 2009-07-24 | 2011-02-10 | Renesas Electronics Corp | プログラムの難読化方法とプログラムと装置 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6263488B1 (en) | 1993-12-03 | 2001-07-17 | International Business Machines Corporation | System and method for enabling software monitoring in a computer system |
JP3502471B2 (ja) * | 1995-03-27 | 2004-03-02 | 富士通株式会社 | 自律分散指示書制御装置 |
US6101329A (en) * | 1997-02-18 | 2000-08-08 | Lsi Logic Corporation | System for comparing counter blocks and flag registers to determine whether FIFO buffer can send or receive data |
US7430670B1 (en) | 1999-07-29 | 2008-09-30 | Intertrust Technologies Corp. | Software self-defense systems and methods |
JP2001249828A (ja) | 1999-12-28 | 2001-09-14 | Toshiba Lsi System Support Kk | 情報処理装置、不具合解析プログラムを格納したコンピュータ読み取り可能な記憶媒体、不具合解析方法、及びアプリケーションプログラム開発支援システム |
US20020144124A1 (en) * | 2001-03-12 | 2002-10-03 | Remer Eric B. | Method and apparatus to monitor use of a program |
US7047521B2 (en) * | 2001-06-07 | 2006-05-16 | Lynoxworks, Inc. | Dynamic instrumentation event trace system and methods |
JP4095449B2 (ja) * | 2003-01-10 | 2008-06-04 | キヤノン株式会社 | 監視装置及び監視方法、並びにプログラム |
CN101739333B (zh) | 2008-11-25 | 2013-10-16 | 国际商业机器公司 | 应用程序的调试方法、调试工具及调试装置 |
-
2013
- 2013-12-20 JP JP2014553231A patent/JP6005761B2/ja active Active
- 2013-12-20 US US14/653,078 patent/US9600665B2/en active Active
- 2013-12-20 EP EP13864860.5A patent/EP2937807B1/en active Active
- 2013-12-20 CN CN201380066213.8A patent/CN104871173B/zh active Active
- 2013-12-20 WO PCT/JP2013/084351 patent/WO2014098239A1/ja active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004185064A (ja) * | 2002-11-29 | 2004-07-02 | Matsushita Electric Ind Co Ltd | プログラムの難読化装置及び難読化方法 |
JP2009031859A (ja) * | 2007-07-24 | 2009-02-12 | Nippon Telegr & Teleph Corp <Ntt> | 情報収集システムおよび情報収集方法 |
JP2011028506A (ja) * | 2009-07-24 | 2011-02-10 | Renesas Electronics Corp | プログラムの難読化方法とプログラムと装置 |
Non-Patent Citations (3)
Title |
---|
JPN6016009592; 松本隆明,他: '動的API検査方式によるキーロガー検知方式' 情報処理学会論文誌 Vol. 48,No. 9, 20070915, pp. 3137-3147, 情報処理学会 * |
JPN6016009594; 岩村誠,柏大: 'バイナリプログラムにおけるバッファオーバーフロー攻撃検知法と攻撃痕跡抽出法' 情報処理学会研究報告 Vol. 2004,No. 22, 20040305, pp. 187-192, 情報処理学会 * |
JPN6016009597; M. Akiyama et al.: 'Scalable and Performance-Efficient Client Honeypot on High Interaction System' Proceedings of 2012 IEEE/IPSJ 12th International Symposium on Applications and the Internet (SAINT 2 , 20120716, pp. 40-50, IEEE * |
Also Published As
Publication number | Publication date |
---|---|
JPWO2014098239A1 (ja) | 2017-01-12 |
EP2937807B1 (en) | 2018-01-31 |
CN104871173B (zh) | 2018-01-16 |
EP2937807A4 (en) | 2016-08-24 |
EP2937807A1 (en) | 2015-10-28 |
US9600665B2 (en) | 2017-03-21 |
WO2014098239A1 (ja) | 2014-06-26 |
US20150332045A1 (en) | 2015-11-19 |
CN104871173A (zh) | 2015-08-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6005761B2 (ja) | 監視装置および監視方法 | |
US20210294900A1 (en) | Systems and Methods Involving Features of Hardware Virtualization Such as Separation Kernel Hypervisors, Hypervisors, Hypervisor Guest Context, Hypervisor Context, Rootkit Detection/Prevention, and/or Other Features | |
EP3123311B1 (en) | Malicious code protection for computer systems based on process modification | |
JP5908132B2 (ja) | プログラムの脆弱点を用いた攻撃の探知装置および方法 | |
RU2571723C2 (ru) | Система и способ для снижения нагрузки на операционную систему при работе антивирусного приложения | |
RU2531861C1 (ru) | Система и способ оценки вредоносности кода, исполняемого в адресном пространстве доверенного процесса | |
KR101880375B1 (ko) | 네트워크 활동을 보이는 실행파일들의 분리 | |
EP3039608B1 (en) | Hardware and software execution profiling | |
US8904537B2 (en) | Malware detection | |
US9990490B2 (en) | Generic privilege escalation prevention | |
US11822654B2 (en) | System and method for runtime detection, analysis and signature determination of obfuscated malicious code | |
US8495741B1 (en) | Remediating malware infections through obfuscation | |
JP2019067372A (ja) | プロセスのアドレス空間内の悪意のあるコードの検出のためのシステムおよび方法 | |
US20170193223A1 (en) | System Resources for Sandboxing | |
US11163880B2 (en) | Using indirection to facilitate software upgrades | |
EP2881883B1 (en) | System and method for reducing load on an operating system when executing antivirus operations | |
JP2018124850A (ja) | プログラム保護装置、プログラム保護方法及びプログラム保護プログラム | |
KR20110057297A (ko) | 악성 봇 동적 분석 시스템 및 방법 | |
US20200410069A1 (en) | Proactive security system based on code polymorphism | |
JP6687844B2 (ja) | マルウエア解析装置、マルウエア解析方法及びマルウエア解析プログラム | |
JP2024520445A (ja) | Java非シリアル化エクスプロイト攻撃の検出 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20160906 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160907 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6005761 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |