(57)【特許請求の範囲】
【請求項１】
コンピューターに、
マルチメディアファイル内の命令を、所定の命令のリストとマッチするステップと、
前記マルチメディアファイル内のマッチされた前記命令の繰り返しを特定するステップと、
マッチされた前記命令の繰り返し間の距離を計算するステップと、
マッチされた前記命令の等距離の繰り返しに応答して、前記マルチメディアファイルを悪意あると特定するステップと、
を実行させるためのプログラム。
【請求項２】
前記コンピューターに、
前記マルチメディアファイルを悪意あるとする誤検出特定を除外するステップ、
を更に実行させるための、請求項１に記載のプログラム。
【請求項３】
前記コンピューターに、
前記マルチメディアファイル内のタグの長さが第１の所定の閾値以上である場合、悪意あると不当に特定されたものとして前記マルチメディアファイルを認識するステップ、
を更に実行させるための、請求項１に記載のプログラム。
【請求項４】
前記コンピューターに、
前記マルチメディアファイルのメソッド・ボディ・カウントが第２の所定の閾値以上である場合、悪意あると不当に特定されたものとして前記マルチメディアファイルを認識するステップ、
を更に実行させるための、請求項１に記載のプログラム。
【請求項５】
前記コンピューターに、
前記マルチメディアファイルの、定数を保存する１以上のデータ構造内の１以上の文字列を検証するステップと、
前記１以上の文字列のいずれかがシェルコードを示すものとしてシェルコードロジックによって特定された場合、前記マルチメディアファイルを悪意あると特定するステップと、
を更に実行させるための、請求項１に記載のプログラム。
【請求項６】
前記シェルコードロジックはシェルコードデータベースを備える、
請求項５に記載のプログラム。
【請求項７】
前記コンピューターに、
前記１以上の文字列の少なくとも１つが、前記シェルコードデータベース内の１以上の特定された文字列のうち１つとマッチする場合、前記マルチメディアファイルを悪意ある文字列を含むと特定するステップ、
を更に実行させるための、請求項６に記載のプログラム。
【請求項８】
前記繰り返しの最小数が等距離である場合、前記マルチメディアファイルは悪意あると特定される、
請求項１乃至７のいずれか一項に記載のプログラム。
【請求項９】
マッチされた前記命令はバイトコード命令を含む、
請求項１乃至７のいずれか一項に記載のプログラム。
【請求項１０】
マルチメディアファイルの分析を行うように構成された装置であって、
メモリ手段と、
前記メモリ手段に通信可能に結合される処理手段と、
を備え、前記メモリ手段は、
１以上のマルチメディアファイルを受信するステップと、
受信されたマルチメディアファイルの各々について、定数を記憶する１以上のデータ構造のコンテンツを検証するステップと、
前記マルチメディアファイルの前記１以上のデータ構造内の１以上の文字列がシェルコードを示すとしてシェルコードロジックによって特定される場合、各マルチメディアファイルを悪意あると特定するステップと、
を前記処理手段に実行させる命令を記憶し、
前記命令は更に、
前記マルチメディアファイル内の命令を、所定の命令のリストとマッチするステップと、
前記マルチメディアファイル内のマッチされた前記命令の繰り返しを特定するステップと、
マッチされた前記命令の繰り返し間の距離を計算するステップと、
マッチされた前記命令の等距離の繰り返しに応答して、前記マルチメディアファイルを悪意あると特定するステップと、
を前記処理手段に実行させる、
装置。
【請求項１１】
前記繰り返しの最小数が等距離である場合、前記マルチメディアファイルは悪意あると特定される、
請求項１０に記載の装置。
【請求項１２】
前記繰り返しの２以上が等距離である場合、前記マルチメディアファイルは悪意あると特定される、
請求項１０に記載の装置。
【請求項１３】
前記命令は更に、
前記マルチメディアファイルが悪意あると不当に特定されたかを判定するステップ、
を前記処理手段に実行させる、請求項１０に記載の装置。
【請求項１４】
マッチされた前記命令はバイトコード命令を含む、
請求項１０に記載の装置。
【請求項１５】
前記マルチメディアファイル内のタグの長さが第１の所定の閾値以上である場合、悪意あると不当に特定されたものとして前記マルチメディアファイルを認識するステップ、
を前記処理手段に実行させる命令を更に含む、請求項１４に記載の装置。
【請求項１６】
前記命令は更に、
前記マルチメディアファイルのメソッド・ボディ・カウントが第２の所定の閾値以上である場合、悪意あると不当に特定されたものとして前記マルチメディアファイルを認識するステップ、
を前記処理手段に実行させる、請求項１４に記載の装置。
【請求項１７】
前記マルチメディアファイルのバイトコードがジャスト・イン・タイムのスプレーエクスプロイテーションを含むと判定された場合、前記バイトコード命令が１以上の連続した大型のメソッド・ボディを含むかを判定するステップと、
前記バイトコード命令が１以上の連続した大型のメソッド・ボディを含まないと判定され、且つ、メソッド・ボディ・カウントが所定の閾値よりも大きい場合、前記マルチメディアファイルが悪意あると不当に特定されたと認識するステップと、
を前記１以上の処理手段に実行させる命令を更に含む、請求項１４に記載の装置。
【請求項１８】
マルチメディアファイルの分析を行うように構成された装置の処理ユニットが、マルチメディアファイル内の命令を、所定の命令のリストとマッチするステップと、
前記処理ユニットが、前記マルチメディアファイル内のマッチされた前記命令の繰り返しを特定するステップと、
前記処理ユニットが、マッチされた前記命令の繰り返し間の距離を計算するステップと、
前記処理ユニットが、マッチされた前記命令の等距離の繰り返しに応答して、前記マルチメディアファイルを悪意あると特定するステップと、
を含む方法。
【請求項１９】
前記マルチメディアファイルの、定数を保存する１以上のデータ構造内の１以上の文字列のいずれかが、シェルコードを示すものとしてシェルコードロジックによって特定された場合、前記処理ユニットが、前記マルチメディアファイルを悪意あると特定するステップ、
を更に含む、請求項１８に記載の方法。
【請求項２０】
前記処理ユニットが、前記マルチメディアファイルを悪意あるとする誤検出特定を除外するステップ、
を更に含む、請求項１９に記載の方法。
【請求項２１】
前記マルチメディアファイルのバイトコードがジャスト・イン・タイムのスプレーエクスプロイテーションを含むと判定された場合、前記処理ユニットが、前記バイトコードが１以上の連続した大型のメソッド・ボディを含むかを判定するステップと、
前記バイトコードが１以上の連続した大型のメソッド・ボディを含まないと判定され、且つ、メソッド・ボディ・カウントが所定の閾値よりも大きい場合、前記処理ユニットが、前記マルチメディアファイルが悪意あると不当に特定されたと認識するステップと、
を更に含む、請求項２０に記載の方法。
【請求項２２】
前記マルチメディアファイルのバイトコードがジャスト・イン・タイムのスプレーエクスプロイテーションを含むと判定された場合、前記処理ユニットが、前記バイトコードが１以上の連続した大型のメソッド・ボディを含むかを判定するステップと、
前記バイトコードが１以上の連続した大型のメソッド・ボディを含まないと判定され、且つ、前記マルチメディアファイルが１以上の特殊タグを含む場合、前記処理ユニットが、前記マルチメディアファイルが悪意あると不当に特定されたと認識するステップと、
を更に含む、請求項２０に記載の方法。
【請求項２３】
前記繰り返しの最小数が等距離である場合、前記処理ユニットが、前記マルチメディアファイルを悪意あると特定するステップ、
を更に含む、請求項１８に記載の方法。
【請求項２４】
前記命令はバイトコード命令を含む、
請求項１８に記載の方法。
【請求項２５】
請求項１乃至９のいずれか一項に記載のプログラムを記憶したコンピューター可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般にネットワークセキュリティ管理に関し、詳細には、マルチメディアファイルの悪意あるエクスプロイテーションを検出するシステム及び方法に関する。
【背景技術】
【０００２】
Ａｄｏｂｅ  Ｆｌａｓｈ（Ａｄｏｂｅ  Ｆｌａｓｈはアドビシステムズの登録商標である）は、進化したビデオ再生とアニメーション機能を開発者に提供するマルチメディアとソフトウェアのプラットフォームであり、作者ベクタグラフィクス、アニメーション、ゲーム及びリッチ・インターネット・アプリケーション（ＲＩＡ）に利用可能である。また、Ｆｌａｓｈは、ウェブページにストリームビデオやオーディオプレーヤー、広告やインタラクティブなマルチメディアコンテンツを追加するために頻繁に使用される。例えば、Ｓｈｏｃｋｗａｖｅ  Ｆｌａｓｈやスモール・ウェブ・フォーマット（ＳＷＦ）を有するＦｌａｓｈファイルは、多くの場合、ウェブページに埋め込まれてブラウザのプラグインで再生されるか、或いは、Ａｄｏｂｅ（Ａｄｏｂｅはアドビシステムズ社の登録商標）のポータブル・ドキュメント・フォーマット（ＰＤＦ）ファイルに埋め込まれて、ＡｄｏｂｅのＡｃｒｏｂａｔ  Ｒｅａｄｅｒがソフトウェアに含まれるＦｌａｓｈ  Ｐｌａｙｅｒのコピーによって再生される。
【０００３】
近年様々な用途においてＦｌａｓｈの使用が増加するにつれて、Ｆｌａｓｈファイルを標的とするマルウェアの発生も増加している。ＳＷＦは画像として考えられることもあるにも関わらず、悪意をもって操作することができる完全なアプリケーションを搬送することができるので、Ｆｌａｓｈファイルの悪意あるエクスプロイテーションは非常に有害であることがある。Ｆｌａｓｈエクスプロイテーションの発生が増加し、このような攻撃に対する有効なソリューションが重要になっているにも関わらず、このようなセキュリティリスクを検出し除去する効果的な方法は非常に少ない。
【０００４】
Ｆｌａｓｈファイルがマルウェアを含むかチェックするために現在使用されている１つの方法は、単にコードを実行して何が起こるかを確認することである。この方法は、実行コード解析又は動的コード解析として知られている。安全なテスト環境での動作時には、動的なコード分析が有用であるかもしれない。デバッガが変数の値を追跡し関数呼び出しをトレースして、アプリケーションの内部構造の正確な概要を提供することができる。しかし、コードが実際にデバイス上で実行されるテスト環境外で使用するためにはほとんど実用的でなく、マルウェアが含まれている場合に害を及ぼすおそれがある。また、悪意あるエクスプロイトは、実行時又は動的コード解析で実行されていることを認識することができることがあり、特定されることを防ぐために、悪意ある動作をしないことがある。
【０００５】
Ｆｌａｓｈファイルがマルウェアを含んでいるかどうかを判定するための別のプロセスは、静的コード分析を用いるものであり、分析中、ファイルは実行される前に分解され分析される。Ｆｌａｓｈファイル内のマルウェアを検出するための静的コード分析の現在の方法は、一般にシグネチャベースであり、個別的な分析に頼る。これらの方法は一般に効率的でも効果的でもなく、かなりの数の偽陽性の識別に至ることがある。以下の開示はこれら及び他の問題に対処する。
【図面の簡単な説明】
【０００６】
【図１】１以上の開示の実施形態に係るネットワークアーキテクチャインフラストラクチャを示すブロック図である。
【図２】一実施形態に係る、本明細書に記載の技術と共に用いられるプログラマブル素子を示すブロック図である。
【図３】別の実施形態に係る、本明細書に記載の技術と共に用いられるプログラマブル素子を示すブロック図である。
【図４Ａ】１以上の開示の実施形態に係る、Ｆｌａｓｈファイルブロックのバイトコードに含まれる悪意ある命令の例である。
【図４Ｂ】１以上の開示の実施形態に係る、Ｆｌａｓｈファイルの定数プールテーブルに含まれるシェルコード文字列の例である。
【図５】１以上の開示の実施形態に係る、Ｆｌａｓｈマルウェア検出アプローチのフローチャートである。
【図６Ａ】１以上の開示の実施形態に係る誤検出特定アプローチのフロー図である。
【図６Ｂ】１以上の開示の実施形態に係る誤検出特定アプローチのフロー図である。
【発明を実施するための形態】
【０００７】
Ｆｌａｓｈファイルはますます、悪意あるエクスプロイテーションの標的になっている。このようなエクスプロイテーションを効果的に検出及び除去するために、商標登録されておらず且つコードを作動させずにリスクを特定できる検出アプローチを利用することができる。一実施形態では、係るアプローチは、Ｆｌａｓｈファイルのコンパイル済みバイトコードを解析して、特定されたキー命令を検出し、そのキー命令が、悪意あるエクスプロイテーションの存在を表す特定のパターンで繰り返されるかを判定することを含む。本アプローチは、コンパイル済みＦｌａｓｈファイルの定数プールテーブルのコンテンツを検証して、悪意あるエクスプロイテーションの存在を示す特定のシェルコード文字列を検出することを含んでもよい。バイトコード又は定数プールテーブルが悪意あるエクスプロイテーションが存在することを示す場合、アプローチを利用して、悪意あるエクスプロイテーションの誤検出特定の場合を低減することができる。
【０００８】
以下の説明では、説明の目的上、本発明の完全な理解を提供するために、多くの特定の詳細を記載する。しかしながら、当業者には明らかであるように、本発明はそれらの特定の詳細を伴わずに実施されてよい。他の例では、開示の実施形態が曖昧になるのを避けるために、構造及び装置をブロック図の形で示している。下付き文字又は添え字のない番号の参照は、参照符号に対応する下付き文字及び添え字の全ての例に言及すると理解される。更に、本開示で用いられる言語は、主に、読みやすさと教示を目的として選択されており、発明の主題を説明又は制限したり、係る発明の主題の決定に必要な特許請求の範囲に訴えたりするために選択されていない。本明細書において「一実施形態」又は「実施形態」という場合、該実施形態に関連して記載される特定の特徴、構造又は特性が、少なくとも１つの開示の実施形態に含まれることを意味する。「一実施形態」又は「実施形態」と複数回いう場合、必ずしも全てが同じ実施形態に言及しないと理解されたい。
【０００９】
本明細書で用いられる場合、「プログラマブル素子」という用語は、単一のプログラマブル素子、又は、プログラマブル素子において又はプログラマブル素子によって実行されるものとして記載される機能を実行するように連携する複数のプログラマブル素子を指すことがある。
【００１０】
図１を参照する。例示的インフラストラクチャ１００が概略的に示される。
【００１１】
インフラストラクチャ１００はコンピューターネットワーク１０２を含み、コンピューターネットワーク１０２は、インターネット、企業ネットワーク、ローカルエリアネットワーク（ＬＡＮ）等の、現在利用可能な多くの異なる種類のコンピューターネットワークを含んでよい。これらのネットワークの各々は、有線装置又は無線装置を含んでよく、任意の数のネットワークプロトコル（例えばＴＣＰ／ＩＰ）を用いて動作してよい。ネットワーク１０２は、ゲートウェイ及びルーター（１０８で表される）、エンドユーザーコンピューター１０６並びにコンピューターサーバー１０４に接続される。インフラストラクチャ１００には、モバイル通信装置と共に利用されるセルラーネットワーク１０３も示される。当該技術分野では既知であるように、モバイルセルラーネットワークは携帯電話その他多くの種類の装置（例えばタブレットコンピューター（図示なし））をサポートする。インフラストラクチャ１００内のモバイルデバイスは携帯電話１１０として示される。
【００１２】
本明細書に開示の１以上の実施形態によれば、図１に示されるようなネットワークにおいて、Ｆｌａｓｈファイルをモニタリング及び分析して、マルウェアを検出することができる。１以上のソフトウェアプログラム又は機器を利用して、ネットワーク内のＦｌａｓｈファイルをモニタリング及び分析して、ファイルに静的解析を行い、そこに含まれる悪意あるコンテンツを検出してよい。
【００１３】
図２を参照する。ブロック図はプログラマブル素子２００を示し、プログラマブル素子２００は、一実施形態に係る悪意あるコンテンツ検出アプローチを採用してよい。図２に示されるプログラマブル素子は、第１の処理要素２７０及び第２の処理要素２８０を含むマルチプロセッサプログラマブル素子２００である。２つの処理要素２７０，２８０が示されているが、プログラマブル素子２００の実施形態はそのような処理要素を１つだけ含んでもよい。
【００１４】
プログラマブル素子２００はポイントツーポイント・インターコネクトシステムとして示され、第１の処理要素２７０及び第２の処理要素２８０はポイントツーポイント・インターコネクト２５０を介して結合される。図２に示されるインターコネクトのいずれか又は全部は、ポイントツーポイント・インターコネクトではなく、マルチドロップバスとして実施されてよい。
【００１５】
図２に示されるように、処理要素２７０，２８０の各々は、第１及び第２のプロセッサコア（すなわち、プロセッサコア２７４ａ，２７４ｂとプロセッサコア２８４ａ，２８４ｂ）を含むマルチコアプロセッサであってよい。このようなコア２７４ａ，２７４ｂ，２８４ａ，２８４ｂは、図５及び図６Ａ〜６Ｂに関連して本明細書に開示される方式で、命令コードを実行するように構成されてよい。しかしながら、他の実施形態は、必要に応じてシングルコアプロセッサである処理要素を採用してよい。複数の処理要素２７０、ｂｂ、を用いる実施形態では、各処理要素は、必要に応じて異なる数のコアを用いて実現されてよい。
【００１６】
各処理要素２７０，２８０は、少なくとも１つの共有キャッシュ２４６を有してよい。共有キャッシュ２４６ａ，２４６ｂは、処理要素の１以上のコンポーネント（それぞれコア２７４ａ，２７４ｂと２８４ａ，２８４ｂ等）によって利用されるデータ（例えば命令）を記憶してよい。例えば、処理要素２７０，２８０のコンポーネントがより速くアクセスできるように、共有キャッシュは、メモリ２３２，２３４に記憶されたデータをローカルでキャッシュしてよい。１以上の実施形態では、共有キャッシュ２４６ａ，２４６ｂは、１以上の中間レベルキャッシュ（レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）等）又は他のレベルのキャッシュ（最終レベルキャッシュ（ＬＬＣ））又はそれらの組合わせを含んでよい。
【００１７】
図２は、図示を明確にするために、２つの処理要素２７０，２８０を有するプログラマブル素子を示すが、本発明の範囲はそれに限定されず、任意の数の処理要素が存在してよい。或いは、処理要素２７０，２８０の１以上はプロセッサ以外の要素であってよく、グラフィックス・プロセッシング・ユニット（ＧＰＵ）、デジタル信号処理（ＤＳＰ）ユニット、フィールド・プログラマブル・ゲートアレイその他のプログラマブル処理要素等であってよい。処理要素２８０は処理要素２７０について異種又は非対称であってよい。アーキテクチャ、マイクロアーキテクチャ、熱、消費電力特性等を含む利点のメトリックの範囲の観点から、処理要素２７０，２８０には様々な違いがあってよい。これらの違いは、処理要素２７０，２８０間の非対称性及び不均一性として、効果的に現れ得る。一部の実施形態では、様々な処理要素２７０，２８０は、同一のダイパッケージ内に存在することができる。
【００１８】
第１の処理要素２７０は更に、メモリ・コントローラ・ロジック（ＭＣ）２７２及びポイントツーポイント（Ｐ−Ｐ）インターコネクト２７６，２７８を有してよい。同様に、第２の処理要素２８０は、ＭＣ２８２及びＰ−Ｐインターコネクト２８６，２８８を有してよい。図２に示されるように、ＭＣ２７２，２８２は、処理要素２７０，２８０をそれぞれのメモリ、すなわちメモリ２３２とメモリ２３４に結合する。メモリは、それぞれのプロセッサにローカルに取り付けられるメインメモリの一部であってよい。ＭＣロジック２７２，２８２は処理要素２７０，２８０に組み込まれるように図示されているが、一部の実施形態では、ＭＣロジックは、処理要素２７０，２８０に組み込まれるのではなく処理要素２７０，２８０外部の個別ロジックであってよい。
【００１９】
処理要素２７０及び処理要素２８０は、それぞれＰ−Ｐインターコネクト２７６，２８６，２８４を介して、Ｉ／Ｏサブシステム２９０に結合されてよい。図２に示されるように、Ｉ／Ｏサブシステム２９０はＰ−Ｐインターコネクト２９４，２９８を含む。更に、Ｉ／Ｏサブシステム２９０は、Ｉ／Ｏサブシステム２９０を高性能グラフィクスエンジン２３８に結合するためのインターフェース２９２を含む。一実施形態では、バス２４９は、グラフィクスエンジン２３８をＩ／Ｏサブシステム２９０に結合するために用いられてよい。交代に、ポイントツーポイント・インターコネクト２３９はこれらのコンポーネントを結合してよい。
【００２０】
同様に、Ｉ／Ｏサブシステム２９０は、インターフェース２９６を介して第１のリンク２１６に結合されてよい。一実施形態では、本発明の範囲は限定されないが、第１のリンク２１６はペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）バスであってよく、或いは、ＰＣＩ  Ｅｘｐｒｅｓｓバス等のバス、或いは別のＩ／Ｏインターコネクトバスであってよい。
【００２１】
図２に示されるように、様々なＩ／Ｏ装置２１４がブリッジ２１８と共に第１のリンク２１６に結合されてよく、ブリッジ２１８は第１のリンク２１６を第２のリンク２１０に結合してよい。一実施形態では、第２のリンク２２０はＬＰＣ（low  pin  count）バスであってよい。第２のリンク２２０には、例えばキーボード／マウス２１２、通信装置２２６（同様にコンピューターネットワーク２０３と通信してよい）、データ記憶部２２８（ディスクドライバ又は他のマスストレージ装置等）等の、様々な装置が結合されてよい。一実施形態では、データ記憶部２２８はコード２３０を含んでよい。コード２３０は、上述の技術の１以上の実施形態を実施するための命令を含んでよい。更に、第２のバス２２０にはオーディオＩ／Ｏ２２４が結合されてよい。なお、他の実施形態も考えられる。例えば、図２のポイントツーポイント・アーキテクチャの代わりに、システムは、マルチドロップバス又は別の通信トポロジーを実施してよい。図２ではリンク２１６，２２０がバスとして示されているが、任意の望ましい種類のリンクを採用することができる。また、代替として、図２の要素を区切るために用いられる集積チップの数は、図２に示されるよりも多くても少なくてもよい。
【００２２】
図３を参照する。ブロック図は、別の実施形態に係るプログラマブル素子３００を示す。図２の特定の態様は、図３の他の態様が曖昧になるのを避けるために、図３では省略されている。
【００２３】
図３は、処理要素３７０，３８０がそれぞれ統合メモリ及びＩ／Ｏ制御ロジック（“ＣＬ”）３７２，３８２を有してよいことを示す。一部の実施形態では、ＣＬ３７２，３８２は、図２に関連して説明されたようにメモリ制御ロジック（ＭＣ）を含んでよい。更に、ＣＬ３７２，３８２はＩ／Ｏ制御ロジックを含んでもよい。図３は、メモリ３３２，３３４がＣＬ３７２，３８２に結合されてよいだけでなく、Ｉ／Ｏ装置３１４が制御ロジック３７２，３８２に結合されてもよいことを示す。レガシーＩ／Ｏ装置３１５はＩ／Ｏサブシステム３９０に結合されてよい。
【００２４】
図２及び図３に示されるプログラマブル素子は、本明細書で議論される様々な実施形態を実現するために利用され得るプログラマブル素子の実施形態の概略図である。明らかなように、図２及び図３に示されるプログラマブル素子の様々なコンポーネントは、システム・オン・チップ（ＳｏＣ）アーキテクチャにおいて組み合わせられてよい。
【００２５】
本明細書に開示される本発明の実施形態はソフトウェアを含んでよい。そのようなものとして、一般のコンピューティング・ソフトウェア・アーキテクチャの説明を提供する。ハードウェアの例のように、本明細書で議論されるソフトウェアアーキテクチャは、決して排他的なものではなく説明上のものである。
【００２６】
ファイル内の悪意あるコンテンツを検出する様々な実施形態の議論を始める。本明細書に記載される実施形態は、中間言語のバイトコードによって作成されるか又は中間言語のバイトコードを含む任意のファイルに適用可能である。特に、実施形態は、コンパイラ又はインタープリタによりバイトコードタイプのコードに変換され得るソースコードを伴うファイルに適用される。Ｆｌａｓｈファイルは、そのようなファイルの一例である。Ｆｌａｓｈファイルは、ＡｃｔｉｏｎＳｃｒｉｐｔと呼ばれるオブジェクト指向言語を用いてプログラムすることができる。Ｆｌａｓｈファイルで用いられるＡｃｔｉｏｎＳｃｒｉｐｔは、中間言語の例である。本開示の時点では、３つのバージョンのＡｃｔｉｏｎＳｃｒｉｐｔが存在する。これらには、ＡｃｔｉｏｎＳｃｒｉｐｔ、ＡｃｔｉｏｎＳｃｒｉｐｔ２及びＡｃｔｉｏｎＳｃｒｉｐｔ３が含まれる。ＡｃｔｉｏｎＳｃｒｉｐｔコードは、一般に、コンパイラによってバイトコードに変換される。
【００２７】
Ｆｌａｓｈファイルは、一般に、文字列“ＦＷＳ”又は“ＣＷＳ”から始まり、８ビットのバージョン番号と、３２ビットのファイル長さフィールドと、圧縮又は非圧縮データが続く。非圧縮データ部分はヘッダーを含み、タグのリストが続く。各タグは、データタイプ（例えばＡｃｔｉｏｎＳｃｒｉｐｔバイトコード）のコンテナの役割を果たす。タグは、タグタイプ識別子及びタグの長さから始まり、データが続く。このように、Ｆｌａｓｈファイルの完全な構造は一般に以下のように表される。
【００２８】
[FWS/CWS][Version][Length][[Header][[Tag  Header][Tag  Contents]]...[0]]
ファイル構造に含まれるタグの一部はプログラムロジックを含む。そのようなタグは一般にマルウェアコンテンツの多くが位置する場所なので、本開示が特に着目する点である。特に興味深いのはＡｃｔｉｏｎＳｃｒｉｐｔバイトコードである。なぜなら、ほとんどのＦｌａｓｈファイルの悪意あるエクスプロイテーションはＡｃｔｉｏｎＳｃｒｉｐｔコードを用いて開発されてから、バイトコードに変換されるからである。バイトコードを検証することにより、このようなＦｌａｓｈエクスプロイテーションの多くを検出することができる。
【００２９】
使用されるＡｃｔｉｏｎＳｃｒｉｐｔのバージョンに応じて、バイトコードは異なる種類のタグに含まれる場合がある。例えば、ＡｃｔｉｏｎＳｃｒｉｐｔ２バイトコードは、以下のタグすなわちＤｏＩｎｉｔＡｃｔｉｏｎ、ＤｏＡｃｔｉｏｎ、ＰｌａｃｅＯｂｊｅｃｔ２、ＰｌａｃｅＯｂｊｅｃｔ３、ＤｅｆｉｎｅＢｕｔｔｏｎ、ＤｅｆｉｎｅＢｕｔｔｏｎ２のうち１つに存在し得る。一方、ＡｃｔｉｏｎＳｃｒｉｐｔ３バイトコードは一般に、ＤｏＡＢＣＤｅｆｉｎｅ又はＤｏＡＢＣのタグに含まれる。このような位置を知ることにより、バイトコードレベルパーサーはＦｌａｓｈファイル内のバイトコードを素早く見つけ、そのコンテンツを検証することができる。
【００３０】
Ｆｌａｓｈファイルを標的にするエクスプロイテーション方法には様々なものがある。このような方法のうち最も一般的なタイプとして、ヒープスプレー、ジャスト・イン・タイム（ＪＩＴ）スプレー及び進化型Ｆｌａｓｈヒープクラフティングが挙げられる。Ｆｌａｓｈにおけるヒープスプレーは、一般に、ＢｙｔｅＡｒｒａｙと呼ばれるＦｌａｓｈ  ｐｕｂｌｉｃクラスを用いて実行される。ＢｙｔｅＡｒｒａｙクラスは、任意のバイト、整数の２進表示、浮動小数点及び文字列の読み書きを可能にする。ＦｌａｓｈにおけるＢｙｔｅＡｒｒａｙクラスの実施はメモリの隣接部分を利用し、アレイのコンテンツを保存するために必要に応じて拡張可能である。拡張可能メモリへのアクセスを提供するので、ＢｙｔｅＡｒｒａｙは、悪意あるエクスプロイテーションの使用において最有力候補である。このプロセスでは書込み命令を含むＢｙｔｅＡｒｒａｙが使用されることが多く、ＢｙｔｅＡｒｒａｙは繰り返しコピーされて、メモリスペースの大部分を占めるまで、膨大な量のデータがＢｙｔｅＡｒｒａｙに書き込まれる。
【００３１】
このプロセスに用いられる書込み命令は、書込みを伴う特定のFlash  Public  Application  Programming  Interface（ＡＰＩ）コールであることが多い。これは、“ｗｒｉｔｅＵｎｓｉｇｎｅｄｌｎｔ”、“ｗｒｉｔｅｌｎｔ”及び“ｗｒｉｔｅＢｙｔｅ”等のＡＰＩコールを含む。ＡｃｔｉｏｎＳｃｒｉｐｔを用いてエクスプロイテーションが開発される場合、バイトコード内にこのようなＡＰＩコールが発見され得る。現在及び過去のＦｌａｓｈベースのエクスプロイテーション方法を検証することにより、発明者は、悪意あるエクスプロイテーションを含むＦｌａｓｈファイルのバイトコードには、一般にキー命令の特定のリストが存在することを見出した。このような命令には、上述のＡＰＩコールを含むものもあり、含まないものもある。以下は、Ｆｌａｓｈファイルを標的にする際に一般に用いられるキー命令の一部の例である。
bitxor
bitor
in
callpropvoid<q>[public]::writeByte
callproperty<q>[public]::writeByte
callpropvoid<q>[public]::writeDouble
callproperty<q>[public]::writeDouble
callpropvoid<q>[public]::writeFloat
callproperty<q>[public]::writeFloat
callpropvoid<q>[public]::writelnt
callproperty<q>[public]::writelnt
callpropvoid<q>[public]::writeShort
callproperty<q>[public]::writeShort
callpropvoid<q>[public]::writeUnsignedInt
callproperty<q>[public]::writeUnsignedInt
特定された命令がＦｌａｓｈファイルの悪意あるコンテンツを示すと見出されたが、このような命令の単発は一般にエクスプロイテーションのサインではない。一般に、悪意あるＦｌａｓｈファイルではキー命令が複数回繰り返される。図４Ａは、そのような命令の例と命令が繰り返される方式を示す。図示のように、命令“callpropvoid<q>[public]::writelnt”がins[a]、ins[b]、ins[c]及びins[d]において複数回繰り返される。ドットは、図示のキー命令の各オカレンス間に、更に命令の行が存在し得ることを示す。発明者は、悪意あるＦｌａｓｈファイルが、一般に、互いに一定の距離でキー命令の複数のオカレンスを含むことを見出した。例えば、キー命令は、コンパイル済みバイトコードにおいて１００コード行毎（１００命令毎）に繰り返されてよい。図４Ａに示される例では、これは、ins[a]とins[b]の距離がins[b]とins[c]の距離と同じであり、ins[c]とins[d]の距離とも同じであることを意味する。このように、バイトコード内でキー命令が複数回繰り返されるとき、全ての連続する繰り返し間の距離が同じである場合、ファイルは悪意ある可能性がある。一般に、キー命令の等距離の繰り返しを有することに加えて、悪意あるファイルは、最小数のこのような等距離の繰り返しも含む。この最小数は、各異なるキー命令によって異なることがある。例えば、以下に特定されるキー命令は、一般に、その隣に示される最小回数繰り返される。
bitxor‐５０回以上
bitor‐５０回以上
in‐５０回以上
callpropvoid<q>[public]::writeByte‐４０回以上
callproperty<q>[public]::writeByte‐４０回以上
callpropvoid<q>[public]::writeInt‐１０回以上
callproperty<q>[public]::writelnt‐１０回以上
callpropvoid<q>[public]::writeShort‐２０回以上
callproperty<q>[public]::writeShort‐２０回以上
callpropvoid<q>[public]::writeUnsignedInt‐１０回以上
callproperty<q>[public]::writeUnsignedInt‐１０回以上
各キー命令の繰り返しの最小回数は、異なる実施形態では異なってよい。一実施形態では、繰り返しの最小回数は全てのキー命令について同じであってよい。代替の実施形態では、繰り返しの最小回数はない。
【００３２】
エクスプロイテーションについてＦｌａｓｈファイルを標的にする別の一般の方法は、１以上のＡｃｔｉｏｎＳｃｒｉｐｔ文字列にシェルコードを保存することである。これは、一般に、エクスプロイト開発者がシェルコード文字列をＦｌａｓｈファイルのＡｃｔｉｏｎＳｃｒｉｐｔソースコードに含める場合に発生する。Ｆｌａｓｈファイルがコンパイルされるとき、このようなシェルコード文字列は、一般に、定数を記憶する１以上のデータ構造に記憶される。ほとんどのＦｌａｓｈファイルにおいて、このデータ構造は、コンパイル済みコードの定数プールテーブルと呼ばれる。Ｆｌａｓｈファイルの定数プールテーブルは、一般に、定数値の多くが記憶される場所である。これは、番号、文字列、識別子名、クラス及びメソッドへの参照、タイプ記述子等の値を含む。定数プールテーブルは一般にコンパイル済みＦｌａｓｈファイルにおいて文字列が記憶される場所であるので、ＡｃｔｉｏｎＳｃｒｉｐｔソースコードに含まれるシェルコード文字列は、ファイルがコンパイルされるときに定数プールに記憶されることが多い。そのような文字列の例を図４Ｂに示す。図中、定数プール４００は一連の文字列４０２を含む。文字列４０２は、string[0]４０２Ａ、string[1]４０２Ｂ及びstring[n]４０２Ｎを含む複数の文字列を含む。図示のように、この例におけるstring[n]４０２Ｎは、シェルコード様文字列を記憶する。全ての既知のＦｌａｓｈエクスプロイテーションを検証することにより、発明者は、悪意あるエクスプロイテーションに用いられるシェルコード文字列がいくつかの共通の特性をもつことを見出した。本開示で議論される実施形態では、この発見を、バイトコードに用いられるキー命令のリストの知識と共に利用して、素早く、効率的に、且つ性的に、Ｆｌａｓｈファイル内の悪意あるコンテンツを検出する。
【００３３】
図５を参照する。Ｆｌａｓｈファイル内のマルウェアを検出する工程５００は、コードを解析して、ファイルのコンテンツを検証すること（ブロック５０５）から開始してよい。このために、Ｆｌａｓｈファイル対応の任意のパーサーが利用されてよい。一実施形態では、ＡｃｔｉｏｎＳｃｒｉｐｔ３バイトコードに対してＡＢＣバイトコードパーサーが用いられる。パーサーは、定数プールテーブルのコンテンツを検証して、マルウェアを含むかを判定する（ブロック５１０）。これは、シェルコードロジックを通じて、定数プールテーブルの全ての文字列を分析することによって実行されてよい。シェルコードロジックは、Ｆｌａｓｈファイルに用いられる既知のシェルコードのリストを含むデータベースを含んでよい。更に、シェルコードロジックは、シェルコード様文字列の特定に役立つロジックを含んでもよい。一実施形態では、シェルコードロジックは、シェルコードを示す特性を有する１６進文字列を特定する。一構成では、このような特性は、特定の閾値（例えば１，０００）より大きく且つ偶数である文字列長さを含む。別の実施形態では、特性は、文字列内の全バイトが特定の範囲にある（例えば['A'-'F']、['a'-'f']又は['0'-'9'J]）文字列を有することを含む。
【００３４】
定数プールテーブルの文字列のいずれかがデータベース内の文字列の１つとマッチされた場合、又は、シェルコードロジックによりシェルコード様であると特定された場合（ブロック５１５の“Ｙｅｓ”分岐）、特定されたシェルコードはメモリに記憶され（ブロック５２０）、ファイルは悪意ある文字列を含むと特定される（ブロック５２５）。この時点で、工程５００はブロック５１５に戻り、定数プールテーブルが任意の他のシェルコード様文字列を含むかが判定される。他のシェルコード様文字列が特定されなかった場合（ブロック５１５の“Ｎｏ”分岐）、工程はブロック５３０に移行して、バイトコードを解析し、バイトコードに存在する命令を、悪意あるコンテンツを示すと特定されたキー命令のリストと比較する（ブロック５３０）。キー命令のリストは一般に予め定められるが、一実施形態では動的に変更されてよい。例えば、新しいキー命令が特定されたとき、リストはその新しい命令を含むように更新されてよい。バイトコード内の命令のいずれもリストのキー命令のいずれにもマッチしない場合（ブロック５３５の“Ｎｏ”分岐）、バイトコードは、任意の悪意あるバイトコードコンテンツを有さないと特定されてよい（ブロック５４０）。一方、バイトコードがリストのキー命令の１つとマッチする命令を含まない場合（ブロック５３５の“Ｙｅｓ”分岐）、工程は、マッチされた命令がバイトコードにおいて複数回繰り返されるかを判定する（ブロック５４５）。一実施形態では、この段階で、工程は、マッチされた命令が繰り返されるかを判定するだけでなく、命令が所要の最小回数繰り返されるかを判定することを試みる。上述のように、特定の命令は、悪意あるエクスプロイテーションを示すために、特定の最小回数繰り返される必要がある場合がある。よって、工程は、命令が少なくとも最小回数繰り返されるかを判定してよい。マッチされた命令が繰り返されない（又は、最小回数繰り返されない）場合（ブロック５４５“Ｎｏ”分岐）、オカレンスは悪意ある命令を示すものではない可能性が高い。工程はブロック５５０に移行し、バイトコード内にキー命令のいずれかとマッチする他の命令がないかを判定する。バイトコードが更にマッチする命令を含む場合（ブロック５５０の“Ｙｅｓ”分岐）、工程はブロック５４５に戻る。一方、バイトコードが他にマッチする命令を含まない場合、工程はブロック５４０に移行して、ファイルを悪意あるバイトコードを含まないと特定する。このように、バイトコード内の命令がリストのキー命令のいずれにもマッチしない場合、マッチされた命令は繰り返されず、又は、所定数のマッチされた命令は同じ距離で繰り返されず、バイトコードは悪意あるコンテンツがないと判定されてよい。
【００３５】
マッチされた１つの命令がバイトコード内で複数回繰り返される（又は、少なくとも最小回数繰り返される）と判定された場合（ブロック５４５の“Ｙｅｓ”分岐）、工程は、命令の第１のオカレンスと第２のオカレンスの間の距離と、命令の第２のオカレンスと第３のオカレンスの間の距離と、…を計算して、そのような連続するオカレンス間の各々の距離が他の距離と同じであるかを判定する。一実施形態では、キー命令の繰り返されるオカレンス間の各距離は、各オカレンス間のコード行を参照する。マッチされた命令の２つの連続するオカレンス間の各距離が同じである場合（ブロック５６０の“Ｙｅｓ”分岐）、命令は悪意ある命令として記憶され（ブロック５６５）、Ｆｌａｓｈファイルは悪意あるバイトコードコンテンツを含むと特定される。１つの命令が悪意あると特定された場合でも、工程は、残りの命令の検証を継続して、更にキー命令のリストとのマッチがあるかを判定する（ブロック５７５）。更にマッチする命令が発見された場合（ブロック５７５の“Ｙｅｓ”分岐）、工程５００はブロック４５４に移行して、新しく発見された命令が繰り返されるかを判定する。マッチする命令が他に見つからない場合、工程は終了してよい（ブロック５８０）。
【００３６】
本実施形態では、定数プールテーブルを検証しバイトコードを分析するプロセスが連続して発生するが、これら２つの工程は別々に発生してよい。代替のアプローチは、これら２つのプロセスのうち１つだけを含んでよい。他の実施形態では、バイトコードを検証するプロセスは、定数プールテーブルを検証する前に発生してよい。このような場合、工程は、１以上の悪意ある命令がバイトコード内で発見された場合、停止してよい。或いは、工程は、バイトコードが悪意あるコンテンツを含むと特定された場合でも、定数プールテーブルの検証を継続してよい。
【００３７】
本明細書で議論される検出アプローチは、シェルコードロジックに対して静的にバイトコードを解析し定数プールテーブルを分析することを含むので、本アプローチは実施しやすく、残りの工程のパフォーマンスに対する影響が最小限に抑えられる。よって、このようなアプローチにより、Ｆｌａｓｈファイル内の悪意あるコンテンツを素早く効率的に特定することができる。更に、本アプローチは汎用でありシグネチャベースではないので、どのような種類のＦｌａｓｈファイルにも利用することができる。更に、このようなアプローチは、既知と未知の両方の悪意あるコンテンツを検出することができる。なぜなら、このようなアプローチは、マルウェアを示す命令及びシェルコード文字列の特定を含むのみであるかである。このような予め特定された命令又はシェルコードはエクスプロイテーションを示し得るが、必ずしも既知の脆弱性を示すわけではない。このような予め特定された命令及びシェルコード文字列を用いることにより、工程は、既知及び未知のエクスプロイトを検出することができる。
【００３８】
また、本明細書で議論される検出アプローチは非常に正確であり、マルウェアの誤検出特定が最小回数に達することが分かっている。更に、誤検出除去工程を利用して、誤検出の最小数を低減することもできる。図６Ａを参照する。誤検出除去工程６００は、ファイルが、シェルコード文字列をもつことにより悪意あると判定されたかを判定することから開始してよい（ブロック６０５）。ファイルが悪意あるシェルコード文字列をもつとして検出された場合（ブロック６０５の“Ｙｅｓ”分岐）、工程は、ＦｌａｓｈファイルのＡＢＣタグの長さが第１の特定の閾値以上であるかを判定する（ブロック６１０）。第１の特定の閾値は予め定められてもよく、或いは動的に選択されてよい。一実施形態では、閾値は５１２ＫＢである。ＡＢＣタグ長さが特定の閾値以上である場合（ブロック６１０の“Ｙｅｓ”分岐）、ファイルが悪意あるとする特定は誤検出であり（ブロック６２０）、無視することができる。なぜなら、悪意あるエクスプロイテーションを含むファイルのサイズは一般に小さいからである。
【００３９】
ＡＢＣタグ長さが特定の閾値よりも小さい場合（ブロック６１０の“Ｎｏ”分岐）、工程は、ＡｃｔｉｏｎＳｃｒｉｐｔ  ＡＢＣコード内のメソッド・ボディの数が第２の特定の閾値以上であるかを判定する（ブロック６１５）。メソッド・ボディは、コードに含まれるメソッドのボディを表す。コード内のメソッド・ボディの数は、一般に、メソッド・ボディ・カウント（method_body_count）と呼ばれる。メソッド・ボディ・カウントが第２の特定の閾値以上である場合（ブロック６１５の“Ｙｅｓ”分岐）、ファイルを悪意あるとする特定は誤検出であり、無視することができる。一実施形態では、第２の特定の閾値は２００である。メソッド・ボディ・カウントが第２の特定の閾値未満である場合、特定は真陽性であり、ファイルは悪意あると特定されたままとなる（ブロック６２５）。一実施形態では、第１及び第２の特定の閾値は、有意な数のＦｌａｓｈファイルを検証し、悪意あると不当に検出されたファイルの特性を特定することにより、決定される。
【００４０】
ファイルを悪意あるとする特定がシェルコード文字列の検出によるものでない場合（ブロック６０５の“Ｎｏ”分岐）、特定は、バイトコード内のキー命令の繰り返しの検出によるものである。この場合、工程は進行して、関与するエクスプロイテーション方法がＪＩＴスプレーであったかを判定する（ブロック６３０）。これは、キー命令の繰り返しを検証することによって行われてよい。繰り返されるキー命令がbitxor、bitor又はinである場合、悪意あるメソッドがＪＩＴスプレーであると特定されてよい。他の特定のキー命令がＪＩＴスプレーを示してもよい。エクスプロイテーション方法がＪＩＴスプレーとして特定されない場合（ブロック６３０の“Ｎｏ”分岐）、工程は、Ｆｌａｓｈファイルのサイズが特定の数Ｎ１以上であるかを判定する（ブロック６４０）。ＦｌａｓｈファイルのサイズがＮ１よりも小さい場合（ブロック６４０の“Ｎｏ”分岐）、工程は、ファイルのサイズが第２の特定の数Ｎ２以上であるかを判定する（ブロック６４５）。一実施形態では、Ｎ１は１ＭＢであり、Ｎ２は５１２ＫＢである。他の数が採用されてもよい。第１及び第２の特定の閾値と同様に、Ｎ１，Ｎ２は、有意な数のＦｌａｓｈファイルを検証し、悪意あると不当に検出されたファイルの特性を特定することにより、決定されてよい。ＦｌａｓｈファイルのサイズがＮ２以上である場合（ブロック６４５の“Ｙｅｓ”分岐）、工程は、コード内に連続する大型のメソッド・ボディが存在するかを判定する（ブロック６５０）。連続する大型のメソッド・ボディは、所定の数を上回る等しいサイズの複数の連続するメソッド・ボディを意味する。例えば、m_body[100]、m_body[101]及びm_body[150]のサイズが全て１０００バイトである場合、これらのメソッド・ボディは連続する大型のメソッド・ボディとして特定される。サイズが等しく所定の数より大きい連続するメソッド・ボディの数は、異なる実施形態では異なってよい。コードが連続する大型のメソッド・ボディを含まない場合（ブロック６５０の“Ｙｅｓ”分岐）、ファイルは悪意あると不当に特定されており（ブロック６２０）、特定は無視することができる。コード内に連続する大型のメソッド・ボディが存在しない場合（ブロック６５０の“Ｎｏ”分岐）、悪意ある検出は正しく、保持される（ブロック６２５）。
【００４１】
ＦｌａｓｈファイルのサイズがＮ１以上であると判定された場合（ブロック６４０の“Ｙｅｓ”分岐）、工程は、ファイルが連続する大型のメソッド・ボディを含むかを判定する。含むと判定された場合（ブロック６６０の“Ｙｅｓ”分岐）、工程はブロック６４５に移行し、上述のステップに従う。この段階で連続する大型のメソッド・ボディが検出されなかった場合（ブロック６６０の“Ｎｏ”分岐）、工程は、メソッド・ボディ・カウントが数Ｍよりも大きいかを判定する（ブロック６６５）。一実施形態では、数Ｍは８０００に等しい。数Ｍは異なってよく、有意な数のＦｌａｓｈファイルを検証し、悪意あると不当に検出されたファイルの特性を特定することにより、決定されてよい。メソッド・ボディ・カウントがＭよりも大きい場合（ブロック６６５の“Ｙｅｓ”分岐）、ファイルは悪意あると不当に判定されている（ブロック６２０）。メソッド・ボディ・カウントがＭよりも小さい場合、工程は再びブロック６４５に移行する。
【００４２】
工程６００の間、検出された悪意あるエクスプロイテーションがＪＩＴスプレーであると判定された場合（ブロック６３０の“Ｙｅｓ”分岐）、工程は図６Ｂのブロック６７５に進み（ブロック６７０）、誤検出が検出されたかを判定する。ＪＩＴスプレーエクスプロイテーションについて、工程は、コードが連続する大型のメソッド・ボディを含むかを判定する（ブロック６７５）。ＪＩＴスプレーエクスプロイテーションをふくむＦｌａｓｈファイルが連続する大型のメソッド・ボディを含む場合（ブロック６７５の“Ｙｅｓ”分岐）、検出は真陽性であり、保持される（ブロック６８０）。コードが連続する大型のメソッド・ボディを含まない場合（ブロック６７５の“Ｎｏ”分岐）、メソッド・ボディ・カウントが特定の数Ｓよりも大きいかが判定される（ブロック６８５）。一実施形態では、数Ｓは１００００に等しい。Ｍと同様に、Ｓは、有意な数のＦｌａｓｈファイルを検証し、悪意あると不当に検出されたファイルの特性を特定することにより、決定されてよい。メソッド・ボディ・カウントがＳよりも大きい場合（ブロック６８５の“Ｙｅｓ”分岐）、ファイルは悪意あると不当に判定されており、特定は無視される（ブロック６９０）。メソッド・ボディ・カウントがＳよりも小さい場合（ブロック６８５の“Ｎｏ”分岐）、工程は、ファイル内に１以上の特定の特殊タグが存在するかを判定する。存在すると判定された場合（ブロック６９５の“Ｙｅｓ”分岐）、悪意ある検出が誤検出であったことを示す（ブロック６９０）。一実施形態では、特殊タグはDefineSound及びDefineShape3である。なぜなら、一般に、悪意あるＦｌａｓｈファイルはサウンドデータを含まないからである。特殊タグが存在しない場合、ファイルは真陽性である（ブロック６８０）。
【００４３】
本明細書に開示される実施形態はＦｌａｓｈファイルに関して説明されるが、これらの実施形態又はそれらの変形は他の種類のマルチメディアファイルでも採用されてよい。特に、実施形態は、バイトコードベースのマルチメディアファイル及び／又はＦｌａｓｈファイルの定数プールテーブルに類似するアレイ若しくはテーブルを含むマルチメディアファイルにおいて採用されてよい。例えば、実施形態は、いくつかのＪＡＶＡクラスファイルにおいて採用されてよい（“ＪＡＶＡ”はオラクル社の登録商標である）。
【００４４】
例
以下の例は更なる実施形態に関連する。例１は、命令が記憶された少なくとも１つのコンピューター可読記憶媒体である。命令は実行されると、プログラマブル素子に、マルチメディアファイル内の命令を所定の命令のリストとマッチするステップと、マルチメディアファイル内のマッチされた命令の繰り返しを特定するステップと、命令の繰り返し間の距離を計算するステップと、命令の等距離の繰り返しに応答して、マルチメディアファイルを悪意あると特定するステップと、を実行させる。
【００４５】
例２は例１の主題を含む。更に、マルチメディアファイルを悪意あるとする誤検出特定を除外する命令を含む。
【００４６】
例３は例１の主題を含む。更に、マルチメディアファイル内のタグの長さが第１の所定の閾値以上である場合、悪意あると不当に特定されたものとしてファイルを認識する命令を含む。
【００４７】
例４は例１の主題を含む。更に、マルチメディアファイルのメソッド・ボディ・カウントが第２の所定の閾値以上である場合、悪意あると不当に特定されたものとしてファイルを認識する命令を含む。
【００４８】
例５は例１の主題を含む。更に、マルチメディアファイルの、定数を保存する１以上のデータ構造内の１以上の文字列を検証するステップと、１以上の文字列のいずれかがシェルコードを示すものとしてシェルコードロジックによって特定された場合、マルチメディアファイルを悪意あると特定するステップと、を１以上のプロセッサに実行させる命令を含む。
【００４９】
例６は例５の主題を含む。シェルコードロジックはシェルコードデータベースを備える。
【００５０】
例７は例６の主題を含む。更に、１以上の文字列の少なくとも１つが、シェルコードデータベース内の１以上の特定された文字列のうち１つとマッチする場合、マルチメディアファイルを悪意ある文字列を含むと特定するステップ、を１以上のプロセッサに実行させる命令を含む。
【００５１】
例８は例１〜７のいずれかの主題を含む。繰り返しの最小数が等距離である場合、マルチメディアファイルは悪意あると特定される。
【００５２】
例９は例１〜７のいずれか主題を含む。命令はバイトコード命令を含む。
【００５３】
例１０は、マルチメディアファイルの分析を行うように構成された装置である。本装置は、メモリ手段と、前記メモリ手段に通信可能に結合される処理手段とを備える。メモリ手段は、１以上のマルチメディアファイルを受信するステップと、受信されたマルチメディアファイルの各々について、定数を記憶する１以上のデータ構造のコンテンツを検証するステップと、１以上のデータ構造内の１以上の文字列がシェルコードを示すものとしてシェルコードロジックによって特定された場合、前記マルチメディアファイルを悪意あると特定するステップと、を処理手段に実行させる命令を記憶する。
【００５４】
例１１は例１０の主題を含む。命令は更に、マルチメディアファイル内の命令を、所定の命令のリストとマッチするステップと、マルチメディアファイル内のマッチされた命令の繰り返しを特定するステップと、マッチされた命令の繰り返し間の距離を計算するステップと、マッチされた命令の等距離の繰り返しに応答して、マルチメディアファイルを悪意あると特定するステップと、を処理手段に実行させる。
【００５５】
例１２は例１１の主題を含む。繰り返しの最小数が等距離である場合、マルチメディアファイルは悪意あると特定される。
【００５６】
例１３は例１１の主題を含む。繰り返しの２以上が等距離である場合、マルチメディアファイルは悪意あると特定される。
【００５７】
例１４は例１１の主題を含む。命令は更に、ファイルが悪意あると不当に特定されたかを判定するステップ、を処理手段に実行させる。
【００５８】
例１５は例１１の主題を含む。マッチされた命令はバイトコード命令を含む。
【００５９】
例１６は例１５の主題を含む。更に、マルチメディアファイル内のタグの長さが第１の所定の閾値以上である場合、悪意あると不当に特定されたものとしてファイルを認識するステップ、を処理手段に実行させる命令を含む。
【００６０】
例１７は例１５の主題を含む。命令は更に、マルチメディアファイルのメソッド・ボディ・カウントが第２の所定の閾値以上である場合、悪意あると不当に特定されたものとしてファイルを認識するステップ、を処理手段に実行させる。
【００６１】
例１８は例１５の主題を含む。更に、コードがジャスト・イン・タイムのスプレーエクスプロイテーションを含むと判定された場合、コードが１以上の連続した大型のメソッド・ボディを含むかを判定するステップと、コードが１以上の連続した大型のメソッド・ボディを含まないと判定され、且つ、メソッド・ボディ・カウントが所定の閾値よりも大きい場合、マルチメディアファイルが悪意あると不当に特定されたと認識するステップと、を１以上処理手段に実行させる命令を含む。
【００６２】
例１９は、マルチメディアファイル内の命令を、所定の命令のリストとマッチするステップと、マルチメディアファイル内のマッチされた命令の繰り返しを特定するステップと、マッチされた命令の繰り返し間の距離を計算するステップと、マッチされた命令の等距離の繰り返しに応答して、マルチメディアファイルを悪意あると特定するステップと、を含む方法である。
【００６３】
例２０は例１９の主題を含む。更に、マルチメディアファイルの、定数を保存する１以上のデータ構造内の１以上の文字列のいずれかが、シェルコードを示すものとしてシェルコードロジックによって特定された場合、マルチメディアファイルを悪意あると特定するステップ、を含む。
【００６４】
例２１は例２０の主題を含む。更に、マルチメディアファイルを悪意あるとする誤検出特定を除外するステップを含む。
【００６５】
例２２は例２１の主題を含む。更に、コードがジャスト・イン・タイムのスプレーエクスプロイテーションを含むと判定された場合、コードが１以上の連続した大型のメソッド・ボディを含むかを判定するステップと、コードが１以上の連続した大型のメソッド・ボディを含まないと判定され、且つ、メソッド・ボディ・カウントが所定の閾値よりも大きい場合、マルチメディアファイルが悪意あると不当に特定されたと認識するステップと、を含む。
【００６６】
例２３は例２１の主題を含む。更に、コードがジャスト・イン・タイムのスプレーエクスプロイテーションを含むと判定された場合、コードが１以上の連続した大型のメソッド・ボディを含むかを判定するステップと、コードが１以上の連続した大型のメソッド・ボディを含まないと判定され、且つ、マルチメディアファイルが１以上の特殊タグを含む場合、マルチメディアファイルが悪意あると不当に特定されたと認識するステップと、を含む。
【００６７】
例２４は例１９の主題を含む。更に、繰り返しの最小数が等距離である場合、マルチメディアファイルを悪意あると特定するステップを含む。
【００６８】
例２５は例１９の主題を含む。命令はバイトコード命令を含む。
【００６９】
例２６はマルチメディアファイルの分析を行うように構成された装置を含む。本装置は、メモリと、メモリに通信可能に結合される１以上の処理ユニットとを備える。メモリは、１以上のマルチメディアファイルを受信するステップと、受信されたマルチメディアファイルの各々について、定数を記憶する１以上のデータ構造のコンテンツを検証するステップと、１以上のデータ構造内の１以上の文字列がシェルコードを示すものとしてシェルコードロジックによって特定される場合、マルチメディアファイルを悪意あると特定するステップと、を１以上の処理ユニットに実行させる命令を記憶する。
【００７０】
例２７は例２６の主題を含む。命令は更に、マルチメディアファイル内の命令を、所定の命令のリストとマッチするステップと、マルチメディアファイル内のマッチされた命令の繰り返しを特定するステップと、マッチされた命令の繰り返し間の距離を計算するステップと、マッチされた命令の等距離の繰り返しに応答して、マルチメディアファイルを悪意あると特定するステップと、を１以上の処理ユニットに実行させる。
【００７１】
例２８は例２７の主題を含む。繰り返しの最小数が等距離である場合、マルチメディアファイルは悪意あると特定される。
【００７２】
例２９は例２７の主題を含む。繰り返しの２以上が等距離である場合、マルチメディアファイルは悪意あると特定される。
【００７３】
例３０は例２７の主題を含む。命令は更に、ファイルが悪意あると不当に特定されたかを判定するステップ、を１以上の処理ユニットに実行させる。
【００７４】
例３１は例３０の主題を含む。更に、バイトコードがジャスト・イン・タイムのスプレーエクスプロイテーションを含むと判定された場合、マルチメディアファイルのバイトコードが１以上の連続した大型のメソッド・ボディを含むかを判定するステップと、バイトコードが１以上の連続した大型のメソッド・ボディを含まないと判定され、且つ、メソッド・ボディ・カウントが所定の閾値よりも大きい場合、マルチメディアファイルが悪意あると不当に特定されたと認識するステップと、を１以上の処理手段に実行させる命令を含む。
【００７５】
例３２は例２６の主題を含む。命令は更に、ファイルが悪意あると不当に特定されたかを判定するステップ、を１以上の処理ユニットに実行させる。
【００７６】
例３３は例３２の主題を含む。更に、マルチメディアファイル内のタグの長さが第１の所定の閾値以上である場合、悪意あると不当に特定されたものとしてファイルを認識するステップ、を１以上の処理ユニットに実行させる命令を含む。
【００７７】
例３４は例３２の主題を含む。命令は更に、マルチメディアファイルのメソッド・ボディ・カウントが第２の所定の閾値以上である場合、悪意あると不当に特定されたものとしてファイルを認識するステップ、を１以上の処理ユニットに実行させる。
【００７８】
例３５は例２６の主題を含む。更に、１以上の文字列の少なくとも１つが、シェルコードロジック内の１以上の特定された文字列のうち１つとマッチする場合、マルチメディアファイルを悪意ある文字列を含むと特定するステップ、を１以上の処理ユニットに実行させる命令を含む。
【００７９】
例３６は例２６の主題を含む。シェルコードロジックはシェルコードデータベースを備える。
【００８０】
例３７はコードを備える機械可読媒体を含む。コードは、実行されると、例１９、２０、２１、２２、２３、２４、２５のいずれか１つの方法を機械に実行させる。
【００８１】
例３８は、メモリ手段と、１以上の処理手段と、コンピューター実行可能命令が記憶されたコンピューター可読記憶媒体とを備える装置を含む。命令は、１以上の処理手段に、マルチメディアファイル内の命令を、所定の命令のリストとマッチするステップと、マルチメディアファイル内のマッチされた命令の繰り返しを特定するステップと、マッチされた命令の繰り返し間の距離を計算するステップと、マッチされた命令の等距離の繰り返しに応答して、マルチメディアファイルを悪意あると特定するステップと、を実行させる。
【００８２】
例３９は例３８の主題を含む。命令は更に、マルチメディアファイルの、定数を記憶する１以上のデータ構造内の１以上の文字列を検証するステップと、１以上の文字列のいずれかがシェルコードを示すものとしてシェルコードロジックによって特定された場合、マルチメディアファイルを悪意あると特定するステップと、を１以上の処理手段に実行させる。
【００８３】
例４０は例３９の主題を含む。命令は更に、１以上の文字列の少なくとも１つがシェルコードロジック内の１以上の特定された文字列のうち１つとマッチする場合、マルチメディアファイルを悪意ある文字列を含むと特定するステップ、を１以上の処理手段に実行させる。
【００８４】
例４１は例４０の主題を含む。シェルコードロジックはシェルコードデータベースを備える。
【００８５】
例４２は例３８の主題を含む。繰り返しの最小数が等距離である場合、マルチメディアファイルは悪意あると特定される。
【００８６】
例４３は例３８の主題を含む。更に、マルチメディアファイルを悪意あるとする誤検出特定を除外する命令を含む。
【００８７】
例４４は、マルチメディアファイルの分析を行うように構成されるネットワーク装置を含む。装置は、１以上のプロセッサと、１以上のプロセッサに通信可能に結合されるメモリと、を備える。メモリは、１以上のプロセッサに、１以上のマルチメディアファイルを受信するステップと、受信されたマルチメディアファイルの各々について、定数を記憶する１以上のデータ構造のコンテンツを検証するステップと、１以上のデータ構造内の１以上の文字列がシェルコードを示すものとしてシェルコードロジックによって特定された場合、マルチメディアファイルを悪意あると特定するステップと、を実行させる命令を記憶する。
【００８８】
例４５は例４４の主題を含む。命令は更に、マルチメディアファイル内の命令を、所定の命令のリストとマッチするステップと、マルチメディアファイル内のマッチされた命令の繰り返しを特定するステップと、マッチされた命令の繰り返し間の距離を計算するステップと、マッチされた命令の等距離の繰り返しに応答して、マルチメディアファイルを悪意あると特定するステップと、を１以上のプロセッサに実行させる。
【００８９】
例４６は例４５の主題を含む。繰り返しの最小数が等距離である場合、マルチメディアファイルは悪意あると特定される。
【００９０】
例４７は例４５の主題を含む。繰り返しの２以上が等距離である場合、マルチメディアファイルは悪意あると特定される。
【００９１】
例４８は例４５の主題を含む。命令は更に、ファイルが悪意あると不当に特定されたかを判定するステップ、を１以上のプロセッサに実行させる。
【００９２】
例４９は例４４の主題を含む。命令は更に、ファイルが悪意あると不当に特定されたかを判定するステップ、を処理手段に実行させる。
【００９３】
例５０は例４９の主題を含む。更に、マルチメディアファイル内のタグの長さが第１の所定の閾値以上である場合、悪意あると不当に特定されたものとしてファイルを認識するステップ、を処理手段に実行させる命令を含む。
【００９４】
例５１は例４９の主題を含む。命令は更に、マルチメディアファイルのメソッド・ボディ・カウントが第２の所定の閾値以上である場合、悪意あると不当に特定されたものとしてファイルを認識するステップ、を１以上のプロセッサに実行させる。
【００９５】
例５２は例４９の主題を含む。更に、バイトコードがジャスト・イン・タイムのスプレーエクスプロイテーションを含むと判定された場合、マルチメディアファイルのバイトコードが１以上の連続した大型のメソッド・ボディを含むかを判定するステップと、バイトコードが１以上の連続した大型のメソッド・ボディを含まないと判定され、且つ、メソッド・ボディ・カウントが所定の閾値よりも大きい場合、マルチメディアファイルが悪意あると不当に特定されたと認識するステップと、を１以上のプロセッサに実行させる命令を含む。
【００９６】
上述の説明では、説明の目的上、開示の実施形態の完全な理解を提供するために、多くの特定の詳細を記載した。しかしながら、当業者には明らかであるように、開示の実施形態はそれらの特定の詳細を伴わずに実施されてよい。他の例では、開示の実施形態が曖昧になるのを避けるために、構造及び装置をブロック図の形で示している。下付き文字又は添え字のない番号の参照は、参照符号に対応する下付き文字及び添え字の全ての例に言及すると理解される。更に、本開示で用いられる言語は、主に、読みやすさと教示を目的として選択されており、発明の主題を説明又は制限したり、係る発明の主題の決定に必要な特許請求の範囲に訴えたりするために選択されていない。本明細書において「一実施形態」又は「実施形態」という場合、該実施形態に関連して記載される特定の特徴、構造又は特性が、少なくとも１つの開示の実施形態に含まれることを意味する。「一実施形態」又は「実施形態」と複数回いう場合、必ずしも全てが同じ実施形態に言及しないと理解されたい。
【００９７】
また、当然ながら、上記の記載は説明を意図しており、限定的ではない。例えば、上述の実施形態は互いに組み合わせて採用されてよく、例示のプロセス動作は図示の順序と異なる順序で実行されてよい。当業者であれば、上記を検証すれば多くの他の実施形態が明らかになるであろう。したがって、本発明の範囲は、添付の特許請求の範囲と、特許請求の範囲が権利をもつ均等物の全範囲とを参照して決定される。添付の特許請求の範囲において、“including”，“in  which”という表現は、それぞれ“comprising”，“wherein”という表現の平易な英語の均等物である。
【図１】
0006306191.tif 000002
【図２】
0006306191.tif 000003
【図３】
0006306191.tif 000004
【図４Ａ】
0006306191.tif 000005
【図４Ｂ】
0006306191.tif 000006
【図５】
0006306191.tif 000007
【図６Ａ】
0006306191.tif 000008
【図６Ｂ】
0006306191.tif 000009