(57)【要約】      （修正有）【課題】マルウェア誤検出の発生を低減し、システムに掛かる処理負荷を軽減できる、高精度なマルウェア検出技術を提供する。【解決手段】静的解析により得られる解析情報を動的解析のモジュールへも反映することにより、静的解析と動的解析を連携させ、解析対象プログラムがマルウェアか否かを判定し、さらに、自分自身のファイルイメージをアンマップしようとするプログラムの挙動を検知すること、及び、自分自身をサービスとして登録しようとするプログラムの挙動を検知することででマルウェアか否かを判定する。【選択図】図４
2010262609.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを、
静的解析により得られる解析情報を動的解析のモジュールへも反映することにより、静的解析および動的解析を連携させた、解析対象ファイルがマルウェアか否かを効率的に判定する制御手段、
として機能させるためのプログラム。
【請求項２】
自分自身のファイルイメージをアンマップしようとするプログラムの挙動を検知することでマルウェアか否かを判定する、請求項１に記載のプログラム。
【請求項３】
自分自身をサービスとして登録しようとするプログラムの挙動を検知することでマルウェアか否かを判定する、請求項１に記載のプログラム。
【請求項４】
請求項１、請求項２、請求項３の一項以上を含むマルウェア検出手法およびセキュリティ対策を目的としたプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】本発明は、プログラム、情報機器およびマルウェア判定方法に関する。
【背景技術】
【０００２】マルウェア（ｍａｌｉｃｉｏｕｓ  ｓｏｆｔｗａｒｅ）は、悪意あるコードを含むソフトウェアおよびファイルを指す。コンピュータウイルス、トロイの木馬、ボット、ワーム、スパイウェア等、遠隔地のコンピュータに侵入し攻撃を行うプログラム、他のコンピュータへの感染活動や破壊活動を行うプログラム、および、情報を外部に漏洩する有害な動作を含める。【０００３】マルウェアの静的解析は、解析対象となるプログラムの実行前に検査を行い、マルウェアかどうか判定する手法を指す。Ｗｉｎｄｏｗｓ（登録商標；以下、略記する）プログラムでは、プログラム実行前であってもプログラムファイルを検査することで取得できる情報がある。プログラム自身のファイルサイズ、プログラムに電子署名があるかどうか、実行プログラムファイルのハッシュ値等が実行前に取得できる情報に含まれる。各プログラムはこれら実行前に分かる情報をデータベースとして持っており、静的解析ではこのデータベースを検査することでマルウェアか否かを判定する。【０００４】マルウェアの動的解析は、解析対象となるプログラムを実行後、その挙動を検査してマルウェアか否か判定する手法を指す。マルウェアらしき振る舞いとして判定する挙動には、メールを大量に送り始める、ファイアウォールやＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のセキュリティ機能を停止する、システムファイルを削除する、他のプロセスに侵入しコードを実行する等が含まれる。これらの挙動を行っているかを解析することで、プログラムがマルウェアか否かを判定する。【０００５】従来のマルウェア検出手法では、静的解析（段落０００３）と動的解析（段落０００４）が別々のモジュールとして実装されており、それぞれのモジュールが独立して動作していた。もしくは、静的解析と動的解析の両モジュール間に情報の受け渡しがあったとしても、例えば一部の信用できるプログラムについては動的解析を一切実行しないといった限定的な手法が採用されていた。なお、本項（段落０００５）での「信用できるプログラム」とは、静的解析単独の判断によって非マルウェアと分類されたファイルを指す。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許公表２００９−５００７０６
【特許文献２】特許出願２００８−５１８９７５
【発明の概要】
【発明が解決しようとする課題】
【０００７】従来の手法では、ファイルがマルウェアであるか否かを判定する際に、静的解析および動的解析がそれぞれ独立したモジュールで解析を行っている。判定基準となる情報が限定的であるため、Ｆａｌｓｅ  Ｐｏｓｉｔｉｖｅ（マルウェアとして検出しなくてもよい通常のプログラムを誤ってマルウェアと判断してしまう状態）やＦａｌｓｅ  Ｎｅｇａｔｉｖｅ（検出すべきマルウェアを取りこぼす状態）といった誤検出が発生する等、セキュリティ対策プログラムとしての有用性および可用性に欠けていた。【０００８】あるいは、特許文献１による請求項１２および請求項２４において、マルウェアもしくは非マルウェアと判断されたオブジェクトに対して動作を制限するマスクを設定、そのマスクで規定された動作以外の動きをした場合にマルウェアとして判定する。マルウェア判定もしくはマスク設定の根拠として、オブジェクトのサイズ、ファイル名、およびヘッダ情報等があげられている。この方式の問題点の一つに、サーバが必要となることがあげられる。また、マスクを行うことによりマルウェアを判定するとあるが、マスクとして説明されている挙動（段落００８８）はどれもマルウェアに限らず通常のプログラムでも見られる基本的な挙動であり、マルウェア判定基準としては決定力に欠ける。前記理由により、当該の発明はポリシー制御を行うためのアプローチにすぎず、マルウェアを解析もしくは検出する手法としては精度が不十分である。
【課題を解決するための手段】
【０００９】上記課題を解決するため、請求項１に記載の発明は、コンピュータを静的解析と動的解析を効果的に連携させることにより、解析対象ソフトウェアがマルウェアか否かを効率よく判定する制御手段、として機能させる。【００１０】また、請求項２および請求項３に記載の発明は、従来技術での検出方法の不足を補い、検出漏れの防止を目的として、（７）プログラムが自分自身のファイルイメージをアンマップしようする挙動や、（８）プログラムが自分自身をサービスとして登録しようとする挙動を捕らえる、新しい動的解析手法として機能させる。【００１１】静的解析で得られる情報を、段落０００９の手法により段落００１０および背景技術（段落０００４）を含めた動的解析にフィードバックさせることで、マルウェア検出精度の向上と検出手続きの効率化を図る。
【発明の効果】
【００１２】本発明は、マルウェア誤検出の割合低減による効率的なマルウェア検出、かつ、実施システムでの負荷軽減を特徴としている。マルウェア攻撃の未然防御ならびに被害の拡大防止に繋がり、よって、本発明を含むプログラムの利用者に、セキュリティシステム構築に主眼をおくマルウェア対策として十分な機能を提供できる。
【図面の簡単な説明】
【００１３】
【図１】プログラムと呼び出される関数間の動的リンクを示すブロック図である。
【図２】プログラムをメモリ空間にマップする処理を示すブロック図である。
【図３】静的解析によるファイル種別の判定処理を示すフローチャートである。
【図４】静的解析で取得したファイル種別の判定情報を動的解析に反映しマルウェア検出処理を行う手順を示すフローチャートである。
【図５】静的解析および動的解析の連携による効率的なマルウェア検出の手法を取り入れたセキュリティ対策プログラムの動作処理を示すフローチャートである。
【符号の説明】
【００１４】（ａ）「プログラムに電子署名が付与されているか」を判定する静的解析
（ｂ）「プログラムはインストーラか」を判定する静的解析
（ｃ）「プログラムはパッカーを使用しているか」を判定する静的解析
（ｄ）「プログラムはコピープロテクト等の商用パッカーを使用しているか」を判定する静的解析
（ｅ）「プログラムは自己解凍書庫か」を判定する静的解析
（１）「関数が通常とは異なる方法で呼ばれた」挙動を捕らえる動的解析
（２）「自分自身のコピーを作成し、それを実行しようとした」挙動を捕らえる動的解析
（３）「ＧＵＩを持たないプログラムが、システムユーティリティやバッチファイルを実行した」挙動を捕らえる動的解析
（４）「デバッグ権限を取得しようとした」挙動を捕らえる動的解析
（５）「ドライバをロードしようとした」挙動を捕らえる動的解析
（６）「他プロセスを開こうとした」挙動を捕らえる動的解析
（７）「自分自身のファイルイメージをアンマップしようとした」挙動を捕らえる動的解析
（８）「自分自身をサービスとして登録しようとした」挙動を捕らえる動的解析
【発明を実施するための形態】
【００１５】以下、本発明の実施形態を、静的解析と動的解析を連携させたマルウェア検出の手順に基づいて説明する。なお、実施形態は下記に限定されるものではない。
【００１６】ユーザーがプログラムを実行する時、解析モジュールはまずその実行されるプログラムに対して静的解析を行う。この静的解析ではプログラム実行前のマルウェアチェックを行う。この段階でマルウェアと判定できない場合に、プログラムを実行して動的解析を行う。
【００１７】段落００１６の静的解析時にマルウェアか否かの判定と同時にプログラムの種類も判定する。このプログラムの種類の判定材料として、下記（ａ）〜（ｅ）を使用する。
（ａ）プログラムに電子署名が付与されているか
（ｂ）プログラムはインストーラか
（ｃ）プログラムはパッカーを使用しているか
（ｄ）プログラムはコピープロテクト等の商用パッカーを使用しているか
（ｅ）プログラムは自己解凍書庫か
【００１８】段落００１７で判定されたプログラムの種類を手掛かりとして使用し、その解析結果で取得されたプログラムの種類に基づいて、対象プログラムに対し下記（１）〜（６）の挙動を捕らえる動的解析を行う。
（１）関数が通常とは異なる方法で呼ばれた
（２）自分自身のコピーを作成し、それを実行しようとした
（３）ＧＵＩを持たないプログラムが、システムユーティリティやバッチファイルを実行した
（４）デバッグ権限を取得しようとした
（５）ドライバをロードしようとした
（６）他プロセスを開こうとした
【００１９】段落００１８（１）〜（６）は、どれもマルウェアがよく行う挙動である。ただし、通常のプログラムも同様の動作を行うことがあるため、プログラムの種類ごとに動的解析による検出の有効／無効を切り替えることで、誤検出の割合を減らすことが可能となる。具体的には、静的解析（段落００１７）で「（ａ）電子署名がある」と判定された場合は、動的解析（段落００１８）による検出のうち（２）、（３）、（４）、（５）、（６）の挙動を検出しない。「（ｂ）プログラムがインストーラ」と判定された場合は（２）、（３）、（４）、（５）の挙動を検出しない。「（ｃ）プログラムがパッカーを使用している」と判定された場合は（１）を検出しない。このように、静的解析で得られたプログラムの種類を動的解析に反映させることで、誤検出を減らしつつ、新しい検出方法（段落００１０）の（７）および（８）を導入できる。
【００２０】ここで、段落００１９の検出する／しないの根拠を説明する。（１）はＯＳが提供する動的なライブラリのリンクに注目した機能である。通常のプログラムはＯＳの提供する動的リンクの機能を使用するが、パッカーと呼ばれるプログラムは自分でこの機能の一部を内蔵してしまっていることがある。この場合、（１）の方法での検出は困難なことから、検出から除外する。（２）、（３）、（４）、（５）、（６）については単純にこの動作がマルウェアとは特定できないが「怪しい」「疑わしい」といった挙動である。また、電子署名やインストーラは、（２）、（３）、（４）、（５）、（６）の動作を行うことがあるため、このように除外するようにした。
【００２１】各検出方法と静的解析による結果を動的解析にフィードバックする機能が本発明の主要手法となる。静的解析でどの種類のプログラムを検出した場合にどの検出機能を有効／無効にするかという検出機能の切り替えに関しては、段落００１９に手法の一部をあげ、プログラム種類の判定方法と段落００１０を含めた動的解析による検出方法の組み合わせ詳細については実施例に説明する。
【００２２】静的解析により得られた（ａ）〜（ｅ）の結果に応じて、任意の（１）〜（８）の検出方法を無効にしてもよい。
【実施例】
【００２３】下記（段落００２４〜００２９）に、静的解析によるプログラムの種類の判定方法について説明する。プログラムの種類は、プログラムファイルに含まれるＰＥ（Ｐｏｒｔａｂｌｅ  Ｅｘｅｃｕｔａｂｌｅ）ヘッダを解析することで特定できる。【００２４】（ａ）プログラムに電子署名が付与されているか
Ｗｉｎｄｏｗｓの場合、ＯＳ提供のＷｉｎＶｅｒｉｆｙＴｒｕｓｔ関数を使用する。【００２５】（ｂ）プログラムはインストーラか
インストーラはデータセクションの中に特定の文字列が含まれる。例えばＩｎｓｔａｌｌＳｈｉｅｌｄの場合は「ＩｎｓｔａｌｌＳｈｉｅｌｄＭＳＩ」という文字列がデータセクションに埋め込まれている。このように、インストーラごとに埋め込まれている文字列をデータベースとして保持し、検出対象プログラムのデータセクションにそのデータベース中の文字列が含まれるかどうかを調べることで、インストーラを検出できる。【００２６】（ｃ）プログラムはパッカーを使用しているか
パッカー検出にセクションの名前による検出を行う。パッカーはセクション名に通常のプログラムではあまり使われない名前を使用している。このような特徴的なセクションをパッカー検出に使用する。【００２７】段落００２６のパッカー検出のかわりに、ＰＥヘッダもしくはデータセクションに含まれる特定のバイト列による検出を使用してもよい。これを行うには、パッカーの持つ特徴的なバイト列をデータベース化して保持し、検出対象プログラムのデータセクションにそのデータベース中の文字列が含まれるかどうかを調べることで、これを検出に使う。【００２８】段落００２６のパッカー検出のかわりに、コードセクションに含まれる０ｘ００の割合による検出を用いてもよい。その割合が一定の割合未満の場合、パッカーを使用していると判断できる。例えば「一定の割合」に３％などの数字を使用できる。【００２９】段落００２６のパッカー検出のかわりに、リンクしているＤＬＬ（Ｄｙｎａｍｉｃ  Ｌｉｎｋ  Ｌｉｂｒａｒｙ）や関数の名前による検出を使用してもよい。通常のプログラムは多数の関数を使用するが、パッカーは特定の関数のみを使用している場合が多い。検査対象プログラムが使用しているＤＬＬや関数がそのようなパッカーがよく使う関数のみで構成していたら、パッカーと判断する。５つ目は、プログラムの開始アドレスの場所を使用する。通常のプログラムは最初のコードセクションの中に開始アドレスが含まれる。それより外れている場所に開始アドレスがある場合は、やはりパッカーである可能性が高いと判断する。【００３０】（ｃ）プログラムはパッカーを使用しているか、の実現方法として段落００２６〜００２９までの検出方法を組み合わせて判断してもよい。【００３１】（ｄ）プログラムはコピープロテクト等の商用パッカーを使用しているか
基本的には段落００２６のパッカー検出と同様の方法で検出する。また、コピープロテクト等の商用パッカーは、特定のセクション名を使用しているか、特定の文字列もしくはバイト列が含まれるか、の２点で判断してもよい。【００３２】（ｅ）プログラムは自己解凍書庫か
自己解凍書庫も段落００２６〜００２９のパッカー検出と同様の方法で検出する。
特定のセクション名を使用しているかどうか、もしくは、特定の文字列もしくはバイト列が含まれるかどうかで判断する。【００３３】静的解析によるファイル種別の判定の流れを図３に示す。【００３４】下記（段落００３５〜００４２）に動的解析による検出方法について説明する。プログラム実行時に検出した（１）〜（８）の挙動により、マルウェアと判定する。【００３５】（１）関数が通常とは異なる方法で呼ばれた
プログラムは通常、ＯＳが提供するライブラリを動的にリンクし、ライブラリ内の関数を呼び出す。その時、プログラムはどのファイルのどの関数をリンクするのか指定する必要がある。この指定はＯＳによって決められた方法で行う。ＷｉｎｄｏｗｓではＩＡＴ（Ｉｍｐｏｒｔ  Ａｄｄｒｅｓｓ  Ｔａｂｌｅ）と呼ばれるテーブルを作成することで、この動的リンクを実現している。図１に、プログラム「ｐｒｏｇｒａｍ．ｅｘｅ」がｋｅｒｎｅｌ３２．ｄｌｌを動的リンクしてＣｒｅａｔｅＦｉｌｅＡ関数を呼び出す関連を示す。このようなＯＳ標準の方法を使用するとプログラムの解析が容易になってしまうため、マルウェアはＯＳ標準ではない方法を用いて関数を呼び出すことが多い。従って、ＩＡＴに無い関数が呼ばれたらマルウェアによる不正な関数呼び出しと判定できる。【００３６】（２）自分自身のコピーを作成し、それを実行しようとした
実行中のプログラムが自分自身のプログラムをファイルとして出力して、さらにそれを実行しようとしたらマルウェアだと判断する。【００３７】（３）ＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）を持たないプログラムが、システムユーティリティやバッチファイルを実行した
ウィンドウを持たず、タスクトレイのアイコンも持たないプログラムがｃｍｄ．ｅｘｅといったシステムユーティリティを実行した。もしくは、バッチファイルを実行した。【００３８】（４）デバッグ権限を取得しようとした
プログラムがデバッグに必要な権限を取得しようとした。ＷｉｎｄｏｗｓではＺｗＡｄｊｕｓｔＰｒｉｖｉｌｅｇｅｓＴｏｋｅｎ関数で権限の調節を行う。関数の引数としてどのような権限の調整を行うのかを指定し、その指定にＳｅＤｅｂｕｇＰｒｉｖｉｌｅｇｅが入っていたらデバッグ権限を取得しようとしたとして検出する。【００３９】（５）ドライバをロードしようとした
ドライバをロードして実行しようとしたらマルウェアだと判断することができる。
ドライバとは、より権限の高いカーネル内で動作するプログラムである。マルウェアはより高い権限で悪意あるコードを実行しようとする。【００４０】（６）他プロセスを開こうとした
Ｗｉｎｄｏｗｓの場合、マルウェアが他プロセスに感染する時、まずＯｐｅｎＰｒｏｃｅｓｓという関数を呼び出す。この関数でどのプロセスに対して、どのような権限で操作を行うのかを指定する。権限には例えばＰＲＯＣＥＳＳ＿ＶＭ＿ＷＲＩＴＥ権限があり、この権限付きでプロセスを開くと、対象プロセスのメモリ空間に対して任意のデータを書き込みできるようになる。このような書き込み権限で他のプロセスを開こうとする動作を、マルウェアの動作として検出する。【００４１】（７）自分自身のファイルイメージをアンマップしようとした
プログラムが実行される時、プロセスのメモリ空間にプログラムの実行コードをロードする。このロードはＷｉｎｄｏｗｓの場合、プログラムファイルをメモリにマップする、という処理を行うことで実現される。例えば図２の場合、ｐｒｏｇｒａｍ．ｅｘｅとｋｅｒｎｅｌ３２．ｄｌｌがプロセスメモリ空間にマップされている。これにより、ｐｒｏｇｒａｍ．ｅｘｅ内にあるプログラムコードを実行できるようになる。
マルウェアの挙動の一つとして、自分で自分のプログラムファイルを削除して、感染した痕跡を消す、というものがある。Ｗｉｎｄｏｗｓは上記の例のようにプログラムファイルがメモリにマップされていると、プログラムファイルが削除できない。
従って、マルウェアはｐｒｏｇｒａｍ．ｅｘｅつまり自分自身をアンマップ（マップを解除）した上で、プログラムファイルを削除する。このように自分をアンマップしようとしていたらマルウェアだと判断する。【００４２】（８）自分自身をサービスとして登録しようとした
サービスとして自分自身を登録しようとしていたらマルウェアと判断する。サービスに登録されたプログラムはユーザーが明示的に指示しなくても自動的に実行されるためマルウェアによく利用される。【００４３】以下、静的解析から動的解析を経て、ユーザーにマルウェア検出を通知するまでの流れを説明する。【００４４】まず、プログラムの実行前に、解析対象となるプログラムの種類を特定する（図３）。
これにより、プログラムに電子署名があるか、インストーラか、パッカーかを識別する。
続いてプログラムの挙動を監視するための準備を行う。これは、監視する関数にフックをかけ、監視対象関数が呼ばれるたびに、動的解析を行えるようにする。この監視の準備が終ったら、プログラムを実行させる。
プログラムが実際に実行されると、監視対象の関数が呼ばれるたびに、「動的解析による検出」が実行され、その中でマルウェアかどうかの判定を行う（図４）。この判定は、監視対象の関数が呼び出される直前に行う。
動的解析による検出では、段落００１８および段落００１９で示した処理を行う。
マルウェアらしき動作を検出した場合は、攻撃検出をユーザーに通知し、検出した関数を実行せずにエラーで元に戻るようにする（図４）。
このように関数の呼び出し前にマルウェア判定を行うことにより、マルウェアの攻撃を事前に防御できる。【００４５】図５に、前記静的解析および動的解析の連携による検出手法がセキュリティ対策を目的としたプログラムに導入された場合のプログラム実行例を示す。なお、記述する実施の形態は、一例を示すものであり、これに限定するものではない。実行例における構成及び動作に関しては、適宜変更が可能である。
【図１】
2010262609.tif 000003
【図２】
2010262609.tif 000004
【図３】
2010262609.tif 000005
【図４】
2010262609.tif 000006
【図５】
2010262609.tif 000007