IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ センチネル ラブス イスラエル リミテッドの特許一覧

特表2022-533715実行可能コード検出、自動特徴抽出及び位置独立コード検出のためのシステム及び方法
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-07-25
(54)【発明の名称】実行可能コード検出、自動特徴抽出及び位置独立コード検出のためのシステム及び方法
(51)【国際特許分類】
   G06F 21/54 20130101AFI20220715BHJP
【FI】
G06F21/54
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2021569072
(86)(22)【出願日】2020-05-20
(85)【翻訳文提出日】2022-01-14
(86)【国際出願番号】 US2020033872
(87)【国際公開番号】W WO2020236981
(87)【国際公開日】2020-11-26
(31)【優先権主張番号】62/850,170
(32)【優先日】2019-05-20
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/850,182
(32)【優先日】2019-05-20
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/854,118
(32)【優先日】2019-05-29
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.WINDOWS
2.macOS
3.Linux
4.JAVA
5.UNIX
6.SOLARIS
7.z/OS
8.Python
(71)【出願人】
【識別番号】521506744
【氏名又は名称】センチネル ラブス イスラエル リミテッド
【氏名又は名称原語表記】SENTINEL LABS ISRAEL LTD.
【住所又は居所原語表記】Derech Menachem Begin 132,Azrieli Center 1,6702101 Tel Aviv(IL)
(74)【代理人】
【識別番号】100109634
【弁理士】
【氏名又は名称】舛谷 威志
(74)【代理人】
【識別番号】100129263
【弁理士】
【氏名又は名称】中尾 洋之
(72)【発明者】
【氏名】セーラム,シュロミ
(72)【発明者】
【氏名】ナチーブ,アセフ
(72)【発明者】
【氏名】ゾハール,アミット
(72)【発明者】
【氏名】ブラウン,ギャル
(72)【発明者】
【氏名】フェレンツ,ペイベル
(72)【発明者】
【氏名】シェテレンバウム,エイタン
(72)【発明者】
【氏名】メイモン,タル
(72)【発明者】
【氏名】ローネン,ロイ
(57)【要約】
バイトストリームから実行可能コードの自動検出を可能にするシステム及び方法をここに開示する。いくつかの実施形態において、バイトストリームは、従来のマルウェア検出ソリューションが無視するファイルの非表示領域で生成できる。いくつかの実施形態において、機械学習モデルは、特定のバイトストリームが実行可能コードであるかどうかを検出するように訓練される。ここに記載される他の実施形態は、ニューラルネットワークを使用する自動特徴抽出のためのシステム及び方法を開示する。新しいファイルが与えられると、前記システム及び方法は、学習済みニューラルネットワークに入力されるコードを前処理してもよい。ニューラルネットワークは、マルウェア検出モデルのための「特徴生成器」として使用してもよい。本明細書の他の実施形態は、ライブラリ関数に対するアクセスの独立的な取得を試みる攻撃者を識別し、フラグを立て、及び/又は検出するシステム及び方法に関する。
【選択図】図3

【特許請求の範囲】
【請求項1】
ライブラリ位置独立コード検出用のシステムであって、
複数のコンピュータで実行可能な指示を記憶するように構成された一以上のコンピュータで読取り可能な記憶装置と、
一以上の他のコンピュータで読取り可能な記憶装置と通信可能に接続された一以上のハードウェアコンピュータプロセッサとを備えており、前記一以上のハードウェアコンピュータプロセッサは、複数のコンピュータで実行可能な指示を実行することによって、前記システムに、
監視対象シンボルのインポートアドレステーブル(IAT)エントリを実装する処理を行わせ、前記IATエントリを実装する処理は、
監視対象シンボルのIATエントリ内の監視対象シンボルアドレスを改変アドレスで置換する処理と、
前記改変アドレスの呼び出しに対してトランポリンコードを実行し、監視対象シンボルの呼び出しを検出及び検証する処理と、
前記改変アドレスの呼び出しを監視対象シンボルアドレスにリダイレクトする処理とを含み、
一以上のローダAPI関数を実装する処理を行わせ、前記ローダAPI関数を実装する処理は、
前記一以上のローダAPI関数を改変し、前記トランポリンコードへ導く値を戻す処理と、
前記監視対象シンボルの実行を迂回コードに迂回させて、前記監視対象シンボルの呼び出しを検出及び検証し、
前記監視対象シンボルの呼び出しを前記監視対象シンボルアドレスにリダイレクトする処理とを含み、
前記監視対象シンボルの前記トランポリンコード及び前記迂回コードを監視させて、実行ファイル内の呼び出しが、静的呼び出し、動的呼び出し、又はローカル呼び出しを含んでいるかを判定する処理を行わせ、
前記システムが、前記実行ファイル内の少なくとも1つの呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれていないと判断した場合、マルウェア検出システムのために、当該実行ファイルに不審な、又は、悪意ありのフラグを立てる処理を行わせることを特徴とするシステム。
【請求項2】
請求項1に記載のシステムであって、前記システムが、前記実行可能コード内の少なくとも1つの呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれていないと判断した場合、当該少なくとも1つの呼び出しを独立した呼び出しとして分類することを特徴とするシステム。
【請求項3】
請求項1に記載のシステムであって、前記システムが、前記呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれると判断した場合、当該呼び出しを良性呼び出しとして分類することを特徴とするシステム。
【請求項4】
請求項1又は2に記載のシステムであって、前記システムが、前記呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれると判断した場合、前記実行ファイルを良性として分類することを特徴とするシステム。
【請求項5】
請求項1に記載のシステムであって、
前記トランポリンコード及び前記迂回コードを含むフッキングエンジンと、
呼び出しに関するデータを記憶するように構成された、一以上の呼び出しデータベースとを含むことを特徴とするシステム。
【請求項6】
請求項1~5のいずれか1項に記載のシステムであって、前記動的呼び出しは、前記実行ファイルの実行中に、前記監視対象シンボルアドレスの取得を試みることが含まれることを特徴とするシステム。
【請求項7】
請求項1~6のいずれか1項に記載のシステムであって、前記静的呼び出しには、前記実行ファイルの初期化中に、前記監視対象シンボルアドレスの取得を試みることが含まれることを特徴とするシステム。
【請求項8】
請求項1~7のいずれか1項に記載のシステムであって、前記実行ファイルからの呼び出しにローカル呼び出しが含まれているか否かを判定する処理には、前記迂回コードを監視して、リターンアドレスが、前記実行ファイルの前記監視対象シンボルと同じアドレスになっているかを判定する処理が含まれることを特徴とするシステム。
【請求項9】
請求項1~8のいずれか1項に記載のシステムであって、前記一以上のローダAPI関数は、GetModuleHandle又はGetProcAddressのいずれか一方又は両方を含むことを特徴とするシステム。
【請求項10】
請求項1~9のいずれか1項に記載のシステムであって、前記少なくとも1つの呼び出しは、前記実行ファイルが、前記監視対象シンボルを含むモジュールから取得されたメタデータを用いることによって初期化されることを特徴とするシステム。
【請求項11】
請求項1~9のいずれか1項に記載のシステムであって、前記少なくとも1つの呼び出しは、前記実行ファイルがローダの内部記録から取得したデータを用いることによって初期化されることを特徴とするシステム。
【請求項12】
請求項1~9のいずれか1項に記載のシステムであって、前記少なくとも1つの呼び出しは、前記実行ファイルが、前記トランポリンコードをトリガーすることなく監視対象シンボルを呼び出すことによって初期化されることを特徴とするシステム。
【請求項13】
ライブラリ位置独立コード検出を行うためのコンピュータにより実施される方法であって、前記方法は、
コンピュータシステムによって、監視対象シンボルのインポートアドレステーブル(IAT)エントリを実装する処理であって、前記IATエントリを実装する処理には、
監視対象シンボルのIATエントリ内の監視対象シンボルアドレスを改変アドレスで置換する処理と、
前記改変アドレスの呼び出しに対してトランポリンコードを実行し、監視対象シンボルの静的呼び出しを検出及び検証する処理と、
前記改変アドレスの呼び出しを監視対象シンボルアドレスにリダイレクトする処理とが含まれる、処理と、
前記コンピュータシステムによって、一以上のローダAPI関数を実装する処理であって、前記ローダAPI関数を実装する処理には、
前記一以上のローダAPI関数を改変し、前記トランポリンコードへ導く値を戻す処理と、
前記監視対象シンボルの実行を迂回コードに迂回させて、前記監視対象シンボルの呼び出しを検出及び検証する処理と、
前記監視対象シンボルの呼び出しを前記監視対象シンボルアドレスにリダイレクトする処理とが含まれる、処理と、
前記コンピュータシステムによって、前記監視対象シンボルの前記トランポリンコード及び前記迂回コードを監視する処理であって、実行ファイル内の呼び出しが、静的呼び出し、動的呼び出し、又はローカル呼び出しを含んでいるかを判定する処理と、
前記コンピュータシステムが、前記実行ファイル内の少なくとも1つの呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれていないと判断した場合、前記コンピュータシステムがマルウェア検出システムのために、当該実行ファイルに不審な、又は、悪意ありのフラグを立てる処理と、を備え、
前記コンピュータシステムはコンピュータプロセッサと電子記憶媒体を備えていることを特徴とする方法。
【請求項14】
請求項13に記載の方法であって、前記方法は、前記コンピュータシステムが、少なくとも1つの呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれていないと判断した場合、当該少なくとも1つの呼び出しを独立した呼び出しとして分類する処理を含むことを特徴とする方法。
【請求項15】
請求項13に記載の方法であって、前記方法は、前記コンピュータシステムが前記呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれると判断した場合、当該呼び出しを良性呼び出しとして分類する処理を含むことを特徴とする方法。
【請求項16】
請求項13又は14に記載の方法であって、前記方法は、前記コンピュータシステムが前記呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれると判断した場合、前記実行ファイルを良性として分類する処理を含むことを特徴とする方法。
【請求項17】
請求項13~16のいずれか1項に記載の方法であって、前記トランポリンコード及び前記迂回コードは、フッキングエンジンの一以上の部分を含んでおり、前記フッキングエンジンは、前記呼び出しに関連するデータを記憶するように構成された呼び出しデータベースに接続されていることを特徴とする方法。
【請求項18】
請求項13~17のいずれか1項に記載の方法であって、前記動的呼び出しには、前記実行ファイルの実行中に、前記監視対象シンボルアドレスの取得を試みることが含まれることを特徴とする方法。
【請求項19】
請求項13~18のいずれか1項に記載の方法であって、前記静的呼び出しには、前記実行ファイルの初期化中に、前記監視対象シンボルアドレスの取得を試みることが含まれることを特徴とする方法。
【請求項20】
請求項13~19のいずれか1項に記載の方法であって、前記実行ファイルからの呼び出しにローカル呼び出しが含まれているか否かを判定する処理には、前記迂回コードを監視して、リターンアドレスが、前記実行ファイルの前記監視対象シンボルと同じアドレスになっているかを判定する処理が含まれることを特徴とする方法。
【請求項21】
請求項13~20のいずれか1項に記載の方法であって、前記一以上のローダAPI関数は、GetModuleHandle又はGetProcAddressのいずれか一方又は両方を含むことを特徴とする方法。
【請求項22】
請求項13~21のいずれか1項に記載の方法であって、前記少なくとも1つの呼び出しは、前記実行ファイルが、前記監視対象シンボルを含むモジュールから取得されたメタデータを用いることによって初期化されることを特徴とする方法。
【請求項23】
請求項13~21のいずれか1項に記載の方法であって、前記少なくとも1つの呼び出しは、前記実行ファイルがローダの内部記録から取得したデータを用いることによって初期化されることを特徴とする方法。
【請求項24】
請求項13~21のいずれか1項に記載の方法であって、前記少なくとも1つの呼び出しは、前記実行ファイルが、前記トランポリンコードをトリガーすることなく監視対象シンボルを呼び出すことによって初期化されることを特徴とする方法。


【発明の詳細な説明】
【関連出願への相互参照】
【0001】
本出願は、2019年5月20日付で出願された米国仮出願第62/850,170号、タイトル「マルウェア解析用コード検出のための方法、システム、及びデバイス(Methods, SYSTEMS, and DEVICES FOR CODE DETECTION for MALWARE ANALYSIS)」、2019年5月20日付で出願された米国仮出願第62/850,182号、タイトル「実行可能コードから自動で特徴を抽出する方法、システム、及び、デバイス(METHODS, SYSTEMS, and DEVICES FOR AUTOMATIC FEATURE EXTRACTION from EXECUTABLE CODE)」、2019年5月29日付で出願された米国仮出願第62/854118号、タイトル「位置独立コードの実行を検出する方法、システム、及びデバイス(METHODS, SYSTEMS, AND DEVICES FOR DETECTING THE EXECUTION OF A POSITION INDEPENDENT CODE)」の利益を主張する。前記出願は、その全体を参照により援用する。
【0002】
本出願と共に提出された出願データシートにおいて外国又は国内の優先権主張が特定されているすべての出願は,37CFR1.57に基づき参照により援用される。
【背景】
【0003】
分野
本出願は、コンピュータ、サイバーセキュリティのシステム及び方法に関し、特に、実行可能コードを検出し、有用な機械学習特徴を抽出し、位置独立コードを識別するためのシステム及び方法に関する。
説明
【0004】
既存のプログラム的マルウェア及び実行可能コード検出のシステム及び方法は、非効率的かつ不正確である。コンピュータシステムに対する悪意のある脅威を防止、検出、及び対応するには、新しいシステム及び方法が必要である。
【概要】
【0005】
本概要では、ここに記載される発明の所定の態様、利点、新規の特徴を記載することを目的とする。なお、本発明による以下のいずれの特定の実施形態においても、以下の利点が必ずしも全て実現されるとは限らないことを理解されたい。したがって、例えば、当業者であれば、ここに教示される利点のうちの一つ又は、利点のグループが実現できるように本発明を具現化又は実施可能であり、ここに教示又は示唆されるその他の利点が必ずしも実現されないことについて認識できるであろう。
【0006】
ここに記載する実施形態のうちいくつかは、ファイルにおける実行可能コードをプログラム的に識別するコンピュータで実施される方法に関する。前記方法は、コンピュータシステムによって、ファイルの一部からバイト列にアクセスする処理と、前記コンピュータシステムによって前記バイト列から所定数のn-グラムを抽出する処理であって、前記各n-グラムは、前記バイト列中の隣接する一連のバイトを含んでおり、前記各n-グラム中の隣接する一連のバイトは、n個のバイトを含む、処理と、前記コンピュータシステムによって、カウンタ列を生成する処理であって、前記カウンタ列の各カウンタは、前記n-グラムのうちの1つと関連付けられており、前記各カウンタは整数値を有しており、前記整数値は前記バイト列内の関連付けられたn-グラムの発生頻度に基づいて生成される、処理と、前記コンピュータシステムによって、前記カウンタ列を入力特徴として予測機械学習モデルに提供する処理と、前記予測機械学習モデルによって、前記バイト列が実行可能なコードを含むモデル確率値を決定する処理とを含み、前記コンピュータシステムはコンピュータプロセッサと電子記憶媒体を備えている。
【0007】
いくつかの実施形態において、実行可能なコードとは、コンピュータシステム上でバイト列を実行することなく、プログラム的に識別される。
【0008】
いくつかの実施形態において、前記方法は、前記バイト列が実行可能なコードを含むモデル確率値が所定の閾値を超えるものである場合、マルウェア検出システムによってさらに解析を行うために、前記コンピュータシステムによって前記バイト列又はファイルにフラグを立てる処理をさらに含む。
【0009】
いくつかの実施形態において、前記ファイルは、実行可能なファイル形式を含む。
【0010】
いくつかの実施形態において、前記ファイルは、ポータブル実行可能ファイル(PE)を含む。
【0011】
いくつかの実施形態において、前記ファイルの一部には、一以上のリソース、文字列、変数、オーバーレイ、又はセクションの1つ以上が含まれている。
【0012】
いくつかの実施形態において、前記ファイルの一部には、実行可能許可が含まれていない。
【0013】
いくつかの実施形態において、前記n-グラムは、bi-グラムを含む。
【0014】
いくつかの実施形態において、nは2~500である。
【0015】
いくつかの実施形態において、前記n-グラムは、nが第一の整数である第一のn-グラムセットと、nが第二の整数である第二のn-グラムセットとを含んでおり、前記第一の整数は前記第二の整数と異なっている。
【0016】
いくつかの実施形態において、n-グラムの所定の数は500である。
【0017】
いくつかの実施形態において、n-グラムの所定の数は50~10000である。
【0018】
いくつかの実施形態において、前記方法は、コンピュータシステムによって、各カウンタを前記バイト列のデータ長で正規化する処理をむ。
【0019】
いくつかの実施形態において、前記予測機械学習モデルは、複数の別々のモデルを含んでおり、各モデルは異なるマシンアーキテクチャコードに対応している。
【0020】
いくつかの実施形態において、前記マシンアーキテクチャコードには、.NET、x86、及び/又はx64が含まれる。
【0021】
いくつかの実施形態において、前記予測機械学習モデルは、サポートベクターマシン(SVM)、線形回帰、k-近傍法(KNN)アルゴリズム、ロジスティック回帰、ナイーブベイズ(naive Bayes)、線形判別分析、決定木、ニューラルネットワーク、又は類性学習からなるグループから選択された少なくとも1つの学習アルゴリズムを含む。
【0022】
いくつかの実施形態において、予測機械学習モデルは、ランダムフォレストを含んでいる。
【0023】
いくつかの実施形態において、前記ランダムフォレストは複数の決定木を含んでおり、各決定木は学習用のバイトセットで独立的に教育される。
【0024】
いくつかの実施形態において、モデル確率値は、複数の決定木確率値を平均化することによって決定され、各決定木確率値は、複数の決定木の各決定木を介してバイト列をトラバースすることによって生成される。
【0025】
ここに記載する実施形態のうちいくつかは、ファイルにおける実行可能なコードをプログラム的に識別するコンピュータシステムに関し、前記システムは、複数のコンピュータで実行可能な指示を記憶するように構成された一以上のコンピュータで読取り可能な記憶装置と、一以上の他のコンピュータで読取り可能な記憶装置と通信可能に接続された一以上のハードウェアコンピュータプロセッサとを備えており、前記一以上のハードウェアコンピュータプロセッサは、複数のコンピュータで実行可能な指示を実行することによって、前記システムに、ファイルの一部からバイト列にアクセスする処理と、前記バイト列から所定数のn-グラムを抽出する処理であって、前記各n-グラムは、前記バイト列中の隣接する一連のバイトを含んでおり、前記各n-グラム中の隣接する一連のバイトは、n個のバイトを含む、処理と、カウンタ列を生成する処理であって、前記カウンタ列の各カウンタは、前記n-グラムのうちの1つと関連付けられており、前記各カウンタは整数値を有しており、前記整数値は前記バイト列内の関連付けられたn-グラムの発生頻度に基づいて生成される、処理と、前記カウンタ列を入力特徴として予測機械学習モデルに提供する処理と、前記予測機械学習モデルによって、前記バイト列が実行可能なコードを含むモデル確率値を決定する処理とを行わせるように構成されている。
【0026】
ここに記載する実施形態のうちいくつかは、実行可能なコードから、マルウェア検出モデルに入力する機械学習特徴を自動的に抽出する、コンピュータで実施される方法に関する。前記方法は、コンピュータシステムによって、ファイルから前記実行可能なコードにアクセスする処理と、前記コンピュータシステムによって、埋込マトリクスを有する画像再スケーリングアルゴリズムに、前記実行可能なコードを入力する処理であって、前記画像再スケーリングアルゴリズムは、前記実行可能なコードの各バイトを、前記埋込マトリクスを用いて数ベクトルに変換して埋込ベクトル空間を作成し、前記変換を行っている間、前記実行可能なコードの順序が維持される、処理と、前記コンピュータシステムによって、前記埋込ベクトル空間の一以上のベクトル層をチャネルフィルタリングする処理であって、前記チャンネルフィルタリングの処理は、前記一以上のベクトル層を複数のブロックに統合する処理と、フィルタメカニズムを適用して一以上の固定サイズのベクトル入力を生成する処理であって、各固定サイズのベクトル入力は、対応するベクトル層、又は対応するベクトル層のブロックを表している、処理とを含み、前記コンピュータシステムによって、ニューラルネットワークの入力層に前記一以上の固定サイズのベクトル入力を入力する処理であって、前記ニューラルネットワークは、複数の処理部の層を備えており、前記複数の層は、少なくとも、前記入力層と、一以上の隠し層と、出力層とを備えており、前記複数の層の一連の層は、それぞれ前の層の出力値を入力値として使用し、前記出力層は、前記実行可能なコードの悪意度の分類を生成する、処理とを含み、前記コンピュータシステムによって、前記ニューラルネットワークの前記出力層直前の最終隠し層の出力値を抽出する処理と、前記コンピュータシステムによって、機械学習特徴として前記最終隠し層の出力値を、前記マルウェア検出モデルに提供する処理とを含み、前記コンピュータシステムは、コンピュータプロセッサと電子記憶媒体とを備えている。
【0027】
いくつかの実施形態において、前記ニューラルネットワークは教師あり学習モデル、半教師あり学習モデル、又は教師なし学習モデルを含む。
【0028】
いくつかの実施形態において、前記実行可能なコードは、ポータブル実行可能(PE)ファイルの一部である。
【0029】
いくつかの実施形態において、前記一以上の隠し層のそれぞれは、前記入力値に変換を行い、直後に連続する層への出力値を生成するように構成されている。
【0030】
いくつかの実施形態において、前記画像再スケーリングアルゴリズムは、前処理ニューラルネットワークを含んでおり、前記前処理ニューラルネットワークは、Word2Vecを含む。
【0031】
いくつかの実施形態において、前記方法は、前記ニューラルネットワークの出力層から、前記実行可能なコードの悪意度の分類を破棄する処理をさらに含む。
【0032】
いくつかの実施形態において、前記ニューラルネットワークは1~2000個の隠し層を含む。
【0033】
いくつかの実施形態において、前記フィルタメカニズムは、ローパスフィルタ、ボックスフィルタ、デルタフィルタ、又はガウスフィルタを含む。
【0034】
ここに記載する実施形態のうちいくつかは、実行可能なコードから、マルウェア検出モデルに入力する機械学習特徴を自動的に抽出する、コンピュータシステムに関する。前記システムは、複数のコンピュータで実行可能な指示を記憶するように構成された一以上のコンピュータで読取り可能な記憶装置と、一以上の他のコンピュータで読取り可能な記憶装置と通信可能に接続された一以上のハードウェアコンピュータプロセッサとを備えており、前記一以上のハードウェアコンピュータプロセッサは、複数のコンピュータで実行可能な指示を実行することによって、前記システムに、ファイルから前記実行可能なコードにアクセスする処理と、埋込マトリクスを有する画像再スケーリングアルゴリズムに、前記実行可能なコードを入力する処理であって、前記画像再スケーリングアルゴリズムは、前記実行可能なコードの各バイトを、前記埋込マトリクスを用いて数ベクトルに変換して埋込ベクトル空間を作成し、前記変換を行っている間、前記実行可能なコードの順序が維持される、処理と、前記埋込ベクトル空間の一以上のベクトル層をチャネルフィルタリングする処理であって、前記チャンネルフィルタリングは、前記一以上のベクトル層を複数のブロックに統合する処理と、フィルタメカニズムを適用して一以上の固定サイズのベクトル入力を生成する処理であって、各固定サイズのベクトル入力は、対応するベクトル層、又は対応するベクトル層のブロックを表している、処理とによって行われる、処理と、ニューラルネットワークの入力層に前記一以上の固定サイズのベクトル入力を入力する処理であって、前記ニューラルネットワークは、複数の処理部の層を備えており、前記複数の層は、少なくとも、前記入力層と、一以上の隠し層と、出力層とを備えており、前記複数の層の一連の層は、それぞれ前の層の出力値を入力値として使用し、前記出力層は、前記実行可能なコードの悪意度の分類を生成する、処理と、前記ニューラルネットワークの前記出力層直前の最終隠し層の出力値を抽出する処理と、機械学習特徴として前記最終隠し層の出力値を、前記マルウェア検出モデルに提供する処理とを含む。
【0035】
いくつかの実施形態において、前記ニューラルネットワークは教師あり学習モデル、半教師あり学習モデル、又は教師なし学習モデルを含む。
【0036】
いくつかの実施形態において、前記実行可能なコードは、ポータブル実行可能(PE)ファイルの一部である。
【0037】
いくつかの実施形態において、前記一以上の隠し層のそれぞれは、前記入力値に変換を行い、直後に連続する層への出力値を生成するように構成されている。
【0038】
いくつかの実施形態において、前記画像再スケーリングアルゴリズムは、前処理ニューラルネットワークを含んでおり、前記前処理ニューラルネットワークは、Word2Vecを含む。
【0039】
いくつかの実施形態において、前記システムは、前記ニューラルネットワークの出力層から、前記実行可能なコードの悪意度の分類を破棄するようになっている。
【0040】
いくつかの実施形態において、前記ニューラルネットワークは1~2000個の隠し層を含む。
【0041】
いくつかの実施形態において、前記フィルタメカニズムは、ローパスフィルタ、ボックスフィルタ、デルタフィルタ、又はガウスフィルタを含む。
【0042】
ここに記載する実施形態のうちいくつかは、ライブラリ位置独立コード検出用のシステムに関し、複数のコンピュータで実行可能な指示を記憶するように構成された一以上のコンピュータで読取り可能な記憶装置と、一以上の他のコンピュータで読取り可能な記憶装置と通信可能に接続された一以上のハードウェアコンピュータプロセッサとを備えており、前記一以上のハードウェアコンピュータプロセッサは、複数のコンピュータで実行可能な指示を実行することによって、前記システムに、監視対象シンボルのインポートアドレステーブル(IAT)エントリを実装する処理を行わせ、前記IATエントリを実装する処理は、監視対象シンボルのIATエントリ内の監視対象シンボルアドレスを改変アドレスで置換する処理と、前記改変アドレスの呼び出しに対してトランポリンコードを実行し、監視対象シンボルの静的呼び出しを検出及び検証する処理と、前記改変アドレスの呼び出しを監視対象シンボルアドレスにリダイレクトする処理とを含み、一以上のローダAPI関数を実装する処理を行わせ、前記ローダAPI関数を実装する処理は、前記一以上のローダAPI関数を改変し、前記トランポリンコードへ導く値を戻す処理と、前記監視対象シンボルの実行を迂回コードに迂回させて、前記監視対象シンボルの呼び出しを検出及び検証する処理と、前記監視対象シンボルの呼び出しを前記監視対象シンボルアドレスにリダイレクトする処理とを含み、前記監視対象シンボルの前記トランポリンコード及び前記迂回コードを監視させて、実行ファイル内の呼び出しが、静的呼び出し、動的呼び出し、又はローカル呼び出しを含んでいるかを判定する処理を行わせ、前記システムが、前記実行ファイル内の少なくとも1つの呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれていないと判断した場合、マルウェア検出システムのために、当該実行ファイルに不審な、又は、悪意ありのフラグを立てる処理を行わせる。
【0043】
いくつかの実施形態において、前記システムが、前記実行可能コード内の少なくとも1つの呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれていないと判断した場合、当該少なくとも1つの呼び出しを独立した呼び出しとして分類する。
【0044】
いくつかの実施形態において、前記システムが、前記呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれると判断した場合、当該呼び出しを良性呼び出しとして分類する。
【0045】
いくつかの実施形態において、前記システムが、前記呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれると判断した場合、前記実行ファイルを良性として分類する。
【0046】
いくつかの実施形態において、前記システムは、さらに前記トランポリンコード及び前記迂回コードを含むフッキングエンジンと、呼び出しに関するデータを記憶するように構成された、一以上の呼び出しデータベースとを含む。
【0047】
いくつかの実施形態において、前記動的呼び出しは、前記実行ファイルの実行中に、前記監視対象シンボルアドレスの取得を試みることが含まれる。
【0048】
いくつかの実施形態において、前記静的呼び出しには、前記実行ファイルの初期化中に、前記監視対象シンボルアドレスの取得を試みることが含まれる。
【0049】
いくつかの実施形態において、前記実行ファイルからの呼び出しにローカル呼び出しが含まれているか否かを判定する処理には、前記迂回コードを監視して、リターンアドレスが、前記実行ファイルの前記監視対象シンボルと同じアドレスになっているかを判定する処理が含まれる。
【0050】
いくつかの実施形態において、前記一以上のローダAPI関数は、GetModuleHandle又はGetProcAddressのいずれか一方又は両方を含む。
【0051】
いくつかの実施形態において、前記少なくとも1つの呼び出しは、前記実行ファイルが、前記監視対象シンボルを含むモジュールから取得されたメタデータを用いることによって初期化される。
【0052】
いくつかの実施形態において、前記少なくとも1つの呼び出しは、前記実行ファイルがローダの内部記録から取得したデータを用いることによって初期化される。
【0053】
いくつかの実施形態において、前記少なくとも1つの呼び出しは、前記実行ファイルが、前記トランポリンコードをトリガーすることなく監視対象シンボルを呼び出すことによって初期化される。
【0054】
ここに記載する実施形態のうちいくつかは、ライブラリ位置独立コード検出を行うためのコンピュータにより実施される方法に関し、前記方法は、コンピュータシステムによって、監視対象シンボルのインポートアドレステーブル(IAT)エントリを実装する処理であって、前記IATエントリを実装する処理には、監視対象シンボルのIATエントリ内の監視対象シンボルアドレスを改変アドレスで置換する処理と、前記改変アドレスの呼び出しに対してトランポリンコードを実行し、監視対象シンボルの静的呼び出しを検出及び検証する処理と、前記改変アドレスの呼び出しを監視対象シンボルアドレスにリダイレクトする処理とが含まれる、処理と、前記コンピュータシステムによって、一以上のローダAPI関数を実装する処理であって、前記ローダAPI関数を実装する処理には、前記一以上のローダAPI関数を改変し、前記トランポリンコードへ導く値を戻す処理と、前記監視対象シンボルの実行を迂回コードに迂回させて、前記監視対象シンボルの呼び出しを検出及び検証する処理と、前記監視対象シンボルの呼び出しを前記監視対象シンボルアドレスにリダイレクトする処理とが含まれる、処理と、前記コンピュータシステムによって、前記監視対象シンボルの前記トランポリンコード及び前記迂回コードを監視する処理であって、実行ファイル内の呼び出しが、静的呼び出し、動的呼び出し、又はローカル呼び出しを含んでいるかを判定する処理と、前記コンピュータシステムが、前記実行ファイル内の少なくとも1つの呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれていないと判断した場合、前記コンピュータシステムがマルウェア検出システムのために、当該実行ファイルに不審な、又は、悪意ありのフラグを立てる処理と、を備え、前記コンピュータシステムはコンピュータプロセッサと電子記憶媒体を備えている。
【0055】
いくつかの実施形態において、前記方法は、前記コンピュータシステムが、少なくとも1つの呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれていないと判断した場合、当該少なくとも1つの呼び出しを独立した呼び出しとして分類する処理を含むことを特徴とする方法。
【0056】
いくつかの実施形態において、前記方法は、前記コンピュータシステムが前記呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれると判断した場合、当該呼び出しを良性呼び出しとして分類する処理を含む。
【0057】
いくつかの実施形態において、前記方法は、前記コンピュータシステムが前記呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれると判断した場合、前記実行ファイルを良性として分類する処理を含む。
【0058】
いくつかの実施形態において、前記トランポリンコード及び前記迂回コードは、フッキングエンジンの一以上の部分を含んでおり、前記フッキングエンジンは、前記呼び出しに関連するデータを記憶するように構成された呼び出しデータベースに接続されている。
【0059】
いくつかの実施形態において、前記動的呼び出しは、前記実行ファイルの実行中に、前記監視対象シンボルアドレスの取得を試みることが含まれる。
【0060】
いくつかの実施形態において、前記静的呼び出しには、前記実行ファイルの初期化中に、前記監視対象シンボルアドレスの取得を試みることが含まれる。
【0061】
いくつかの実施形態において、前記実行ファイルからの呼び出しにローカル呼び出しが含まれているか否かを判定する処理には、前記迂回コードを監視して、リターンアドレスが、前記実行ファイルの前記監視対象シンボルと同じアドレスになっているかを判定する処理が含まれる。
【0062】
いくつかの実施形態において、前記一以上のローダAPI関数は、GetModuleHandle又はGetProcAddressのいずれか一方又は両方を含む。
【0063】
いくつかの実施形態において、前記少なくとも1つの呼び出しは、前記実行ファイルが、前記監視対象シンボルを含むモジュールから取得されたメタデータを用いることによって初期化される。
【0064】
いくつかの実施形態において、前記少なくとも1つの呼び出しは、前記実行ファイルがローダの内部記録から取得したデータを用いることによって初期化される。
【0065】
いくつかの実施形態において、前記少なくとも1つの呼び出しは、前記実行ファイルが、前記トランポリンコードをトリガーすることなく監視対象シンボルを呼び出すことによって初期化される。
【図面の簡単な説明】
【0066】
本開示の特徴は、添付の図面と共に以下の説明からより完全に明らかになるであろう。これら図面は、本開示に従ったいくつかの実施形態のみを示すものであり、その範囲を限定するものとはみなされないことを理解した上で、本開示では、添付の図面の使用を通じてさらに特異性及び詳細を説明する。
【0067】
図面は、例示的な実施形態を示すために提供されるものであり、開示の範囲を制限することを意図するものではない。ここに記載されるシステム及び方法は、添付の図面と共に以下の説明を参照することによってより深く理解できるであろう。
【0068】
図1A】ポータブル実行可能(PE)ファイル形式の例を示す図である。
【0069】
図1B】PEファイルのセクションの例を示す図である。
【0070】
図2A】ここに記載するいくつかの実施形態による、機械コードの例示的断片を示す図である。
【0071】
図2B】ここに記載するいくつかの実施形態による、n-グラム生成と比較したテキスト特徴生成のフローチャートである。
【0072】
図3】いくつかの実施形態による、一以上のランダムフォレストを使用してx86、x64、及び.NETアーキテクチャの実行可能なコードを検出する方法のフローチャートである。
【0073】
図4A】ここに記載するいくつかの実施形態による、ツリー構造の例示的なフローチャートである。
【0074】
図4B】ここに記載するいくつかの実施形態による、ランダムフォレスト構造の例示的なフローチャートである。
【0075】
図5】ここに記載するいくつかの実施形態による、コード検出モデルを教育及びテストするための例示的なフローチャートである。
【0076】
図6】ここに記載するいくつかの実施形態による、ニューラルネットワークを使用した自動特徴抽出方法の例示的なフローチャートである。
【0077】
図7】ここに記載するいくつかの実施形態による、ニューラルネットワークを使用した特徴抽出方法の例を示す図である。
【0078】
図8】ここに記載するいくつかの実施形態による、例示的なチャネルフィルタリングメカニズムを示す図である。
【0079】
図9】ここに記載するいくつかの実施形態による、フィルタリングシステムの挙動を示すボックス関数の例を示す図である。
【0080】
図10】ここに記載するいくつかの実施形態による、フィルタリングシステムの挙動を示すガウス関数の例を示す図である。
【0081】
図11】ここに記載するいくつかの実施形態による、フィルタリングシステムの挙動を示すデルタ関数の例を示す図である。
【0082】
図12】ここに記載するいくつかの実施形態による、静的リンクプロセスの例を示す図である。
【0083】
図13】ここに記載するいくつかの実施形態による、ライブラリに依存しないコード検出システム及び静的リンクプロセスの例示的な方法を示す図である。
【0084】
図14】ここに記載するいくつかの実施形態による、ライブラリに依存しないコード検出システムの例を示す図である。
【0085】
図15】ここに記載するいくつかの実施形態による、動的フロープロセスの例を示す図である。
【0086】
図16】ここに記載するいくつかの実施形態による、ライブラリに依存しないコード検出システム及び動的フロープロセスの例示的な方法を示す図である。
【0087】
図17】実行可能コード検出、自動特徴抽出及び位置独立コード検出システムの一以上の実施形態を実施するソフトウェアを実行するように構成されたコンピュータハードウェアシステムの実施形態を示すブロック図である。
【詳細な説明】
【0088】
特定の好ましい実施形態及び実施例が以下に開示されるが、本発明の主題は、具体的に開示された実施形態を超えて、他の代替的な実施形態、及び/又は、使用並びにそれらの変形例、及び均等物に及ぶ。したがって、ここに添付される特許請求の範囲は、以下に記載される特定の実施形態のいずれによっても制限されない。例えば、ここに開示される任意の方法又はプロセスにおいて、方法又はプロセスの作用又は動作は、任意の適切な順序で実行することが可能であり、必ずしもここに開示される特定の順序に限定されない。特定の実施形態の理解をしやすくするために、各種動作は、複数の個別の動作として順番に記載することがあるが、記載の順番が、これらの動作が順番に依存することを暗示すると解釈されるべきではない。さらに、ここに記載される構造、システム、及び/又はデバイスは、一体化された構成要素又は別個のコンポーネントとして具現化することができる。種々の実施形態を比較するために、これら実施形態の特定の態様及び利点が説明される。しかし、これら態様又は利点が全て特定の実施形態によって達成されるわけではない。従って、例えば、種々の実施形態は、ここに教示又は示唆され得る他の態様又は利点を必ずしも達成することなく、ここに教示される1つの利点又は利点のグループを達成又は最適化する方法で実施されることがある。
【0089】
以下の詳細な説明では、コンピュータ及びサイバーセキュリティシステム、デバイス、及び方法を実装するための特定の特徴を、図示されるものも含む特定の説明された実施形態に関連して検討する。以下に、いくつかの実施形態、実施例、及び図を開示するが、当業者であれば、ここに記載された発明が、具体的に開示された実施形態、実施例、及び図を超えて拡大され、本発明の他の用途、ならびにそれらの明白な変形及び均等物を含むことを理解するであろう。本発明の実施形態は、添付の図面を参照して説明され、全体を通して、同様の符号は同様の要素を示すものとする。ここに記載される説明において使用する用語は、単に本発明の特定の実施形態の詳細な説明に関連して使用されているという理由で、限定的又は制限的に解釈されることを意図していない。さらに、本発明の実施形態は、いくつかの新規な特徴を含むことがあるが、単一の特徴がその望ましい特性に単独で寄与することはなく、また、ここに記載された本発明を実施するために不可欠でもない。

実行可能コード検出
【0090】
本開示におけるいくつかの実施形態は、ファイルの従来とは異なる一以上の領域に隠され得る実行可能なコードを識別するための技術に関する。いくつかの実施形態において、この隠された実行可能コードが一旦検出されると、マルウェア検出を含む種々の目的のためのさらなる処理又は分析を行うためにフラグを立てることができる。

導入
【0091】
一般的に、ファイル形式は、ファイルの全体的な構造や各ビットをどのように使用して情報をデジタル記憶媒体において暗号化するかを定めることにより、コンピュータファイルにおいて記憶する情報の暗号化方法を標準化するのに役立っている。ファイル形式の多くが、複数の個別の領域を有しており、それぞれの領域が異なる目的で使用される。
【0092】
従来のマルウェア検出ソリューションでは、通常、ファイルのファイル形式に応じて、ファイルの特定のセクションでのみ不審なプログラムロジックを検索する。しかし、ファイル内の普段はコードやロジックが含まれず、従来のマルウェア検出ソリューションが検索しない一以上の領域に、悪意のあるコードを隠すことにより、マルウェアがこれらのソリューションで使用される検出ロジックをすり抜けることがあるため問題が残る。例えば、多くのファイルには、ファイルを表すアイコンが含まれるセクションがある。多くの場合、このアイコンを保持するセクションに実行可能なコードを配置する実用的な理由はない。しかし、多くのマルウェアやその他の攻撃者は、このような従来のマルウェア検出やアンチウイルスソフトが検査をしない場所に、悪意のあるコードを配置する。したがって、コンピュータマシーンで、マルウェアを実行する場合、隠された場所から実行可能なコードを抽出して実行するだけでよい。このようにして、悪意あるソフトウェアは、そのコードを既存のマルウェア検出やアンチウイルス製品から、巧みに隠すことができる。
【0093】
さらに、ファイル内のコードが実行可能なコードであるか否かを検出することは些細なことではない。コードを見るだけでコードが実行可能かどうかを判断するロジック的な方法はない。したがって、コードが実行可能であるか否かを検証するには、コードをコンピュータ内で実行しなければならない。つまり、従来の方法を用いて、バイト列が有効な実行可能コードであるかを判断するために、マルウェア検出及びアンチウィルスソフトウェアは、バイト列の実行を試みて、当該バイト列が有効な実行可能コードとして解釈できるかどうかを確認しなければならない。しかし、コードの実行を試みるということは、マシンの性能を大幅に阻害し、及び/又は、コードの実行中に誤って悪意あるソフトウェアを導入してしまう可能性があるため、好ましくない。コードをサンドボックス内で安全に実行できたとしても、コードを実行し、実行し、チェックすることは、実行を伴わない実行可能コードの自動検出と比較して、パフォーマンスの低下をもたらす。さらに、サンドボックス内でのコードの実行は、それ自体が本来必要とされない処理能力とリソースを必要とするため、コンピュータシステムの処理能力を低下させる。
【0094】
したがって、まずファイルに隠された実行可能なコードを、正確かつプログラム的に識別し、その後従来のマルウェア解析用にフラグを立てる必要性がある。ここに記載されるいくつかの実施形態によるシステム及び方法は、対象のコードを実行して当該対象コードが実行可能コードかどうかを判定することなく、ファイルに隠された実行可能なコードを識別、検出することを可能とする。言い換えると、ここに記載するいくつかの実施形態によれば、ファイルに隠された実行可能コードを識別及び検出するシステム及び/又は方法であって、前記システム及び/又は方法は、対象コードが実行可能コードであるかどうかを見るために当該対象コードを実行することを含まないシステム及び/又は方法が提供される。具体的には、ここに記載するいくつかの実施形態において、コードの実行を試みる必要なく、実行可能なコードのパターンを理解するために、一以上の機械学習モデルを活用してもよい。具体的には、ここに記載するいくつかの実施形態は、実行可能ファイル内の特定の場所を検索し、当該特定の場所に実行可能なコードが含まれているか否かを判定する機械学習モデルに関する。悪意のある攻撃者は、多くの場合、ファイルの従来とは異なる場所にコードを隠す、又は隠蔽しようとする。したがって、いくつかの実施形態では、ファイルからの一以上のバイト列を入力として、一以上のセクションが有効な実行可能コードを含んでいる可能性を判定するために一以上の機械学習モデルを活用してもよい。
【0095】
従来のマルウェア検出ソリューションは、インポート、文字列、不審な関数呼び出しのシーケンス等の悪意のあるパターンを検出する。しかし、マルウェアは、コードの悪意のある部分(ペイロード等)をファイル内のリソース又は非表示領域内に隠すことにより、これらのソリューションで使用される検出ロジックをすり抜けることが多々ある。これらの非表示領域には通常、実行可能コードやプログラムロジックが含まれていないため、従来の検出システムでは検索されないことがあり、マルウェアが当該システムによる検出をすり抜ける可能性がある。
【0096】
いくつかの実施形態において、ここに開示される技術は、ファイルのいかなる部分からでも得られるバイトストリーム、特に従来のマルウェア検出ソリューションが無視するファイルの非表示領域からのバイトストリームから実行可能コードの自動検出を可能にし、この技術的欠点に対処している。ポータブル実行可能(PE)ファイル内のリソース等、数カ所にコードが存在するだけで、非常に悪意あるアクティビティの可能性があり、検出ソリューションに非常に役立つため、これら技術を、一例として、また技術の理解を容易にするために、PEファイルの場合に関して説明する。しかし、ここに記載される技術は、いずれの適切なファイル形式にも適用可能である。例えば、ここに記載するコード検出技術は、他の実行可能なファイル形式(例:ELFファイル)及び非実行可能なファイル形式(例:PDFファイル)にも利用できる。
【0097】
より具体的には、いくつかの実施形態において、特定のバイトストリームが実行可能なコードかどうかを検出するように、機械学習モデルを教育してもよい。この機械学習モデルを、その後、一般的に従来の検出ソリューションファイルが分析しない領域を含む、一以上の異なる領域に対して実行し、一以上のファイル内の実行可能なコードを検出してもよい。検出された実行可能コードには、マルウェア検出ソフトウェアで、さらに解析すべくフラグを立ててもよく、これにより隠れたマルウェアペイロードの検出が大幅に改善する。いくつかの実施形態において、ファイルの一部のみをモデルに渡してもよい。いくつかの実施形態において、ファイル内のデータ全体をモデルに渡してもよい。

ポータブル実行可能(PE)
【0098】
図1Aは、ポータブル実行可能(PE)ファイル形式に関連する例示的な構造を示す図である。例示的な目的、及びここに記載する技術の理解を容易にするために、PEファイルに関連する構造のいくつかを以下に記載する。特に図1Aに関してここに記載するように、PEファイルに関連する構造には、マルウェアの実行可能コードを隠すことができる場所がある場合がある。
【0099】
いくつかの実施形態において、ポータブル実行可能(PE)ファイルは、実行可能ファイル、オブジェクトコード、DLL、FONフォントファイル、及び特定のバージョンのWindowsオペレーティングシステムで使用されるその他のファイル形式である。PEファイルは、ファイルをどのようにコンピュータシステムのメモリにマッピングするかを動的リンカに通知する多数のヘッダ及び/又はセクションを含んでいてもよい。実行可能イメージはいくつかの異なる領域を含むことがあり、それぞれが異なるメモリ保護を必要とすることがある。例えば、一般的に(プログラムコードを保持する).textセクションは、実行/読取り専用としてマッピングされ、(グローバル変数を保持する).dataセクションは、非実行/読取り/書き込みとしてマッピングされる。図1Bは、例としての許可132を含むPEファイルのセクションの例を示している。セクション116は、例えば、ネーム126、仮想サイズ128、及び仮想アドレス134を含んでいる。いくつかの実施形態において、動的リンカの機能の一部は、各セクションを個別にメモリにマッピングし、ヘッダ内の指示に従って、結果として得られる領域に正しい許可132を割り当てることである。
【0100】
PEファイルは、ディスクオペレーティングシステム(DOS)ヘッダ102を含むことがある。いくつかの実施形態において、DOSヘッダ102は、各PEファイルの最初の64バイトで開始することがある。DOSヘッダ102は、MS-DOS互換ファイルタイプを識別することによって、バージョンチェック及び下位互換性において機能を果たすこともある。旧バージョンのWindowsオペレーティングシステム及びMS-DOSオペレーティングシステムでは、オペレーティングシステムがDOSヘッダ102を読み取って、ファイルと互換性があるかどうかを判断することがある。例えば、MS-DOSバージョン6.0上でWindows NTの実行ファイルの実行を試みると、オペレーティングシステムはDOSヘッダ102をチェックし、「このプログラムはDOSモードでは実行できません。」と表示することがある。もし、代わりに、PEファイル形式の最初の部分として、DOSヘッダ102が含まれていなかった場合、オペレーティングシステムは単にファイルのロードに失敗し、「指定された名前は内部又は外部コマンド、動作可能なプログラム、又はバッチファイルとして認識されません。」と、全く役にたたない提示を行う。
【0101】
PEファイルは、またDOSコード(「スタブ」)104を含んでいる場合があり、実行可能ファイルをロードする際に実行されるスタブと呼ばれるコードを含んでいる場合がある。通常、DOSスタブ104は、「このプログラムはDOSモードでは実行できません。」というメッセージのように、文字列を出力する。これにより、PEファイルをDOSシステム上で実行した場合に、PEファイルによってクラッシュが発生しないようにし、代わりに、メッセージを表示させた後にプログラムを終了することができる。しかし、Microsoftのリンカは、標準的なスタブ以外のスタブにリンクさせるオプションを含んでおり、PEファイルの作成者はそこにカスタムコードを配置することができる。一般に、オフセット3Ch(60)において、ファイルの開始に対してPEブロックの開始を指定するDWORDがある限り、任意のDOSプログラムをDOSスタブ104に配置することができる。いくつかの実施形態において、DOSスタブ104は、完全なDOSプログラムとすることができる。
【0102】
いくつかの実施形態において、PEファイルは、一以上のNTヘッダ106を含むことができ、PEファイルヘッダ108、画像オプションヘッダ110、及び/又はデータディレクトリ112の配列を含むことができる。PEファイルヘッダ108は、コードの位置及びコードサイズを含む、PEファイルの残りがどのようなものかを定義するフィールドの集合を含んでいてもよい。さらに、オペレーティングシステム又は他のアプリケーションが、ファイルの処理方法を決定するための高レベル情報が、PEファイルヘッダ108内に存在してもよい。例えば、DEC(登録商標)Alpha、MIPS R4000、Intel(登録商標)x86、又は他の何らかのプロセッサなど、実行可能ファイルがどのタイプのマシン又はプロセッサのために構築されたかを示すフィールドが存在してもよく、このフィールドを参照することにより、ファイルデータの残りの部分をそれ以上確認することなく、ファイルの処理方法を迅速に決定することができる。PEファイルヘッダ108はまた、情報をより容易かつ効率的に抽出するために、ファイル内にあるセクションの数、より具体的にはセクションヘッダ及びセクション本体の数を識別するフィールドを含んでいてもよい。各セクションヘッダとセクション本体はファイル内で順番にレイアウトされることがあるため、セクションヘッダとセクション本体の終了位置を判断するためにセクションの数が必要なことがある。画像オプションヘッダ110は、実行可能イメージに関する意味のある情報、例えば、初期スタックサイズ、プログラムエントリポイント位置、好ましいベースアドレス、オペレーティングシステムバージョン、及び/又はセクションの並びに関する情報などを含んでいてもよい。データディレクトリ112のエントリの配列は、セクション本体内に含まれるデータディレクトリに対する相対仮想アドレスを含むことがある。各データディレクトリは、特定のセクション本体のデータがどのように構成されているかを示すことができる。対応するセクションヘッダー及びデータディレクトリエントリがセクション本体内のデータを検索して解読するのに十分な情報を提供している限り、セクション本体は厳密なファイル構造がないこともあり、ほとんどどのようにも編成可能である。
【0103】
PEファイルはまた、セクションヘッダ114のテーブルを含んでいてもよく、当該テーブルはNTヘッダ106の直後に続けてもよい。前述したように、PEファイルは、PEファイルヘッダ108内にマッピングされたセクションを含んでいてもよく、これらセクションにコード、データ、リソース、及び/又は、その他の実行可能情報を含むファイルのコンテンツが含まれていてもよい。各セクションは、ヘッダ及び本体を含んでいてもよく、ここに生データ又は実行可能コードを格納することができる。セクションテーブルの行やエントリを各セクションヘッダが含んでいることがあるため、セクションヘッダを一緒に配置してもよい。各セクションヘッダは、対応するセクションのデータサイズを識別するためのフィールド、及び対応するセクションのデータ(例:セクション本体)位置へのポインタを含む、少なくとも40バイトのエントリを含んでいてもよい。
【0104】
PEファイルはまた、複数のセクション116(即ち、セクション本体)を含んでいてもよい。セクション116は、特定の定義済みセクションを含んでいてもよい。例えば、Windows NT用のアプリケーションには通常、9つの定義済みセクション(.text、.bss、.rdata、.data、.rsrc、.edata、.idata、.pdata、及び.debug)がある。アプリケーションによっては、これらのセクションを全て活用しないこともあるが、中には特定のニーズに合わせるためにさらに多くのセクションを定義することもある。図1A図1Bに示す定義済みセクションには、.textセクションS118、.dataセクションS120、.edataセクションS122、及び.rsrcセクションS124が含まれていていてもよい。
【0105】
図1Aから、PEファイルには、マルウェアの実行可能コードを隠すことができる多くの場所があり得ることがわかる。実行可能コードを隠すさらなる領域としては、リソース、文字列、変数、オーバーレイ、及び/又は、実行許可のないセクションが挙げられる。リソースには、PEファイルが必要に応じて使用できる、外部ファイル、及び/又は、外部データが含まれていてもよい。リソースには、マルウェア検出ソリューションが通常検査しないPEファイルの領域が含まれていることがあり、悪意のあるコードを隠すのに利用できる。リソース内で見つかった実行可能コードは、どのような種類であれ、非常に疑わしく、いくつかの実施形態において、ここに記載されるシステム及び方法では、リソースで見つかった実行可能なコードを識別し、さらなる解析のためにフラグを立てるように構成されている。
【0106】
いくつかの実施形態において、実行可能コードが隠され得る別のファイル位置は、バイナリ文字列及びバイナリ変数内であり、バイト列が含まれていることがある。通常のテキストデータを含む文字列及び変数とは異なり、バイナリ文字列及びバイナリ変数は、非従来型データ(例えば、メディア)を保持するために使用されることがある。いくつかの実施形態において、マルウェアのペイロードがバイナリ変数やバイナリ文字列に隠されていることが一般的である。これらの領域におけるコードの存在は、強く悪意を示唆しており、いくつかの実施形態において、ここに記載されるシステム及び方法では、バイナリ文字列やバイナリ変数で見つかった実行可能なコードを識別し、さらなる解析のためにフラグを立てるように構成されている。
【0107】
いくつかの実施形態において、実行可能コードが隠され得る別の位置が、オーバーレイであることもある。PEファイルのオーバーレイは、PEファイルに追加されるあらゆるデータと定義されることがあり、メモリにマッピングされることを意図していないこともある。従来のマルウェア検出ソリューションは一般的にオーバーレイを検査しないので、いくつかの実施形態において、マルウェア設計者がペイロードをオーバーレイに隠すことは一般的に行われていることである。したがって、いくつかの実施形態において、ここに記載されるシステム及び方法は、オーバーレイで見つかった実行可能コードを識別し、さらなる解析のためにフラグを立てるように構成されている。
【0108】
いくつかの実施形態において、実行可能コードを隠され得る別の位置が、実行許可のないあらゆるセクション内であることもある。前述したように、各PEファイルは複数のセクションで構成されることがある。各セクションには、それぞれ読み取り、書き込み、及び、実行の許可を設定できる。PEファイルをメモリにロードする際に、PEファイルに前記許可がセクションから踏襲されることがある。従来の検出システムは通常、実行許可のないセクション内で悪意のあるコードをチェックしないので、いくつかの実施形態において、マルウェアはよくこれらのセクションに悪意のある部分を隠している。これらのセクションにおけるあらゆる類のコードの存在は、悪意を示唆する場合がある。したがって、いくつかの実施形態において、ここに記載されるシステム及び方法は、実行許可のないセクションで見つかった実行可能コードを識別し、さらなる解析のためにフラグを立てるように構成されている。

実行可能コード検出メカニズム
【0109】
以下に、ファイル内の実行可能コード(マルウェアに関連する場合と関連しない場合がある)を識別するためのシステム及び方法について説明する。いくつかの実施形態において、悪意のあるコードは、ファイルの一般的に実行可能コードと関連しないが、マルウェアペイロードの隠し場所とすることができる領域に配置される。いくつかの実施形態は、PEファイルと当該ファイルの特定の位置に関連しているが、ここに記載のいくつかの実施形態は、あらゆるファイル形式又はファイルのあらゆる場所においてコードを検出するのに活用できる。マルウェア検出ソリューションとして正常に利用できる実行可能コード検出メカニズムを作成し、ファイル内の異なる部分で実行するのは全く容易ではない。第一に、前記メカニズムは、入力サイズが独立している必要がある(例:異なるファイルサイズ全体に正常に機能しなければならない)。第二に、前記メカニズムはファイルの多くの場所に対して適用される可能性があるため、偽陽性(又は偽陰性)を回避できるように非常に高い精度を維持する必要がある。最後に、バイトストリームが実行可能コードか否かをプログラム的に予測するタスクについてはまだ十分に調査されていない。
【0110】
いくつかの実施形態において、例えば、ファイルからのバイトストリームは、特定の機能をプログラムする特定の順序の単語又はパターンを有する言語として扱われる。したがって、ここに記載されるシステム及び方法は、一連の単語と同様の方法でコードストリームを扱うことができる。ここに記載されるシステム及び方法は、実行可能コードが多くの共通するパターンを有しているという事実を利用する。いくつかの実施形態において、実行可能コード内に見出されるこれらのパターンは、例えば、特定のバイトパターンをカウントしてデータが実行可能コードであるか否かを検出することにより、検出目的で利用することができる。より具体的には、いくつかの実施形態において、データからn-グラム特徴を抽出してもよい。n-グラムは、長さがnの連続する単語列(又は、コードの場合バイト列)を含んでいてもよい。各n-グラム特徴は、特定のn-グラムがデータ内に登場する回数を含むカウンタを含んでいてもよい。しかしながら、n-グラムの抽出は、バイトストリームから特徴を抽出するたった一つの例示的な方法を含んでいることが理解されるであろう。いくつかの実施形態において、バイトストリームから特徴を生成するために、他の特徴生成アルゴリズムが利用されていてもよい。
【0111】
より具体的には、いくつかの実施形態において、コードセクションから、最も頻度の高いn-グラムの所定数を決定してもよい。いくつかの実施形態において、n-グラムの前記所定数は約500であってもよい。いくつかの実施形態において、n-グラムの前記所定数は、約50、100、150、200、250、300、350、400、450、500、550、600、650、700、750、800、850、900、1000、1500、2000、2500、5000、10000、及び/又は、これらいずれか2つの値間の任意の値であってもよい。いくつかの実施形態において、n-グラムの数は予め定められていなくてもよく、代わりに、コードセクションに存在する各n-グラムが使用されてもよい。いくつかの実施形態において、n-グラムはbi-グラム(即ち、n=2)を含んでいてもよい。いくつかの実施形態において、n-グラムは、ユニグラム(1-グラム)、bi-グラム(2-グラム)、tri-グラム(3-グラム)、4-グラム、5-グラム、6-グラム、7-グラム、8-グラム、9-グラム、10-グラム、11-グラム、12-グラム、20-グラム、50-グラム、100-グラム、200-グラム、500-グラム、及び/又は、これら値のいずれか2つの間の任意の値を含んでいてもよい。いくつかの実施形態において、nの長さを決定する際に、生成される特徴の数と、サンプルの数との間にトレードオフが発生することがある。いくつかの実施形態において、複数の長さのn-グラムを使用してもよい。例えば、予想モデルの特徴として、bi-グラムとtri-グラムとを別々に使用してもよく、組み合わせて使用してもよい。いくつかの実施形態において、予想モデルの特徴として、全ての可能な長さのn-グラムを別々に使用してもよく、組み合わせて使用してもよい。いくつかの実施形態において、異なる長さのn-グラムを抽出するには、各長さについて別々に特徴を抽出する必要があることもある。抽出プロセスは、図2Bを参照して以下に説明される。
【0112】
いくつかの実施形態において、n-グラム特徴を使用する際に、各カウンタはデータ長によって正規化される。いくつかの実施形態において、これらのカウンタを予測機械学習モデルの特徴として使用することができ、これを使用して、PEファイル内のこれらの領域の1つにおけるバイトストリームが実行可能コードである可能性が高いか否かを判定することができる。
【0113】
いくつかの実施形態において、このような機械学習モデルにbi-グラムを特徴として使用することにより、データサイズに対して不変でありながら、非常に高い精度率を達成することができる。いくつかの実施形態において、従来のマルウェア検出及び解析において特徴抽出の一部としてコード検出プロセスが使用されてもよい。そのような実施形態の一部において、ここに記載されるシステム及び方法は、ファイル内の種々の場所において、実行可能なコードが含まれ得る確率を推測し、当該確率をマルウェア検出用モデルの構築に使用してもよい。例えば、コードセクションを入力として利用し、コードセクションの種々の特徴(インポートやファイル内の文字列、及びエントロピー等)をチェックするメインのマルウェア検出モデルを利用してもよい。いくつかの実施形態において、ランダムフォレストからの確率は、メインのマルウェア検出モデルの3つ以上の特徴として機能することができる。さらに、いくつかの実施形態において、予測された実行可能コードは、従来のマルウェア検出及び解析プログラムによるさらなる評価のために、フラグを立ててもよい。

バイトストリームの前処理
【0114】
図2Aは、機械コードの例示的断片202を示す図である。より具体的には、図2Aは、バイト204の例示的なbi-グラム(「B8 22」)が強調されたx86機械コードの断片を示している。いくつかの実施形態において、ストリーム内の次のbi-グラムは「22 11」であり、この後に「11 00」が続き以下同様である。なお、実行可能なコードは、いずれのコンピューティングアーキテクチャ(例:x86、AMD64、.NET、ARM、等)に関連付けられていてもよい。いくつかの実施形態において、実行可能なコードは一般的に、x86、AMD64、及び.NETの3つのアーキテクチャの1つを含んでいる。いくつかの実施形態において、ここに記載される機械学習モデルは、これらのアーキテクチャのそれぞれについて実行可能なコードを検出するために訓練されてもよく、各タイプについて異なるn-グラムが選択されてもよく、ファイルがどのアーキテクチャに基づいているかに応じて使用できる3つの別個のモデルとして実装することができる。
【0115】
バイトストリームからのn-グラム抽出には、予測機械学習モデルへの入力として特徴を提供するプロセスが含まれる。n-グラムは、本質的に繰り返されるテキストの一連の単語として機能してもよい。比較のために、図2Bには、単語の文字列を利用して特徴を生成するプロセスが示されている。図示の例では、3つの単語文字列206が示されており、これをファイル内のバイト文字列と比較することができる。いくつかの実施形態において、前処理には、バイト文字列を分析して、n-グラム208のコーパスを生成することが含まれていてもよく、バイト文字列内に長さnの最も一般的なバイト列が所定数を含まれていてもよい。図示された比較例では、関連する単語の文字列206内に存在する13個のbi-グラムを含む、bi-グラムのコーパス208が生成されている。いくつかの実施形態において、n-グラム特徴210は、バイト文字列を順に移動し、n-グラムコーパス208の各n-グラムのインスタンスが各バイト文字列にいくつ存在するかをカウントすることによって、n-グラムコーパス208から作成することができる。例示的な比較例では、特徴210が生成されており、各特徴は13個のカウンタを含んでおり、各カウンタは各単語ストリーム206における、コーパス208の0~13の番号が振られたn-グラムの数に対応している。なお、同一のバイトストリーム内に同一のn-グラムが複数あることがあるので、各カウンタは1を超えてもよい。したがって、一以上のバイトストリームが実行可能コードを含んでいるか否かを判定する予測モデルへの入力に対して、一以上のn-グラム特徴が生成されてもよい。
【0116】
いくつかの実施形態において、n-グラムの利用は、データの静的構造をキャプチャすることが可能となり、バイトストリームが実行可能コードであるか否かを判定するために必要となる情報を予測モデルに提供できるので、重要となり得る。

予測モデル
【0117】
いくつかの実施形態において、任意の適切な機械学習アルゴリズム、又はその組み合わせを使用して、予測機械学習モデルを構築することができる。このような機械学習アルゴリズムの例としては、サポートベクターマシン(SVM)、線形回帰、k-近傍法(KNN)アルゴリズム、ロジスティック回帰、ナイーブベイズ(naive Bayes)、線形判別分析、決定木、ニューラルネットワーク、類性学習等が挙げられる。いくつかの実施形態において、予測機械学習モデルの構築に使用される機械学習アルゴリズムは、分類(例:コードを実行可能なコードか非実行可能コードに分類)を行うことができてもよく、任意の分類子が選択されてもよい。いくつかの実施形態において、またここで例示目的で図面に開示されるように、機械学習アルゴリズムとしてランダムフォレストアルゴリズムが使用されてもよい。
【0118】
ランダムフォレストは、複数の決定木を利用する機械学習を使用するアンサンブル法が含まれていてもよい。いくつかの実施形態において、決定木は複雑なデータセットを適合させ、分類タスクと回帰タスクの両方を行うことができる機械学習アルゴリズムを含んでいてもよい。各マシンアーキテクチャ(例:x86、AMD64、.NET等)ごとに、当該アーキテクチャ内の多数のコードセクションを収集して入力データとして使用してもよい。コードセクションには、実行可能コードが含まれているものもあり、どのセクションに実行可能コードが含まれているかがわかっている場合もある。このようにして、モデルはバイトストリームがコードを含んでいる確率をどのように判定するかを理解する。
【0119】
ランダムフォレストは、これらの決定木のアンサンブルを含んでいてもよく、各決定木は、同一データのノイズの多いバージョンに対して独立的に教育される。ノイズは、例えば、カラム・サブサンプリング又はデータリサンプリングの形態であってもよい。推論中、決定木による決定は、最大投票又は平均化によって結合されてもよい。
【0120】
図3には、本開示のいくつかの実施形態による、n-グラム特徴を入力データとするランダムフォレストモデルを使った結果の例を示す図である。上述したように、ファイル(例えば、PE100)の各セクション(例:データディレクトリ112、及びセクション116)からのコードは、例えば、bi-グラムに分割されてもよく、500個の最も高頻度のbi-グラムを、これらbi-グラムのそれぞれがコードセクションを通して出現した回数のカウントと共に決定してもよい。これら500個の最も高頻度のbi-グラムは、データ長で正規化され、線302及び304で示されるように予測機械学習モデルへの入力特徴として使用されてもよい。いくつかの実施形態において、システム又はその機械学習アルゴリズムは、アーキテクチャのそれぞれに対して、3つのランダムフォレスト306、308、310を含んでいてもよく、各ランダムフォレストは、例えば、500個の特徴を含んでいてもよい。特徴の生成には、データ(例:O(n))を一回横断(トラバース)する必要があり、モデルによって複数回横断することによって完了することもある。
【0121】
いくつかの実施形態において、各アーキテクチャについて一旦ランダムフォレストが生成されると、あらゆる入力に対して、その入力に関連するアーキテクチャを判断することなく、3つのモデル306、308、310が同時に実行さることがある。いくつかの実施形態において、ここに記載される機械学習モデルを活用したマルウェア検出モデルに大幅な遅延、又は効率に影響はない。これは、いくつかの実施形態において、各ランダムフォレストモデルの実行が、例えば、O(log(n))の演算を取るためであり、無視できるものである。これは図3で見ることができる。図3は、これら3つの別々のランダムフォレストモデル306、308、310のセットが二回実行された様子を示しており、一回目はPEファイル100のデータディレクトリ112からのバイトに対して実行され(矢印302)、次にPEファイル100のセクション本体116からのバイトに対して実行されている(矢印304)。矢印302の場合、ランダムフォレストモデルによって予測されるアーキテクチャのコード確率は、x 86:P1、x 64:P2、及び.NET:P3である。確率P1、P2、及びP3は、データディレクトリ112からのバイトがそれぞれ実行可能なx86、x64、又は.NETのコードである可能性を示唆している。矢印304の場合、ランダムフォレストモデルによって予測されるアーキテクチャのコード確率は、x 86:P4、x 64:P5、及び.NET:P6である。確率P4、P5、及び63は、セクション116からのバイトがそれぞれ実行可能なx86、x64、又は.NETのコードである可能性を示唆している。
【0122】
いくつかの実施形態において、ランダムフォレストモデルは、ファイルの様々な領域のバイトが実行可能コードかどうかを判断するのに有用だが、バイトが実行可能コードである場合、当該実行可能コードがマルウェアペイロードに関連するかどうかについては疑問が残る。換言すると、いくつかの実施形態において、一旦コードが検出されると、当該コードは、さらなるマルウェア検出及び分析のためにフラグが立てられてもよい。しかしながら、検出の観点から、経験上の結果では、ここに記載のコード検出機械学習モデルのいくつかは、マルウェア検出を全体的に少なくとも0.3%、テストデータセット内のPEファイルに対して97.7%を98.0%まで押し上げた。また、ここに記載されるようなコード検出機械学習モデルを用いることによるマルウェア検出の増加は、ここに記載するように非従来的な場所に実行可能コードを隠すマルウェアでより高くすることができる。
【0123】
図4Aは、ここに記載するいくつかの実施形態による、個別の決定木構造の例示的なフローチャートである。ランダムフォレストの各決定木は個々に、分岐構造を含むことができ、各分岐は、特定のn-グラムがバイトストリーム内に存在するか否か、又は特定のn-グラムカウンタが特定の値より大きいか、小さいか、又は等しいか否かを判定することによって導かれる。例えば、ノード402には、「X」n-グラムがコードセクション内に存在するか否かのチェックが含まれていてもよい。もし含まれていない場合は、決定木400はノード404に進み、「Y」n-グラムがコードセクション内に存在するか否かをチェックする。いくつかの実施形態において、決定木は、実行可能コードがコードセクション内に存在するか否かの確率決定に達する前に、任意の数の類似するノードを含んでいてもよい。しかしながら、いくつかの実施形態において、ブートストラップ集約又はバギングのために、より浅い(すなわち、ノードがより少ない)ツリーが好ましいことがある。バギングとは、分散を減少させ、訓練データの過剰適合を回避することによって、モデルの安定性及び精度を改善する機械学習方法とすることができる。本質的に、訓練データの異なる側面を学習する数多くの弱い学習器(例:より浅いツリー)の結果を平均化して、少数の強い学習器(例:より多くのノードを有する、より深いツリー)を利用する場合に比べてより精度が高くより安定したモデルを作成することができる。実際に、より多くのノードを有する、より深いツリーを利用すると訓練データの過剰適合になることがある。過剰適合は、モデルが訓練データの詳細やノイズを、当該モデルの新規データに対する性能に悪影響を及ぼす程度まで学習することによって起こる。ここで述べる場合に当てはめると、過剰適合は、予測モデルが、コードセクション内のノイズやランダムな変動を、実際には、このようなランダム性が訓練セット以外の新規のコードセクションには当てはまらない場合でも、実行可能コードの必要な特徴として取り扱うようになる。過剰適合は、予測モデルの一般化能力に悪影響を及ぼしかねない。したがって、いくつかの実施形態において、この過剰適合の問題を回避するために、ツリーあたりのノード数は30以下であってもよい。
【0124】
再度図4A aを参照すると、図示された実施形態には、2つのノードが含まれている。図示される実施形態において、コードセクションに「Y」n-グラムが存在していなければ、決定木400は、408において確率P1を出力してもよく、コードセクションに「Y」n-グラムが存在する場合、410において異なる確率P2を出力してもよい。或いは、ノード402において「X」n-グラムが存在すると判定した場合、決定木は先に進み、ノード406で「Z」n-グラムが存在するか否かをチェックしてもよい。ノード406における、コードセクションに「Z」n-グラムが存在するか否かの判定に応じて、412(「Z」n-グラムが存在しない場合)で確率P3が出力されてもよく、或いは414(「Z」n-グラムが存在する場合)で確率P4が出力されても良い。
【0125】
図4Bは、ここに記載するいくつかの実施形態による、ランダムフォレスト構造の例示的なフローチャートである。簡略化のために、図示された実施形態において、ランダムフォレスト構造は、3つの決定木を含むものとして示されている。当業者であれば、ランダムフォレストが任意の数の決定木を含んでいても良いことが理解できるであろう。例えば決定木の数は、2本のツリー、3本のツリー、4本のツリー、5本のツリー、10本のツリー、25本のツリー、50本のツリー、100本のツリー、200本のツリー、500本のツリー、1000本のツリー、2500本のツリー、5000本のツリー、1万本のツリー、10万本のツリー、100万本のツリー、又はこれらの数の間の任意の数のツリーを含んでいても良い。図示の実施形態では、ランダムフォレストは、第1決定木400A、第2決定木400B、及び第3決定木400Cを含んでいる。図4Aに関して説明したように、第1決定木400Aは、第1決定木の確率値416Aを出力してもよく、第2決定木400Bは、第2決定木の確率値416Bを出力してもよく、第3決定木400Cは、第3決定木の確率値416Cを出力してもよい。各決定木の確率値は、入力されたコードセクションが実行可能コードを含む確率を表している。いくつかの実施形態において、確率値は、値変換418の間に変換され、平均化され、及び/又は他の方法で操作される。いくつかの実施形態において、値変換418は、確率値416A、416B、及び416Cの単純平均化を含んでいてもよい。いくつかの実施形態において、値変換418の間、一以上の決定木からの確率値は、他の一以上の決定木からの確率値よりも重く重み付けされてもよい。いくつかの実施形態において、勾配ブースト決定木モデルを利用してもよい。いくつかの実施形態において、値変換418の結果は、ランダムフォレストモデル値420であり、入力されたコードが、決定木及びランダムフォレストが対象とするアーキテクチャにおける実行可能コードであるという判定の確率を表している。

モデルの訓練とテスト
【0126】
いくつかの実施形態において、決定木は、貪欲的に訓練されてもよく、すなわち、「最良」データを分割する訓練セット内の変数値の対は、各反復で選択され得る。分離基準は、例えば、とりわけ情報利得及びGINIを含む実装間で変化してもよい。予測モデルの訓練中に、ファイルの異なるセクションを含み得る様々なバイトストリームにタグを付けてもよい。セクションには実行可能コードを含むものがあり、他のセクションが実行可能コードを含まず、むしろ有効なコードではない生データを含むことをモデルに教育するようにセクションにタグ付けすることができる。いくつかの実施形態において、例えば上述のn-グラム特徴抽出方法によって、これら複数のコードセクションをモデルに入力することができる。既知のコード及び非コードセクションが使用されるこの訓練プロセスを通じて、機械学習モデルは、バイトストリームが実行可能コードを含むか否かを示すバイトストリーム内の特定のパターンを学習することができる。
【0127】
図5は、ここに記載するいくつかの実施形態による、コード検出モデルを教育及びテストするための例示的なフローチャートである。いくつかの実施形態において、予測モデルを訓練するためのコードサンプルを複数含むサンプルデータベース502が設けられている。別々のアーキテクチャ(例えば、x86、x64、.NET)に対する各予測モデルに対して、異なるサンプルデータベース502を使用してもよい。サンプルデータベース502の複数のコードサンプルには、複数の非実行可能コードサンプルと複数の実行可能コードサンプルが含まれていることが好ましい。いくつかの実施形態において、サンプルデータベース502からの複数のコードサンプルは、実行可能コードセクション502と非実行可能コードセクション506とに分割される。いくつかの実施形態において、コードセクション504及び非コードセクション506は、コード訓練サンプル508及びコードテストサンプル510にさらに分割され、一方、非コードセクション506は、非コード訓練サンプル512及び非コードテストサンプル514に分割される。いくつかの実施形態において、コード訓練サンプル508と非コード訓練サンプル512は、その後組み合わせられて訓練セット516とされ、上述したように予測モデルの訓練に使用することができる。いくつかの実施形態において、予測モデルが、コード検出メカニズムとして個別に又は組み合わせて利用(例:ランダムフォレスト)できる一連の決定木を生成できるように、モデルに、訓練セット516内のどのサンプルが実行可能コードで、どのサンプルが実行可能コードでないかについて指示が与えられる。いくつかの実施形態において、テストセット518を使用して、予測モデルの精度をテストすることができる。テストの結果に応じて、サンプルデータベース502から異なる及び/又は追加のサンプルを使用して予測モデルをさらに訓練してもよい。
【0128】
いくつかの実施形態において、サンプルデータベースは、セクション116がファイルの情報のほとんどを含んでいるため、当該セクションのコードを用いて構築されていてもよい。上述したように、ファイルは異なるセクション116から構築することができる。各セクションは、許可を有しているため、許可情報が把握されている複数の良性ファイルを使用して訓練セット516を構築することができる。前述したように、セクションが実行可能コードであるか否かを判断することは困難である。したがって、様々なソースからの異なるセクション116を用いて、訓練セット516及びテストセット518を構築し、それぞれを実行して、どのセクションが実行可能コードを含んでいるか判定するには非常に問題がある。実際、この方法によって訓練セット516及びテストセット518を構築するには並外れた量の時間と労力が必要となる。代わりに、ここに記載されるいくつかの実施形態において、Microsoftのファイルや、既知の信頼できるベンダーのファイル等の良性ファイルが使用されてもよい。さらに、いくつかの実施形態において、各ファイルは、コードを含んでいる可能性があり実行許可のあるセクションと、コードを含んでいる可能性がなく、実行許可を持たないセクションとに分割される。いくつかの実施形態において、このように準備されたセクションを使ってサンプルデータベース502を構築してもよい。

自動特徴抽出(AFE)
【0129】
ここに開示されるいくつかの実施形態は全体的に、マルウェア検出で使用するための、コードから自動的に特徴を抽出するシステム及び方法に関する。効率的でスケーラブルなマルウェア認識モジュールは、サイバーセキュリティ製品の重要なコンポーネントとなり得る。
【0130】
いくつかの実施形態において、自動特徴抽出システム又は方法はコード-数値特徴変換と、これに続く自動特徴抽出用のニューラルネットワークが含まれていてもよい。いくつかの実施形態において、コード-数値変換には、ルックアップテーブルが含まれており、これにより小さなコードユニット(例:バイト、単語、ダブルワード)を数値ベクトルに置き換えてもよい。いくつかの実施形態において、バイトコードにWord2vecを使用してニューラルネットワークへの入力生成している。しかしながら、ルックアップテーブルは種々の異なるメカニズムを通して作成されてもよいことが理解できるであろう。いくつかの実施形態において、ニューラルネットワークは、再帰型ニューラルネットワーク(RNN)を含んでいてもよい。他の実施形態において、システム及び方法は、コード-数値変換によって生成された数値チャネルをフィルタリングするフィルタリングメカニズムと、これに続く畳み込みニューラルネットワークを含んでいてもよい。

導入
【0131】
マルウェア検出モジュールは、収集したデータに基づいて、オブジェクトが脅威であるかどうかを判断する。静的マルウェア検出方法の殆どは、ファイルから高度にエンジニアリングされた特徴を抽出し、それを使用して機械学習(ML)モデルを訓練する。しかしながら、実行可能なコードから有用な特徴を抽出するためのシステム及び方法は不十分である。このため、これらのソリューションで使用される特徴のほとんどは、実際のコードではなくファイルのメタデータに関連している。いくつかの事例において、マルウェアにはメタデータに、無効なチェックサム、不審なAPIのインポート、高いエントロピー等の悪意のあるインジケータとパターンを含むものもあり、このアプローチが有効な場合もある。ファイルのメタデータを編集してこれらのパターンを偽装することはできるが、コードには実行可能ファイルの実際のロジックが含まれているため、実行可能コードには常に悪意のあるパターンが存在する。このため、人のマルウェア研究者はコードの検査に従事し、一般的に人の研究者はメタデータではなく、実行可能コードにより多くの注意を払う。しかし、欠点としては、人による検査は一般的に遅く、費用がかかり、非常に非効率的なことである。したがって、実行可能コードの特徴を機械学習モデルに伝播させるための、効率的なプログラム的システム及び方法によって検出ソリューションが大幅に改善される。
【0132】
いくつかの実施形態において、コードからマニュアルで特徴を抽出するのは困難で非効率的であるため、ここに記載されるシステム及び方法でニューラルネットワークやディープラーニング(DL)(深層構造学習又は階層学習としても知られる)を用いて自動的に特徴を抽出する。いくつかの実施形態において、DL法、生データからマニュアルで特徴を抽出する必要なく、生データを用いて優れた結果を得ることができる。これは、ディープモデルが自然言語処理(NLP)と視覚(Vision)の分野に革命をもたらした理由の一部であり、これら分野のデータから特徴を抽出することは容易ではない。いくつかの実施形態において、DLは、学習データの表現に基づく特定のタイプのML方法を含んでいる。ここに記載される実施形態では、実行可能コードから、MLモデルを使用する自動特徴抽出に関する。いくつかの実施形態において、MLモデルは、DLモデルを含んでいる。いくつかの実施形態において、DLモデルは、ニューラルネットワークを含んでいる。いくつかの実施形態において、DLモデルは、深層ニューラルネットワーク、深層信念ネットワーク、再帰型ニューラルネットワーク、及び/又は当業者に公知のあらゆる他のML及び/又はDLモデル構造を含んでいてもよい。
【0133】
いくつかの実施形態において、DLモデルは、複数層の、特徴抽出及びデータ変換用線形又は非線形処理部を含んでいる。いくつかの実施形態において、DLモデルの連続する各層は、前の層からの出力を入力として使用する。いくつかの実施形態において、DLモデルは、教師あり、半教師あり、及び/又は教師なし学習モデルであってもよい。いくつかの実施形態において、DLモデルは、入力から出力への一連の変換を含むクレジット割り当てパス(CAP)を含んでいる。いくつかの実施形態において、DLモデルは、CAP深度が2、3、4、5、6、7、8、9、10、20、30、40、50、100、200、300、400、500、600、700、800、900、1000、2000、及び/又は、これら値の間のいずれかの値であるフィードフォワードニューラルネットワークを含んでいる。いくつかの実施形態において、DLは再帰型ニューラルネットワークを含んでいる。
【0134】
いくつかの実施形態において、ここに記載されるシステム及び方法は、マルウェア予測用に、実行可能コードから直接ニューラルネットワークを訓練する。いくつかの実施形態において、ファイル(例:ポータブル実行可能ファイル)は、訓練済みニューラルネットワークによって処理することができ、ニューラルネットワークは、より広範なマルウェア検出モデルの「特徴生成器」として使用することができる。いくつかの実施形態において、ニューラルネットワーク(又はいずれかの他のML及び/又はDLモデル)を、実行可能コードからの自動特徴抽出器として使用することができる。いくつかの実施形態において、ML、及び/又はDLモデル(例:ニューラルネットワーク)から抽出された特徴を使用することによって、マルウェア検出モデルの結果が大幅に改善される。
【0135】
いくつかの実施形態において、一般的に、ニューラルネットワークは、数層から構成されるMLモデルである。いくつかの実施形態において、各層は、データに対して変換を行い、その結果を次の層に送信する。一般的に、ニューラルネットワークの最終層は、ニューラルネットワークの最後から2番目の層からの最終データ変換を使用して、データのラベル又は分類を予測する(例:このコードはマルウェア又は良性コードである)。しかしながら、いくつかの実施形態において、ここに記載されるシステム及び方法は、最後から二番目のデータ(即ち、最終ラベルや分類が生成される最終層の直前で変換されたデータ)をマルウェア検出モデルの特徴として使用する。いくつかの実施形態において、ニューラルネットワークでは、単一の変換から最後から二番目のデータ形式への最終的な予測を行うため、この形式にはコードの悪意に関する非常に強力な情報が含まれている。いくつかの実施形態において、ここに記載されるシステム及び方法は、メインのマルウェア検出モデルで特徴として利用するデータ(即ち、ニューラルネットワークのいずれかの層への入力又は、当該層からの出力)に対してあらゆる変換を行うことができる。
【0136】
いくつかの実施形態において、生コードに対して、ニューラルネットワークを訓練及び使用することは容易ではない。いくつかの実施形態において、深層モデルは、固定サイズの入力を想定しているが、コードのサイズは大幅に変化する(1KBから100MB、及びこれらの数値間のいずれかの値)。さらに、いくつかの実施形態において、入力データを固定最大サイズまで拡張するのは実行不可能である。したがって、いくつかの実施形態において、バイトコードを1次元「画像」に処理し固定目標サイズまでスケーリングする、画像スケーリングアルゴリズムが使用されている。いくつかの実施形態において、ここに記載するシステム、方法、及びデバイスは、コードを1次元画像として処理する。いくつかの実施形態において、コードは、例えば画像再スケーリング手法(例:補間法)を用いて固定サイズに再スケーリングされる。いくつかの実施形態において、画像スケーリングアルゴリズムは、一種のデータ圧縮を含んでいてもよい。しかし、画像スケーリングアルゴリズムの使用によって、データ内に存在する空間パターンの歪みが制限できる。マルウェアのバイナリファイルを分類前に二次元画像に変換する手法と比較して、この手法は、画像の幅及び高さを判断する必要がないためより簡単である。いくつかの実施形態において、バイトストリームへの変換は、バイナリコードを元々のファイルの順序で維持でき、データのこのような一連の表現によって当該データにニューラルネットワークアーキテクチャを自然に適用できる。いくつかの実施形態において、各バイトストリームは所定のサイズまでスケーリングされる。いくつかの実施形態において、スケーリングされたコードは1バイト値のシーケンスに対応する。
【0137】
一般的に、特定の方法では、バイナリファイルから特徴を抽出することなく、当該ファイルから直接マルウェアの分類が試みられている。しかし、いくつかの実施形態では、ML及び/又はDLモデルを訓練し、生データからマルウェアの分類に使用できるが、代わりに、様々な追加入力を含む別のマルウェア検出モデル用に特徴を自動的に抽出する方法として使用することもできる。したがって、いくつかの実施形態において、ニューラルネットワークの入力は、ファイル全体ではなくコードのみが入力となる点で従来のモデルと異なっている。さらに、いくつかの実施形態において、ニューラルネットワークの使用は、ファイルを検査し、ファイルをマルウェアとして分類するために使用される従来のモデルとは異なっている。いくつかの実施形態において、特徴抽出に代えて、ここに記載のニューラルネットワークが使用されている。いくつかの実施形態において、従来のモデルと異なり、以下に記載するようにデータ圧縮の前に埋込が完了している。さらに、入力の差によって、ここに記載するニューラルネットワークは、従来のモデルとは異なるニューラルネットワークアーキテクチャを使用する。
【0138】
いくつかの実施形態において、線形補間は、類似するバイト値が類似の意味論的意味を有するという事実を使用する。例えば、これは画像について理にかなっている。つまり値230のピクセルと値228のピクセルは、色が非常に似ている。しかし、いくつかの実施形態において、実行可能コードにこれが当てはまらない。つまり、近似する2つのバイト値が、全く異なるオペレーションコードを表すことがある。したがって、いくつかの実施形態において、実行可能コードのセクションでさらに別のモデル(例:Word2Vec)を訓練することで、データを再スケーリングする前に、埋め込みテーブルが利用される。いくつかの実施形態において、別のモデルは、データを、ニューラルネットワークが理解できる数値形式に変換する。いくつかの実施形態において、データ内の各バイトは、学習済み埋め込みテーブルを使用して固定サイズのベクトルに変換することができ、この新次元内のベクトルは、線形補間に必要な特性を維持する。ユークリッド類似性は、意味論的類似性を示している。
【0139】
図6は、ここに記載する種々の実施形態による、ニューラルネットワークを使用した特徴抽出方法の例を示すフローチャートである。要約すると、以下には、いくつかの実施形態による自動特徴抽出システム及び方法を訓練及び使用するための方法が含まれている。いくつかの実施形態において、本方法は、602において生の入力コードを提供することが含まれていてもよい。いくつかの実施形態では、604において入力コードに前処理ニューラルネットワーク(例:Word2Vec)を使用して、サイズNの埋め込みテーブルが生成される。いくつかの実施形態において、Nは任意の整数であってよい。いくつかの実施形態において、Nは4である。いくつかの実施形態において、Nは、2、3、4、5、6、7、8、9、10、15、20、25、50、100、1000、5000、10000、50000、及び/又はこれらの値の間の任意の値であってもよい。いくつかの実施形態において、本方法は、学習済み埋め込みテーブルを使用して各バイトを埋め込むことにより、サイズXの所与の入力コードのストリームを前処理するステップを含んでいてもよい。いくつかの実施形態において、前処理の結果は、サイズ(X、N)の二次元マトリクス内のデータである。いくつかの実施形態において、本方法は、例えば、最近傍、線形、スプライン又はその他の補間法又はダウンサンプリングを使用して、マトリックスを固定サイズ606にサイズ変更することを含んでいる。いくつかの実施形態において、本方法は、線形補間を使用して、マトリクスを固定サイズにサイズ変更することを含んでいる。いくつかの実施形態において、固定サイズは(5000、4)であってもよい。しかし、固定サイズについては制限はなく、整数X、及びNの任意の組み合わせを含むことができる。いくつかの実施形態において、ダウンサンプリングは、チャネルフィルタリングを使用して完了する。いくつかの実施形態において、本方法はさらに、608において前処理済みデータをニューラルネットワークの入力として、マルウェア予測用のニューラルネットワーク(又は他のML及び/又はDLモデル)を訓練することをさらに含んでいる。いくつかの実施形態において、本方法は、推論をさらに含んでおり、ニューラルネットワークは、モデルに与えられた新しいデータを処理する。いくつかの実施形態において、本方法はさらに、608において推論中に、新しいデータを前処理し、前処理済みの新しいデータをニューラルネットワークを介して実行することをさらに含んでいる。いくつかの実施形態において、本方法はさらに、610において、最後から2番目の層(即ち、ニューラルネットワークの最後の層への入力)から出力データを抽出し、マルウェア検出モデルのための特徴として使用することを含んでいる。いくつかの実施形態において、ニューラルネットワークの実際の結果又は予測(即ち、ニューラルネットワークの最後の層の出力)は破棄される。いくつかの実施形態において、最後から2番目の層からの出力データは、コードを表す追加の特徴ベクトルとして使用されてもよく、他のマニュアルで、或いは、自動的に抽出された特徴と連結、及び/又は結合されてもよい。いくつかの実施形態において、出力データは、マルウェア検出機械学習モデルへの入力として使用してもよく、ニューラルネットワークを訓練するために使用することができる。

ニューラルネットワークアーキテクチャ
【0140】
いくつかの実施形態において、ニューラルネットワークは、一次元畳み込みの固定された数の層を含むネットワークを使用して構築され、各畳み込みの後にバッチ正規化及び整流線形ユニット(ReLU)が行われてもよい。ReLUは、畳み込みニューラルネットワーク(CNN)等のニューラルネットワークにおける活性化関数を意味することができる。いくつかの実施形態において、一次元畳み込みの層の固定数は、3であってもよい。いくつかの実施形態において、一次元畳み込みの層の固定量は、1、2、3、4、5、6、7、8、9、10、20、30、40、50、100、200、300、400、500、600、700、800、900、1000、2000、及び/又はこれら量の間のいずれかの量であってもよい。
【0141】
いくつかの実施形態において、各畳み込みは、カーネルサイズ、ストライド、及び/又はフィルタを有している。いくつかの実施形態において、ストライドは、フィルタが入力データをどのように畳込むかを制御する。いくつかの実施形態において、カーネルサイズは7であってもよい。いくつかの実施形態において、カーネルサイズは、1、2、3、4、5、6、7、8、9、10、20、30、40、50、100、200、300、400、500、600、700、800、900、1000、又は、2000、及び/又は、これらいずれかの値の間のいずれかの量であってもよい。いくつかの実施形態において、ストライドは1であってもよい。いくつかの実施形態において、ストライドは、1、2、3、4、5、6、7、8、9、10、20、30、40、50、100、200、300、400、500、600、700、800、900、1000、又は、2000、及び/又はこれらいずれかの値の間のいずれかの量であってもよい。いくつかの実施形態において、各畳み込みは、3つのフィルタを含んでいる。いくつかの実施形態において、各畳み込みは、1個、2個、3個、4個、5個、6個、7個、8個、9個、10個、20個、30個、40個、50個、100個、200個、300個、400個、500個、600個、700個、800個、900個、1000個、又は、2000個、及び/又はこれらいずれかの数の間のいずれかの個数のフィルタを含んでいる。いくつかの実施形態において、フィルタは、例えば、30、50、及び/又は90のサイズを含んでいてもよい。
【0142】
いくつかの実施形態において、畳み込み層の後に、データは、一以上の完全に接続された層を通過する。いくつかの実施形態において、モデルは、2つの完全に接続された層を含んでいてもよい。いくつかの実施形態において、モデルは、1、2、3、4、5、6、7、8、9、10、20、30、40、50、100、200、300、400、500、600、700、800、900、1000、又は、2000、及び/又はこれらの数の間のいずれかの数の完全に接続された層を含んでいてもよい。いくつかの実施形態において、モデルは、それぞれ810個、及び256個のユニットを有する2つの完全に接続された層を含んでいてもよい。いくつかの実施形態において、各完全に接続された層は、1個、2個、3個、4個、5個、6個、7個、8個、9個、10個、20個、30個、40個、50個、100個、200個、300個、400個、500個、600個、700個、800個、900個、1000個、2000個、3000個、4000個、5000個、10000個、又は、25000個、及び/又はこれらの数の間のいずれかの個数のユニットを含んでいてもよい。
【0143】
いくつかの実施形態において、余分な埋め込み次元は、複数の入力チャネルとして扱うことができる。いくつかの実施形態において、余分な埋め込み次元は、4つの入力チャネルとして扱うことができる。いくつかの実施形態において、余分な埋め込み次元は、1、2、3、4、5、6、7、8、9、10、20、30、40、50、100、200、300、400、500、600、700、800、900、1000、又は、2000、及び/又は、これらいずれかの値の間のいずれかの数の入力チャネルを含んでいてもよい。
【0144】
過剰適合を回避するために、ネットワークはドロップアウトを使用して訓練されてもよい。ドロップアウトとは、特定のニューロンセットの訓練段階において、ランダムに選択され得るユニット(即ち、ニューロン)を無視することとすることができる。いくつかの実施形態において、これらの無視されたユニットは、特定の順方向又は逆方向パスで考慮されない。いくつかの実施形態では、各訓練段階において、個々のノードは、確率1-Pでネットワークからドロップアウトされるか、又は確率Pで維持され、削減されたネットワークが残り、ドロップアウトされたノードへの入力エッジ及び出力エッジも除去されてよい。いくつかの実施形態において、Pは約0.5である。いくつかの実施形態において、Pは、約0.05、約0.10、約0.15、約0.20、約0.25、約0.30、約0.35、約0.40、約0.45、約0.50、約0.55、約0.60、約0.65、約0.70、約0.75、約0.80、約0.85、約0.90、約0.95、又は、約1.00、及び/又はこれらいずれかの値の間である。
【0145】
図7は、ここに記載するいくつかの実施形態による、ニューラルネットワークを使用した特徴抽出方法の例を示す図である。いくつかの実施形態において、入力コードを埋め込み、及びダウンサンプリングした後、前処理済みのコードは、ニューラルネットワーク608の入力層702に与えられる。上述したように、いくつかの実施形態において、ニューラルネットワークは、複数層の、特徴抽出及びデータ変換用線形又は非線形処理部を含んでいる。いくつかの実施形態において、ニューラルネットワークの連続する各層は、前の層からの出力を入力として使用する。したがって、いくつかの実施形態において、入力層702は、前処理済み入力コードに対してデータ変換を行い、その出力を第一の隠し層704に送信する。隠し層とは、入力層702と出力層708との間に存在するニューラルネットワークの層ということができる。「隠し」という文言は、隠し層が外部システムには見えず、ニューラルネットワークのプライベートであることを意味する。一般的には、所与の隠し層の出力はいずれも利用されないが、これは、当該出力が変換済みデータを含んでおり、この変換済みデータが使用されて、全隠し層を横断した後、最終的に出力層708から出力される結果を生成するのに使用されるからである。いくつかの実施形態において、ニューラルネットワークは、0以上の隠し層を含んでいてもよい。図示の実施形態では、ニューラルネットワークは、第一の隠し層704から第Nの隠し層706まで番号を付与された、N個の隠し層を含んでいる。いくつかの実施形態において、第Nの隠し層706は、ニューラルネットワークの出力層708の直前である最後から2番目の層を含んでいる。一般的なニューラルネットワークでは、出力層708は、ニューラルネットワークの目的に基づく出力分類を提供してもよい。この場合、出力層708は、入力コードがマルウェアを含むか否かの分類を提供してもよい。しかしながら、ここに記載されるシステム及び方法のいくつかの実施形態において、出力層708の結果は無視される。代わりに、第Nの隠し層706で生成された最終的な変換済みデータを、ニューラルネットワーク608から抽出し、別のより広範なマルウェア検出モデル710への特徴として使用してもよい。マルウェア検出モデル710は、第Nの隠し層706から抽出された特徴、及び/又は他の様々なソースからの特徴を入力として、コードがマルウェアであるか否かの最終判定を行ってもよい。いくつかの実施形態において、ニューラルネットワークの最終的なデータ変換によって、特により広範なマルウェア検出モデル710内の示唆特徴と組み合わせて、コードがマルウェアであるか否かを強く示唆することができる。

チャネルフィルタリング
【0146】
図8は、ここに記載するいくつかの実施形態による、例示的なチャネルフィルタリングメカニズムを示す図である。上述したように、いくつかの実施形態において、入力コード602には境界がない。いくつかの実施形態において、入力コード602は、非常に短いコード列であってもよく、非常に長いコード列であってもよい。しかしながら、ニューラルネットワーク608の入力層702には固定サイズの入力が入力されなければならない。いくつかの実施形態において、入力層702は、入力として、例えば、5000個の埋め込みベクトルのサンプルをとってもよい。その場合、大きなコードセクションに対しては、いくつかの実施形態において、コードは、コードの5000サンプルまで削減又はダウンサンプリングされなければならない。これは種々の異なる方法で行える。いくつかの実施形態において、サンプルは、コードからマニュアルで、又は自動的に選択されてもよい。別の実施形態において、コードは、ブロックに分割され、次いで、例えば、サンプルとして各ブロックの平均応答を取ることによって、集約されてもよい。
【0147】
しかしながら、いくつかの実施形態において、ダウンサンプリングの前に、コードに埋め込みを行ってもよく、このことはコードを実数のベクトルにマッピングするためのモデリング技術ということができる。一以上の次元を持つベクトル空間においてコードを表すことができる。埋め込みは、ニューラルネットワーク、共起行列、又は確率モデル等の種々の方法を用いて生成することができる。例えば、Word2Vecは、単語の埋め込みを生成するモデルで構成されている。これらモデルは、1つの入力層、1つの隠し層、及び1つの出力層を有する浅い2層ニューラルネットワークであってもよい。いくつかの実施形態において、埋め込みは、同様のコンテキストに存在するコードが、生成されたベクトル空間において互いにより近くなりやすくなるように、コードを再フォーマットする。いくつかの実施形態において、埋め込みによって、四次元ベクトル空間が生じる。ニューラルネットワークは、数値を入力として用いて機能するので、埋め込みステップが必要となることがある。いくつかの実施形態において、ニューラルネットワークは、畳み込み、加算、適合、及び/又は数値変換から得られる入力数値を取る。いくつかの実施形態において、ニューラルネットワークは、入力として生コードを用いるようには構成されていない。いくつかの実施形態において、コードを、有意の数値に変換し、その後ダウンサンプリングしてニューラルネットワークに入力するには、埋め込みを活用しなければならない。
【0148】
図8を参照すると、複数のチャネル802A、802Bのそれぞれは、埋込ベクトル空間のベクトル層の1つを表すことができる。いくつかの実施形態において、各ベクトル層は非常に大きく、複数のブロック804A、804Bにさらに統合されなければならない。いくつかの実施形態において、各チャネル802A、802Bは、N個のブロックに統合されてもよい。チャネルがブロックに分けられると、フィルタ806を使用して、チャネル及びチャネル特定のブロックを表す応答値又はサンプルを生成してもよい。フィルタリングメカニズムの目的は、固定サイズのベクトル入力をニューラルネットワークに与えることである。いくつかの実施形態において、コードは、上述のように埋め込み層(例:Word2Vec)に入力され、インデックスによって表されるコード断片をベクトル表現にマップするための埋め込みテーブルを記憶してもよい。いくつかの実施形態において、埋め込みは、コードの表現を含んでいてもよく、類似するコード断片は類似する表現に割り当てられてもよい。言い換えると、埋め込みは、一以上の座標系におけるコードを表すことができ、関係のコーパスに基づいて関連するコード断片は、互いにより近接して配置される。
【0149】
いくつかの実施形態において、埋め込まれたコードは、チャネルフィルタリングシステムに入力される。いくつかの実施形態において、チャネルフィルタリングシステムは、データのエイリアシングやアンダーサンプリングを回避するために、各チャネルのフィルタリング(例:平滑化)を実行してもよい。いくつかの実施形態において、フィルタ形状は、例えば、平滑化カーネル(例:ローパスフィルタ)、平均フィルタ(例:ボックスフィルタ)、又はガウスフィルタを含んでいてもよい。いくつかの実施形態において、フィルタ値の合計は1.0である。いくつかの実施形態において、フィルタは、各チャネルに対して一次元フィルタを含み、いくつかの又は全てのチャネルが同じフィルタ長を有している。いくつかの実施形態において、フィルタ長は、奇数を含むことができ、フィルタ長=1+2*floor(L/S*Alpha)として計算することができ、0<=Alpha<=Alpha_maxであり、Lはコード長であり、Sは最終サンプルサイズである。いくつかの実施形態において、Alpha_maxは1に等しくてもよい。いくつかの実施形態において、Alphaは0に等しくなるように選択されてもよく、これによりフィルタがデルタ関数と等価となる。
【0150】
ニューラルネットワークに入力するための、応答値又は固定サイズのサンプルを生成するためのフィルタにはいくつかの形態がある。例えば、ブロック804A、804Bをフィルタリングするための関数が図9図10図11に示されている。図9は、ここに記載するいくつかの実施形態による、フィルタリングシステムの挙動を示すボックス関数の例を示す図である。図示される例では、-RからRまでの範囲の値がブロックから選択され、等しく重み付けされるが、範囲外の値は無視される。-RからRまでの範囲は、図示の例ではブロック全体を表すものと考えられる。このように、この範囲の代表値を推定することにより、サンプルのサイズを小さくできる。図示の実施形態では、ボックス関数を使用することにより、処理されるブロックコードの平均埋め込み値が得られる。
【0151】
図10は、ここに記載するいくつかの実施形態による、フィルタリングシステムの挙動を示すガウス関数の例を示す図である。いくつかの実施形態において、ブロック804A、804Bをフィルタリングするために、ガウスフィルタを用いてもよく、推定埋め込み値が、統計における期待関数のように、ブロック中心に近い値に応じて大きく影響されるように、フィルタリングされたサンプルに-RからRの範囲の中央の値が含まれるようにフィルタリングしてもよい。
【0152】
図11は、ここに記載するいくつかの実施形態による、フィルタリングシステムの挙動を示すデルタ関数の例を示す図である。本明細書の実施形態において、デルタ関数フィルタリングメカニズムは、単に、ブロック804A、804Bの中央値をフィルタリングされたサンプルとして選択するものであってもよい。
【0153】
他にも多くのフィルタリングメカニズムがあり、当業者には周知である。ここに記載されるシステム及び方法では、任意のフィルタリングメカニズムを使用できる。いくつかの実施形態において、埋め込み及びフィルタリングのステップの結果は、ダウンサンプルされた埋め込みコードサンプルであり、特徴生成のためにニューラルネットワークに入力することができる。

マルウェア検出の向上
【0154】
いくつかの実施形態において、ここに記載のシステム及び方法は、特徴を検出しマルウェア検出モデルに伝播させる。いくつかの実施形態において、抽出された特徴を用いることによって、マルウェア検出モデルの検出能力が大幅に向上することがある。例として、50万個の.NETファイルに対して偽陽性率0.04%(「有効」閾値)の精度をチェックすることによって、マルウェア検出モデルを評価した。この評価例において、単独で使用されるニューラルネットワーク(即ち、ネットワークの結果又は分類)は、有効閾値で76.1%の検出率を有することがわかった。マルウェア検出モデル単独での検出率は98.0%であることがわかった。ここに記載される自動特徴抽出システムで抽出された特徴を活用したマルウェア検出モデルは、検出率が98.5%であることがわかった。モデル単独ではマルウェアの約2%が検出されないが、特徴抽出を伴うモデルではマルウェアの約1.5%が検出されないため、0.5%の検出増加は25%の改善を表している。検出能力の増加がたとえ小さな増加であっても、大きなサイズのサンプルファイルにおけるマルウェア発見では、並外れた強化であり、上述のような増加は、マルウェア検出分野では非常に大きな増加である。また、100%に近い検出率を有するモデルをさらに改善することは非常に困難であり、上述のような改善によって、コンピュータユーザを、検出されずに通り抜けてしまうような、甚大な被害をもたらし得るソフトウェアから保護することができる。尚、偽陽性率の有効閾値が非常に厳格であるため、ニューラルネットワーク単独での検出率は比較的低い。科学記事の殆どが、より緩やかな偽陽性率を使用しており、検出の評価についても単純なデータセットを用いて行っている可能性が高い。

ランタイムテスト
【0155】
別の例として、300個の.NETファイルに対してマルウェア検出モデルを実行することによって、ランタイムテストを行った。特徴抽出を行わない場合、当該テキストには4秒かかり、特徴抽出を行った場合は、当該テストには約6秒かかかった。全体として、ランタイムの約40%が特徴抽出を構成する。特徴抽出は、これまでに検出されなかったマルウェアの検出の大幅な向上を象徴するものであるため、この増加は許容可能とみなしてもよい。

位置独立コード検出
【0156】
本開示のさらなる技術、特徴及び態様は、悪意のある実行可能コードを識別し、フラグを立て、及び/又は検出するための技術に関する。具体的には、オペレーティングシステムAPIを異常な方法での活用を試みる悪意あるソフトウェアを識別し、フラグを立て、及び、検出する必要がある。

導入
【0157】
いくつかの実施形態において、ここに記載されるシステム及び方法は、監視下の関数を独立して見つけて呼び出すコードの断片を検出してもよい。いくつかの実施形態において、ここに記載されるシステム及び方法は、静的インポート又は動的インポートなどの従来の手法を使用することなく、監視下の関数のアドレス取得を試みるコードの断片を検出するために使用してもよい。多くの場合、攻撃者はオペレーティングシステムAPI関数(「OS API関数」)を、例えば、独立して判断され、呼び出される可能性がある(一以上の正規でない方法でこれらの関数を見つける)、相関エクスポートされた関数アドレスを介して使用する。例えば、攻撃者は、何らかの脆弱性の悪用に成功した後、継承された異常状態でこれらの関数の利用を試みる可能性がある。或いは、攻撃者は、コンピュータセキュリティ製品による攻撃者の検出が困難となるように、動作の隠蔽を試みる可能性がある。したがって、本明細書のシステム、方法、及びデバイスは、ライブラリ関数、及び/又は、関数アドレスに対するアクセスを独立して取得しようとする攻撃者を識別するように設計されていてもよい。
【0158】
いくつかの実施形態において、ここに記載のシステム及び方法は、ライブラリ関数の正当な取得を識別するプロセスを通じてマルウェア又はその他の攻撃者を検出する積極的なトラップに関連、及び/又は含んでいてもよい。いくつかの実施形態において、トラップは、オペレーティングシステムに埋め込まれている。いくつかの実施形態において、トラップは、マルウェアによってトリガーされるか、又は組み込まれてもよく、こうすることにより、ここに記載するライブラリ位置独立実行可能コード検出のための方法及びシステムが、マルウェアにフラグを立てるか、識別することを可能にする。いくつかの実施形態において、ここに記載されるトラップは、攻撃者のシステム関数又はリソースへのアクセス取得の試みを利用してもよい。特に、ここに記載されるトラップは、ここに記載するトラップは、非従来型、不規則、非定型、異常、或いは、不審な方法を使用してライブラリ関数へのアクセスを試みる攻撃者を検出することができる。いくつかの実施形態において、ここに記載されるトラップは、システム関数を監視して、これらが従来の方法によってアクセスされていないと判断することにより、非従来型の方法を使ってライブラリ関数にアクセスする攻撃者を検出してもよい。いくつかの実施形態において、ここに記載されるトラップは、システム関数及びリソースを特定して呼び出すための従来の方法は数が限られている点を利用して、消去法を使用して非従来型呼び出しを検出してもよい。
【0159】
いくつかの実施形態において、「トラップ」の技術的利点は、通常、良性のコード部分が、直接的又は間接的に、オペレーティングシステムのローダを使用するということから生じる。そのため、ローダの使用が監視されている場合は、一部のローダAPI関数API関数の実行がマークされ、監視され、及び/又は良性又は非良性として分類される。したがって、ローダを使用せずに関数のアドレスを決定する攻撃者(例えば、通常は強制的に「位置独立型」とされる、不正利用成功後に実行された初期コード)を識別することができる。位置独立コードの実装例は、既知の関数パターンを探す全プロセスのメモリを走査し、PEB構造を解析し、関連する関数アドレスを手動で見つけることを含む場合がある。
【0160】
いくつかの実施形態において、従来の検出方法は、攻撃者が既知の手法を使ってアドレスを見つけることを想定する場合がある。しかしながら、ここに記載するシステム及び方法のいくつかの実施形態は、関数位置を取得する特定の技術の検出に依存しない。代わりに、ここに記載されるシステム及び方法のいくつかの実施形態は、従来の関数配置手法を監視し、従来のインポート手続きを踏まずにシステム関数を実行するコードの一部又は全てにフラグを立て、及び/又は削除してもよい。
【0161】
例えば、とりわけWindows、MacOS、Linuxを含むオペレーティングシステムでは、オペレーティングシステムのローダ(例えば、Windows Loader)(「ローダ」)がラッピングされた実行可能コードを管理するために必要な情報をカプセル化できる実行可能なファイル形式(例:ポータブル実行可能形式)を定義している場合がある。
【0162】
実行ファイルは、マシン内の他の実行ファイルとの間で関数及び/又はデータ(「シンボル」)をインポート/エクスポートすることがある。シンボルのインポートプロセスは、実行可能ファイルがシンボルを容易にインポート/エクスポートできるように、ローダによって実装されることがある。ローダは、シンボルインポートプロセスでの事前要求を一部又は全て処理することがある。
【0163】
いくつかの実施形態において、実行ファイル(「コード」)内のコードの一部は、ローカルで実行可能である。即ち、同一の領域及び/又は実行可能ファイル内に位置するコードを実行することができる。いくつかの実施形態において、コードは、例えば、実装済みでしたがって別の実行ファイルに配置されている関数を呼び出すことにより非ローカルで実行することができる。いくつかの実施形態において、これらの非ローカル関数を呼び出すために、コードは、対象の関数の位置(即ち、関数の仮想アドレス)を判断する必要がある。コードは、以下に説明する一以上の方法によって、対象関数の仮想アドレスを特定できる。
【0164】
いくつかの実施形態において、実行ファイル内のコードは、ローダAPIを直接使用してアドレスを特定することができる(「動的呼び出し」)。いくつかの実施形態において、ローダは関数のセットを、自身の実行可能ライブラリにエクスポートする。これにより、いずれのコードでも、有効な実行可能ファイルから情報を動的にロードし、取得できるようにする。したがって、実行ファイルのコードは、このAPIを使用して必要となる実行ファイルをロード又は特定し(例:ローダと相互に作用する「LoadLibraryA」又は「GetModuleHandleA」APIの呼び出しを使用)。その後対象となるエクスポートされたシンボルを特定する(例:「GetProcAddress」を使用)。いくつかの実施形態において、コードは、ローダAPIを介して仮想アドレスを特定するために使用する上述した関数のアドレスを含んでいる。
【0165】
いくつかの実施形態において、コードは、ローダを暗黙的に使用して関数の仮想アドレスを特定することができる(「静的呼び出し」)。いくつかの実施形態において、実行可能ファイルには、(例えば、PE形式の仕様の一部として)どのシンボル及びライブラリが実行ファイルのロード及び実行に必要であるかが定義されている。いくつかの実施形態において、シンボル及びライブラリは、実行ファイルが実行されている間に、これらを例えば上述した動的呼び出しの手法により、特定されたシンボルの明示的なロード及び取得を伴うことなく利用できるように、実行ファイルの初期化プロセスの一環としてロードしてもよい。いくつかの実施形態において、静的呼び出しを使用して、インポートされた関数のアドレスを、例えば、インポートアドレステーブル(以下、「IAT」)のエントリ内の特定済み実行ファイルに記憶する。いくつかの実施形態において、実行ファイルのロード段階が終了した後、実行ファイルは、インポートされた関数を、これら関数の位置を明示的に把握することなく、IATテーブルを用いて間接的に呼び出すことができる。
【0166】
いくつかの実施形態において、コードは独立して関数のアドレスを判断してもよい(「独立呼び出し」)。いくつかの実施形態において、コードは、静的呼び出し又は動的呼び出しを使用することなく、対象の関数のアドレスを判断することができる。いくつかの実施形態において、対象の関数アドレスを見つけるために、コードは以下を行ってもよい。(a)対象のシンボル又は必要なモジュールのアドレスを見つけ、PEモジュールに含まれる情報を使用して対象の関数のアドレスを推測する、又は、(b)対象の関数をカプセル化する他の関数を使用する。いくつかの実施形態において、仮にコードが一以上の特定のローダ関数のアドレスを判定できるとすれば、当該コードは、動的呼び出しの手法を用いて、あらゆるモジュールのあらゆる関数のアドレスも判定でき、またこれらの関数を用いてあらゆる実行可能モジュール、及びこれ含まれる関数のアドレスを取得することができる。
【0167】
関数のアドレスを独立して判定するには、多くの方法を使用して達成してもよい。ただし、これを行ういくつかの既知の方法をいかに記載する。いくつかの実施形態において、コードは内部のオペレーティングシステム構造データを用いて独立的にアドレスを特定してもよい。例えば、ローダはプロセスの実行中に、内部データ構造を維持し、使用する。これらのデータ構造には、ローダが正常に且つ効率的に機能するために必要となるデータと情報が含まれていてもよい。これらのデータ構造の中には、シンボルがどこに位置しているかを判定するために使用され得るいくつかのデータ構造が含まれていてもよい。例えば、アプリケーションは、プロセス環境ブロック(「PEB」)を使用することができる。ローダーは、ロードされたモジュールに関する情報を維持するためなど、多くの目的でPEBを使用してもよい。したがって、コードは必要な実行ファイルのアドレスを取得し、その後関数アドレスを取得する、或いは、上述したようにローダに関する関数を取得することができる。
【0168】
いくつかの実施形態において、悪意のあるコードは、ヒューリスティックアプローチを使用して対象の関数のアドレスを取得することがある。ロードされたモジュールのアドレス、又は関数の位置を判定するためのヒューリスティック方法は数多く存在することがある。例えば、仮想アドレス空間には、NTDLL.DLL(多くのローダの実装コードを保持する実行ファイル)等のオペレーティングシステムに関するモジュールを示すポインタが含まれていることがある。悪意のあるコードは、実行ファイルのヘッダが見つかるまで、ページ替えされたページを逆に読むことで、モジュールベースのアドレスを検索できる。最後に、悪意のあるコードは、エクスポートされたローダ関数を見つけ、それらを利用して関連するシンボルを見つけ/ロードする可能性がある。
【0169】
ここに記載する監視下の関数は、独立して関数のアドレスを取得する試みを監視する関数を含んでいてもよい。いくつかの実施形態において、ここに記載するインポートアドレステーブル(IAT)のコードは、実行ファイルE内のシンボルSについて、シンボルSに対応する(実行可能ファイルEの)IATエントリを用いた間接呼出しにより実行されるコードの断片を含んでいてもよい。IATコードは、呼び出しを静的呼び出しとしてマーキングするために利用してもよい。ここに記載するように、迂回コードは、シンボルSについて、関数Sの実行を迂回するコードの断片を含んでいてもよい。迂回コードを利用することにより、このコード、関数を呼び出す方法が検査されてもよい。

実装
【0170】
コードが、いつ独立呼び出しを利用して、監視下の関数のアドレスを取得するかを検出するために、ここに記載のシステム、方法、及びデバイスのいくつかの実施形態は、監視下の関数の正当な静的呼び出し及び動的呼び出しを識別してもよい。いくつかの実施形態において、静的呼び出し及び動的呼び出しを識別することで、ここに記載のシステム、方法、及びデバイスは消去法によって監視下の関数の独立呼び出しを検出してもよい。
【0171】
いくつかの実施形態において、静的呼び出し、動的呼び出し、及び、ローカル呼び出しを検出するために監視下の関数を実装してフローを変更してもよい。いくつかの実施形態において、ここに記載されるシステム及び方法は、以下のうちの一以上を行ってもよい。(1)IATスタブの変更、(2)迂回コードで監視下の関数を迂回、(3)全てのモジュールが実装されているかの確認(各ロード済みモジュール及び新たにロードされるモジュールに対して、関連するデータ構成を実装して、将来の呼び出しが検出システムのフローへリダイレクトされるようにしてもよい)、(4)監視下の関数に対する各呼び出しを監視し、呼び出し元が関数に直接アクセスしてるかをチェック(即ち、良性のフローとして考慮される静的/動的/ローカルフローを介していないどうか)。いくつかの実施形態において、異常な手続きを使用して(即ち、静的呼び出し/動的呼び出し/ローカル呼び出しを使用せずに)監視下の関数のアドレスを取得する攻撃者は、フレームを含まない可能性があり、ここに記載のシステム及び方法で攻撃者を識別することが可能となる。

静的フロー
【0172】
いくつかの実施形態において、静的フローとは、コードが、静的呼び出しを使用して外部実行ファイル(例:監視下の関数)に対して関数の呼び出しを開始することを表している。上述したように、コードは、対応するIATテーブルのエントリを使用して間接的に呼び出しを開始してもよい。静的呼び出しを検出するために、監視下の関数のセットに関連するIATテーブルのエントリを一部又は全て、フローがIATコードに変更されるように実装してもよい。いくつかの実施形態において、IATコードは、静的呼び出しを検出し、関連するデータ構造を更新し、元の対象の関数にフローを戻すことができる。
【0173】
図12は、ここに記載するいくつかの実施形態による、静的リンクプロセスの例を示す図である。いくつかの実施形態において、インポートモジュール1202は、静的リンクフローを使用して、インポートされたモジュール1204からインポートされたシンボルを取得してもよい。いくつかの実施形態において、インポートモジュール1202、及びインポートされたモジュール1204の両方が、モジュールヘッダ1206、NTヘッダ1208、及び種々のオプションヘッダ1210を含んでいてもよい。いくつかの実施形態において、オプションヘッダ1210は、とりわけ、エクスポートデータディレクトリ1212、インポートデータディレクトリ1214、及び/又はインポートテーブルディレクトリ1216を含んでいてもよい。いくつかの実施形態において、インポートデータディレクトリ1214は、インポートされたモジュール1204から一以上のエクスポートされたモジュールのデータ及びコード1230をインポートするために使用され得るモジュールデータ及びコード1218のインポートを指し示す。いくつかの実施形態において、インポートモジュールデータ及びコード1218は、インポート名1222、関数名1224、及び関数アドレス1226を含むインポート記述子1220を含んでいてもよい。インポート関数コード1228は関数アドレス1226と組み合わせて、インポートされた関数1204からインポートされた関数を呼び出すために使用できる。この情報は、インポートされたモジュール1204のエクスポートデータディレクトリ1212から取得することができる。インポートデータディレクトリ1216と同様に、エクスポートデータディレクトリはエクスポートディレクトリ1232を指し、これにはエクスポート名1234、関数名1236、及び/又は関数アドレス1238が含まれる。エクスポートデータディレクトリ1214は、インポートされたモジュール1204内のエントリポイントへのインポートを解決するために使用されるデータを指し示す。エクスポート関数コード1240を関数アドレス1238と組み合わせて使用して、インポートモジュール1202にアドレスを提供してもよい。前述したように、静的フローは、実行ファイルの初期化プロセスの一環として発生し得るものであり、実行ファイルが実行中に、例えば上述した動的呼び出しの手法によって、明示的に特定のシンボルをロード又は取得することなく、インポートされたシンボルを使用できるようにする。いくつかの実施形態において、静的呼び出しを使用して、インポートされた関数のアドレスを、例えば、インポートアドレステーブル(例:関数アドレス1226。以下、「IAT」)のエントリ内の特定済み実行ファイルに記憶する。いくつかの実施形態において、実行ファイルのロード段階が終了した後、実行ファイルは、インポートされた関数を、これら関数の位置を明示的に把握することなく、IATテーブルを用いて間接的に呼び出すことができる。いくつかの実施形態において、エクスポート関数コード1240は、指定されたエクスポート関数のコードを含んでいる。いくつかの実施形態において、モジュール1202がコンパイルされると、コンパイラは、IATで特定の値を把握することなく、IATを使用するコード断片を生成する。いくつかの実施形態において、オペレーティングシステムによって実装される実行ファイルであるローダは、モジュール1202に対する特定の値でIATを満たす。
【0174】
図13は、ここに記載するいくつかの実施形態による、ライブラリに依存しないコード検出システム及び静的リンクプロセスの例示的な方法を示す図である。いくつかの実施形態において、静的呼び出しを監視するために、フッキングエンジン1242が利用される。いくつかの実施形態において、インポートモジュール1202が、インポートされたモジュール1204、即ち監視下の関数のインポートされた関数アドレス1238の取得を試みると、システム及び方法は、元の関数アドレス1238の改変アドレスへの置き換えを伴ってもよい。したがって、いくつかの実施形態において、インポートされた関数アドレス1238をIATテーブル1226にロードしたあと、改変アドレスが提供され、ロードされたインポートモジュール1202に提示される。いくつかの実施形態において、実行時にインポートモジュール1202が、監視下の関数の呼び出しを試みると、元の関数アドレスを介して元の関数を呼び出す代わりに、改変関数アドレスが当該呼び出しをフッキングエンジン1242へリダイレクトする。いくつかの実施形態において、実行中、改変関数アドレスが、監視下の関数を呼び出すために使用される場合、呼び出しは、代わりにフッキングエンジン1242のトランポリンコード1246にリダイレクトされる。いくつかの実施形態において、トランポリンコードは、改変関数アドレスが呼び出されたことを検証し、インポートモジュール1202が静的呼び出しを介して関数アドレスを取得したことを検証する。そのため、いくつかの実施形態において、当該呼び出しは1244において、有効な呼び出しとしてマークされる。有効な呼び出しとしてマークした後、トランポリンコードは、実行のために、当該呼び出しを監視下の関数のアドレスにリダイレクトして戻してもよい。トランポリンに加えて、エクスポート関数コード1240は、改変された関数の実行をフッキングエンジン1242に迂回させるように変更されてもよい。このようにして、いくつかの実施形態において、監視下の関数を実際に実行する前に、呼び出しは、フッキングエンジン1242内の迂回コード1248に迂回され、呼び出しが検証される。いくつかの実施形態において、呼び出しが検証された後、フローは、実行のために元の監視下の関数に戻される。いくつかの実施形態において、迂回機能は、以下に説明する動的フローの一態様を含んでいてもよい。

動的フロー
【0175】
いくつかの実施形態において、動的フローとは、コードが動的呼び出しを使用して外部実行ファイルに対して関数の呼び出しを開始することを表している。動的な場合、実行ファイルはランタイム時に外部対象アドレスを取得してもよい。この場合、実行ファイルはローダに対して外部の対象(対象のモジュールと関数の両方)がどこにあるかを問い合わせてもよい。いくつかの実施形態において、上述のように、コードは、ローダAPI関数を使用して関数のアドレスを判定した後、対象の関数に対する呼び出しを開始してもよい。いくつかの実施形態において、動的呼び出しを検出するために、本明細書のシステム及び方法は、関連するローダAPI関数を制御してコードに情報(「Resolving Function(解決関数)」)を提供する。いくつかの実施形態において、制御は、解決関数を迂回させ、対応するシンボルのトランポリンコード1246に対する戻り値を改変することによって実施されてもよい。上述の方法を使用して、いくつかの実施形態において、コードが、監視下の関数の戻されたアドレスを呼び出すと、当該呼び出しが迂回コード1248にリダイレクトされる。
【0176】
いくつかの実施形態において、動的フローにおいて、外部ライブラリ(共有ライブラリ)の名称は最終的な実行可能ファイルに配置されるが、実行可能ファイルとライブラリの両方がメモリに配置されるランタイム時に実際のリンクが行われる。動的フローは、いくつかのプログラムに、実行可能モジュールの単一のコピーを利用させる。
【0177】
図15は、ここに記載するいくつかの実施形態による、動的フロープロセスの例を示す図である。図示する例において、呼出し元1502(即ち、インポートモジュール1202)が、ランタイム時にモジュール1510を取得する必要がある場合、種々のAPI、例えば、GetModuleHandle 1506を介して取得してもよい。API1506を使用して、とりわけN個のモジュール1510、1512、及び1514を含み得るローダ内部レコード1508からモジュールハンドルを取得してもよい。さらに、所望の関数アドレスは、APIのGetProcAddress 1504を使って動的に取得してもよい。しかしながら、いくつかの実施形態において、APIを使って動的に関数を取得するには、呼出し元1502は関連するモジュールがどこに位置しているかを把握していなければならない。動的フローを監視するために、GetProcAddress 1504を含む、ローダに関連する関数のリターンアドレスを制御してもよい。したがって、ここに記載のシステム及び方法は、リターンアドレスを制御するように構成されていてもよく、これは例えば元々の関数アドレス、又は、トランポリンコードであってもよい。
【0178】
図16は、ここに記載するいくつかの実施形態による、ライブラリに依存しないコード検出システム及び動的フロープロセスの例示的な方法を示す図である。いくつかの実施形態において、ローダAPI(例:GetProcAddress)は、動作のフローをフッキングエンジン1242に向けるように、ここに記載のシステム及び方法によって改変することができる。特に、いくつかの実施形態において、インポートモジュール1202がランタイム時にGetProcAddressを使用する際に、元々のインポートされた関数アドレスの代わりに、インポート関数をGetProcAddressトランポリンコード1602に向けてもよい。GetProcAddressトランポリンコード1602は、さらに、フローをGetProcAddress迂回コード1604に向けてもよい。インポートモジュール1202が、静的にリンクされた関数APIを使用して監視下の関数を取得した場合、GetProcAddress迂回コード1604は、フローを、静的フローに関して上述した関数名トランポリン1246へリダイレクトしてもよい。関数名トランポリン1246は、関数の呼び出しが動的に行われたことを示すGetProcAddressトランポリンコード1602及びGetProcAddress迂回コード1604を通過するので、関数呼び出しが良性であることを検証することができる。静的フローと同様に、一旦検証が行われると、トランポリンコード1246は検証後に元の関数を呼び出すことができる。図14に示すように、検証データは、呼び出しデータベース1254に記憶されてもよい。また、静的フロー同様に、関数の実行前に、エクスポート関数コード1240を改変して、実行を迂回コード1248に迂回させて、呼び出しの良性をさらに検証してもよい。迂回コード1248が完了した後、フローは元の関数の実行に戻されてもよい。

不審なフロー
【0179】
図14は、ここに記載するいくつかの実施形態による、ライブラリに依存しないコード検出システムの例を示す図である。図14は、いくつかの実施形態において、特にフッキングモジュールが、どのようにして、不審なコードによる独立的な関数へのアクセスの試みを検出するかを例示している。いくつかの実施形態において、例えば、不審なコード1250は、静的又は動的フローを介して対象の関数の取得を試みること、)インポートされたモジュール1204内のメタデータ(即ち、エクスポートされたヘッダ)を使って対象の関数を見つける試み、2)ローダの内部レコード1252から直接対象のディレクトリを見つける試み、3)対応するトランポリンを介さずに直接対象の関数を呼び出す試みを回避することがある。いずれの場合も、いくつかの実施形態において、不審なコードは、IATテーブル又はローダを介して監視下の関数がロードされた際に、エクスポート関数コード1240の改変アドレスを取得しない。したがって、いくつかの実施形態において、実行時に不審なコードからの呼び出しはトランポリンコード1246にリダイレクトされず、ローダを用いた呼び出しとして検証されない。しかしながら、いくつかの実施形態において、エクスポート関数コード1240を用いて関数を実行しても、呼び出しはフッキングエンジン1242の迂回コード1248に迂回させられる。したがって、いくつかの実施形態において、フッキングエンジンが、迂回コード1248において、呼び出しがトランポリンコード1246をトリガーしなかったため、標準的な(例:静的/動/ローカル)フローを介して完了しなかったことを実証する。したがって、不審なコード1250は、悪意の可能性があるとして、システムによってフラグが立てられる。いくつかの実施形態において、迂回コード1248は、監視下の関数が(動的、静的、又は間接的のいずれかによって)呼び出されたときのみに実行されるコード断片を表している。これは、本明細書のシステムが、対象の関数を改変するために発生する。したがって、トランポリンコード1246を含むいかなる実行ファイルが、エクスポートされた関数の呼び出しを試みても、迂回コードが実行される。

ローカルフロー
【0180】
前述したように、コードはまたローカル呼び出しを開始することもある。したがって、いくつかの実施形態において、静的呼び出しも動的呼び出しもコードによって開始されないことがあるが、呼び出し元が、同一の実行ファイル又は領域内の対象の関数アドレスを把握しているため、独立呼び出しの必要はない。ローカル呼び出しされた関数と、独立呼び出しとを区別するために、ここに記載のシステム、方法、及び、デバイスのいくつかの実施形態では、迂回コードを監視して、リターンアドレスが監視下の関数と同一の実行ファイル/モジュールに位置しているかを判定してもよい。いくつかの実施形態において、リターンアドレスが監視下の関数と同一の実行ファイル/モジュールに位置している場合、呼び出しは、不審な独立呼び出しではなく、ローカル呼び出しとして判定されてもよい。
【0181】
したがって、トランポリンコード、迂回コードの使用、及び/又は、IATテーブル及び静的にリンクされたAPIの改変を通じて、監視下の関数へのアクセスを検証してもよい。実行ファイルが、静的、動的、又は、ローカル呼び出しを使わずに監視下の関数へアクセスすると判断した場合、フッキングエンジンによって、不審又は悪意あるとしてフラグが立てることができ、マルウェア検出ソフトウェアによってさらに評価されてもよい。

コンピュータシステム
【0182】
いくつかの実施形態において、ここに記載のシステム、プロセス、及び、方法は図17に例示されるようなコンピュータシステムを用いて実施される。例示的なコンピュータシステム1702は、一以上のネットワーク1718を介して、一以上のコンピュータシステム1720、及び/又は、一以上のデータソース1722と通信状態にある。図17が、コンピュータシステム1702の実施形態を例示する一方、コンピュータシステム1702のコンポーネント及びシステムにおいて提供される機能は、より少ないコンポーネント及びシステムに結合可能であり、或いは、さらに別のコンポーネント及びシステムに分割可能であることが認識できるであろう。

コンピュータシステムのコンポーネント
【0183】
コンピュータシステム1702は、ここに記載する機能、方法、作用、及び/又はプロセスを実施するマルウェア及びコード検出システム1714を含んでいる。コンピュータシステム1802は、以下でさらに記載する中央処理ユニット1706によってコンピュータシステム1702上で実行されるマルウェア及びコード検出システム1714を含んでいてもよい。
【0184】
一般的に、本明細書で使用する「システム」という文言は、ハードウェア又はファームウェアで具現化されるロジック、又は、入り口と出口を有するソフトウェア指示の集合体を意味する。システムは、JAVA、C、又はC++等のプログラム言語で記述される。ソフトウェアシステムは、コンパイルされてもよく、動的リンクライブラリにインストールされた実行可能プログラムにリンクされてもよく、又は、BASIC、PERL、PHP、Python等のインタプリタ言語や、これらのような言語で記述されてもよい。ソフトウェアシステムは、他のシステムから、又は、自身から呼び出すことが可能であり、及び/又は、イベント又は割り込みの検出に応じて呼び出されてもよい。ハードウェアに実装されるシステムは、ゲートやフリップフロップ等の接続されたロジックユニットを含んでおり、及び/又は、プログラム可能なゲート配列又はプロセッサ等のプログラム可能ユニットを含むことができる。
【0185】
一般的に、本明細書で記載するシステムは、他のシステムと組み合わせ可能な、又は、物理的な組織やストレージに関わらず、サブシステムに分割可能なロジックシステムを意味する。システムは、一以上のコンピュータシステムによって実行され、任意の適切なコンピュータ読取り可能な媒体に記憶可能であり、又は、特別に設計されたハードウェア又はファームウェアで全体又は一部を実施可能である。上述した方法、計算、プロセス、解析はコンピュータを使用することによって容易になるが、全ての計算、解析、及び/又は、最適化にコンピュータシステムの使用が求められるわけではない。さらに、いくつかの実施形態において、本明細書で記載するプロセスブロックは、変更、再配置、結合、及び/又は省略されてもよい。
【0186】
コンピュータシステム1702は、マイクロプロセッサを含む一以上の処理部(CPU)1706を備えている。コンピュータシステム1702は、さらに情報を一時的に記憶するランダムアクセスメモリ(RAM)、情報を恒久的に記憶する読取り専用メモリ(ROM)などの物理メモリ1710、及び、補助記憶装置、ハードドライブ、回転磁気ディスク、ソリッドステートディスク(SSD)、フラッシュメモリ、相変化メモリ(PCM)、3D XPointメモリ、ディスケット、又は光学媒体記憶装置などの大容量記憶装置1704を備えている。或いは、大容量記憶装置は、サーバアレイに実装することができる。一般的には、コンピュータシステム1702のコンポーネントは規格に基づくバスシステムを使ってコンピュータに接続されている。バスシステムは、Peripheral Component Interconnect (PCI) 、Micro Channel、SCSI、Industrial Standard Architecture (ISA) 、Extended ISA (EISA)アーキテクチャ等、種々のプロトコルを使用して実装できる。
【0187】
コンピュータシステム1702は、キーボード、マウス、タッチパッド、プリンタ等の一以上の入力/出力(I/O)デバイス及びインターフェース1712を備えている。I/O装置及びインターフェース1712は、ユーザに対するデータの視覚的提示を可能にするモニター等の、一以上の表示装置を備えている。より詳細には、表示装置はアプリケーションソフトウェアデータのGUIの表示、及びマルチメディアの表示を行う。I/O装置及びインターフェース1712は、また種々の外部装置に対して通信インターフェースを提供できる。コンピュータシステム1702は、例えば、スピーカ、ビデオカード、グラフィックアクセラレータ、マイクロフォン等の、一以上マルチメディア装置1708を備得ることができる。

コンピュータシステムデバイス/オペレーティングシステム
【0188】
図17は、マルウェア及びコード検出システムの一以上の実施形態を実施するソフトウェアを実行するように構成されたコンピュータハードウェアシステムの実施形態を示すブロック図である。
【0189】
コンピュータシステム1702は、サーバ、Windowsサーバ、SQLサーバ、Unixサーバ、パーソナルコンピュータ、ノートパソコン等、種々のコンピュータデバイスで実行できる。他の実施形態において、コンピュータシステム1702は、クラスターコンピュータシステム、メインフレームコンピュータシステム、及び/又は、大規模データベースの制御及び/又は通信、大容量トランザクション処理の実行、及び大規模データベースからのレポートの生成に適した他のコンピューティング・システムで実行できる。コンピュータシステム1702は、一般的にz/OS、Windows、Linux、UNIX、BSD、SunOS、Solaris、MacOS、又は独自のオペレーティング・システムを含む他の互換性のあるオペレーティングシステムによって、制御・調整される。オペレーティングシステムは、実行されるコンピュータプロセスを制御及びスケジュールし、メモリを管理し、ファイル・システム、ネットワーキング及びI/Oサービスを提供し、とりわけグラフィカルユーザインターフェース(GUI)などのユーザインターフェースの提供を行う。

ネットワーク
【0190】
図17に示すコンピュータシステム1702は、通信リンク1716(有線、無線、又はこれらの組み合わせ)を介して、LAN、WAN、又はインターネットなどのネットワーク1718に接続される。ネットワーク1718は、様々なコンピュータデバイス及び/又は他の電子デバイスと通信する。ネットワーク1718は、一以上のコンピュータシステム1720、及び一以上のデータソース1722と通信する。コンピュータシステム1702は、コンピュータシステム1720、及び/又はデータソース1722がウェブ対応のユーザアクセスポイントを介してアクセスできるマルウェア及びコード検出システム1714を含んでいる。接続は、直接的な物理的接続であってもよく、仮想的接続、その他のタイプの接続であってもよい。ウェブ対応のユーザアクセスポイントは、テキスト、グラフィックス、オーディオ、ビデオ、及び他のメディアを使用してデータを提示し、ネットワーク1718を介してデータとの相互作用を可能にするブラウザシステムを含んでいてもよい。
【0191】
出力システムは、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイ、又は他のタイプ、及び/又はディスプレイの組み合わせ等、全点アドレス可能ディスプレイの組み合わせとして実施することができる。出力システムは、入力デバイス、及び/又はインターフェース1712と通信可能に実施することができ、また、ユーザがメニュー、ウィンドウ、ダイアログボックス、ツールバー、コントロール等の定型化された画面要素を使用してデータにアクセスできるようにする適切なインターフェースを備えたソフトウェアも含んでいる。さらに、出力システムは、入出力デバイスのセットと通信して、ユーザからの信号を受信することができる。

その他のシステム
【0192】
コンピュータシステム1702は、一以上の内部及び/又は外部データソース(例:データソース1722)を含んでいてもよい。いくつかの実施形態において、一以上のデータリポジトリ、及び上述したデータソースは、DB2、Sybase、Oracle、CodeBase、Microsoft(登録商標)SQLサーバ、及びフラットファイルデータベース等のその他のデータベース等のリレーショナルデータベース、エンティティリレーションシップデータベース、オブジェクト指向データベース、及び/又は、レコードベースのデータベースを用いて実施することができる。
【0193】
コンピュータシステム1702は、一以上のデータソース1722にアクセスすることもできる。データソース1722は、データベース又はデータリポジトリに格納することができる。コンピュータシステム1702は、ネットワーク1718を介して、一以上のデータソース1722にアクセス可能であり、又は、I/O装置及びインターフェース1712を介してデータベース又はデータリポジトリにアクセス可能である。一以上のデータソース1722を格納するデータリポジトリは、コンピュータシステム1702内に存在してもよい。

URLとCookie
【0194】
いくつかの実施形態において、ここに記載されるシステム、方法、及びデバイスの一以上の特徴は、例えば、データ又はユーザ情報を格納。及び/又は送信するために、URL、及び/又はCookieを利用することができる。URL(Uniform Resource Locator)は、Webアドレス及び/又はデータベース及び/又はサーバに格納されるWebリソースへの参照を含むことができる。URLは、コンピュータ及び/又はコンピュータネットワーク上のリソースの場所を指定することができる。URLは、ネットワークリソースを検索するメカニズムを含んでいてもよい。ネットワークリソースのソースは、URLを受け取り、Webリソースの場所を識別し、Webリソースを要求者に送信して戻すことができる。URLはIPアドレスに変換でき、ドメインネームシステム(DNS)はURLとそれに対応するIPアドレスを検索できる。URLは、Webページ、ファイル転送、電子メール、データベースへのアクセス、及びその他のアプリケーションへの参照となり得る。URLは、パス、ドメイン名、ファイル拡張子、ホスト名、クエリ、フラグメント、スキーム、プロトコル識別子、ポート番号、ユーザ名、パスワード、フラグ、オブジェクト、リソース名、及び/又はこれらに類似する物を識別する一連の文字を含むことができる。ここに開示されるシステムは、URLに対してアクションを生成、受信、送信、適用、解析、直列化、レンダリング、及び/又は実行することができる。
【0195】
HTTP Cookie、ウェブCookie、インターネットCookie、及びブラウザCookieとも称されるCookieは、ウェブサイトから送信されるデータ、及び/又はユーザのコンピュータに格納されるデータを含むことができる。このデータは、ユーザが閲覧している間にユーザのウェブブラウザによって格納することができる。Cookieは、オンラインストアのショッピングカート、ボタンのクリック、ログイン情報、及び/又は過去に訪問したウェブページ又はネットワークリソースの記録等、ウェブサイトが以前の閲覧情報を記憶するために有用な情報を含むことができる。Cookieはまた、ユーザが入力する情報、例えば名前、住所、パスワード、クレジットカード情報などを含むことができる。Cookieは、コンピュータ機能も実行可能である。例えば、認証Cookieをアプリケーション(ウェブブラウザなど)で使用して、ユーザが(ウェブサイト等に)すでにログインしているかどうかを識別できる。Cookieデータは、暗号化することによって、消費者にセキュリティを提供できる。追跡Cookieを使用すると、個人の過去の閲覧履歴を収集できる。ここに開示されるシステムは、個人のデータにアクセスするためにCookieを生成し、使用することができる。システムはまた、認証情報を保存するJSONウェブトークン、認証プロトコルとしてのHTTP認証、セッション又は識別情報を追跡するIPアドレス、URL等を生成し、使用することもできる。

別の実施形態
【0196】
上述の明細書では、本発明をその特定の実施形態を参照して説明した。しかしながら、本発明のより広範な精神及び範囲から逸脱することなく、様々な修正及び変更を行うことができることは明らかである。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味でみなされる。
【0197】
実際、本発明は、特定の実施形態及び実施例に関連して開示されてきたが、本発明は、具体的に開示された実施形態を超えて、本発明の他の代替の実施形態、及び/又は使用、ならびにその明らかな変形例及び均等物に拡大することが当業者には理解されよう。さらに、本発明の実施形態のいくつかの変形例を示し、詳細に説明したが、当業者には、本開示に基づいて、本発明の範囲内にある他の変形例が容易に明らかになるであろう。また、実施形態の特定の特徴及び態様の様々な組合せ、又は部分的な組合せが行われてもよく、依然として本発明の範囲内にあると想定される。開示された実施形態の様々な特徴及び態様は、開示された発明の実施形態の様々なモードを形成するために、互いに組み合わされ得る、又は置き換えられ得ると理解されるべきである。ここに開示されるいずれの方法も、記載された順序で実施される必要はない。したがって、ここに開示される本発明の範囲は、上述の特定の実施形態によって制限されるべきではないことが意図される。
【0198】
本開示のシステム及び方法は、それぞれいくつかの革新的な態様を有し、そのうちの1つだけが、ここに開示された所望の属性に対して責任を負うものでも要求されるものでもないことが理解されよう。上述の様々な特徴及びプロセスは、互いに独立して使用されてもよく、又は様々な方法で組み合わされてもよい。すべての可能な組合せ及び下位組合せは、本開示の範囲内に入ることが意図される。
【0199】
個々の実施形態に関連してここに記載される特定の特徴も、単一の実施形態において組み合わせて実施することができる。一方、単一の実施形態に関連して説明される様々な特徴も、複数の実施形態において別々に、又は任意の適切な下位組合せで実施することができる。さらに、特徴は特定の組み合わせで作用するものとして上述される場合があり、そのようなものとして当初主張されていたとしても、主張された組み合わせからの一以上の特徴は、場合によっては、組み合わせから除去されてもよく、主張された組み合わせは、下位組み合わせ又は下位組み合わせの変形に適用されてもよい。単一の特徴又は特徴のグループは、各々の及び全ての実施形態にとって必要ではなく、必須でもない。
【0200】
また、本明細書で使用される条件付き言語、特に、「can」、「could」、「might」、「may」、「例えば」などは、特に明記されない限り、又は使用される文脈内で他に理解されない限り、一般に、特定の実施形態が特定の特徴、要素及び/又はステップを含むが、他の実施形態は含まないことを伝えることを意図していることが理解される。したがって、このような条件付き言語は、特徴、要素及び/又はステップが一以上の実施形態に何らかの方法で必要であること、又は一以上の実施形態が、著者の入力又は促しの有無にかかわらず、これらの特徴、要素及び/又はステップがいずれかの特定の実施形態に含まれるか、又は実行されるべきかを決定する論理を必然的に含むことを暗示することを意図していない。「comprising」、「including」、「having」などの用語は、同義であり、オープンエンド方式で包括的に使用され、追加の要素、特徴、作用、動作などを除外しない。さらに、用語「又は」は、その包括的な意味で使用される(その排他的な意味では使用されない)ため、例えば、要素の列挙を接続するために使用される場合、用語「又は」は、列挙内の要素の1つ、いくつか、又は全てを意味する。また、本願及び特許請求の範囲において使用される「a」、「an」及び「the」は、特に断りがない限り、「1以上」又は「少なくとも1つ」を意味するものと解釈される。同様に、動作は特定の順序で図面に示すことができるが、好ましい結果を達成するために、これら動作は、図示された特定の順序又は連続した順序で実行される必要はないこと、又は図示されたすべての動作が実行される必要があることが認識されるべきである。さらに、図面には、フローチャートの形態で一以上の例示的なプロセスが概略的に示されることがある。しかしながら、図示されていない他の動作が、概略的に示されている例示的な方法及びプロセスに組み込まれてもよい。例えば、一以上の追加の動作が、図示された動作のいずれかの前、後、同時に、又はこれらの間に実行されてもよい。さらに、他の実施形態では、動作を再配置、又は順序変更することができる。特定の状況においては、マルチタスキング及び並列処理が有利となり得る。さらに、上述の実施形態における様々なシステム構成要素の分離は、全ての実施形態においてそのような分離を必要とするものとして理解されるべきではなく、記載されたプログラム、コンポーネント、及びシステムは、一般的に単一のソフトウェア製品においてともに統合されてもよく、又は複数のソフトウェア製品にパッケージ化されてもよいことが理解されるべきである。さらに、他の実施形態は、以下の特許請求の範囲の範囲内である。特許請求の範囲に記載された動作は、場合によっては、異なる順序で実行されることがあるが、依然として望ましい結果を達成することができる。
【0201】
さらに、ここに記載された方法及びデバイスは、様々な変形例、及び代替形態の影響を受けやすいが、その具体例が図面に示されており、ここに詳細に記載されている。しかしながら、本発明は、開示された特定の形態又は方法に限定されるものではなく、むしろ、本発明は、記載された様々な実施形態及び添付の特許請求の範囲の精神及び範囲内にある全ての変形例、均等物、及び代替物を包含するものであることを理解されたい。さらに、実施形態又は実施形態に関連する任意の特定の特徴、態様、方法、特性、特徴、品質、属性、要素などのここに開示する内容は、ここに記載する他のすべての実施形態又は実施形態で使用することができる。ここに開示されるいずれの方法も、記載された順序で実施される必要はない。ここに開示される方法は、実施者によって行われる特定の行為を含む場合があるが、これら方法には、任意の第三者による明示的に又は暗黙的なこれら行為の指示を含む場合もある。ここに開示される範囲はまた、あらゆる重複、サブ範囲、及びこれらの組み合わせを含む。「まで」、「少なくとも」、「より大きい」、「より小さい」、「間」などの言語は、記載される数を包含する。「約」又は「約」のような用語が先行する数字は、記載される数字を包含し、状況に基づいて解釈されるべきである(例えば、当該状況下で合理的に可能な限り正確に。例えば、±5%、±10%、±15%等)。例えば、「約3.5mm」は、「3.5mm」を包含する。「実質的に」のような用語が先行する語句は、記載される語句を包含し、状況(例えば、当該状況下で合理的に可能な限り)に基づいて解釈されるべきである。例えば、「実質的に一定」は「一定」を包含する。特に明記しない限り、すべての測定は、温度及び圧力を含む標準条件で行われる。
【0202】
本明細書で使用されるように、列挙される項目の「少なくとも一つ」を参照する語句は、単一の項目を含むこれら項目の任意の組み合わせを意味する。例として、「A、B、又はCの少なくとも1つ」は、A、B、C、A及びB、A及びC、B及びC、ならびにA、B及びCを網羅することを意図している。特に明記されない限り、語句「X、Y、Zの少なくとも1つ」のような連接言語は、項目、用語等がX、Y又はZの少なくとも1つであり得ることを示す一般に使用される文脈で理解される。したがって、そのような連言は、一般に、特定の実施形態がそれぞれ存在するためにXの少なくとも1つ、Yの少なくとも1つ、及びZの少なくとも1つを必要とすることを意味することを意図していない。ここに提供される見出しは、もしあれば、便宜上のものであり、ここに開示されるデバイス及び方法の範囲又は意味に必ずしも影響しない。
【0203】
従って、特許請求の範囲は、ここに示される実施形態に限定されることを意図しておらず、本開示、ここに開示される原理及び新規な特徴と一致する最も広い範囲を与えられるべきである。
【0204】
実施形態1:ファイルにおける実行可能コードをプログラム的に識別するコンピュータで実施される方法であって、前記方法は、コンピュータシステムによって、ファイルの一部からバイト列にアクセスする処理と、前記コンピュータシステムによって前記バイト列から所定数のn-グラムを抽出する処理であって、前記各n-グラムは、前記バイト列中の隣接する一連のバイトを含んでおり、前記各n-グラム中の隣接する一連のバイトは、n個のバイトを含む、処理と、前記コンピュータシステムによって、カウンタ列を生成する処理であって、前記カウンタ列の各カウンタは、前記n-グラムのうちの1つと関連付けられており、前記各カウンタは整数値を有しており、前記整数値は前記バイト列内の関連付けられたn-グラムの発生頻度に基づいて生成される、処理と、前記コンピュータシステムによって、前記カウンタ列を入力特徴として予測機械学習モデルに提供する処理と、前記予測機械学習モデルによって、前記バイト列が実行可能なコードを含むモデル確率値を決定する処理とを含み、前記コンピュータシステムはコンピュータプロセッサと電子記憶媒体を備えている。
【0205】
実施形態2:前記実施形態1の方法であって、実行可能なコードとは、コンピュータシステム上でバイト列を実行することなく、プログラム的に識別される。
【0206】
実施形態3:前記実施形態1又は2の方法であって、前記方法は、前記バイト列が実行可能なコードを含むモデル確率値が所定の閾値を超えるものである場合、マルウェア検出システムによってさらに解析を行うために、前記コンピュータシステムによって前記バイト列又はファイルにフラグを立てる処理をさらに含む。
【0207】
実施形態4:前記実施形態1~3のいずれかの方法であって、前記ファイルは、実行可能なファイル形式を含む。
【0208】
実施形態5:前記実施形態1~4のいずれかの方法であって、前記ファイルは、ポータブル実行可能ファイル(PE)を含む。
【0209】
実施形態6:前記実施形態1~5のいずれかの方法であって、前記ファイルの一部には、一以上のリソース、文字列、変数、オーバーレイ、又はセクションの1つ以上が含まれている。
【0210】
実施形態7:前記実施形態1~6のいずれかの方法であって、前記ファイルの一部には、実行可能許可が含まれていない。
【0211】
実施形態8:前記実施形態1~7のいずれかの方法であって、前記n-グラムは、bi-グラムを含む。
【0212】
実施形態9:前記実施形態1~7のいずれかの方法であって、nは2~500である。
【0213】
実施形態10:前記実施形態1~7のいずれかの方法であって、前記n-グラムは、nが第一の整数である第一のn-グラムセットと、nが第二の整数である第二のn-グラムセットとを含んでおり、前記第一の整数は前記第二の整数と異なっている。
【0214】
実施形態11:前記実施形態1~10のいずれかの方法であって、n-グラムの所定の数は500である。
【0215】
実施形態12:前記実施形態1~10のいずれかの方法であって、n-グラムの所定の数は50~10000である。
【0216】
実施形態13:前記実施形態1~12のいずれかの方法であって、前記方法は、コンピュータシステムによって、各カウンタを前記バイト列のデータ長で正規化する処理を含む。
【0217】
実施形態14:前記実施形態1~13のいずれかの方法であって、前記予測機械学習モデルは、複数の別々のモデルを含んでおり、各モデルは異なるマシンアーキテクチャコードに対応している。
【0218】
実施形態15:前記実施形態14の方法であって、前記マシンアーキテクチャコードには、.NET、x86、及び/又はx64が含まれる。
【0219】
実施形態16:前記実施形態1~15のいずれかの方法であって、前記予測機械学習モデルは、サポートベクターマシン(SVM)、線形回帰、k-近傍法(KNN)アルゴリズム、ロジスティック回帰、ナイーブベイズ(naive Bayes)、線形判別分析、決定木、ニューラルネットワーク、又は類性学習からなるグループから選択された少なくとも1つの学習アルゴリズムを含む。
【0220】
実施形態17:前記実施形態1~15のいずれかの方法であって、予測機械学習モデルは、ランダムフォレストを含む。
【0221】
実施形態18:前記実施形態17の方法であって、前記ランダムフォレストは複数の決定木を含んでおり、各決定木は学習用のバイトセットで独立的に教育される。
【0222】
実施形態19:前記実施形態18の方法であって、モデル確率値は、複数の決定木確率値を平均化することによって決定され、各決定木確率値は、複数の決定木の各決定木を介してバイト列をトラバースすることによって生成される。
【0223】
実施形態20:ファイルにおける実行可能なコードをプログラム的に識別するコンピュータシステムであって、前記システムは、複数のコンピュータで実行可能な指示を記憶するように構成された一以上のコンピュータで読取り可能な記憶装置と、一以上の他のコンピュータで読取り可能な記憶装置と通信可能に接続された一以上のハードウェアコンピュータプロセッサとを備えており、前記一以上のハードウェアコンピュータプロセッサは、複数のコンピュータで実行可能な指示を実行することによって、前記システムに、ファイルの一部からバイト列にアクセスする処理と、前記バイト列から所定数のn-グラムを抽出する処理であって、前記各n-グラムは、前記バイト列中の隣接する一連のバイトを含んでおり、前記各n-グラム中の隣接する一連のバイトは、n個のバイトを含む、処理と、カウンタ列を生成する処理であって、前記カウンタ列の各カウンタは、前記n-グラムのうちの1つと関連付けられており、前記各カウンタは整数値を有しており、前記整数値は前記バイト列内の関連付けられたn-グラムの発生頻度に基づいて生成される、処理と、前記カウンタ列を入力特徴として予測機械学習モデルに提供する処理と、前記予測機械学習モデルによって、前記バイト列が実行可能なコードを含むモデル確率値を決定する処理とを行わせるように構成されている。
【0224】
実施形態21:実行可能なコードから、マルウェア検出モデルに入力する機械学習特徴を自動的に抽出する、コンピュータで実施される方法であって、前記方法は、コンピュータシステムによって、ファイルから前記実行可能なコードにアクセスする処理と、前記コンピュータシステムによって、埋込マトリクスを有する画像再スケーリングアルゴリズムに、前記実行可能なコードを入力する処理であって、前記画像再スケーリングアルゴリズムは、前記実行可能なコードの各バイトを、前記埋込マトリクスを用いて数ベクトルに変換して埋込ベクトル空間を作成し、前記変換を行っている間、前記実行可能なコードの順序が維持される、処理と、前記コンピュータシステムによって、前記埋込ベクトル空間の一以上のベクトル層をチャネルフィルタリングする処理であって、前記チャンネルフィルタリングの処理は、前記一以上のベクトル層を複数のブロックに統合する処理と、フィルタメカニズムを適用して一以上の固定サイズのベクトル入力を生成する処理であって、各固定サイズのベクトル入力は、対応するベクトル層、又は対応するベクトル層のブロックを表している、処理とを含み、前記コンピュータシステムによって、ニューラルネットワークの入力層に前記一以上の固定サイズのベクトル入力を入力する処理であって、前記ニューラルネットワークは、複数の処理部の層を備えており、前記複数の層は、少なくとも、前記入力層と、一以上の隠し層と、出力層とを備えており、前記複数の層の一連の層は、それぞれ前の層の出力値を入力値として使用し、前記出力層は、前記実行可能なコードの悪意度の分類を生成する、処理とを含み、前記コンピュータシステムによって、前記ニューラルネットワークの前記出力層直前の最終隠し層の出力値を抽出する処理と、前記コンピュータシステムによって、機械学習特徴として前記最終隠し層の出力値を、前記マルウェア検出モデルに提供する処理とを含み、前記コンピュータシステムは、コンピュータプロセッサと電子記憶媒体とを備えている。
【0225】
実施形態22:前記実施形態21の方法であって、前記ニューラルネットワークは教師あり学習モデル、半教師あり学習モデル、又は教師なし学習モデルを含む。
【0226】
実施形態23:前記実施形態21又は22の方法であって、前記実行可能なコードは、ポータブル実行可能(PE)ファイルの一部である。
【0227】
実施形態24:前記実施形態21~23のいずれかの方法であって、前記一以上の隠し層のそれぞれは、前記入力値に変換を行い、直後に連続する層への出力値を生成するように構成されている。
【0228】
実施形態25:前記実施形態21~24のいずれかの方法であって、前記画像再スケーリングアルゴリズムは、前処理ニューラルネットワークを含んでおり、前記前処理ニューラルネットワークは、Word2Vecを含む。
【0229】
実施形態26:前記実施形態21~25のいずれかの方法であって、前記方法は、前記ニューラルネットワークの出力層から、前記実行可能なコードの悪意度の分類を破棄する処理をさらに含む。
【0230】
実施形態27:前記実施形態21~26のいずれかの方法であって、前記ニューラルネットワークは1~2000個の隠し層を含む。
【0231】
実施形態28:前記実施形態21~27のいずれかの方法であって、前記フィルタメカニズムは、ローパスフィルタ、ボックスフィルタ、デルタフィルタ、又はガウスフィルタを含む。
【0232】
実施形態29:実行可能なコードから、マルウェア検出モデルに入力する機械学習特徴を自動的に抽出する、コンピュータシステムであって、前記システムは、複数のコンピュータで実行可能な指示を記憶するように構成された一以上のコンピュータで読取り可能な記憶装置と、一以上の他のコンピュータで読取り可能な記憶装置と通信可能に接続された一以上のハードウェアコンピュータプロセッサとを備えており、前記一以上のハードウェアコンピュータプロセッサは、複数のコンピュータで実行可能な指示を実行することによって、前記システムに、ファイルから前記実行可能なコードにアクセスする処理と、埋込マトリクスを有する画像再スケーリングアルゴリズムに、前記実行可能なコードを入力する処理であって、前記画像再スケーリングアルゴリズムは、前記実行可能なコードの各バイトを、前記埋込マトリクスを用いて数ベクトルに変換して埋込ベクトル空間を作成し、前記変換を行っている間、前記実行可能なコードの順序が維持される、処理と、前記埋込ベクトル空間の一以上のベクトル層をチャネルフィルタリングする処理であって、前記チャンネルフィルタリングは、前記一以上のベクトル層を複数のブロックに統合する処理と、フィルタメカニズムを適用して一以上の固定サイズのベクトル入力を生成する処理であって、各固定サイズのベクトル入力は、対応するベクトル層、又は対応するベクトル層のブロックを表している、処理とによって行われる、処理と、ニューラルネットワークの入力層に前記一以上の固定サイズのベクトル入力を入力する処理であって、前記ニューラルネットワークは、複数の処理部の層を備えており、前記複数の層は、少なくとも、前記入力層と、一以上の隠し層と、出力層とを備えており、前記複数の層の一連の層は、それぞれ前の層の出力値を入力値として使用し、前記出力層は、前記実行可能なコードの悪意度の分類を生成する、処理と、前記ニューラルネットワークの前記出力層直前の最終隠し層の出力値を抽出する処理と、機械学習特徴として前記最終隠し層の出力値を、前記マルウェア検出モデルに提供する処理とを含む。
【0233】
実施形態30:前記実施形態29のシステムであって、前記ニューラルネットワークは教師あり学習モデル、半教師あり学習モデル、又は教師なし学習モデルを含む。
【0234】
実施形態31:前記実施形態29又は30のシステムであって、前記実行可能なコードは、ポータブル実行可能(PE)ファイルの一部である。
【0235】
実施形態32:前記実施形態29~31のいずれかのシステムであって、前記一以上の隠し層のそれぞれは、前記入力値に変換を行い、直後に連続する層への出力値を生成するように構成されている。
【0236】
実施形態33:前記実施形態29~32のいずれかのシステムであって、前記画像再スケーリングアルゴリズムは、前処理ニューラルネットワークを含んでおり、前記前処理ニューラルネットワークは、Word2Vecを含む。
【0237】
実施形態34:前記実施形態29~33のいずれかのシステムであって、いくつかの実施形態において、前記システムは、前記ニューラルネットワークの出力層から、前記実行可能なコードの悪意度の分類を破棄するようになっている。
【0238】
実施形態35:前記実施形態29~34のいずれかのシステムであって、前記ニューラルネットワークは1~2000個の隠し層を含む。
【0239】
実施形態36:前記実施形態29~35のいずれかのシステムであって、前記フィルタメカニズムは、ローパスフィルタ、ボックスフィルタ、デルタフィルタ、又はガウスフィルタを含む。
【0240】
実施形態37:ライブラリ位置独立コード検出用のシステムであって、複数のコンピュータで実行可能な指示を記憶するように構成された一以上のコンピュータで読取り可能な記憶装置と、一以上の他のコンピュータで読取り可能な記憶装置と通信可能に接続された一以上のハードウェアコンピュータプロセッサとを備えており、前記一以上のハードウェアコンピュータプロセッサは、複数のコンピュータで実行可能な指示を実行することによって、前記システムに、監視対象シンボルのインポートアドレステーブル(IAT)エントリを実装する処理を行わせ、前記IATエントリを実装する処理は、監視対象シンボルのIATエントリ内の監視対象シンボルアドレスを改変アドレスで置換する処理と、前記改変アドレスの呼び出しに対してトランポリンコードを実行し、監視対象シンボルの静的呼び出しを検出及び検証する処理と、前記改変アドレスの呼び出しを監視対象シンボルアドレスにリダイレクトする処理とを含み、一以上のローダAPI関数を実装する処理を行わせ、前記ローダAPI関数を実装する処理は、前記一以上のローダAPI関数を改変し、前記トランポリンコードへ導く値を戻す処理と、前記監視対象シンボルの実行を迂回コードに迂回させて、前記監視対象シンボルの呼び出しを検出及び検証する処理と、前記監視対象シンボルの呼び出しを前記監視対象シンボルアドレスにリダイレクトする処理とを含み、前記監視対象シンボルの前記トランポリンコード及び前記迂回コードを監視させて、実行ファイル内の呼び出しが、静的呼び出し、動的呼び出し、又はローカル呼び出しを含んでいるかを判定する処理を行わせ、前記システムが、前記実行ファイル内の少なくとも1つの呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれていないと判断した場合、マルウェア検出システムのために、当該実行ファイルに不審な、又は、悪意ありのフラグを立てる処理を行わせる。
【0241】
実施形態38:前記実施形態37のシステムであって、前記システムが、前記実行可能コード内の少なくとも1つの呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれていないと判断した場合、当該少なくとも1つの呼び出しを独立した呼び出しとして分類する。
【0242】
実施形態39:前記実施形態37のシステムであって、前記システムが、前記呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれると判断した場合、当該呼び出しを良性呼び出しとして分類する。
【0243】
実施形態40:前記実施形態37又は39のシステムであって、前記システムが、前記呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれると判断した場合、前記実行ファイルを良性として分類する。
【0244】
実施形態41:前記実施形態37~40のいずれかのシステムであって、前記トランポリンコード及び前記迂回コードを含むフッキングエンジンと、呼び出しに関するデータを記憶するように構成された、一以上の呼び出しデータベースとを含む。
【0245】
実施形態42:前記実施形態37~41のいずれかのシステムであって、前記動的呼び出しは、前記実行ファイルの実行中に、前記監視対象シンボルアドレスの取得を試みることが含まれる。
【0246】
実施形態43:前記実施形態37~42のいずれかのシステムであって、前記静的呼び出しには、前記実行ファイルの初期化中に、前記監視対象シンボルアドレスの取得を試みることが含まれる。
【0247】
実施形態44:前記実施形態37~43のいずれかのシステムであって、前記実行ファイルからの呼び出しにローカル呼び出しが含まれているか否かを判定する処理には、前記迂回コードを監視して、リターンアドレスが、前記実行ファイルの前記監視対象シンボルと同じアドレスになっているかを判定する処理が含まれる。
【0248】
実施形態45:前記実施形態37~44のいずれかのシステムであって、前記一以上のローダAPI関数は、GetModuleHandle又はGetProcAddressのいずれか一方又は両方を含む。
【0249】
実施形態46:前記実施形態37のシステムであって、前記少なくとも1つの呼び出しは、前記実行ファイルが、前記監視対象シンボルを含むモジュールから取得されたメタデータを用いることによって初期化される。
【0250】
実施形態47:前記実施形態37のシステムであって、前記少なくとも1つの呼び出しは、前記実行ファイルがローダの内部記録から取得したデータを用いることによって初期化される。
【0251】
実施形態48:前記実施形態37のシステムであって、前記少なくとも1つの呼び出しは、前記実行ファイルが、前記トランポリンコードをトリガーすることなく監視対象シンボルを呼び出すことによって初期化される。
【0252】
実施形態49:ライブラリ位置独立コード検出を行うためのコンピュータにより実施される方法であって、前記方法は、コンピュータシステムによって、監視対象シンボルのインポートアドレステーブル(IAT)エントリを実装する処理であって、前記IATエントリを実装する処理には、監視対象シンボルのIATエントリ内の監視対象シンボルアドレスを改変アドレスで置換する処理と、前記改変アドレスの呼び出しに対してトランポリンコードを実行し、監視対象シンボルの静的呼び出しを検出及び検証する処理と、前記改変アドレスの呼び出しを監視対象シンボルアドレスにリダイレクトする処理とが含まれる、処理と、前記コンピュータシステムによって、一以上のローダAPI関数を実装する処理であって、前記ローダAPI関数を実装する処理には、前記一以上のローダAPI関数を改変し、前記トランポリンコードへ導く値を戻す処理と、前記監視対象シンボルの実行を迂回コードに迂回させて、前記監視対象シンボルの呼び出しを検出及び検証する処理と、前記監視対象シンボルの呼び出しを前記監視対象シンボルアドレスにリダイレクトする処理とが含まれる、処理と、前記コンピュータシステムによって、前記監視対象シンボルの前記トランポリンコード及び前記迂回コードを監視する処理であって、実行ファイル内の呼び出しが、静的呼び出し、動的呼び出し、又はローカル呼び出しを含んでいるかを判定する処理と、前記コンピュータシステムが、前記実行ファイル内の少なくとも1つの呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれていないと判断した場合、前記コンピュータシステムがマルウェア検出システムのために、当該実行ファイルに不審な、又は、悪意ありのフラグを立てる処理と、を含み、前記コンピュータシステムはコンピュータプロセッサと電子記憶媒体を備えている。
【0253】
実施形態50:前記実施形態49の方法であって、前記方法は、前記コンピュータシステムが、少なくとも1つの呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれていないと判断した場合、当該少なくとも1つの呼び出しを独立した呼び出しとして分類する処理を含むことを特徴とする方法。
【0254】
実施形態51:前記実施形態49の方法であって、前記方法は、前記コンピュータシステムが前記呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれると判断した場合、当該呼び出しを良性呼び出しとして分類する処理を含む。
【0255】
実施形態52:前記実施形態49又は51の方法であって、前記方法は、前記コンピュータシステムが前記呼び出しに、静的呼び出し、動的呼び出し、又はローカル呼び出しが含まれると判断した場合、前記実行ファイルを良性として分類する処理を含む。
【0256】
実施形態53:前記実施形態49~52のいずれかの方法であって、前記トランポリンコード及び前記迂回コードは、フッキングエンジンの一以上の部分を含んでおり、前記フッキングエンジンは、前記呼び出しに関連するデータを記憶するように構成された呼び出しデータベースに接続されている。
【0257】
実施形態54:前記実施形態49~53のいずれかの方法であって、前記動的呼び出しは、前記実行ファイルの実行中に、前記監視対象シンボルアドレスの取得を試みることが含まれる。
【0258】
実施形態55:前記実施形態49~54のいずれかの方法であって、前記静的呼び出しには、前記実行ファイルの初期化中に、前記監視対象シンボルアドレスの取得を試みることが含まれる。
【0259】
実施形態56:前記実施形態49~55のいずれかの方法であって、前記実行ファイルからの呼び出しにローカル呼び出しが含まれているか否かを判定する処理には、前記迂回コードを監視して、リターンアドレスが、前記実行ファイルの前記監視対象シンボルと同じアドレスになっているかを判定する処理が含まれる。
【0260】
実施形態57:前記実施形態49~56のいずれかの方法であって、前記一以上のローダAPI関数は、GetModuleHandle又はGetProcAddressのいずれか一方又は両方を含む。
【0261】
実施形態58:前記実施形態49の方法であって、前記少なくとも1つの呼び出しは、前記実行ファイルが、前記監視対象シンボルを含むモジュールから取得されたメタデータを用いることによって初期化される。
【0262】
実施形態59:前記実施形態49の方法であって、前記少なくとも1つの呼び出しは、前記実行ファイルがローダの内部記録から取得したデータを用いることによって初期化される。
【0263】
実施形態60:前記実施形態49の方法であって、前記少なくとも1つの呼び出しは、前記実行ファイルが、前記トランポリンコードをトリガーすることなく監視対象シンボルを呼び出すことによって初期化される。


図1A
図1B
図2A
図2B
図3
図4A
図4B
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
【国際調査報告】