【文献】
Analyzing and Detecting Malicious Flash Advertisements,Computer Security Applicatios Conference, ACSAC, Honolulu, HI,IEEE,2009年12月 7日,P363-372,ISR D1,URL,https://www.cs.ucsb.edu/~chris/research/doc/acsac09_flash.pdf
(58)【調査した分野】(Int.Cl.,DB名)
前記マルチメディアファイル内のタグの長さが第1の所定の閾値以上である場合、悪意あると不当に特定されたものとして前記マルチメディアファイルを認識するステップ、
を前記処理手段に実行させる命令を更に含む、請求項14に記載の装置。
前記マルチメディアファイルのバイトコードがジャスト・イン・タイムのスプレーエクスプロイテーションを含むと判定された場合、前記バイトコード命令が1以上の連続した大型のメソッド・ボディを含むかを判定するステップと、
前記バイトコード命令が1以上の連続した大型のメソッド・ボディを含まないと判定され、且つ、メソッド・ボディ・カウントが所定の閾値よりも大きい場合、前記マルチメディアファイルが悪意あると不当に特定されたと認識するステップと、
を前記1以上の処理手段に実行させる命令を更に含む、請求項14に記載の装置。
前記マルチメディアファイルの、定数を保存する1以上のデータ構造内の1以上の文字列のいずれかが、シェルコードを示すものとしてシェルコードロジックによって特定された場合、前記処理ユニットが、前記マルチメディアファイルを悪意あると特定するステップ、
を更に含む、請求項18に記載の方法。
【発明を実施するための形態】
【0007】
Flashファイルはますます、悪意あるエクスプロイテーションの標的になっている。このようなエクスプロイテーションを効果的に検出及び除去するために、商標登録されておらず且つコードを作動させずにリスクを特定できる検出アプローチを利用することができる。一実施形態では、係るアプローチは、Flashファイルのコンパイル済みバイトコードを解析して、特定されたキー命令を検出し、そのキー命令が、悪意あるエクスプロイテーションの存在を表す特定のパターンで繰り返されるかを判定することを含む。本アプローチは、コンパイル済みFlashファイルの定数プールテーブルのコンテンツを検証して、悪意あるエクスプロイテーションの存在を示す特定のシェルコード文字列を検出することを含んでもよい。バイトコード又は定数プールテーブルが悪意あるエクスプロイテーションが存在することを示す場合、アプローチを利用して、悪意あるエクスプロイテーションの誤検出特定の場合を低減することができる。
【0008】
以下の説明では、説明の目的上、本発明の完全な理解を提供するために、多くの特定の詳細を記載する。しかしながら、当業者には明らかであるように、本発明はそれらの特定の詳細を伴わずに実施されてよい。他の例では、開示の実施形態が曖昧になるのを避けるために、構造及び装置をブロック図の形で示している。下付き文字又は添え字のない番号の参照は、参照符号に対応する下付き文字及び添え字の全ての例に言及すると理解される。更に、本開示で用いられる言語は、主に、読みやすさと教示を目的として選択されており、発明の主題を説明又は制限したり、係る発明の主題の決定に必要な特許請求の範囲に訴えたりするために選択されていない。本明細書において「一実施形態」又は「実施形態」という場合、該実施形態に関連して記載される特定の特徴、構造又は特性が、少なくとも1つの開示の実施形態に含まれることを意味する。「一実施形態」又は「実施形態」と複数回いう場合、必ずしも全てが同じ実施形態に言及しないと理解されたい。
【0009】
本明細書で用いられる場合、「プログラマブル素子」という用語は、単一のプログラマブル素子、又は、プログラマブル素子において又はプログラマブル素子によって実行されるものとして記載される機能を実行するように連携する複数のプログラマブル素子を指すことがある。
【0010】
図1を参照する。例示的インフラストラクチャ100が概略的に示される。
【0011】
インフラストラクチャ100はコンピューターネットワーク102を含み、コンピューターネットワーク102は、インターネット、企業ネットワーク、ローカルエリアネットワーク(LAN)等の、現在利用可能な多くの異なる種類のコンピューターネットワークを含んでよい。これらのネットワークの各々は、有線装置又は無線装置を含んでよく、任意の数のネットワークプロトコル(例えばTCP/IP)を用いて動作してよい。ネットワーク102は、ゲートウェイ及びルーター(108で表される)、エンドユーザーコンピューター106並びにコンピューターサーバー104に接続される。インフラストラクチャ100には、モバイル通信装置と共に利用されるセルラーネットワーク103も示される。当該技術分野では既知であるように、モバイルセルラーネットワークは携帯電話その他多くの種類の装置(例えばタブレットコンピューター(図示なし))をサポートする。インフラストラクチャ100内のモバイルデバイスは携帯電話110として示される。
【0012】
本明細書に開示の1以上の実施形態によれば、
図1に示されるようなネットワークにおいて、Flashファイルをモニタリング及び分析して、マルウェアを検出することができる。1以上のソフトウェアプログラム又は機器を利用して、ネットワーク内のFlashファイルをモニタリング及び分析して、ファイルに静的解析を行い、そこに含まれる悪意あるコンテンツを検出してよい。
【0013】
図2を参照する。ブロック図はプログラマブル素子200を示し、プログラマブル素子200は、一実施形態に係る悪意あるコンテンツ検出アプローチを採用してよい。
図2に示されるプログラマブル素子は、第1の処理要素270及び第2の処理要素280を含むマルチプロセッサプログラマブル素子200である。2つの処理要素270,280が示されているが、プログラマブル素子200の実施形態はそのような処理要素を1つだけ含んでもよい。
【0014】
プログラマブル素子200はポイントツーポイント・インターコネクトシステムとして示され、第1の処理要素270及び第2の処理要素280はポイントツーポイント・インターコネクト250を介して結合される。
図2に示されるインターコネクトのいずれか又は全部は、ポイントツーポイント・インターコネクトではなく、マルチドロップバスとして実施されてよい。
【0015】
図2に示されるように、処理要素270,280の各々は、第1及び第2のプロセッサコア(すなわち、プロセッサコア274a,274bとプロセッサコア284a,284b)を含むマルチコアプロセッサであってよい。このようなコア274a,274b,284a,284bは、
図5及び
図6A〜6Bに関連して本明細書に開示される方式で、命令コードを実行するように構成されてよい。しかしながら、他の実施形態は、必要に応じてシングルコアプロセッサである処理要素を採用してよい。複数の処理要素270、bb、を用いる実施形態では、各処理要素は、必要に応じて異なる数のコアを用いて実現されてよい。
【0016】
各処理要素270,280は、少なくとも1つの共有キャッシュ246を有してよい。共有キャッシュ246a,246bは、処理要素の1以上のコンポーネント(それぞれコア274a,274bと284a,284b等)によって利用されるデータ(例えば命令)を記憶してよい。例えば、処理要素270,280のコンポーネントがより速くアクセスできるように、共有キャッシュは、メモリ232,234に記憶されたデータをローカルでキャッシュしてよい。1以上の実施形態では、共有キャッシュ246a,246bは、1以上の中間レベルキャッシュ(レベル2(L2)、レベル3(L3)、レベル4(L4)等)又は他のレベルのキャッシュ(最終レベルキャッシュ(LLC))又はそれらの組合わせを含んでよい。
【0017】
図2は、図示を明確にするために、2つの処理要素270,280を有するプログラマブル素子を示すが、本発明の範囲はそれに限定されず、任意の数の処理要素が存在してよい。或いは、処理要素270,280の1以上はプロセッサ以外の要素であってよく、グラフィックス・プロセッシング・ユニット(GPU)、デジタル信号処理(DSP)ユニット、フィールド・プログラマブル・ゲートアレイその他のプログラマブル処理要素等であってよい。処理要素280は処理要素270について異種又は非対称であってよい。アーキテクチャ、マイクロアーキテクチャ、熱、消費電力特性等を含む利点のメトリックの範囲の観点から、処理要素270,280には様々な違いがあってよい。これらの違いは、処理要素270,280間の非対称性及び不均一性として、効果的に現れ得る。一部の実施形態では、様々な処理要素270,280は、同一のダイパッケージ内に存在することができる。
【0018】
第1の処理要素270は更に、メモリ・コントローラ・ロジック(MC)272及びポイントツーポイント(P−P)インターコネクト276,278を有してよい。同様に、第2の処理要素280は、MC282及びP−Pインターコネクト286,288を有してよい。
図2に示されるように、MC272,282は、処理要素270,280をそれぞれのメモリ、すなわちメモリ232とメモリ234に結合する。メモリは、それぞれのプロセッサにローカルに取り付けられるメインメモリの一部であってよい。MCロジック272,282は処理要素270,280に組み込まれるように図示されているが、一部の実施形態では、MCロジックは、処理要素270,280に組み込まれるのではなく処理要素270,280外部の個別ロジックであってよい。
【0019】
処理要素270及び処理要素280は、それぞれP−Pインターコネクト276,286,284を介して、I/Oサブシステム290に結合されてよい。
図2に示されるように、I/Oサブシステム290はP−Pインターコネクト294,298を含む。更に、I/Oサブシステム290は、I/Oサブシステム290を高性能グラフィクスエンジン238に結合するためのインターフェース292を含む。一実施形態では、バス249は、グラフィクスエンジン238をI/Oサブシステム290に結合するために用いられてよい。交代に、ポイントツーポイント・インターコネクト239はこれらのコンポーネントを結合してよい。
【0020】
同様に、I/Oサブシステム290は、インターフェース296を介して第1のリンク216に結合されてよい。一実施形態では、本発明の範囲は限定されないが、第1のリンク216はペリフェラル・コンポーネント・インターコネクト(PCI)バスであってよく、或いは、PCI Expressバス等のバス、或いは別のI/Oインターコネクトバスであってよい。
【0021】
図2に示されるように、様々なI/O装置214がブリッジ218と共に第1のリンク216に結合されてよく、ブリッジ218は第1のリンク216を第2のリンク210に結合してよい。一実施形態では、第2のリンク220はLPC(low pin count)バスであってよい。第2のリンク220には、例えばキーボード/マウス212、通信装置226(同様にコンピューターネットワーク203と通信してよい)、データ記憶部228(ディスクドライバ又は他のマスストレージ装置等)等の、様々な装置が結合されてよい。一実施形態では、データ記憶部228はコード230を含んでよい。コード230は、上述の技術の1以上の実施形態を実施するための命令を含んでよい。更に、第2のバス220にはオーディオI/O224が結合されてよい。なお、他の実施形態も考えられる。例えば、
図2のポイントツーポイント・アーキテクチャの代わりに、システムは、マルチドロップバス又は別の通信トポロジーを実施してよい。
図2ではリンク216,220がバスとして示されているが、任意の望ましい種類のリンクを採用することができる。また、代替として、
図2の要素を区切るために用いられる集積チップの数は、
図2に示されるよりも多くても少なくてもよい。
【0022】
図3を参照する。ブロック図は、別の実施形態に係るプログラマブル素子300を示す。
図2の特定の態様は、
図3の他の態様が曖昧になるのを避けるために、
図3では省略されている。
【0023】
図3は、処理要素370,380がそれぞれ統合メモリ及びI/O制御ロジック(“CL”)372,382を有してよいことを示す。一部の実施形態では、CL372,382は、
図2に関連して説明されたようにメモリ制御ロジック(MC)を含んでよい。更に、CL372,382はI/O制御ロジックを含んでもよい。
図3は、メモリ332,334がCL372,382に結合されてよいだけでなく、I/O装置314が制御ロジック372,382に結合されてもよいことを示す。レガシーI/O装置315はI/Oサブシステム390に結合されてよい。
【0024】
図2及び
図3に示されるプログラマブル素子は、本明細書で議論される様々な実施形態を実現するために利用され得るプログラマブル素子の実施形態の概略図である。明らかなように、
図2及び
図3に示されるプログラマブル素子の様々なコンポーネントは、システム・オン・チップ(SoC)アーキテクチャにおいて組み合わせられてよい。
【0025】
本明細書に開示される本発明の実施形態はソフトウェアを含んでよい。そのようなものとして、一般のコンピューティング・ソフトウェア・アーキテクチャの説明を提供する。ハードウェアの例のように、本明細書で議論されるソフトウェアアーキテクチャは、決して排他的なものではなく説明上のものである。
【0026】
ファイル内の悪意あるコンテンツを検出する様々な実施形態の議論を始める。本明細書に記載される実施形態は、中間言語のバイトコードによって作成されるか又は中間言語のバイトコードを含む任意のファイルに適用可能である。特に、実施形態は、コンパイラ又はインタープリタによりバイトコードタイプのコードに変換され得るソースコードを伴うファイルに適用される。Flashファイルは、そのようなファイルの一例である。Flashファイルは、ActionScriptと呼ばれるオブジェクト指向言語を用いてプログラムすることができる。Flashファイルで用いられるActionScriptは、中間言語の例である。本開示の時点では、3つのバージョンのActionScriptが存在する。これらには、ActionScript、ActionScript2及びActionScript3が含まれる。ActionScriptコードは、一般に、コンパイラによってバイトコードに変換される。
【0027】
Flashファイルは、一般に、文字列“FWS”又は“CWS”から始まり、8ビットのバージョン番号と、32ビットのファイル長さフィールドと、圧縮又は非圧縮データが続く。非圧縮データ部分はヘッダーを含み、タグのリストが続く。各タグは、データタイプ(例えばActionScriptバイトコード)のコンテナの役割を果たす。タグは、タグタイプ識別子及びタグの長さから始まり、データが続く。このように、Flashファイルの完全な構造は一般に以下のように表される。
【0028】
[FWS/CWS][Version][Length][[Header][[Tag Header][Tag Contents]]...[0]]
ファイル構造に含まれるタグの一部はプログラムロジックを含む。そのようなタグは一般にマルウェアコンテンツの多くが位置する場所なので、本開示が特に着目する点である。特に興味深いのはActionScriptバイトコードである。なぜなら、ほとんどのFlashファイルの悪意あるエクスプロイテーションはActionScriptコードを用いて開発されてから、バイトコードに変換されるからである。バイトコードを検証することにより、このようなFlashエクスプロイテーションの多くを検出することができる。
【0029】
使用されるActionScriptのバージョンに応じて、バイトコードは異なる種類のタグに含まれる場合がある。例えば、ActionScript2バイトコードは、以下のタグすなわちDoInitAction、DoAction、PlaceObject2、PlaceObject3、DefineButton、DefineButton2のうち1つに存在し得る。一方、ActionScript3バイトコードは一般に、DoABCDefine又はDoABCのタグに含まれる。このような位置を知ることにより、バイトコードレベルパーサーはFlashファイル内のバイトコードを素早く見つけ、そのコンテンツを検証することができる。
【0030】
Flashファイルを標的にするエクスプロイテーション方法には様々なものがある。このような方法のうち最も一般的なタイプとして、ヒープスプレー、ジャスト・イン・タイム(JIT)スプレー及び進化型Flashヒープクラフティングが挙げられる。Flashにおけるヒープスプレーは、一般に、ByteArrayと呼ばれるFlash publicクラスを用いて実行される。ByteArrayクラスは、任意のバイト、整数の2進表示、浮動小数点及び文字列の読み書きを可能にする。FlashにおけるByteArrayクラスの実施はメモリの隣接部分を利用し、アレイのコンテンツを保存するために必要に応じて拡張可能である。拡張可能メモリへのアクセスを提供するので、ByteArrayは、悪意あるエクスプロイテーションの使用において最有力候補である。このプロセスでは書込み命令を含むByteArrayが使用されることが多く、ByteArrayは繰り返しコピーされて、メモリスペースの大部分を占めるまで、膨大な量のデータがByteArrayに書き込まれる。
【0031】
このプロセスに用いられる書込み命令は、書込みを伴う特定のFlash Public Application Programming Interface(API)コールであることが多い。これは、“writeUnsignedlnt”、“writelnt”及び“writeByte”等のAPIコールを含む。ActionScriptを用いてエクスプロイテーションが開発される場合、バイトコード内にこのようなAPIコールが発見され得る。現在及び過去のFlashベースのエクスプロイテーション方法を検証することにより、発明者は、悪意あるエクスプロイテーションを含むFlashファイルのバイトコードには、一般にキー命令の特定のリストが存在することを見出した。このような命令には、上述のAPIコールを含むものもあり、含まないものもある。以下は、Flashファイルを標的にする際に一般に用いられるキー命令の一部の例である。
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
特定された命令がFlashファイルの悪意あるコンテンツを示すと見出されたが、このような命令の単発は一般にエクスプロイテーションのサインではない。一般に、悪意あるFlashファイルではキー命令が複数回繰り返される。
図4Aは、そのような命令の例と命令が繰り返される方式を示す。図示のように、命令“callpropvoid<q>[public]::writelnt”がins[a]、ins[b]、ins[c]及びins[d]において複数回繰り返される。ドットは、図示のキー命令の各オカレンス間に、更に命令の行が存在し得ることを示す。発明者は、悪意あるFlashファイルが、一般に、互いに一定の距離でキー命令の複数のオカレンスを含むことを見出した。例えば、キー命令は、コンパイル済みバイトコードにおいて100コード行毎(100命令毎)に繰り返されてよい。
図4Aに示される例では、これは、ins[a]とins[b]の距離がins[b]とins[c]の距離と同じであり、ins[c]とins[d]の距離とも同じであることを意味する。このように、バイトコード内でキー命令が複数回繰り返されるとき、全ての連続する繰り返し間の距離が同じである場合、ファイルは悪意ある可能性がある。一般に、キー命令の等距離の繰り返しを有することに加えて、悪意あるファイルは、最小数のこのような等距離の繰り返しも含む。この最小数は、各異なるキー命令によって異なることがある。例えば、以下に特定されるキー命令は、一般に、その隣に示される最小回数繰り返される。
bitxor‐50回以上
bitor‐50回以上
in‐50回以上
callpropvoid<q>[public]::writeByte‐40回以上
callproperty<q>[public]::writeByte‐40回以上
callpropvoid<q>[public]::writeInt‐10回以上
callproperty<q>[public]::writelnt‐10回以上
callpropvoid<q>[public]::writeShort‐20回以上
callproperty<q>[public]::writeShort‐20回以上
callpropvoid<q>[public]::writeUnsignedInt‐10回以上
callproperty<q>[public]::writeUnsignedInt‐10回以上
各キー命令の繰り返しの最小回数は、異なる実施形態では異なってよい。一実施形態では、繰り返しの最小回数は全てのキー命令について同じであってよい。代替の実施形態では、繰り返しの最小回数はない。
【0032】
エクスプロイテーションについてFlashファイルを標的にする別の一般の方法は、1以上のActionScript文字列にシェルコードを保存することである。これは、一般に、エクスプロイト開発者がシェルコード文字列をFlashファイルのActionScriptソースコードに含める場合に発生する。Flashファイルがコンパイルされるとき、このようなシェルコード文字列は、一般に、定数を記憶する1以上のデータ構造に記憶される。ほとんどのFlashファイルにおいて、このデータ構造は、コンパイル済みコードの定数プールテーブルと呼ばれる。Flashファイルの定数プールテーブルは、一般に、定数値の多くが記憶される場所である。これは、番号、文字列、識別子名、クラス及びメソッドへの参照、タイプ記述子等の値を含む。定数プールテーブルは一般にコンパイル済みFlashファイルにおいて文字列が記憶される場所であるので、ActionScriptソースコードに含まれるシェルコード文字列は、ファイルがコンパイルされるときに定数プールに記憶されることが多い。そのような文字列の例を
図4Bに示す。図中、定数プール400は一連の文字列402を含む。文字列402は、string[0]402A、string[1]402B及びstring[n]402Nを含む複数の文字列を含む。図示のように、この例におけるstring[n]402Nは、シェルコード様文字列を記憶する。全ての既知のFlashエクスプロイテーションを検証することにより、発明者は、悪意あるエクスプロイテーションに用いられるシェルコード文字列がいくつかの共通の特性をもつことを見出した。本開示で議論される実施形態では、この発見を、バイトコードに用いられるキー命令のリストの知識と共に利用して、素早く、効率的に、且つ性的に、Flashファイル内の悪意あるコンテンツを検出する。
【0033】
図5を参照する。Flashファイル内のマルウェアを検出する工程500は、コードを解析して、ファイルのコンテンツを検証すること(ブロック505)から開始してよい。このために、Flashファイル対応の任意のパーサーが利用されてよい。一実施形態では、ActionScript3バイトコードに対してABCバイトコードパーサーが用いられる。パーサーは、定数プールテーブルのコンテンツを検証して、マルウェアを含むかを判定する(ブロック510)。これは、シェルコードロジックを通じて、定数プールテーブルの全ての文字列を分析することによって実行されてよい。シェルコードロジックは、Flashファイルに用いられる既知のシェルコードのリストを含むデータベースを含んでよい。更に、シェルコードロジックは、シェルコード様文字列の特定に役立つロジックを含んでもよい。一実施形態では、シェルコードロジックは、シェルコードを示す特性を有する16進文字列を特定する。一構成では、このような特性は、特定の閾値(例えば1,000)より大きく且つ偶数である文字列長さを含む。別の実施形態では、特性は、文字列内の全バイトが特定の範囲にある(例えば['A'-'F']、['a'-'f']又は['0'-'9'J])文字列を有することを含む。
【0034】
定数プールテーブルの文字列のいずれかがデータベース内の文字列の1つとマッチされた場合、又は、シェルコードロジックによりシェルコード様であると特定された場合(ブロック515の“Yes”分岐)、特定されたシェルコードはメモリに記憶され(ブロック520)、ファイルは悪意ある文字列を含むと特定される(ブロック525)。この時点で、工程500はブロック515に戻り、定数プールテーブルが任意の他のシェルコード様文字列を含むかが判定される。他のシェルコード様文字列が特定されなかった場合(ブロック515の“No”分岐)、工程はブロック530に移行して、バイトコードを解析し、バイトコードに存在する命令を、悪意あるコンテンツを示すと特定されたキー命令のリストと比較する(ブロック530)。キー命令のリストは一般に予め定められるが、一実施形態では動的に変更されてよい。例えば、新しいキー命令が特定されたとき、リストはその新しい命令を含むように更新されてよい。バイトコード内の命令のいずれもリストのキー命令のいずれにもマッチしない場合(ブロック535の“No”分岐)、バイトコードは、任意の悪意あるバイトコードコンテンツを有さないと特定されてよい(ブロック540)。一方、バイトコードがリストのキー命令の1つとマッチする命令を含まない場合(ブロック535の“Yes”分岐)、工程は、マッチされた命令がバイトコードにおいて複数回繰り返されるかを判定する(ブロック545)。一実施形態では、この段階で、工程は、マッチされた命令が繰り返されるかを判定するだけでなく、命令が所要の最小回数繰り返されるかを判定することを試みる。上述のように、特定の命令は、悪意あるエクスプロイテーションを示すために、特定の最小回数繰り返される必要がある場合がある。よって、工程は、命令が少なくとも最小回数繰り返されるかを判定してよい。マッチされた命令が繰り返されない(又は、最小回数繰り返されない)場合(ブロック545“No”分岐)、オカレンスは悪意ある命令を示すものではない可能性が高い。工程はブロック550に移行し、バイトコード内にキー命令のいずれかとマッチする他の命令がないかを判定する。バイトコードが更にマッチする命令を含む場合(ブロック550の“Yes”分岐)、工程はブロック545に戻る。一方、バイトコードが他にマッチする命令を含まない場合、工程はブロック540に移行して、ファイルを悪意あるバイトコードを含まないと特定する。このように、バイトコード内の命令がリストのキー命令のいずれにもマッチしない場合、マッチされた命令は繰り返されず、又は、所定数のマッチされた命令は同じ距離で繰り返されず、バイトコードは悪意あるコンテンツがないと判定されてよい。
【0035】
マッチされた1つの命令がバイトコード内で複数回繰り返される(又は、少なくとも最小回数繰り返される)と判定された場合(ブロック545の“Yes”分岐)、工程は、命令の第1のオカレンスと第2のオカレンスの間の距離と、命令の第2のオカレンスと第3のオカレンスの間の距離と、…を計算して、そのような連続するオカレンス間の各々の距離が他の距離と同じであるかを判定する。一実施形態では、キー命令の繰り返されるオカレンス間の各距離は、各オカレンス間のコード行を参照する。マッチされた命令の2つの連続するオカレンス間の各距離が同じである場合(ブロック560の“Yes”分岐)、命令は悪意ある命令として記憶され(ブロック565)、Flashファイルは悪意あるバイトコードコンテンツを含むと特定される。1つの命令が悪意あると特定された場合でも、工程は、残りの命令の検証を継続して、更にキー命令のリストとのマッチがあるかを判定する(ブロック575)。更にマッチする命令が発見された場合(ブロック575の“Yes”分岐)、工程500はブロック454に移行して、新しく発見された命令が繰り返されるかを判定する。マッチする命令が他に見つからない場合、工程は終了してよい(ブロック580)。
【0036】
本実施形態では、定数プールテーブルを検証しバイトコードを分析するプロセスが連続して発生するが、これら2つの工程は別々に発生してよい。代替のアプローチは、これら2つのプロセスのうち1つだけを含んでよい。他の実施形態では、バイトコードを検証するプロセスは、定数プールテーブルを検証する前に発生してよい。このような場合、工程は、1以上の悪意ある命令がバイトコード内で発見された場合、停止してよい。或いは、工程は、バイトコードが悪意あるコンテンツを含むと特定された場合でも、定数プールテーブルの検証を継続してよい。
【0037】
本明細書で議論される検出アプローチは、シェルコードロジックに対して静的にバイトコードを解析し定数プールテーブルを分析することを含むので、本アプローチは実施しやすく、残りの工程のパフォーマンスに対する影響が最小限に抑えられる。よって、このようなアプローチにより、Flashファイル内の悪意あるコンテンツを素早く効率的に特定することができる。更に、本アプローチは汎用でありシグネチャベースではないので、どのような種類のFlashファイルにも利用することができる。更に、このようなアプローチは、既知と未知の両方の悪意あるコンテンツを検出することができる。なぜなら、このようなアプローチは、マルウェアを示す命令及びシェルコード文字列の特定を含むのみであるかである。このような予め特定された命令又はシェルコードはエクスプロイテーションを示し得るが、必ずしも既知の脆弱性を示すわけではない。このような予め特定された命令及びシェルコード文字列を用いることにより、工程は、既知及び未知のエクスプロイトを検出することができる。
【0038】
また、本明細書で議論される検出アプローチは非常に正確であり、マルウェアの誤検出特定が最小回数に達することが分かっている。更に、誤検出除去工程を利用して、誤検出の最小数を低減することもできる。
図6Aを参照する。誤検出除去工程600は、ファイルが、シェルコード文字列をもつことにより悪意あると判定されたかを判定することから開始してよい(ブロック605)。ファイルが悪意あるシェルコード文字列をもつとして検出された場合(ブロック605の“Yes”分岐)、工程は、FlashファイルのABCタグの長さが第1の特定の閾値以上であるかを判定する(ブロック610)。第1の特定の閾値は予め定められてもよく、或いは動的に選択されてよい。一実施形態では、閾値は512KBである。ABCタグ長さが特定の閾値以上である場合(ブロック610の“Yes”分岐)、ファイルが悪意あるとする特定は誤検出であり(ブロック620)、無視することができる。なぜなら、悪意あるエクスプロイテーションを含むファイルのサイズは一般に小さいからである。
【0039】
ABCタグ長さが特定の閾値よりも小さい場合(ブロック610の“No”分岐)、工程は、ActionScript ABCコード内のメソッド・ボディの数が第2の特定の閾値以上であるかを判定する(ブロック615)。メソッド・ボディは、コードに含まれるメソッドのボディを表す。コード内のメソッド・ボディの数は、一般に、メソッド・ボディ・カウント(method_body_count)と呼ばれる。メソッド・ボディ・カウントが第2の特定の閾値以上である場合(ブロック615の“Yes”分岐)、ファイルを悪意あるとする特定は誤検出であり、無視することができる。一実施形態では、第2の特定の閾値は200である。メソッド・ボディ・カウントが第2の特定の閾値未満である場合、特定は真陽性であり、ファイルは悪意あると特定されたままとなる(ブロック625)。一実施形態では、第1及び第2の特定の閾値は、有意な数のFlashファイルを検証し、悪意あると不当に検出されたファイルの特性を特定することにより、決定される。
【0040】
ファイルを悪意あるとする特定がシェルコード文字列の検出によるものでない場合(ブロック605の“No”分岐)、特定は、バイトコード内のキー命令の繰り返しの検出によるものである。この場合、工程は進行して、関与するエクスプロイテーション方法がJITスプレーであったかを判定する(ブロック630)。これは、キー命令の繰り返しを検証することによって行われてよい。繰り返されるキー命令がbitxor、bitor又はinである場合、悪意あるメソッドがJITスプレーであると特定されてよい。他の特定のキー命令がJITスプレーを示してもよい。エクスプロイテーション方法がJITスプレーとして特定されない場合(ブロック630の“No”分岐)、工程は、Flashファイルのサイズが特定の数N1以上であるかを判定する(ブロック640)。FlashファイルのサイズがN1よりも小さい場合(ブロック640の“No”分岐)、工程は、ファイルのサイズが第2の特定の数N2以上であるかを判定する(ブロック645)。一実施形態では、N1は1MBであり、N2は512KBである。他の数が採用されてもよい。第1及び第2の特定の閾値と同様に、N1,N2は、有意な数のFlashファイルを検証し、悪意あると不当に検出されたファイルの特性を特定することにより、決定されてよい。FlashファイルのサイズがN2以上である場合(ブロック645の“Yes”分岐)、工程は、コード内に連続する大型のメソッド・ボディが存在するかを判定する(ブロック650)。連続する大型のメソッド・ボディは、所定の数を上回る等しいサイズの複数の連続するメソッド・ボディを意味する。例えば、m_body[100]、m_body[101]及びm_body[150]のサイズが全て1000バイトである場合、これらのメソッド・ボディは連続する大型のメソッド・ボディとして特定される。サイズが等しく所定の数より大きい連続するメソッド・ボディの数は、異なる実施形態では異なってよい。コードが連続する大型のメソッド・ボディを含まない場合(ブロック650の“Yes”分岐)、ファイルは悪意あると不当に特定されており(ブロック620)、特定は無視することができる。コード内に連続する大型のメソッド・ボディが存在しない場合(ブロック650の“No”分岐)、悪意ある検出は正しく、保持される(ブロック625)。
【0041】
FlashファイルのサイズがN1以上であると判定された場合(ブロック640の“Yes”分岐)、工程は、ファイルが連続する大型のメソッド・ボディを含むかを判定する。含むと判定された場合(ブロック660の“Yes”分岐)、工程はブロック645に移行し、上述のステップに従う。この段階で連続する大型のメソッド・ボディが検出されなかった場合(ブロック660の“No”分岐)、工程は、メソッド・ボディ・カウントが数Mよりも大きいかを判定する(ブロック665)。一実施形態では、数Mは8000に等しい。数Mは異なってよく、有意な数のFlashファイルを検証し、悪意あると不当に検出されたファイルの特性を特定することにより、決定されてよい。メソッド・ボディ・カウントがMよりも大きい場合(ブロック665の“Yes”分岐)、ファイルは悪意あると不当に判定されている(ブロック620)。メソッド・ボディ・カウントがMよりも小さい場合、工程は再びブロック645に移行する。
【0042】
工程600の間、検出された悪意あるエクスプロイテーションがJITスプレーであると判定された場合(ブロック630の“Yes”分岐)、工程は
図6Bのブロック675に進み(ブロック670)、誤検出が検出されたかを判定する。JITスプレーエクスプロイテーションについて、工程は、コードが連続する大型のメソッド・ボディを含むかを判定する(ブロック675)。JITスプレーエクスプロイテーションをふくむFlashファイルが連続する大型のメソッド・ボディを含む場合(ブロック675の“Yes”分岐)、検出は真陽性であり、保持される(ブロック680)。コードが連続する大型のメソッド・ボディを含まない場合(ブロック675の“No”分岐)、メソッド・ボディ・カウントが特定の数Sよりも大きいかが判定される(ブロック685)。一実施形態では、数Sは10000に等しい。Mと同様に、Sは、有意な数のFlashファイルを検証し、悪意あると不当に検出されたファイルの特性を特定することにより、決定されてよい。メソッド・ボディ・カウントがSよりも大きい場合(ブロック685の“Yes”分岐)、ファイルは悪意あると不当に判定されており、特定は無視される(ブロック690)。メソッド・ボディ・カウントがSよりも小さい場合(ブロック685の“No”分岐)、工程は、ファイル内に1以上の特定の特殊タグが存在するかを判定する。存在すると判定された場合(ブロック695の“Yes”分岐)、悪意ある検出が誤検出であったことを示す(ブロック690)。一実施形態では、特殊タグはDefineSound及びDefineShape3である。なぜなら、一般に、悪意あるFlashファイルはサウンドデータを含まないからである。特殊タグが存在しない場合、ファイルは真陽性である(ブロック680)。
【0043】
本明細書に開示される実施形態はFlashファイルに関して説明されるが、これらの実施形態又はそれらの変形は他の種類のマルチメディアファイルでも採用されてよい。特に、実施形態は、バイトコードベースのマルチメディアファイル及び/又はFlashファイルの定数プールテーブルに類似するアレイ若しくはテーブルを含むマルチメディアファイルにおいて採用されてよい。例えば、実施形態は、いくつかのJAVAクラスファイルにおいて採用されてよい(“JAVA”はオラクル社の登録商標である)。
【0044】
例
以下の例は更なる実施形態に関連する。例1は、命令が記憶された少なくとも1つのコンピューター可読記憶媒体である。命令は実行されると、プログラマブル素子に、マルチメディアファイル内の命令を所定の命令のリストとマッチするステップと、マルチメディアファイル内のマッチされた命令の繰り返しを特定するステップと、命令の繰り返し間の距離を計算するステップと、命令の等距離の繰り返しに応答して、マルチメディアファイルを悪意あると特定するステップと、を実行させる。
【0045】
例2は例1の主題を含む。更に、マルチメディアファイルを悪意あるとする誤検出特定を除外する命令を含む。
【0046】
例3は例1の主題を含む。更に、マルチメディアファイル内のタグの長さが第1の所定の閾値以上である場合、悪意あると不当に特定されたものとしてファイルを認識する命令を含む。
【0047】
例4は例1の主題を含む。更に、マルチメディアファイルのメソッド・ボディ・カウントが第2の所定の閾値以上である場合、悪意あると不当に特定されたものとしてファイルを認識する命令を含む。
【0048】
例5は例1の主題を含む。更に、マルチメディアファイルの、定数を保存する1以上のデータ構造内の1以上の文字列を検証するステップと、1以上の文字列のいずれかがシェルコードを示すものとしてシェルコードロジックによって特定された場合、マルチメディアファイルを悪意あると特定するステップと、を1以上のプロセッサに実行させる命令を含む。
【0049】
例6は例5の主題を含む。シェルコードロジックはシェルコードデータベースを備える。
【0050】
例7は例6の主題を含む。更に、1以上の文字列の少なくとも1つが、シェルコードデータベース内の1以上の特定された文字列のうち1つとマッチする場合、マルチメディアファイルを悪意ある文字列を含むと特定するステップ、を1以上のプロセッサに実行させる命令を含む。
【0051】
例8は例1〜7のいずれかの主題を含む。繰り返しの最小数が等距離である場合、マルチメディアファイルは悪意あると特定される。
【0052】
例9は例1〜7のいずれか主題を含む。命令はバイトコード命令を含む。
【0053】
例10は、マルチメディアファイルの分析を行うように構成された装置である。本装置は、メモリ手段と、前記メモリ手段に通信可能に結合される処理手段とを備える。メモリ手段は、1以上のマルチメディアファイルを受信するステップと、受信されたマルチメディアファイルの各々について、定数を記憶する1以上のデータ構造のコンテンツを検証するステップと、1以上のデータ構造内の1以上の文字列がシェルコードを示すものとしてシェルコードロジックによって特定された場合、前記マルチメディアファイルを悪意あると特定するステップと、を処理手段に実行させる命令を記憶する。
【0054】
例11は例10の主題を含む。命令は更に、マルチメディアファイル内の命令を、所定の命令のリストとマッチするステップと、マルチメディアファイル内のマッチされた命令の繰り返しを特定するステップと、マッチされた命令の繰り返し間の距離を計算するステップと、マッチされた命令の等距離の繰り返しに応答して、マルチメディアファイルを悪意あると特定するステップと、を処理手段に実行させる。
【0055】
例12は例11の主題を含む。繰り返しの最小数が等距離である場合、マルチメディアファイルは悪意あると特定される。
【0056】
例13は例11の主題を含む。繰り返しの2以上が等距離である場合、マルチメディアファイルは悪意あると特定される。
【0057】
例14は例11の主題を含む。命令は更に、ファイルが悪意あると不当に特定されたかを判定するステップ、を処理手段に実行させる。
【0058】
例15は例11の主題を含む。マッチされた命令はバイトコード命令を含む。
【0059】
例16は例15の主題を含む。更に、マルチメディアファイル内のタグの長さが第1の所定の閾値以上である場合、悪意あると不当に特定されたものとしてファイルを認識するステップ、を処理手段に実行させる命令を含む。
【0060】
例17は例15の主題を含む。命令は更に、マルチメディアファイルのメソッド・ボディ・カウントが第2の所定の閾値以上である場合、悪意あると不当に特定されたものとしてファイルを認識するステップ、を処理手段に実行させる。
【0061】
例18は例15の主題を含む。更に、コードがジャスト・イン・タイムのスプレーエクスプロイテーションを含むと判定された場合、コードが1以上の連続した大型のメソッド・ボディを含むかを判定するステップと、コードが1以上の連続した大型のメソッド・ボディを含まないと判定され、且つ、メソッド・ボディ・カウントが所定の閾値よりも大きい場合、マルチメディアファイルが悪意あると不当に特定されたと認識するステップと、を1以上処理手段に実行させる命令を含む。
【0062】
例19は、マルチメディアファイル内の命令を、所定の命令のリストとマッチするステップと、マルチメディアファイル内のマッチされた命令の繰り返しを特定するステップと、マッチされた命令の繰り返し間の距離を計算するステップと、マッチされた命令の等距離の繰り返しに応答して、マルチメディアファイルを悪意あると特定するステップと、を含む方法である。
【0063】
例20は例19の主題を含む。更に、マルチメディアファイルの、定数を保存する1以上のデータ構造内の1以上の文字列のいずれかが、シェルコードを示すものとしてシェルコードロジックによって特定された場合、マルチメディアファイルを悪意あると特定するステップ、を含む。
【0064】
例21は例20の主題を含む。更に、マルチメディアファイルを悪意あるとする誤検出特定を除外するステップを含む。
【0065】
例22は例21の主題を含む。更に、コードがジャスト・イン・タイムのスプレーエクスプロイテーションを含むと判定された場合、コードが1以上の連続した大型のメソッド・ボディを含むかを判定するステップと、コードが1以上の連続した大型のメソッド・ボディを含まないと判定され、且つ、メソッド・ボディ・カウントが所定の閾値よりも大きい場合、マルチメディアファイルが悪意あると不当に特定されたと認識するステップと、を含む。
【0066】
例23は例21の主題を含む。更に、コードがジャスト・イン・タイムのスプレーエクスプロイテーションを含むと判定された場合、コードが1以上の連続した大型のメソッド・ボディを含むかを判定するステップと、コードが1以上の連続した大型のメソッド・ボディを含まないと判定され、且つ、マルチメディアファイルが1以上の特殊タグを含む場合、マルチメディアファイルが悪意あると不当に特定されたと認識するステップと、を含む。
【0067】
例24は例19の主題を含む。更に、繰り返しの最小数が等距離である場合、マルチメディアファイルを悪意あると特定するステップを含む。
【0068】
例25は例19の主題を含む。命令はバイトコード命令を含む。
【0069】
例26はマルチメディアファイルの分析を行うように構成された装置を含む。本装置は、メモリと、メモリに通信可能に結合される1以上の処理ユニットとを備える。メモリは、1以上のマルチメディアファイルを受信するステップと、受信されたマルチメディアファイルの各々について、定数を記憶する1以上のデータ構造のコンテンツを検証するステップと、1以上のデータ構造内の1以上の文字列がシェルコードを示すものとしてシェルコードロジックによって特定される場合、マルチメディアファイルを悪意あると特定するステップと、を1以上の処理ユニットに実行させる命令を記憶する。
【0070】
例27は例26の主題を含む。命令は更に、マルチメディアファイル内の命令を、所定の命令のリストとマッチするステップと、マルチメディアファイル内のマッチされた命令の繰り返しを特定するステップと、マッチされた命令の繰り返し間の距離を計算するステップと、マッチされた命令の等距離の繰り返しに応答して、マルチメディアファイルを悪意あると特定するステップと、を1以上の処理ユニットに実行させる。
【0071】
例28は例27の主題を含む。繰り返しの最小数が等距離である場合、マルチメディアファイルは悪意あると特定される。
【0072】
例29は例27の主題を含む。繰り返しの2以上が等距離である場合、マルチメディアファイルは悪意あると特定される。
【0073】
例30は例27の主題を含む。命令は更に、ファイルが悪意あると不当に特定されたかを判定するステップ、を1以上の処理ユニットに実行させる。
【0074】
例31は例30の主題を含む。更に、バイトコードがジャスト・イン・タイムのスプレーエクスプロイテーションを含むと判定された場合、マルチメディアファイルのバイトコードが1以上の連続した大型のメソッド・ボディを含むかを判定するステップと、バイトコードが1以上の連続した大型のメソッド・ボディを含まないと判定され、且つ、メソッド・ボディ・カウントが所定の閾値よりも大きい場合、マルチメディアファイルが悪意あると不当に特定されたと認識するステップと、を1以上の処理手段に実行させる命令を含む。
【0075】
例32は例26の主題を含む。命令は更に、ファイルが悪意あると不当に特定されたかを判定するステップ、を1以上の処理ユニットに実行させる。
【0076】
例33は例32の主題を含む。更に、マルチメディアファイル内のタグの長さが第1の所定の閾値以上である場合、悪意あると不当に特定されたものとしてファイルを認識するステップ、を1以上の処理ユニットに実行させる命令を含む。
【0077】
例34は例32の主題を含む。命令は更に、マルチメディアファイルのメソッド・ボディ・カウントが第2の所定の閾値以上である場合、悪意あると不当に特定されたものとしてファイルを認識するステップ、を1以上の処理ユニットに実行させる。
【0078】
例35は例26の主題を含む。更に、1以上の文字列の少なくとも1つが、シェルコードロジック内の1以上の特定された文字列のうち1つとマッチする場合、マルチメディアファイルを悪意ある文字列を含むと特定するステップ、を1以上の処理ユニットに実行させる命令を含む。
【0079】
例36は例26の主題を含む。シェルコードロジックはシェルコードデータベースを備える。
【0080】
例37はコードを備える機械可読媒体を含む。コードは、実行されると、例19、20、21、22、23、24、25のいずれか1つの方法を機械に実行させる。
【0081】
例38は、メモリ手段と、1以上の処理手段と、コンピューター実行可能命令が記憶されたコンピューター可読記憶媒体とを備える装置を含む。命令は、1以上の処理手段に、マルチメディアファイル内の命令を、所定の命令のリストとマッチするステップと、マルチメディアファイル内のマッチされた命令の繰り返しを特定するステップと、マッチされた命令の繰り返し間の距離を計算するステップと、マッチされた命令の等距離の繰り返しに応答して、マルチメディアファイルを悪意あると特定するステップと、を実行させる。
【0082】
例39は例38の主題を含む。命令は更に、マルチメディアファイルの、定数を記憶する1以上のデータ構造内の1以上の文字列を検証するステップと、1以上の文字列のいずれかがシェルコードを示すものとしてシェルコードロジックによって特定された場合、マルチメディアファイルを悪意あると特定するステップと、を1以上の処理手段に実行させる。
【0083】
例40は例39の主題を含む。命令は更に、1以上の文字列の少なくとも1つがシェルコードロジック内の1以上の特定された文字列のうち1つとマッチする場合、マルチメディアファイルを悪意ある文字列を含むと特定するステップ、を1以上の処理手段に実行させる。
【0084】
例41は例40の主題を含む。シェルコードロジックはシェルコードデータベースを備える。
【0085】
例42は例38の主題を含む。繰り返しの最小数が等距離である場合、マルチメディアファイルは悪意あると特定される。
【0086】
例43は例38の主題を含む。更に、マルチメディアファイルを悪意あるとする誤検出特定を除外する命令を含む。
【0087】
例44は、マルチメディアファイルの分析を行うように構成されるネットワーク装置を含む。装置は、1以上のプロセッサと、1以上のプロセッサに通信可能に結合されるメモリと、を備える。メモリは、1以上のプロセッサに、1以上のマルチメディアファイルを受信するステップと、受信されたマルチメディアファイルの各々について、定数を記憶する1以上のデータ構造のコンテンツを検証するステップと、1以上のデータ構造内の1以上の文字列がシェルコードを示すものとしてシェルコードロジックによって特定された場合、マルチメディアファイルを悪意あると特定するステップと、を実行させる命令を記憶する。
【0088】
例45は例44の主題を含む。命令は更に、マルチメディアファイル内の命令を、所定の命令のリストとマッチするステップと、マルチメディアファイル内のマッチされた命令の繰り返しを特定するステップと、マッチされた命令の繰り返し間の距離を計算するステップと、マッチされた命令の等距離の繰り返しに応答して、マルチメディアファイルを悪意あると特定するステップと、を1以上のプロセッサに実行させる。
【0089】
例46は例45の主題を含む。繰り返しの最小数が等距離である場合、マルチメディアファイルは悪意あると特定される。
【0090】
例47は例45の主題を含む。繰り返しの2以上が等距離である場合、マルチメディアファイルは悪意あると特定される。
【0091】
例48は例45の主題を含む。命令は更に、ファイルが悪意あると不当に特定されたかを判定するステップ、を1以上のプロセッサに実行させる。
【0092】
例49は例44の主題を含む。命令は更に、ファイルが悪意あると不当に特定されたかを判定するステップ、を処理手段に実行させる。
【0093】
例50は例49の主題を含む。更に、マルチメディアファイル内のタグの長さが第1の所定の閾値以上である場合、悪意あると不当に特定されたものとしてファイルを認識するステップ、を処理手段に実行させる命令を含む。
【0094】
例51は例49の主題を含む。命令は更に、マルチメディアファイルのメソッド・ボディ・カウントが第2の所定の閾値以上である場合、悪意あると不当に特定されたものとしてファイルを認識するステップ、を1以上のプロセッサに実行させる。
【0095】
例52は例49の主題を含む。更に、バイトコードがジャスト・イン・タイムのスプレーエクスプロイテーションを含むと判定された場合、マルチメディアファイルのバイトコードが1以上の連続した大型のメソッド・ボディを含むかを判定するステップと、バイトコードが1以上の連続した大型のメソッド・ボディを含まないと判定され、且つ、メソッド・ボディ・カウントが所定の閾値よりも大きい場合、マルチメディアファイルが悪意あると不当に特定されたと認識するステップと、を1以上のプロセッサに実行させる命令を含む。
【0096】
上述の説明では、説明の目的上、開示の実施形態の完全な理解を提供するために、多くの特定の詳細を記載した。しかしながら、当業者には明らかであるように、開示の実施形態はそれらの特定の詳細を伴わずに実施されてよい。他の例では、開示の実施形態が曖昧になるのを避けるために、構造及び装置をブロック図の形で示している。下付き文字又は添え字のない番号の参照は、参照符号に対応する下付き文字及び添え字の全ての例に言及すると理解される。更に、本開示で用いられる言語は、主に、読みやすさと教示を目的として選択されており、発明の主題を説明又は制限したり、係る発明の主題の決定に必要な特許請求の範囲に訴えたりするために選択されていない。本明細書において「一実施形態」又は「実施形態」という場合、該実施形態に関連して記載される特定の特徴、構造又は特性が、少なくとも1つの開示の実施形態に含まれることを意味する。「一実施形態」又は「実施形態」と複数回いう場合、必ずしも全てが同じ実施形態に言及しないと理解されたい。
【0097】
また、当然ながら、上記の記載は説明を意図しており、限定的ではない。例えば、上述の実施形態は互いに組み合わせて採用されてよく、例示のプロセス動作は図示の順序と異なる順序で実行されてよい。当業者であれば、上記を検証すれば多くの他の実施形態が明らかになるであろう。したがって、本発明の範囲は、添付の特許請求の範囲と、特許請求の範囲が権利をもつ均等物の全範囲とを参照して決定される。添付の特許請求の範囲において、“including”,“in which”という表現は、それぞれ“comprising”,“wherein”という表現の平易な英語の均等物である。