(57)【特許請求の範囲】
【請求項１】
データセットにアクセスするステップと、
事前定義された変換アルゴリズムに従って、前記データセットをバイナリ・データセットに変換するステップと、
前記バイナリ・データセットにおける１つまたは複数のサイクルを特定するステップと、
特定された１つまたは複数の前記サイクルに対して統計分析を行うステップと、
行われた前記統計分析に基づいて、前記データセットの組が悪質なソフトウェア・コードを含むと判定するステップと
を有するコンピュータで実行される方法。
【請求項２】
前記データセットが悪質なソフトウェア・コードを含むと判定するステップは、
行われた前記統計分析の結果を、悪質なソフトウェア・コードのプロファイル内の格納された値と比較するステップと、
行われた前記統計分析の結果が、前記悪質なソフトウェア・コードのプロファイル内の格納された値の所定の閾値内である場合に、前記データセットが悪質なソフトウェア・コードを含むと判定するステップと
を含む請求項１に記載のコンピュータで実行される方法。
【請求項３】
事前定義された前記変換アルゴリズムが、文字を「０」に変換することと、数字を「１」に変換することとを含む請求項１に記載のコンピュータで実行される方法。
【請求項４】
前記統計分析を行うステップは、最長連続サイクル部分文字列長、文字列あたりの分離した連続サイクル数量、文字列あたりのサイクルの数量、および最長連続サイクル部分文字列長／文字列全長のうちの少なくとも１つを計算することを含む請求項１に記載のコンピュータで実行される方法。
【請求項５】
前記悪質なソフトウェア・コードが、値配列難読化ソフトウェア・コードである請求項１に記載のコンピュータで実行される方法。
【請求項６】
命令の組を格納するメモリと、
格納された前記命令の組を実行するプロセッサと
を備え、
前記プロセッサは、
データセットにアクセスするステップと、
事前定義された変換アルゴリズムに従って、前記データセットをバイナリ・データセットに変換するステップと、
前記バイナリ・データセットにおける１つまたは複数のサイクルを特定するステップと、
特定された１つまたは複数の前記サイクルに対して統計分析を行うステップと、
行われた前記統計分析に基づいて、前記データセットの組が悪質なソフトウェア・コードを含むと判定するステップと
を含む方法を実行する、装置。
【請求項７】
前記データセットが悪質なソフトウェア・コードを含むと判定するステップは、
行われた前記統計分析の結果を、悪質なソフトウェア・コードのプロファイル内の格納された値と比較するステップと、
行われた前記統計分析の結果が、前記悪質なソフトウェア・コードのプロファイル内の格納された値の所定の閾値内である場合に、前記データセットが悪質なソフトウェア・コードを含むと判定するステップと
を含む、請求項６に記載の装置。
【請求項８】
事前定義された前記変換アルゴリズムが、文字を「０」に変換することと、数字を「１」に変換することとを含む、請求項６に記載の装置。
【請求項９】
前記統計分析を行うステップが、最長連続サイクル部分文字列長、文字列あたりの分離した連続サイクル数量、文字列あたりのサイクルの数量、および最長連続サイクル部分文字列長／文字列全長のうちの少なくとも１つを計算することを含む、請求項６に記載の装置。
【請求項１０】
前記悪質なソフトウェア・コードが、値配列難読化ソフトウェア・コードである、請求項６に記載の装置。
【請求項１１】
データセットにアクセスするステップと、
事前定義された変換アルゴリズムに従って、前記データセットをバイナリ・データセットに変換するステップと、
前記バイナリ・データセットにおける１つまたは複数のサイクルを特定するステップと、
特定された１つまたは複数の前記サイクルに対して統計分析を行うステップと、
行われた前記統計分析に基づいて、前記データセットの組が悪質なソフトウェア・コードを含むと判定するステップと
を含む方法を、プロセッサにより実行された場合に、前記プロセッサに実行させる命令の組を含む、非一時的コンピュータ可読記憶媒体。
【請求項１２】
前記データセットが悪質なソフトウェア・コードを含むと判定するステップは、
行われた前記統計分析の結果を、悪質なソフトウェア・コードのプロファイル内の格納された値と比較するステップと、
行われた前記統計分析の結果が、前記悪質なソフトウェア・コードのプロファイル内の格納された値の所定の閾値内である場合に、前記データセットが悪質なソフトウェア・コードを含むと判定するステップと
を含む、請求項１１に記載の非一時的コンピュータ可読記憶媒体。
【請求項１３】
事前定義された前記変換アルゴリズムが、文字を「０」に変換することと、数字を「１」に変換することとを含む、請求項１１に記載の非一時的コンピュータ可読記憶媒体。
【請求項１４】
統計分析を行うステップが、最長連続サイクル部分文字列長、文字列あたりの分離した連続サイクル数量、文字列あたりのサイクルの数量、および最長連続サイクル部分文字列長／文字列全長のうちの少なくとも１つを計算することを含む、請求項１１に記載の非一時的コンピュータ可読記憶媒体。
【請求項１５】
前記悪質なソフトウェア・コードが、値配列難読化ソフトウェア・コードである、請求項１１に記載の非一時的コンピュータ可読記憶媒体。
【請求項１６】
前記データセットの組が悪質なソフトウェア・コードを含むと判定するステップが、選択された感度レベルに基づく、請求項１１に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、悪質なコードの検出に関するものである。
【背景技術】
【０００２】
コンピュータのネットワーク化の成長と共に、「マルウェア攻撃」と一般的に呼ばれる、悪質ソフトウェア攻撃の数が爆発的に増加した。悪質ソフトウェア（ｍａｌｉｃｉｏｕｓ  ｓｏｆｔｗａｒｅ）の短縮である「マルウェア」とは、敵対または侵入の目的で設計されるソフトウェアである。たとえば、マルウェアは、情報を収集し、操作を拒否または妨害し、認証なしでリソースにアクセスする意図で、または他の不正な目的で設計され得る。マルウェア攻撃の種類には、ウィルス攻撃、ワーム攻撃、トロイの木馬攻撃、スパイウェア攻撃、アドウェア攻撃、ボットネット攻撃、ルートキット攻撃、およびサービス妨害攻撃（ＤＤＯＳ）があり得る。マルウェア開発者は典型的には、彼らのソフトウェアをインターネットで、多くの場合、内密に配布する。インターネット利用は世界中で広がり続けるので、マルウェア開発者は、このソフトウェアをリリースする動機がこれまで以上に高まっている。
【０００３】
マルウェアは、ブラウザの脆弱性を悪用する悪質なウェブページと通信しながらブラウザを実行しているコンピュータにインストールされることが多い。これらの悪質なウェブページは、「エクスプロイト」または「エクスプロイト・キット」を用いて、攻撃者が選択した実行可能プログラムを訪問者のコンピュータにユーザからの操作なしでダウンロードし起動することができる。すなわち、ブラウザまたは自動起動される外部プログラムおよび拡張機能の欠陥により、ユーザが悪質なウェブページを訪問した際に、ユーザがインストールに気づかないように、悪質なウェブページがマルウェアを自動的にインストールすることを許してしまう可能性がある。エクスプロイト・キットの例には、ブラックホールおよびインコグニート（Ｉｎｃｏｇｎｉｔｏ）・エクスプロイト・キットがある。これらのキットは、エクスプロイト・キットのインストールを捜索するアンチウィルス・エンジンおよびウェブ・クローラからエクスプロイト・コードを隠蔽するための難読化ルーチンを利用する。
【０００４】
多くの場合、ユーザによりアクセスされるウェブページは、悪質なウェブページを参照するように侵入された「無実の」ウェブページである。攻撃者は、彼らの悪質なウェブページにトラフィックを送るために「無実の」ウェブページに侵入し、この悪質なウェブページは、悪質な実行可能ファイルまたはブラウザ・エクスプロイト・コードなどの悪質なコードをホストするために用いられる。攻撃者は、ハイパーテキスト・マークアップ言語（「ＨＴＭＬ」）コードを無実のウェブページに注入する方法を発見し、これにより、訪問者のブラウザは、訪問者に知らせずに悪質なウェブページにコンテンツを要求し処理することになる。
【０００５】
マルウェアの伝播により、たとえばシステム・ユーザ・タイム、システム管理者リソース、ネットワーク帯域幅、ディスク領域、および中央処理装置（「ＣＰＵ」）サイクルなどの貴重なリソースが浪費される。マルウェアは、原本が修復不可能となるように、データファイルを崩壊させることもある。加えて、マルウェアは、侵入したコンピュータに機密データ（たとえば、銀行情報、パスワードなど）をマルウェア攻撃者に送信させることもある。
【発明の概要】
【課題を解決するための手段】
【０００６】
本開示のいくつかの例と一致して、データセットにアクセスし、事前定義された変換アルゴリズムに従って、データセットをバイナリ・データセットに変換し、バイナリ・データセットにおける１つまたは複数のサイクルを特定し、特定された１つまたは複数のサイクルに対して統計分析を行い、行われた統計分析に基づいて、データセットの組が悪質なソフトウェア・コードを含むと判定するための、コンピュータで実行される方法、装置、および命令の組を格納する非一時的コンピュータ可読記憶媒体が提供される。
【０００７】
また、本開示のいくつかの例と一致して、データセットが悪質なソフトウェア・コードを含むと判定することは、行われた統計分析の結果を、悪質なソフトウェア・コードのプロファイル内の格納された値と比較することと、行われた統計分析の結果が、悪質なソフトウェア・コードのプロファイル内の格納された値の所定の閾値内である場合に、データセットが悪質なソフトウェア・コードを含むと判定することとを含む。
【０００８】
また、本開示のいくつかの例と一致して、事前定義された変換アルゴリズムは、文字を「０」に変換することと、数字を「１」に変換することとを含む。
【０００９】
また、本開示のいくつかの例と一致して、統計分析を行うことは、最長連続サイクル部分文字列長、文字列あたりの分離した連続サイクル数量、および文字列あたりのサイクルの数量のうちの少なくとも１つを計算することを含む。
【００１０】
また、本開示のいくつかの例と一致して、悪質なソフトウェア・コードは、ブラックホール・エクスプロイト・キットである。
【００１１】
本開示の少なくとも１つの実施形態を詳細に説明する前に、本開示は、その用途が以下の説明に記載するまたは図面に示す構造の細部および配置に限定されないことを理解されたい。本開示は、記載したものに加えた実施形態が可能であり、様々な方法で実施し実行することが可能である。また、本明細書ならびに要約書で用いられる表現および専門用語は、説明のためのものであり、限定とみなされるべきではないことを理解されたい。
【００１２】
添付の図面は、本明細書に組み込まれ、その一部を構成するものであり、本開示の特定の実施形態を例示し、記述と共に、本開示の原理を説明するのに役立つものである。
【００１３】
したがって、本開示が基づく概念を、本開示のいくつかの目的を遂行するために他の構造、方法、および／またはシステムを設計するための基礎として容易に利用できることを当業者は理解するだろう。それゆえ、特許請求の範囲が、本開示の趣旨および範囲から逸脱しない限りにおいてそのような均等な構造を含むものとみなされるべきであることを認識するのは重要である。
【図面の簡単な説明】
【００１４】
【図１】本開示のいくつかの例による、システム環境を示す図である。
【図２】本開示のいくつかの例による、コンピューティング・デバイスの一例を示す図である。
【図３】本開示のいくつかの例による、データセットがマルウェアを含むか判定するためのフロー図である。
【図４Ａ】本開示のいくつかの例による、値配列難読化（ｖａｌｕｅ−ａｒｒａｙ  ｏｂｆｕｓｃａｔｉｏｎ）データセットの一例を示す図である。
【図４Ｂ】本開示のいくつかの例による、数字を強調したデータセットの一例を示す図である。
【図４Ｃ】本開示のいくつかの例による、変換されたデータセットの一例を示す図である。
【図４Ｄ】本開示のいくつかの例による、データセットにおけるサイクルの一例を示す図である。
【図５】開示した実施形態を実現するためのコンピュータ・システムの一例を示す図である。
【発明を実施するための形態】
【００１５】
本開示の本実施形態への参照を詳細に行うことにし、本開示の特定の例を添付の図面に示す。
【００１６】
エクスプロイト・キット、たとえば上記のブラックホールおよびインコグニート・エクスプロイト・キットは、難読化ルーチンまたはアルゴリズムを用いてこれらのキットをソフトウェアに埋め込む。本明細書で論じる難読化ルーチンの一例には、値配列難読化がある。値配列難読化ルーチンでは、難読化されるコードの各バイトは、セパレータ付きの大きなデータ配列に符号化される。たとえば、整数の配列をＪａｖａＳｃｒｉｐｔ（登録商標）で定義することができ、ここでＳｔｒｉｎｇ．ｆｒｏｍＣｈａｒＣｏｄｅ（）は、以下の例１に示すように、各整数を文字へ簡単に変換する。
【００１７】
【表１】
0006505533.tif 000002
【００１８】
他の例では、以下の例２に示すように、例えば、文字、数字、および区切り記号（ｐｕｎｃｔｕａｔｉｏｎ）の長い文字列により、非表示ＤＩＶ要素が埋められる。
【００１９】
【表２】
0006505533.tif 000003
【００２０】
ループが配列の各要素に対して反復され、Ｓｔｒｉｎｇ．ｓｐｌｉｔ（）呼び出しを最初に含むことがあり、次いで、復号したデータを新しい文字列に追加し、この文字列は後でｅｖａｌ（）に渡される。
【００２１】
これらのキットは、難読化ルーチンの多形性質のため、単純な部分文字列一致または適度に複雑な正規表現すら用いても、簡単に検出されないことがある。これに対処するため、本明細書で論じるように、難読化コードは、変換技法、たとえば文字変換技法または変換アルゴリズムを用いて検出することができる。統計分析を、変換されたデータにおいて特定されたサイクルに対して行うことができる。少なくともいくつかのエクスプロイト・キットを含む変換されたデータは、特定の統計的属性が関連付けられる。したがって、エクスプロイト・キットは、本明細書で論じる原理に従って、特定することができる。
【００２２】
本明細書で論じるように、データセットにアクセスし、事前定義された変換アルゴリズムに従ってバイナリ・データセットに変換することができる。１つまたは複数のサイクルを、バイナリ・データセット内で特定することができる。統計分析を、特定された１つまたは複数のサイクルに対して行うことができる。データセットにおける悪質なソフトウェア・コードを、行われた統計分析に基づいて特定することができる。
【００２３】
１つまたは複数の例によるシステム１００を、図１に示す。システム１００は、悪質コード検出部１０４を含むコンピューティング・デバイス１０２と、コンテンツを格納する複数のサーバ１０８、１１０とを含むことができる。サーバ１０８、１１０を、ネットワーク１０６を介して通信可能に接続することができる。コンピューティング・デバイス１０２およびサーバ１０８、１１０は、サーバ、メインフレーム・コンピューティング・デバイス、これらの構成要素の任意の組合せ、または任意の他の適切なコンピューティング・デバイス、リソース・サービス、たとえばクラウドなどとして実装することができる。ネットワーク１０６は、１つまたは複数の直接通信リンク、ローカル・エリア・ネットワーク（ＬＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、または任意の他の適切な接続を含むことができる。ネットワーク１０６は、インターネットを含むこともできる。
【００２４】
悪質コード検出部１０４は、コンテンツを分析して悪質なコードを検出するための、メモリ（図示せず）に接続された１つまたは複数のプロセッサ（図示せず）を含むコンピューティング・デバイス上で実行される１つまたは複数のアプリケーションとすることができる。プロセッサは、たとえば、カリフォルニア州サンタクララのインテル社製のＰｅｎｔｉｕｍ（登録商標）プロセッサなどの汎用マイクロプロセッサ、特定の例による方法の少なくとも一部をそのハードウェアおよびファームウェアに具現化する特定用途向け集積回路、モバイルデバイスプロセッサ、これらの組合せなどを含むことができる。メモリは、電子情報を格納可能な任意のデバイス、たとえばＲＡＭ、フラッシュメモリ、ハードディスク、内部または外部のデータベースなどとすることができる。メモリは、特定の実施形態による方法の少なくとも一部を実施するための、プロセッサにより実行されるように構成された命令を格納するための非一時的記憶媒体として実装することができる。たとえば、メモリは、本明細書で論じる他の機能に加えて悪質なコードを検出するための、プロセッサ上で実行されるように構成されたコンピュータ可読命令または機械可読命令などのコンピュータ・プログラム命令を格納することができる。
【００２５】
図１に示す例では、悪質コード検出部１０４は、コンピューティング・デバイス１０２により提供されている。他の例では、悪質コード検出部は、サーバ１０８、１１０、および／または、システム環境１００に図示しない他のデバイスにより提供されてもよい。
【００２６】
図１に示す例では、コンピューティング・デバイス１０２は、サーバ１０８、サーバ１１０、またはシステム環境１００に図示しない他のデバイスからコンテンツにアクセスすることができる。他の例によれば、コンピューティング・デバイス１０２は、システム環境１００内の図示しないローカルまたはリモートの記憶デバイスからコンテンツにアクセスすることができる。
【００２７】
図２に、悪質なコードを検出するためのコンピューティング・デバイス２００のいくつかの構成要素を示す。コンピューティング・デバイス２００は、たとえば、図１のコンピューティング・デバイス１０２として実装することができる。図２に示すように、コンピューティング・デバイス２００は、悪質コード検出部２０２を含む。悪質コード検出部２０２は、データ収集部２０４と、データ処理部２０６と、統計分析部２０８とを含む。データ収集部２０４は、分析して悪質なコードを含むか判定するためのデータの収集を容易にすることができる。データ処理部２０６は、データ収集部２０４により収集されたデータを処理することができる。たとえば、データ処理部２０６は、事前定義された変換アルゴリズムに従ってデータを変換することができる。データ処理部２０６はさらに、変換されたデータ内のサイクルを特定することができる。統計分析部２０８は、変換されたデータ、およびこの中で特定されたサイクルに統計分析を行うことができる。統計分析部２０８はさらに、悪質なコードがデータに含まれるかを判定するために、統計分析の結果を悪質なコードのプロファイルと比較することができる。
【００２８】
コンピューティング・デバイス２００は、悪質コード・プロファイル２０９をさらに含むことができる。悪質コード・プロファイル２０９は、１つまたは複数の悪質なコードに対するプロファイルを格納することができる。これらのプロファイルの各々は、統計的属性に関する厳密値および／または閾値を含むことができる。いくつかの例によれば、複数の閾値を、１つまたは複数の統計的属性に対して、所望の検出感度に基づいて格納することができる。たとえば、より広い閾値範囲を、より高い感度を得るために統計的特性に対して格納することができ、より狭い閾値範囲を、より低い感度を得るために統計的特性に対して格納することができる。統計的特性のいくつかの例については、以下で論じる。悪質コード・プロファイル２０９は、以下でより完全に論じるように、データセットが悪質なコードを含むか判定するために、悪質コード検出部２０２がアクセスすることができる。
【００２９】
コンピューティング・デバイス２００は、プログラム命令の形式の機械可読コードを実行して本明細書で論じる方法を実施するためのプロセッサ２１０をさらに含むことができる。コンピューティング・デバイス２００は、システム環境１００内の他のデバイスとデータを送受信するための送信器／受信器２１２をさらに含むことができる。コンピューティング・デバイス２００は、システム環境１００内の他のデバイスとの通信を容易にするためのネットワーク・インターフェース２１４をさらに含むことができる。
【００３０】
図３に、データが悪質なコードを含むか判定するための処理の一例としてのフロー図を示す。図３に示した処理は、たとえば、図１に示したコンピューティング・デバイス１０２、および図２に示したコンピューティング・デバイス２００により、実施することができる。
【００３１】
図３に示すように、３０２において、データセットにアクセスすることができる。データセットは、ウェブコンテンツを提供するサーバ、ローカルまたはリモートの記憶デバイスなどから、アクセスすることができる。データセットは、たとえば、ハイパーテキスト・マークアップ言語（「ＨＴＭＬ」）、ｊａｖａｓｃｒｉｐｔ（登録商標）、実行可能ファイルなどのフォーマットとすることができる。
【００３２】
３０４において、アクセスされたデータセットを変換することができる。たとえば、データセットは、事前定義された変換アルゴリズムに従って、バイナリ・データセットに変換することができる。事前定義された変換アルゴリズムは、いくつかの例によれば、テキストデータの文字列の全ての項目を「０」または「１」に変換することを含むことができる。たとえば、文字、すなわちアルファベットの文字は「０」に変換することができ、数字は「１」に変換することができ、逆も同様である。変換された文字は、０および１の新しい文字列を形成することができる。
【００３３】
以下は、値配列難読化を含まないデータセット、および変換されたデータセットの例３であり、ここで、事前定義されたアルゴリズムは、文字列の数字を１に変換し、アルファベット文字またはＨＴＭＬの一片を０に変換する。
【００３４】
例３
データセット：
<table id="bran" width="100" style="border:  2px solid black">
変換されたデータセット：
0000000000000000000000001110000000000000000010000000000000000
【００３５】
以下の例４では、値配列難読化を含むデータセットと、変換されたデータセットとを与える。
【００３６】
例４
難読化データセット：
<style>#c118{background:url(data:,13,41.5,26,55,12.5,32.5,28,10,10.5,41.5,17.5,6.5,26.5,22.5,10.5,9.5,23.5,42,25,11,43.5,42,43,11,2.5,52.5,9.5,27,15,15,12.5,36.5,47.5,
変換された難読化データセット：
000000000111000000000000000000000011011010110110110101101011011011010110
10110101010110101101011010101011010110110110110101101101101010110101010110110110110101101011010
【００３７】
例３および例４の２つの変換されたデータセットを比較すると、０および１のパターンが出現している。０の小クラスタに１の小クラスタが続き、繰り返している。これらの０および１の小クラスタはクラスタとなり、複数のサイクルが文字列内で互いに隣接して出現する場合に、連続サイクル（ｃｏｎｔｉｇｕｏｕｓ  ｃｙｃｌｅ）が現れる。サイクルおよび連続サイクルは、正規表現で簡単に検出される。したがって、図３に記載した処理に戻ると、３０６において、１つまたは複数のサイクルを、変換されたデータセットから特定することができる。
【００３８】
本明細書で論じるように、「サイクル」は、変換されたデータセットにおける０および１のパターンの一例とすることができる。「連続サイクル」は、文字列内で互いに隣接する１つまたは複数の同一のサイクルとすることができる。最長連続サイクル部分文字列長（「ＬＣＣＳＬ（ｌｏｎｇｅｓｔ  ｃｏｎｔｉｇｕｏｕｓ  ｃｙｃｌｅ  ｓｕｂｓｔｒｉｎｇ  ｌｅｎｇｔｈ）」）は、変換されたデータに現れる連続サイクルの最長の組の長さとすることができる。ＬＣＣＳＬを用いる１つの目的は、元の未変換の文字列における潜在的な配列状の構造を特定することである。ＬＣＣＳＬの値は、３つの中間形式を介して計算され、各形式は前の形式に基づく：１）０および１。２）０および１のサイクル。ここで、各サイクルは、潜在的な配列における要素およびそのセパレータを表し得る。３）連続して出現するサイクル：連続して現れる要素およびセパレータは、元のデータに現れる配列状の構造を表す。
【００３９】
図３に示すように、３０８において、統計分析を、特定されたサイクルに対して行うことができる。たとえば、以下の統計的属性のうちの１つまたは複数を計算することができる。
ＬＣＣＳＬ  −  テキストのみを含むデータの文字列における、最大数の文字に広がる連続サイクルの長さ、
文字列あたりの分離した連続サイクル数量  −  文字列あたりの分離した連続サイクルの数、
文字列あたりのサイクルの数量  −  文字列あたりのサイクルの数、
ＬＣＣＳＬ／文字列全長、および
ＬＣＣＳＬ／連続部分文字列の数。
【００４０】
他の統計的属性を計算してもよいことは理解されよう。
【００４１】
図３に示すように、３１０において、データセットが悪質なコードを含むか判定することができる。この判定は、計算された統計的属性値を、悪質コード・プロファイル２０９内の対応する格納された統計的属性値と比較することで、行うことができる。この比較は、正確に一致するか、または計算された統計的属性値が所定の閾値に収まるかを判定することでもよい。計算された統計的属性値が一致するか、または１つまたは複数の悪質コード・プロファイルの所定の閾値内である場合、悪質コード検出部２０２は、データセットが悪質なコードを含むと判定することができる。さらに、悪質コード検出部は、一致した悪質コード・プロファイルに基づいて、どの種類の悪質なコードが検出されたかを判定することができる。
【００４２】
いくつかの例によれば、データセットが悪質なコードを含むことを示す警告を生成することができ、この警告は、データセットに含まれていた悪質なコードの種類を特定することができる。この警告は、表示画面に表示する、表示用装置に送信する、ログに記録するなどすることができる。この警告はさらに、一致する閾値レベルに関連付けられた感度のレベルを特定することができる。
【００４３】
悪質コード検出部の感度を、たとえばユーザ・インターフェースにより設定する、デフォルトで設定するなどが可能であることは理解されよう。たとえば、悪質コード検出部は、悪質なコードがデータセットに含まれていると判定するために、１つの統計的属性のみが一致するかまたは所定の閾値内である必要があるように構成することができる。他の例によれば、悪質なコードがデータセットに含まれていると判定するために、２つの統計的属性が一致するかまたは所定の閾値内である必要がある。他の例によれば、悪質なコードがデータセットに含まれていると判定するために、３つの統計的属性が一致するかまたは所定の閾値内である必要がある、といった具合である。
【００４４】
以下は、データセットが悪質なソフトウェア・コードを含むか判定する例である。データセットが悪質なソフトウェア・コードを含むか判定するための処理を説明するのを支援するために、例３として以下に説明する次のコードは、難読化されていないｊａｖａｓｃｒｉｐｔ（登録商標）の一例である：
【００４５】
【表３】
0006505533.tif 000004
【００４６】
このｊａｖａｓｃｒｉｐｔ（登録商標）は、新しいリモート・スクリプト要素をＤＯＭに追加し、ブラウザに、悪質なサーバｇｇ４ｇ．ｅｘａｍｐｌｅ．ｅｅに対するパスｌｏａｄｊ．ｊｓのＧＥＴ要求を行わせる。これはまた、ブラウザに、自身に関するなんらかのフィンガープリント情報を悪質なサーバに渡させる。
【００４７】
図４Ａに、値配列難読化を用いた例３のｊａｖａｓｃｒｉｐｔ（登録商標）の難読化ｊａｖａｓｃｒｉｐｔ（登録商標）注入コードの例示の文字列を示す。値の配列は、非表示ＤＩＶ要素内の＜ｂ＞、＜ｉ＞、および＜ｕ＞要素である。最後のスクリプト要素はこの配列を復号し、隠しｊａｖａｓｃｒｉｐｔ（登録商標）を実行し、隠しｊａｖａｓｃｒｉｐｔ（登録商標）は他のスクリプト要素をＤＯＭに追加し、このスクリプト要素はブラウザに攻撃者のサーバとネットワーク接続を行うように要求する。これはまた、何らかのフィンガープリント情報を犠牲者のブラウザから攻撃者へ送る。
【００４８】
値難読化ルーチンの性質によって、値配列は、多数の寸法（ｄｉｍｅｎｓｉｏｎ）にわたって毎回ランダムに生成され得る。この最小限のランダム化の使用であっても、従来の検出システムは簡単に阻止され得る。
【００４９】
図３に関して上記で論じたように、この文字列は、まず事前定義された変換アルゴリズムを用いてデータセットを変換されたデータセットに変換することで、分析される。この例では、データセットは０および１に変換される：数字（０−９）である文字は１に変換され、その他全ては０に変換される。次いで、単純な状態機械が変換された文字列に対して起動され、サイクルおよび連続サイクルオフセット（ここで、連続サイクルは文字列内に現れる）ならびに長さ情報を同一反復内で抽出する。
【００５０】
図４Ｂに、文字列内の全ての数字に下線が引かれた難読化文字列を示す。変換アルゴリズムによれば、文字列内の数字は１に変換されることになる。
【００５１】
図４Ｃに、図４Ｂで数字が強調された難読化文字列を示す。他の文字の全ては０に変換されている。
【００５２】
図４Ｄに、難読化文字列におけるサイクルおよび連続サイクルを示す。サイクルは＜−−−＞で識別され、連続サイクルは、図４Ｄで下線が引かれているが、単純にサイクルの組であり、この始まりおよび終わりは、太字の＜シンボルおよび＞シンボルで示されている。
【００５３】
統計分析が、特定されたサイクルに対して行われる。統計値は、元の文字列の長さ、発見されたサイクルの配列（およびそれらのそれぞれの長さ）、発見された連続サイクルの配列（それらの長さ、および各々が含むサイクルの数）だけを用いて計算される。図４Ａに示した難読化文字列に対する統計値は以下のようになる。
"avg-cycle-len":  9.746666666666666,"lccsl-to-num-cycles":  6.751111111111111,
"num-cycles":  225,"longest-contig-cycle-to-str-len":  0.5133491044271713,
"longest-contig-cycle":  1519,"avg-contig-cycle-len":  438.6,
"num-cycles-to-str-len":  0.07603920243325447,
"avg-num-cycles-per-contig-cycle":  45.0,
"num-contig-cycles":  5, および
"num-contig-cycles-to-str
len":  0.0016897600540723217.
【００５４】
生成された統計値が既知のマルウェア・サンプルのプロファイルに一致するかを判定するために、統計的属性に対する許容範囲を示すプロファイルの組にアクセスすることができる。この例では、２つのプロファイルにアクセスできる。新スクリプト注入工作（ｉｎｊｅｃｔｉｏｎ  ｃａｍｐａｉｇｎ）用のもの（ａ）と、例示的エクスプロイト・キット用のもの（ｂ）である。プロファイルの各々は、以下のように１つまたは複数の統計的属性を含む。
【００５５】
【表４】
0006505533.tif 000005
【００５６】
【表５】
0006505533.tif 000006
【００５７】
サンプルの難読化文字列から収集された統計値を、アクセスされたプロファイル内の属性に適用して、サンプルが２つのアクセスされたプロファイルのいずれかに一致するかを判定する。
【００５８】
【表６】
0006505533.tif 000007
【００５９】
【表７】
0006505533.tif 000008
【００６０】
この例では、計算された統計値とアクセスされたプロファイル内の対応する属性の範囲との間に一致が存在するためには、統計値は、プロファイルに存在する全ての属性に対して指定された範囲内になくてはならない。この例では、サンプルの値が、注入工作プロファイルに対して指定された範囲内に入るので、一致したとみなされ、例示的エクスプロイト・キットのプロファイルに対しては一致ではなく、これは、１つまたは複数の値が指定範囲内に入らないためである。
【００６１】
本明細書で論じるいくつかの例によれば、より精巧なシステムを、サンプルがプロファイルに一致するかを判定するために用いることができる。たとえば、重みを各キーに付加してもよく、その属性に対するサンプルの値が一致する場合、重みがスコアに加算され、サンプルの値が一致しない場合、重みがスコアから減算される。スコアが正で、ある閾値を超える場合、サンプルは一致したと考えることができる。
【００６２】
本明細書で論じるいくつかの例によれば、所与の属性に対する指定範囲の中心からの距離を用いて、どの程度の重みが加算または減算されるかに影響を与えることができ、これはいくつかの機械学習技法に非常に類似している。
【００６３】
以下は、本明細書で論じる処理が統計的に適切であると結論を下すために行われる検定（ｔｅｓｔｉｎｇ）の説明である。異なるエクスプロイト・キットに対する悪質コード・プロファイルを特定する際に、既知のエクスプロイト・キットを含むデータセットを、上記で論じたように変換し分析した。たとえば、ブラックホール、インコグニート、および、ｓｖｃｇｏｓｔと呼ばれる正体不明のエクスプロイト・キットを含むデータセットを、それらのデータセットに含めた。さらに、ランダムなＵＲＬを訪問した際にリモート・ウェブサーバから送信された多数の文字列を表すランダム・データセットを、上記で論じたように変換し分析した。
【００６４】
表１において、ＬＣＣＳＬを異なるデータセットに関して分析して、文字列内のＬＣＣＳＬがデータセット間で異なるか判定した。以下は、上記で説明した２つのデータセット、ランダムおよびエクスプロイトの間の、文字列あたりのＬＣＣＳＬの比較と、特定のエクスプロイト・キット、すなわちブラックホール、インコグニート、およびｓｖｃｇｏｓｔからの統計値を表す。
【００６５】
【表８】
0006505533.tif 000009
【００６６】
表３の値から分かるように、エクスプロイト・キット・データセットの平均は、ランダム・サンプルの平均と大きく異なる。エクスプロイト・キットにおける平均的なサイクルの長さは、値配列難読化を用いるために、長いと予想される。しかしながら、平均的な文字列は、多数の長い連続サイクルを有するわけではないので、文字変換、または変換アルゴリズムを用いたデータセットの変換を用いてマルウェアを特定することができる。
【００６７】
一般的に、平均的な文字列は、マルウェアなしでは、多数の短い連続サイクルを含むと思われ、というのは、ＨＴＭＬタグが、文字の短いスパンで区切られた数字を含むサイズ属性を含むことが多いためである。しかしながら、長い値配列難読化コードを含む文字列は、マルウェアを含む場合、平均的により少数の連続サイクルを有するはずであり、というのは、寸法および他の数値属性の組を有するＨＴＭＬタグが、おそらくより少数であるためである。
【００６８】
以下の表４は、２つのデータセット、すなわち上述のランダムおよびエクスプロイトの間の、文字列あたりの分離した連続サイクルの数、ならびに、特定のエクスプロイト・キット、すなわちブラックホール、インコグニート、およびｓｖｃｇｏｓｔからの統計値を比較する。
【００６９】
【表９】
0006505533.tif 000010
【００７０】
２つのデータセット、すなわちランダムおよびエクスプロイト・キットの分析は、比較的類似した平均を有していたが、Ｚ検定は、エクスプロイト・キットがランダム文字列よりも、平均した文字列あたりの分離した連続サイクルが多いことを示していた。具体的に、ブラックホール・エクスプロイト・キットをレビューすると、平均した文字列あたりの連続サイクルの部分文字列は、たった１つであった。
【００７１】
連続サイクルだけに、および、平均した文字列あたりのサイクル数だけに注目していたら、エクスプロイト・キットは、平均した文字列あたりのサイクル数がより大きいと予想されただろう。表５は、２つのデータセット間の、文字列あたりのサイクル数を比較する。
【００７２】
【表１０】
0006505533.tif 000011
【００７３】
表５において分かるように、データセット間のサイクル数の違いは大きい。したがって、ブラックホールおよびインコグニートの文字列は、文字列あたりのサイクル数が、平均的な文字列より非常に多い。
【００７４】
追加の統計的属性を、上記の統計的属性を操作することで決定することができる。たとえば、文字列内の分離した連続サイクルの数でＬＣＣＳＬを割ることにより、ブラックホールなどのマルウェアが文字列に存在することの強力な指標となる比が得られる。他の例では、最長の連続サイクル部分文字列により消費される文字列の量を考慮すると、値配列難読化を用いた特定のエクスプロイト・キットに関する強力な指標が得られる。表４は、２つのデータセット間の、ＬＣＣＳＬおよび他の値に基づく特徴を比較する。表６に示した値は平均値である。
【００７５】
【表１１】
0006505533.tif 000012
【００７６】
したがって、マルウェア、たとえばブラックホールおよびインコグニートは、これらの統計的属性のうちの１つまたは複数に基づいて、分類するか、またはプロファイリングすることができる。上記で論じたように、これらの値を用いて、ブラックホール、インコグニート、およびｓｖｃｇｏｓｔの各々に対するマルウェア・プロファイルを作成することができ、ここで、マルウェア・プロファイルは、複数の統計的属性の各々に対する値および／または１つまたは複数の閾値範囲を含む。これらのプロファイルを用いて、上述のように、文字列がマルウェアを含むかを判定することができる。
【００７７】
図５に、一例による、図１に示したデバイス１０２、および／または図２に示したデバイス２００などのコンピューティング装置５００のブロック図を示す。この点において、コンピューティング装置５００は、本明細書で説明した機能のうちの１つまたは複数を実行するためのプラットフォームとして用いることができる。
【００７８】
コンピューティング装置５００は、１つまたは複数のプロセッサ５０２を含む。プロセッサ５０２を用いて、図３に示した方法に記載されたステップの一部または全部を実行することができる。プロセッサ５０２からのコマンドおよびデータは、通信バス５０４上で通信される。コンピューティング装置５００はまた、プロセッサ５０２用のプログラム・コードがランタイム中に実行可能であるランダムアクセスメモリ（ＲＡＭ）などのメインメモリ５０６と、二次メモリ５０８とを含む。二次メモリ５０８は、たとえば、１つまたは複数のハードディスク・ドライブ５１０、および／または、フレキシブルディスク・ドライブ、磁気テーブ・ドライブ、コンパクト・ディスク・ドライブなどを表すリムーバブル・ストレージ・ドライブ５１２を含むことができ、これらの中に、図３に示した方法を実行するためのデータ収集部２０４、データ処理部２０６、統計分析部２０８などに対するコンピュータ可読命令または機械可読命令の形式のプログラム・コードのコピーを格納することができる。本明細書で論じた記憶デバイスは、たとえばランダム・アクセス・メモリ（ＲＡＭ）またはリード・オンリー・メモリ（ＲＯＭ）などの非一時的、揮発性または不揮発性メモリの組合せを備えることができる。
【００７９】
リムーバブル・ストレージ・ドライブ５１０は、よく知られた方法で、リムーバブル・ストレージ・ユニット５１４から読み出す、および／または、これに書き込むことができる。ユーザ入力および出力デバイス５１６は、キーボード、マウス、ディスプレイなどを含むことができる。ディスプレイ・アダプタ５１８は、通信バス５０４およびディスプレイ５２０とインターフェースをとることができ、プロセッサ５０２から表示データを受信し、表示データをディスプレイ５２０に対する表示コマンドに変換することができる。加えて、プロセッサ５０２は、ネットワーク・アダプタ５２２を介して、たとえばインターネット、ＬＡＮなどのネットワーク上で通信することができる。
【００８０】
前述の記載は、例示および説明の目的で提示した。これらは、網羅的ではなく、開示した例を開示した厳密な形態に限定するものではない。修正および改変が、上記の教示に照らして可能であり、開示した例を実施することから取得することができる。たとえば、記載した実装はソフトウェアを含むが、開示した例は、ハードウェアおよびソフトウェアの組合せとして、またはファームウェアで実装することができる。ハードウェアの例には、パーソナル・コンピュータ、サーバ、ラップトップ、メインフレーム、マイクロプロセッサなどを含むコンピューティング・システムまたは処理システムがある。加えて、開示した態様はコンピュータ上のメモリに格納されているように説明されているが、これらの態様が、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＵＳＢメディア、ＤＶＤ、または、ＲＡＭもしくはＲＯＭの他の形態のような二次記憶デバイスなどの、他の種類のコンピュータ可読記憶媒体にも格納できることを当業者は理解するだろう。
【００８１】
本明細書および開示した方法に基づくコンピュータ・プログラムは、熟練した開発者の技能の範囲内にある。様々なプログラムまたはプログラム・モジュールが、当業者に知られている技法のいずれかを用いて作成するか、または既存のソフトウェアに関連して設計することができる。たとえば、プログラム・セクションまたはプログラム・モジュールは、．Ｎｅｔ  Ｆｒａｍｅｗｏｒｋ、．Ｎｅｔ  Ｃｏｍｐａｃｔ  Ｆｒａｍｅｗｏｒｋ（および関連言語、たとえばＶｉｓｕａｌ  Ｂａｓｉｃ、Ｃなど）、ＸＭＬ、Ｊａｖａ（登録商標）、Ｃ＋＋、ＪａｖａＳｃｒｉｐｔ（登録商標）、ＨＴＭＬ、ＨＴＭＬ／ＡＪＡＸ、Ｆｌｅｘ、Ｓｉｌｖｅｒｌｉｇｈｔ、または任意の他の現在知られているもしくは後に作成されるプログラミング言語で、またはこれらを用いて、設計することができる。そのようなソフトウェア・セクションまたはモジュールのうちの１つまたは複数は、コンピュータ・システムまたは既存のブラウザ・ソフトウェアに統合することができる。
【００８２】
他の例は、本明細書を考慮し、本明細書で開示した例を実施すれば、当業者にとって明らかであろう。特許請求の範囲における記述は、特許請求の範囲で用いられる文言に基づいて広く解釈されるべきであり、本明細書内でまたは本出願の審査中に説明される例に限定されず、これらの例は非排他的であると解釈されるべきである。したがって、本明細書および例は、単なる例とみなされるべきであり、真の範囲および趣旨は、以下の特許請求の範囲およびこれらの全範囲の均等物により示されるものとする。
【００８３】
本発明の多数の特徴および利点は、この詳細な明細書から明らかであり、したがって、添付の特許請求の範囲は、本発明の真の趣旨および範囲に含まれる全てのシステムおよび方法を網羅するものとする。本明細書では、不定冠詞「ａ」および「ａｎ」は、移行句「備える（ｃｏｍｐｒｉｓｉｎｇ）」、「含む（ｉｎｃｌｕｄｉｎｇ）」、および／または「有する（ｈａｖｉｎｇ）」を含む開放型（ｏｐｅｎ−ｅｎｄｅｄ）請求項では、「１つまたは複数（ｏｎｅ  ｏｒ  ｍｏｒｅ）」を意味する。さらに、多数の修正および改変を当業者は容易に思いつくと思われるので、図示し説明した厳密な構成および動作に本発明を限定するのは望ましくなく、したがって、全ての適切な修正例および均等物は、本発明の範囲内に入るものとして再分類することができる。
【図１】
0006505533.tif 000013
【図２】
0006505533.tif 000014
【図３】
0006505533.tif 000015
【図４Ａ】
0006505533.tif 000016
【図４Ｂ】
0006505533.tif 000017
【図４Ｃ】
0006505533.tif 000018
【図４Ｄ】
0006505533.tif 000019
【図５】
0006505533.tif 000020