(57)【要約】【課題】実行可能コードのためのシグネチャを提供すること。【解決手段】実行可能コードのためのシグネチャを生成する方法。実行可能コードのためのエントリ・アドレスを求める。エントリ・アドレスから開始して、この方法は実行可能コードをステップスルーし、第１の種類の命令を廃棄する。更に、少なくとも１つの種類の分岐命令を廃棄して次に進行する。終了条件に達するまで、ニーモニック・コード・リストが、廃棄されなかった命令をニーモニック形式で発行することにより生成される。ニーモニック・コード・リストは、実行可能コードと関連付けられたシグネチャを生成するように処理される。最後に、シグネチャが分析されて、実行可能コードを一組の所定のカテゴリの１つに分類する。【選択図】図１
2007080281.tif 000002
【特許請求の範囲】
【請求項１】
実行可能コードのためのエントリ・アドレスを求めるステップと、
前記エントリ・アドレスから開始して、前記実行可能コードをステップスルーするステップと、
第１の種類の命令を廃棄するステップと、
少なくとも１つの種類の分岐命令を廃棄して次に進行するステップと、
終了条件に達するまで、廃棄されなかった命令をニーモニック形式で発行することにより、ニーモニック・コード・リストを生成するステップと、
前記ニーモニック・コード・リストを処理して、前記実行可能コードと関連付けられたシグネチャを生成するステップと、
前記シグネチャを分析して、前記実行可能コードを一組の所定のカテゴリの１つに分類するステップと、
を含むことを特徴とするコンピュータ化された方法。
【請求項２】
前記実行可能コードがデジタル・プログラムの一部であり、前記シグネチャが更に前記デジタル・プログラムと関連付けられることを特徴とする請求項１に記載のコンピュータ化された方法。
【請求項３】
前記ニーモニック・コード・リストを処理するステップが、前記ニーモニック・コード・リストをハッシングすることを含むことを特徴とする請求項１に記載のコンピュータ化された方法。
【請求項４】
前記ハッシングが、更にＳＨＡ−１ハッシングを含むことを特徴とする請求項３に記載のコンピュータ化された方法。
【請求項５】
前記第１の種類の命令がノーオペレーション命令を含むことを特徴とする請求項１に記載のコンピュータ化された方法。
【請求項６】
前記少なくとも１つの種類の分岐命令が、相対ｎｅａｒジャンプ命令を含むことを特徴とする請求項１に記載のコンピュータ化された方法。
【請求項７】
前記終了条件が、
（ａ）有限数のニーモニック・エントリを前記ニーモニック・コード・リストに生成すること、
（ｂ）前記実行可能コードの境界を越えること、又は、
（ｃ）命令ポインタによって既に逆アセンブルされた命令オフセットが指されること、
のいずれか１つを含むことを特徴とする請求項１に記載のコンピュータ化された方法。
【請求項８】
前記有限数のニーモニック・エントリが１０２４であることを特徴とする請求項７に記載のコンピュータ化された方法。
【請求項９】
前記一組の所定のカテゴリの第１カテゴリが悪質コードであることを特徴とする請求項１に記載のコンピュータ化された方法。
【請求項１０】
実行可能コードのためのエントリ・アドレスを求めるステップと、
前記エントリ・アドレスから開始して、前記実行可能コードをステップスルーするステップと、
第１の種類の命令を廃棄するステップと、
少なくとも１つの種類の分岐命令を廃棄して次に進行するステップと、
終了条件に達するまで、廃棄されなかった命令をニーモニック形式で発行することにより、ニーモニック・コード・リストを生成するステップと、
前記ニーモニック・コード・リストを処理して、前記実行可能コードと関連付けられたシグネチャを生成するステップと、
前記シグネチャを分析して、前記実行可能コードを一組の所定のカテゴリの１つに分類するステップと、
を含む方法をプロセッサに実行させるようにする実行可能命令を有することを特徴とする機械可読媒体。
【請求項１１】
前記実行可能コードがデジタル・プログラムの一部であり、前記シグネチャが更に前記デジタル・プログラムと関連付けられることを特徴とする請求項１０に記載の機械可読媒体。
【請求項１２】
前記ニーモニック・コード・リストを処理するステップが、前記ニーモニック・コード・リストをハッシングすることを含むことを特徴とする請求項１０に記載の機械可読媒体。
【請求項１３】
前記ハッシングが、更にＳＨＡ−１ハッシングを含むことを特徴とする請求項１２に記載の機械可読媒体。
【請求項１４】
前記第１の種類の命令がノーオペレーション命令を含むことを特徴とする請求項１０に記載の機械可読媒体。
【請求項１５】
前記少なくとも１つの種類の分岐命令が、相対ｎｅａｒジャンプ命令を含むことを特徴とする請求項１０に記載の機械可読媒体。
【請求項１６】
前記終了条件が、
（ａ）有限数のニーモニック・エントリを前記ニーモニック・コード・リストに生成すること、
（ｂ）前記実行可能コードの境界を越えること、又は、
（ｃ）命令ポインタによって既に逆アセンブルされた命令オフセットが指されること、
のいずれか１つを含むことを特徴とする請求項１０に記載の機械可読媒体。
【請求項１７】
（ａ）デジタル・ファイルの実行可能コードを指すエントリ・セクション・オフセットを求めるステップと、
（ｂ）命令ポインタを前記エントリ・セクション・オフセットに初期化するステップと、
（ｃ）現在の命令が第１の種類の分岐命令ではない場合には、前記命令ポインタを次の命令に更新するステップと、
（ｄ）前記現在の命令が前記第１の種類の分岐命令である場合には、オフセットが前記分岐命令に含まれる状態で、前記命令ポインタを更新するステップと、
（ｅ）（ｃ）及び（ｄ）を繰り返すステップと、
（ｆ）前記命令ポインタにより指された、関心のない命令ではないか又は第１の種類の分岐命令ではない命令を逆アセンブルすることにより、発行のリストを生成するステップと、
（ｇ）終了ポイントに達したときに動作を終了させるステップと、
（ｈ）前記発行のリストをハッシングして、前記デジタル・ファイルと関連付けられたシグネチャを生成するステップと、
を含むことを特徴とするコンピュータ化された方法。
【請求項１８】
前記発行がニーモニック・コードを含むことを特徴とする請求項１７に記載のコンピュータ化された方法。
【請求項１９】
前記関心のない命令がノーオペレーション命令を含み、前記第１の種類の分岐命令が相対ｎｅａｒジャンプ命令を含むことを特徴とする請求項１７に記載のコンピュータ化された方法。
【請求項２０】
前記終了ポイントが、
（ａ）有限数のニーモニック・エントリを前記ニーモニック・コード・リストに生成すること、
（ｂ）前記実行可能コードの境界を越えること、又は、
（ｃ）命令ポインタにより、既に逆アセンブルされた命令オフセットを指すこと、
のいずれか１つを含むことを特徴とする請求項１７に記載のコンピュータ化された方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、コンピュータのセキュリティに関する。具体的には、本発明の実施形態は、実行可能コードのためのシグネチャに関する。
【０００２】
関連出願の相互参照
本出願は、２００５年９月１３日に出願され、引用によりここに組み込まれる「Ｓｉｇｎａｔｕｒｅ  ｆｏｒ  Ｅｘｅｃｕｔａｂｌｅ  Ｃｏｄｅ」という表題の仮出願番号第６０／７１６，８８４号に関し、これに基づく利益を主張する。
【背景技術】
【０００３】
コンピュータ・システムを、敵対的な或いは悪質な攻撃から保護することは、困難な課題である。パスワードを用いて、認可されたユーザを認証することは可能であるが、信頼されるユーザ自体が、「ウィルス」、「トロイの木馬」、「悪質マクロ」、「悪質スクリプト」、「ワーム」、「スパイ・プログラム」、及び「バックドア」等の悪質な命令を含むプログラムを無意識のうちに稼動させることによって、システム及びネットワークのセキュリティを危険にさらす場合がある。コンピュータ・ウィルスは、それ自体を他のプログラムに添付することにより複製される実行可能なプログラムである。トロイの木馬は、一般的にユーザが期待することを行わず、それどころか、データ破壊及びシステム破損等の悪質な作用を実行するプログラムである。マクロ及びスクリプトは、頻繁に行うタスクを自動化するために高級言語で書かれたプログラムであり、ワード・プロセッサ等のアプリケーションによって解釈して実行することができる。多くのマクロ言語及びスクリプト言語は、ユーザ対話をごくわずかしか必要としないか或いは全く必要としないので、悪質なマクロ及び悪質なスクリプトは、多くの場合、ユーザの承認なしで、ウィルス又はトロイの木馬をシステムに取り込むことに用いられる。ワームは、ウィルスのようにそれ自体を拡げるプログラムである。しかし、ウィルスと違って、ワームは、他のホスト・プログラムに感染することはないが、その代わりに、電子メール等のネットワーク手段を介して、それら自体を他のユーザに送信する。スパイ・プログラムは、被害コンピュータ上に密かにインストールされるトロイの木馬の亜類型であり、そのコンピュータからスパイ・プログラムを仕込んだ人物に機密データ及びパスワードを送信する。バックドアは、その作者がプログラムをクラックしたり又は誤用することを可能にする、或いは、一般的には、彼ら自身の興味のためにその機能を悪用する、プログラムに加えられる密かな機能である。
【０００４】
上述のプログラム全ては、ユーザの意志に関わらず、１つのファイルから別のファイルに伝播するデータを破損することにより、又は、認可されていない人物に機密データを送信することにより、コンピュータ・システム及び会社の機密を脅かす可能性がある。悪質なプログラムに対してコンピュータ・システムを保護するために、いろいろな技術が生成されている。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
シグネチャスキャナは、予め定義された「周知ウィルス」のリストを用いてウィルスを検出する。シグネチャスキャナは、周知ウィルスのデータベースにリスト表示されたウィルスシグネチャについて、各々のファイルを走査する。新しいウィルスが見つかるたびに、それがデータベースに加えられる。周知ウィルスのリストを定期的に更新することは、単一ユーザ及びネットワーク管理者の双方にとって負担の重い仕事であり、更新の間に重大なセキュリティの空白を残す。更に、この手法は、本質的に非実用的であり、時間がかかり、費用がかかり、常にウィルス作成者の後手に回る。
【０００６】
ウィルス作者は、先在するウィルス内に変異型を生産し始めた。実行可能命令コードを単に並び替えるだけで、異なるシグネチャがウィルスの変異形態に生産される。こうした新しいシグネチャは、周知シグネチャのデータベースと比較した場合に、ウィルス・スキャナでは認識できない。
【０００７】
本質的には、暗号化されたウィルスは、ウィルス暗号化解除ルーチンと暗号化されたウィルス本体から成る。ユーザが感染したプログラムを起動すると、ウィルス暗号化解除ルーチンは、最初にコンピュータの制御を得て、次にウィルス本体を暗号化解除する。次いで、暗号化解除ルーチンは、コンピュータの制御を暗号化解除ウィルスに転送する。
【０００８】
暗号化ウィルスは、どのような単純なウィルスでも行うように、プログラム及びファイルを感染させる。ウィルスが新しいプログラムを感染させるたびに、このウィルスは、暗号化解除されたウィルス本体及び関連する暗号化解除ルーチンの両方のコピーを生成し、このコピーを暗号化して、この両方を目標に添付する。ウィルス本体のコピーを暗号化するために、暗号化されたウィルスは、ウィルスが感染毎に変化するようにプログラムされた暗号キーを用いる。このキーが変化するので、ウィルス本体の並び替えにより、ウィルスは感染毎に異なって見えるようになる。
【０００９】
命令の並び替えは、機能的に等価な命令において発生し得る。プログラム内の命令が５＋２の足し算をする場合、これは、２＋５の足し算をする変異プログラム・コードと機能的に同じである。しかしながら、プログラム・コード及び変異型は、異なるシグネチャを生産するであろう。このことは、ウィルス対策ソフトウェアが、一致したウィルス本体から抽出されたウィルスシグネチャを検索することを非常に困難にする。
【００１０】
現在のウィルス対策方式に対する別の防御は、ノーオペレーション（ＮＯＰ）命令をプログラム・コード内に挿入することである。ここでも、この種の変異型は、認識されていないシグネチャを生成することにより、シグネチャ走査方式を無効にすることができる。走査するべき定まったシグネチャがないと、どの２つの感染も類似しているように見えない。
【課題を解決するための手段】
【００１１】
実行可能コードのためのシグネチャを生成する方法。実行可能コードのためのエントリ・アドレスを求める。エントリ・アドレスから開始して、この方法は実行可能コードをステップスルーし、第１の種類の命令を廃棄する。更に、少なくとも１つの種類の分岐命令を廃棄して次に進行する。終了条件に達するまで、ニーモニック・コード・リストが、廃棄されなかった命令をニーモニック形式で発行することにより生成される。ニーモニック・コード・リストは、実行可能コードと関連付けられたシグネチャを生成するように処理される。最後に、シグネチャが分析されて、実行可能コードを一組の所定のカテゴリの１つに分類する。
【００１２】
本発明の他の特徴及び利点が、添付の図面及び下記の詳細な説明から明らかになるであろう。
【発明を実施するための最良の形態】
【００１３】
本発明の実施形態は、同様の参照番号が同じ要素を示す添付の図面の図形において、限定的ではなく、例示的なものとして示される。
【００１４】
実行可能コードのためのシグネチャを生成する方法の実施形態を、ここで説明する。１つの実施形態に関しては、コンピュータ化された方法は、実行可能コードのためのエントリ・アドレスを求め、このエントリ・アドレスから開始して、実行可能コードをステップスルーすることにより始まる。エントリ・アドレスを配置するために、入力が有効な実行可能コードとして検証され、実行可能コード内のエントリ・ポイントが配置される。命令ポインタが現在の命令を指す。現在の命令がニーモニック・コードに逆アセンブルされる。現在の命令が第１の種類の命令である場合には、現在の命令は廃棄される。１つの実施形態に関しては、第１の種類の命令は、プログラム・コードに加えられた場合に、実質的にはプログラム・コードの実行を変更しない命令である。更に、少なくとも１つの種類の分岐命令を廃棄して次に進行する。１つの実施形態に関しては、命令ポインタを選択的な分岐命令のターゲットに設定することにより、相対ｎｅａｒジャンプ等の選択的な分岐命令が続いて、選択的な分岐命令は廃棄される。更に、ニーモニック・コード・リストが、廃棄されなかった命令をニーモニック形式で発行することにより生成される。こうしたリストは、終了条件に達するまで生成される。第１の終了条件は、有限数のニーモニック・エントリをニーモニック・コード・リストに生成することである。第２の終了条件は、実行可能コードの境界を越えることである。第３の終了条件は、命令ポインタにより、既に逆アセンブルされた命令オフセットを指すことである。
【００１５】
終了条件が満たされた後で、ニーモニック・コード・リストは、実行可能コードのためのシグネチャソースとなる。ニーモニック・コード・リストは、実行可能コードと関連付けられたシグネチャを生成するように処理される。１つの実施形態に関しては、処理は、ハッシュ関数をシグネチャソース又は発行リストに適用することを含む。発行リストをハッシングして、デジタル・ファイルと関連付けられたシグネチャを生成する。シグネチャは、実行可能コードを一組の所定のカテゴリの１つに分類するように分析される。例示的なカテゴリは悪質コードである。
【００１６】
本実施形態が目的とする利点は、実行可能コードにおいて、種々の変異型アーチファクトがないシグネチャソースを抽出することである。本実施形態が目的とする別の利点は、実行可能コードの変異形態内で一致したシグネチャを計算することである。
【００１７】
図１はファイル構造を示す。大部分の実行可能ファイルは、実行可能ファイルが稼動されるコンピュータ環境を設定するために用いられる情報を含むヘッダを有する。更に、ヘッダは、実行可能ファイルの異なる部分をコンピュータのメモリ内に配置させ、プログラムを稼動させることができる。ディスク・オペレーティング・システム（ＤＯＳ）の実行可能ファイルは、一般的には、ＭＺヘッダ１０５、ＰＥヘッダ１１０、ＰＥオプショナルヘッダ１１５、幾多のセクション・ヘッダ１２０乃至１３０、及び本体１３５を含む。
【００１８】
マイクロソフトのプログラマであるＭａｒｋ  Ｚｂｉｋｏｗｓｋｉにちなんで命名されたＭＺヘッダ１０５は、レガシー・サポートのために、全てのウィンドウズ（登録商標）の実行可能コードに未だに存在するバイナリ・ファイル・フォーマットのヘッダである。一般的には、頭文字の「ＭＺ」は、ＤＯＳ実行可能ファイルのオフセット０×００で開始する、ＡＳＣＩＩの最初の２バイトにおいて表示される。ＭＺヘッダ１０５がリトル・エンディアン配列であるＭＺヘッダ１０５の例示的な構造は以下の通りである。
2007080281.tif 000003
【００１９】
図２Ａは、シグネチャシステムが入力を検証するプロセスのフロー図である。決定ブロック２０５から始まり、シグネチャシステムは、受信された入力が有効な実行可能フォーマットであるかどうかを判断する。
【００２０】
入力が有効な実行可能コードであるかどうかを判断する際に、シグネチャシステムは、入力のオフセット０×００で始まる２バイト対を解析し、入力の長さを検査することにより、有効なＭＺヘッダ１０５を探す。２バイト対が「ＭＺ」で始まり、かつ、入力の長さが少なくとも２８バイトの長さである場合には、入力は有効な実行可能フォーマットである。両方の条件が満たされない場合には、有効なＭＺヘッダ１０５は識別されず、入力は有効な実行可能フォーマットではない。この場合、シグネチャシステムはエラーを返して処理を終了する。ｃｈｅｃｋｓｕｍフィールドがＭＺ構造内に存在する場合があるが、常に用いられるわけではない。
【００２１】
入力が有効な実行可能フォーマットである場合は、処理は決定ブロック２１０へ続き、シグネチャシステムは、ポータブル実行可能フォーマット・ヘッダ（ＰＥヘッダ）が入力内に存在するかどうかを判断する。
【００２２】
図１では、ＰＥヘッダ１１０は、共通オブジェクト・ファイル形式（ＣＯＦＦ）に基づかない、ポータブル実行可能フォーマット・バイナリの主ヘッダである。ＭＺヘッダ１０５に続いて、ＰＥヘッダ１１０は、プログラム実行が始まる入力内のエントリ・ポイントを示すフィールドを含む。ＰＥヘッダの構造は以下の通りである。
2007080281.tif 000004
【００２３】
図２Ａのブロック２１０において、シグネチャシステムは、入力の長さが有効であることを保証することにより、ＰＥヘッダの存在を検出する。１つの実施形態においては、有効な長さは少なくとも６４バイトである。入力の長さが６４バイトと等しいか又は６４バイトより大きい場合には、実行可能コードはＰＥヘッダを含むのに十分長いことを示し、処理はブロック２１５へ続く。もしそうでない場合には、エラーが返されて処理は終了する。
【００２４】
ブロック２１５において、ＰＥオフセットの整数値が、実行可能コードから読み込まれる。１つの実施形態においては、ＰＥオフセットは、実行可能コードのオフセット０×３Ｃで始まる、３２ビットの符号なしリトル・エンディアン整数である。ブロック２２０において、ＰＥオフセットがゼロ（０）である場合には、実行可能プログラム・コードのエントリ・ポイントは、ＭＺヘッダ１０５のｉｐフィールド値のファイル・オフセットであると解釈される。要するに、エントリ・ポイント＝ファイル・オフセット（ＭＺヘッダ（ｉｐ））である。エントリ・ポイントがＭＺヘッダ１０５から取られる場合、ＰＥオフセットがゼロであるため、シグネチャシステムは、エントリ・ポイントをエントリ・セクションのｏｆｆｓｅｔパラメータとして用いて、ブロック３０５で始まる逆アセンブリ・プロセスへと続く。逆アセンブリ・プロセスは、以下でより詳細に説明する。
【００２５】
ＰＥオフセットがゼロと等しくない場合は、処理はブロック２２５へ続く。ここで、シグネチャシステムは、実行可能コードが有効なＰＥオフセット値及び有効なＰＥヘッダを含むかどうかを判断する。ＰＥオフセット値を最小ＰＥヘッダ長さに加えることにより、オフセットが有効であることを確認する。１つの実施形態においては、最小ＰＥヘッダ長さ／サイズは２０バイトである。ＰＥオフセット値と最小ＰＥヘッダ長さとの合計が、実行可能な長さより大きい場合には、ＰＥオフセットは無効である。このような場合もまた、有効なＰＥヘッダがＰＥオフセットに存在する可能性がないので、ＰＥヘッダは無効とみなされ、実行可能コードの範囲外のコードを参照する。シグネチャシステムはエラーを返して処理を終了する。
【００２６】
ＰＥオフセット値が有効である場合は、ＰＥヘッダ１１０が有効であることが確認される。一般的には、ＰＥヘッダは、ＰＥヘッダのマジック・ナンバーとも呼ばれる４倍長バイト「ＰＥ００」で始まる。ＰＥヘッダ１１０が有効であると判断する際、シグネチャシステムは４つのバイトを解析する。４つのバイトが「ＰＥ００」で始まる場合には、有効なＰＥヘッダのマジック・ナンバーが見出され、ＰＥヘッダがＰＥオフセットで抽出される。そうでなければ、有効なＰＥヘッダは識別されず、シグネチャシステムはエラーを返して処理を終了させる。
【００２７】
ＰＥヘッダが有効であることが確認されると、処理はブロック２３０に続き、ＰＥオプショナルヘッダ１１５が配置される。ＰＥオプショナルヘッダ１１５は、ＰＥオプショナルヘッダのｅｎｔｒｙフィールド内に、実行可能コードのエントリ・ポイントを含む。ＰＥオプショナルヘッダ１１５が適切に配置されると、シグネチャシステムは、ＰＥオプショナルヘッダ１１５を越えて、すぐ後に続くバイトを見るが、これは、第１のＰＥセクション・ヘッダ１２０の開始位置である。ＰＥオプショナルヘッダ１１５の基本的な６４バイト・フォーマットは以下の通りである。
2007080281.tif 000005
【００２８】
一般的には、ＰＥオプショナルヘッダ１１５は、ＰＥヘッダ１１０にすぐ続く。ＰＥオプショナルヘッダ１１０は、可変長ヘッダである。１つの実施形態においては、ＰＥオプショナルヘッダの長さは、ＰＥヘッダ１１０によって定義される。ＰＥオプショナルヘッダ１１５が有効であることを確認するために、ＰＥヘッダのｏｐｔｌｅｎｇｔｈフィールドの値が、ＰＥオプショナルヘッダ構造のサイズと少なくとも同じだけの大きさであることを検査される。このように、ＰＥヘッダのｏｐｔｌｅｎｇｔｈフィールドが、ＰＥオプショナルヘッダ構造のサイズより大きい可能性はある。従って、ＰＥヘッダのｏｐｔｌｅｎｇｔｈが、ＰＥオプショナルヘッダ構造のサイズより小さい場合には、シグネチャシステムは、エラーを返して処理を終了する。ウィンドウズ（登録商標）の実行可能ファイルは、少なくとも６４バイトのオプショナルヘッダを用いる。図１に示すように、１つの実施形態においては、ＰＥヘッダ１１０のｏｐｔｌｅｎｇｔｈフィールド「Ｌ1」は、ＰＥオプショナルヘッダ１１５のサイズと等しい。
【００２９】
ここで実行可能ファイル・フォーマットが有効であることが確認されたので、エントリ・ポイントが配置される。１つの実施形態においては、エントリ・ポイントは、デジタル・ファイルの実行可能コードを指すエントリ・セクション・オフセットである。更に、実行可能コードはデジタル・プログラムの一部であり、生成されたシグネチャは更にデジタル・プログラムと関連付けられる。
【００３０】
図２Ｂは、シグネチャシステムがエントリ・ポイントを実行可能ファイル内に配置するプロセスのフロー図である。ＰＥヘッダのｏｐｔｌｅｎｇｔｈが、ＰＥオプショナルヘッダ構造と等しいか又はより大きい場合は、ＰＥオプショナルヘッダ構造の関連部分が存在する。関連部分が存在する場合には、ＰＥヘッダ１１０にすぐ続くＰＥオプショナルヘッダ１１５が、ブロック２３５において、オリジナルの改ざんを防ぐために、動的に割り当てられたメモリのセクションにコピーされる。ＰＥオプショナルヘッダ１１５の付加的なフィールドは、ＰＥオプショナルヘッダ１１５の基本的構造に続くことができるが、シグネチャシステムによっては無視される。
【００３１】
次に、ブロック２４０において、ＰＥヘッダのｓｅｃｔｉｏｎｓフィールドが非ゼロであることを検査する。ｓｅｃｔｉｏｎｓフィールドは、実行可能コード内のＰＥセクション・ヘッダの数を示す。ＰＥヘッダのｓｅｃｔｉｏｎｓフィールドがゼロである場合には、ＰＥセクション・ヘッダは存在せず、エラーが返される。
【００３２】
ＰＥヘッダのｓｅｃｔｉｏｎｓフィールドが非ゼロの場合は、全てのＰＥセクション・ヘッダを抽出する試みがなされる。ＰＥセクション・ヘッダは、ＰＥオプショナルヘッダ構造のすぐ後から始まる。前述のように、ＰＥヘッダのｏｐｔｌｅｎｇｔｈフィールドが、ＰＥオプショナルヘッダ構造より大きい場合があるので、ＰＥオプショナルヘッダ構造は、ＰＥヘッダ１１０内に定義されたオプショナルヘッダの長さ「Ｌ1」で丁度終わらない場合がある。シグネチャシステムはＰＥオプショナルヘッダ１１５の終了位置を決め、ＰＥオプショナルヘッダ１１５を越えてすぐ後に続くバイトを見る。このバイトがＰＥセクション・ヘッダの開始点である。
【００３３】
ＰＥセクション・ヘッダの１つは、エントリ・ポイント・コードを含む。従って、どのＰＥセクション・ヘッダがこのコードを含むかを判断しなくてはならない。図１では、各々のＰＥセクション・ヘッダ１２０乃至１３０は同じ静的サイズである。１つの実施形態に関しては、各々のＰＥセクション・ヘッダ構造のサイズは４０バイトである。例示的なＰＥセクション・ヘッダ構造は以下のように定義される。
2007080281.tif 000006
【００３４】
シグネチャシステムは、全てのＰＥセクション・ヘッダを抽出することを試みる。図２Ｂのブロック２４５において、第１のＰＥセクション・ヘッダ・オフセット（ＰＥセクション・ヘッダ・オフセット）が計算される。１つの実施形態においては、ＰＥヘッダのｏｐｔｌｅｎｇｔｈフィールドは、ＰＥオプショナルヘッダ１１５構造のサイズと等しい。従って、ＰＥセクション・ヘッダ・オフセットは、ＰＥオフセット、ＰＥヘッダ構造のサイズ、及びＰＥヘッダのｏｐｔｌｅｎｇｔｈフィールドの合計により計算することができる。
【００３５】
ブロック２５０において、オリジナルの改ざんを防ぐために、セクション・ヘッダが、動的に割り当てられたメモリのセクションにコピーされる。各々のＰＥセクション・ヘッダは、前のものにすぐ隣接しており、セクション毎に１つのセクション・ヘッダがある。コピー位置はＰＥセクション・ヘッダ・オフセットで開始する。コピーされるバイトの総数を、ＰＥヘッダのｓｅｃｔｉｏｎｓフィールド内で説明されたセクションの総数とＰＥセクション・ヘッダ構造のサイズの積として計算することができる。
【００３６】
ブロック２５５において、シグネチャシステムは、エントリ・ポイント・コードを含む特定のＰＥセクション・ヘッダを配置する。各々のＰＥセクション・ヘッダは、ＬＯＡＤアドレス（実際のセクションが始まる実行可能コードへのオフセット）及びこの実際のセクションの長さを含む。図１では、ＬＯＡＤアドレスが、ＰＥセクション・ヘッダのｖａｄｄｒフィールドにより表わされる。セクションの長さは、ＰＥセクション・ヘッダのｓｉｚｅフィールドにより表わされる。１つの実施形態においては、セクション・ヘッダ１２０のｓｉｚｅフィールドは「Ｓ1」であり、セクション・ヘッダ１２５のｓｉｚｅフィールドは「Ｓ2」であり、セクション・ヘッダ１３０のｓｉｚｅフィールドは「Ｓ3」である。
【００３７】
図２Ｂのブロック２５５において、各々のＰＥセクション・ヘッダが検査されて、セクションが記述する該セクションが、エントリ・ポイント・コードを含むかどうかを見る。これを達成するためには、実行可能コードのエントリ・ポイントは、ＰＥオプショナルヘッダのｅｎｔｒｙフィールドの値である。エントリ・ポイントを含む第１のＰＥセクション・ヘッダが識別されるまで、エントリ・ポイントを各々のＰＥセクション・ヘッダと比較する。
【００３８】
より具体的には、各々のＰＥセクション・ヘッダ１２０乃至１３０について、シグネチャシステムは、エントリ・ポイントが下限より大きいか又は等しく、かつ上限より少ないかどうかを検査する。下限は、セクション・ヘッダのＬＯＡＤアドレス（ＰＥセクション・ヘッダのｖａｄｄｒフィールド）である。上限は、セクション・ヘッダのＬＯＡＤアドレス（ＰＥセクション・ヘッダのｖａｄｄｒフィールド）とセクションの長さ（セクション・ヘッダのｓｉｚｅフィールド）との合計である。従って、エントリ・ポイントと境界との間の関係は、以下のように表わすことができる。
2007080281.tif 000007
どのＰＥセクション・ヘッダも、エントリ・ポイント・コードを含むことが見出されない場合には、シグネチャシステムはエラーを返して処理を終了させる。
【００３９】
ブロック２５６において、エントリ・ポイント・コードを含むことが見出され、エントリ・ポイントがＰＥセクション・ヘッダの上方範囲及び下方範囲内にある第１のＰＥセクション・ヘッダが、エントリ・セクションとしてマークされる。１つの実施形態においては、複数のＰＥセクション・ヘッダは、その範囲内にエントリ・ポイントを含むことができるが、第１のＰＥセクション・ヘッダが識別されたときには、シグネチャシステムは更なる比較を中止する。エントリ・セクションは、メモリにロードされたときに、エントリ・ポイントにより入力される実施可能コードの特定のセクションである。
【００４０】
エントリ・セクションが見出されると、ブロック２６０において、ファイル・オフセットが計算される。エントリ・セクションのｏｆｆｓｅｔフィールドが、エントリ・セクションが実行可能コード内に配置された正確なオフセットを定義する。ファイル・オフセットは、エントリ・セクションのｏｆｆｓｅｔフィールドとエントリ・ポイントとを加算し、エントリ・セクションのｖａｄｄｒフィールドを減算したものとして計算される。これは以下のように表わすことができる。
2007080281.tif 000008
ファイル・オフセットで始まるプログラム・コードが、コンピュータが通常そのセクションにロードするアドレスの仮想メモリ空間にマップされる。エントリ・セクションのｏｆｆｓｅｔが検出されない場合には、シグネチャシステムはエラーを返して処理を終了する。
【００４１】
図３Ａは、シグネチャシステムがシグネチャソース（「シグソース」）を抽出してシグネチャを生成するプロセスのフロー図である。シグソースは、抽出プロセスの結果のニーモニック・コード・リストである。
【００４２】
ファイル・オフセットがブロック２６０において計算されると、処理はブロック３０５へ続く。ここで、逆アセンブリ・アドレスの下限及び上限が設定される。下限は、エントリ・セクションのｏｆｆｓｅｔフィールドであるように設定される。上限は、エントリ・セクションのｏｆｆｓｅｔフィールドとエントリ・セクションのｓｉｚｅフィールドとを加算したものになるように設定される。これらの境界を命令ポインタが越える場合には、シグソースの抽出はブロック３４５において停止する。シグソースの抽出が停止すると、全ての発行された情報は抽出されたシグネチャソースとなる。
【００４３】
ブロック３１０において、命令ポインタがエントリ・セクションのｏｆｆｓｅｔ値に初期化される。命令ポインタ（ＩＰ）は現在の命令を指す。ブロック３１５において、現在の命令は逆アセンブルされ、これによって、バイナリが、記号的なアセンブリ言語で表わされるソース・コード等の人間可読のニーモニック・フォーマットに変換される。１つの実施形態においては、逆アセンブリが、×８６逆アセンブリ・ライブラリを用いて実行される。ステップ３２０乃至３４０は、逆アセンブルされた命令を正規化することを目的とし、結果として、実行可能コードの変形及び変異型について同じシグネチャを生成する。変異型は、関心のない命令の挿入によって、及び、プログラム・コードの並べ替えによって発生する可能性がある。
【００４４】
ブロック３２０において、シグネチャシステムは、現在の命令が関心のない命令であるかどうかを判断する。関心のない命令は、これが削除されない場合にプログラム制御フロー論理を変更することのない命令である。例えば、ＮＯＰ（ノーオペレーション）命令は関心がない。インテル×８６命令セットにおいては、ＮＯＰ命令はオペコード０×９０によって示される。
【００４５】
現在の命令が関心のないものである場合には、処理はブロック３４０に続き、現在の命令は選択的にシグソースから除外される。現在の命令を関心のない命令として判断することにより、現在の命令はシグソースに発行されない／添付されない。ブロック３４０に示すように、命令の長さをＩＰの現在値に加えることにより、ＩＰを増分して、次の命令を指すようにする。次に、処理は以下に説明するブロック３４５へ続く。
【００４６】
ブロック３２０において、現在の命令が関心のないものである場合には、処理はブロック３２５へ続く。ブロック３２５においては、シグネチャシステムは、分岐展開によってプログラム・コードに発生した可能性があるどのような並び替えも正規化する。シグネチャシステムは、現在の命令が選択的分岐条件であるかどうかを判断する。特定の分岐命令（又はジャンプ命令）が後に続く。ブロック３３０において、プログラム・コードがこうした不定分岐を含む場合には、シグネチャシステムは、ＩＰを選択的分岐命令のターゲット命令に設定する。
【００４７】
１つの実施形態においては、相対ｎｅａｒジャンプ命令は、選択的な分岐命令である。Ｉｎｔｅｌ×８６命令セットにおいては、相対ｎｅａｒジャンプ命令は、１バイトの相対オフセット・パラメータをもつオペコード０×Ｅ９により示される。相対ｎｅａｒジャンプ等の選択的な分岐条件の復号化により、命令ニーモニックされたものが、シグソースに発行／添付されることはない。むしろ、ＩＰが選択的分岐条件のターゲット命令に増分される。現在の命令が相対ｎｅａｒジャンプである場合、例えば、ジャンプ命令内で特定される１バイトの相対オフセット、及び２バイトの命令の長さが、命令ポインタに加えられる。
【００４８】
ブロック３２５において、命令が選択的分岐条件ではなく、かつ、関心のない命令ではない場合には、処理はブロック３３５へ続き、現在の命令がニーモニック形式で発行されて、シグソースに添付される。ブロック３４０において、命令ポインタが更新されて次の命令を指す。従って、命令ポインタは命令の長さだけ増分される。
【００４９】
ブロック３４５において、上述の抽出プロセスは、抽出終了条件が満たされるまで繰り返される。図３Ｂは、終了条件が、ニーモニック・コード・リスト／シグソースのリスト内のエントリの生成を終了させるプロセスの実施形態のフロー図である。ブロック３６０において、第１条件は、有限数のニーモニック・エントリをニーモニック・コード・リストに生成することである。１つの実施形態に関しては、有限数のニーモニック・エントリは１０２４の発行である。しかしながら、プログラムがより複雑になるに伴い、平均的なプログラム・コードのサイズはある期間にわたり増加するであろう。従って、有限数のニーモニック・エントリは構成可能な設定であり、ここで提示される実施形態に限定すべきではない。関心のない命令は、命令発行限界の一部として数に入れられない。第１条件が満たされた場合には、発行終了条件がブロック３４５において満たされ、処理は図３Ａのブロック３５０へ続く。
【００５０】
ブロック３６５において、第２条件が実行可能コードの境界を越える。図３Ａのブロック３０５において、逆アセンブリ・アドレスの下限及び上限が設定された。前述の通り、ＩＰがこれらの境界を越えると、シグソースの抽出が停止する。第２条件が満たされた場合には、処理はブロック３５０へ続く。
【００５１】
ブロック３７０において、第３条件は、命令ポインタにより、既に逆アセンブルされた命令を指す。例えば、図３Ａのステップ３３０における分岐展開中に、選択的分岐が、例えばループ内のコードの部分に戻るように指すことができる。分岐ターゲットが、既に逆アセンブルされている場合は、全ての抽出が停止され、処理は図３Ａのブロック３５０へ続く。終了条件が満たされない場合には、処理は図３Ａのブロック３１５へ続く。
【００５２】
図４は、シグネチャソースを抽出するための本発明の１つの実施形態を示す。種々の命令を含む例示的なエントリ・セクション４０５が、リスト表示される。命令〔０．．．８〕はバイナリ・コードであるが、説明目的のために、人間可読なニーモニック形式で示される。例示的なシグネチャソース４１０も示される。
【００５３】
命令ポインタ（ＩＰ）４２０が、エントリ・セクション内の現在の命令〔０〕を指す。シグネチャシステム４３０は、現在の命令〔０〕をＡＤＤ命令に逆アセンブルする。１つの実施形態においては、ＡＤＤ命令は関心のない命令ではなく、かつ、選択的分岐命令でもない。ＡＤＤ命令は、ニーモニック形式で、シグソース４１０に発行、即ち添付されて、ＩＰは増分されて現在の命令〔１〕を指すようになる。発行終了条件が満たされないので、シグネチャシステム４３０は、現在の命令〔１〕をＮＯＰ命令に逆アセンブルする。１つの実施形態においては、ＮＯＰは関心のないものであり、ＩＰは増分されて、現在の命令〔２〕を指すようになる。発行終了条件が満たされないので、シグネチャシステム４３０は、現在の命令〔２〕をＳＨＲ（論理的右へシフトせよ）命令に逆アセンブルする。１つの実施形態においては、ＳＨＲは、関心のないものではなく、かつ、選択的分岐ではない。ＳＨＲ命令はシグソース４１０に発行され、ＩＰは増分されて命令〔３〕を指すようになる。発行終了条件が満たされないので、シグネチャシステム４３０は現在の命令〔３〕をターゲット命令〔５〕と共に分岐に逆アセンブルする。１つの実施形態においては、命令〔３〕は関心のあるものではないが、選択的分岐であることが見出される。ＩＰがターゲット命令〔５〕に設定される。発行終了条件が満たされないので、シグネチャシステム４３０は、現在の命令〔５〕をＰＸＯＲ命令に逆アセンブルする。１つの実施形態においては、ＰＸＯＲは関心のあるものではなく、かつ、選択的分岐でもない。ＰＸＯＲ命令は、シグソース４１０に発行され、ＩＰが増分されて次の命令〔６〕を指すようになる。１つの実施形態においては、発行終了条件が満たされず、現在の命令〔６〕、即ちＳＨＬ（論理的に左にシフトせよ）命令は、関心のあるものでもないし、選択的分岐でもない。従って、ＳＨＬがシグソース４１０に発行され、ＩＰは増分されて命令〔７〕を指すようになる。
【００５４】
命令〔７〕は、シグソース４１０への命令の発行を終了させる終了条件を示す。シグネチャシステム４３０は、命令〔７〕が、以前に逆アセンブルされている命令〔２〕を指すことを判断する。従って、第３の発行終了条件３７０が満たされ、処理は、抽出されたシグソース４１０を用いるシグネチャ生成へ続く。
【００５５】
図３Ａにおいては、抽出終了条件が満たされることにより、処理がブロック３５０へ続く。ブロック３５０は、シグネチャ生成の開始をマークし、ニーモニック・コード・リスト／シグソースが処理される。具体的には、抽出されたシグソースはバイナリに再アセンブルされて、ハッシュ関数がバイナリ・シグソースに適用される。１つの実施形態においては、ＳＨＡ−１ハッシュが適用される。当業者であれば、メッセージ・ダイジェスト・アルゴリズム５（ＭＤ５）、ＳＨＡ−０、ＳＨＡ−１、ＳＨＡ−２、ＭＤ２、ＭＤ４、ＭＤ５、ＲＩＰＥＭＤ−１６０、ＨＡＶＡＬ、スネフェル、タイガー、及びホワールプール等のどのような暗号ハッシュ関数でも適用できるということを容易に認識するであろう。
【００５６】
ブロック３５５において、ハッシュ結果が、実行可能コードのシグネチャを生成するのに必要な精度レベルより長い場合には、ハッシュ結果は必要とされる精度レベルに切り捨てられる。１つの実施形態においては、ハッシュ結果は２０バイトに切り捨てられる。切り捨てられたハッシュ結果が実行可能コードのシグネチャである。ハッシュ結果が必要とされる精度レベルである場合には、ハッシュ結果は実行可能コードのシグネチャである。
【００５７】
１つの実施形態に関しては、目下説明しているように生成されたシグネチャが、１つ又はそれ以上のデータベース内に他のシグネチャと一緒に格納される。シグネチャを分析して、実行可能コードを一組の所定のカテゴリの１つに分類することができる。データベース内のシグネチャに対する、実行可能ファイルのシグネチャの比較に基づいて、処理論理は、実行可能コードのシグネチャがデータベース内のエントリに適合するかどうかを判断する。適合がある場合には、処理論理は、実行可能コードを第１カテゴリの実行可能コードとして識別する。第１カテゴリは、悪質コード（即ちマルウェア）のカテゴリとすることができる。カテゴリの他の例は、スパイウェア、内部／専売権付きソフトウェア、市販ソフトウェア、及び難読化／強化ソフトウェアを含む。１つの実施形態に関しては、処理論理は識別された実施可能コードをブロックする。代替的には、処理論理は、識別された実行可能コードにタグ付けすることができ、又は、実行可能コードを所定の位置に配置することができる。適合がない場合には、処理論理は実行可能コードを通すことができる。
【００５８】
図５は、本発明の実施形態を実装する電子通信システムを示す。システム５００は、ネットワーク５０５、電子通信サーバ５１０、クライアント・マシン５３０、及びデータベース５１５乃至５２５を含む。電子通信サーバ５１０は、ネットワーク５０５を通してクライアント・マシン５３０と結合される。クライアント・マシン５３０は、パーソナル・コンピュータを含むことができる。複数のデータベースは、ネットワーク５０５に結合される。
【００５９】
１つの実施形態に関しては、ここで説明されるシグネチャシステムが、クライアント・マシン５３０内に実装される。別の実施形態に関しては、シグネチャシステムは、電子通信サーバ５１０上に実装される。シグネチャシステム４３０を、ハードウェア（例えば専用回線）、ソフトウェア（汎用機上で稼動するような）、又は両方を組み合わせたものによって、実装できるということに注目されたい。
【００６０】
また、本説明は、ここで説明する動作を実行するための装置にも関する。この装置は、必要とされる目的のために特別に構成することができ、又は、コンピュータ内に格納されたコンピュータ・プログラムによって、選択的に作動され又は再構成される汎用コンピュータを含むことができる。こうしたコンピュータ・プログラムは、限定ではないが、フロッピー（登録商標）・ディスク、光ディスク、ＣＤ−ＲＯＭ、及び磁気光ディスクを含むディスクの種類のいずれか、読み出し専用メモリ（ＲＯＭ）、ランダム・アクセス・メモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気カード又は光カード、又は、電子命令を格納するのに適しており、各々がコンピュータ・システム・バスに結合された媒体の種類のいずれかといったコンピュータ可読格納媒体内に格納することができる。
【００６１】
マシンによるアクセスが可能な媒体は、機械（例えばコンピュータ）によって可読な形態で情報を格納するための、或いは送信するためのどのような機構も含む。例えば、機械可読媒体は、読み出し専用メモリ（ＲＯＭ）、ランダム・アクセス・メモリ（ＲＡＭ）、磁気ディスク格納媒体、光格納媒体、フラッシュ・メモリ媒体、及び、電気的、光学的、音響又は他の形態の伝播信号（例えば、搬送波、赤外線信号、デジタル信号等）等を含む。
【００６２】
上記の説明は、本発明のいくつかの例示的な実施形態を述べるに過ぎない。当業者であれば、こうした説明、添付の図面、及び特許請求の範囲から、本発明の精神及び範囲から逸脱することなく、種々の変更を行うことができるということを容易に認識するであろう。
【図面の簡単な説明】
【００６３】
【図１】ファイル構造を示す。
【図２Ａ】シグネチャシステムが入力を検証するプロセスのフロー図である。
【図２Ｂ】シグネチャシステムが、エントリ・ポイントを実行可能ファイル内に配置するプロセスのフロー図である。
【図３Ａ】シグネチャシステムが、シグネチャソースを抽出してシグネチャを生成するプロセスのフロー図である。
【図３Ｂ】終了条件が、ニーモニック・コード・リスト内のエントリの生成を終了させるプロセスの実施形態のフロー図である。
【図４】シグネチャソースを抽出するための本発明の１つの実施形態を示す。
【図５】本発明の実施形態を実装する電子通信システムを示す。
【符号の説明】
【００６４】
１０５：ＭＺヘッダ
１１０：ＰＥヘッダ
１１５：ＰＥオプショナルヘッダ
１２０、１２５、１３０：セクション・ヘッダ
１３５：本体
４０５：エントリ・セクション
４１０：シグネチャソース
４２０：命令ポインタ
４３０：シグネチャシステム
５００：電子通信システム
５０５：ネットワーク
５１０：サーバ
５１５、５２０、５２５：データベース
５３０：クライアント・マシン
【図１】
2007080281.tif 000009
【図２Ａ】
2007080281.tif 000010
【図２Ｂ】
2007080281.tif 000011
【図３Ａ】
2007080281.tif 000012
【図３Ｂ】
2007080281.tif 000013
【図４】
2007080281.tif 000014
【図５】
2007080281.tif 000015
【外国語明細書】
2007080281.tif 000016
2007080281.tif 000017
2007080281.tif 000018
2007080281.tif 000019
2007080281.tif 000020
2007080281.tif 000021
2007080281.tif 000022
2007080281.tif 000023
2007080281.tif 000024
2007080281.tif 000025
2007080281.tif 000026
2007080281.tif 000027
2007080281.tif 000028
2007080281.tif 000029
2007080281.tif 000030
2007080281.tif 000031
2007080281.tif 000032
2007080281.tif 000033
2007080281.tif 000034
2007080281.tif 000035
2007080281.tif 000036
2007080281.tif 000037
2007080281.tif 000038
2007080281.tif 000039
2007080281.tif 000040
2007080281.tif 000041
2007080281.tif 000042
2007080281.tif 000043
2007080281.tif 000044
2007080281.tif 000045
2007080281.tif 000046
2007080281.tif 000047
2007080281.tif 000048
2007080281.tif 000049
2007080281.tif 000050
2007080281.tif 000051
2007080281.tif 000052
2007080281.tif 000053