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

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

▶ パロ アルト ネットワークス,インコーポレイテッドの特許一覧

特表2025-502604「アンマネージIMPHASH」を有する.NETマルウェアの識別
<>
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図1
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図2
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図3A
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図3B
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図3C
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図3D
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図3E
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図3F
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図3G
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図4
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図5
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図6
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図7A
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図7B
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図8
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図9
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図10
  • 特表-「アンマネージIMPHASH」を有する.NETマルウェアの識別 図11
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2025-01-28
(54)【発明の名称】「アンマネージIMPHASH」を有する.NETマルウェアの識別
(51)【国際特許分類】
   G06F 21/56 20130101AFI20250121BHJP
【FI】
G06F21/56 320
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2024529898
(86)(22)【出願日】2022-12-05
(85)【翻訳文提出日】2024-07-19
(86)【国際出願番号】 US2022051866
(87)【国際公開番号】W WO2023121862
(87)【国際公開日】2023-06-29
(31)【優先権主張番号】17/557,992
(32)【優先日】2021-12-21
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.PYTHON
(71)【出願人】
【識別番号】517392861
【氏名又は名称】パロ アルト ネットワークス,インコーポレイテッド
【氏名又は名称原語表記】Palo Alto Networks,Inc.
【住所又は居所原語表記】3000 Tannery Way,Santa Clara,California 95054,United States of America
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100229448
【弁理士】
【氏名又は名称】中槇 利明
(72)【発明者】
【氏名】サミュエル,ヤロン
(72)【発明者】
【氏名】レイチェル,ドミニク
(72)【発明者】
【氏名】ジュン,ロバート
(72)【発明者】
【氏名】チェ,ローレン
(57)【要約】
本出願は、悪意のあるファイルを検出するための方法、システム、および、コンピュータシステムを提供する。本方法は、.NETファイルを含むサンプルを受信するステップと、.NETファイルの.NETヘッダに少なくとも部分的に基づいて、インポートされたAPI関数名を取得するステップと、アンマネージなインポートされたAPI関数名のリストのハッシュを決定するステップと、アンマネージなインポートされたAPI関数名のリストのハッシュに少なくとも部分的に基づいて、サンプルがマルウェアであるか否かを決定するステップと、を含む。
【特許請求の範囲】
【請求項1】
1つ以上のプロセッサ、および、メモリを含む、システムであって、
前記1つ以上のプロセッサは、
.NETファイルを含むサンプルを受信し、
前記.NETファイルの.NETヘッダに少なくとも部分的に基づいて、インポートされたAPI関数名を取得し、
アンマネージなインポートされたAPI関数名のリストのハッシュを決定し、かつ、
前記アンマネージなインポートされたAPI関数名のリストのハッシュに少なくとも部分的に基づいて、前記サンプルがマルウェアであるか否かを決定する、
ように構成されており、
前記メモリは、
前記1つ以上のプロセッサに結合されており、かつ、
前記1つ以上のプロセッサに命令を与えるように構成されている、
システム。
【請求項2】
前記インポートされたAPI関数名を取得することは、
前記.NETファイルの前記.NETヘッダを構文解析すること、および、
構文解析された.NETヘッダから前記インポートされたAPI関数名を抽出すること、
を含む、請求項1に記載のシステム。
【請求項3】
前記インポートされたAPI関数名は、インデックステーブルに少なくとも部分的に基づいて、前記構文解析された.NETヘッダから抽出される、
請求項2に記載のシステム。
【請求項4】
前記インデックステーブルは、前記.NETファイルの実行に関連してインポートされる、アンマネージな方法のセットを示すImplMapテーブルを含む、
請求項3に記載のシステム。
【請求項5】
前記インポートされたAPI関数名は、少なくとも部分的にMethodDefテーブルに基づいて、前記構文解析された.NETヘッダから抽出される、
請求項2に記載のシステム。
【請求項6】
前記アンマネージなインポートされたAPI関数名のリストのハッシュを決定することは、
前記.NETヘッダに少なくとも部分的に基づいて取得された、前記インポートされたAPI関数名に基づいて、アンマネージなインポートされたAPI関数のセットを決定すること、および、
既定のハッシュ関数に少なくとも部分的に基づいて、前記アンマネージなインポートされたAPI関数名のリストのハッシュを生成すること、
を含む、請求項1に記載のシステム。
【請求項7】
前記既定のハッシュ関数は、SHA-256ハッシュアルゴリズム、MD5ハッシュアルゴリズム、および、SHA-1ハッシュアルゴリズムのうちの少なくとも1つを含む、
請求項6に記載のシステム。
【請求項8】
前記1つ以上のプロセッサは、
前記サンプルが悪意のあるものであるという指示をセキュリティエンティティに対して送信する、
ように構成されている、
請求項1に記載のシステム。
【請求項9】
前記サンプルが悪意のあるものであるという指示をセキュリティエンティティに送信することは、
悪意があると見なされるファイルのブラックリストを更新することであり、前記ファイルのブラックリストは、前記サンプルに対応している識別子を含むように更新されること、
を含む、請求項8に記載のシステム。
【請求項10】
前記セキュリティエンティティは、ファイアウォールに対応している、
請求項8に記載のシステム。
【請求項11】
前記アンマネージなインポートされたAPI関数名のリストの前記ハッシュに少なくとも部分的に基づいて、前記サンプルがマルウェアであるか否かを決定することは、サンドボックス環境において実行される、
請求項1に記載のシステム。
【請求項12】
前記アンマネージなインポートされたAPI関数名のリストのハッシュに少なくとも部分的に基づいて、前記サンプルがマルウェアであるか否かを決定することは、セキュリティエンティティにおいて実行される、
請求項1に記載のシステム。
【請求項13】
前記インポートされたAPI関数名は、ImportNameフィールドに対応している値に少なくとも部分的に基づいて取得される、
請求項1に記載のシステム。
【請求項14】
前記ImportNameフィールドに対応している値が0に等しくないと決定したことに応答して、
前記インポートされたAPI関数名を取得することは、
前記.NETファイルの#Stringsストリームに少なくとも部分的に基づいて、1つ以上のライブラリ名のセットを決定すること、
を含む、請求項13に記載のシステム。
【請求項15】
前記ImportNameフィールドに対応している値が0に等しいと決定したことに応答して、
前記インポートされたアプリケーションプログラミングインターフェイス関数名を取得することは、
MethodDefテーブルの行から値を取得すること、
前記MethodDefテーブルの行からの前記値に少なくとも部分的に基づいて、#Stringsストリームから関数名を取得すること、
前記.NETファイルのPEヘッダがインポートテーブルを含むか否かを決定すること、および、
前記.NETファイルのPEヘッダがインポートテーブルを含まないと決定したことに応答して、前記インポートテーブルに少なくとも部分的に基づいて、前記関数名に対応しているライブラリ名を決定すること、
を含む、請求項13に記載のシステム。
【請求項16】
前記インポートテーブルに少なくとも部分的に基づいて、前記関数名に対応しているライブラリ名を決定することは、
前記対応している関数名から前記ライブラリ名を取得するために、前記インポートテーブルを構文解析することを含む、
請求項15に記載のシステム。
【請求項17】
前記1つ以上のプロセッサは、さらに、
アンマネージ関数に対応しているライブラリ名がファイル拡張子を有していないことを保証し、
前記ライブラリ名および前記アンマネージ関数に少なくとも部分的に基づいて、文字列を決定し、かつ、
前記文字列を、前記アンマネージなインポートされたAPI関数名のリストに追加する、
ように構成されている、
請求項1に記載のシステム。
【請求項18】
前記文字列は、
前記ライブラリ名および前記アンマネージ関数の名前が大文字を含まないことを保証すること、および、
前記アンマネージ関数の名前と前記ライブラリ名との間に含まれる既定のセパレータを用いて、前記アンマネージ関数の名前を前記ライブラリ名に付加すること、
によって決定される、
請求項17に記載のシステム。
【請求項19】
方法であって、
.NETファイルを含むサンプルを受信するステップと、
前記.NETファイルの.NETヘッダに少なくとも部分的に基づいて、インポートされたAPI関数名を取得するステップと、
アンマネージなインポートされたAPI関数名のリストのハッシュを決定するステップと、
前記アンマネージなインポートされたAPI関数名のリストの前記ハッシュに少なくとも部分的に基づいて、前記サンプルがマルウェアであるか否かを決定するステップと、
を含む、方法。
【請求項20】
非一時的コンピュータ可読記憶媒体に保管されたコンピュータプログラムであって、複数のコンピュータ命令を含み、
前記コンピュータ命令がプロセッサにより実行されると、コンピュータに、
.NETファイルを含むサンプルを受信するステップと、
前記.NETファイルの.NETヘッダに少なくとも部分的に基づいて、インポートされたAPI関数名を取得するステップと、
アンマネージなインポートされたAPI関数名のリストのハッシュを決定するステップと、
前記アンマネージなインポートされたAPI関数名のリストの前記ハッシュに少なくとも部分的に基づいて、前記サンプルがマルウェアであるか否かを決定するステップと、
を実施させる、コンピュータプログラム。
【発明の詳細な説明】
【背景技術】
【0001】
悪意のある個人は、様々な方法でコンピュータシステムを危険にさらす(compromise)ように試みる。一つの例として、そうした個人は、悪意のあるソフトウェア(「マルウェア(“malware”)」)を電子メール添付ファイルに埋め込み、または、他の方法で含め、疑うことを知らないユーザに対してマルウェアを送信し、または、送信させ得る。実行されると、マルウェアは、被害者のコンピュータを危険にさらす。いくつかのタイプのマルウェアは、遠隔ホストと通信するように、危険にさらされたコンピュータに命令する。例えば、マルウェアは、危険にさらされたコンピュータを「ボットネット(“botnet”)」における「ボット(“bot”)」へと変えることができ、悪意のある個人の制御下で、命令と制御(command and control、C&C)サーバから命令を受信し、かつ/あるいは、C&Cサーバにデータを報告する。マルウェアによって引き起こされる損害を軽減する一つのアプローチは、セキュリティ会社(または、他の適切なエンティティ)が、マルウェアを識別し、かつ、エンドユーザコンピュータに到達すること/そこで実行されることを防止するように試みることである。別のアプローチは、危険にさらされたコンピュータがC&Cサーバと通信することを防止するように努めることである。残念ながら、マルウェアの作者は、彼らのソフトウェアの仕組みを難読化するためにますます高度な技術を使用している。一つの例として、いくつかのタイプのマルウェアは、データを密かに抽出する(exfiltrate)ためにドメインネームシステム(DNS)クエリを使用する。従って、マルウェアを検出し、かつ、その害を防止するための改善された技法に対する継続的な必要性が存在している。
【図面の簡単な説明】
【0002】
本発明の様々な実施形態が、以下の詳細な説明および添付の図面において開示されている。
図1図1は、様々な実施形態に従った、悪意のあるファイルが検出され、または、疑われる環境に係るブロック図である。
図2図2は、様々な実施形態に従った、悪意のあるファイルを検出するためのシステムに係るブロック図である。
図3A図3Aは、例示的な.NETファイルについての.NETヘッダに係るImplMapテーブルの図である。
図3B図3Bは、例示的な.NETファイルに係るModuleRefテーブルの図である。
図3C図3Cは、例示的な.NETファイルについての.NETヘッダに係るImplMapテーブルの図である。
図3D図3Dは、例示的な.NETファイルについてのMethodDefテーブルの図である。
図3E図3Eは、例示的な.NETファイルについてのModuleRefテーブルの図である。
図3F図3Fは、例示的な.NETファイルについてのImportテーブルの図である。
図3G図3Gは、例示的な.NETファイルについてのMethodDefテーブルの図である。
図4図4は、様々な実施形態に従った、悪意のあるファイルを検出するための方法に係るフローチャートである。
図5図5は、様々な実施形態に従った、ファイルが悪意のあるものか否かを決定するための方法に係るフローチャートである。
図6図6は、様々な実施形態に従った、悪意のあるファイルを検出するための方法に係るフローチャートである。
図7A図7Aは、様々な実施形態に従った、悪意のあるファイルを検出するための方法に係るフローチャートである。
図7B図7Bは、様々な実施形態に従った、悪意のあるファイルを検出するための方法に係るフローチャートである。
図8図8は、様々な実施形態に従った、悪意のあるファイルを検出するための方法に係るフローチャートである。
図9図9は、様々な実施形態に従った、悪意のあるファイルを検出するための方法に係るフローチャートである。
図10図10は、様々な実施形態に従った、悪意のあるファイルを検出するための方法に係るフローチャートである。
図11図11は、様々な実施形態に従った、悪意のあるファイルを検出するための方法に係るフローチャートである。
【発明を実施するための形態】
【0003】
本発明は、プロセス、装置、システム、組成物、コンピュータ可読記憶媒体上に具現化されたコンピュータプログラム製品、及び/又は、メモリ上に保管された命令、及び/又は、プロセッサに結合されたメモリにより保管され、かつ/あるいは、提供される命令を実行するように構成されたプロセッサといった、プロセッサを含む、多数の方法で実施することができる。本明細書において、これらの実装、または、本発明がとり得る任意の他の形態は、技法(technique)と称され得る。一般的に、開示されたプロセスのステップの順序は、本発明の範囲内で変更され得る。特に明記しない限り、タスクを実行するように構成されているものとして説明されるプロセッサまたはメモリといったコンポーネントは、所与の時間にタスクを実行するように一時的に構成される汎用コンポーネント、または、タスクを実行するように製造される特定のコンポーネントとして実装され得る。本明細書で使用されるように、「プロセッサ(“processor”)」という用語は、コンピュータプログラム命令といった、データを処理するように構成された1つ以上のデバイス、回路、及び/又は、処理コアを指す。
【0004】
本発明の1つ以上の実施形態の詳細な説明が、本発明の原理を示す添付の図面とともに、以下で提供されている。本発明は、そうした実施形態に関連して説明されるが、本発明は、いかなる実施形態にも限定されるものではない。本発明の範囲は、請求項によってのみ限定されるものであり、かつ、本発明は、多数の代替、修正、および均等物を包含する。本発明の完全な理解を提供するために、以下の説明において多数の具体的な詳細が記載されている。これらの詳細は、例示の目的で提供されるものであり、そして、本発明は、これらの具体的な詳細の一部または全部を伴わずに、特許請求の範囲に従って実施され得る。明確にするために、本発明に関連する技術分野で知られている技術的材料は、本発明が不必要に不明瞭にならないように、詳細には説明されていない。
【0005】
本明細書で使用される際に、セキュリティエンティティは、ネットワークトラフィック、ファイル、等といった情報に関して1つ以上のセキュリティポリシを実施するネットワークノード(例えば、デバイス)である。一つの例として、セキュリティエンティティは、ファイアウォールであり得る。別の例として、セキュリティエンティティは、ルータ、スイッチ、DNSリゾルバ、コンピュータ、タブレット、ラップトップ、スマートフォン、等として、実装され得る。別の例として、セキュリティは、アンチマルウェアアプリケーションといった、デバイス上で実行されるアプリケーションとして実装され得る。
【0006】
本明細書で使用される際に、マルウェアは、秘密にするか否か(および、違法であるか否か)にかかわらず、完全に通知された場合にユーザが承認しない/承認しないであろう挙動(behavior)に関与するアプリケーションを指す。マルウェアの例は、トロイの木馬、ウイルス、ルートキット、スパイウェア、ハッキングツール、キーロガー、等を含んでいる。マルウェアの一つの例は、エンドユーザの位置を収集し、そして、リモートサーバに報告するデスクトップアプリケーションである(しかし、マッピングサービスといった、位置ベースのサービスをユーザに提供しない)。マルウェアの別の例は、エンドユーザにはフリーゲームであるように見えるが、SMSプレミアムメッセージ(例えば、それぞれ10ドルのコストがかかる)をひそかに(stealthily)送信し、エンドユーザの電話料金を上昇させる、悪意のあるアンドロイド(登録商標)・アプリケーション・パッケージ(Android Application Package).apk(APK)ファイルである。マルウェアの別の例は、ユーザの連絡先をひそかに収集し、そして、それらの連絡先をスパマー(spammer)に対して送信するApple iOSフラッシュライトアプリケーションである。他の形態のマルウェアも、また、本明細書で説明される技術を使用して検出/阻止され得る(例えば、ランサムウェア)。さらに、マルウェア署名(malware signature)は、悪意のあるアプリケーションのために生成されるものとして本明細書では説明されているが、本明細書で説明される技法は、また、他の種類のアプリケーションのためのプロファイル(例えば、アドウェア(adware)プロファイル、グッドウェア(goodware)プロファイル、等)を生成するために様々な実施形態においても使用され得る。
【0007】
本明細書で使用される際に、アンマネージコード(unmanaged code)またはアンマネージ関数(unmanaged function)は、「マネージコード(“managed code”)」と呼ばれる通常の.NETコード(.NET code)とは対照的に、インポートされたwin32 API関数を指す。一つの例として、そうしたアンマネージコードまたはアンマネージ関数は、一般的に、.NETファイル(.NET file)のPEヘッダに反映されず/含まれず、むしろ、そうしたアンマネージコードまたはアンマネージ関数は、.NETファイルの.NETヘッダを介してインポートされる。
【0008】
従来技術に従って、マルウェアは、機械学習モデルを使用して識別される。関連技術に従った機械学習モデルは、インポート、ヘッダ、セクションといった特徴に基づいて、ポータブル実行可能(portable executable、PE)構造を使用して訓練/開発される。機械学習モデルは、マルウェアと良性ファイルとの間を区別するために、そうしたインポート、ヘッダ、およびセクションを使用する。しかしながら、Microsoft Windows(登録商標) PEインストーラベースのファイルのPEファイル構造は、悪意のあるファイルと良性ファイルとの間で極めて類似しているように見える。従って、マルウェアを検出するためにMicrosoft Windows PEインストーラについてPEファイル構造を使用することは、非常に信頼できるものではない。なぜなら、そうしたPEファイル構造に基づいて悪意のあるファイルと良性ファイルとを区別することは、極めて困難だからである。例えば、Microsoft Windows PEインストーラファイルについて悪意のあるファイルを検出するためにPEファイル構造を使用することは、より高い偽陽性(false positive)および低い検出率を導く。良性の目的のために使用されるMicrosoft Windows PEインストーラファイルの一つの例は、Microsoft Windows Nullsoft Scriptable Install System(NSIS)インストーラであり、これは、合法的な製品によって、および、企業環境において広く使用されている。悪意のあるMicrosoft Windows PEインストーラファイルと良性のMicrosoft Windows PEインストーラファイルとの間を区別するためにPE構造を分析するように訓練された各機械学習モデルは、悪意のあるファイルを正確に検出することができない。
【0009】
悪意のあるファイルを検出するためのシステム、方法、及び/又は、デバイスが開示される。システムは、1つ以上のプロセッサ、および、1つ以上のプロセッサに結合され、かつ、1つ以上のプロセッサに命令を提供するように構成されたメモリ、を含んでいる。1つ以上のプロセッサは、.NETファイルを含むサンプルを受信し、.NETファイルの.NETヘッダに少なくとも部分的に基づいてインポートされたAPI関数名を取得し、アンマネージなインポートされた(unmanaged imported)API関数名のリストのハッシュを決定し、かつ、アンマネージなインポートされたAPI関数名のリストのハッシュに少なくとも部分的に基づいて、サンプルがマルウェアであるか否かを決定する、ように構成されている。
【0010】
様々な実施形態に従って、悪意のあるファイルを検出するためのシステムは、1つ以上のサーバによって実装される。1つ以上のサーバは、1つ以上の顧客及び/又はセキュリティエンティティにサービスを提供し得る。例えば、1つ以上のサーバは、悪意のあるファイルを検出し、または、ファイルが悪意のあるものか否かを決定/評価し、そして、ファイルが悪意のあるものか否かの指示(indication)を1つ以上の顧客及び/又はセキュリティエンティティに提供する。1つ以上のサーバは、ファイルが悪意のあるものであると決定したことに応答して、かつ/あるいは、ファイルが悪意のあるものか否かの指示に対するファイルのマッピングの更新に関連して(例えば、悪意のあるファイルに関連付けられた識別子を含むブラックリストに対する更新)、ファイルが悪意のあるものであるという指示をセキュリティエンティティに提供する。別の例として、1つ以上のサーバは、ファイルが悪意のあるものか否かの評価のための顧客またはセキュリティからの要求に応答して、ファイルが悪意のあるものか否かを決定し、そして、1つ以上のサーバは、そうした決定の結果を提供する。
【0011】
様々な実施形態に従って、悪意のあるファイルを検出するためのシステムは、セキュリティエンティティによって実装される。例えば、悪意のあるファイルを検出するためのシステムは、ファイアウォールによって実装される。別の例として、悪意のあるファイルを検出するためのシステムは、デバイス(例えば、コンピュータ、ラップトップ、移動電話、等)上で実行されるアンチマルウェアアプリケーションといったアプリケーションによって実装される。様々な実施形態に従って、セキュリティエンティティは、.NETファイルを受信し、.NETファイルの.NETヘッダを取得し、そして、.NETファイルの.NETヘッダに少なくとも部分的に基づいて、.NETファイルが悪意のあるものか否かを決定する。NETファイルが悪意のあるものであると決定したことに応答して、セキュリティエンティティは、.NETファイルに関して1つ以上のセキュリティエンティティを適用する。NETファイルが悪意のあるものではないと決定したことに応答して(例えば、.NETファイルが良性である)、セキュリティエンティティは、.NETファイルを悪意のないトラフィックとして取り扱う。いくつかの実施形態において、セキュリティエンティティは、.NETファイルの.NETヘッダに少なくとも部分的に基づいて、インポートされたAPI関数名を決定すること(例えば、取得すること)、アンマネージなインポートされたAPI関数名のリストのハッシュを決定すること(例えば、計算すること)、および、.NETファイルに対応しているアンマネージなインポートされたAPI関数名のリストのハッシュが、悪意があると見なされるファイルに関連付けられたハッシュと一致するか否かを決定すること、に少なくとも部分的に基づいて、ファイルが悪意のあるものか否かを決定する。例えば、セキュリティエンティティは、ハッシュ(例えば、アンマネージなインポートされたAPI関数名のハッシュ)の悪意のあるファイルへのマッピングに関してルックアップを実行して、マッピングが一致するハッシュを含むか否かを決定する(例えば、マッピングが、.NETファイルの計算されたハッシュに一致するアンマネージなインポートされたAPI関数名のハッシュを有するファイルのレコードを含むこと)。
【0012】
ポータブル実行可能(Portable executable、PE)ファイルは、様々なOSコンポーネントとインタラクションするために、しばしば、外部ライブラリから関数をインポートするようにコード化される。マルウェアを検出するための関連技術の方法は、インポートのシーケンスを使用し、ハッシュ値を取得するためにインポートのシーケンスをハッシュし、そして、ハッシュ値を「インポートテーブルハッシュ(“Import Table Hashes”)」(imphash)の既知のブロックリストに対して比較する。マルウェアインポートを検出するための関連技術の方法は、分析されているファイルのPEヘッダから、インポートされたAPI関数名および対応しているライブラリ名を取得する。しかしながら、PEヘッダからAPI関数名および対応しているライブラリ名を決定すること、並びに、マルウェアを検出するために、そうしたAPI関数名おび対応しているライブラリ名を使用することは、.NETファイルにとって理想的ではない。なぜなら、ほぼ全ての.NET PEファイルが、同様のインポートテーブルを有するからである。一つの例として、.NETアセンブリの大部分は、PEヘッダ内に「_CorExeMain」(EXE)または「_CorDllMain」(DLL)という名前の単一のインポート関数(imported function)を有している。一般的に、.NETアセンブリの少ない部分だけが、PEヘッダ内により多くのインポートを有している。そうした.NETファイルは、一般的に、Visual C++およびC++/CLI拡張子を用いて作成される。PEヘッダ内に含まれるインポート関数は、一般的に.NETコンパイラによって決定され、そして、コード自体によって影響されない。この現象は、.NETコードがネイティブアセンブリ(native assembly)へとコンパイルされず、むしろ、次いで、.NETランタイムによって実行される、中間言語または中間バイトコード(MSIL)へとコンパイルされるので、生じるものである。
【0013】
従って、.NETファイルのPEヘッダから抽出されたインポート関数の使用は、マルウェアの正確な検出を提供しない。しかしながら、様々な.NETマルウェアファミリは、依然として、例えば、他のプロセスにコードを注入するために、win32 APIと直接的にインタラクションする必要がある。そうしたコードは、.NETから他のプロセスへと注入され得るが、そうするためのwin32関数は、.NETファイルについてのPEヘッダのインポートテーブルには反映されない。むしろ、コード注入関数は、一般的に、.NETファイルの.NETヘッダを介して含まれる(または、インポートされる)。NETヘッダは、.NETファイルに含まれるヘッダである(例えば、PEヘッダに加えて)。例えば、.NETヘッダは、.NETファイルのPEヘッダとは異なり/違っている。NETファイルは、PEヘッダおよび.NETヘッダの両方を含んでいる。NETヘッダは、一般的に、.NETアセンブリに関する様々な情報を含んでいる、データストリームおよびテーブルを含む。.NETヘッダに含まれる1つのそうしたデータストリームは、「#Strings」と名付けられ、そして、ファイル内で使用されるストリングのリストを含んでいる。#Stringsストリームないに含まれるリストは、また、任意の使用されるアンマネージwin32 API関数の名前も含む。さらに、.NETヘッダ内に含まれるテーブルの1つは、「ImplMap」と名付けられ、そして、任意のインポートされたアンマネージ関数に関する様々な情報を含んでいる。
【0014】
様々な実施形態は、.NETファイルの.NETヘッダを構文解析(parse)し、.NETヘッダ内の1つ以上のフィールドからアンマネージインポート(unmanaged imports)(例えば、アンマネージ関数、ライブラリ、等)を抽出し、そして、抽出されたアンマネージインポートに少なくとも部分的に基づいて、.NETファイルが悪意のあるものか否かを決定する。いくつかの実施形態において、システムは、.NETファイルに対応しているアンマネージインポートのリスト(例えば、.NETヘッダ内のフィールドから抽出されたもの)を決定し、そして、アンマネージインポートのリストのハッシュを決定する(例えば、計算する)。アンマネージインポートのリストのハッシュは、既定のハッシュ関数に基づいて決定され得る。ハッシュ関数の例は、SHA-256ハッシュ関数、MD5ハッシュ関数、SHA-1ハッシュ関数、等を含んでいる。様々な他のハッシュ関数が実装され得る。本明細書で使用されるように、アンマネージimphashは、アンマネージインポート(例えば、.NETヘッダ内のフィールドから抽出されたアンマネージインポート)のリストのハッシュを決定することによって取得される値を指す。
【0015】
様々な実施形態に従って、.NETファイルの.NETヘッダに含まれる情報は、ファイルが悪意のあるものか否かを決定することに関連して使用される。いくつかの実施形態において、システムは、アンマネージ関数<->ライブラリ名ペアのセットを決定するために、ImplMapテーブルに含まれる情報、および、「#Strings」データストリームの文字列に含まれる情報を使用する。システムは、.NETファイルのアンマネージなインポート関数(例えば、.NETヘッダを介してインポートされたもの)に関するリストを決定することができる。いくつかの実施形態において、システムは、.NETファイルのアンマネージなインポート関数に関するリストのハッシュを決定する。例えば、システムは、.NETファイルに対応しているアンマネージImphashを決定する。アンマネージImphashは、ファイルが悪意のあるものか否かを決定するために使用され得る。例えば、システムは、リストが、.NETファイルについて決定されたアンマネージImphashに一致するアンマネージImphashを有するレコードを含むか否かを決定するために、悪意があると見なされるファイルのリスト(例えば、ブラックリスト)をクエリすることができる。
【0016】
様々な実施形態に従って、システムは、サンドボックス(sandbox)環境において.NETファイルを分析する。例えば、システムは、.NETファイルを構文解析し、そして、サンドボックス環境内の.NETヘッダから情報を抽出する。システムは、サンドボックス環境で動作している仮想マシン(VM)によって実装され得る。
【0017】
いくつかの実施形態において、システムは、VirusTotal(R)といったサードパーティサービスから、ファイルの悪意に関する履歴情報(例えば、悪意のあるファイルの履歴データセットおよび良性ファイルの履歴データセット)を受信する。サードパーティサービスは、悪意があると見なされるファイルのセット、および、良性と見なされるファイルのセットを提供し得る。一つの例として、サードパーティサービスは、ファイルを分析し、そして、ファイルが悪意のあるものであるか、または、良性であるかの指示、及び/又は、ファイルが悪意のあるものである可能性を示すスコアを提供することができる。サードパーティサービスは、履歴データセットに含まれるファイルに対応しているアンマネージImphashe(例えば、ファイルのブラックリスト、ファイルのホワイトリスト、等)を提供することができ、または、リストは、履歴アンマネージImphashesが悪意のあるものか否かの指示を含むことができる。システムは、新たに識別された良性または悪意のあるファイル、以前の誤分類(mis-classification)に対する訂正、等といった、サードパーティサービスからの更新を受信することができる(例えば、既定の間隔で、更新が利用可能であるとき、等)。いくつかの実施形態において、指示は、ファイルが悪意のあるものであるか、または、悪意のあるものである可能性が高いことを示す、コミュニティベースのスコアまたはレーティング(rating)(例えば、評判スコア)といったソーシャルスコアに、履歴データセット内のファイルが対応しているか否かである。
【0018】
様々な実施形態に従って、セキュリティエンティティ及び/又はネットワークノード(例えば、クライアント、デバイス、等)は、ファイルが悪意のあるものであるという指示、及び/又は、ファイルが悪意のあるものであると示されたファイルと一致するという指示に少なくとも部分的に基づいて、ファイルを取り扱う。ファイル(例えば、サンプル)が悪意のあるものであるという指示を受信したことに応答して、セキュリティネットワーク及び/又はネットワークノードは、対応しているファイルが悪意のあるものか否かの指示に対するマッピング、及び/又は、ファイルのブラックリストを更新することができる。いくつかの実施形態において、セキュリティエンティティ及び/又はネットワークノードは、ファイル(例えば、悪意があると見なされるサンプル)に関する署名を受信し、そして、セキュリティエンティティ及び/又はネットワークノードは、(例えば、ファイルについて生成された署名を、ファイルのブラックリストに含まれるファイルについての署名と比較することに少なくとも部分的に基づいて)ネットワークトラフィックなどを介して、取得されたファイルが、悪意があるか否かを検出することに関連して使用するために、ファイルの署名を保管している。一つの例として、署名はハッシュであってよい。いくつかの実施形態において、ファイルの署名は、そうしたファイルに対応しているアンマネージImphashである。
【0019】
ファイアウォールは、典型的に、一式のルールに基づいてネットワーク送信を拒否または許可する。これらのルールのセットは、しばしば、ポリシ(例えば、ネットワークポリシ、またはネットワークセキュリティポリシ)として参照される。例えば、ファイアウォールは、不要な外部トラフィックが保護デバイスに到達するのを防ぐために、一式のルールまたはポリシを適用することによって、インバウンドトラフィック(inbound traffic)をフィルタリングすることができる。ファイアウォールは、また、一式のルールまたはポリシを適用することによってアウトバウンドトラフィックをフィルタリングすることができる(例えば、許可(allow)、ブロック(block)、モニタリング(monitor)、通知(notify)、またはログ(log)、及び/又は、ファイアウォールルールまたはファイアウォールポリシにおいて指定され得る他のアクションであり、これらは、ここにおいて説明されるような、様々な基準に基づいてトリガすることができる)。ファイアウォールは、また、同様に一式のルールまたはポリシを適用することによって、ローカルネットワーク(例えば、イントラネット)トラフィックをフィルタリングすることもできる。
【0020】
セキュリティデバイス(例えば、セキュリティ機器、セキュリティゲートウェイ、セキュリティサービス、及び/又は、他のセキュリティデバイス)は、様々なセキュリティ動作(例えば、ファイアウォール、アンチ-マルウェア、侵入防止/検出、プロキシ、及び/又は、他のセキュリティ関数)、ネットワーク関数(例えば、ルーティング、クオリティオブサービス(QoS)、ネットワーク関連リソースのワークロードバランシング、及び/又は、他のネットワーク関数)、及び/又は、他のセキュリティ及び/又はネットワーク関連の関数を実行することができる。例えば、ルーティングは、送信元(source)情報(例えば、IPアドレスおよびポート)、宛先(destination)情報(例えば、IPアドレスおよびポート)、および、プロトコル情報に基づいて実行することができる。
【0021】
基本的なパケットフィルタリング・ファイアウォールは、ネットワークを介して送信される個々のパケットを検査することによって、ネットワーク通信トラフィックをフィルタリングする(例えば、ステートレス(stateless)パケットフィルタリング・ファイアウォールである、パケットフィルタリング・ファイアウォールまたは第1世代ファイアウォール)。ステートレスパケットフィルタリング・ファイアウォールは、典型的に、個々のパケット自体を検査し、そして、検査されたパケットに基づいて(例えば、パケットの送信元および宛先のアドレス情報、プロトコル情報、および、ポート番号の組み合わせを使用して)ルールを適用する。
【0022】
アプリケーション・ファイアウォールは、また、(例えば、アプリケーション層フィルタリング・ファイアウォール、または、TCP/IPスタックのアプリケーションレベルにおいて関数する第2世代ファイアウォールを使用して)アプリケーション層フィルタリングを実行することもできる。アプリケーション層フィルタリング・ファイアウォールまたはアプリケーション・ファイアウォールは、一般的に、既定のアプリケーションおよびプロトコル(例えば、ハイパーテキスト転送プロトコル(HTTP)を使用したウェブブラウジング、ドメインネームシステム(DNS)要求、ファイル転送プロトコル(FTP)を使用したファイル転送、および、Telnet、DHCP、TCP、UDP、およびTFTP(GSS)といった、様々な他のタイプのアプリケーションおよび他のプロトコル)を識別することができる。例えば、アプリケーション・ファイアウォールは、標準ポートにおいて通信を試みる未認可(unauthorized)プロトコルをブロックすることができる(例えば、そのプロトコルについて非標準(non-standard)ポートを使用することにより黙って通り抜けること(sneak through)を試みる未認可/外れたポリシプロトコルは、一般的に、アプリケーション・ファイアウォールを使用して識別することができる)。
【0023】
ステートフル・ファイアウォールは、また、ステートフル・ベースのパケット検査を実行することもでき、そこでは、各パケットが、そのネットワーク送信のパケットフロー(flow of packets)と関連する一式のパケットのコンテキストの中で検査される。このファイアウォール技術は、一般的に、ステートフル・パケット検査として参照される。ファイアウォールを通過する全ての接続の記録を保持し、そして、パケットが、新しい接続の開始であるか、既存の接続の一部であるか、または、無効なパケットであるかを判断することができるからである。例えば、接続の状態は、それ自体が、ポリシの中のルールをトリガするクライテリアの1つになり得る。
【0024】
先進的または次世代ファイアウォールは、上述のように、ステートレスおよびステートフルなパケットフィルタリングおよびアプリケーション層フィルタリングを実行することができる。次世代ファイアウォールは、また、追加のファイアウォール技術を実行することもできる。例えば、先進的または次世代ファイアウォールとして、しばしば参照される既定の新しいファイアウォールは、また、ユーザおよびコンテンツを識別することができる。特に、既定の次世代ファイアウォールは、これらのファイアウォールが自動的に識別できるアプリケーションのリストを、何千ものアプリケーションまで拡大している。そうした次世代ファイアウォールの例は、Palo Alto Networksから市販されている(例えば、Palo Alto NetworksのPAシリーズのファイアウォール)。例えば、Palo Alto Networksの次世代ファイアウォールは、様々な識別技術を使用して、企業およびサービスプロバイダが、アプリケーション、ユーザ、およびコンテンツ-単にポート、IPアドレス、およびパケットだけでなく-を識別し、かつ、制御することを可能にする。様々な識別技術は、正確なアプリケーション識別のためのアプリケーションID(App-ID)、ユーザ識別のためのユーザID(User-ID)(例えば、User ID)、リアルタイムなコンテンツスキャニングのためのコンテンツID(Content-ID)(例えば、Webサーフィンを制御し、かつ、データおよびファイルの転送を制限する)、および、デバイスID(Device-ID)(例えば、IoTデバイスタイプの識別のため)といったものである。これらの識別技術により、企業は、従来のポートブロッキングファイアウォールによって提供される従来のアプローチに従う代わりに、ビジネス関連の概念を使用して、アプリケーションの使用を安全に可能にすることができる。また、(例えば、専用装置として実装される)次世代ファイアウォールのための特定目的ハードウェアは、汎用ハードウェアにおいて実行されるソフトウェアよりも、アプリケーション検査についてより高いパフォーマンスレベルを一般的に提供する(例えば、Palo Alto Networks社が提供するセキュリティ機器といったものであり、シングルパス・ソフトウェアエンジンと堅く統合されている、専用の、関数固有の処理を利用し、Palo Alto NetworksのPAシリーズ次世代ファイアウォールについて、レイテンシ(latency)を最小化する一方で、ネットワークのスループットを最大化する)。
【0025】
先進的または次世代ファイアウォールは、また、仮想化ファイアウォールを使用して実装することもできる。そうした次世代ファイアウォールの例は、Palo Alto Networks社から市販されている(Palo Alto Networksのファイアウォールは、VMware(R) ESXiTMおよびNSXTM、Citrix(R)Netscaler SDXTM、KVM/OpenStack(Centos/RHEL、Ubuntu(R))、および、Amazon Web Services(AWS)を含む、様々な商用仮想化環境をサポートしている)。例えば、仮想化ファイアウォールは、物理的フォームファクタ機器で利用可能な、同様の、または、完全に同一の次世代ファイアウォールおよび先進的な脅威防止関数をサポートすることができ、企業は、プライベート、パブリック、およびハイブリッドなクラウドコンピューティング環境へのアプリケーションの流入を安全に可能にすることができる。VMモニタリング、ダイナミックアドレスグループ、およびRESTベースのAPIといった自動化関数により、企業は、VMの変化を動的にモニタすることができ、そのコンテキストをセキュリティポリシに反映させて、それにより、VMの変化時に生じ得るポリシの遅れ(lag)を排除している。
【0026】
システムは、悪意のあるファイルの検出を改善する。さらに、システムは、悪意のあるファイルがネットワーク内のノード間といったネットワークを横断することを防止する(または防止を改善する)ことによって、または、悪意のあるファイルがネットワークに入ることを防止することによって、ネットワークトラフィックの取り扱いをさらに改善する。システムは、.NETファイルの.NETヘッダに基づくなどして、悪意があると見なされ、または、悪意がある可能性が高い.NETファイルを決定する。ファイルのためのPEヘッダの構造を使用する関連技術の検出技法は、悪意のある、または、良性ファイルの中で、類似の構造/プロファイルを有するファイルに関して、不十分/不正確であり得る。さらに、.NETファイルは中間言語(intermediate language)へとコンパイルされるので、機械学習分類器、または、手動で書かれたYARAルールを使用してファイルを、悪意がある/良性であるものとして分類することは困難である。YARAは、(これに限定されないが)マルウェア研究者がマルウェアサンプルを識別し分類するのを助けることを目的とするツールである。YARAルールは、テキストまたはバイナリパターンに基づいてマルウェアファミリの記述を作成することによって、マルウェアサンプルを分類および識別するために使用される。さらに、システムは、悪意のあるファイル(例えば、悪意のある.NETファイル)を含むトラフィックに関して1つ以上のセキュリティポリシ(例えば、既定の、及び/又は、顧客固有のセキュリティポリシ)を実施するために、セキュリティエンティティ(例えば、エンドポイント、ファイアウォール、等)に対して正確で、かつ、低レイテンシの更新を提供することができる。従って、システムは、ネットワーク内のノードへの悪意のあるトラフィック(例えば、ファイル)の拡散を防止する。
【0027】
図1は、様々な実施形態に従った、悪意のあるファイルが検出され、または、疑われる環境に係るブロック図である。示される例において、クライアントデバイス104-108は、(「アクメ会社(“Acme Company”)」に属している)企業ネットワーク110内に(それぞれに)存在するラップトップコンピュータ、デスクトップコンピュータ、および、タブレットである。データアプライアンス102は、クライアントデバイス104および106といった、クライアントデバイスと、企業ネットワーク110の外部のノード(例えば、外部ネットワーク118を介して到達可能なもの)との間の通信に関するポリシ(例えば、セキュリティポリシ)を実施するように構成されている。そうしたポリシの例は、トラフィックシェーピング、クオリティオブサービス(quality of service)、および、トラフィックのルーティングを管理するものを含む。ポリシの他の例は、着信(及び/又は、発信)電子メール添付ファイル、ウェブサイトコンテンツ、インスタントメッセージングプログラムを介して交換されるファイル、及び/又は、他のファイル転送における脅威のスキャンを必要とするものといった、セキュリティポリシを含む。いくつかの実施形態において、データアプライアンス102は、また、企業ネットワーク110内に留まる(stay)(または、そこへ入る)トラフィックに関してポリシを施行するように構成されている。
【0028】
本明細書で説明される技術は、様々なプラットフォーム(例えば、デスクトップ、モバイルデバイス、ゲームプラットフォーム、組み込みシステム、等)、及び/又は、様々なタイプのアプリケーション(例えば、Android.apkファイル、iOSアプリケーション、Windows PEファイル、Adobe Acrobat PDFファイル、Microsoft Windows PEインストーラ、等)と共に使用することができる。図1に示される例示的な環境において、クライアントデバイス104-108は、企業ネットワーク140内に(それぞれ)存在するラップトップコンピュータ、デスクトップコンピュータ、および、タブレットである。クライアントデバイス120は、企業ネットワーク110の外部に存在するラップトップコンピュータである。
【0029】
データアプライアンス102は、リモートセキュリティプラットフォーム140と協働して動作するように構成され得る。セキュリティプラットフォーム140は、様々なサービスを提供することができる。マルウェアサンプルに対して静的および動的分析を実行すること、既知の悪意のあるファイルの署名のリストを、サブスクリプションの一部としてデータアプライアンス102といったデータアプライアンスに提供すること、悪意のあるファイルを検出すること(例えば、オンデマンド検出、または、ファイルが悪意のあるものか、または、良性のものかの指示へのファイルのマッピングに対する定期的なベースの更新)、ファイルが悪意のあるものか、または、良性のものかの可能性を提供すること、良性と見なされるファイルのホワイトリストを提供/更新すること、悪意のあるドメインを識別すること、悪意のあるファイルを検出すること、ファイルが悪意のあるものか否かを予測すること、および、ファイルが悪意のあるもの(または、良性)であるという指示を提供すること、を含んでいる。様々な実施形態において、分析の結果(および、アプリケーション、ドメイン、等に関する追加的な情報)は、データベース160に保管されている。様々な実施形態において、セキュリティプラットフォーム140は、典型的なサーバクラスのオペレーティングシステム(例えば、Linux(登録商標))を実行する1つ以上の専用の市販のハードウェアサーバ(例えば、マルチコアプロセッサ、32G+のRAM、ギガビットネットワークインターフェイスアダプタ、および、ハードドライブを有する)を備える。セキュリティプラットフォーム140は、複数のそうしたサーバ、ソリッドステートドライブ、及び/又は、他の適用可能な高性能ハードウェアを含むスケーラブルなインフラストラクチャにわたり実装され得る。セキュリティプラットフォーム140は、1つ以上のサードパーティによって提供されるコンポーネントを含む、いくつかの分散コンポーネントを備えることができる。例えば、セキュリティプラットフォーム140の一部または全ては、Amazon Elastic Compute Cloud(EC2)、及び/又は、Amazon Simple Storage Service(S3)を使用して実装され得る。さらに、データアプライアンス102と同様に、セキュリティプラットフォーム140が、データを保管すること、または、データを処理すること、といったタスクを実行するものとして言及されるときはいつでも、セキュリティプラットフォーム140のサブコンポーネントまたは複数のサブコンポーネントは、(個々に、または、サードパーティコンポーネントと協働して)そのタスクを実行するように協働し得ることが理解されるべきである。一つの例として、セキュリティプラットフォーム140は、1つ以上の仮想マシン(VM)サーバと協働して、任意的に、静的/動的分析を実行することができる。仮想マシンサーバの一つの例は、VMware ESXi、Citrix XenServer、または、Microsoft Hyper-Vといった、市販の仮想化ソフトウェアを実行する、市販のサーバクラスハードウェア(例えば、マルチコアプロセッサ、32+ギガバイトのRAM、および、1つ以上のギガビットネットワークインターフェイスアダプタ)を含む物理マシンである。いくつかの実施形態において、仮想マシンサーバは省略される。さらに、仮想マシンサーバは、セキュリティプラットフォーム140を管理する同じエンティティの制御下にあってよいが、また、サードパーティによって提供されてもよい。一つの例として、仮想マシンサーバは、EC2に依存することができ、セキュリティプラットフォーム140の残りの部分は、セキュリティプラットフォーム140のオペレータによって所有され、かつ、そのオペレータの制御下にある、専用ハードウェアによって提供される。
【0030】
様々な実施形態に従って、セキュリティプラットフォーム140は、DNSトンネリング検出器138、及び/又は、悪意のあるファイル検出器170を含む。悪意のあるファイル検出器170は、ファイル(例えば、.NETファイル)が悪意のあるものか否かを決定することに関連して使用される。サンプルを受信することに応答して、悪意のあるファイル検出器170は、ファイルを分析し、そして、ファイルが悪意のあるものか否かを決定する。例えば、悪意のあるファイル検出器170は、分析されているファイルに対応しているアンマネージImphashが、履歴データセットに含まれるファイル(例えば、悪意のあると見なされるファイルのリスト、良性と見なされるファイルのリスト、等)に一致するか否かを決定する。いくつかの実施形態において、悪意のあるファイル検出器170は、.NETファイルを含むサンプルを受信し、.NETファイルの.NETヘッダに少なくとも部分的に基づいて、インポートされたAPI関数名を取得し、アンマネージなインポートされたAPI関数名(例えば、アンマネージImphash)のリストのハッシュを決定し、アンマネージなインポートされたAPI関数名のリストのハッシュに少なくとも部分的に基づいて、サンプルがマルウェアであるか否かを決定する。いくつかの実施形態において、悪意のあるファイル検出器170は、.NETファイルパーサ172、アンマネージ関数抽出器174、予測エンジン176、及び/又は、キャッシュ178のうちの1つ以上を備える。
【0031】
.NETファイルパーサ172は、.NETファイルといったサンプルに関する情報を取得することに関連して使用される。いくつかの実施形態において、.NETファイルパーサ172は、.NETファイルの.NETヘッダ、及び/又は、.NETヘッダからの情報を取得する。.NETファイルパーサ172は、.NETヘッダに含まれる1つ以上のデータストリーム、及び/又は、.NETヘッダに含まれる(または、.NETヘッダによって参照される)1つ以上のテーブルを取得する。例えば、.NETファイルパーサ172は、.NETヘッダ内に含まれる#Stringsストリームを取得する。別の例として、.NETファイルパーサ172は、.NETファイルから(例えば、.NETヘッダから)ImplMapを取得する。いくつかの実施形態において、.NETファイルパーサ172は、.NETファイルにインポートされる、インポート関数のセット(例えば、インポートされたAPI関数名)を決定する。
【0032】
アンマネージ関数抽出器174は、.NETファイルにインポートされる、アンマネージなインポート関数のセットを決定する(例えば、取得する)ことに関連して使用される。例えば、アンマネージ関数抽出器174は、.NETファイルにインポートされた、インポート関数のセット(例えば、インポートされたAPI関数名)から、アンマネージなインポート関数のセットを決定する。様々な実施形態に従って、アンマネージ関数抽出器174は、.NETヘッダに含まれる(または、.NETヘッダによって参照される)情報を使用して、アンマネージコードまたはアンマネージ関数(例えば、アンマネージ関数、および、対応しているライブラリ)を決定する。いくつかの実施形態において、アンマネージ関数抽出器174は、.NETファイルにインポートされた、使用されたアンマネージなwin32 API関数のセットを決定する。アンマネージ関数抽出器174は、.NETファイルにインポートされたアンマネージなインポート関数(または、アンマネージ関数の名前)、及び/又は、対応しているライブラリのセットを予測エンジン176に提供する。
【0033】
予測エンジン176は、ファイル(例えば、.NETファイル)が悪意のあるものか否かを決定するために使用される。予測エンジン176は、対応している.NETファイルが悪意のあるものか否かを決定することに関連して、.NETヘッダに含まれる情報を使用する。例えば、予測エンジン176は、アンマネージなインポート関数のセット(または、アンマネージ関数の名前)、及び/又は、アンマネージ関数抽出器174から.NETファイルにインポートされた、対応しているライブラリを取得する。いくつかの実施形態において、予測エンジン176は、.NETファイルにインポートされた、アンマネージなインポート関数のセット(または、アンマネージ関数の名前)、及び/又は、対応しているライブラリについてのハッシュ(例えば、ハッシュ値)を決定する。例えば、予測エンジン176は、.NETファイルに対応しているアンマネージImphashを計算する。予測エンジン176は、.NETファイルにインポートされた、アンマネージなインポート関数のセット(または、アンマネージ関数の名前)、及び/又は、対応しているライブラリのセットのリストを決定し、そして、そうしたリストのハッシュを決定する。アンマネージなインポート関数、及び/又は、対応しているライブラリのセットのリストは、既定の順序に従って決定される。例えば、インポートされたアンマネージ関数、及び/又は、対応しているライブラリの順序付け(ordering)は、アンマネージ関数が.NETヘッダの要素に含まれる順序(例えば、アンマネージ関数が、.NETテーブルに含まれるか、または、それによって参照される#Stringsストリーム及び/又はテーブルに含まれる順序)に対応している。アンマネージ関数がリストに追加される(または、リストが構成される)様々な他の順序が実施され得る。予測エンジン176は、既定のフォーマットに従って、リスト、及び/又は、アンマネージ関数(例えば、アンマネージ関数名、及び/又は、対応しているライブラリ)をフォーマットする。既定のフォーマットの例は、(i)小文字の英数字ストリング、(ii)ファイル拡張子の除去、(iii)ライブラリ拡張子の除去(例えば、対応しているライブラリ名からの.dllの除去)、(iv)アンマネージ関数名および対応しているライブラリの付加、および、(v)アンマネージ関数名と、対応しているライブラリとの間の事前定義されたセパレータの使用、が含まれる。いくつかの実施形態において、予測エンジン176は、関数名(例えば、アンマネージ関数名)を対応しているライブラリに付加し、そして、ドットまたはピリオド(例えば、「.」)によって、対応しているライブラリから関数名を分離する。関数名およびライブラリを(例えば、「.」といった事前定義されたセパレータを用いて)付加することによって文字列(string)を決定したことに応答して、予測エンジン176は、そうしたエントリを、アンマネージなインポート関数、及び/又は、対応しているライブラリのセットのリストに追加する。
【0034】
様々な実施形態に従って、予測エンジン176は、アンマネージなインポート関数、及び/又は、対応しているライブラリのセットのリストに関してハッシュを決定する。ハッシュの決定に関連して、様々なハッシュ関数を使用することができる。ハッシュ関数の例は、SHA-256ハッシュ関数、MD5ハッシュ関数、SHA-1ハッシュ関数、等を含む。様々な他のハッシュ関数が実装され得る。予測エンジン176は、ハッシュ関数を使用して、.NETファイルに対応しているアンマネージImphashを決定する。
【0035】
様々な実施形態に従って、予測エンジン176は、.NETファイルが悪意のあるものか否かを決定するために、.NETファイルの.NETヘッダから取得された情報を使用する。いくつかの実施形態において、予測エンジン176は、.NETファイルが悪意のあるものか否かを決定することに関連して、.NETファイルに対応しているアンマネージImphashを使用する。一つの例として、.NETファイルに対応しているアンマネージImphashを決定することに応答して、予測エンジン176は、アンマネージImphashが、悪意があると見なされるファイルのアンマネージImphashに一致するか否かを決定する。一つの例として、.NETファイルに対応しているアンマネージImphashを決定したことに応答して、予測エンジン176は、アンマネージImphashが、良性であると見なされるファイルのアンマネージImphashに一致するか否かを決定する。いくつかの実施形態において、悪意のあるファイル検出器170(例えば、予測エンジン176)は、特定のファイルに関する情報(例えば、分析されている.NETファイルに対応しているアンマネージImphash)が、履歴ファイルのデータセット、および、特定のファイルが悪意のあるものか否かを示す履歴データセット(例えば、VirusTotalTMといったサードパーティサービス)に関連する履歴情報、に含まれるか否かを決定する。特定のファイルに関する情報が、履歴ファイルおよび履歴情報のデータセットに含まれていない、または、利用可能でないと決定したことに応答して、悪意のあるファイル検出器170は、ファイルを良性であると見なし得る(例えば、ファイルを悪意のあるものではないと見なす)。特定のファイルが悪意のあるものか否かを示す履歴ファイルに関連付けられた履歴情報の一つの例は、VirusTotal(R)(VT)スコアに対応している。特定のファイルについてのVTスコアが0より大きい場合、その特定のファイルは、サードパーティサービスによって悪意があると見なされる。いくつかの実施形態において、特定のファイルが悪意のあるものか否かを示す履歴ファイルに関連付けられた履歴情報は、ファイルが悪意のあるものであるか、または、悪意のあるものである可能性が高いことを示す、コミュニティベースのスコア、または、レーティング(例えば、評判スコア)といったソーシャルスコアに対応している。(例えば、サードパーティサービス、コミュニティベースのスコア、等からの)履歴情報は、他のベンダまたはサイバーセキュリティ組織が、特定のファイルを悪意のあるものであると見なすか否かを示す。
【0036】
いくつかの実施形態において、悪意のあるファイル検出器170(例えば、予測エンジン176)は、受信されたファイルが新たに分析されたことを決定する(例えば、ファイルが履歴情報/データセット内にないこと、ホワイトリストまたはブラックリスト上にないこと、等)。悪意のあるファイル検出器170(例えば、スクリプト抽出モジュール172)は、セキュリティプラットフォーム140がネットワーク内のセキュリティエンティティ(例えば、ファイアウォール)またはエンドポイントからファイルを受信したことに応答して、ファイルが新たに分析されたことを検出し得る。例えば、悪意のあるファイル検出器170は、セキュリティプラットフォーム140、または悪意のあるファイル検出器170が、ファイルを受信するのと同時に新たに、ファイルが分析されたと決定する。別の例として、悪意のあるファイル検出器170(例えば、予測エンジン176)は、バッチプロセスに関連するといった、既定のスケジュール(例えば、毎日、毎週、毎月、等)に従って、ファイルが新たに分析されたと決定する。そうしたファイルが悪意のあるものか否かに関して未だ分析されていないと決定したことに応答して(例えば、システムが、そうしたファイルに関する履歴情報を備えていない)、悪意のあるファイル検出器170は、ファイルが悪意のあるものか否かを決定することに関連して(例えば、ファイルが.NETファイルであると決定したことに応答してなど)、ファイルに関連する.NETヘッダを使用するか否かを決定し、そして、悪意のあるファイル検出器170は、.NETファイルの.NETヘッダから.NETファイルに関する情報を解析及び/又は抽出するために、.NETファイルパーサを使用する、。いくつかの実施形態において、.NETファイルパーサ172は、システムのサンドボックス環境内の.NETヘッダから情報を抽出する。
【0037】
様々な実施形態に従って、ファイルが悪意のあるものであると予測エンジン176が決定したことに応答して、システムは、ファイルが悪意のあるものであるという指示をセキュリティエンティティ(または、クライアントといったエンドポイント)に送信する。例えば、悪意のあるファイル検出器170は、セキュリティエンティティ(例えば、ファイアウォール)またはネットワークノード(例えば、クライアント)に対して、ファイルが悪意のあるものであるという指示を送信する。ファイルが悪意のあるものであるという指示は、ファイルが悪意のあるものであると見なされる場合といった(例えば、悪意のあるファイルに対応している)ファイルのブラックリストへの更新、または、ファイルが良性であると見なされる場合といった(例えば、悪意のないファイルに対応している)ファイルのホワイトリストへの更新に対応し得る。いくつかの実施形態において、悪意のあるファイル検出器170は、ファイルが悪意のあるものであるか、または、良性であるという指示に関連して、ファイルに対応しているハッシュまたは署名を送信する。セキュリティエンティティまたはエンドポイントは、ファイルのハッシュまたは署名を計算し、ファイルが、悪意がある/良性であるか否かの指示へのハッシュ/署名のマッピングに対してルックアップを実行し得る(例えば、ホワイトリスト及び/又はブラックリストをクエリする)。いくつかの実施形態において、ハッシュまたは署名は、ファイルを一意に識別する。
【0038】
キャッシュ178は、ファイルに関する情報を保管している。いくつかの実施形態において、キャッシュ178は、ファイルが悪意のあるものである(または、悪意のあるものである可能性が高い)か否かの指示の特定のファイルへのマッピング、または、ファイルが悪意のあるものである(または、悪意のあるものである可能性が高い)か否かの指示のファイルに対応しているハッシュまたは署名へのマッピングを保管する。キャッシュ178は、ファイルのセットに関する追加の情報を保管することができる。ファイルのセット内のファイルのスクリプト情報、ファイルのセット内のファイルに対応しているハッシュまたは署名、ファイルのセット内のファイルに対応している他の一意の識別子、ファイルによって呼び出される実行可能ファイル、ファイルによって呼び出されるビットコインウォレット、ファイルに含まれるポインタ、といったものである。
【0039】
図1に戻り、(システム120を使用している)悪意のある個人がマルウェア130を作成したと仮定する。悪意のある個人は、クライアントデバイス104といった、クライアントデバイスがマルウェア130のコピーを実行し、クライアントデバイスを危険にさらし、そして、クライアントデバイスをボットネット内のボットにさせることを望んでいる。危険にさらされたクライアントデバイスは、次いで、タスク(例えば、暗号通貨マイニング、または、サービス妨害攻撃への参加)を実行するように、かつ/あるいは、コマンドおよび制御(C&C)サーバ150といった外部エンティティ(例えば、そうしたタスクに関連付けられた、機密の企業データを抽出するなど)に情報を報告するように、並びに、適用可能な場合、C&Cサーバ150から命令を受信するように、命令され得る。
【0040】
マルウェア130は、(例えば、C&Cサーバ150に電子メールを送信するように、クライアントにさせることによって)危険にさらされたクライアントデバイスに、C&Cサーバ150と直接的に通信させるように試みることができるが、そうした明白な通信の試みは、疑わしい/有害であるとして(例えば、データアプライアンス102によって)フラグ付けされ、そして、ブロックされ得る。ますます、そうした直接的な通信を発生させる代わりに、マルウェアの作者は、本明細書でDNSトンネリングと呼ばれる技法を使用する。DNSは、paloaltonetworks.comといった人間に優しいURLを、199.167.52.137といったマシンに優しいIPアドレスへと変換するプロトコルである。DNSトンネリングは、DNSプロトコルをエクスプロイト(exploit)して、クライアント-サーバモデルを介してマルウェアおよび他のデータをトンネリングする。添付ファイル(attach)の例では、悪意のあるファイル(例えば、マルウェア)が、電子メール、インスタントメッセージ、等といったメッセージに対する添付ファイルとして送信される。一旦、添付ファイルを選択すると、マルウェアプログラムが、クライアントデバイスにインストールされ得る。攻撃の一つの例において、攻撃者は、badsite.comといった、ドメインを登録する。ドメインのネームサーバは、トンネリングマルウェアプログラムがインストールされている、攻撃者のサーバを指し示す。攻撃者は、コンピュータを感染させる。DNS要求は、従来、セキュリティ機器の内外に移動することが許可されているので、感染したコンピュータは、DNSリゾルバ(例えば、kj32hkjqfeuo32ylhkjshdflu23.badsite.com、ここでは、クエリのサブ領域部分はC&Cサーバによる消費のために情報をエンコーディングする)に対してクエリを送信することが許可される。DNSリゾルバは、IPアドレスに対する要求を、ルートおよびトップレベルドメインサーバに対して中継(relay)するサーバである。DNSリゾルバは、トンネリングプログラムがインストールされている、攻撃者のC&Cサーバにクエリをルーティング(route)する。被害者と攻撃者との間に、今や、DNSリゾルバを介して、接続が確立される。このトンネルは、データを抽出するため、または、他の悪意のある目的のために使用され得る。
【0041】
DNSトンネリング攻撃を検出し、かつ、防止することは、様々な理由で困難である。多くの正当なサービス(例えば、コンテンツ配信ネットワーク、ウェブホスティング会社、等)は、ドメイン名のサブドメイン部分を正当に使用して、それらの正当なサービスの使用をサポートするのを助けるための情報を、エンコーディング。そうした正当なサービスによって使用されるエンコーディングパターンは、プロバイダ間で大きく異なる可能性があり、そして、良性のサブドメインは、悪意のあるサブドメインと視覚的に区別できないように見える可能性がある。第2理由は、既知の良性、および、既知の悪意のある、両方のトレーニングセットデータの大きなコーパス(corpus)を有する他の領域(例えば、コンピュータ研究)とは異なり、DNSクエリのためのトレーニングセットデータは、ひどく偏っていることである(例えば、何百万もの良性ルートドメインの例、および、非常に少数の悪意のある例を有する)。そうした困難にも関わらず、かつ、本明細書で説明される技法を使用して、悪意のあるドメインを、効率的かつ積極的に(例えば、ドメインの登録直後に)検出することができ、かつ、ネットワーク内、または、ネットワークに入る悪意のあるファイルに関してセキュリティポリシを実施することができ、そして、そうした悪意のあるファイルをブロックし、もしくは、そうでなければ、悪意のあるファイルのユーザまたは管理者に警告する(例えば、通知を送信する、ユーザにプロンプトを提供する、等)。
【0042】
図1に示される環境は、3つのドメインネームシステム(DNS)サーバ(122-126)含んでいる。示されるように、DNSサーバ122は、(ネットワーク110内に配置されたコンピューティングアセットによる使用のために)ACMEの制御下にあり、一方で、DNSサーバ124は、公的にアクセス可能である(そして、また、ネットワーク110内に配置されたコンピューティングアセット、並びに、他のネットワーク(例えば、ネットワーク114および116)内に配置されたものといった、他のデバイスによっても使用され得る)。DNSサーバ126は、公的にアクセス可能であるが、C&Cサーバ150の悪意のあるオペレータの制御下にある。エンタープライズDNSサーバ122は、企業ドメイン名をIPアドレスへと解決するように構成されており、そして、さらに、1つ以上の外部DNSサーバ(例えば、DNSサーバ124および126)と通信して、適用される場合、ドメイン名を解決するように構成されている。
【0043】
上述のように、正当なドメイン(例えば、サイト128として示されるwww.example.com)に接続するために、クライアントデバイス104といった、クライアントデバイスは、ドメインを、対応しているインターネットプロトコル(IP)アドレスへ解決する必要がある。そうした解決が行われ得る1つの方法は、クライアントデバイス104が、ドメインを解決するために、DNSサーバ122及び/又は124に要求を転送することである。要求されたドメイン名について有効なIPアドレスを受信したことに応答して、クライアントデバイス104は、IPアドレスを使用して、ウェブサイト128に接続することができる。同様に、悪意のあるC&Cサーバ150に接続するために、クライアントデバイス104は、ドメイン「kj32hkjqfeuo32ylhkjshdflu23.badsite.com」を、対応しているインターネットプロトコル(IP)アドレスへ解決する必要がある。この例において、悪意のあるDNSサーバ126は、*.badsite.comに対して権限があり、そして、クライアントデバイス104の要求は、(例えば)解決のためにDNSサーバ126に転送され、究極的に、C&Cサーバ150がクライアントデバイス104からデータを受信することを可能にする。
【0044】
データアプライアンス102は、クライアントデバイス104および106といった、クライアントデバイスと、企業ネットワーク140の外部のノード(例えば、外部ネットワーク118を介して到達可能なもの)との間の通信に関するポリシを実施するように構成されている。そうしたポリシの例は、トラフィックシェーピング、クオリティオブサービス、および、トラフィックのルーティングを管理するものを含んでいる。ポリシの他の例は、着信(及び/又は、発信)電子メール添付ファイル、ウェブサイトコンテンツ、インスタントメッセージングプログラムを介して交換されるファイル、及び/又は、他のファイル転送における脅威のスキャンを必要とするものといった、セキュリティポリシを含む。いくつかの実施形態において、データアプライアンス102は、また、企業ネットワーク140内に留まるトラフィックに関してポリシを実施するように構成されている。
【0045】
様々な実施形態において、データアプライアンス102は、クライアントデバイス(例えば、クライアントデバイス104-108)が悪意のあるDNSトンネリングに関与しようとしているか否かを決定することを容易にし、かつ/あるいは、悪意のあるDNSサーバへの(例えば、クライアントデバイス104-108による)接続を防止するように構成された、DNSモジュール134を含んでいる。DNSモジュール134は、(図1に示されるように)アプライアンス102に統合されることができ、そして、また、種々の実施形態において、独立型アプライアンスとして動作することもできる。そして、図1に示される他のコンポーネントと同様に、DNSモジュール134は、アプライアンス102(または、セキュリティプラットフォーム140)を提供する同一のエンティティによって提供されることができ、そして、また、サードパーティ(例えば、アプライアンス102またはセキュリティプラットフォーム140のプロバイダとは異なるもの)によって提供されることもできる。さらに、悪意のあるDNSサーバへの接続を防止することに加えて、DNSモジュール134は、クライアントによって行われたトンネリング試行(tunneling attempt)の個別化されたロギング(所与のクライアントが危険にさらされており、かつ、隔離されるべきであり、または、そうでなければ管理者によって調査されるべきであるという指示)といった、他のアクションをとることができる。
【0046】
様々な実施形態において、クライアントデバイス(例えば、クライアントデバイス104)がドメインを解決しようと試みる場合、DNSモジュール134は、セキュリティプラットフォーム140に対するクエリとしてドメインを使用する。このクエリは、ドメインの解決と同時に実行され得る(例えば、DNSサーバ122、124、及び/又は、126、並びに、セキュリティプラットフォーム140に送信される要求と同時)。一つの例として、DNSモジュール134は、REST APIを介して、セキュリティプラットフォーム140のフロントエンド142にクエリを(例えば、JSONフォーマットで)送信することができる。以下でより詳細に説明される処理を使用して、セキュリティプラットフォーム140は、クエリされたドメインが悪意のあるDNSトンネリングの試みを示すか否かを(例えば、DNSトンネリング検出器138を使用して)決定し、そして、結果(例えば、「悪意のあるDNSトンネリング」または「非トンネリング」)をDNSモジュール134に返す。
【0047】
様々な実施形態において、クライアントデバイス(例えば、クライアントデバイス104)が、電子メール、インスタントメッセージへの添付ファイルを介するなどして、受信されたファイルを開くことを試みる場合、または、クライアントデバイスがそうしたファイルを受信する場合、DNSモジュール134は、セキュリティプラットフォーム140へのクエリとしてファイル(つまり、計算されたハッシュまたは署名、もしくは、他の一意の識別子、等)を使用する。このクエリは、ファイルの受信と同時に、または、ファイルをスキャンするためのユーザからの要求に応答して、実行され得る。一つの例として、データアプライアンス102は、REST APIを介して、セキュリティプラットフォーム140のフロントエンド142にクエリを(例えば、JSONフォーマットで)送信することができる。以下でより詳細に説明される処理を使用して、セキュリティプラットフォーム140は、クエリされたファイルが悪意のあるファイルであるか(または、悪意のあるファイルである可能性が高いか)否かを(例えば、悪意のあるファイル検出器170を使用して)決定し、そして、結果(例えば、「悪意のあるDNSトンネリング」または「非トンネリング」)をDNSモジュール134に返す。
【0048】
様々な実施形態において、DNSトンネリング検出器138(セキュリティプラットフォーム140上、データアプライアンス102上、または、他の適切な場所/場所の位置の組み合わせ、のいずれかで実装される)は、悪意のあるDNSトンネリングを識別する際に2面アプローチ(two-pronged approach)を使用する。第1手法は、ルートドメインについてDNSトラフィックのリアルタイムプロファイル(156)のセットを構築するために、(例えば、パイソン(python)を使用して実装される)異常検出器(anomaly detector)146を使用する。第2アプローチは、署名生成およびマッチング(本明細書では、また、類似性検出とも呼ばれ、かつ、例えば、Goを使用して実装される)を使用する。2つのアプローチは、相補的である。異常検出器は、以前には未知であったトンネリングトラフィックを識別することができる、汎用検出器として関数する。しかしながら、異常検出器は、検出が行われる前に複数のDNSクエリを観察する必要とすることがある。第1DNSトンネリングパケットをブロックするために、類似性検出器144は、異常検出器146を補完し、そして、検出されたトンネリングトラフィックから署名を抽出する。それは、検出されたルートドメインに類似するツール/マルウェアを使用して、攻撃者が新しい悪意のあるトンネリングルートドメインを登録し、そのように行った、状況を識別するために使用され得る。
【0049】
データアプライアンス102がDNSクエリを(例えば、DNSモジュール134から)受信すると、データアプライアンス102は、それらを、異常検出および類似性検出の両方を実行するセキュリティプラットフォーム140に対して、それぞれに、提供する。様々な実施形態において、(例えば、セキュリティプラットフォーム140によって受信されたクエリにおいて提供されるような)ドメインは、いずれかの検出器がドメインにフラグ付ける場合に、悪意のあるDNSトンネリングルートドメインとして分類される。
【0050】
DNSトンネリング検出器138は、(そこからデータが受信される)機器ごとに、それらのルートドメインに関してグループ化された(図1ではドメインプロファイル156として集合的に示されている)、完全に指定されたドメイン名(fully qualified domain name、FQDN)のセットを維持する。(ルートによるグループ化を通じて、ドメインは、本明細書において一般的に説明されているが、本明細書で説明される技法は、また、任意のレベルのドメインまで拡張され得ることも理解されるべきである。)様々な実施形態において、所与のドメインについての受信されたクエリに関する情報は、固定された時間量について(例えば、10分のスライディング時間ウィンドウ)、プロファイル内に持続される。
【0051】
一つの例として、様々なfoo.comサイトについてデータアプライアンス102から受信されたDNSクエリ情報は、以下のように(ルートドメインfoo.comについてのドメインプロファイルへと)グループ化される。
G(foo.com)=[mail.foo.com、coolstuff.foo.com,domain1234.foo.com]。
第2ルートドメインは、同様の適用情報を有する第2プロファイルを有するだろう(例えば、G(baddomain.com)=[lskjdf23r.baddomain.com,kj235hdssd233.baddomain.com])。各ルートドメイン(例えば、foo.comまたはbaddomain.com)は、悪意のあるDNSトンネリングに固有の特性のセットを使用してモデル化され、その結果、良性DNSパターンが多様であってさえも(例えば、k2jh3i8y35.legitimatesite.com,xxx888222000444.otherlegitimatesite.com)、それらが、悪意のあるトンネリングとして誤分類される可能性は非常に低い。以下は、ドメインの所与のグループ(すなわち、ルートドメインを共有する)についての特徴として(例えば、特徴ベクトルへと)抽出され得る例示的な特性である。
【0052】
いくつかの実施形態において、悪意のあるファイル検出器170は、データアプライアンス102といった、セキュリティエンティティに対して、ファイルが悪意のあるものか否かの指示を提供する。例えば、ファイルが悪意のあるものであると決定したことに応答して、悪意のあるファイル検出器170は、ファイルが悪意のあるものであるという指示をデータアプライアンス102に送信し、そして、データアプライアンスは、次に、ファイルが悪意のあるものであるという指示に少なくとも部分的に基づいて、1つ以上のセキュリティポリシを実施し得る。1つ以上のセキュリティポリシは、ファイルを隔離すること、ファイルを削除すること、ユーザがファイルを開く/実行する以前にファイルの悪意性をユーザに警告し、または、促すこと、等を含み得る。別の例として、ファイルが悪意のあるものであると決定したことに応答して、悪意のあるファイル検出器170は、セキュリティエンティティに対して、対応しているファイルが悪意のあるものか否かの指示に対するファイル(または、ハッシュ、署名、アンマネージなImphashes、もしくは、ファイルに対応している他の一意の識別子)のマッピングの更新、または、悪意のあるファイルについてのブラックリスト(例えば、ファイルドメインを識別している)、もしくは、良性ファイルについてのホワイトリスト(例えば、悪意のあるものと見なされないファイルを識別している)に係る更新を提供する。
【0053】
図2は、様々な実施形態に従った、悪意のあるファイルを検出するためのシステムに係るブロック図である。様々な実施形態に従って、システム200は、悪意のあるファイル検出器170についてなど、図1のシステム100に関連して実装される。様々な実施形態において、システム200は、図4のプロセス400、図5のプロセス500、図6のプロセス600、図7Aのプロセス700、図7Bのプロセス750、図8のプロセス800、図9のプロセス900、図10のプロセス1000、及び/又は、図11のプロセス1100に関連して実装される。システム200は、1つ以上のサーバ、ファイアウォールといったセキュリティエンティティ、及び/又は、エンドポイントに実装され得る。
【0054】
システム200は、サーバといった1つ以上のデバイスによって実装され得る。システム200は、ネットワーク上の様々な場所で実施され得る。いくつかの実施形態において、システム200は、図1のシステム100の悪意のあるファイル検出器170を実装する。一つの例として、システム200は、ウェブサービスといった、サービスとして展開される(例えば、システム200は、ファイルが悪意のあるものか否かを決定し、そして、そうした決定をサービスとして提供する)。サービスは、1つ以上のサーバによって提供され得る(例えば、システム200または悪質なファイルの検出器は、電子メール、インスタントメッセージ、等に対する添付ファイルを介するなどして、ネットワーク内、または、ネットワークの内/外に送信されるファイルを監視または受信し、そして、ファイルが悪意のあるものか否かを決定し、かつ、ファイルが悪意のあるものか否かの指示といったファイルに関する通知または更新を送信し/プッシュする、リモートサーバ上に展開される)。別の例として、悪意のあるファイル検出器は、ファイアウォール上に展開される。
【0055】
示される例において、システム200は、ファイル(例えば、新たに受信されたファイル)が悪意のあるものか否かを予測すること、ファイルが悪意のあるものである可能性を決定すること、及び/又は、ファイルが悪意のあるものか否かの通知もしくは指示を提供すること、に関連して、1つ以上のモジュールを実装している。システム200は、通信インターフェイス205、1つ以上のプロセッサ210、ストレージ装置215、及び/又は、メモリ220を備えている。1つ以上のプロセッサ210は、通信モジュール225、.NETヘッダ抽出モジュール230、アンマネージ関数抽出モジュール235、リスト生成モジュール240、予測モジュール245、及び/又は、通知モジュール250、のうちの1つ以上を備えている。
【0056】
いくつかの実施形態において、システム200は、通信モジュール225を含んでいる。システム200は、様々なノードもまたはエンドポイント(例えば、クライアント端末、ファイアウォール、DNSリゾルバ、データアプライアンス、他のセキュリティエンティティ、等)、もしくは、アドミニストレータシステムといったユーザシステムと通信するために、通信モジュール225を使用する。例えば、通信モジュール225は、通信される情報を通信インターフェイス205に提供する。別の例として、通信インターフェイス205は、システム200によって受信された情報を通信モジュール225に提供する。通信モジュール225は、セキュリティエンティティ(例えば、ファイアウォール)といったネットワークエンドポイントまたはノードからなど、分析されるファイルを受信するように構成されている。通信モジュール225は、ファイルに関する情報についてサードパーティサービスをクエリするように構成されている(例えば、ファイルの悪意性のサードパーティスコアまたは評価、ファイルに関するコミュニティベースのスコア、評価、もしくは、評判、ファイルのブラックリスト、及び/又は、ファイルのホワイトリストのファイルの情報を公開するサービス、等)。例えば、システム200は、サードパーティサービスをクエリするために、通信モジュール225を使用する。通信モジュール225は、管理者から1つ以上の設定または構成を受信するように構成されている。1つ以上の設定または構成の例は、ファイルが悪意のあるものか否かを決定するプロセスの構成、.NETファイルのアンマネージImphashを決定するために.NETファイルの情報が編成/配置されるフォーマット、ファイルのアンマネージImphashの決定に関連して使用されるハッシュ関数、ドメイン(例えば、疑わしいと見なされず、かつ、トラフィックまたは接続が許可されるドメイン)のホワイトリストに関する情報、ドメイン(例えば、疑わしいと見なされ、かつ、トラフィックまたは接続が制限されるドメイン)のブラックリストに関する情報、を含む。
【0057】
いくつかの実施形態において、システム200は、.NETヘッダ抽出モジュール230を含んでいる。システム200は、ファイルのヘッダに関連する情報を(例えば、ヘッダから)抽出するか否かを決定すること、および、(例えば、ファイルが悪意のあるものか否かの分析のために)ファイルの情報を抽出することに関連して、.NETヘッダ抽出モジュール230を使用する。いくつかの実施形態において、.NETヘッダ抽出モジュール230は、分析されるべきファイルを受信する。電子メール、インスタントメッセージへの添付ファイルとして含まれるファイル、もしくは、そうでなければ、ネットワークを介して、または、ネットワークの内/外から通信されるファイル、といったものである。.NETヘッダ抽出モジュール230は、ファイルが.NETファイルであると決定したことに応答して、ファイルのヘッダに関する情報の抽出を実行することを決定する。一つの例として、.NETヘッダ抽出モジュール230は、ファイルが.NETファイルに対応しているという指示を受信することに基づいて、ファイルが.NETファイルであると決定する。別の例として、.NETヘッダ抽出モジュール230は、ファイルが.NETヘッダを含むという決定に少なくとも部分的に基づいて、ファイルが.NETファイルであると決定する。別の例として、.NETヘッダ抽出モジュール230は、PEヘッダ内のディレクトリ項目が非ゼロ値(non-zero value)を有するという決定に少なくとも部分的に基づいて、ファイルが.NETファイルであると決定する(例えば、システム200は、ファイルのバイナリ構造を検査し、かつ、任意的なヘッダ値内の値が非ゼロ値/場所を含むか否かを決定し、そして、そうである場合には、ファイルが.NETファイルであると決定する)。別の例として、.NETヘッダ抽出モジュール230は、ファイルが「_CorExeMain」または「_CorDllMain」関数をインポートするかを決定するためのチェックに少なくとも部分的に基づいて、ファイルが.NETファイルであると決定する。
【0058】
いくつかの実施形態において、.NETヘッダ抽出モジュール230は、.NETファイルの.NETヘッダから.NETヘッダ及び/又は情報を取得する。ファイルが.NETファイルであると決定したことに応答して、.NETヘッダ抽出モジュール230は、ファイルのヘッダに関する情報(例えば、ヘッダからの情報)を取得する。いくつかの実施形態において、.NETヘッダ抽出モジュール230は、.NETヘッダを決定し、そして、.NETヘッダによってインポートされる(または、参照される)インポート関数を取得する。例えば、.NETヘッダ抽出モジュール230は、.NETファイルの.NETヘッダに少なくとも部分的に基づいて、インポートされたAPI関数名を取得する。NETヘッダ抽出モジュール230は、.NETヘッダに含まれる1つ以上のデータストリーム、及び/又は、.NETヘッダに含まれる(または、.NETヘッダによって参照される)1つ以上のテーブルを取得する。例えば、.NETヘッダ抽出モジュール230は、.NETヘッダに含まれる#Stringsストリームを取得する。別の例として、.NETヘッダ抽出モジュール230は、.NETファイルから(例えば、.NETヘッダから)ImplMapを取得する。ImplMapは、.NETファイルのインポートされたアンマネージ関数に関する様々な情報を含み得る。いくつかの実施形態において、.NETヘッダ抽出モジュール230は、.NETファイルにインポートされる、インポート関数のセット(例えば、インポートされたAPI関数名)を決定する。
【0059】
様々な実施形態に従って、ファイルが悪意のあるものか否かを決定するために分析されるべきファイルを受信したことに応答して、システム200は、ファイルを、そのファイルが分析されるべきサンドボックス内に配置する。いくつかの実施形態において、.NETヘッダ抽出モジュール230は、ファイルのヘッダに関連する情報(例えば、ヘッダからの情報)を抽出する。一つの例として、.NETヘッダ抽出モジュール230は、サンドボックス内の.NETファイルについての.NETヘッダ及び/又はPEヘッダから、ヘッダ情報を抽出する。例えば、システム200は、特定のファイルの分析のためにサンドボックスを呼び出す(invoke)。別の例として、システム200は、様々なファイルの分析のために共通のサンドボックスを使用する。
【0060】
いくつかの実施形態において、システム200は、アンマネージ関数抽出モジュール235を含んでいる。システム200は、アンマネージ関数抽出モジュール235を使用して、.NETファイルの.NETヘッダを介してインポートされたアンマネージ関数のリストといった、.NETファイルに含まれ、または、参照される、アンマネージ関数のセットを決定する(例えば、取得する)。例えば、アンマネージ関数抽出モジュール235は、.NETファイルにインポートされたインポート関数(例えば、インポートされたAPI関数名)のセットからアンマネージなインポート関数のセットを決定する。様々な実施形態に従って、アンマネージ関数抽出モジュール235は、.NETヘッダに含まれる(または.NETヘッダによって参照される)情報を使用して、アンマネージコードまたはアンマネージ関数(例えば、アンマネージ関数、および、対応しているライブラリ)を決定する。いくつかの実施形態において、アンマネージ関数抽出モジュール235は、.NETファイルにインポートされた、使用されたアンマネージなwin32 API関数のセットを決定する。アンマネージ関数抽出モジュール235は、.NETファイルにインポートされたアンマネージなインポート関数(または、アンマネージ関数の名前)、及び/又は、対応しているライブラリのセットをリスト生成モジュール240、及び/又は、予測モジュール245に提供する。
【0061】
いくつかの実施形態において、システム200は、リスト生成モジュール240を含んでいる。システム200は、アンマネージ関数、及び/又は、対応しているライブラリのリストを生成するために、リスト生成モジュール240を使用する。いくつかの実施形態において、システム200は、.NETファイルにインポートされるアンマネージなインポート関数(または、アンマネージ関数の名前)、及び/又は、対応しているライブラリのセットをフォーマットするために、リスト生成モジュール240を使用する。リスト生成モジュール240は、既定のフォーマットに従って、リスト及び/又はアンマネージ関数(例えば、アンマネージ関数名、及び/又は、対応しているライブラリ)をフォーマットする。既定のフォーマットの例は、(i)小文字の英数字ストリング、(ii)ファイル拡張子の除去、(iii)ライブラリ拡張子の除去(例えば、対応しているライブラリ名からの.dllの除去)、(iv)アンマネージ関数名および対応しているライブラリの付加、および、(v)アンマネージ関数名と、対応しているライブラリとの間の事前定義されたセパレータの使用、を含む。いくつかの実施形態において、リスト生成モジュール240は、関数名(例えば、アンマネージ関数名)を対応しているライブラリに付加(append)し、そして、ドットまたはピリオド(例えば、「.」)によって、対応しているライブラリから、関数名を分離する。関数名およびライブラリを(例えば、「.」といった既定のセパレータを用いて)付加することにより文字列(string)を決定することに応答して、リスト生成モジュール240は、そうしたエントリを、アンマネージなインポート関数、及び/又は、対応しているライブラリのセットのリストに追加する。様々な実施形態に従って、リストに追加されるべきさらなるアンマネージ関数、及び/又は、対応しているライブラリがないと決定したことに応答して、リスト生成モジュール240は、予測モジュール245のリストを提供する。
【0062】
いくつかの実施形態において、システム200は、予測モジュール245を含んでいる。システム200は、ファイルが悪意のあるものか否かを予測するか、または、ファイルが悪意のあるものである可能性を予測するために、予測モジュール245を使用する。様々な実施形態に従って、予測モジュール245は、ファイルの.NETヘッダに含まれる(または、参照される)情報に少なくとも部分的に基づいて、ファイルが悪意のあるものか否かを決定する。例えば、予測モジュール245は、ファイルに対応しているアンマネージImphashを決定し、そして、アンマネージImphashに少なくとも部分的に基づいて、ファイルが悪意のあるものか否かを決定する。
【0063】
様々な実施形態に従って、予測モジュール245は、アンマネージなインポート関数、及び/又は、対応しているライブラリのセットのリストに関してハッシュを決定する。ハッシュの決定に関連して、様々なハッシュ関数が使用され得る。ハッシュ関数の例は、SHA-256ハッシュ関数、MD5ハッシュ関数、SHA-1ハッシュ関数、等を含む。様々な他のハッシュ関数が実装され得る。予測モジュール245は、.NETファイルに対応しているアンマネージImphashを決定するために、ハッシュ関数を使用する。
【0064】
様々な実施形態に従って、予測モジュール245は、.NETファイルが悪意のあるものか否かを決定するために、.NETファイルの.NETヘッダから取得された情報を使用する。いくつかの実施形態において、予測モジュール245は、.NETファイルが悪意のあるものか否かを決定することに関連して、.NETファイルに対応しているアンマネージImphashを使用する。一つの例として、.NETファイルに対応しているアンマネージImphashを決定したことに応答して、予測モジュール245は、アンマネージImphashが、悪意があると見なされるファイルのアンマネージImphashに一致するか否かを決定する。一つの例として、.NETファイルに対応しているアンマネージImphashを決定したことに応答して、予測モジュール245は、アンマネージImphashが、良性であると見なされるファイルのアンマネージImphashに一致するか否かを決定する。いくつかの実施形態において、予測モジュール245は、特定のファイルに関する情報(例えば、分析されている.NETファイルに対応しているアンマネージImphash)が、履歴ファイルのデータセット、および、特定のファイルが悪意のあるものか否かを示す履歴データセット(例えば、VirusTotalTMといったサードパーティサービス)に関連する履歴情報、に含まれるか否かを決定する。特定のファイルに関する情報が、履歴ファイルおよび履歴情報のデータセットに含まれていない、または、利用可能でないと決定したことに応答して、予測モジュール245は、そのファイルを良性であると見なし得る(例えば、悪意のあるものではないと見なす)。特定のファイルが悪意のあるものか否かを示す履歴ファイルに関連する履歴情報の例は、VirusTotal(R)(VT)スコアに対応している。特定のファイルについてVTスコアが0より大きい場合に、その特定のファイルは、サードパーティサービスによって悪意があると見なされる。いくつかの実施形態において、特定のファイルが悪意のあるものか否かを示す履歴ファイルに関連する履歴情報は、ファイルが悪意のあるものであるか、または、悪意のあるものである可能性が高いことを示すコミュニティベースのスコアまたはレーティング(例えば、評判スコア)といったソーシャルスコアに対応している。履歴情報(例えば、サードパーティサービス、コミュニティベースのスコア、等からのもの)は、特定のファイルを、他のベンダまたはサイバーセキュリティ組織が、悪意のあるものと見なすか否かを示す。
【0065】
システム200は、ファイル(例えば、アンマネージImphash)に対応しているハッシュまたは署名を決定し(例えば、計算し)、そして、履歴情報(例えば、ホワイトリスト、ブラックリスト、等)に対してルックアップを実行し得る。いくつかの実装において、予測モジュール245は、予測エンジン176に対応しており、または、同様である。システム200(例えば、予測モジュール245)は、通信インターフェイス205を介して、ファイル(または、以前に悪意のあるもの、または、良性であると見なされたファイルについてのファイルまたはハッシュ/署名のセット)に関する履歴情報について、サードパーティ(例えば、サードパーティサービス)をクエリすることができる。システム200(例えば、予測モジュール245)は、既定の間隔(例えば、顧客指定の間隔、等)でサードパーティをクエリすることができる。一つの例として、予測モジュール245は、毎日(または、ビジネス週間の最中には毎日)、新たに分析されたファイルの登録情報についてサードパーティをクエリすることができる。
【0066】
いくつかの実施形態において、システム200は、通知モジュール250を含んでいる。システム200は、ファイルが悪意のあるものか否かの指示を提供するために、通知モジュール250を使用する。例えば、通知モジュール250は、予測モジュール245から、ファイルが悪意のあるものか否かの指示(または、ファイルが悪意のあるものである可能性)を取得し、そして、ファイルが悪意のあるものか否かの指示を、1つ以上のセキュリティエンティティ、及び/又は、1つ以上のエンドポイントに提供する。別の例として、通知モジュール250は、ファイルのホワイトリスト及び/又はファイルのブラックリストに対する更新を、1つ以上のセキュリティエンティティ(例えば、ファイアウォール)、ノード、または、エンドポイント(例えば、クライアント端末)に提供する。様々な実施形態に従って、通知モジュール250は、ファイルに関連付けられたハッシュ、署名、または、他の一意の識別子(例えば、ファイルに対応しているアンマネージImphash)を取得し、そして、ファイルに関連付けられたハッシュ、署名、または、他の一意の識別子に関連して、ファイルが悪意のあるものか否かの指示を提供する。
【0067】
種々の実施形態に従って、ファイルのハッシュは、既定のハッシュ関数を使用するハッシュ(例えば、MD5ハッシュ関数を使用するアンマネージImphash、ファイルのMD5ハッシュ、等)に対応している。セキュリティエンティティまたはエンドポイントは、受信したファイル(例えば、添付ファイル、等)のハッシュを計算し得る。セキュリティエンティティまたはエンドポイントは、ファイルに対応している計算されたハッシュが、良性ファイルのホワイトリスト、及び/又は、悪意のあるファイルのブラックリストといったセット内に含まれるか否かを決定し得る。マルウェアについての署名(例えば、受信されたファイルのハッシュ)が、悪意のあるファイルの署名のセット(例えば、悪意のあるファイルのブラックリスト)に含まれる場合に、セキュリティエンティティまたはエンドポイントは、エンドポイント(例えば、クライアントデバイス)へのマルウェアの送信を防止し、かつ/あるいは、それに応じて、マルウェアのオープンまたは実行を防止することができる。
【0068】
様々な実施形態に従って、ストレージ215は、ファイルシステムデータ260、ハッシュデータ262、及び/又は、キャッシュデータ264のうちの1つ以上を含んでいる。ストレージ215は、共有ストレージ(例えば、ネットワークストレージシステム)、及び/又はデータベースデータ、及び/又はユーザアクティビティデータを含んでいる。
【0069】
いくつかの実施形態において、ファイルシステムデータ260は、1つ以上のデータセット(例えば、ファイル及び/又はファイル属性、ファイルまたはハッシュに対する悪意があることのインジケータ(indicator)のマッピング、アンマネージImphashes、ファイルの署名または他の一意の識別子、ファイルまたはハッシュへの良性ファイルのインジケータのマッピング、ファイルの署名または他の一意の識別子、等についての1つ以上のデータセット)といった、データベースを備える。ファイルシステムデータ260は、ファイルに関する履歴情報(例えば、ファイルの悪意性)、安全である(例えば、不審でない)と見なされるファイルのホワイトリスト、不審または悪意があると見なされるファイル(例えば、悪意があると見なされる可能性が既定の/事前設定された可能性閾値を超えるファイル)のブラックリスト、不審または悪意のあるファイルに関連付けられた情報、等のデータを含んでいる。
【0070】
ハッシュデータ262は、1つ以上のファイルに関するハッシュ値といった、1つ以上のファイルに関するデータを含んでいる。いくつかの実施形態において、ハッシュデータ262は、ファイルが悪意のあるものか否かを決定するためにシステム200によって分析されるファイルといった、ファイルについてのアンマネージImphashes、または、サードパーティよってなど、悪意のあるものであると以前に評価された履歴データセットを含んでいる。ハッシュデータ262は、ハッシュ値(アンマネージImphashes)の、悪意のある指示(例えば、対応しているものが悪意のあるものであり、または、良性であるとの指示、等)へのマッピングを含む。いくつかの実施形態において、ハッシュデータ262は、ファイルまたはファイルに関連する情報(例えば、スクリプト、バイトといった属性、構造、等)と、ファイルが悪意のあるものか、または、良性であるかの指示または可能性との間の関係および関連付けを含んでいる。例えば、ハッシュデータ262は、ハッシュ値(アンマネージImphashes)の、悪意があることの指示(例えば、対応しているものが悪意のあるものか、または、良性であるかの指示、等)へのマッピングを含んでいる。
【0071】
キャッシュデータ264は、ファイルが悪意のあるものか否かの予測に関する情報を含んでいる。一つの例として、予測キャッシュデータ264は、1つ以上のファイルが悪意のあるものか否かの指示を保管している。
【0072】
様々な実施形態に従って、メモリ220は、実行アプリケーションデータ(executing application data)270を含んでいる。実行アプリケーションデータ270は、ハッシュ関数を実行するアプリケーション、または、ファイルから情報を抽出するアプリケーションといった、アプリケーションの実行に関連して取得され、または、使用されるデータを含んでいる。実施形態において、アプリケーションは、クエリまたはタスクを受信及び/又は実行すること、実行されたクエリまたはタスクに応答する情報のレポート及び/又は構成を生成すること、かつ/あるいは、クエリまたはタスクに応答する情報をユーザに提供すること、のうちの1つ以上を実行する、1つ以上のアプリケーションを含んでいる。他のアプリケーションは、任意の他の適切なアプリケーションを含んでいる(例えば、インデックスメンテナンスアプリケーション、通信アプリケーション、機械学習モデルアプリケーション、疑わしいトラフィックを検出するためのアプリケーション、文書作成アプリケーション、レポート作成アプリケーション、ユーザインターフェイスアプリケーション、データ分析アプリケーション、異常検出アプリケーション、ユーザ認証アプリケーション、セキュリティポリシ管理/更新アプリケーション、等)。
【0073】
図3Aは、例示的な.NETファイルについての.NETヘッダに係るImplMapテーブルの図である。図3Aに示されるテーブル300には、32ビットDLLサンプルのImplMapテーブルが提供されている。いくつかの実施形態において、サンプルについてのImplMapテーブルは、32ビットDLLサンプルを、デバッガ、及び/又は、.NETアセンブリエディタに入力することによって取得される。そうしたデバッガ、及び/又は、.NETアセンブリエディタの例は、dnSpyである。様々な他のデバッガ、及び/又は、.NETアセンブリエディタが実装され得る。
【0074】
様々な実施形態に従って、システムは、ImplMapテーブルに少なくとも部分的に基づいて、#Stringsストリームへのインデックスを決定する。いくつかの実施形態において、#Stringsストリームへのインデックスは、ImportNameテーブルに対応している。#Stringsストリームは、一般的に、.NETファイルのストリングの大部分が存在する、ヌル終端ストリング(null-terminated string)のアレイに対応している。システムは、ImportNameとラベル付けされた列(column)を使用して、#Stringsストリームへのインデックスを決定する。関数の名前は、ImportName列からのインデックス値を使用して、決定され得る。テーブル300では、ImportNameの値に対応している関数の名前が情報列に提供される。
【0075】
ImportNameからのインデックス値、及び/又は、インポート関数の関数名を決定したことに応答して、システムは、対応しているライブラリ(例えば、DLL)についてのライブラリ名を決定する。いくつかの実施形態において、システムは、.NETファイルのModuleRefテーブルに少なくとも部分的に基づいて、ライブラリ(例えば、ライブラリ名)を決定する。
【0076】
図3Bは、例示的な.NETファイルに係るModuleRefテーブルの図である。図3Bに示されるテーブル310には、図3Aのテーブル300に関して分析された32ビットDLLサンプルのModuleRefテーブルが提供さていれる。いくつかの実施形態において、サンプルのModuleRefテーブルは、32ビットDLLサンプルを、デバッガ、及び/又は、.NETアセンブリエディタに入力することによって取得される。
【0077】
様々な実施形態に従って、システムは、対応しているライブラリ(例えば、ライブラリ名)を決定するために、ImplMapテーブルのImportNameフィールド(例えば、列)からのインデックス値を、インデックスとして使用する。システムは、インデックス値を、テーブル310の名前列におけるルックアップとして使用する。例えば、名前列は、#Stringsストリームに対するインデックスである。ModuleRefテーブルの情報(Info)列は、フィールドの指示を含んでいる。例えば、名前(Name)列のインデックス値0x18F3に対応しているライブラリ名は、kernel32.dllである。
【0078】
.NETファイルに対応しているアンマネージImphashの決定に関連して、システムは、アンマネージ関数のリストを決定する。アンマネージ関数のリストは、既定のフォーマットまたはシンタックスを使用して、生成される。例えば、システムは、インポート関数に対応しているライブラリ名を取得し、そして、拡張子を除去する。システムは、ライブラリが「.dll」拡張子を有するか否かを決定し、そして、有する場合に、システムは、拡張子を除去する。別の例として、システムは、任意の大文字を小文字に変換するために、関数名およびライブラリ名をフォーマットする。いくつかの実施形態において、システムは、インポート関数(例えば、アンマネージなインポート関数)の関数名と、インポート関数に対応しているライブラリ名との組み合わせに対応している、文字列を構築する。例えば、システムは、ライブラリ名を関数名に付加するやり方で文字列を構築し、そして、既定のセパレータ(例えば、「.」)が、ライブラリ名と関数名との間に含まれている。様々な実施形態に従って、システムは、<LibraryName>.<FunctionName>というフォーマットに従って、文字列を決定する。システムは、次いで、文字列を、アンマネージなインポート関数のリスト(例えば、アンマネージImphashが決定されたリスト)に追加する。
【0079】
図3Aのテーブル300および図3Bのテーブル310に対応している例示的なサンプルを使用すると、ライブラリ-関数名のペアのリストは、以下のとおりである。kernel32.createprocess、kernel32.getthreadcontext、kernel32.wow64getthreadcontext、kernel32.setthreadcontext、kernel32.wow64setthreadcontext、kernel32.readprocessmemory、kernel32.writeprocessmemory、ntdll.ntunmapviewofsection、kernel32.virtualallocex、kernel32.resumethread、kernel32.loadlibrary、kernel32.getprocaddressである。リスト内のエントリは、コンマ、セミコロン、コロンといった、既定のセパレータによって分離され得る。
【0080】
様々な実施形態に従って、.NETファイルについてのアンマネージなインポート関数のリストを決定したことに応答して、システムは、既定のハッシュ関数(例えば、MD5、SHA1、SHA-256、等)を使用して、リストのハッシュを実行する。一つの例として、図3Aの表300および図3Bの表310において分析されたサンプルを使用している、アンマネージなインポート関数のリストについてのアンマネージImphashは、(ハッシュ関数としてSHA-256を使用して)
4b386faf53783c4fd17de6c043fd31374302a4455456b4af3d78abd74c865ff8である。
【0081】
図3Cは、例示的な.NETファイルについての.NETヘッダに係るImplMapテーブルの図である。図3Cに示されるテーブル320では、32ビットEXEサンプルのImplMapテーブルが提供されている。32ビットEXEは、Visual C++コンパイラおよびC++/CLI拡張を使用して作成されたものである。いくつかの実施形態において、サンプルのImplMapテーブルは、32ビットDLLサンプルをデバッガ、及び/又は、.NETアセンブリエディタに入力することによって取得される。そうしたデバッガ、及び/又は、.NETアセンブリエディタの一つの例は、dnSpyである。様々な他のデバッガ、及び/又は、.NETアセンブリエディタが実装され得る。
【0082】
図3Cに示されるように、テーブル320の最初の3行は、情報(Info)列に含まれる値を有している。従って、最初の3行について、関数名および対応しているライブラリ名を決定するために(例えば、ライブラリ-関数名ペアを決定するため)、図3Aの表300および図3Bの表310に関連して説明されたプロセスが実行され得る。しかしながら、図3CのImplMapテーブルの残りの行は、ヌル値または0を有している。対応している関数がサンプル作成者によって使用されず、代わりに、内部で使用されるC++/CLI作成ランタイムメソッドの一部であるため、残りの行にヌル値またはゼロエントリが生じ得る。いくつかの実施形態において、システムは、ファイルのMethodDefテーブルに基づいて、関数名およびライブラリ名を決定する。例えば、システムは、ImplMapテーブル(例えば、テーブル320)のMethodForward列に含まれる値を、MethodDefテーブルに対するインデックスとして使用する。一つの例として、MemberForward値は、MethodDefテーブルへのコード化インデックスと呼ばれる(例えば、コード化インデックスは、.NET規格ECMA-335において定義されている)。
【0083】
様々な実施形態に従って、システムは、図3CのImplMapテーブルのMethodForward列の残りの行から値を取得し、MethodForward列から取得された値をデコーディングし、デコーディングされた値をMethodDefテーブルに対するインデックスとして使用する。一つの例として、MemberForward列の4番目の行からの値は0x99であり、これは76に対応するようにデコーディングされる。従って、76は、MethodDefテーブルから情報を決定するためのインデックス値として使用される。
【0084】
図3Dは、例示的な.NETファイルについてのMethodDefテーブルの図である。図3Dに示される表330には、図3Cの表320に関して分析されたサンプルのMethodDef表が提供されている。いくつかの実施形態において、サンプルについてのMethodDefテーブルは、サンプルをデバッガ、及び/又は、.NETアセンブリエディタに入力することによって取得される。
【0085】
ImplMapのMethodForward列から取得されたインデックス値を使用して、システムは、#Stringsストリームに対するインデックスを決定する。例えば、システムは、ImplMapのMethodForward列から取得されたインデックス値を、MethodDefテーブルの名前列におけるルックアップとして使用する。MethodForward列からのインデックス76に対応している名前(Name)列のインデックス値は0x1831である。表330に示されるように、MethodDef表のInfo列は、関数名が_amsg_exitであることを示している。
【0086】
図3Eは、例示的な.NETファイルについてのModuleRefテーブルの図である。図3Eに示される表340には、図3Cの表320に関して分析されたサンプルのModuleRef表が提供されている。いくつかの実施形態において、サンプルのModuleRef表は、サンプルをデバッガ、及び/又は、.NETアセンブリエディタに入力することによって取得される。
【0087】
様々な実施形態に従って、システムは、関数名(例えば、MethodDefテーブルから取得された関数名)を決定したことに応答して、ライブラリ名を決定する。例えば、システムは、ImplMapテーブル(例えば、図3Cのテーブル320)内のルックアップを実行し、そして、ImportScope列における値が残りの行について2であると決定する。システムは、ImportScope列からのインデックス値2をModuleRefテーブルのインデックスとして使用する。インデックス値2(例えば、ImplMapテーブルのImportScope列から)を使用して、ModuleRefテーブル(例えば、テーブル340)内でルックアップを実行することに応答して、システムは、名前列内の値も、また、0であると決定する。従って、システムは、ModuleRefがライブラリ名の指示を提供しないと決定する。
【0088】
様々な実施形態に従って、ModuleRefが関数に対応しているライブラリ名の指示を提供しないと決定したことに応答して、システムは、MethodDefテーブルから取り出された(retrieved)関数名を使用し、そして、PEヘッダ内のインポートテーブルを構文解析するように決定する。PEヘッダ内のインポートテーブルは、静的に使用される関数が存在する、それらのペア応しているライブラリ名(DLL)を有するファイルの全ての静的に使用される関数を含んでいる。例えば、システムは、PEヘッダ内のインポートテーブルを構文解析するために、PEヘッダパーサを使用する。PEヘッダパーサの一つの例は、Pythonでコード化されたPEヘッダパーサである、pefileである(例えば、pefileと呼ばれるオープンソースプロジェクト)。いくつかの実施形態において、システムは、MethodDefテーブルから取得された関数名と、PEヘッダのインポートテーブル内の関数との一対一(1:1)比較を実行する。一つの例として、C++で書かれたファイル(混合アセンブリのようなもの)は、インポートテーブル内の関数名としていわゆる修飾名を有することができる。これらの名前を作成するプロセスは、名前マングリング(name mangling)として知られている。そうした修飾された関数名は、関数がextern「C」として定義されている場合を除いて、C++コンパイラによって自動的に全てのC++関数に対して作成される。
【0089】
図3Fは、例示的な.NETファイルについてのImportテーブルの図である。図3Fに示される例において、テーブル350は、.NETファイルのPEヘッダに含まれるインポートテーブルである。
【0090】
図3Gは、例示的な.NETファイルについてのMethodDefテーブルの図である。示される例において、テーブル360は、.NETファイルのMethodDefテーブルである。いくつかの実施形態において、MethodDefテーブルから取得された関数名がPEヘッダに含まれるインポートテーブル内の関数名と一致するとシステムが決定したことに応答して、システムは、インポートテーブルから対応しているライブラリ名を取得する。様々な実施形態に従って、システムは、対応しているライブラリ名を取得するために、MethodDefと、PEヘッダに含まれるインポートテーブルとの間で、一致する関数名のルックアップを実行する。
【0091】
.NETファイルに対応しているアンマネージImphashの決定に関連して、システムは、アンマネージ関数のリストを決定する。アンマネージ関数のリストは、既定のフォーマットまたはシンタックスを使用して生成される。例えば、システムは、インポート関数に対応しているライブラリ名を取得し、そして、拡張子を除去する。システムは、ライブラリが「.dll」拡張子(extension)を有するか否かを決定し、そして、有する場合に、システムは拡張子を除去する。別の例として、システムは、任意の大文字を小文字に変換するために、関数名およびライブラリ名をフォーマットする。いくつかの実施形態において、システムは、インポート関数(例えば、アンマネージなインポート関数)の関数名と、インポート関数に対応しているライブラリ名との組み合わせに対応する、文字列を構築する。例えば、システムは、ライブラリ名を関数名に付加する方法で文字列を構築し、そして、既定のセパレータ(例えば、「.」)が、ライブラリ名と関数名との間に含まれる。様々な実施形態に従って、システムは、<LibraryName>.<FunctionName>というフォーマットに従った文字列を決定する。システムは、次いで、アンマネージなインポート関数のリスト(例えば、アンマネージImphashが決定されたリスト)に対して文字列を追加する。
【0092】
図3Aのテーブル300および図3Bのテーブル310に対応している例示的なサンプルを使用すると、ライブラリ-関数名ペアのリストは、以下とおりである。ntdll.zwallocatevirtualmemory、ntdll.zwfreevirtualmemory、ntdll.ldrgetprocedureaddress、msvcr80.amsg_exit、kernel32.sleep、.<crtimplementationdetails>.throwmoduleloadexception、.<crtimplementationdetails>.throwmoduleloadexception、.<crtimplementationdetails>.dodlllanguagesupportvalidation、.<crtimplementationdetails>.thrownestedmoduleloadexception、.<crtimplementationdetails>.registermoduleuninitializer、.<crtimplementationdetails>.docallbackindefaultdomain、msvcr80._cexit、msvcr80._encode_pointer、msvcr80._decode_pointer、msvcr80._encoded_null、msvcr80._frameunwindfilter。リスト内のエントリは、コンマ、セミコロン、コロン、等といった、既定のセパレータによって分離されてよい。ライブラリ関数ペア<crtimplementationdetails>.throwmoduleloadexceptionは、関数が、いわゆるオーバーロードされた関数であるため、2回含まれる。そうした関数は、同じ名前を有するが、それらのパラメータタイプ、数、または、戻り値(return value)が異なっている。従って、これらは異なる関数である。
【0093】
様々な実施形態に従って、.NETファイルについてのアンマネージなインポート関数のリストを決定したことに応答して、システムは、既定のハッシュ関数(例えば、MD5、SHA1、SHA-256、等)を使用して、リストのハッシュを実行する。一つの例として、図3Aの表300および図3Bの表310で分析されたサンプルを使用する、アンマネージなインポート関数のリストについてのアンマネージImphashは(ハッシュ関数としてSHA-256を使用して)、
cd2f27b642a85c3f0c10db4e887d504d3b4c0882f9264994367c0c9b4ea7a537である。
【0094】
いくつかの実施形態において、システムは、既定のフォーマットに従って、リストを変換またはフォーマットする。例えば、ライブラリ<->関数(<->mappingflags)名ペアのリストは、コンマで分離された文字列へと変換される。システムは、単一のリスト項目を有する(ライブラリ<->関数ペア)、コンマで分離された文字列を作成する。単一のリスト項目を有するコンマで分離された文字列を変換/作成することに応答して、システムは、そうした文字列に関して決定する(例えば、ハッシュを計算する)。
【0095】
図4は、様々な実施形態に従った、悪意のあるファイルを検出するための方法に係るフローチャートである。いくつかの実施形態において、プロセス400は、図1のシステム100及び/又は図2のシステム200によって、少なくとも部分的に実施される。いくつかの実装において、プロセス400は、ネットワーク(例えば、セキュリティエンティティ及び/又はクライアントデバイスといったネットワークエンドポイント)に対してサービスを提供することに関連するといった、1つ以上のサーバによって実装され得る。いくつかの実装において、プロセス400は、ネットワークを介して、または、ネットワークの内外で通信されるファイルに関するセキュリティポリシを実施することに関連するといった、セキュリティエンティティ(例えば、ファイアウォール)によって実装され得る。いくつかの実装において、プロセス400は、電子メール添付ファイルなどのファイルを実行すること又は開くことに関連するといった、ラップトップ、スマートフォン、パーソナルコンピュータ、等といったクライアントデバイスによって、実装され得る。
【0096】
410において、サンプルが受信される。いくつかの実施形態において、システムは、セキュリティエンティティ(例えば、ファイアウォール)、エンドポイント(例えば、クライアントデバイス)、等から、サンプル(例えば、.NETファイル)を受信する。例えば、電子メールまたはインスタントメッセージといった通信にファイルが添付されていると決定したことに応答して、セキュリティエンティティまたはエンドポイントは、ファイルをシステムに提供する(例えば、送信する)。サンプルは、ファイルが悪意のあるものか否かを決定するための要求に関連して受信され得る。
【0097】
プロセス400がセキュリティエンティティによって実施される場合に、サンプルは、適用可能なネットワークエンドポイントへのトラフィックのルーティングに関連するなどして、受信され得る(例えば、ファイアウォールは、クライアントデバイスに向けられた電子メールの電子メール添付ファイルからサンプルを取得する)。プロセス400がクライアントデバイスによって実装される場合において、サンプルは、着信/発信情報をモニタリングするアプリケーションまたはレイヤによって、受信され得る。例えば、プロセス(例えば、アプリケーション、オペレーティングシステムプロセス、等)は、電子メール添付ファイル、インスタントメッセージングプログラムを介して交換されるファイル、等をモニタリングし、そして、取得するためにバックグラウンドで実行され得る。
【0098】
420では、インポートされたAPI関数名が、サンプルの.NETヘッダを使用して、取得される。いくつかの実施形態において、サンプル、及び/又は、サンプル(例えば、.NETファイル)が悪意のあるものか否かを評価するための要求を受信したことに応答して、システムは、サンプルを解析して、サンプルの.NETヘッダに関連する(例えば、それに含まれる)情報を取得する。
【0099】
様々な実施形態に従って、システムは.NETヘッダを決定し、そして、.NETヘッダによってインポートされる(または、参照される)インポート関数を取得する。例えば、システムは、.NETファイルの.NETヘッダに少なくとも部分的に基づいて、インポートされたAPI関数名を取得する。システムは、.NETヘッダに含まれる1つ以上のデータストリーム、及び/又は、.NETヘッダに含まれる(または、.NETヘッダによって参照される)1つ以上のテーブルを取得する。例えば、システムは、.NETヘッダに含まれる#Stringsストリームを取得する。別の例として、システムは、.NETファイルから(例えば、.NETヘッダから)ImplMapを取得する。ImplMapは、.NETファイルの任意のインポートされたアンマネージ関数に関する様々な情報を含み得る。いくつかの実施形態において、システムは、.NETファイルにインポートされる、インポート関数のセット(例えば、インポートされたAPI関数名)を決定する。
【0100】
いくつかの実施形態において、システムは、.NETファイルの.NETヘッダを介してインポートされたアンマネージ関数のリストといった、.NETファイルに含まれるか、または、.NETファイルによって参照されるアンマネージ関数のセットを決定する(例えば、取得する)。例えば、システムは、.NETファイルにインポートされたインポート関数(例えば、インポートされたAPI関数名)のセットから、アンマネージインポート関数のセットを決定する。システムは、.NETヘッダに含まれる(または、.NETヘッダによって参照される)情報を使用して、アンマネージコードまたはアンマネージ関数(例えば、アンマネージ関数および対応しているライブラリ)を決定する。いくつかの実施形態において、システムは、.NETファイルにインポートされた、使用されたアンマネージwin32 API関数のセットを決定する。
【0101】
430では、アンマネージなインポートされたAPI関数名のリストのハッシュが決定される。いくつかの実施形態において、インポートされたAPI関数名を取得したことに応答して、システムは、アンマネージなインポートされたAPI関数名のリストのハッシュを決定する(例えば、計算する)。例えば、システムは、.NETファイルに対応しているアンマネージImphashを計算する。
【0102】
アンマネージなインポートされたAPI関数名のリストのハッシュを決定したことに関連して、システムは、.NETファイルにインポートされたアンマネージなインポート関数(または、アンマネージ関数の名前)、及び/又は、対応しているライブラリのセットのリストを決定し、そして、そうしたリストのハッシュを決定する。アンマネージなインポート関数、及び/又は、対応しているライブラリのセットのリストは、既定の順序に従って決定される。例えば、インポートされたアンマネージ関数、及び/又は、対応しているライブラリの順序付けは、アンマネージ関数が、.NETヘッダの要素に含まれる順序(例えば、アンマネージ関数が、.NETテーブルに含まれるか、または、それによって参照される#Stringsストリーム及び/又はテーブルに含まれる順序)に対応している。アンマネージ関数がリストに追加される(または、リストが配置される)様々な他の順序が実施され得る。システムは、既定のフォーマットまたはシンタックスに従って、リスト、及び/又は、アンマネージ関数(例えば、アンマネージ関数名、及び/又は、対応しているライブラリ)をフォーマットする。既定のフォーマットの例は、(i)小文字の英数字ストリング、(ii)ファイル拡張子の除去、(iii)ライブラリ拡張子の除去(例えば、対応しているライブラリ名からの.dllの除去)、(iv)アンマネージ関数名および対応しているライブラリの付加、および、(v)アンマネージ関数名と、対応しているライブラリとの間の事前定義されたセパレータの使用、が含まれる。いくつかの実施形態において、システムは、関数名(例えば、アンマネージ関数名)を対応しているライブラリに付加し、そして、ドットまたはピリオド(例えば、「.」)によって、対応しているライブラリから関数名を分離する。関数名およびライブラリを(例えば、「.」といった既定のセパレータを用いて)付加することによって文字列を決定したことに応答して、システムは、そうしたエントリを、アンマネージなインポート関数、及び/又は、対応しているライブラリのセットのリストに追加する。
【0103】
様々な実施形態に従って、システムは、アンマネージなインポート関数、及び/又は、対応しているライブラリのセットのリストに関してハッシュを決定する。ハッシュの決定に関連して、様々なハッシュ関数を使用することができる。ハッシュ関数の例は、SHA-256ハッシュ関数、MD5ハッシュ関数、SHA-1ハッシュ関数、等を含む。様々な他のハッシュ関数が実装され得る。システムは、ハッシュ関数を使用して、.NETファイルに対応しているアンマネージImphashを決定する。
【0104】
440では、サンプルが悪意のあるものか否かについての決定が行われる。いくつかの実施形態において、アンマネージなインポートされたAPI関数名を決定したことに応答して、システムは、サンプルが悪意のあるものか否かを決定することに関連してハッシュ(例えば、アンマネージImphash)を使用する。
【0105】
いくつかの実施形態において、システムは、.NETファイルが悪意のあるものか否かを決定することに関連して、.NETファイルに対応しているアンマネージImphashを使用する。一つの例として、.NETファイルに対応しているアンマネージImphashを決定することに応答して、システムは、アンマネージImphashが悪意のあるものとみなされるファイルのアンマネージImphashに一致するか否かを決定する。サンプル(例えば、分析されているファイル)についてのアンマネージImphashが、履歴データセット内の悪意のあるファイル(例えば、悪意のあるファイルのImphashリストに含まれるレコード)のアンマネージブラックリストと一致する場合に、システムは、サンプルを悪意のあるものと見なす。一つの例として、.NETファイルに対応しているアンマネージImphashを決定したことに応答して、システムは、アンマネージImphashが、良性と見なされるファイルのアンマネージImphashに一致するか否かを決定する。サンプル(例えば、分析されているファイル)のアンマネージImphashが、履歴データセット内の良性ファイル(例えば、良性ファイルのホワイトリストに含まれるレコード)のアンマネージImphashと一致する場合に、システムは、サンプルを良性であると見なす。いくつかの実施形態において、システムは、特定のファイル(例えば、分析されている.NETファイルに対応するアンマネージImphash)に関する情報が、履歴ファイルのデータセットに含まれるか否か、および、特定のファイル(例えば、VirusTotalTMといったサードパーティサービス)が悪意のあるものか否かを示す履歴データセットに関連する履歴情報を決定する。一つの例として、特定のファイルに関する情報が履歴ファイルおよび履歴情報のデータセットに含まれていない、または、利用可能でないと決定したことに応答して、システムは、そのファイルを良性であると見なす(例えば、そのファイルを悪意のあるものではないと見なす)。特定のファイルが悪意のあるものか否かを示す履歴ファイルに関連する履歴情報の例は、VirusTotalTM(VT)スコアに対応している。特定のファイルについてVTスコアが0より大きい場合、その特定のファイルは、サードパーティサービスによって悪意のあるものと見なされる。いくつかの実施形態において、特定のファイルが悪意のあるものか否かを示す履歴ファイルに関連する履歴情報は、ファイルが悪意のあるものか、または、悪意のあるものである可能性が高いことを示す、コミュニティベースのスコアまたはレーティング(例えば、評判スコア)といったソーシャルスコアに対応している。履歴情報(例えば、サードパーティサービス、コミュニティベースのスコア、等からのもの)は、他のベンダまたはサイバーセキュリティ組織が、特定のファイルを悪意のあるものと見なすか否かを示す。
【0106】
サンプルが悪意のあるものであるという440での決定に応答して、プロセス400は、450に進み、そこでは、サンプルが悪意のあるものであるという指示が提供される。
【0107】
440においてサンプルが悪意のあるものであると決定したことに応答して、プロセス400は、450に進み、サンプルが悪意のあるものであるという指示が提供される。例えば、サンプルが悪意のあるものであるという指示は、そこからサンプルが受信される、コンポーネントに対して提供され得る。一つの例として、システムは、サンプルが悪意のあるものであるという指示を、セキュリティエンティティに提供する。別の例として、システムは、サンプルが悪意のあるものであるという指示を、クライアントデバイスに提供する。一つの例として、セキュリティは、サンプルが悪意のあるものであるという指示を、クライアントデバイスに提供する。いくつかの実施形態において、サンプルが悪意のあるものであるという指示は、クライアントデバイスのユーザ及び/又はネットワーク管理者といったユーザに提供される。
【0108】
様々な実施形態に従って、サンプルが悪意のあるものであるという指示を受信したことに応答して、能動的な措置(active measure)が実行され得る。能動的な措置は、1つ以上のセキュリティポリシに従って(例えば、少なくとも部分的に基づいて)、実行され得る。一つの例として、1つ以上のセキュリティポリシが、ネットワーク管理者、悪意のあるファイルの検出を提供するサービスに対する顧客(例えば、組織/会社)などによって、事前設定され得る。実行され得る能動的な措置の例は、以下を含む。ファイルを隔離すること(例えば、ファイルを検疫すること(quarantining))、ファイルを削除すること、悪意のあるファイルが検出されたことをユーザに警告するようにユーザに促すこと、デバイスがファイルを開くか、または、実行しようとするときにユーザにプロンプトを提供すること、ファイルの送信をブロックすること、悪意のあるファイルのブラックリストを更新すること(例えば、ファイルが悪意のあるものであるという指示へのファイルのハッシュのマッピング、等)。
【0109】
440においてサンプルが悪意のあるものではないと決定したことに応答して、プロセス400は、460に進む。いくつかの実施形態において、サンプルが悪意のあるものではないと決定したことに応答して、ファイルが悪意のあるものではないという指示に対するファイル(または、ファイルのハッシュ/署名)のマッピングが更新される。例えば、良性ファイルのホワイトリストは、サンプル、または、ハッシュ、署名、もしくは、サンプルに関連する他の一意の識別子を含むように、更新される。
【0110】
460では、プロセス400が完了したか否かについての決定が行われる。いくつかの実施形態においては、さらなるサンプルが分析されるべきではない(例えば、ファイルについてのさらなる予測は必要とされない)と決定したことに応答して、プロセス400は、完了したと決定され、管理者は、プロセス400が一時停止または停止されるべきであることを示す、など。プロセス400が完了したと決定したことに応答して、プロセス400は、終了する。プロセス400が完了していないと決定したことに応答して、プロセス400は、410に戻る。
【0111】
図5は、様々な実施形態に従った、ファイルが悪意のあるものか否かを決定するための方法に係るフローチャートである。いくつかの実施形態において、プロセス500は、図1のシステム100及び/又は図2のシステム200によって、少なくとも部分的に、実施される。いくつかの実装において、プロセス500は、ネットワーク(例えば、セキュリティエンティティ、及び/又は、クライアントデバイスといったネットワークエンドポイント)にサービスを提供することに関連するなど、1つ以上のサーバによって実装され得る。いくつかの実装において、プロセス500は、ネットワークを介して、または、ネットワークの内外で通信されるファイルに関するセキュリティポリシを実施することに関連するなど、セキュリティエンティティ(例えば、ファイアウォール)によって実装され得る。いくつかの実装において、プロセス500は、電子メール添付ファイルといったファイルを実行すること、または、開くことに関連するなど、ラップトップ、スマートフォン、パーソナルコンピュータ、等といったクライアントデバイスによって、実装され得る。
【0112】
様々な実施形態に従って、プロセス500は、図4のプロセス400の440に関連して呼び出される。
【0113】
510では、リストのハッシュが取得される。いくつかの実施形態において、システムは、アンマネージImphashを取得する(例えば、受信する、決定する、等)。例えば、システムは、アンマネージなインポートされたAPI関数名のリストのハッシュを受信する。
【0114】
520では、ハッシュが、マッピングのクエリに関連して使用される。リスト(例えば、アンマネージImphash)のハッシュを受信したことに応答して、システムは、悪意のあるファイル及び/又は良性ファイルの履歴データセットに対してルックアップを実行する。例えば、履歴データセットは、アンマネージImphashesと、対応しているファイルが悪意のあるものであるか、または、良性であるかの指示との間の関連付けを含んでいる。
【0115】
いくつかの実施形態において、システムは、.NETファイルが悪意のあるものか否かを決定することに関連して、.NETファイルに対応しているアンマネージImphashを使用する。一つの例として、.NETファイルに対応しているアンマネージImphashを決定したことに応答して、システムは、アンマネージImphashが、悪意のあるものとみなされるファイルのアンマネージImphashに一致するか否かを決定する。一つの例として、.NETファイルに対応しているアンマネージImphashを決定したことに応答して、システムは、アンマネージImphashが、良性と見なされるファイルのアンマネージImphashに一致するか否かを決定する。いくつかの実施形態において、システムは、特定のファイルに関する情報(例えば、分析されている.NETファイルに対応しているアンマネージImphash)が、履歴ファイルのデータセット、および、特定のファイルが悪意のあるものか否かを示す履歴データセット(例えば、VirusTotalTMといったサードパーティサービス)に関連する履歴情報、に含まれるか否かを決定する。一つの例として、特定のファイルに関する情報が、履歴ファイルおよび履歴情報のデータセットに含まれていない、または、利用可能でないと決定したことに応答して、システムは、そのファイルを良性であると見なす(例えば、そのファイルを悪意のあるものではないと見なす)。特定のファイルが悪意のあるものか否かを示す履歴ファイルに関連する履歴情報の例は、VirusTotal(R)(VT)スコアに対応している。特定のファイルについてVTスコアが0より大きい場合に、その特定のファイルは、サードパーティサービスによって悪意があると見なされる。いくつかの実施形態において、特定のファイルが悪意のあるものか否かを示す履歴ファイルに関連する履歴情報は、ファイルが悪意のあるものであるか、または、悪意のあるものである可能性が高いことを示すコミュニティベースのスコアまたはレーティング(例えば、評判スコア)といったソーシャルスコアに対応している。履歴情報(例えば、サードパーティサービス、コミュニティベースのスコア、等からのもの)は、特定のファイルを、他のベンダまたはサイバーセキュリティ組織が、悪意のあるものと見なすか否かを示す。
【0116】
530では、ハッシュが悪意のあるファイルに対応していることをマッピングが示すか否かについての決定が行われる。
【0117】
530での、ハッシュが悪意のあるファイルに対応していることをマッピングが示すと決定したことに応答して、プロセス500は、540に進み、そこで、サンプルは悪意のあるものであると決定される。
【0118】
530での、ハッシュが悪意のあるファイルに対応しないことをマッピングが示していると決定したことに応答して、プロセス500は、550に進み、そこで、サンプルは悪意のあるものではないと決定される。いくつかの実施形態において、システムは、ファイルへのハッシュのマッピングが、ハッシュは悪意のあるファイルにマッピングされているという指示を、含んでいないと決定したことに応答して、サンプルが良性であると決定する。一つの例として、システムは、ハッシュが悪意のあるファイルへのハッシュのマッピングに含まれていないと決定する。別の例として、システムは、マッピングが悪意のあるファイル(または、悪意のあるファイルの指示)にマッピングされたレコードを含んでいないと決定する。
【0119】
サンプル(例えば、分析されているファイル)のアンマネージImphashが、履歴データセット内の悪意のあるファイル(例えば、悪意のあるファイルのImphashリストに含まれるレコード)のアンマネージブラックリストと一致する場合に、システムは、サンプルを悪意のあるものと見なす。
【0120】
サンプル(例えば、分析されているファイル)のアンマネージImphashが、履歴データセット内の良性ファイル(例えば、良性ファイルのホワイトリストに含まれるレコード)のアンマネージImphashと一致する場合に、システムは、サンプルを良性であると見なす。いくつかの実施形態において、特定のファイルに関する情報が履歴ファイルおよび履歴情報のデータセットに含まれていない、または、利用可能でないと決定したことに応答して、システムは、ファイルを良性であると見なす(例えば、ファイルを悪意のあるものではないと見なす)。
【0121】
560では、悪意性の結果が提供される。いくつかの実施形態において、システムは、ハッシュが悪意のあるファイルに対応しているという指示を提供する。例えば、システムは、ハッシュに対応しているファイルが悪意のあるものであるという指示を提供する。
【0122】
570では、プロセス500が完了したか否かについての決定が行われる。いくつかの実施形態において、プロセス500は、さらなるハッシュが分析されるべきではない(例えば、ファイルについてのさらなる予測が必要とされない)と決定したことに応答して、完了したと決定され、管理者は、プロセス500が一時停止または停止されるべきであることを示す、等。プロセス500が完了したと決定したことに応答して、プロセス500は、終了する。プロセス500が完了していないと決定したことに応答して、プロセス500は、510に戻る。
【0123】
図6は、様々な実施形態に従った、悪意のあるファイルを検出するための方法に係るフローチャートである。いくつかの実施形態において、プロセス600は、図1のシステム100及び/又は図2のシステム200によって、少なくとも部分的に、実施される。いくつかの実装において、プロセス600は、ネットワーク(例えば、セキュリティエンティティ、及び/又は、クライアントデバイスといったネットワークエンドポイント)にサービスを提供することに関連するなど、1つ以上のサーバによって実装され得る。いくつかの実装において、プロセス600は、ネットワークを介して、または、ネットワークの内外で通信されるファイルに関するセキュリティポリシを実施することに関連するなど、セキュリティエンティティ(例えば、ファイアウォール)によって実装され得る。いくつかの実装において、プロセス600は、電子メール添付ファイルといったファイルを実行すること、または、開くことに関連するなど、ラップトップ、スマートフォン、パーソナルコンピュータ、等といったクライアントデバイスによって、実装され得る。
【0124】
602では、サンプルが受信される。
【0125】
604では、サンプルに対応している.NETアセンブリが取得される。いくつかの実施形態において、サンプルは(例えば、ZIPフォーマット、等で)圧縮されており、そして、.NETアセンブリが圧縮ファイルから抽出される。いくつかの実施形態において、.NETアセンブリを取得することは、サンプルが.NETファイルであると決定することを含んでいる。
【0126】
606では、.NETアセンブリがModuleRefテーブルを含むか否かの決定が行われる。NETアセンブリがModuleRefテーブルを含まないと決定したことに応答して、プロセス600は、終了する。逆に、.NETアセンブリがModuleRefテーブルを含むと決定したことに応答して、プロセス600は、608に進む。
【0127】
608では、.NETアセンブリがImplMapテーブルを含むか否かの決定が行われる。NETアセンブリがImplMapテーブルを含まないと決定したことに応答して、プロセス600は、終了する。逆に、.NETアセンブリがImplMapテーブルを含むと決定したことに応答して、プロセス600は、610に進む。
【0128】
610では、ImportName値が取得される。いくつかの実施形態において、システムは、ImportNameテーブルのImportName列からImplMap値を取得する。例えば、システムは、ImportName列の該当する行(例えば、選択された行)からImportName値を取得する。いくつかの実施形態において、システムは、ImportNameの行にわたり反復して、ImportName列の各該当する行の値を取得する。
【0129】
612では、610で取得されたImportName値が0に等しいか否かの決定が行われる。610で取得されたImportName値が0に等しいと決定したことに応答して、プロセス600は、626に進む。610で取得されたImportName値が0に等しくないと決定したことに応答して、プロセス600は、614に進む。
【0130】
614では、関数名が、#Stringsストリームから取得される。いくつかの実施形態において、システムは、選択された行を使用して、.NETアセンブリの#Stringsストリームから、関数名を取得する。
【0131】
616では、ImportScope列からの値が取得される。いくつかの実施形態において、システムは、ImplMapテーブルのImportScope列から、値を取得する。システムは、.NETヘッダを使用して、ImplMapテーブルを取得する(例えば、.NETヘッダはImplMapテーブルを含む)。ImportScope列の値は、選択された行から取得される(例えば、ImportName値が取得されるImplMapテーブルの行、及び/又は、#Stringsストリーム情報が取得されるInfo列の行)。いくつかの実施形態において、ImportScope列からの値は、ModuleRefテーブルへのルックアップを実行することに関連して(例えば、対応しているライブラリの名前について)インデックスとして使用される。
【0132】
618では、値を得るために、ModuleRefテーブルにおける行インデックスとして、ImportScope値が使用される。いくつかの実施形態において、システムは、.NETヘッダを使用して、ModuleRefテーブルを取得する(例えば、.NETヘッダはModuleRefテーブルを含む)。システムは、インデックスとしてImportScope列から取得された値を使用して、ModuleRefテーブル内のルックアップを実行する。例えば、システムは、ImportScope列から取得された値を使用して、そこからシステムが名前列から値を取得するべきModuleRefテーブルの行を決定する。いくつかの実施形態において、ModuleRefテーブルの名前列から取得された値は、#Stringsストリームに対するインデックスとして使用される。
【0133】
620では、ライブラリ名が、#Stringsストリームから取得される。いくつかの実施形態において、システムは、.NETヘッダを使用して、#Stringsストリームを取得する(例えば、.NETヘッダは、#Stringsストリームを含む)。システムは、名前列から取得された値をインデックスとして使用して、#Stringsストリーム内でルックアップを実行する。
【0134】
624では、ライブラリ名-関数名のペアに対応している文字列が、リストに追加される。例えば、ライブラリ名-関数名のペアが、アンマネージなインポート関数のリストに追加される。いくつかの実施形態において、システムは、既定のフォーマットまたはシンタックスに従って、文字列を生成する。
【0135】
626では、.NETアセンブリがMethodDefテーブルを含むか否かの決定が行われる。NETアセンブリがMethodDefテーブルを含まないと決定したことに応答して、プロセス600は、6に進み、そこで、システムは、.NETヘッダが空(empty)の関数名を有していると見なす。逆に、.NETアセンブリがMethodDefテーブルを含むと決定したことに応答して、プロセス600は、628に進む。
【0136】
628では、ImplMapテーブルのMemberForwarded列から、値が取得される。システムは、.NETヘッダを使用してImplMapテーブルを取得する(例えば、.NETヘッダはImplMapテーブルを含む)。MemberForwarded列の値は、選択された行から取得される(例えば、MemberForwarded値が、そこから取得されるImplMapテーブルの行)。いくつかの実施形態において、MemberForwarded列からの値は、ModuleRefテーブルへのルックアップを実行することに関連してインデックスとして使用される(例えば、対応しているライブラリの名前について)。
【0137】
630では、値を得るために、MemberForwarded値が、ModuleRefテーブルにおける行インデックスとして使用される。いくつかの実施形態において、システムは、.NETヘッダを使用して、ModuleRefテーブルを取得する(例えば、.NETヘッダはModuleRefテーブルを含む)。システムは、インデックスとしてMemberForwarded列から取得された値を使用して、ModuleRefテーブル内のルックアップを実行する。例えば、システムは、名前列から取得された値を使用して、そこからシステムが値を取得するべきModuleRefテーブルの行を、#Stringsストリームから、決定する。
【0138】
632では、関数名が、#Stringsストリームから取得される。いくつかの実施形態において、システムは、.NETヘッダを使用して、#Stringsストリームを取得する(例えば、.NETヘッダは、#Stringsストリームを含む)。システムは、ModuleRefテーブルの名前列から取得された値をインデックスとして使用して、#Stringsストリームのルックアップを実行する。
【0139】
636では、PEヘッダが、インポートテーブルを有するか否かの決定が行われる。いくつかの実施形態において、システムは、関数名(例えば、#Stringsストリームから取得された関数名)に対応しているライブラリ名を決定することに関連して、PEヘッダが、インポートテーブルを含むか否かを決定する。
【0140】
636において、PEヘッダがインポートテーブルを有していないと決定されたことに応答して、プロセス600は、638に進み、システムは、ライブラリ名を空のライブラリ名であると見なす。逆に、636において、PEヘッダがインポートテーブルを有すると決定したことに応答して、プロセス600は、640に進み、そこで、関数名に対応しているライブラリ名が取得される。いくつかの実施形態において、システムは、関数名に対応しているライブラリ名を取得するために、インポートテーブルを構文解析する。ライブラリ名を取得したことに応答して、プロセス600は、624に進む。
【0141】
624において、関数名および対応しているライブラリ名がリストに追加された後で、プロセス600は、642に進む。
【0142】
642では、リストのポピュレーション(population)(例えば、生成)が完了したか否かについての決定が行われる。いくつかの実施形態において、リストのポピュレーション/生成は、さらなるインポート関数、及び/又は、対応しているライブラリがリストに追加されないと決定したことに応答して(例えば、さらなるインポート関数が、.NETヘッダに含まれず、または、参照されない)、完了したと決定され、管理者は、プロセス600が、一時停止または停止、等されるべきであることを示す。642における、さらなるインポート関数、及び/又は、対応しているライブラリがリストに追加されないと決定したことに応答して、プロセス600は、644に進み、システムは、リスト(例えば、アンマネージなインポート関数のリスト)のハッシュを決定する(例えば、計算する)。プロセス600が完了していないと決定したことに応答して、プロセス600は602に戻る。いくつかの実施形態において、ハッシュ(例えば、アンマネージImphash)を計算することに応答して、システムは、アンマネージImphashに少なくとも部分的に基づいて、サンプルが悪意のあるものか否かを決定する。例えば、ハッシュの計算に応答して、図5のプロセス500が呼び出される。
【0143】
いくつかの実施形態において、システムは、図7Aのプロセス700、または、図7Bのプロセス750を呼び出すことによって、リストのハッシュを決定する。
【0144】
図7Aは、様々な実施形態に従った、悪意のあるファイルを検出するための方法に係るフローチャートである。いくつかの実施形態において、プロセス700は、図1のシステム、100及び/又は、図2のシステム200によって少なくとも部分的に実施される。いくつかの実装において、プロセス600は、ネットワーク(例えば、セキュリティエンティティ、及び/又は、クライアントデバイスといったネットワークエンドポイント)にサービスを提供することに関連するなど、1つ以上のサーバによって実装され得る。いくつかの実装において、プロセス700は、ネットワークを介して、または、ネットワークの内外で通信されるファイルに関するセキュリティポリシを実施することに関連するなど、セキュリティエンティティ(例えば、ファイアウォール)によって実装され得る。いくつかの実装において、プロセス700は、電子メール添付ファイルといったファイルを実行すること、または、開くことに関連するなど、ラップトップ、スマートフォン、パーソナルコンピュータ、等といったクライアントデバイスによって実装され得る。
【0145】
702では、ライブラリ名、及び/又は、関数名が取得される。いくつかの実施形態において、.NETヘッダを使用して取得される関数名および対応しているライブラリ名は、アンマネージなインポート関数のリストを生成することに関連してなど、取得される。
【0146】
704では、ライブラリ名がファイル拡張子を有するか否かの決定が行われる。704においてライブラリ名がファイル拡張子を有すると決定したことに応答して、プロセス700は、706に進み、そこで、ファイル拡張子が除去される。704においてライブラリ名がファイル拡張子を有していないと決定されたことに応答して、プロセス700は、708に進む。
【0147】
708では、関数名およびライブラリ名がフォーマットされる。いくつかの実施形態において、システムは、既定のフォーマットまたはシンタックスに従って、ライブラリ名-関数名ペアをフォーマットする。別の例として、システムは、任意の大文字を小文字に変換するために、関数名およびライブラリ名をフォーマットする。
【0148】
710では、関数名とライブラリ名が組み合わされる。いくつかの実施形態において、システムは、インポート関数(例えば、アンマネージなインポート関数)の関数名と、インポート関数に対応しているライブラリ名との組み合わせに対応している文字列を構築する。例えば、システムは、ライブラリ名を関数名に付加するように文字列を構築し、そして、ライブラリ名と関数名との間に既定のセパレータ(例えば、「.」)が含まれる。様々な実施形態に従って、システムは、フォーマット、すなわち<LibraryName>.<FunctionName>、に従って文字列を決定する。次いで、システムは、アンマネージなインポート関数のリスト(例えば、アンマネージImphashが決定されたリスト)に文字列を追加する。
【0149】
様々な実施形態に従って、様々なフォーマットまたはシンタックスが、関数名とライブラリ名を組み合わせるシステムに関連して実装され得る。既定のフォーマットの例は、(i)小文字の英数字ストリング、(ii)ファイル拡張子の除去、(iii)ライブラリ拡張子の除去(例えば、対応しているライブラリ名からの.dllの除去)、(iv)アンマネージ関数名および対応しているライブラリの付加、および、(v)アンマネージ関数名と、対応しているライブラリとの間の事前定義されたセパレータの使用、(vi)ストリングを決定するためのライブラリ名と関数名の結合順序(例えば、<LibraryName>.<FunctionName>、または<FunctionName>.<LibraryName>)を含む。いくつかの実施形態において、システムは、関数名(例えば、アンマネージ関数名)を対応しているライブラリに付加し、そして、ドットまたはピリオド(例えば、「.」)によって、対応しているライブラリから関数名を分離する。関数名およびライブラリを(例えば、「.」といった既定のセパレータを用いて)付加することによって文字列を決定したことに応答して、システムは、そうしたエントリを、アンマネージなインポート関数、及び/又は、対応しているライブラリのセットのリストに追加する。様々な他の既定のフォーマット/シンタックスが実装され得る。
【0150】
712では、関数名とライブラリ名の組合せが、アンマネージなインポート関数のリストに追加される。
【0151】
714において、リストに追加されるべきより多くの関数が存在するか否かについての決定が行われる。例えば、システムは、そのファイルのアンマネージなインポート関数のリストに、より多くのアンマネージなインポート関数が追加されるべきか否かを決定する。714において、リストに追加されるべきさらなる関数が存在しないと決定したことに応答して、プロセス700は、716に進む。追加的な関数がリストに追加されるべきであると決定したことに応答して、プロセス700は、702に戻る。
【0152】
716では、リストに関してハッシュが計算される。様々な実施形態に従って、システムは、アンマネージなインポート関数、及び/又は、対応しているライブラリのセットのリストに関してハッシュを決定する。ハッシュの決定に関連して、様々なハッシュ関数を使用することができる。ハッシュ関数の例は、SHA-256ハッシュ関数、MD5ハッシュ関数、SHA-1ハッシュ関数、等を含む。様々な他のハッシュ関数が実装され得る。システムは、.NETファイルに対応しているアンマネージImphashを決定するために、ハッシュ関数を使用する。
【0153】
いくつかの実施形態において、システムは、既定のフォーマットに従ってリストを変換またはフォーマットする。例えば、ライブラリ<->関数(<->mappingflags)名ペアのリストは、コンマで分離された文字列へと変換される。そうした例に従って、以下のリストに対してハッシュを計算する代わりに、
kernel32.createprocess
kernel32.getthreadcontext
kernel32.wow64getthreadcontext
kernel32.setthreadcontext
kernel32.wow64setthreadcontext
kernel32.readprocessmemory

システムは、単一のリスト項目(ライブラリ<->関数ペア)を有するコンマで分離された文字列を作成する。すなわち、
「kernel32.createprocess、kernel32.getthreadcontext、kernel32.wow64getthreadcontext、kernel32.setthreadcontext、kernel32.wow64setthreadcontext、kernel32.readprocessmemory、…」。単一のリスト項目を有するコンマで分離された文字列を変換/作成することに応答して、システムは、そうした文字列に関して決定する(例えば、ハッシュを計算する)。
【0154】
718では、ハッシュが提供される。いくつかの実施形態において、システムは、ファイルが悪意のあるものか否かを決定するそうしたシステムまたはモジュールに関連するといった、別のシステムまたはモジュールにハッシュを提供する。例えば、ハッシュは、プロセス700の呼び出し(invocation)に対する応答として提供される。
【0155】
720では、プロセス700が完了したか否かについての決定が行われる。いくつかの実施形態において、プロセス700は、さらなるハッシュが計算されるべきではない(例えば、ファイルについてさらなる予測が必要とされない)と決定したことに応答して、完了したものと決定され、管理者は、プロセス700が、一時停止または停止、等されるべきであることを指示する。プロセス700が完了したと決定したことに応答して、プロセス700は、終了する。プロセス700が完了していないと決定したことに応答して、プロセス700は、702に戻る。
【0156】
図7Bは、様々な実施形態に従った、悪意のあるファイルを検出するための方法に係るフローチャートである。
【0157】
いくつかの実施形態において、プロセス700は、図1のシステム100及び/又は図2のシステム200によって少なくとも部分的に実施される。いくつかの実装において、プロセス600は、ネットワーク(例えば、セキュリティエンティティ、及び/又は、クライアントデバイスといったネットワークエンドポイント)にサービスを提供することに関連するなど、1つ以上のサーバによって実装され得る。いくつかの実装において、プロセス700は、ネットワークを介して、または、ネットワークの内外で通信されるファイルに関するセキュリティポリシを実施することに関連するなど、セキュリティエンティティ(例えば、ファイアウォール)によって実装され得る。いくつかの実装において、プロセス700は、電子メール添付ファイルといったファイルを実行すること、または、開くことに関連するなど、ラップトップ、スマートフォン、パーソナルコンピュータ、等といったクライアントデバイスによって実装され得る。
【0158】
様々な実施形態に従って、750は、アンマネージ関数の追加情報(例えば、アンマネージ関数が作成者によってコード内で定義された方法に関する情報、等)を含んでいる、750は、図7Aの700と比較してより厳密である。一つの例として、750の最終ハッシュ(final hash)も、また、より厳密であり、そして、潜在的に偽陽性の傾向(false positive prone)が、より少ない。しかしながら、欠点は、750の最終ハッシュが、700の最終ハッシュよりも少ないマルウェアサンプルにおいて潜在的にヒットすることである。
【0159】
752では、ライブラリ名、及び/又は、関数名が取得される。いくつかの実施形態において、.NETヘッダを使用して取得される、関数名および対応しているライブラリ名は、アンマネージなインポート関数のリストを生成することに関連してなど、取得される。
【0160】
754では、ライブラリ名がファイル拡張子を有するか否かの決定が行われる。754においてライブラリ名がファイル拡張子を有すると決定したことに応答して、プロセス750は、756に進み、そこで、ファイル拡張子が除去される。754においてライブラリ名がファイル拡張子を有していないと決定されたことに応答して、プロセス700は、760に進む。
【0161】
758では、関数名およびライブラリ名がフォーマットされる。いくつかの実施形態において、システムは、既定のフォーマットまたはシンタックスに従って、ライブラリ名-関数名ペアをフォーマットする。別の例として、システムは、任意の大文字を小文字に変換するために、関数名およびライブラリ名をフォーマットする。
【0162】
760では、MappingFlags値が取得される。いくつかの実施形態において、システムは、ImplMapテーブルからMappingFlags値を取得する。例えば、システムは、関数に対応しているImplMapテーブル内の行からMappingFlags値を取得する。MappingFlags値は、P/Invoke属性を含んでいる。
【0163】
762では、MappingFlags値、関数名、および、ライブラリ名が組み合わされる。いくつかの実施形態において、システムは、MappingFlags値、インポート関数(例えば、アンマネージインポート関数)の関数名、および、インポート関数に対応しているライブラリ名の組み合わせに対応する、文字列を構築する。例えば、システムは、MappingFlags値およびライブラリ名を関数名に付加するように文字列を構築し、そして、ライブラリ名と関数名との間に既定のセパレータ(例えば、「.」)が含まれる。様々な実施形態に従って、システムは、フォーマット、すなわち<LibraryName>.<FunctionName>.<MappingFlags>、に従って文字列を決定する。次いで、システムは、アンマネージなインポート関数のリスト(例えば、アンマネージImphashが決定されたリスト)に文字列を追加する。
【0164】
様々な実施形態に従って、様々なフォーマットまたはシンタックスが、関数名とライブラリ名を組み合わせるシステムに関連して実装され得る。既定のフォーマットの例は、(i)小文字の英数文字列、(ii)ファイル拡張子の除去、(iii)ライブラリ拡張子の除去(例えば、対応しているライブラリ名からの.dllの除去)、(iv)アンマネージ関数名および対応しているライブラリの付加、および、(v)アンマネージ関数名と対応しているライブラリとの間の既定のセパレータの使用、(vi)文字列を決定するためのライブラリ名と関数名の結合順序(例えば、<LibraryName>.<FunctionName>.<MappingFlags>、<FunctionName>.<LibraryName>.<MappingFlags>、等)を含む。いくつかの実施形態において、システムは、関数名(例えば、アンマネージ関数名)を対応しているライブラリに付加し、そして、ドットまたはピリオド(例えば、「.」)によって、対応しているライブラリから関数名を分離する。関数名およびライブラリを(例えば、「.」といった既定のセパレータを用いて)付加することによって文字列を決定したことに応答して、システムは、そうしたエントリを、アンマネージなインポート関数、及び/又は、対応しているライブラリのセットのリストに追加する。様々な他の既定のフォーマット/シンタックスが実装され得る。
【0165】
764では、関数名とライブラリ名の組合せが、アンマネージなインポート関数のリストに追加される。
【0166】
766では、リストに追加されるべきより多くの関数が存在するか否かについての決定が行われる。例えば、システムは、そのファイルのアンマネージなインポート関数のリストに、より多くのアンマネージなインポート関数が追加されるべきか否かを決定する。766において、リストに追加されるべきさらなる関数が存在しないと決定したことに応答して、プロセス750は、752に進む。追加的な関数がリストに追加されるべきであると決定したことに応答して、プロセス750は、752に戻る。
【0167】
768では、リストに関してハッシュが計算される。様々な実施形態に従って、システムは、アンマネージなインポート関数、及び/又は、対応しているライブラリのセットのリストに関してハッシュを決定する。ハッシュの決定に関連して、様々なハッシュ関数を使用することができる。ハッシュ関数の例は、SHA-256ハッシュ関数、MD5ハッシュ関数、SHA-1ハッシュ関数、等を含む。様々な他のハッシュ関数が実装され得る。システムは、.NETファイルに対応しているアンマネージImphashを決定するために、ハッシュ関数をする。
【0168】
いくつかの実施形態において、システムは、既定のフォーマットに従ってリストを変換またはフォーマットする。例えば、ライブラリ<->関数(<->mappingflags)名のペアのリストは、コンマで分離された文字列へと変換される。そうした例に従って、以下のリストに対してハッシュを計算する代わりに、
kernel32.createprocess
kernel32.getthreadcontext
kernel32.wow64getthreadcontext
kernel32.setthreadcontext
kernel32.wow64setthreadcontext
kernel32.readprocessmemory

システムは、単一のリスト項目(ライブラリ<->関数ペア)を有するコンマで分離された文字列を作成する。すなわち、
「kernel32.createprocess、kernel32.getthreadcontext、kernel32.wow64getthreadcontext、kernel32.setthreadcontext、kernel32.wow64setthreadcontext、kernel32.readprocessmemory、…」。単一のリスト項目を有するコンマで分離された文字列を変換/作成することに応答して、システムは、そうした文字列に関して決定する(例えば、ハッシュを計算する)。
【0169】
770では、ハッシュが提供される。いくつかの実施形態において、システムは、ファイルが悪意のあるものか否かを決定するそうしたシステムまたはモジュールに関連するといった、別のシステムまたはモジュールにハッシュを提供する。例えば、ハッシュは、プロセス750の呼び出しに対する応答として提供される。
【0170】
772では、プロセス750が完了したか否かについての決定が行われる。いくつかの実施形態において、プロセス750は、さらなるハッシュが計算されるべきではない(例えば、ファイルについてのさらなる予測が必要とされない)と決定したことに応答して、完了したと決定され、管理者は、プロセス750が、一時停止または停止、等されるべきであることを指示する。プロセス750が完了したと決定したことに応答して、プロセス750、は終了する。プロセス750が完了していないと決定したことに応答して、プロセス750は、752に戻る。
【0171】
図8は、様々な実施形態に従った、悪意のあるファイルを検出するための方法に係るフローチャートである。いくつかの実施形態において、プロセス800は、図1のシステム100及び/又は図2のシステム200によって少なくとも部分的に実施される。いくつかの実装において、プロセス800は、ネットワーク(例えば、セキュリティエンティティ、及び/又は、クライアントデバイスといったネットワークエンドポイント)にサービスを提供することに関連するなど、1つ以上のサーバによって実装され得る。いくつかの実装において、プロセス800は、ネットワークを介して、または、ネットワークの内外で通信されるファイルに関するセキュリティポリシを実施することに関連するなど、セキュリティエンティティ(例えば、ファイアウォール)によって実装され得る。いくつかの実装において、プロセス800は、電子メール添付ファイルといったファイルを実行すること、または、開くことに関連するなど、ラップトップ、スマートフォン、パーソナルコンピュータ等といったクライアントデバイスによって実装され得る。
【0172】
810では、サンプルが悪意のあるものであるという指示が受信される。いくつかの実施形態において、システムは、サンプルが悪意のあるものであるという指示、および、サンプルまたはハッシュ、署名、または、サンプルと関連付けられた他の一意の識別子を受信する。例えば、システムは、サンプルが悪意のあるものであるという指示を、セキュリティまたはマルウェアサービスといったサービスから受信し得る。システムは、サンプルが悪意のあるものであるという指示を1つ以上のサーバから受信し得る。
【0173】
様々な実施形態に従って、サンプルが悪意のあるものであるという指示は、以前に識別された悪意のあるファイルのセットに対する更新に関連して受信される。例えば、システムは、サンプルが悪意のあるものであるという指示を、悪意のあるファイルのブラックリストに対する更新として受信する。
【0174】
820では、サンプルと、サンプルが悪意のあるものであるという指示との関連付けが保管される。サンプルが悪意のあるものであるという指示を受信したことに応答して、システムは、サンプルが悪意のあるものであるという指示を、サンプルまたはサンプルに対応している識別子に関連して保管し、その後に受信されるファイルが悪意のあるものか否かのルックアップ(例えば、ローカルルックアップ)を容易にする。いくつかの実施形態において、サンプルが悪意のあるものであるという指示に関連して保管されたサンプルに対応している識別子は、ファイル(または、ファイルの一部)のハッシュ、ファイル(または、ファイルの一部)の署名、もしくは、ファイルに関連する別の一意の識別子を含んでいる。いくつかの実施形態において、サンプルが悪意のあるものか否かの指示に関連してサンプルを保管することは、サンプルが悪意のあるものか否かの指示に関連して.NETファイルについてのアンマネージImphashを保管することを含む。
【0175】
830では、トラフィックが受信される。システムは、ネットワークにおいて/にわたりトラフィックをルーティングすること、または、ファイアウォールといったネットワークの中/外へのトラフィックを仲介(mediating)すること、もしくは、電子メールトラフィックまたはインスタントメッセージトラフィックのモニタリングに関連してなど、トラフィックを取得し得る。
【0176】
840では、トラフィックが悪意のあるファイルを含むか否かの決定が実行される。いくつかの実施形態において、システムは、受信したトラフィックからファイルを取得する。例えば、システムは、ファイルを、電子メールに対する添付ファイルとして識別し、ファイルを、インスタントメッセージプログラムまたは他のファイル交換プログラム、等を介して、2つのクライアントデバイス間で交換されているものとして識別する。システムは、トラフィックからファイルを取得したことに応答して、ファイルが、悪意のあるファイルのブラックリストといった以前に識別された悪意のあるファイルのセットに含まれるファイルに対応しているか否かを決定する。ファイルが、悪意のあるファイルのブラックリストにおけるファイルのセットに含まれると決定したことに応答して、システムは、ファイルが悪意のあるものであると決定する(例えば、システムは、トラフィックが悪意のあるファイルを含んでいると、さらに決定し得る)。
【0177】
いくつかの実施形態において、システムは、ファイルが、良性ファイルのホワイトリストといった以前に識別された良性ファイルのセットに含まれるファイルに対応するか否か、を決定する。ファイルが良性ファイルのホワイトリストにおけるファイルのセットに含まれると決定したことに応答して、システムは、ファイルが悪意のあるものではないと決定する(例えば、システムは、トラフィックが悪意のあるファイルを含んでいると、さらに決定し得る)。
【0178】
様々な実施形態に従って、ファイルが、以前に識別された悪意のあるファイルのセット(例えば、悪意のあるファイルのブラックリスト)、または、以前に識別された良性ファイルのセット(例えば、良性ファイルのホワイトリスト)に含まれていないと決定したことに応答して、システムは、ファイルを悪意のない(non-malicious)ものである(例えば、良性)と見なす。
【0179】
様々な実施形態に従って、ファイルが以前に識別された悪意のあるファイルのセット(例えば、悪意のあるファイルのブラックリスト)、または、以前に識別された良性ファイルのセット(例えば、良性ファイルのホワイトリスト)に含まれていないと決定したことに応答して、システムは、ファイルが悪意のあるものか否かを決定するために、悪意のあるファイル検出器をクエリする。例えば、システムは、ファイルが悪意のあるものか否かについて、悪意のあるファイル検出器からの応答を受信するまで、ファイルを隔離することができる。悪意のあるファイル検出器は、システムによるトラフィックの処理と同時に(例えば、システムからのクエリとリアルタイムで)など、ファイルが悪意のあるものか否かの評価を実行することができる。悪意のあるファイル検出器は、図1のシステム100、及び/又は、図2のシステム200の悪意のあるファイル検出器170に対応し得る。
【0180】
いくつかの実施形態において、システムは、ファイルが以前に識別された悪意のあるファイルのセット、または、以前に識別された良性ファイルのセットに含まれるか否かを決定する。ファイルに関連付けられたハッシュを計算すること、もしくは、署名または他の一意の識別子を決定すること、および、ハッシュ、署名、または、他の一意の識別子に一致するファイルについて、以前に識別された悪意のあるファイルのセット、または、以前に識別された良性ファイルのセットにおいてルックアップを実行すること、によるものである。様々なハッシュ技法が実装され得る。様々な実施形態に従って、ファイルが以前に識別された悪意のあるファイルのセット、または、以前に識別された良性ファイルのセットに含まれるか否かを決定することは、ファイルに対応しているアンマネージImphashを決定すること、および、アンマネージImphashが履歴データセット(例えば、悪意性に係る以前の決定の結果を含むデータセット)に含まれるか否かを決定すること、を含む。
【0181】
840で、トラフィックが悪意のあるファイルを含まないと決定したことに応答して、プロセス800は、850に進み、そこで、ファイルは、悪意のないトラフィック/情報として取り扱われる。
【0182】
840で、トラフィックが悪意のあるファイルを含むと決定したことに応答して、プロセス800は、860に進み、そこで、ファイルは、悪意のあるトラフィック/情報として取り扱われる。システムは、1つ以上のセキュリティポリシといった1つ以上のポリシに少なくとも部分的に基づいて、悪意のあるトラフィック/情報を取り扱うことができる。
【0183】
様々な実施形態に従って、ファイルの悪意のあるトラフィック/情報の取り扱いは、能動的な措置を実行することを含み得る。能動的な措置は、1つ以上のセキュリティポリシに従って(例えば、少なくとも部分的に基づいて)、実行され得る。一つの例として、1つ以上のセキュリティポリシは、悪意のあるファイルの検出を提供するサービスに対して、ネットワーク管理者、顧客(例えば、組織/会社)、等によって、事前設定され得る。実行され得る能動的な措置は、以下を含む。ファイルを分離すること(例えば、ファイルを隔離すること)、ファイルを削除すること、悪意のあるファイルが検出されたことをユーザに対して警告するようにユーザに促すこと、デバイスがファイルを開く、又は、実行しようとするときに、ユーザに対してプロンプトを提供すること、ファイルの送信をブロックすること、悪意のあるファイルのブラックリストを更新すること(例えば、ファイルが悪意のあるものであるという指示へのファイルのハッシュのマッピング)、等。
【0184】
870では、プロセス800が完了したか否かについての決定が行われる。いくつかの実施形態においては、さらなるサンプルが分析されるべきではない(例えば、ファイルに対するさらなる予測が必要とされない)と決定したことに応答して、プロセス800は、完了したと決定され、管理者は、プロセス800が一時停止または停止されるべきであることを示す、など。プロセス800が完了したと決定したことに応答して、プロセス800は、終了する。プロセス800が完了していないと決定したことに応答して、プロセス800は、810に戻る。
【0185】
図9は、様々な実施形態に従った、悪意のあるファイルを検出するための方法に係るフローチャートである。いくつかの実施形態において、プロセス900は、図1のシステム100及び/又は図2のシステム200によって少なくとも部分的に実施される。いくつかの実装において、プロセス900は、ネットワークを介して、または、ネットワークの内外で通信されるファイルに関するセキュリティポリシを実施することに関連するなど、セキュリティエンティティ(例えば、ファイアウォール)、及び/又は、クライアントシステム上で実行されるアンチマルウェアアプリケーションによって実装され得る、等。いくつかの実装において、プロセス900は、電子メール添付ファイルといったファイルを実行すること、または、開くことに関連するなど、ラップトップ、スマートフォン、パーソナルコンピュータ、等といったクライアントデバイスによって、実装され得る。
【0186】
910では、ファイルが、トラフィックから取得される。システムは、ネットワーク内/ネットワークにわたるトラフィックをルーティングすること、または、ファイアウォールといったネットワークの中/外のトラフィックを仲介すること、もしくは、電子メールトラフィックまたはインスタントメッセージトラフィックのモニタに関連してなど、トラフィックを取得し得る。いくつかの実施形態において、システムは、受信したトラフィックからファイルを取得する。例えば、システムは、ファイルを電子メールに対する添付ファイルとして識別し、インスタントメッセージプログラムまたは他のファイル交換プログラムを介して2つのクライアントデバイス間で交換されているファイルとして識別する、等。
【0187】
920では、ファイルに対応している署名が決定される。いくつかの実施形態において、システムは、ハッシュを計算し、もしくは、ファイルに関連付けられた署名または他の一意の識別子を決定する。様々なハッシュ技法が実装され得る。例えば、ハッシュ技法は、ファイルについてのMD5ハッシュを決定すること(例えば、計算すること)であり得る。いくつかの実施形態において、ファイルに対応している署名を決定することは、.NETファイルのアンマネージImphashを計算することを含む。
【0188】
930では、ファイルに対応している署名が悪意のあるサンプルからの署名と一致するか否かを決定するために、悪意のあるサンプルの署名のデータセットがクエリされる。いくつかの実施形態において、システムは、ハッシュ、署名、または、他の一意の識別子に一致するファイルに対して、悪意のあるサンプルの署名についてデータセット内でルックアップを実行する。悪意のあるサンプルの署名についてのデータセットは、システムにおいてローカルに、または、システムにアクセス可能なストレージシステムにおいてリモートに保管され得る。
【0189】
様々な実施形態に従って、ファイルが、以前に識別された悪意のあるファイルのセット、または、以前に識別された良性ファイルのセットに含まれるか否かを決定することは、ファイルに対応しているアンマネージImphashを決定すること、および、アンマネージImphashが履歴データセット(例えば、悪意性に係ツ以前の決定の結果を含むデータセット)に含まれるか否かを決定すること、を含む。
【0190】
940では、ファイルが悪意のあるものか否かの決定が、ファイルの署名が悪意のあるサンプルの署名と一致するか否かに、少なくとも部分的に基づいて、行われる。いくつかの実施形態において、システムは、悪意のある署名のデータセットが、トラフィックから取得されたファイルの署名に一致するレコードを含むか否かを決定する。アンマネージImphashに対応しているファイルが悪意のあるものである(例えば、アンマネージImphashがフィールドのブラックリストに含まれる)という指示を、履歴データセットが含むと決定したことに応答して、システムは、910においてトラフィックから取得されたファイルを、悪意のあるものと見なす。
【0191】
950では、ファイルが悪意のあるものか否かに従って、ファイルが取り扱われる。いくつかの実施形態において、ファイルが悪意のあるものであると決定したことに応答して、システムは、ファイルに関して1つ以上のセキュリティポリシを適用する。いくつかの実施形態において、ファイルが悪意のあるものではないと決定したことに応答して、システムは、ファイルを良性であるとして取り扱う(例えば、ファイルは通常のトラフィックとして取り扱われる)。
【0192】
960では、プロセス900が完了したか否かについての決定が行われる。いくつかの実施形態において、プロセス900は、さらなるサンプルが分析されるべきではない(例えば、ファイルについてのさらなる予測が必要とされない)と決定したことに応答して、完了したと決定され、管理者は、プロセス900が一時停止または停止されるべきであることを示す、等。プロセス900が完了したと決定したことに応答して、プロセス900は、終了する。プロセス900が完了していないと決定したことに応答して、プロセス900は、910に戻る。
【0193】
図10は、様々な実施形態に従った、悪意のあるファイルを検出するための方法に係るフローチャートである。いくつかの実施形態において、プロセス1000は、図1のシステム100及び/又は図2のシステム200によって少なくとも部分的に実施される。いくつかの実装において、プロセス1000は、ネットワークを介して、または、ネットワークの内外で通信されるファイルに関するセキュリティポリシを実施することに関連するなど、セキュリティエンティティ(例えば、ファイアウォール)によって実装され得る。いくつかの実装において、プロセス1000は、電子メール添付ファイルといったファイルを実行すること、または、開くことに関連するなど、ラップトップ、スマートフォン、パーソナルコンピュータ、等といったクライアントデバイスによって実装され得る。
【0194】
1010では、トラフィックが受信される。システムは、ネットワークにおいて/にわたりトラフィックをルーティングすること、または、ファイアウォールといったネットワークの中/外へのトラフィックを仲介すること、もしくは、電子メールトラフィックまたはインスタントメッセージトラフィックのモニタリングに関連してなど、トラフィックを取得し得る。
【0195】
1020では、ファイルがトラフィックから取得される。いくつかの実施形態において、システムは、受信したトラフィックからファイルを取得する。例えば、システムは、ファイルを電子メールに対する添付ファイルとして識別し、インスタントメッセージプログラムまたは他のファイル交換プログラムを介して、2つのクライアントデバイス間で交換されているファイルとして識別する、等。
【0196】
1030では、ファイルの.NETヘッダを使用して、インポートされたAPI関数名が取得される。いくつかの実施形態において、1030は、図4のプロセス400の420に対応しているか、または、それと同様である。
【0197】
1040では、アンマネージ関数が決定される。いくつかの実施形態において、システムは、インポートされたAPI関数名からのアンマネージ関数のセットが、ファイルの.NETヘッダを使用して、取得されると決定する。例えば、システムは、インポートされたAPI関数のうちのどれがアンマネージ関数に対応しているかを決定する。一つの例として、プロセス600の少なくとも一部は、アンマネージ関数を決定することに関連して呼び出され得る。
【0198】
1050では、ファイルが悪意のあるものか否かについての決定が行われる。いくつかの実施形態において、システムは、アンマネージ関数(例えば、.NETヘッダを介するなどして、ファイルにインポートされたアンマネージ関数のセット)に少なくとも部分的に基づいて、ファイルが悪意のあるものか否かを決定する。いくつかの実施形態において、1050は、図4のプロセス400の440に対応しているか、または、それと同様である。いくつかの実施形態において、図5のプロセス500は、1050と関連して行われる。
【0199】
1050においてファイルが悪意のあるものであると決定したことに応答して、プロセス1000は、1060に進み、そこで、1つ以上のセキュリティポリシが、ファイルに関して適用される。いくつかの実施形態において、1060は、図8のプロセス800の860に対応しているか、または、それと同様である。その後、プロセス1000は、1070に進む。
【0200】
1050においてファイルが悪意のあるものではないと決定したことに応答して、プロセス1000は、1070に進み、そこで、ファイルは、悪意のないトラフィックとして取り扱われる。いくつかの実施形態において、1070は、図8のプロセス800の850に対応しているか、または、それと同様である。
【0201】
1080では、プロセス1000が完了したか否かについての決定が行われる。いくつかの実施形態において、プロセス1000は、さらなるサンプルが分析されるべきではない(例えば、ファイルのさらなる予測が必要とされない)、さらなるトラフィックが分析されるべきではないと決定したことに応答して、完了したと決定され、管理者は、プロセス1000が一時停止または停止されるべきであることを示す、等。プロセス1000が完了したと決定したことに応答して、プロセス1000は、終了する。プロセス1000が完了していないと決定したことに応答して、プロセス1000は、1010に戻る。
【0202】
図11は、様々な実施形態に従った、悪意のあるファイルを検出するための方法に係るフローチャートである。いくつかの実施形態において、プロセス1100は、図1のシステム100及び/又は図2のシステム200によって少なくとも部分的に実施される。いくつかの実装において、プロセス1100は、ネットワークを介して、または、ネットワークの内外で通信されるファイルに関するセキュリティポリシを実施することに関連するなど、セキュリティエンティティ(例えば、ファイアウォール)、及び/又は、クライアントシステム上で実行されるアンチマルウェアアプリケーションによって実装され得る、等。いくつかの実装において、プロセス1100は、電子メール添付ファイルといったファイルを実行すること、または、開くことに関連するなど、ラップトップ、スマートフォン、パーソナルコンピュータ、等といったクライアントデバイスによって、実装され得る。
【0203】
1110では、トラフィックが受信される。いくつかの実施形態において、1110は、図10のプロセス1000の1010に対応しているか、または、それと同様である。
【0204】
1120では、ファイルが、トラフィックから取得される。いくつかの実施形態において、1120は、図10のプロセス1000の1020に対応しているか、または、それと同様である。
【0205】
1130では、インポートされたAPI関数名が、ファイルの.NETヘッダを使用して、取得される。いくつかの実施形態において、1130は、図10のプロセス1000の1030に対応しているか、または、それと同様である。
【0206】
1140では、アンマネージなインポートされたAPI関数名のリストのハッシュが決定される。いくつかの実施形態において、システムは、インポートされたAPI関数名に少なくとも部分的に基づいて(例えば、ファイルの.NETヘッダを介して)、アンマネージ関数を決定する。いくつかの実施形態において、システムは、インポートされたAPI関数名から、アンマネージ関数のセットが、ファイルの.NETヘッダを使用して、取得されることを決定し、システムは、アンマネージ関数のリストを決定し、そして、リストに少なくとも部分的に基づいて、ハッシュを決定する。一つの例として、リストは、アンマネージ関数のセットに対応しているアンマネージ関数名を含んでいる。
【0207】
1150では、ファイルへのハッシュのマッピングがクエリされる。いくつかの実施形態において、システムは、アンマネージなインポートされたAPI関数名のリストのハッシュに少なくとも部分的に基づいて、ファイルへのハッシュのマッピングをクエリする。例えば、システムは、ファイルへのハッシュのマッピングに関してルックアップを実行して、マッピングがアンマネージなインポートされたAPI関数名のリストのハッシュを含むか否かを決定する(例えば、マッピングが決定/計算されたハッシュに対応しているレコードを含むか否かを決定する)。いくつかの実施形態において、1150は、図8のプロセス800の840、及び/又は、図9のプロセス900の930に対応しているか、または、それらと同様である。
【0208】
1160では、ファイルが悪意のあるものか否かについての決定が行われる。いくつかの実施形態において、1160は、図10のプロセス1000の1050に対応しているか、または、それと同様である。
【0209】
1160においてファイルが悪意のあるものであると決定したことに応答して、プロセス1100は、1170に進み、そこで、1つ以上のセキュリティポリシが、ファイルに関して適用される。いくつかの実施形態において、1170は、図8のプロセス800の860に対応しているか、または、それと同様である。その後、プロセス1100は、1190に進む。
【0210】
1160においてファイルが悪意のあるものではないと決定したことに応答して、プロセス1100は、1180に進み、そこで、ファイルは、悪意のないトラフィックとして取り扱われる。いくつかの実施形態において、1180は、図8のプロセス800の850に対応しているか、または、それと同様である。
【0211】
1190では、プロセス1100が完了したか否かについての決定が行われる。いくつかの実施形態において、プロセス1100は、さらなるサンプルが分析されるべきではない(例えば、ファイルのさらなる予測が必要とされない)、さらなるトラフィックが分析されるべきではないと決定したことに応答して、プロセス1000は、完了したと決定され、管理者は、プロセス1000が一時停止または停止されるべきであることを示す、など。プロセス1100が完了したと決定したことに応答して、プロセス1100は、終了する。プロセス1100が完了していないと決定したことに応答して、プロセス1100は、1110に戻る。
【0212】
本明細書で説明される実施形態の様々な例は、フローチャートに関連して説明されている。実施例は、特定の順序で実行されるいくつかのステップを含み得るが、様々な実施形態に従って、様々なステップは、様々な順序で実行されてよく、かつ/あるいは、様々なステップが、単一のステップへと、または、並列に組み合わせられてよい。
【0213】
前述の実施形態は、理解を明確にする目的で、ある程度詳細に説明されてきたが、本発明は、提供される詳細に限定されない。本発明を実施する多くの代替的な方法が存在している。開示された実施形態は、例示的であり、かつ、限定的なものではない。
図1
図2
図3A
図3B
図3C
図3D
図3E
図3F
図3G
図4
図5
図6
図7A
図7B
図8
図9
図10
図11
【手続補正書】
【提出日】2024-10-17
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
1つ以上のプロセッサ、および、メモリを含む、システムであって、
前記1つ以上のプロセッサは、
.NETファイルを含むサンプルを受信し、前記.NETファイルは、(i)マネージされるインポートされたAPI関数のセットを含むPEヘッダ、および、(ii)アンマネージなインポートされたAPI関数のセットを含むPEヘッダを含んでおり、
前記.NETファイルの.NETヘッダに少なくとも部分的に基づいて、前記アンマネージなインポートされたAPI関数の第2セットについて、アンマネージなインポートされたAPI関数名を取得し、
アンマネージなインポートされたAPI関数名のリストのハッシュを決定し、かつ、
前記アンマネージなインポートされたAPI関数名のリストのハッシュに少なくとも部分的に基づいて、前記サンプルがマルウェアであるか否かを決定する、
ように構成されており、
前記メモリは、
前記1つ以上のプロセッサに結合されており、かつ、
前記1つ以上のプロセッサに命令を与えるように構成されている、
システム。
【請求項2】
前記インポートされたAPI関数名を取得することは、
前記.NETファイルの前記.NETヘッダを構文解析すること、および、
構文解析された.NETヘッダから前記インポートされたAPI関数名を抽出すること、
を含む、請求項1に記載のシステム。
【請求項3】
前記インポートされたAPI関数名は、インデックステーブルに少なくとも部分的に基づいて、前記構文解析された.NETヘッダから抽出される、
請求項2に記載のシステム。
【請求項4】
前記インデックステーブルは、前記.NETファイルの実行に関連してインポートされる、アンマネージな方法のセットを示すImplMapテーブルを含む、
請求項3に記載のシステム。
【請求項5】
前記インポートされたAPI関数名は、少なくとも部分的にMethodDefテーブルに基づいて、前記構文解析された.NETヘッダから抽出される、
請求項2に記載のシステム。
【請求項6】
前記アンマネージなインポートされたAPI関数名のリストのハッシュを決定することは、
前記.NETヘッダに少なくとも部分的に基づいて取得された、前記インポートされたAPI関数名に基づいて、アンマネージなインポートされたAPI関数のセットを決定すること、および、
既定のハッシュ関数に少なくとも部分的に基づいて、前記アンマネージなインポートされたAPI関数名のリストのハッシュを生成すること、
を含む、請求項1に記載のシステム。
【請求項7】
前記既定のハッシュ関数は、SHA-256ハッシュアルゴリズム、MD5ハッシュアルゴリズム、および、SHA-1ハッシュアルゴリズムのうちの少なくとも1つを含む、
請求項6に記載のシステム。
【請求項8】
前記1つ以上のプロセッサは、
前記サンプルが悪意のあるものであるという指示をセキュリティエンティティに対して送信する、
ように構成されている、
請求項1に記載のシステム。
【請求項9】
前記サンプルが悪意のあるものであるという指示をセキュリティエンティティに送信することは、
悪意があると見なされるファイルのブラックリストを更新することであり、前記ファイルのブラックリストは、前記サンプルに対応している識別子を含むように更新されること、
を含む、請求項8に記載のシステム。
【請求項10】
前記セキュリティエンティティは、ファイアウォールに対応している、
請求項8に記載のシステム。
【請求項11】
前記アンマネージなインポートされたAPI関数名のリストの前記ハッシュに少なくとも部分的に基づいて、前記サンプルがマルウェアであるか否かを決定することは、サンドボックス環境において実行される、
請求項1に記載のシステム。
【請求項12】
前記アンマネージなインポートされたAPI関数名のリストのハッシュに少なくとも部分的に基づいて、前記サンプルがマルウェアであるか否かを決定することは、セキュリティエンティティにおいて実行される、
請求項1に記載のシステム。
【請求項13】
前記インポートされたAPI関数名は、ImportNameフィールドに対応している値に少なくとも部分的に基づいて取得される、
請求項1に記載のシステム。
【請求項14】
前記ImportNameフィールドに対応している値が0に等しくないと決定したことに応答して、
前記インポートされたAPI関数名を取得することは、
前記.NETファイルの#Stringsストリームに少なくとも部分的に基づいて、1つ以上のライブラリ名のセットを決定すること、
を含む、請求項13に記載のシステム。
【請求項15】
前記ImportNameフィールドに対応している値が0に等しいと決定したことに応答して、
前記インポートされたアプリケーションプログラミングインターフェイス関数名を取得することは、
MethodDefテーブルの行から値を取得すること、
前記MethodDefテーブルの行からの前記値に少なくとも部分的に基づいて、#Stringsストリームから関数名を取得すること、
前記.NETファイルのPEヘッダがインポートテーブルを含むか否かを決定すること、および、
前記.NETファイルのPEヘッダがインポートテーブルを含まないと決定したことに応答して、前記インポートテーブルに少なくとも部分的に基づいて、前記関数名に対応しているライブラリ名を決定すること、
を含む、請求項13に記載のシステム。
【請求項16】
前記インポートテーブルに少なくとも部分的に基づいて、前記関数名に対応しているライブラリ名を決定することは、
前記対応している関数名から前記ライブラリ名を取得するために、前記インポートテーブルを構文解析することを含む、
請求項15に記載のシステム。
【請求項17】
前記1つ以上のプロセッサは、さらに、
アンマネージ関数に対応しているライブラリ名がファイル拡張子を有していないことを保証し、
前記ライブラリ名および前記アンマネージ関数に少なくとも部分的に基づいて、文字列を決定し、かつ、
前記文字列を、前記アンマネージなインポートされたAPI関数名のリストに追加する、
ように構成されている、
請求項1に記載のシステム。
【請求項18】
前記文字列は、
前記ライブラリ名および前記アンマネージ関数の名前が大文字を含まないことを保証すること、および、
前記アンマネージ関数の名前と前記ライブラリ名との間に含まれる既定のセパレータを用いて、前記アンマネージ関数の名前を前記ライブラリ名に付加すること、
によって決定される、
請求項17に記載のシステム。
【請求項19】
方法であって、
.NETファイルを含むサンプルを受信するステップであり、前記.NETファイルは、(i)マネージされるインポートされたAPI関数のセットを含むPEヘッダ、および、(ii)アンマネージなインポートされたAPI関数のセットを含むPEヘッダを含んでいる、ステップと、
前記.NETファイルの.NETヘッダに少なくとも部分的に基づいて、前記アンマネージなインポートされたAPI関数の第2セットについて、アンマネージなインポートされたAPI関数名を取得するステップと、
アンマネージなインポートされたAPI関数名のリストのハッシュを決定するステップと、
前記アンマネージなインポートされたAPI関数名のリストの前記ハッシュに少なくとも部分的に基づいて、前記サンプルがマルウェアであるか否かを決定するステップと、
を含む、方法。
【請求項20】
非一時的コンピュータ可読記憶媒体に保管されたコンピュータプログラムであって、複数のコンピュータ命令を含み、
前記コンピュータ命令がプロセッサにより実行されると、コンピュータに、
.NETファイルを含むサンプルを受信するステップであり、前記.NETファイルは、(i)マネージされるインポートされたAPI関数のセットを含むPEヘッダ、および、(ii)アンマネージなインポートされたAPI関数のセットを含むPEヘッダを含んでいる、ステップと、
前記.NETファイルの.NETヘッダに少なくとも部分的に基づいて、前記アンマネージなインポートされたAPI関数の第2セットについて、アンマネージな
インポートされたAPI関数名を取得するステップと、
アンマネージなインポートされたAPI関数名のリストのハッシュを決定するステップと、
前記アンマネージなインポートされたAPI関数名のリストの前記ハッシュに少なくとも部分的に基づいて、前記サンプルがマルウェアであるか否かを決定するステップと、
を実施させる、コンピュータプログラム。
【請求項21】
前記アンマネージなインポートされたAPI関数名のリストは、アンマネージドなインポートされたAPI関数ごとに、(a)アンマネージなAPI関数名の指示と、(b)対応するライブラリ名の指示とを含んでいる、ペアを備えており、
前記アンマネージなインポートされたAPI関数名のリストをハッシュするステップは、
前記アンマネージなAPI関数名の指示、および、複数のアンマネージなAPI関数についての前記対応するライブラリ名の指示に少なくとも部分的に基づいて、前記アンマネージなインポートされたAPI関数名のリストを表す文字列を生成するステップと、
前記アンマネージなインポートされたAPI関数名のリストを表す前記文字列に基づいて、前記ハッシュを計算するステップと、
を含む、請求項1に記載のシステム。
【国際調査報告】